123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <?php
- /**
- * DokuWiki Plugin extension (Helper Component)
- *
- * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- use dokuwiki\Form\Form;
- /**
- * 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()
- {
- echo '<div class="panelHeader">';
- echo $this->locale_xhtml('intro_plugins');
- echo '</div>';
- $pluginlist = plugin_list('', true);
- /* @var helper_plugin_extension_extension $extension */
- $extension = $this->loadHelper('extension_extension');
- /* @var helper_plugin_extension_list $list */
- $list = $this->loadHelper('extension_list');
- $form = new Form([
- 'action' => $this->tabURL('', [], '&'),
- 'id' => 'extension__list',
- ]);
- $list->startForm();
- foreach ($pluginlist as $name) {
- $extension->setExtension($name);
- $list->addRow($extension, $extension->getID() == $this->infoFor);
- }
- $list->endForm();
- $form->addHTML($list->render(true));
- echo $form->toHTML();
- }
- /**
- * 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');
- $form = new Form([
- 'action' => $this->tabURL('', [], '&'),
- 'id' => 'extension__list',
- ]);
- $list->startForm();
- foreach ($tpllist as $name) {
- $extension->setExtension("template:$name");
- $list->addRow($extension, $extension->getID() == $this->infoFor);
- }
- $list->endForm();
- $form->addHTML($list->render(true));
- echo $form->toHTML();
- }
- /**
- * Display the search tab
- */
- public function tabSearch()
- {
- global $INPUT;
- echo '<div class="panelHeader">';
- echo $this->locale_xhtml('intro_search');
- echo '</div>';
- $form = new Form([
- 'action' => $this->tabURL('', [], '&'),
- 'class' => 'search',
- ]);
- $form->addTagOpen('div')->addClass('no');
- $form->addTextInput('q', $this->getLang('search_for'))
- ->addClass('edit')
- ->val($INPUT->str('q'));
- $form->addButton('submit', $this->getLang('search'))
- ->attrs(['type' => 'submit', 'title' => $this->getLang('search')]);
- $form->addTagClose('div');
- echo $form->toHTML();
- 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');
- $form = new Form([
- 'action' => $this->tabURL('', [], '&'),
- 'id' => 'extension__list',
- ]);
- $list->startForm();
- if ($result) {
- foreach ($result as $name) {
- $extension->setExtension($name);
- $list->addRow($extension, $extension->getID() == $this->infoFor);
- }
- } else {
- $list->nothingFound();
- }
- $list->endForm();
- $form->addHTML($list->render(true));
- echo $form->toHTML();
- }
- /**
- * Display the template tab
- */
- public function tabInstall()
- {
- global $lang;
- echo '<div class="panelHeader">';
- echo $this->locale_xhtml('intro_install');
- echo '</div>';
- $form = new Form([
- 'action' => $this->tabURL('', [], '&'),
- 'enctype' => 'multipart/form-data',
- 'class' => 'install',
- ]);
- $form->addTagOpen('div')->addClass('no');
- $form->addTextInput('installurl', $this->getLang('install_url'))
- ->addClass('block')
- ->attrs(['type' => 'url']);
- $form->addTag('br');
- $form->addTextInput('installfile', $this->getLang('install_upload'))
- ->addClass('block')
- ->attrs(['type' => 'file']);
- $form->addTag('br');
- $form->addCheckbox('overwrite', $lang['js']['media_overwrt'])
- ->addClass('block');
- $form->addTag('br');
- $form->addButton('', $this->getLang('btn_install'))
- ->attrs(['type' => 'submit', 'title' => $this->getLang('btn_install')]);
- $form->addTagClose('div');
- echo $form->toHTML();
- }
- /**
- * 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 = ' active';
- } else {
- $class = '';
- }
- echo '<li class="'.$tab.$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 = [], $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);
- }
- }
|