about summary refs log tree commit diff stats
path: root/wiki/lib/plugins/extension/helper/gui.php
diff options
context:
space:
mode:
authorahriman <ahriman@falte.red>2018-12-03 19:22:25 -0500
committerahriman <ahriman@falte.red>2018-12-03 19:22:25 -0500
commit0ae8cbf5c0b1a198b963490985b7738392ebcb97 (patch)
treeb2c77ae72c6b717e2b97492065196ac5ffb2d9e2 /wiki/lib/plugins/extension/helper/gui.php
parentf57f6cc5a2d159f90168d292437dc4bd8cd7f934 (diff)
downloadsite-0ae8cbf5c0b1a198b963490985b7738392ebcb97.tar.gz
installed dokuwiki, added to navbar, updated news
Diffstat (limited to 'wiki/lib/plugins/extension/helper/gui.php')
-rw-r--r--wiki/lib/plugins/extension/helper/gui.php193
1 files changed, 193 insertions, 0 deletions
diff --git a/wiki/lib/plugins/extension/helper/gui.php b/wiki/lib/plugins/extension/helper/gui.php
new file mode 100644
index 0000000..4ec6fec
--- /dev/null
+++ b/wiki/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 = ' 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 = array(), $sep = '&amp;', $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);
+    }
+
+}