summaryrefslogtreecommitdiff
path: root/lib/plugins/plugin/classes
diff options
context:
space:
mode:
authorAndreas Gohr <andi@splitbrain.org>2014-01-19 20:12:52 +0100
committerAndreas Gohr <andi@splitbrain.org>2014-01-19 20:12:52 +0100
commit0f569f4da813eb51aa75b3fe4a6e5c871b688eea (patch)
tree7db6c06417b07bb1bbaa5319d9605dfdcb21e1b0 /lib/plugins/plugin/classes
parent8426a3ee6fca3bd0fc582d6c405f5d30e12028d0 (diff)
parent30b90257784ae25a5e30c968b4c9391bb47ff1a1 (diff)
downloadrpg-0f569f4da813eb51aa75b3fe4a6e5c871b688eea.tar.gz
rpg-0f569f4da813eb51aa75b3fe4a6e5c871b688eea.tar.bz2
Merge branch 'extension_manager'
* extension_manager: (71 commits) added plugins group to test show a message when search returns no results added missing localization better filename parsing use DOKU_LF remove unneeded try/catch blocks typo fix purge cache only once on install check for admin in AJAX backend now use new core funtion to recursively delete added status to info list of extension plugin added css and html changes for RTL scripts to extension manager added basic mobile styles to extension manager (not great, but makes things at least readable) fixed and improved some HTML in extension manager added git warning fixed strict standard error and added some docblock removed the old plugin manager typo fix protect authplain and current auth plugin do not show updates for bundled plugins ... Conflicts: lib/plugins/plugin/lang/hu/admin_plugin.txt lib/plugins/plugin/lang/hu/lang.php
Diffstat (limited to 'lib/plugins/plugin/classes')
-rw-r--r--lib/plugins/plugin/classes/ap_delete.class.php28
-rw-r--r--lib/plugins/plugin/classes/ap_download.class.php288
-rw-r--r--lib/plugins/plugin/classes/ap_enable.class.php51
-rw-r--r--lib/plugins/plugin/classes/ap_info.class.php143
-rw-r--r--lib/plugins/plugin/classes/ap_manage.class.php202
-rw-r--r--lib/plugins/plugin/classes/ap_update.class.php36
6 files changed, 0 insertions, 748 deletions
diff --git a/lib/plugins/plugin/classes/ap_delete.class.php b/lib/plugins/plugin/classes/ap_delete.class.php
deleted file mode 100644
index 581a6295f..000000000
--- a/lib/plugins/plugin/classes/ap_delete.class.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-class ap_delete extends ap_manage {
-
- function process() {
-
- if (!$this->dir_delete(DOKU_PLUGIN.plugin_directory($this->manager->plugin))) {
- $this->manager->error = sprintf($this->lang['error_delete'],$this->manager->plugin);
- } else {
- msg(sprintf($this->lang['deleted'],$this->plugin));
- $this->refresh();
- }
- }
-
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['deleting'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />",$this->manager->error).'</div>');
- } else {
- ptln('<p>'.sprintf($this->lang['deleted'],$this->plugin).'</p>');
- }
- ptln('</div>');
- }
-}
-
diff --git a/lib/plugins/plugin/classes/ap_download.class.php b/lib/plugins/plugin/classes/ap_download.class.php
deleted file mode 100644
index b1be11506..000000000
--- a/lib/plugins/plugin/classes/ap_download.class.php
+++ /dev/null
@@ -1,288 +0,0 @@
-<?php
-class ap_download extends ap_manage {
-
- var $overwrite = true;
-
- /**
- * Initiate the plugin download
- */
- function process() {
- global $INPUT;
-
- $plugin_url = $INPUT->str('url');
- $this->download($plugin_url, $this->overwrite);
- return '';
- }
-
- /**
- * Print results of the download
- */
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['downloading'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />",hsc($this->manager->error)).'</div>');
- } else if (count($this->downloaded) == 1) {
- ptln('<p>'.sprintf($this->lang['downloaded'],$this->downloaded[0]).'</p>');
- } else if (count($this->downloaded)) { // more than one plugin in the download
- ptln('<p>'.$this->lang['downloads'].'</p>');
- ptln('<ul>');
- foreach ($this->downloaded as $plugin) {
- ptln('<li><div class="li">'.$plugin.'</div></li>',2);
- }
- ptln('</ul>');
- } else { // none found in download
- ptln('<p>'.$this->lang['download_none'].'</p>');
- }
- ptln('</div>');
- }
-
- /**
- * Process the downloaded file
- */
- function download($url, $overwrite=false) {
- // check the url
- $matches = array();
- if (!preg_match("/[^\/]*$/", $url, $matches) || !$matches[0]) {
- $this->manager->error = $this->lang['error_badurl']."\n";
- return false;
- }
-
- $file = $matches[0];
-
- if (!($tmp = io_mktmpdir())) {
- $this->manager->error = $this->lang['error_dircreate']."\n";
- return false;
- }
-
- if (!$file = io_download($url, "$tmp/", true, $file, 0)) {
- $this->manager->error = sprintf($this->lang['error_download'],$url)."\n";
- }
-
- if (!$this->manager->error && !$this->decompress("$tmp/$file", $tmp)) {
- $this->manager->error = sprintf($this->lang['error_decompress'],$file)."\n";
- }
-
- // search $tmp for the folder(s) that has been created
- // move the folder(s) to lib/plugins/
- if (!$this->manager->error) {
- $result = array('old'=>array(), 'new'=>array());
- if($this->find_folders($result,$tmp)){
- // choose correct result array
- if(count($result['new'])){
- $install = $result['new'];
- }else{
- $install = $result['old'];
- }
-
- // now install all found items
- foreach($install as $item){
- // where to install?
- if($item['type'] == 'template'){
- $target = DOKU_INC.'lib/tpl/'.$item['base'];
- }else{
- $target = DOKU_INC.'lib/plugins/'.$item['base'];
- }
-
- // check to make sure we aren't overwriting anything
- if (!$overwrite && @file_exists($target)) {
- // remember our settings, ask the user to confirm overwrite, FIXME
- continue;
- }
-
- $instruction = @file_exists($target) ? 'update' : 'install';
-
- // copy action
- if ($this->dircopy($item['tmp'], $target)) {
- $this->downloaded[] = $item['base'];
- $this->plugin_writelog($target, $instruction, array($url));
- } else {
- $this->manager->error .= sprintf($this->lang['error_copy']."\n", $item['base']);
- }
- }
-
- } else {
- $this->manager->error = $this->lang['error']."\n";
- }
- }
-
- // cleanup
- if ($tmp) $this->dir_delete($tmp);
-
- if (!$this->manager->error) {
- msg(sprintf($this->lang['packageinstalled'], count($this->downloaded), join(',',$this->downloaded)),1);
- $this->refresh();
- return true;
- }
-
- return false;
- }
-
- /**
- * Find out what was in the extracted directory
- *
- * Correct folders are searched recursively using the "*.info.txt" configs
- * as indicator for a root folder. When such a file is found, it's base
- * setting is used (when set). All folders found by this method are stored
- * in the 'new' key of the $result array.
- *
- * For backwards compatibility all found top level folders are stored as
- * in the 'old' key of the $result array.
- *
- * When no items are found in 'new' the copy mechanism should fall back
- * the 'old' list.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param arrayref $result - results are stored here
- * @param string $base - the temp directory where the package was unpacked to
- * @param string $dir - a subdirectory. do not set. used by recursion
- * @return bool - false on error
- */
- function find_folders(&$result,$base,$dir=''){
- $dh = @opendir("$base/$dir");
- if(!$dh) return false;
- while (false !== ($f = readdir($dh))) {
- if ($f == '.' || $f == '..' || $f == 'tmp') continue;
-
- if(!is_dir("$base/$dir/$f")){
- // it's a file -> check for config
- if($f == 'plugin.info.txt'){
- $info = array();
- $info['type'] = 'plugin';
- $info['tmp'] = "$base/$dir";
- $conf = confToHash("$base/$dir/$f");
- $info['base'] = utf8_basename($conf['base']);
- if(!$info['base']) $info['base'] = utf8_basename("$base/$dir");
- $result['new'][] = $info;
- }elseif($f == 'template.info.txt'){
- $info = array();
- $info['type'] = 'template';
- $info['tmp'] = "$base/$dir";
- $conf = confToHash("$base/$dir/$f");
- $info['base'] = utf8_basename($conf['base']);
- if(!$info['base']) $info['base'] = utf8_basename("$base/$dir");
- $result['new'][] = $info;
- }
- }else{
- // it's a directory -> add to dir list for old method, then recurse
- if(!$dir){
- $info = array();
- $info['type'] = 'plugin';
- $info['tmp'] = "$base/$dir/$f";
- $info['base'] = $f;
- $result['old'][] = $info;
- }
- $this->find_folders($result,$base,"$dir/$f");
- }
- }
- closedir($dh);
- return true;
- }
-
-
- /**
- * Decompress a given file to the given target directory
- *
- * Determines the compression type from the file extension
- */
- function decompress($file, $target) {
- global $conf;
-
- // decompression library doesn't like target folders ending in "/"
- if (substr($target, -1) == "/") $target = substr($target, 0, -1);
-
- $ext = $this->guess_archive($file);
- if (in_array($ext, array('tar','bz','gz'))) {
- switch($ext){
- case 'bz':
- $compress_type = Tar::COMPRESS_BZIP;
- break;
- case 'gz':
- $compress_type = Tar::COMPRESS_GZIP;
- break;
- default:
- $compress_type = Tar::COMPRESS_NONE;
- }
-
- $tar = new Tar();
- try {
- $tar->open($file, $compress_type);
- $tar->extract($target);
- return true;
- }catch(Exception $e){
- if($conf['allowdebug']){
- msg('Tar Error: '.$e->getMessage().' ['.$e->getFile().':'.$e->getLine().']',-1);
- }
- return false;
- }
- } else if ($ext == 'zip') {
-
- $zip = new ZipLib();
- $ok = $zip->Extract($file, $target);
-
- // FIXME sort something out for handling zip error messages meaningfully
- return ($ok==-1?false:true);
-
- }
-
- // unsupported file type
- return false;
- }
-
- /**
- * Determine the archive type of the given file
- *
- * Reads the first magic bytes of the given file for content type guessing,
- * if neither bz, gz or zip are recognized, tar is assumed.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @returns boolean|string false if the file can't be read, otherwise an "extension"
- */
- function guess_archive($file){
- $fh = fopen($file,'rb');
- if(!$fh) return false;
- $magic = fread($fh,5);
- fclose($fh);
-
- if(strpos($magic,"\x42\x5a") === 0) return 'bz';
- if(strpos($magic,"\x1f\x8b") === 0) return 'gz';
- if(strpos($magic,"\x50\x4b\x03\x04") === 0) return 'zip';
- return 'tar';
- }
-
- /**
- * Copy with recursive sub-directory support
- */
- function dircopy($src, $dst) {
- global $conf;
-
- if (is_dir($src)) {
- if (!$dh = @opendir($src)) return false;
-
- if ($ok = io_mkdir_p($dst)) {
- while ($ok && (false !== ($f = readdir($dh)))) {
- if ($f == '..' || $f == '.') continue;
- $ok = $this->dircopy("$src/$f", "$dst/$f");
- }
- }
-
- closedir($dh);
- return $ok;
-
- } else {
- $exists = @file_exists($dst);
-
- if (!@copy($src,$dst)) return false;
- if (!$exists && !empty($conf['fperm'])) chmod($dst, $conf['fperm']);
- @touch($dst,filemtime($src));
- }
-
- return true;
- }
-
-
-}
-
diff --git a/lib/plugins/plugin/classes/ap_enable.class.php b/lib/plugins/plugin/classes/ap_enable.class.php
deleted file mode 100644
index a25c7ede8..000000000
--- a/lib/plugins/plugin/classes/ap_enable.class.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-
-class ap_enable extends ap_manage {
-
- var $enabled = array();
-
- function process() {
- global $plugin_protected;
- global $INPUT;
-
- $count_enabled = $count_disabled = 0;
-
- $this->enabled = $INPUT->arr('enabled');
-
- foreach ($this->manager->plugin_list as $plugin) {
- if (in_array($plugin, $plugin_protected)) continue;
-
- $new = in_array($plugin, $this->enabled);
- $old = !plugin_isdisabled($plugin);
-
- if ($new != $old) {
- switch ($new) {
- // enable plugin
- case true :
- if(plugin_enable($plugin)){
- msg(sprintf($this->lang['enabled'],$plugin),1);
- $count_enabled++;
- }else{
- msg(sprintf($this->lang['notenabled'],$plugin),-1);
- }
- break;
- case false:
- if(plugin_disable($plugin)){
- msg(sprintf($this->lang['disabled'],$plugin),1);
- $count_disabled++;
- }else{
- msg(sprintf($this->lang['notdisabled'],$plugin),-1);
- }
- break;
- }
- }
- }
-
- // refresh plugins, including expiring any dokuwiki cache(s)
- if ($count_enabled || $count_disabled) {
- $this->refresh();
- }
- }
-
-}
-
diff --git a/lib/plugins/plugin/classes/ap_info.class.php b/lib/plugins/plugin/classes/ap_info.class.php
deleted file mode 100644
index 89b78fa2d..000000000
--- a/lib/plugins/plugin/classes/ap_info.class.php
+++ /dev/null
@@ -1,143 +0,0 @@
-<?php
-
-class ap_info extends ap_manage {
-
- var $plugin_info = array(); // the plugin itself
- var $details = array(); // any component plugins
-
- function process() {
-
- // sanity check
- if (!$this->manager->plugin) { return; }
-
- $component_list = $this->get_plugin_components($this->manager->plugin);
- usort($component_list, array($this,'component_sort'));
-
- foreach ($component_list as $component) {
- if (($obj = plugin_load($component['type'],$component['name'],false,true)) === null) continue;
-
- $compname = explode('_',$component['name']);
- if($compname[1]){
- $compname = '['.$compname[1].']';
- }else{
- $compname = '';
- }
-
- $this->details[] = array_merge(
- $obj->getInfo(),
- array(
- 'type' => $component['type'],
- 'compname' => $compname
- ));
- unset($obj);
- }
-
- // review details to simplify things
- foreach($this->details as $info) {
- foreach($info as $item => $value) {
- if (!isset($this->plugin_info[$item])) { $this->plugin_info[$item] = $value; continue; }
- if ($this->plugin_info[$item] != $value) $this->plugin_info[$item] = '';
- }
- }
- }
-
- function html() {
-
- // output the standard menu stuff
- parent::html();
-
- // sanity check
- if (!$this->manager->plugin) { return; }
-
- ptln('<div class="pm_info">');
- ptln("<h2>".$this->manager->getLang('plugin')." {$this->manager->plugin}</h2>");
-
- // collect pertinent information from the log
- $installed = $this->plugin_readlog($this->manager->plugin, 'installed');
- $source = $this->plugin_readlog($this->manager->plugin, 'url');
- $updated = $this->plugin_readlog($this->manager->plugin, 'updated');
- if (strrpos($updated, "\n") !== false) $updated = substr($updated, strrpos($updated, "\n")+1);
-
- ptln("<dl>",2);
- ptln("<dt>".$this->manager->getLang('source').'</dt><dd>'.($source ? $source : $this->manager->getLang('unknown'))."</dd>",4);
- ptln("<dt>".$this->manager->getLang('installed').'</dt><dd>'.($installed ? $installed : $this->manager->getLang('unknown'))."</dd>",4);
- if ($updated) ptln("<dt>".$this->manager->getLang('lastupdate').'</dt><dd>'.$updated."</dd>",4);
- ptln("</dl>",2);
-
- if (count($this->details) == 0) {
- ptln("<p>".$this->manager->getLang('noinfo')."</p>",2);
- } else {
-
- ptln("<dl>",2);
- if ($this->plugin_info['name']) ptln("<dt>".$this->manager->getLang('name')."</dt><dd>".$this->out($this->plugin_info['name'])."</dd>",4);
- if ($this->plugin_info['date']) ptln("<dt>".$this->manager->getLang('date')."</dt><dd>".$this->out($this->plugin_info['date'])."</dd>",4);
- if ($this->plugin_info['type']) ptln("<dt>".$this->manager->getLang('type')."</dt><dd>".$this->out($this->plugin_info['type'])."</dd>",4);
- if ($this->plugin_info['desc']) ptln("<dt>".$this->manager->getLang('desc')."</dt><dd>".$this->out($this->plugin_info['desc'])."</dd>",4);
- if ($this->plugin_info['author']) ptln("<dt>".$this->manager->getLang('author')."</dt><dd>".$this->manager->email($this->plugin_info['email'], $this->plugin_info['author'])."</dd>",4);
- if ($this->plugin_info['url']) ptln("<dt>".$this->manager->getLang('www')."</dt><dd>".$this->manager->external_link($this->plugin_info['url'], '', 'urlextern')."</dd>",4);
- ptln("</dl>",2);
-
- if (count($this->details) > 1) {
- ptln("<h3>".$this->manager->getLang('components')."</h3>",2);
- ptln("<div>",2);
-
- foreach ($this->details as $info) {
-
- ptln("<dl>",4);
- ptln("<dt>".$this->manager->getLang('name')."</dt><dd>".$this->out($info['name'].' '.$info['compname'])."</dd>",6);
- if (!$this->plugin_info['date']) ptln("<dt>".$this->manager->getLang('date')."</dt><dd>".$this->out($info['date'])."</dd>",6);
- if (!$this->plugin_info['type']) ptln("<dt>".$this->manager->getLang('type')."</dt><dd>".$this->out($info['type'])."</dd>",6);
- if (!$this->plugin_info['desc']) ptln("<dt>".$this->manager->getLang('desc')."</dt><dd>".$this->out($info['desc'])."</dd>",6);
- if (!$this->plugin_info['author']) ptln("<dt>".$this->manager->getLang('author')."</dt><dd>".$this->manager->email($info['email'], $info['author'])."</dd>",6);
- if (!$this->plugin_info['url']) ptln("<dt>".$this->manager->getLang('www')."</dt><dd>".$this->manager->external_link($info['url'], '', 'urlextern')."</dd>",6);
- ptln("</dl>",4);
-
- }
- ptln("</div>",2);
- }
- }
- ptln("</div>");
- }
-
- // simple output filter, make html entities safe and convert new lines to <br />
- function out($text) {
- return str_replace("\n",'<br />',htmlspecialchars($text));
- }
-
-
- /**
- * return a list (name & type) of all the component plugins that make up this plugin
- *
- * @todo can this move to pluginutils?
- */
- function get_plugin_components($plugin) {
-
- global $plugin_types;
-
- $components = array();
- $path = DOKU_PLUGIN.plugin_directory($plugin).'/';
-
- foreach ($plugin_types as $type) {
- if (@file_exists($path.$type.'.php')) { $components[] = array('name'=>$plugin, 'type'=>$type); continue; }
-
- if ($dh = @opendir($path.$type.'/')) {
- while (false !== ($cp = readdir($dh))) {
- if ($cp == '.' || $cp == '..' || strtolower(substr($cp,-4)) != '.php') continue;
-
- $components[] = array('name'=>$plugin.'_'.substr($cp, 0, -4), 'type'=>$type);
- }
- closedir($dh);
- }
- }
-
- return $components;
- }
-
- /**
- * usort callback to sort plugin components
- */
- function component_sort($a, $b) {
- if ($a['name'] == $b['name']) return 0;
- return ($a['name'] < $b['name']) ? -1 : 1;
- }
-}
diff --git a/lib/plugins/plugin/classes/ap_manage.class.php b/lib/plugins/plugin/classes/ap_manage.class.php
deleted file mode 100644
index 48be63050..000000000
--- a/lib/plugins/plugin/classes/ap_manage.class.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-
-class ap_manage {
-
- var $manager = null;
- var $lang = array();
- var $plugin = '';
- var $downloaded = array();
-
- function ap_manage(&$manager, $plugin) {
- $this->manager = & $manager;
- $this->plugin = $plugin;
- $this->lang = & $manager->lang;
- }
-
- function process() {
- return '';
- }
-
- function html() {
- print $this->manager->locale_xhtml('admin_plugin');
- $this->html_menu();
- }
-
- // build our standard menu
- function html_menu($listPlugins = true) {
- global $ID;
-
- ptln('<div class="pm_menu">');
-
- ptln('<div class="common">');
- ptln(' <h2>'.$this->lang['download'].'</h2>');
- ptln(' <form action="'.wl($ID).'" method="post">');
- ptln(' <fieldset class="hidden">',4);
- ptln(' <input type="hidden" name="do" value="admin" />');
- ptln(' <input type="hidden" name="page" value="plugin" />');
- formSecurityToken();
- ptln(' </fieldset>');
- ptln(' <fieldset>');
- ptln(' <legend>'.$this->lang['download'].'</legend>');
- ptln(' <label for="dw__url">'.$this->lang['url'].'<input name="url" id="dw__url" class="edit" type="text" maxlength="200" /></label>');
- ptln(' <input type="submit" class="button" name="fn[download]" value="'.$this->lang['btn_download'].'" />');
- ptln(' </fieldset>');
- ptln(' </form>');
- ptln('</div>');
-
- if ($listPlugins) {
- ptln('<h2>'.$this->lang['manage'].'</h2>');
-
- ptln('<form action="'.wl($ID).'" method="post" class="plugins">');
-
- ptln(' <fieldset class="hidden">');
- ptln(' <input type="hidden" name="do" value="admin" />');
- ptln(' <input type="hidden" name="page" value="plugin" />');
- formSecurityToken();
- ptln(' </fieldset>');
-
- $this->html_pluginlist();
-
- ptln(' <fieldset class="buttons">');
- ptln(' <input type="submit" class="button" name="fn[enable]" value="'.$this->lang['btn_enable'].'" />');
- ptln(' </fieldset>');
-
- // ptln(' </div>');
- ptln('</form>');
- }
-
- ptln('</div>');
- }
-
- function html_pluginlist() {
- global $plugin_protected;
-
- foreach ($this->manager->plugin_list as $plugin) {
-
- $disabled = plugin_isdisabled($plugin);
- $protected = in_array($plugin,$plugin_protected);
-
- $checked = ($disabled) ? '' : ' checked="checked"';
- $check_disabled = ($protected) ? ' disabled="disabled"' : '';
-
- // determine display class(es)
- $class = array();
- if (in_array($plugin, $this->downloaded)) $class[] = 'new';
- if ($disabled) $class[] = 'disabled';
- if ($protected) $class[] = 'protected';
-
- $class = count($class) ? ' class="'.join(' ', $class).'"' : '';
-
- ptln(' <fieldset'.$class.'>');
- ptln(' <legend>'.$plugin.'</legend>');
- ptln(' <input type="checkbox" class="enable" name="enabled[]" id="dw__p_'.$plugin.'" value="'.$plugin.'"'.$checked.$check_disabled.' />');
- ptln(' <h3 class="legend"><label for="dw__p_'.$plugin.'">'.$plugin.'</label></h3>');
-
- $this->html_button($plugin, 'info', false, 6);
- if (in_array('settings', $this->manager->functions)) {
- $this->html_button($plugin, 'settings', !@file_exists(DOKU_PLUGIN.$plugin.'/settings.php'), 6);
- }
- $this->html_button($plugin, 'update', !$this->plugin_readlog($plugin, 'url'), 6);
- $this->html_button($plugin, 'delete', $protected, 6);
-
- ptln(' </fieldset>');
- }
- }
-
- function html_button($plugin, $btn, $disabled=false, $indent=0) {
- $disabled = ($disabled) ? 'disabled="disabled"' : '';
- ptln('<input type="submit" class="button" '.$disabled.' name="fn['.$btn.']['.$plugin.']" value="'.$this->lang['btn_'.$btn].'" />',$indent);
- }
-
- /**
- * Refresh plugin list
- */
- function refresh() {
- global $config_cascade;
-
- // expire dokuwiki caches
- // touching local.php expires wiki page, JS and CSS caches
- @touch(reset($config_cascade['main']['local']));
-
- // update latest plugin date - FIXME
- global $ID;
- send_redirect(wl($ID,array('do'=>'admin','page'=>'plugin'),true, '&'));
- }
-
- /**
- * Write a log entry to the given target directory
- */
- function plugin_writelog($target, $cmd, $data) {
-
- $file = $target.'/manager.dat';
-
- switch ($cmd) {
- case 'install' :
- $url = $data[0];
- $date = date('r');
- if (!$fp = @fopen($file, 'w')) return;
- fwrite($fp, "installed=$date\nurl=$url\n");
- fclose($fp);
- break;
-
- case 'update' :
- $url = $data[0];
- $date = date('r');
- if (!$fp = @fopen($file, 'r+')) return;
- $buffer = "";
- while (($line = fgets($fp)) !== false) {
- $urlFound = strpos($line,"url");
- if($urlFound !== false) $line="url=$url\n";
- $buffer .= $line;
- }
- $buffer .= "updated=$date\n";
- fseek($fp, 0);
- fwrite($fp, $buffer);
- fclose($fp);
- break;
- }
- }
-
- function plugin_readlog($plugin, $field) {
- static $log = array();
- $file = DOKU_PLUGIN.plugin_directory($plugin).'/manager.dat';
-
- if (!isset($log[$plugin])) {
- $tmp = @file_get_contents($file);
- if (!$tmp) return '';
- $log[$plugin] = & $tmp;
- }
-
- if ($field == 'ALL') {
- return $log[$plugin];
- }
-
- $match = array();
- if (preg_match_all('/'.$field.'=(.*)$/m',$log[$plugin], $match))
- return implode("\n", $match[1]);
-
- return '';
- }
-
- /**
- * delete, with recursive sub-directory support
- */
- function dir_delete($path) {
- if (!is_string($path) || $path == "") return false;
-
- if (is_dir($path) && !is_link($path)) {
- if (!$dh = @opendir($path)) return false;
-
- while ($f = readdir($dh)) {
- if ($f == '..' || $f == '.') continue;
- $this->dir_delete("$path/$f");
- }
-
- closedir($dh);
- return @rmdir($path);
- }
- return @unlink($path);
- }
-
-
-}
diff --git a/lib/plugins/plugin/classes/ap_update.class.php b/lib/plugins/plugin/classes/ap_update.class.php
deleted file mode 100644
index 5d7f6cb08..000000000
--- a/lib/plugins/plugin/classes/ap_update.class.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-require_once(DOKU_PLUGIN."/plugin/classes/ap_download.class.php");
-class ap_update extends ap_download {
-
- var $overwrite = true;
-
- function process() {
- $plugin_url = $this->plugin_readlog($this->plugin, 'url');
- $this->download($plugin_url, $this->overwrite);
- return '';
- }
-
- function html() {
- parent::html();
-
- ptln('<div class="pm_info">');
- ptln('<h2>'.$this->lang['updating'].'</h2>');
-
- if ($this->manager->error) {
- ptln('<div class="error">'.str_replace("\n","<br />", $this->manager->error).'</div>');
- } else if (count($this->downloaded) == 1) {
- ptln('<p>'.sprintf($this->lang['updated'],$this->downloaded[0]).'</p>');
- } else if (count($this->downloaded)) { // more than one plugin in the download
- ptln('<p>'.$this->lang['updates'].'</p>');
- ptln('<ul>');
- foreach ($this->downloaded as $plugin) {
- ptln('<li><div class="li">'.$plugin.'</div></li>',2);
- }
- ptln('</ul>');
- } else { // none found in download
- ptln('<p>'.$this->lang['update_none'].'</p>');
- }
- ptln('</div>');
- }
-}
-