diff --git a/syntax.php b/syntax.php
index b2fd982..aa0aa3a 100644
--- a/syntax.php
+++ b/syntax.php
@@ -7,7 +7,7 @@
*/
if(!defined('DOKU_INC'))
- define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
require_once(DOKU_PLUGIN.'syntax.php');
@@ -23,13 +23,13 @@ define('DOKU_PLUGIN_FILELIST_OUTSIDEJAIL', -2);
*/
class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
- var $mediadir;
-
- function syntax_plugin_filelist() {
- global $conf;
-
- $this->mediadir = rp(DOKU_INC.'/'.$conf['savedir'].'/media').'/';
- }
+ var $mediadir;
+
+ function syntax_plugin_filelist() {
+ global $conf;
+
+ $this->mediadir = rp(DOKU_INC.'/'.$conf['savedir'].'/media').'/';
+ }
/**
* return some info
@@ -44,55 +44,55 @@ class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
'url' => 'http://wiki.foosel.net/snippets/dokuwiki/filelist',
);
}
-
+
function getType(){ return 'substition'; }
function getPType(){ return 'block'; }
function getSort(){ return 222; }
function connectTo($mode) {
- $this->Lexer->addSpecialPattern('\{\{filename>.+?\}\}',$mode,'plugin_filelist');
- $this->Lexer->addSpecialPattern('\{\{filelist>.+?\}\}',$mode,'plugin_filelist');
+ $this->Lexer->addSpecialPattern('\{\{filename>.+?\}\}',$mode,'plugin_filelist');
+ $this->Lexer->addSpecialPattern('\{\{filelist>.+?\}\}',$mode,'plugin_filelist');
}
/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler) {
-
+
// do not allow the syntax in comments
if (!$this->getConf('allow_in_comments') && isset($_REQUEST['comment']))
- return false;
-
+ return false;
+
$match = substr($match, 2, -2);
list($type, $match) = split('>', $match, 2);
list($pattern, $flags) = split('&', $match, 2);
-
+
if ($type == 'filename') {
- if (strpos($flags, '|') !== FALSE) {
- list($flags, $title) = split('\|', $flags);
- } else {
- $title = '';
- }
+ if (strpos($flags, '|') !== FALSE) {
+ list($flags, $title) = split('\|', $flags);
+ } else {
+ $title = '';
+ }
}
-
+
$flags = split('&', $flags);
$params = array(
- 'sort' => 'name',
- 'order' => 'asc',
- 'index' => 0,
- 'limit' => 0,
- 'offset' => 0,
- 'style' => 'list',
- 'tableheader' => 0,
- 'tableshowsize' => 0,
- 'tableshowdate' => 0,
- 'direct' => 0,
+ 'sort' => 'name',
+ 'order' => 'asc',
+ 'index' => 0,
+ 'limit' => 0,
+ 'offset' => 0,
+ 'style' => 'list',
+ 'tableheader' => 0,
+ 'tableshowsize' => 0,
+ 'tableshowdate' => 0,
+ 'direct' => 0,
);
foreach($flags as $flag) {
list($name, $value) = split('=', $flag);
$params[trim($name)] = trim($value);
}
-
+
return array($type, $pattern, $params, $title);
}
@@ -101,17 +101,17 @@ class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
*/
function render($mode, &$renderer, $data) {
global $conf;
-
+
$renderer->info['cache'] = false;
list($type, $pattern, $params, $title) = $data;
$files = $this->_create_filelist($pattern, $params);
-
+
if ($files == DOKU_PLUGIN_FILELIST_NOMATCH) {
- $renderer->doc .= '[n/a: ' . $this->getLang('error_nomatch') . ']';
- return true;
+ $renderer->doc .= '[n/a: ' . $this->getLang('error_nomatch') . ']';
+ return true;
} else if ($files == DOKU_PLUGIN_FILELIST_OUTSIDEJAIL) {
- $renderer->doc .= '[n/a: ' . $this->getLang('error_outsidejail') . ']';
- return true;
+ $renderer->doc .= '[n/a: ' . $this->getLang('error_outsidejail') . ']';
+ return true;
}
// if limit is set for a filelist, cut out the relevant slice from the files
@@ -121,110 +121,110 @@ class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
$files['ctimes'] = array_slice($files['ctimes'], $params['offset'], $params['limit']);
$files['sizes'] = array_slice($files['sizes'], $params['offset'], $params['limit']);
}
-
+
if ($mode == 'xhtml') {
-
+
switch ($type) {
- case 'filename':
- $filename = $files['names'][$params['index']];
- if ($title == '') {
- $title = basename($filename);
- }
-
- $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
- return true;
-
- case 'filelist':
- if (count($files['names']) == 0)
- break;
-
- $renderer->doc .= '
'.DOKU_LF;
- switch ($params['style']) {
- case 'list':
- $renderer->listu_open();
- foreach ($files['names'] as $filename) {
- $renderer->listitem_open(1);
- $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
- $renderer->listitem_close();
- }
- $renderer->listu_close();
- break;
-
- case 'olist':
- $renderer->listo_open();
- foreach ($files['names'] as $filename) {
- $renderer->listitem_open(1);
- $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
- $renderer->listitem_close();
- }
- $renderer->listo_close();
- break;
-
- case 'table':
- $renderer->table_open();
-
- if ($params['tableheader']) {
- $renderer->tableheader_open();
- $renderer->doc .= $this->getLang('filename');
- $renderer->tableheader_close();
+ case 'filename':
+ $filename = $files['names'][$params['index']];
+ if ($title == '') {
+ $title = basename($filename);
+ }
- if ($params['tableshowsize']) {
- $renderer->tableheader_open();
- $renderer->doc .= $this->getLang('filesize');
- $renderer->tableheader_close();
- }
+ $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
+ return true;
+
+ case 'filelist':
+ if (count($files['names']) == 0)
+ break;
+
+ $renderer->doc .= '
'.DOKU_LF;
+ switch ($params['style']) {
+ case 'list':
+ $renderer->listu_open();
+ foreach ($files['names'] as $filename) {
+ $renderer->listitem_open(1);
+ $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
+ $renderer->listitem_close();
+ }
+ $renderer->listu_close();
+ break;
+
+ case 'olist':
+ $renderer->listo_open();
+ foreach ($files['names'] as $filename) {
+ $renderer->listitem_open(1);
+ $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
+ $renderer->listitem_close();
+ }
+ $renderer->listo_close();
+ break;
+
+ case 'table':
+ $renderer->table_open();
+
+ if ($params['tableheader']) {
+ $renderer->tableheader_open();
+ $renderer->doc .= $this->getLang('filename');
+ $renderer->tableheader_close();
+
+ if ($params['tableshowsize']) {
+ $renderer->tableheader_open();
+ $renderer->doc .= $this->getLang('filesize');
+ $renderer->tableheader_close();
+ }
+
+ if ($params['tableshowdate']) {
+ $renderer->tableheader_open();
+ $renderer->doc .= $this->getLang('lastmodified');
+ $renderer->tableheader_close();
+ }
+ }
+
+ for ($i = 0; $i < count($files['names']); $i++) {
+ $filename = $files['names'][$i];
+ $filemtime = $files['mtimes'][$i];
+ $filectime = $files['ctimes'][$i];
+ $filesize = $files['sizes'][$i];
+
+ $renderer->tablerow_open();
+ $renderer->tablecell_open();
+ $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
+ $renderer->tablecell_close();
+
+ if ($params['tableshowsize']) {
+ $renderer->tablecell_open(1, 'right');
+ $renderer->doc .= $filesize;
+ $renderer->tablecell_close();
+ }
+
+ if ($params['tableshowdate']) {
+ $renderer->tablecell_open();
+ $renderer->doc .= strftime($conf['dformat'], $filemtime);
+ $renderer->tablecell_close();
+ }
+
+ $renderer->tablerow_close();
+ }
+ $renderer->table_close();
+ break;
+ }
+ $renderer->doc .= '
'.DOKU_LF;
+ return true;
- if ($params['tableshowdate']) {
- $renderer->tableheader_open();
- $renderer->doc .= $this->getLang('lastmodified');
- $renderer->tableheader_close();
- }
- }
-
- for ($i = 0; $i < count($files['names']); $i++) {
- $filename = $files['names'][$i];
- $filemtime = $files['mtimes'][$i];
- $filectime = $files['ctimes'][$i];
- $filesize = $files['sizes'][$i];
-
- $renderer->tablerow_open();
- $renderer->tablecell_open();
- $this->_create_link($filename, $files['basedir'], $files['webdir'], $params, $renderer);
- $renderer->tablecell_close();
-
- if ($params['tableshowsize']) {
- $renderer->tablecell_open(1, 'right');
- $renderer->doc .= $filesize;
- $renderer->tablecell_close();
- }
-
- if ($params['tableshowdate']) {
- $renderer->tablecell_open();
- $renderer->doc .= strftime($conf['dformat'], $filemtime);
- $renderer->tablecell_close();
- }
-
- $renderer->tablerow_close();
- }
- $renderer->table_close();
- break;
- }
- $renderer->doc .= '
'.DOKU_LF;
- return true;
-
}
}
return false;
}
-
+
/**
- * Creates the downloadlink for the given filename, based on the given
+ * Creates the downloadlink for the given filename, based on the given
* parameters, and adds it to the output of the renderer.
*/
function _create_link($filename, $basedir, $webdir, $params, &$renderer) {
- global $conf;
-
+ global $conf;
+
//prepare for formating
$link['target'] = $conf['target']['extern'];
$link['style'] = '';
@@ -232,105 +232,105 @@ class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
$link['suf'] = '';
$link['more'] = '';
$link['class'] = 'media';
- if (!$params['direct']) {
- $link['url'] = ml(':'.str_replace('/', ':', substr($filename, strlen($this->mediadir))));
- } else {
- $link['url'] = $webdir.substr($filename, strlen($basedir));
- }
+ if (!$params['direct']) {
+ $link['url'] = ml(':'.str_replace('/', ':', substr($filename, strlen($this->mediadir))));
+ } else {
+ $link['url'] = $webdir.substr($filename, strlen($basedir));
+ }
$link['name'] = basename($filename);
$link['title'] = $renderer->_xmlEntities($link['url']);
if($conf['relnofollow']) $link['more'] .= ' rel="nofollow"';
list($ext,$mime) = mimetype(basename($filename));
$link['class'] .= ' mediafile mf_'.$ext;
-
+
//output formatted
$renderer->doc .= $renderer->_formatLink($link);
}
-
+
/**
* Creates the filelist based on the given glob-pattern and
* sorting and ordering parameters.
*/
function _create_filelist($pattern, $params) {
- global $conf;
- global $ID;
-
- // we don't want to use $conf['media'] here as that path has symlinks resolved
+ global $conf;
+ global $ID;
+
+ // we don't want to use $conf['media'] here as that path has symlinks resolved
$files = array(
- 'names' => array(),
- 'mtimes' => array(),
- 'ctimes' => array(),
- 'sizes' => array(),
- 'basedir' => false,
- 'webdir' => false,
+ 'names' => array(),
+ 'mtimes' => array(),
+ 'ctimes' => array(),
+ 'sizes' => array(),
+ 'basedir' => false,
+ 'webdir' => false,
);
-
+
if (!$params['direct']) {
- // if media path is not absolute, precede it with the current namespace
- if (substr($pattern, 0, 1) != ':')
- $pattern = ':'.getNS($ID) . ':' . $pattern;
- // replace : with / and prepend mediadir
- $pattern = $this->mediadir . str_replace(':', '/', $pattern);
+ // if media path is not absolute, precede it with the current namespace
+ if (substr($pattern, 0, 1) != ':')
+ $pattern = ':'.getNS($ID) . ':' . $pattern;
+ // replace : with / and prepend mediadir
+ $pattern = $this->mediadir . str_replace(':', '/', $pattern);
} else {
- // if path is not absolute, precede it with DOKU_INC
- if (substr($pattern, 0, 1) != '/')
- $pattern = DOKU_INC.$pattern;
+ // if path is not absolute, precede it with DOKU_INC
+ if (substr($pattern, 0, 1) != '/')
+ $pattern = DOKU_INC.$pattern;
}
// get the canonicalized basedir (without resolving symlinks)
$dir = rp(dirname($pattern)).'/';
- // if the directory is non existant, we of course have no matches
+ // if the directory is non existant, we of course have no matches
if (!$dir || !file_exists($dir))
- return DOKU_PLUGIN_FILELIST_NOMATCH;
-
+ return DOKU_PLUGIN_FILELIST_NOMATCH;
+
$allowed_absolute_paths = split(',', $this->getConf('allowed_absolute_paths'));
$web_paths = split(',', $this->getConf('web_paths'));
$basedir = false;
$webdir = false;
if (count($allowed_absolute_paths) == count($web_paths)) {
- for($i = 0; $i < count($allowed_absolute_paths); $i++) {
- if (strstr($dir, trim($allowed_absolute_paths[$i])) == $dir) {
- $basedir = trim($allowed_absolute_paths[$i]);
- $webdir = trim($web_paths[$i]);
- break;
- }
- }
+ for($i = 0; $i < count($allowed_absolute_paths); $i++) {
+ if (strstr($dir, trim($allowed_absolute_paths[$i]) == $dir) {
+ $basedir = trim($allowed_absolute_paths[$i]);
+ $webdir = trim($web_paths[$i]);
+ break;
+ }
+ }
}
-
+
// $basedir is false if $dir was not in one of the allowed paths
if ($basedir === false)
- return DOKU_PLUGIN_FILELIST_OUTSIDEJAIL;
-
+ return DOKU_PLUGIN_FILELIST_OUTSIDEJAIL;
+
// glob away
$filenames = @safe_glob($pattern);
- if (!$filenames)
- return DOKU_PLUGIN_FILELIST_NOMATCH;
+ if (!$filenames)
+ return DOKU_PLUGIN_FILELIST_NOMATCH;
- // retrieve fileinformation and filter out directories
- $files['basedir'] = $basedir;
- $files['webdir'] = $webdir;
+ // retrieve fileinformation and filter out directories
+ $files['basedir'] = $basedir;
+ $files['webdir'] = $webdir;
foreach ($filenames as $filename) {
- if ($filename[0]=='.') continue; // exclude hidden files
+ if ($filename[0]=='.') continue; // exclude hidden files
$filename = $dir.$filename;
if (is_dir($filename)) continue; // exclude directories
if (!$params['direct']) { // exclude prohibited media files via ACLs
- $mid = str_replace('/', ':', substr($filename, strlen($this->mediadir)));
- $perm = auth_quickaclcheck($mid);
- if ($perm < AUTH_READ) continue;
+ $mid = str_replace('/', ':', substr($filename, strlen($this->mediadir)));
+ $perm = auth_quickaclcheck($mid);
+ if ($perm < AUTH_READ) continue;
} else { // exclude not readable files
- if (!is_readable($filename)) continue;
+ if (!is_readable($filename)) continue;
}
-
+
array_push($files['names'], $filename);
array_push($files['mtimes'], filemtime($filename));
array_push($files['ctimes'], filectime($filename));
array_push($files['sizes'], filesize($filename));
}
-
- $reverseflag = false;
+
+ $reverseflag = false;
if ($params['sort'] == 'mtime') {
array_multisort($files['mtimes'], $files['names'], $files['ctimes'], $files['sizes']);
if ($params['order'] == 'asc') $reverseflag = true;
@@ -344,21 +344,19 @@ class syntax_plugin_filelist extends DokuWiki_Syntax_Plugin {
array_multisort($files['names'], $files['ctimes'], $files['mtimes'], $files['sizes']);
if ($params['order'] == 'desc') $reverseflag = true;
}
-
+
if ($reverseflag) {
- $files['names'] = array_reverse($files['names']);
- $files['ctimes'] = array_reverse($files['ctimes']);
- $files['mtimes'] = array_reverse($files['mtimes']);
- $files['sizes'] = array_reverse($files['sizes']);
+ $files['names'] = array_reverse($files['names']);
+ $files['ctimes'] = array_reverse($files['ctimes']);
+ $files['mtimes'] = array_reverse($files['mtimes']);
+ $files['sizes'] = array_reverse($files['sizes']);
}
-
+
if (count($files['names']) > 0)
- return $files;
+ return $files;
else
- return DOKU_PLUGIN_FILELIST_NOMATCH;
+ return DOKU_PLUGIN_FILELIST_NOMATCH;
}
-
-
}
/**
@@ -386,12 +384,12 @@ function safe_glob($pattern, $flags=0) {
return $glob;
} else {
return false;
- }
+ }
}
/**
* Replacement for fnmatch() for windows systems.
- *
+ *
* @author jk at ricochetsolutions dot com
* @see
*/
@@ -403,7 +401,7 @@ if(!function_exists('fnmatch')) {
/**
* Canonicalizes a given path. A bit like realpath, but without the resolving of symlinks.
- *
+ *
* @author anonymous
* @see
*/