diff options
Diffstat (limited to 'lib/plugins/plugin/classes/ap_manage.class.php')
-rw-r--r-- | lib/plugins/plugin/classes/ap_manage.class.php | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/lib/plugins/plugin/classes/ap_manage.class.php b/lib/plugins/plugin/classes/ap_manage.class.php new file mode 100644 index 000000000..aea04f487 --- /dev/null +++ b/lib/plugins/plugin/classes/ap_manage.class.php @@ -0,0 +1,203 @@ +<?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 $ID; + 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[]" value="'.$plugin.'"'.$checked.$check_disabled.' />'); + ptln(' <h3 class="legend">'.$plugin.'</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 $MSG,$config_cascade; + + //are there any undisplayed messages? keep them in session for display + if (isset($MSG) && count($MSG)){ + //reopen session, store data and close session again + @session_start(); + $_SESSION[DOKU_COOKIE]['msg'] = $MSG; + session_write_close(); + } + + // expire dokuwiki caches + // touching local.php expires wiki page, JS and CSS caches + @touch(reset($config_cascade['main']['local'])); + + // update latest plugin date - FIXME + header('Location: '.wl($ID).'?do=admin&page=plugin'); + exit(); + } + + // log + function plugin_writelog($plugin, $cmd, $data) { + + $file = DOKU_PLUGIN.$plugin.'/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' : + $date = date('r'); + if (!$fp = @fopen($file, 'a')) return; + fwrite($fp, "updated=$date\n"); + 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)) { + if (!$dh = @opendir($path)) return false; + + while ($f = readdir($dh)) { + if ($f == '..' || $f == '.') continue; + $this->dir_delete("$path/$f"); + } + + closedir($dh); + return @rmdir($path); + } else { + return @unlink($path); + } + + return false; + } + + +} |