diff options
author | Andreas Gohr <andi@splitbrain.org> | 2014-01-19 20:12:52 +0100 |
---|---|---|
committer | Andreas Gohr <andi@splitbrain.org> | 2014-01-19 20:12:52 +0100 |
commit | 0f569f4da813eb51aa75b3fe4a6e5c871b688eea (patch) | |
tree | 7db6c06417b07bb1bbaa5319d9605dfdcb21e1b0 /lib/plugins/extension/helper/gui.php | |
parent | 8426a3ee6fca3bd0fc582d6c405f5d30e12028d0 (diff) | |
parent | 30b90257784ae25a5e30c968b4c9391bb47ff1a1 (diff) | |
download | rpg-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/extension/helper/gui.php')
-rw-r--r-- | lib/plugins/extension/helper/gui.php | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/lib/plugins/extension/helper/gui.php b/lib/plugins/extension/helper/gui.php new file mode 100644 index 000000000..3a0f0c589 --- /dev/null +++ b/lib/plugins/extension/helper/gui.php @@ -0,0 +1,193 @@ +<?php +/** + * DokuWiki Plugin extension (Helper Component) + * + * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html + * @author Andreas Gohr <andi@splitbrain.org> + */ + +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * Class helper_plugin_extension_list takes care of the overall GUI + */ +class helper_plugin_extension_gui extends DokuWiki_Plugin { + + protected $tabs = array('plugins', 'templates', 'search', 'install'); + + /** @var string the extension that should have an open info window FIXME currently broken */ + protected $infoFor = ''; + + /** + * Constructor + * + * initializes requested info window + */ + public function __construct() { + global $INPUT; + $this->infoFor = $INPUT->str('info'); + } + + /** + * display the plugin tab + */ + public function tabPlugins() { + /* @var Doku_Plugin_Controller $plugin_controller */ + global $plugin_controller; + + echo '<div class="panelHeader">'; + echo $this->locale_xhtml('intro_plugins'); + echo '</div>'; + + $pluginlist = $plugin_controller->getList('', true); + sort($pluginlist); + /* @var helper_plugin_extension_extension $extension */ + $extension = $this->loadHelper('extension_extension'); + /* @var helper_plugin_extension_list $list */ + $list = $this->loadHelper('extension_list'); + $list->start_form(); + foreach($pluginlist as $name) { + $extension->setExtension($name); + $list->add_row($extension, $extension->getID() == $this->infoFor); + } + $list->end_form(); + $list->render(); + } + + /** + * Display the template tab + */ + public function tabTemplates() { + echo '<div class="panelHeader">'; + echo $this->locale_xhtml('intro_templates'); + echo '</div>'; + + // FIXME do we have a real way? + $tpllist = glob(DOKU_INC.'lib/tpl/*', GLOB_ONLYDIR); + $tpllist = array_map('basename', $tpllist); + sort($tpllist); + + /* @var helper_plugin_extension_extension $extension */ + $extension = $this->loadHelper('extension_extension'); + /* @var helper_plugin_extension_list $list */ + $list = $this->loadHelper('extension_list'); + $list->start_form(); + foreach($tpllist as $name) { + $extension->setExtension("template:$name"); + $list->add_row($extension, $extension->getID() == $this->infoFor); + } + $list->end_form(); + $list->render(); + } + + /** + * Display the search tab + */ + public function tabSearch() { + global $INPUT; + echo '<div class="panelHeader">'; + echo $this->locale_xhtml('intro_search'); + echo '</div>'; + + $form = new Doku_Form(array('action' => $this->tabURL('', array(), '&'), 'class' => 'search')); + $form->addElement(form_makeTextField('q', $INPUT->str('q'), $this->getLang('search_for'))); + $form->addElement(form_makeButton('submit', '', $this->getLang('search'))); + $form->printForm(); + + if(!$INPUT->bool('q')) return; + + /* @var helper_plugin_extension_repository $repository FIXME should we use some gloabl instance? */ + $repository = $this->loadHelper('extension_repository'); + $result = $repository->search($INPUT->str('q')); + + /* @var helper_plugin_extension_extension $extension */ + $extension = $this->loadHelper('extension_extension'); + /* @var helper_plugin_extension_list $list */ + $list = $this->loadHelper('extension_list'); + $list->start_form(); + if($result){ + foreach($result as $name) { + $extension->setExtension($name); + $list->add_row($extension, $extension->getID() == $this->infoFor); + } + } else { + $list->nothing_found(); + } + $list->end_form(); + $list->render(); + + } + + /** + * Display the template tab + */ + public function tabInstall() { + echo '<div class="panelHeader">'; + echo $this->locale_xhtml('intro_install'); + echo '</div>'; + + $form = new Doku_Form(array('action' => $this->tabURL('', array(), '&'), 'enctype' => 'multipart/form-data', 'class' => 'install')); + $form->addElement(form_makeTextField('installurl', '', $this->getLang('install_url'), '', 'block')); + $form->addElement(form_makeFileField('installfile', $this->getLang('install_upload'), '', 'block')); + $form->addElement(form_makeButton('submit', '', $this->getLang('btn_install'))); + $form->printForm(); + } + + /** + * Print the tab navigation + * + * @fixme style active one + */ + public function tabNavigation() { + echo '<ul class="tabs">'; + foreach($this->tabs as $tab) { + $url = $this->tabURL($tab); + if($this->currentTab() == $tab) { + $class = 'class="active"'; + } else { + $class = ''; + } + echo '<li '.$class.'><a href="'.$url.'">'.$this->getLang('tab_'.$tab).'</a></li>'; + } + echo '</ul>'; + } + + /** + * Return the currently selected tab + * + * @return string + */ + public function currentTab() { + global $INPUT; + + $tab = $INPUT->str('tab', 'plugins', true); + if(!in_array($tab, $this->tabs)) $tab = 'plugins'; + return $tab; + } + + /** + * Create an URL inside the extension manager + * + * @param string $tab tab to load, empty for current tab + * @param array $params associative array of parameter to set + * @param string $sep seperator to build the URL + * @param bool $absolute create absolute URLs? + * @return string + */ + public function tabURL($tab = '', $params = array(), $sep = '&', $absolute = false) { + global $ID; + global $INPUT; + + if(!$tab) $tab = $this->currentTab(); + $defaults = array( + 'do' => 'admin', + 'page' => 'extension', + 'tab' => $tab, + ); + if($tab == 'search') $defaults['q'] = $INPUT->str('q'); + + return wl($ID, array_merge($defaults, $params), $absolute, $sep); + } + +} |