aboutsummaryrefslogtreecommitdiff
path: root/vendors/dokuwiki/lib/exe
diff options
context:
space:
mode:
Diffstat (limited to 'vendors/dokuwiki/lib/exe')
-rw-r--r--vendors/dokuwiki/lib/exe/ajax.php370
-rw-r--r--vendors/dokuwiki/lib/exe/css.php330
-rw-r--r--vendors/dokuwiki/lib/exe/detail.php58
-rw-r--r--vendors/dokuwiki/lib/exe/fetch.php173
-rw-r--r--vendors/dokuwiki/lib/exe/index.html12
-rw-r--r--vendors/dokuwiki/lib/exe/indexer.php375
-rw-r--r--vendors/dokuwiki/lib/exe/js.php397
-rw-r--r--vendors/dokuwiki/lib/exe/mediamanager.php105
-rw-r--r--vendors/dokuwiki/lib/exe/multipleUpload.swfbin64561 -> 0 bytes
-rw-r--r--vendors/dokuwiki/lib/exe/opensearch.php38
-rw-r--r--vendors/dokuwiki/lib/exe/xmlrpc.php921
11 files changed, 0 insertions, 2779 deletions
diff --git a/vendors/dokuwiki/lib/exe/ajax.php b/vendors/dokuwiki/lib/exe/ajax.php
deleted file mode 100644
index 4618abd71..000000000
--- a/vendors/dokuwiki/lib/exe/ajax.php
+++ /dev/null
@@ -1,370 +0,0 @@
-<?php
-/**
- * DokuWiki AJAX call handler
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-
-//fix for Opera XMLHttpRequests
-if(!count($_POST) && $HTTP_RAW_POST_DATA){
- parse_str($HTTP_RAW_POST_DATA, $_POST);
-}
-
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/common.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/auth.php');
-//close sesseion
-session_write_close();
-
-header('Content-Type: text/html; charset=utf-8');
-
-
-//call the requested function
-if(isset($_POST['call']))
- $call = $_POST['call'];
-else if(isset($_GET['call']))
- $call = $_GET['call'];
-else
- exit;
-
-$callfn = 'ajax_'.$call;
-
-if(function_exists($callfn)){
- $callfn();
-}else{
- $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
- if ($evt->advise_before()) {
- print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
- exit;
- }
- $evt->advise_after();
- unset($evt);
-}
-
-/**
- * Searches for matching pagenames
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_qsearch(){
- global $conf;
- global $lang;
-
- $query = cleanID($_POST['q']);
- if(empty($query)) $query = cleanID($_GET['q']);
- if(empty($query)) return;
-
- require_once(DOKU_INC.'inc/html.php');
- require_once(DOKU_INC.'inc/fulltext.php');
-
- $data = array();
- $data = ft_pageLookup($query);
-
- if(!count($data)) return;
-
- print '<strong>'.$lang['quickhits'].'</strong>';
- print '<ul>';
- foreach($data as $id){
- print '<li>';
- $ns = getNS($id);
- if($ns){
- $name = shorten(noNS($id), ' ('.$ns.')',30);
- }else{
- $name = $id;
- }
- print html_wikilink(':'.$id,$name);
- print '</li>';
- }
- print '</ul>';
-}
-
-/**
- * Support OpenSearch suggestions
- *
- * @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
- * @author Mike Frysinger <vapier@gentoo.org>
- */
-function ajax_suggestions() {
- global $conf;
- global $lang;
-
- $query = cleanID($_POST['q']);
- if(empty($query)) $query = cleanID($_GET['q']);
- if(empty($query)) return;
-
- require_once(DOKU_INC.'inc/html.php');
- require_once(DOKU_INC.'inc/fulltext.php');
- require_once(DOKU_INC.'inc/JSON.php');
-
- $data = array();
- $data = ft_pageLookup($query);
- if(!count($data)) return;
-
- // limit results to 15 hits
- $data = array_slice($data, 0, 15);
- $data = array_map('trim',$data);
- $data = array_map('noNS',$data);
- $data = array_unique($data);
- sort($data);
-
- /* now construct a json */
- $suggestions = array(
- $query, // the original query
- $data, // some suggestions
- array(), // no description
- array() // no urls
- );
- $json = new JSON();
-
- header('Content-Type: application/x-suggestions+json');
- print $json->encode($suggestions);
-}
-
-/**
- * Refresh a page lock and save draft
- *
- * Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_lock(){
- global $conf;
- global $lang;
- $id = cleanID($_POST['id']);
- if(empty($id)) return;
-
- if(!checklock($id)){
- lock($id);
- echo 1;
- }
-
- if($conf['usedraft'] && $_POST['wikitext']){
- $client = $_SERVER['REMOTE_USER'];
- if(!$client) $client = clientIP(true);
-
- $draft = array('id' => $id,
- 'prefix' => $_POST['prefix'],
- 'text' => $_POST['wikitext'],
- 'suffix' => $_POST['suffix'],
- 'date' => $_POST['date'],
- 'client' => $client,
- );
- $cname = getCacheName($draft['client'].$id,'.draft');
- if(io_saveFile($cname,serialize($draft))){
- echo $lang['draftdate'].' '.dformat();
- }
- }
-
-}
-
-/**
- * Delete a draft
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_draftdel(){
- $id = cleanID($_POST['id']);
- if(empty($id)) return;
-
- $client = $_SERVER['REMOTE_USER'];
- if(!$client) $client = clientIP(true);
-
- $cname = getCacheName($client.$id,'.draft');
- @unlink($cname);
-}
-
-/**
- * Return subnamespaces for the Mediamanager
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_medians(){
- global $conf;
- require_once(DOKU_INC.'inc/search.php');
- require_once(DOKU_INC.'inc/media.php');
-
- // wanted namespace
- $ns = cleanID($_POST['ns']);
- $dir = utf8_encodeFN(str_replace(':','/',$ns));
-
- $lvl = count(explode(':',$ns));
-
- $data = array();
- search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
- foreach($data as $item){
- $item['level'] = $lvl+1;
- echo media_nstree_li($item);
- echo media_nstree_item($item);
- echo '</li>';
- }
-}
-
-/**
- * Return list of files for the Mediamanager
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_medialist(){
- global $conf;
- global $NS;
- require_once(DOKU_INC.'inc/media.php');
- require_once(DOKU_INC.'inc/template.php');
-
- $NS = $_POST['ns'];
- tpl_mediaContent(true);
-}
-
-/**
- * Return list of search result for the Mediamanager
- *
- * @author Tobias Sarnowski <sarnowski@cosmocode.de>
- */
-function ajax_mediasearchlist(){
- global $conf;
- require_once(DOKU_INC.'inc/media.php');
-
- media_searchlist($_POST['ns']);
-}
-
-/**
- * Return sub index for index view
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function ajax_index(){
- global $conf;
- require_once(DOKU_INC.'inc/search.php');
- require_once(DOKU_INC.'inc/html.php');
-
- // wanted namespace
- $ns = cleanID($_POST['idx']);
- $dir = utf8_encodeFN(str_replace(':','/',$ns));
-
- $lvl = count(explode(':',$ns));
-
- $data = array();
- search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
- foreach($data as $item){
- $item['level'] = $lvl+1;
- echo html_li_index($item);
- echo '<div class="li">';
- echo html_list_index($item);
- echo '</div>';
- echo '</li>';
- }
-}
-
-/**
- * List matching namespaces and pages for the link wizard
- *
- * @author Andreas Gohr <gohr@cosmocode.de>
- */
-function ajax_linkwiz(){
- global $conf;
- global $lang;
- require_once(DOKU_INC.'inc/html.php');
-
- $q = ltrim($_POST['q'],':');
- $id = noNS($q);
- $ns = getNS($q);
-
- $ns = cleanID($ns);
- $id = cleanID($id);
-
- $nsd = utf8_encodeFN(str_replace(':','/',$ns));
- $idd = utf8_encodeFN(str_replace(':','/',$id));
-
- $data = array();
- if($q && !$ns){
-
- // use index to lookup matching pages
- require_once(DOKU_INC.'inc/fulltext.php');
- require_once(DOKU_INC.'inc/parserutils.php');
- $pages = array();
- $pages = ft_pageLookup($id,false);
-
- // result contains matches in pages and namespaces
- // we now extract the matching namespaces to show
- // them seperately
- $dirs = array();
- $count = count($pages);
- for($i=0; $i<$count; $i++){
- if(strpos(noNS($pages[$i]),$id) === false){
- // match was in the namespace
- $dirs[getNS($pages[$i])] = 1; // assoc array avoids dupes
- }else{
- // it is a matching page, add it to the result
- $data[] = array(
- 'id' => $pages[$i],
- 'title' => p_get_first_heading($pages[$i],false),
- 'type' => 'f',
- );
- }
- unset($pages[$i]);
- }
- foreach($dirs as $dir => $junk){
- $data[] = array(
- 'id' => $dir,
- 'type' => 'd',
- );
- }
-
- }else{
-
- require_once(DOKU_INC.'inc/search.php');
- $opts = array(
- 'depth' => 1,
- 'listfiles' => true,
- 'listdirs' => true,
- 'pagesonly' => true,
- 'firsthead' => true,
- );
- if($id) $opts['filematch'] = '^.*\/'.$id;
- if($id) $opts['dirmatch'] = '^.*\/'.$id;
- search($data,$conf['datadir'],'search_universal',$opts,$nsd);
-
- // add back to upper
- if($ns){
- array_unshift($data,array(
- 'id' => getNS($ns),
- 'type' => 'u',
- ));
- }
- }
-
- // fixme sort results in a useful way ?
-
- if(!count($data)){
- echo $lang['nothingfound'];
- exit;
- }
-
- // output the found data
- $even = 1;
- foreach($data as $item){
- $even *= -1; //zebra
-
- if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
- $link = wl($item['id']);
-
- echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
-
-
- if($item['type'] == 'u'){
- $name = $lang['upperns'];
- }else{
- $name = htmlspecialchars($item['id']);
- }
-
- echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
-
- if($item['title']){
- echo '<span>'.htmlspecialchars($item['title']).'</span>';
- }
- echo '</div>';
- }
-
-}
-
-//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/vendors/dokuwiki/lib/exe/css.php b/vendors/dokuwiki/lib/exe/css.php
deleted file mode 100644
index 2cb383de0..000000000
--- a/vendors/dokuwiki/lib/exe/css.php
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-/**
- * DokuWiki StyleSheet creator
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
-if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
-require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/httputils.php');
-require_once(DOKU_INC.'inc/io.php');
-require_once(DOKU_INC.'inc/confutils.php');
-
-// Main (don't run when UNIT test)
-if(!defined('SIMPLE_TEST')){
- header('Content-Type: text/css; charset=utf-8');
- css_out();
-}
-
-
-// ---------------------- functions ------------------------------
-
-/**
- * Output all needed Styles
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_out(){
- global $conf;
- global $lang;
- $style = '';
- if (isset($_REQUEST['s']) &&
- in_array($_REQUEST['s'], array('all', 'print', 'feed'))) {
- $style = $_REQUEST['s'];
- }
-
- $tpl = trim(preg_replace('/[^\w-]+/','',$_REQUEST['t']));
- if($tpl){
- $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/';
- $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/';
- }else{
- $tplinc = DOKU_TPLINC;
- $tpldir = DOKU_TPL;
- }
-
- // The generated script depends on some dynamic options
- $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$style,'.css');
-
- // load template styles
- $tplstyles = array();
- if(@file_exists($tplinc.'style.ini')){
- $ini = parse_ini_file($tplinc.'style.ini',true);
- foreach($ini['stylesheets'] as $file => $mode){
- $tplstyles[$mode][$tplinc.$file] = $tpldir;
- }
- }
-
- // Array of needed files and their web locations, the latter ones
- // are needed to fix relative paths in the stylesheets
- $files = array();
- //if (isset($tplstyles['all'])) $files = array_merge($files, $tplstyles['all']);
- if(!empty($style)){
- $files[DOKU_INC.'lib/styles/'.$style.'.css'] = DOKU_MEDIA.'lib/styles/';
- // load plugin, template, user styles
- $files = array_merge($files, css_pluginstyles($style));
- if (isset($tplstyles[$style])) $files = array_merge($files, $tplstyles[$style]);
- $files[DOKU_CONF.'user'.$style.'.css'] = DOKU_MEDIA;
- }else{
- $files[DOKU_INC.'lib/styles/style.css'] = DOKU_MEDIA.'lib/styles/';
- // load plugin, template, user styles
- $files = array_merge($files, css_pluginstyles('screen'));
- if (isset($tplstyles['screen'])) $files = array_merge($files, $tplstyles['screen']);
- if($lang['direction'] == 'rtl'){
- if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
- }
- $files[DOKU_CONF.'userstyle.css'] = DOKU_BASE;
- }
-
- // check cache age & handle conditional request
- header('Cache-Control: public, max-age=3600');
- header('Pragma: public');
- if(css_cacheok($cache,array_keys($files),$tplinc)){
- http_conditionalRequest(filemtime($cache));
- if($conf['allowdebug']) header("X-CacheUsed: $cache");
-
- // finally send output
- if ($conf['gzip_output'] && http_gzip_valid($cache)) {
- header('Vary: Accept-Encoding');
- header('Content-Encoding: gzip');
- readfile($cache.".gz");
- } else {
- if (!http_sendfile($cache)) readfile($cache);
- }
-
- return;
- } else {
- http_conditionalRequest(time());
- }
-
- // start output buffering and build the stylesheet
- ob_start();
-
- // print the default classes for interwiki links and file downloads
- css_interwiki();
- css_filetypes();
-
- // load files
- foreach($files as $file => $location){
- print css_loadfile($file, $location);
- }
-
- // end output buffering and get contents
- $css = ob_get_contents();
- ob_end_clean();
-
- // apply style replacements
- $css = css_applystyle($css,$tplinc);
-
- // compress whitespace and comments
- if($conf['compress']){
- $css = css_compress($css);
- }
-
- // save cache file
- io_saveFile($cache,$css);
- if(function_exists('gzopen')) io_saveFile("$cache.gz",$css);
-
- // finally send output
- if ($conf['gzip_output']) {
- header('Vary: Accept-Encoding');
- header('Content-Encoding: gzip');
- print gzencode($css,9,FORCE_GZIP);
- } else {
- print $css;
- }
-}
-
-/**
- * Checks if a CSS Cache file still is valid
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_cacheok($cache,$files,$tplinc){
- global $config_cascade;
-
- if(isset($_REQUEST['purge'])) return false; //support purge request
-
- $ctime = @filemtime($cache);
- if(!$ctime) return false; //There is no cache
-
- // some additional files to check
- $files = array_merge($files, getConfigFiles('main'));
- $files[] = $tplinc.'style.ini';
- $files[] = __FILE__;
-
- // now walk the files
- foreach($files as $file){
- if(@filemtime($file) > $ctime){
- return false;
- }
- }
- return true;
-}
-
-/**
- * Does placeholder replacements in the style according to
- * the ones defined in a templates style.ini file
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_applystyle($css,$tplinc){
- if(@file_exists($tplinc.'style.ini')){
- $ini = parse_ini_file($tplinc.'style.ini',true);
- $css = strtr($css,$ini['replacements']);
- }
- return $css;
-}
-
-/**
- * Prints classes for interwikilinks
- *
- * Interwiki links have two classes: 'interwiki' and 'iw_$name>' where
- * $name is the identifier given in the config. All Interwiki links get
- * an default style with a default icon. If a special icon is available
- * for an interwiki URL it is set in it's own class. Both classes can be
- * overwritten in the template or userstyles.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_interwiki(){
-
- // default style
- echo 'a.interwiki {';
- echo ' background: transparent url('.DOKU_MEDIA.'lib/images/interwiki.png) 0px 1px no-repeat;';
- echo ' padding-left: 16px;';
- echo '}';
-
- // additional styles when icon available
- $iwlinks = getInterwiki();
- foreach(array_keys($iwlinks) as $iw){
- $class = preg_replace('/[^_\-a-z0-9]+/i','_',$iw);
- if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.png')){
- echo "a.iw_$class {";
- echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.png)';
- echo '}';
- }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.gif')){
- echo "a.iw_$class {";
- echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.gif)';
- echo '}';
- }
- }
-}
-
-/**
- * Prints classes for file download links
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_filetypes(){
-
- // default style
- echo 'a.mediafile {';
- echo ' background: transparent url('.DOKU_MEDIA.'lib/images/fileicons/file.png) 0px 1px no-repeat;';
- echo ' padding-left: 18px;';
- echo ' padding-bottom: 1px;';
- echo '}';
-
- // additional styles when icon available
- // scan directory for all icons
- $exts = array();
- if($dh = opendir(DOKU_INC.'lib/images/fileicons')){
- while(false !== ($file = readdir($dh))){
- if(preg_match('/([_\-a-z0-9]+(?:\.[_\-a-z0-9]+)*?)\.(png|gif)/i',$file,$match)){
- $ext = strtolower($match[1]);
- $type = '.'.strtolower($match[2]);
- if($ext!='file' && (!isset($exts[$ext]) || $type=='.png')){
- $exts[$ext] = $type;
- }
- }
- }
- closedir($dh);
- }
- foreach($exts as $ext=>$type){
- $class = preg_replace('/[^_\-a-z0-9]+/','_',$ext);
- echo "a.mf_$class {";
- echo ' background-image: url('.DOKU_MEDIA.'lib/images/fileicons/'.$ext.$type.')';
- echo '}';
- }
-}
-
-/**
- * Loads a given file and fixes relative URLs with the
- * given location prefix
- */
-function css_loadfile($file,$location=''){
- if(!@file_exists($file)) return '';
- $css = io_readFile($file);
- if(!$location) return $css;
-
- $css = preg_replace('#(url\([ \'"]*)((?!/|http://|https://| |\'|"))#','\\1'.$location.'\\3',$css);
- return $css;
-}
-
-
-/**
- * Returns a list of possible Plugin Styles (no existance check here)
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_pluginstyles($mode='screen'){
- global $lang;
- $list = array();
- $plugins = plugin_list();
- foreach ($plugins as $p){
- if($mode == 'all'){
- $list[DOKU_PLUGIN."$p/all.css"] = DOKU_BASE."lib/plugins/$p/";
- }elseif($mode == 'print'){
- $list[DOKU_PLUGIN."$p/print.css"] = DOKU_BASE."lib/plugins/$p/";
- }elseif($mode == 'feed'){
- $list[DOKU_PLUGIN."$p/feed.css"] = DOKU_BASE."lib/plugins/$p/";
- }else{
- $list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
- $list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
- }
- if($lang['direction'] == 'rtl'){
- $list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
- }
- }
- return $list;
-}
-
-/**
- * Very simple CSS optimizer
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_compress($css){
- //strip comments through a callback
- $css = preg_replace_callback('#(/\*)(.*?)(\*/)#s','css_comment_cb',$css);
-
- //strip (incorrect but common) one line comments
- $css = preg_replace('/(?<!:)\/\/.*$/m','',$css);
-
- // strip whitespaces
- $css = preg_replace('![\r\n\t ]+!',' ',$css);
- $css = preg_replace('/ ?([:;,{}\/]) ?/','\\1',$css);
-
- // shorten colors
- $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css);
-
- return $css;
-}
-
-/**
- * Callback for css_compress()
- *
- * Keeps short comments (< 5 chars) to maintain typical browser hacks
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function css_comment_cb($matches){
- if(strlen($matches[2]) > 4) return '';
- return $matches[0];
-}
-
-//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/vendors/dokuwiki/lib/exe/detail.php b/vendors/dokuwiki/lib/exe/detail.php
deleted file mode 100644
index f30e039d4..000000000
--- a/vendors/dokuwiki/lib/exe/detail.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
- if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
- define('DOKU_MEDIADETAIL',1);
- require_once(DOKU_INC.'inc/init.php');
- require_once(DOKU_INC.'inc/common.php');
- require_once(DOKU_INC.'inc/lang/en/lang.php');
- require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
- require_once(DOKU_INC.'inc/JpegMeta.php');
- require_once(DOKU_INC.'inc/html.php');
- require_once(DOKU_INC.'inc/template.php');
- require_once(DOKU_INC.'inc/auth.php');
- //close session
- session_write_close();
-
- $IMG = getID('media');
- $ID = cleanID($_REQUEST['id']);
-
- if($conf['allowdebug'] && $_REQUEST['debug']){
- print '<pre>';
- foreach(explode(' ','basedir userewrite baseurl useslash') as $x){
- print '$'."conf['$x'] = '".$conf[$x]."';\n";
- }
- foreach(explode(' ','DOCUMENT_ROOT HTTP_HOST SCRIPT_FILENAME PHP_SELF '.
- 'REQUEST_URI SCRIPT_NAME PATH_INFO PATH_TRANSLATED') as $x){
- print '$'."_SERVER['$x'] = '".$_SERVER[$x]."';\n";
- }
- print "getID('media'): ".getID('media')."\n";
- print "getID('media',false): ".getID('media',false)."\n";
- print '</pre>';
- }
-
- $ERROR = false;
- // check image permissions
- $AUTH = auth_quickaclcheck($IMG);
- if($AUTH >= AUTH_READ){
- // check if image exists
- $SRC = mediaFN($IMG);
- if(!@file_exists($SRC)){
- //doesn't exist!
-
- }
- }else{
- // no auth
- $ERROR = p_locale_xhtml('denied');
- }
-
- /*if(!$ERROR){
- // load EXIF/IPTC/image details
- $INFO = array();
- $INFO['std']['']
- imagesize
- }*/
-
-
- //start output and load template
- header('Content-Type: text/html; charset=utf-8');
- include(template('detail.php'));
-
diff --git a/vendors/dokuwiki/lib/exe/fetch.php b/vendors/dokuwiki/lib/exe/fetch.php
deleted file mode 100644
index 11877ef36..000000000
--- a/vendors/dokuwiki/lib/exe/fetch.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/**
- * DokuWiki media passthrough file
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-
- if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
- define('DOKU_DISABLE_GZIP_OUTPUT', 1);
- require_once(DOKU_INC.'inc/init.php');
- require_once(DOKU_INC.'inc/common.php');
- require_once(DOKU_INC.'inc/media.php');
- require_once(DOKU_INC.'inc/pageutils.php');
- require_once(DOKU_INC.'inc/httputils.php');
- require_once(DOKU_INC.'inc/confutils.php');
- require_once(DOKU_INC.'inc/auth.php');
-
- //close sesseion
- session_write_close();
-
- $mimetypes = getMimeTypes();
-
- //get input
- $MEDIA = stripctl(getID('media',false)); // no cleaning except control chars - maybe external
- $CACHE = calc_cache($_REQUEST['cache']);
- $WIDTH = (int) $_REQUEST['w'];
- $HEIGHT = (int) $_REQUEST['h'];
- list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
- if($EXT === false){
- $EXT = 'unknown';
- $MIME = 'application/octet-stream';
- $DL = true;
- }
-
- //media to local file
- if(preg_match('#^(https?)://#i',$MEDIA)){
- //check hash
- if(substr(md5(auth_cookiesalt().$MEDIA),0,6) != $_REQUEST['hash']){
- header("HTTP/1.0 412 Precondition Failed");
- print 'Precondition Failed';
- exit;
- }
- //handle external images
- if(strncmp($MIME,'image/',6) == 0) $FILE = media_get_from_URL($MEDIA,$EXT,$CACHE);
- if(!$FILE){
- //download failed - redirect to original URL
- header('Location: '.$MEDIA);
- exit;
- }
- }else{
- $MEDIA = cleanID($MEDIA);
- if(empty($MEDIA)){
- header("HTTP/1.0 400 Bad Request");
- print 'Bad request';
- exit;
- }
-
- //check permissions (namespace only)
- if(auth_quickaclcheck(getNS($MEDIA).':X') < AUTH_READ){
- header("HTTP/1.0 401 Unauthorized");
- //fixme add some image for imagefiles
- print 'Unauthorized';
- exit;
- }
- $FILE = mediaFN($MEDIA);
- }
-
- //check file existance
- if(!@file_exists($FILE)){
- header("HTTP/1.0 404 Not Found");
- //FIXME add some default broken image
- print 'Not Found';
- exit;
- }
-
- $ORIG = $FILE;
-
- //handle image resizing/cropping
- if((substr($MIME,0,5) == 'image') && $WIDTH){
- if($HEIGHT){
- $FILE = media_crop_image($FILE,$EXT,$WIDTH,$HEIGHT);
- }else{
- $FILE = media_resize_image($FILE,$EXT,$WIDTH,$HEIGHT);
- }
- }
-
- // finally send the file to the client
- $data = array('file' => $FILE,
- 'mime' => $MIME,
- 'download' => $DL,
- 'cache' => $CACHE,
- 'orig' => $ORIG,
- 'ext' => $EXT,
- 'width' => $WIDTH,
- 'height' => $HEIGHT);
-
- $evt = new Doku_Event('MEDIA_SENDFILE', $data);
- if ($evt->advise_before()) {
- sendFile($data['file'],$data['mime'],$data['download'],$data['cache']);
- }
-
-/* ------------------------------------------------------------------------ */
-
-/**
- * Set headers and send the file to the client
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Ben Coburn <btcoburn@silicodon.net>
- */
-function sendFile($file,$mime,$dl,$cache){
- global $conf;
- $fmtime = @filemtime($file);
- // send headers
- header("Content-Type: $mime");
- // smart http caching headers
- if ($cache==-1) {
- // cache
- // cachetime or one hour
- header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
- header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
- header('Pragma: public');
- } else if ($cache>0) {
- // recache
- // remaining cachetime + 10 seconds so the newly recached media is used
- header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime+$conf['cachetime']+10).' GMT');
- header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime-time()+$conf['cachetime']+10, 0));
- header('Pragma: public');
- } else if ($cache==0) {
- // nocache
- header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
- header('Pragma: public');
- }
- //send important headers first, script stops here if '304 Not Modified' response
- http_conditionalRequest($fmtime);
-
-
- //download or display?
- if($dl){
- header('Content-Disposition: attachment; filename="'.basename($file).'";');
- }else{
- header('Content-Disposition: inline; filename="'.basename($file).'";');
- }
-
- //use x-sendfile header to pass the delivery to compatible webservers
- if (http_sendfile($file)) exit;
-
- // send file contents
- $fp = @fopen($file,"rb");
- if($fp){
- http_rangeRequest($fp,filesize($file),$mime);
- }else{
- header("HTTP/1.0 500 Internal Server Error");
- print "Could not read $file - bad permissions?";
- }
-}
-
-/**
- * Returns the wanted cachetime in seconds
- *
- * Resolves named constants
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function calc_cache($cache){
- global $conf;
-
- if(strtolower($cache) == 'nocache') return 0; //never cache
- if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
- return -1; //cache endless
-}
-
-//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/vendors/dokuwiki/lib/exe/index.html b/vendors/dokuwiki/lib/exe/index.html
deleted file mode 100644
index d614603ac..000000000
--- a/vendors/dokuwiki/lib/exe/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="refresh" content="0; URL=../../" />
-<meta name="robots" content="noindex" />
-<title>nothing here...</title>
-</head>
-<body>
-<!-- this is just here to prevent directory browsing -->
-</body>
-</html>
diff --git a/vendors/dokuwiki/lib/exe/indexer.php b/vendors/dokuwiki/lib/exe/indexer.php
deleted file mode 100644
index 872f6b5be..000000000
--- a/vendors/dokuwiki/lib/exe/indexer.php
+++ /dev/null
@@ -1,375 +0,0 @@
-<?php
-/**
- * DokuWiki indexer
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-define('DOKU_DISABLE_GZIP_OUTPUT',1);
-require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/auth.php');
-require_once(DOKU_INC.'inc/events.php');
-session_write_close(); //close session
-if(!defined('NL')) define('NL',"\n");
-global $ID;
-// Version tag used to force rebuild on upgrade
-define('INDEXER_VERSION', 2);
-
-// keep running after browser closes connection
-@ignore_user_abort(true);
-
-// check if user abort worked, if yes send output early
-$defer = !@ignore_user_abort() || $conf['broken_iua'];
-if(!$defer){
- sendGIF(); // send gif
-}
-
-$ID = cleanID($_REQUEST['id']);
-
-// Catch any possible output (e.g. errors)
-if(!isset($_REQUEST['debug'])) ob_start();
-
-// run one of the jobs
-$tmp = array(); // No event data
-$evt = new Doku_Event('INDEXER_TASKS_RUN', $tmp);
-if ($evt->advise_before()) {
- runIndexer() or
- metaUpdate() or
- runSitemapper() or
- runTrimRecentChanges() or
- runTrimRecentChanges(true) or
- $evt->advise_after();
-}
-if($defer) sendGIF();
-
-if(!isset($_REQUEST['debug'])) ob_end_clean();
-exit;
-
-// --------------------------------------------------------------------
-
-/**
- * Trims the recent changes cache (or imports the old changelog) as needed.
- *
- * @param media_changes If the media changelog shall be trimmed instead of
- * the page changelog
- *
- * @author Ben Coburn <btcoburn@silicodon.net>
- */
-function runTrimRecentChanges($media_changes = false) {
- global $conf;
-
- $fn = ($media_changes ? $conf['media_changelog'] : $conf['changelog']);
-
- // Trim the Recent Changes
- // Trims the recent changes cache to the last $conf['changes_days'] recent
- // changes or $conf['recent'] items, which ever is larger.
- // The trimming is only done once a day.
- if (@file_exists($fn) &&
- (@filemtime($fn.'.trimmed')+86400)<time() &&
- !@file_exists($fn.'_tmp')) {
- @touch($fn.'.trimmed');
- io_lock($fn);
- $lines = file($fn);
- if (count($lines)<=$conf['recent']) {
- // nothing to trim
- io_unlock($fn);
- return false;
- }
-
- io_saveFile($fn.'_tmp', ''); // presave tmp as 2nd lock
- $trim_time = time() - $conf['recent_days']*86400;
- $out_lines = array();
-
- for ($i=0; $i<count($lines); $i++) {
- $log = parseChangelogLine($lines[$i]);
- if ($log === false) continue; // discard junk
- if ($log['date'] < $trim_time) {
- $old_lines[$log['date'].".$i"] = $lines[$i]; // keep old lines for now (append .$i to prevent key collisions)
- } else {
- $out_lines[$log['date'].".$i"] = $lines[$i]; // definitely keep these lines
- }
- }
-
- if (count($lines)==count($out_lines)) {
- // nothing to trim
- @unlink($fn.'_tmp');
- io_unlock($fn);
- return false;
- }
-
- // sort the final result, it shouldn't be necessary,
- // however the extra robustness in making the changelog cache self-correcting is worth it
- ksort($out_lines);
- $extra = $conf['recent'] - count($out_lines); // do we need extra lines do bring us up to minimum
- if ($extra > 0) {
- ksort($old_lines);
- $out_lines = array_merge(array_slice($old_lines,-$extra),$out_lines);
- }
-
- // save trimmed changelog
- io_saveFile($fn.'_tmp', implode('', $out_lines));
- @unlink($fn);
- if (!rename($fn.'_tmp', $fn)) {
- // rename failed so try another way...
- io_unlock($fn);
- io_saveFile($fn, implode('', $out_lines));
- @unlink($fn.'_tmp');
- } else {
- io_unlock($fn);
- }
- return true;
- }
-
- // nothing done
- return false;
-}
-
-/**
- * Runs the indexer for the current page
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function runIndexer(){
- global $ID;
- global $conf;
- print "runIndexer(): started".NL;
-
- // Move index files (if needed)
- // Uses the importoldindex plugin to upgrade the index automatically.
- // FIXME: Remove this from runIndexer when it is no longer needed.
- if (@file_exists($conf['cachedir'].'/page.idx') &&
- (!@file_exists($conf['indexdir'].'/page.idx') ||
- !filesize($conf['indexdir'].'/page.idx')) &&
- !@file_exists($conf['indexdir'].'/index_importing')) {
- echo "trigger TEMPORARY_INDEX_UPGRADE_EVENT\n";
- $tmp = array(); // no event data
- trigger_event('TEMPORARY_INDEX_UPGRADE_EVENT', $tmp);
- }
-
- if(!$ID) return false;
-
- // check if indexing needed
- $idxtag = metaFN($ID,'.indexed');
- if(@file_exists($idxtag)){
- if(io_readFile($idxtag) >= INDEXER_VERSION){
- $last = @filemtime($idxtag);
- if($last > @filemtime(wikiFN($ID))){
- print "runIndexer(): index for $ID up to date".NL;
- return false;
- }
- }
- }
-
- // try to aquire a lock
- $lock = $conf['lockdir'].'/_indexer.lock';
- while(!@mkdir($lock,$conf['dmode'])){
- usleep(50);
- if(time()-@filemtime($lock) > 60*5){
- // looks like a stale lock - remove it
- @rmdir($lock);
- print "runIndexer(): stale lock removed".NL;
- }else{
- print "runIndexer(): indexer locked".NL;
- return false;
- }
- }
- if($conf['dperm']) chmod($lock, $conf['dperm']);
-
- require_once(DOKU_INC.'inc/indexer.php');
-
- // upgrade to version 2
- if (!@file_exists($conf['indexdir'].'/pageword.idx'))
- idx_upgradePageWords();
-
- // do the work
- idx_addPage($ID);
-
- // we're finished - save and free lock
- io_saveFile(metaFN($ID,'.indexed'),INDEXER_VERSION);
- @rmdir($lock);
- print "runIndexer(): finished".NL;
- return true;
-}
-
-/**
- * Will render the metadata for the page if not exists yet
- *
- * This makes sure pages which are created from outside DokuWiki will
- * gain their data when viewed for the first time.
- */
-function metaUpdate(){
- global $ID;
- print "metaUpdate(): started".NL;
-
- if(!$ID) return false;
- $file = metaFN($ID, '.meta');
- echo "meta file: $file".NL;
-
- // rendering needed?
- if (@file_exists($file)) return false;
- if (!@file_exists(wikiFN($ID))) return false;
-
- require_once(DOKU_INC.'inc/common.php');
- require_once(DOKU_INC.'inc/parserutils.php');
- global $conf;
-
-
- // gather some additional info from changelog
- $info = io_grep($conf['changelog'],
- '/^(\d+)\t(\d+\.\d+\.\d+\.\d+)\t'.preg_quote($ID,'/').'\t([^\t]+)\t([^\t\n]+)/',
- 0,true);
-
- $meta = array();
- if(!empty($info)){
- $meta['date']['created'] = $info[0][1];
- foreach($info as $item){
- if($item[4] != '*'){
- $meta['date']['modified'] = $item[1];
- if($item[3]){
- $meta['contributor'][$item[3]] = $item[3];
- }
- }
- }
- }
-
- $meta = p_render_metadata($ID, $meta);
- io_saveFile($file, serialize($meta));
-
- echo "metaUpdate(): finished".NL;
- return true;
-}
-
-/**
- * Builds a Google Sitemap of all public pages known to the indexer
- *
- * The map is placed in the root directory named sitemap.xml.gz - This
- * file needs to be writable!
- *
- * @author Andreas Gohr
- * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html
- */
-function runSitemapper(){
- global $conf;
- print "runSitemapper(): started".NL;
- if(!$conf['sitemap']) return false;
-
- if($conf['compression'] == 'bz2' || $conf['compression'] == 'gz'){
- $sitemap = 'sitemap.xml.gz';
- }else{
- $sitemap = 'sitemap.xml';
- }
- print "runSitemapper(): using $sitemap".NL;
-
- if(@file_exists(DOKU_INC.$sitemap)){
- if(!is_writable(DOKU_INC.$sitemap)) return false;
- }else{
- if(!is_writable(DOKU_INC)) return false;
- }
-
- if(@filesize(DOKU_INC.$sitemap) &&
- @filemtime(DOKU_INC.$sitemap) > (time()-($conf['sitemap']*60*60*24))){
- print 'runSitemapper(): Sitemap up to date'.NL;
- return false;
- }
-
- $pages = file($conf['indexdir'].'/page.idx');
- print 'runSitemapper(): creating sitemap using '.count($pages).' pages'.NL;
-
- // build the sitemap
- ob_start();
- print '<?xml version="1.0" encoding="UTF-8"?>'.NL;
- print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
- foreach($pages as $id){
- $id = trim($id);
- $file = wikiFN($id);
-
- //skip hidden, non existing and restricted files
- if(isHiddenPage($id)) continue;
- $date = @filemtime($file);
- if(!$date) continue;
- if(auth_aclcheck($id,'','') < AUTH_READ) continue;
-
- print ' <url>'.NL;
- print ' <loc>'.wl($id,'',true).'</loc>'.NL;
- print ' <lastmod>'.date_iso8601($date).'</lastmod>'.NL;
- print ' </url>'.NL;
- }
- print '</urlset>'.NL;
- $data = ob_get_contents();
- ob_end_clean();
-
- //save the new sitemap
- io_saveFile(DOKU_INC.$sitemap,$data);
-
- //ping search engines...
- $http = new DokuHTTPClient();
- $http->timeout = 8;
-
- //ping google
- print 'runSitemapper(): pinging google'.NL;
- $url = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=';
- $url .= urlencode(DOKU_URL.$sitemap);
- $resp = $http->get($url);
- if($http->error) print 'runSitemapper(): '.$http->error.NL;
- print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
-
- //ping yahoo
- print 'runSitemapper(): pinging yahoo'.NL;
- $url = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url=';
- $url .= urlencode(DOKU_URL.$sitemap);
- $resp = $http->get($url);
- if($http->error) print 'runSitemapper(): '.$http->error.NL;
- print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
-
- //ping microsoft
- print 'runSitemapper(): pinging microsoft'.NL;
- $url = 'http://www.bing.com/webmaster/ping.aspx?siteMap=';
- $url .= urlencode(DOKU_URL.$sitemap);
- $resp = $http->get($url);
- if($http->error) print 'runSitemapper(): '.$http->error.NL;
- print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
-
- print 'runSitemapper(): finished'.NL;
- return true;
-}
-
-/**
- * Formats a timestamp as ISO 8601 date
- *
- * @author <ungu at terong dot com>
- * @link http://www.php.net/manual/en/function.date.php#54072
- */
-function date_iso8601($int_date) {
- //$int_date: current date in UNIX timestamp
- $date_mod = date('Y-m-d\TH:i:s', $int_date);
- $pre_timezone = date('O', $int_date);
- $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
- $date_mod .= $time_zone;
- return $date_mod;
-}
-
-/**
- * Just send a 1x1 pixel blank gif to the browser
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Harry Fuecks <fuecks@gmail.com>
- */
-function sendGIF(){
- if(isset($_REQUEST['debug'])){
- header('Content-Type: text/plain');
- return;
- }
- $img = base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7');
- header('Content-Type: image/gif');
- header('Content-Length: '.strlen($img));
- header('Connection: Close');
- print $img;
- flush();
- // Browser should drop connection after this
- // Thinks it's got the whole image
-}
-
-//Setup VIM: ex: et ts=4 enc=utf-8 :
-// No trailing PHP closing tag - no output please!
-// See Note at http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
diff --git a/vendors/dokuwiki/lib/exe/js.php b/vendors/dokuwiki/lib/exe/js.php
deleted file mode 100644
index cb1016231..000000000
--- a/vendors/dokuwiki/lib/exe/js.php
+++ /dev/null
@@ -1,397 +0,0 @@
-<?php
-/**
- * DokuWiki JavaScript creator
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
-if(!defined('NL')) define('NL',"\n");
-if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
-require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/pageutils.php');
-require_once(DOKU_INC.'inc/httputils.php');
-require_once(DOKU_INC.'inc/io.php');
-require_once(DOKU_INC.'inc/JSON.php');
-
-// Main (don't run when UNIT test)
-if(!defined('SIMPLE_TEST')){
- header('Content-Type: text/javascript; charset=utf-8');
- js_out();
-}
-
-
-// ---------------------- functions ------------------------------
-
-/**
- * Output all needed JavaScript
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_out(){
- global $conf;
- global $lang;
-
- // The generated script depends on some dynamic options
- $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js');
-
- // array of core files
- $files = array(
- DOKU_INC.'lib/scripts/helpers.js',
- DOKU_INC.'lib/scripts/events.js',
- DOKU_INC.'lib/scripts/cookie.js',
- DOKU_INC.'lib/scripts/script.js',
- DOKU_INC.'lib/scripts/tw-sack.js',
- DOKU_INC.'lib/scripts/ajax.js',
- DOKU_INC.'lib/scripts/index.js',
- DOKU_INC.'lib/scripts/drag.js',
- DOKU_INC.'lib/scripts/textselection.js',
- DOKU_INC.'lib/scripts/toolbar.js',
- DOKU_INC.'lib/scripts/edit.js',
- DOKU_INC.'lib/scripts/linkwiz.js',
- DOKU_INC.'lib/scripts/media.js',
- DOKU_TPLINC.'script.js',
- );
-
- // add possible plugin scripts and userscript
- $files = array_merge($files,js_pluginscripts());
- $files[] = DOKU_CONF.'userscript.js';
-
- // check cache age & handle conditional request
- header('Cache-Control: public, max-age=3600');
- header('Pragma: public');
- if(js_cacheok($cache,$files)){
- http_conditionalRequest(filemtime($cache));
- if($conf['allowdebug']) header("X-CacheUsed: $cache");
-
- // finally send output
- if ($conf['gzip_output'] && http_gzip_valid($cache)) {
- header('Vary: Accept-Encoding');
- header('Content-Encoding: gzip');
- readfile($cache.".gz");
- } else {
- if (!http_sendfile($cache)) readfile($cache);
- }
- return;
- } else {
- http_conditionalRequest(time());
- }
-
- // start output buffering and build the script
- ob_start();
-
- // add some global variables
- print "var DOKU_BASE = '".DOKU_BASE."';";
- print "var DOKU_MEDIA = '".DOKU_MEDIA."';";
- print "var DOKU_TPL = '".DOKU_TPL."';";
- print "var DOKU_UHN = ".((int) useHeading('navigation')).";";
- print "var DOKU_UHC = ".((int) useHeading('content')).";";
-
- // load JS specific translations
- $json = new JSON();
- $lang['js']['plugins'] = js_pluginstrings();
- echo 'LANG = '.$json->encode($lang['js']).";\n";
-
- // load toolbar
- require_once(DOKU_INC.'inc/toolbar.php');
- toolbar_JSdefines('toolbar');
-
- // load files
- foreach($files as $file){
- echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n";
- js_load($file);
- echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n";
- }
-
-
- // init stuff
- js_runonstart("ajax_qsearch.init('qsearch__in','qsearch__out')");
- js_runonstart("addEvent(document,'click',closePopups)");
- js_runonstart('addTocToggle()');
- js_runonstart("initSizeCtl('size__ctl','wiki__text')");
- js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)");
- js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')");
- js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")");
- js_runonstart('scrollToMarker()');
- js_runonstart('focusMarker()');
-
- // end output buffering and get contents
- $js = ob_get_contents();
- ob_end_clean();
-
- // compress whitespace and comments
- if($conf['compress']){
- $js = js_compress($js);
- }
-
- $js .= "\n"; // https://bugzilla.mozilla.org/show_bug.cgi?id=316033
-
- // save cache file
- io_saveFile($cache,$js);
- if(function_exists('gzopen')) io_saveFile("$cache.gz",$js);
-
- // finally send output
- if ($conf['gzip_output']) {
- header('Vary: Accept-Encoding');
- header('Content-Encoding: gzip');
- print gzencode($js,9,FORCE_GZIP);
- } else {
- print $js;
- }
-}
-
-/**
- * Load the given file, handle include calls and print it
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_load($file){
- if(!@file_exists($file)) return;
- static $loaded = array();
-
- $data = io_readFile($file);
- while(preg_match('#/\*\s*DOKUWIKI:include(_once)?\s+([\w\./]+)\s*\*/#',$data,$match)){
- $ifile = $match[2];
-
- // is it a include_once?
- if($match[1]){
- $base = basename($ifile);
- if($loaded[$base]) continue;
- $loaded[$base] = true;
- }
-
- if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile;
-
- if(@file_exists($ifile)){
- $idata = io_readFile($ifile);
- }else{
- $idata = '';
- }
- $data = str_replace($match[0],$idata,$data);
- }
- echo $data;
-}
-
-/**
- * Checks if a JavaScript Cache file still is valid
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_cacheok($cache,$files){
- if(isset($_REQUEST['purge'])) return false; //support purge request
-
- $ctime = @filemtime($cache);
- if(!$ctime) return false; //There is no cache
-
- // some additional files to check
- $files = array_merge($files, getConfigFiles('main'));
- $files[] = DOKU_CONF.'userscript.js';
- $files[] = __FILE__;
-
- // now walk the files
- foreach($files as $file){
- if(@filemtime($file) > $ctime){
- return false;
- }
- }
- return true;
-}
-
-/**
- * Returns a list of possible Plugin Scripts (no existance check here)
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_pluginscripts(){
- $list = array();
- $plugins = plugin_list();
- foreach ($plugins as $p){
- $list[] = DOKU_PLUGIN."$p/script.js";
- }
- return $list;
-}
-
-/**
- * Return an two-dimensional array with strings from the language file of each plugin.
- *
- * - $lang['js'] must be an array.
- * - Nothing is returned for plugins without an entry for $lang['js']
- *
- * @author Gabriel Birke <birke@d-scribe.de>
- */
-function js_pluginstrings()
-{
- global $conf;
- $pluginstrings = array();
- $plugins = plugin_list();
- foreach ($plugins as $p){
- if (isset($lang)) unset($lang);
- if (@file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) {
- include DOKU_PLUGIN."$p/lang/en/lang.php";
- }
- if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) {
- include DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php";
- }
- if (isset($lang['js'])) {
- $pluginstrings[$p] = $lang['js'];
- }
- }
- return $pluginstrings;
-}
-
-/**
- * Escapes a String to be embedded in a JavaScript call, keeps \n
- * as newline
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_escape($string){
- return str_replace('\\\\n','\\n',addslashes($string));
-}
-
-/**
- * Adds the given JavaScript code to the window.onload() event
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function js_runonstart($func){
- echo "addInitEvent(function(){ $func; });".NL;
-}
-
-/**
- * Strip comments and whitespaces from given JavaScript Code
- *
- * This is a port of Nick Galbreath's python tool jsstrip.py which is
- * released under BSD license. See link for original code.
- *
- * @author Nick Galbreath <nickg@modp.com>
- * @author Andreas Gohr <andi@splitbrain.org>
- * @link http://code.google.com/p/jsstrip/
- */
-function js_compress($s){
- $s = ltrim($s); // strip all initial whitespace
- $s .= "\n";
- $i = 0; // char index for input string
- $j = 0; // char forward index for input string
- $line = 0; // line number of file (close to it anyways)
- $slen = strlen($s); // size of input string
- $lch = ''; // last char added
- $result = ''; // we store the final result here
-
- // items that don't need spaces next to them
- $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
-
- $regex_starters = array("(", "=", "[", "," , ":");
-
- $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
-
- while($i < $slen){
- // skip all "boring" characters. This is either
- // reserved word (e.g. "for", "else", "if") or a
- // variable/object/method (e.g. "foo.color")
- while ($i < $slen && (strpos($chars,$s[$i]) === false) ){
- $result .= $s{$i};
- $i = $i + 1;
- }
-
- $ch = $s{$i};
- // multiline comments (keeping IE conditionals)
- if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
- $endC = strpos($s,'*/',$i+2);
- if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
- $i = $endC + 2;
- continue;
- }
-
- // singleline
- if($ch == '/' && $s{$i+1} == '/'){
- $endC = strpos($s,"\n",$i+2);
- if($endC === false) trigger_error('Invalid comment', E_USER_ERROR);
- $i = $endC;
- continue;
- }
-
- // tricky. might be an RE
- if($ch == '/'){
- // rewind, skip white space
- $j = 1;
- while(in_array($s{$i-$j}, $whitespaces_chars)){
- $j = $j + 1;
- }
- if( in_array($s{$i-$j}, $regex_starters) ){
- // yes, this is an re
- // now move forward and find the end of it
- $j = 1;
- while($s{$i+$j} != '/'){
- while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '/')){
- $j = $j + 1;
- }
- if($s{$i+$j} == '\\') $j = $j + 2;
- }
- $result .= substr($s,$i,$j+1);
- $i = $i + $j + 1;
- continue;
- }
- }
-
- // double quote strings
- if($ch == '"'){
- $j = 1;
- while( $s{$i+$j} != '"' && ($i+$j < $slen)){
- if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == '"' || $s{$i+$j+1} == '\\') ){
- $j += 2;
- }else{
- $j += 1;
- }
- }
- $result .= substr($s,$i,$j+1);
- $i = $i + $j + 1;
- continue;
- }
-
- // single quote strings
- if($ch == "'"){
- $j = 1;
- while( $s{$i+$j} != "'" && ($i+$j < $slen)){
- if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == "'" || $s{$i+$j+1} == '\\') ){
- $j += 2;
- }else{
- $j += 1;
- }
- }
- $result .= substr($s,$i,$j+1);
- $i = $i + $j + 1;
- continue;
- }
-
- // whitespaces
- if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){
- // leading spaces
- if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
- $i = $i + 1;
- continue;
- }
- // trailing spaces
- // if this ch is space AND the last char processed
- // is special, then skip the space
- $lch = substr($result,-1);
- if($lch && (strpos($chars,$lch) !== false)){
- $i = $i + 1;
- continue;
- }
- // else after all of this convert the "whitespace" to
- // a single space. It will get appended below
- $ch = ' ';
- }
-
- // other chars
- $result .= $ch;
- $i = $i + 1;
- }
-
- return trim($result);
-}
-
-//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/vendors/dokuwiki/lib/exe/mediamanager.php b/vendors/dokuwiki/lib/exe/mediamanager.php
deleted file mode 100644
index f6e91b858..000000000
--- a/vendors/dokuwiki/lib/exe/mediamanager.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
- if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
- define('DOKU_MEDIAMANAGER',1);
-
- // for multi uploader:
- @ini_set('session.use_only_cookies',0);
-
- require_once(DOKU_INC.'inc/init.php');
- require_once(DOKU_INC.'inc/lang/en/lang.php');
- require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
- require_once(DOKU_INC.'inc/media.php');
- require_once(DOKU_INC.'inc/common.php');
- require_once(DOKU_INC.'inc/search.php');
- require_once(DOKU_INC.'inc/template.php');
- require_once(DOKU_INC.'inc/auth.php');
-
- trigger_event('MEDIAMANAGER_STARTED',$tmp=array());
- session_write_close(); //close session
-
- // handle passed message
- if($_REQUEST['msg1']) msg(hsc($_REQUEST['msg1']),1);
- if($_REQUEST['err']) msg(hsc($_REQUEST['err']),-1);
-
-
- // get namespace to display (either direct or from deletion order)
- if($_REQUEST['delete']){
- $DEL = cleanID($_REQUEST['delete']);
- $IMG = $DEL;
- $NS = getNS($DEL);
- }elseif($_REQUEST['edit']){
- $IMG = cleanID($_REQUEST['edit']);
- $NS = getNS($IMG);
- }elseif($_REQUEST['img']){
- $IMG = cleanID($_REQUEST['img']);
- $NS = getNS($IMG);
- }else{
- $NS = $_REQUEST['ns'];
- $NS = cleanID($NS);
- }
-
- // check auth
- $AUTH = auth_quickaclcheck("$NS:*");
-
- // create the given namespace (just for beautification)
- if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
-
- // handle flash upload
- if(isset($_FILES['Filedata'])){
- $_FILES['upload'] =& $_FILES['Filedata'];
- $JUMPTO = media_upload($NS,$AUTH);
- if($JUMPTO == false){
- header("HTTP/1.0 400 Bad Request");
- echo 'Upload failed';
- }
- echo 'ok';
- exit;
- }
-
- // give info on PHP catched upload errors
- if($_FILES['upload']['error']){
- switch($_FILES['upload']['error']){
- case 1:
- case 2:
- msg(sprintf($lang['uploadsize'],
- filesize_h(php_to_byte(ini_get('upload_max_filesize')))),-1);
- break;
- default:
- msg($lang['uploadfail'].' ('.$_FILES['upload']['error'].')',-1);
- }
- unset($_FILES['upload']);
- }
-
- // handle upload
- if($_FILES['upload']['tmp_name']){
- $JUMPTO = media_upload($NS,$AUTH);
- if($JUMPTO) $NS = getNS($JUMPTO);
- }
-
- // handle meta saving
- if($IMG && $_REQUEST['do']['save']){
- $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
- }
-
- // handle deletion
- if($DEL) {
- $INUSE = media_inuse($DEL);
- if(!$INUSE) {
- if(media_delete($DEL,$AUTH)) {
- msg(sprintf($lang['deletesucc'],noNS($DEL)),1);
- } else {
- msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
- }
- } else {
- if(!$conf['refshow']) {
- unset($INUSE);
- msg(sprintf($lang['mediainuse'],noNS($DEL)),0);
- }
- }
- }
-
- // finished - start output
- header('Content-Type: text/html; charset=utf-8');
- include(template('mediamanager.php'));
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/vendors/dokuwiki/lib/exe/multipleUpload.swf b/vendors/dokuwiki/lib/exe/multipleUpload.swf
deleted file mode 100644
index 888aab045..000000000
--- a/vendors/dokuwiki/lib/exe/multipleUpload.swf
+++ /dev/null
Binary files differ
diff --git a/vendors/dokuwiki/lib/exe/opensearch.php b/vendors/dokuwiki/lib/exe/opensearch.php
deleted file mode 100644
index f16b4f681..000000000
--- a/vendors/dokuwiki/lib/exe/opensearch.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * DokuWiki OpenSearch creator
- *
- * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- * @link http://www.opensearch.org/
- * @author Mike Frysinger <vapier@gentoo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
-if(!defined('NL')) define('NL',"\n");
-require_once(DOKU_INC.'inc/init.php');
-
-// try to be clever about the favicon location
-if(file_exists(DOKU_INC.'favicon.ico')){
- $ico = DOKU_URL.'favicon.ico';
-}elseif(file_exists(DOKU_TPLINC.'images/favicon.ico')){
- $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/images/favicon.ico';
-}elseif(file_exists(DOKU_TPLINC.'favicon.ico')){
- $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/favicon.ico';
-}else{
- $ico = DOKU_URL.'lib/tpl/default/images/favicon.ico';
-}
-
-// output
-header('Content-Type: application/opensearchdescription+xml; charset=utf-8');
-echo '<?xml version="1.0"?>'.NL;
-echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">'.NL;
-echo ' <ShortName>'.htmlspecialchars($conf['title']).'</ShortName>'.NL;
-echo ' <Image width="16" height="16" type="image/x-icon">'.$ico.'</Image>'.NL;
-echo ' <Url type="text/html" template="'.DOKU_URL.DOKU_SCRIPT.'?do=search&amp;id={searchTerms}" />'.NL;
-echo ' <Url type="application/x-suggestions+json" template="'.
- DOKU_URL.'lib/exe/ajax.php?call=suggestions&amp;q={searchTerms}" />'.NL;
-echo '</OpenSearchDescription>'.NL;
-
-//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/vendors/dokuwiki/lib/exe/xmlrpc.php b/vendors/dokuwiki/lib/exe/xmlrpc.php
deleted file mode 100644
index d3913482f..000000000
--- a/vendors/dokuwiki/lib/exe/xmlrpc.php
+++ /dev/null
@@ -1,921 +0,0 @@
-<?php
-if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
-
-// fix when '<?xml' isn't on the very first line
-if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
-
-/**
- * Increased whenever the API is changed
- */
-define('DOKU_XMLRPC_API_VERSION',2);
-
-require_once(DOKU_INC.'inc/init.php');
-require_once(DOKU_INC.'inc/common.php');
-require_once(DOKU_INC.'inc/auth.php');
-session_write_close(); //close session
-
-if(!$conf['xmlrpc']) die('XML-RPC server not enabled.');
-
-require_once(DOKU_INC.'inc/IXR_Library.php');
-
-
-/**
- * Contains needed wrapper functions and registers all available
- * XMLRPC functions.
- */
-class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
- var $methods = array();
- var $public_methods = array();
-
- /**
- * Checks if the current user is allowed to execute non anonymous methods
- */
- function checkAuth(){
- global $conf;
- global $USERINFO;
-
- if(!$conf['useacl']) return true; //no ACL - then no checks
-
- $allowed = explode(',',$conf['xmlrpcuser']);
- $allowed = array_map('trim', $allowed);
- $allowed = array_unique($allowed);
- $allowed = array_filter($allowed);
-
- if(!count($allowed)) return true; //no restrictions
-
- $user = $_SERVER['REMOTE_USER'];
- $groups = (array) $USERINFO['grps'];
-
- if(in_array($user,$allowed)) return true; //user explicitly mentioned
-
- //check group memberships
- foreach($groups as $group){
- if(in_array('@'.$group,$allowed)) return true;
- }
-
- //still here? no access!
- return false;
- }
-
- /**
- * Adds a callback, extends parent method
- *
- * add another parameter to define if anonymous access to
- * this method should be granted.
- */
- function addCallback($method, $callback, $args, $help, $public=false){
- if($public) $this->public_methods[] = $method;
- return parent::addCallback($method, $callback, $args, $help);
- }
-
- /**
- * Execute a call, extends parent method
- *
- * Checks for authentication first
- */
- function call($methodname, $args){
- if(!in_array($methodname,$this->public_methods) && !$this->checkAuth()){
- return new IXR_Error(-32603, 'server error. not authorized to call method "'.$methodname.'".');
- }
- return parent::call($methodname, $args);
- }
-
- /**
- * Constructor. Register methods and run Server
- */
- function dokuwiki_xmlrpc_server(){
- $this->IXR_IntrospectionServer();
-
- /* DokuWiki's own methods */
- $this->addCallback(
- 'dokuwiki.getXMLRPCAPIVersion',
- 'this:getAPIVersion',
- array('integer'),
- 'Returns the XMLRPC API version.',
- true
- );
-
- $this->addCallback(
- 'dokuwiki.getVersion',
- 'getVersion',
- array('string'),
- 'Returns the running DokuWiki version.',
- true
- );
-
- $this->addCallback(
- 'dokuwiki.login',
- 'this:login',
- array('integer','string','string'),
- 'Tries to login with the given credentials and sets auth cookies.',
- true
- );
-
- $this->addCallback(
- 'dokuwiki.getPagelist',
- 'this:readNamespace',
- array('struct','string','struct'),
- 'List all pages within the given namespace.'
- );
-
- $this->addCallback(
- 'dokuwiki.getTime',
- 'time',
- array('int'),
- 'Return the current time at the wiki server.'
- );
-
- $this->addCallback(
- 'dokuwiki.setLocks',
- 'this:setLocks',
- array('struct','struct'),
- 'Lock or unlock pages.'
- );
-
- /* Wiki API v2 http://www.jspwiki.org/wiki/WikiRPCInterface2 */
- $this->addCallback(
- 'wiki.getRPCVersionSupported',
- 'this:wiki_RPCVersion',
- array('int'),
- 'Returns 2 with the supported RPC API version.',
- true
- );
- $this->addCallback(
- 'wiki.getPage',
- 'this:rawPage',
- array('string','string'),
- 'Get the raw Wiki text of page, latest version.'
- );
- $this->addCallback(
- 'wiki.getPageVersion',
- 'this:rawPage',
- array('string','string','int'),
- 'Get the raw Wiki text of page.'
- );
- $this->addCallback(
- 'wiki.getPageHTML',
- 'this:htmlPage',
- array('string','string'),
- 'Return page in rendered HTML, latest version.'
- );
- $this->addCallback(
- 'wiki.getPageHTMLVersion',
- 'this:htmlPage',
- array('string','string','int'),
- 'Return page in rendered HTML.'
- );
- $this->addCallback(
- 'wiki.getAllPages',
- 'this:listPages',
- array('struct'),
- 'Returns a list of all pages. The result is an array of utf8 pagenames.'
- );
- $this->addCallback(
- 'wiki.getAttachments',
- 'this:listAttachments',
- array('struct', 'string', 'struct'),
- 'Returns a list of all media files.'
- );
- $this->addCallback(
- 'wiki.getBackLinks',
- 'this:listBackLinks',
- array('struct','string'),
- 'Returns the pages that link to this page.'
- );
- $this->addCallback(
- 'wiki.getPageInfo',
- 'this:pageInfo',
- array('struct','string'),
- 'Returns a struct with infos about the page.'
- );
- $this->addCallback(
- 'wiki.getPageInfoVersion',
- 'this:pageInfo',
- array('struct','string','int'),
- 'Returns a struct with infos about the page.'
- );
- $this->addCallback(
- 'wiki.getPageVersions',
- 'this:pageVersions',
- array('struct','string','int'),
- 'Returns the available revisions of the page.'
- );
- $this->addCallback(
- 'wiki.putPage',
- 'this:putPage',
- array('int', 'string', 'string', 'struct'),
- 'Saves a wiki page.'
- );
- $this->addCallback(
- 'wiki.listLinks',
- 'this:listLinks',
- array('struct','string'),
- 'Lists all links contained in a wiki page.'
- );
- $this->addCallback(
- 'wiki.getRecentChanges',
- 'this:getRecentChanges',
- array('struct','int'),
- 'Returns a struct about all recent changes since given timestamp.'
- );
- $this->addCallback(
- 'wiki.getRecentMediaChanges',
- 'this:getRecentMediaChanges',
- array('struct','int'),
- 'Returns a struct about all recent media changes since given timestamp.'
- );
- $this->addCallback(
- 'wiki.aclCheck',
- 'this:aclCheck',
- array('int', 'string'),
- 'Returns the permissions of a given wiki page.'
- );
- $this->addCallback(
- 'wiki.putAttachment',
- 'this:putAttachment',
- array('struct', 'string', 'base64', 'struct'),
- 'Upload a file to the wiki.'
- );
- $this->addCallback(
- 'wiki.deleteAttachment',
- 'this:deleteAttachment',
- array('int', 'string'),
- 'Delete a file from the wiki.'
- );
- $this->addCallback(
- 'wiki.getAttachment',
- 'this:getAttachment',
- array('base64', 'string'),
- 'Download a file from the wiki.'
- );
- $this->addCallback(
- 'wiki.getAttachmentInfo',
- 'this:getAttachmentInfo',
- array('struct', 'string'),
- 'Returns a struct with infos about the attachment.'
- );
-
- /**
- * Trigger XMLRPC_CALLBACK_REGISTER, action plugins can use this event
- * to extend the XMLRPC interface and register their own callbacks.
- *
- * Event data:
- * The XMLRPC server object:
- *
- * $event->data->addCallback() - register a callback, the second
- * paramter has to be of the form "plugin:<pluginname>:<plugin
- * method>"
- *
- * $event->data->callbacks - an array which holds all awaylable
- * callbacks
- */
- trigger_event('XMLRPC_CALLBACK_REGISTER', $this);
-
- $this->serve();
- }
-
- /**
- * Return a raw wiki page
- */
- function rawPage($id,$rev=''){
- if(auth_quickaclcheck($id) < AUTH_READ){
- return new IXR_Error(1, 'You are not allowed to read this page');
- }
- $text = rawWiki($id,$rev);
- if(!$text) {
- $data = array($id);
- return trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
- } else {
- return $text;
- }
- }
-
- /**
- * Return a media file encoded in base64
- *
- * @author Gina Haeussge <osd@foosel.net>
- */
- function getAttachment($id){
- $id = cleanID($id);
- if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ)
- return new IXR_Error(1, 'You are not allowed to read this file');
-
- $file = mediaFN($id);
- if (!@ file_exists($file))
- return new IXR_Error(1, 'The requested file does not exist');
-
- $data = io_readFile($file, false);
- $base64 = base64_encode($data);
- return $base64;
- }
-
- /**
- * Return info about a media file
- *
- * @author Gina Haeussge <osd@foosel.net>
- */
- function getAttachmentInfo($id){
- $id = cleanID($id);
- $info = array(
- 'lastModified' => 0,
- 'size' => 0,
- );
-
- $file = mediaFN($id);
- if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){
- $info['lastModified'] = new IXR_Date(filemtime($file));
- $info['size'] = filesize($file);
- }
-
- return $info;
- }
-
- /**
- * Return a wiki page rendered to html
- */
- function htmlPage($id,$rev=''){
- if(auth_quickaclcheck($id) < AUTH_READ){
- return new IXR_Error(1, 'You are not allowed to read this page');
- }
- return p_wiki_xhtml($id,$rev,false);
- }
-
- /**
- * List all pages - we use the indexer list here
- */
- function listPages(){
- global $conf;
-
- $list = array();
- $pages = file($conf['indexdir'] . '/page.idx');
- $pages = array_filter($pages, 'isVisiblePage');
-
- foreach(array_keys($pages) as $idx) {
- if(page_exists($pages[$idx])) {
- $perm = auth_quickaclcheck($pages[$idx]);
- if($perm >= AUTH_READ) {
- $page = array();
- $page['id'] = trim($pages[$idx]);
- $page['perms'] = $perm;
- $page['size'] = @filesize(wikiFN($pages[$idx]));
- $page['lastModified'] = new IXR_Date(@filemtime(wikiFN($pages[$idx])));
- $list[] = $page;
- }
- }
- }
-
- return $list;
- }
-
- /**
- * List all pages in the given namespace (and below)
- */
- function readNamespace($ns,$opts){
- global $conf;
-
- if(!is_array($opts)) $opts=array();
-
- $ns = cleanID($ns);
- $dir = utf8_encodeFN(str_replace(':', '/', $ns));
- $data = array();
- require_once(DOKU_INC.'inc/search.php');
- $opts['skipacl'] = 0; // no ACL skipping for XMLRPC
- search($data, $conf['datadir'], 'search_allpages', $opts, $dir);
- return $data;
- }
-
- /**
- * List all media files.
- *
- * Available options are 'recursive' for also including the subnamespaces
- * in the listing, and 'pattern' for filtering the returned files against
- * a regular expression matching their name.
- *
- * @author Gina Haeussge <osd@foosel.net>
- */
- function listAttachments($ns, $options = array()) {
- global $conf;
- global $lang;
-
- $ns = cleanID($ns);
-
- if (!is_array($options)) $options = array();
- $options['skipacl'] = 0; // no ACL skipping for XMLRPC
-
-
- if(auth_quickaclcheck($ns.':*') >= AUTH_READ) {
- $dir = utf8_encodeFN(str_replace(':', '/', $ns));
-
- $data = array();
- require_once(DOKU_INC.'inc/search.php');
- search($data, $conf['mediadir'], 'search_media', $options, $dir);
- $len = count($data);
- if(!$len) return array();
-
- for($i=0; $i<$len; $i++) {
- unset($data[$i]['meta']);
- $data[$i]['lastModified'] = new IXR_Date($data[$i]['mtime']);
- }
- return $data;
- } else {
- return new IXR_Error(1, 'You are not allowed to list media files.');
- }
- }
-
- /**
- * Return a list of backlinks
- */
- function listBackLinks($id){
- require_once(DOKU_INC.'inc/fulltext.php');
- return ft_backlinks($id);
- }
-
- /**
- * Return some basic data about a page
- */
- function pageInfo($id,$rev=''){
- if(auth_quickaclcheck($id) < AUTH_READ){
- return new IXR_Error(1, 'You are not allowed to read this page');
- }
- $file = wikiFN($id,$rev);
- $time = @filemtime($file);
- if(!$time){
- return new IXR_Error(10, 'The requested page does not exist');
- }
-
- $info = getRevisionInfo($id, $time, 1024);
-
- $data = array(
- 'name' => $id,
- 'lastModified' => new IXR_Date($time),
- 'author' => (($info['user']) ? $info['user'] : $info['ip']),
- 'version' => $time
- );
-
- return ($data);
- }
-
- /**
- * Save a wiki page
- *
- * @author Michael Klier <chi@chimeric.de>
- */
- function putPage($id, $text, $params) {
- global $TEXT;
- global $lang;
- global $conf;
-
- $id = cleanID($id);
- $TEXT = cleanText($text);
- $sum = $params['sum'];
- $minor = $params['minor'];
-
- if(empty($id))
- return new IXR_Error(1, 'Empty page ID');
-
- if(!page_exists($id) && trim($TEXT) == '' ) {
- return new IXR_ERROR(1, 'Refusing to write an empty new wiki page');
- }
-
- if(auth_quickaclcheck($id) < AUTH_EDIT)
- return new IXR_Error(1, 'You are not allowed to edit this page');
-
- // Check, if page is locked
- if(checklock($id))
- return new IXR_Error(1, 'The page is currently locked');
-
- // SPAM check
- if(checkwordblock())
- return new IXR_Error(1, 'Positive wordblock check');
-
- // autoset summary on new pages
- if(!page_exists($id) && empty($sum)) {
- $sum = $lang['created'];
- }
-
- // autoset summary on deleted pages
- if(page_exists($id) && empty($TEXT) && empty($sum)) {
- $sum = $lang['deleted'];
- }
-
- lock($id);
-
- saveWikiText($id,$TEXT,$sum,$minor);
-
- unlock($id);
-
- // run the indexer if page wasn't indexed yet
- if(!@file_exists(metaFN($id, '.indexed'))) {
- // try to aquire a lock
- $lock = $conf['lockdir'].'/_indexer.lock';
- while(!@mkdir($lock,$conf['dmode'])){
- usleep(50);
- if(time()-@filemtime($lock) > 60*5){
- // looks like a stale lock - remove it
- @rmdir($lock);
- }else{
- return false;
- }
- }
- if($conf['dperm']) chmod($lock, $conf['dperm']);
-
- require_once(DOKU_INC.'inc/indexer.php');
-
- // do the work
- idx_addPage($id);
-
- // we're finished - save and free lock
- io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
- @rmdir($lock);
- }
-
- return 0;
- }
-
- /**
- * Uploads a file to the wiki.
- *
- * Michael Klier <chi@chimeric.de>
- */
- function putAttachment($id, $file, $params) {
- global $conf;
- global $lang;
-
- $auth = auth_quickaclcheck(getNS($id).':*');
- if($auth >= AUTH_UPLOAD) {
- if(!isset($id)) {
- return new IXR_ERROR(1, 'Filename not given.');
- }
-
- $ftmp = $conf['tmpdir'] . '/' . $id;
-
- // save temporary file
- @unlink($ftmp);
- $buff = base64_decode($file);
- io_saveFile($ftmp, $buff);
-
- // get filename
- list($iext, $imime,$dl) = mimetype($id);
- $id = cleanID($id);
- $fn = mediaFN($id);
-
- // get filetype regexp
- $types = array_keys(getMimeTypes());
- $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
- $regex = join('|',$types);
-
- // because a temp file was created already
- if(preg_match('/\.('.$regex.')$/i',$fn)) {
- //check for overwrite
- $overwrite = @file_exists($fn);
- if($overwrite && (!$params['ow'] || $auth < AUTH_DELETE)) {
- return new IXR_ERROR(1, $lang['uploadexist'].'1');
- }
- // check for valid content
- @require_once(DOKU_INC.'inc/media.php');
- $ok = media_contentcheck($ftmp, $imime);
- if($ok == -1) {
- return new IXR_ERROR(1, sprintf($lang['uploadexist'].'2', ".$iext"));
- } elseif($ok == -2) {
- return new IXR_ERROR(1, $lang['uploadspam']);
- } elseif($ok == -3) {
- return new IXR_ERROR(1, $lang['uploadxss']);
- }
-
- // prepare event data
- $data[0] = $ftmp;
- $data[1] = $fn;
- $data[2] = $id;
- $data[3] = $imime;
- $data[4] = $overwrite;
-
- // trigger event
- require_once(DOKU_INC.'inc/events.php');
- return trigger_event('MEDIA_UPLOAD_FINISH', $data, array($this, '_media_upload_action'), true);
-
- } else {
- return new IXR_ERROR(1, $lang['uploadwrong']);
- }
- } else {
- return new IXR_ERROR(1, "You don't have permissions to upload files.");
- }
- }
-
- /**
- * Deletes a file from the wiki.
- *
- * @author Gina Haeussge <osd@foosel.net>
- */
- function deleteAttachment($id){
- $auth = auth_quickaclcheck(getNS($id).':*');
- if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files.");
- global $conf;
- global $lang;
-
- // check for references if needed
- $mediareferences = array();
- if($conf['refcheck']){
- require_once(DOKU_INC.'inc/fulltext.php');
- $mediareferences = ft_mediause($id,$conf['refshow']);
- }
-
- if(!count($mediareferences)){
- $file = mediaFN($id);
- if(@unlink($file)){
- require_once(DOKU_INC.'inc/changelog.php');
- addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
- io_sweepNS($id,'mediadir');
- return 0;
- }
- //something went wrong
- return new IXR_ERROR(1, 'Could not delete file');
- } else {
- return new IXR_ERROR(1, 'File is still referenced');
- }
- }
-
- /**
- * Moves the temporary file to its final destination.
- *
- * Michael Klier <chi@chimeric.de>
- */
- function _media_upload_action($data) {
- global $conf;
-
- if(is_array($data) && count($data)===5) {
- io_createNamespace($data[2], 'media');
- if(rename($data[0], $data[1])) {
- chmod($data[1], $conf['fmode']);
- media_notify($data[2], $data[1], $data[3]);
- // add a log entry to the media changelog
- require_once(DOKU_INC.'inc/changelog.php');
- if ($data[4]) {
- addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_EDIT);
- } else {
- addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_CREATE);
- }
- return $data[2];
- } else {
- return new IXR_ERROR(1, 'Upload failed.');
- }
- } else {
- return new IXR_ERROR(1, 'Upload failed.');
- }
- }
-
- /**
- * Returns the permissions of a given wiki page
- */
- function aclCheck($id) {
- return auth_quickaclcheck($id);
- }
-
- /**
- * Lists all links contained in a wiki page
- *
- * @author Michael Klier <chi@chimeric.de>
- */
- function listLinks($id) {
- if(auth_quickaclcheck($id) < AUTH_READ){
- return new IXR_Error(1, 'You are not allowed to read this page');
- }
- $links = array();
-
- // resolve page instructions
- $ins = p_cached_instructions(wikiFN(cleanID($id)));
-
- // instantiate new Renderer - needed for interwiki links
- include(DOKU_INC.'inc/parser/xhtml.php');
- $Renderer = new Doku_Renderer_xhtml();
- $Renderer->interwiki = getInterwiki();
-
- // parse parse instructions
- foreach($ins as $in) {
- $link = array();
- switch($in[0]) {
- case 'internallink':
- $link['type'] = 'local';
- $link['page'] = $in[1][0];
- $link['href'] = wl($in[1][0]);
- array_push($links,$link);
- break;
- case 'externallink':
- $link['type'] = 'extern';
- $link['page'] = $in[1][0];
- $link['href'] = $in[1][0];
- array_push($links,$link);
- break;
- case 'interwikilink':
- $url = $Renderer->_resolveInterWiki($in[1][2],$in[1][3]);
- $link['type'] = 'extern';
- $link['page'] = $url;
- $link['href'] = $url;
- array_push($links,$link);
- break;
- }
- }
-
- return ($links);
- }
-
- /**
- * Returns a list of recent changes since give timestamp
- *
- * @author Michael Hamann <michael@content-space.de>
- * @author Michael Klier <chi@chimeric.de>
- */
- function getRecentChanges($timestamp) {
- if(strlen($timestamp) != 10)
- return new IXR_Error(20, 'The provided value is not a valid timestamp');
-
- require_once(DOKU_INC.'inc/changelog.php');
- require_once(DOKU_INC.'inc/pageutils.php');
-
- $recents = getRecentsSince($timestamp);
-
- $changes = array();
-
- foreach ($recents as $recent) {
- $change = array();
- $change['name'] = $recent['id'];
- $change['lastModified'] = new IXR_Date($recent['date']);
- $change['author'] = $recent['user'];
- $change['version'] = $recent['date'];
- $change['perms'] = $recent['perms'];
- $change['size'] = @filesize(wikiFN($recent['id']));
- array_push($changes, $change);
- }
-
- if (!empty($changes)) {
- return $changes;
- } else {
- // in case we still have nothing at this point
- return new IXR_Error(30, 'There are no changes in the specified timeframe');
- }
- }
-
- /**
- * Returns a list of recent media changes since give timestamp
- *
- * @author Michael Hamann <michael@content-space.de>
- * @author Michael Klier <chi@chimeric.de>
- */
- function getRecentMediaChanges($timestamp) {
- if(strlen($timestamp) != 10)
- return new IXR_Error(20, 'The provided value is not a valid timestamp');
-
- require_once(DOKU_INC.'inc/changelog.php');
- require_once(DOKU_INC.'inc/pageutils.php');
-
- $recents = getRecentsSince($timestamp, null, '', RECENTS_MEDIA_CHANGES);
-
- $changes = array();
-
- foreach ($recents as $recent) {
- $change = array();
- $change['name'] = $recent['id'];
- $change['lastModified'] = new IXR_Date($recent['date']);
- $change['author'] = $recent['user'];
- $change['version'] = $recent['date'];
- $change['perms'] = $recent['perms'];
- $change['size'] = @filesize(mediaFN($recent['id']));
- array_push($changes, $change);
- }
-
- if (!empty($changes)) {
- return $changes;
- } else {
- // in case we still have nothing at this point
- return new IXR_Error(30, 'There are no changes in the specified timeframe');
- }
- }
-
- /**
- * Returns a list of available revisions of a given wiki page
- *
- * @author Michael Klier <chi@chimeric.de>
- */
- function pageVersions($id, $first) {
- global $conf;
-
- $versions = array();
-
- if(empty($id))
- return new IXR_Error(1, 'Empty page ID');
-
- require_once(DOKU_INC.'inc/changelog.php');
-
- $revisions = getRevisions($id, $first, $conf['recent']+1);
-
- if(count($revisions)==0 && $first!=0) {
- $first=0;
- $revisions = getRevisions($id, $first, $conf['recent']+1);
- }
-
- if(count($revisions)>0 && $first==0) {
- array_unshift($revisions, ''); // include current revision
- array_pop($revisions); // remove extra log entry
- }
-
- $hasNext = false;
- if(count($revisions)>$conf['recent']) {
- $hasNext = true;
- array_pop($revisions); // remove extra log entry
- }
-
- if(!empty($revisions)) {
- foreach($revisions as $rev) {
- $file = wikiFN($id,$rev);
- $time = @filemtime($file);
- // we check if the page actually exists, if this is not the
- // case this can lead to less pages being returned than
- // specified via $conf['recent']
- if($time){
- $info = getRevisionInfo($id, $time, 1024);
- if(!empty($info)) {
- $data['user'] = $info['user'];
- $data['ip'] = $info['ip'];
- $data['type'] = $info['type'];
- $data['sum'] = $info['sum'];
- $data['modified'] = new IXR_Date($info['date']);
- $data['version'] = $info['date'];
- array_push($versions, $data);
- }
- }
- }
- return $versions;
- } else {
- return array();
- }
- }
-
- /**
- * The version of Wiki RPC API supported
- */
- function wiki_RPCVersion(){
- return 2;
- }
-
-
- /**
- * Locks or unlocks a given batch of pages
- *
- * Give an associative array with two keys: lock and unlock. Both should contain a
- * list of pages to lock or unlock
- *
- * Returns an associative array with the keys locked, lockfail, unlocked and
- * unlockfail, each containing lists of pages.
- */
- function setLocks($set){
- $locked = array();
- $lockfail = array();
- $unlocked = array();
- $unlockfail = array();
-
- foreach((array) $set['lock'] as $id){
- if(checklock($id)){
- $lockfail[] = $id;
- }else{
- lock($id);
- $locked[] = $id;
- }
- }
-
- foreach((array) $set['unlock'] as $id){
- if(unlock($id)){
- $unlocked[] = $id;
- }else{
- $unlockfail[] = $id;
- }
- }
-
- return array(
- 'locked' => $locked,
- 'lockfail' => $lockfail,
- 'unlocked' => $unlocked,
- 'unlockfail' => $unlockfail,
- );
- }
-
- function getAPIVersion(){
- return DOKU_XMLRPC_API_VERSION;
- }
-
- function login($user,$pass){
- global $conf;
- global $auth;
- if(!$conf['useacl']) return 0;
- if(!$auth) return 0;
- if($auth->canDo('external')){
- return $auth->trustExternal($user,$pass,false);
- }else{
- return auth_login($user,$pass,false,true);
- }
- }
-
-
-}
-
-$server = new dokuwiki_xmlrpc_server();
-
-// vim:ts=4:sw=4:et:enc=utf-8: