dokuwiki/lib/plugins/extension/GuiAdmin.php
<?php
namespace dokuwiki\plugin\extension;
use dokuwiki\Form\Form;
class GuiAdmin extends Gui
{
public function render()
{
$html = '<div id="extension__manager">';
$html .= $this->tabNavigation();
switch ($this->currentTab()) {
case 'search':
$html .= $this->tabSearch();
break;
case 'templates':
$html .= $this->tabTemplates();
break;
case 'install':
$html .= $this->tabInstall();
break;
case 'plugins':
default:
$html .= $this->tabPlugins();
}
$html .= '</div>';
return $html;
}
/**
* Print the tab navigation
*
*/
public function tabNavigation()
{
$html = '<ul class="tabs">';
foreach ($this->tabs as $tab) {
$url = $this->tabURL($tab);
if ($this->currentTab() == $tab) {
$class = ' active';
} else {
$class = '';
}
$html .= '<li class="' . $tab . $class . '"><a href="' . $url . '">' .
$this->getLang('tab_' . $tab) . '</a></li>';
}
$html .= '</ul>';
return $html;
}
/**
* Return the HTML for the list of installed plugins
*
* @return string
*/
public function tabPlugins()
{
$html = '<div class="panelHeader">';
$html .= $this->helper->locale_xhtml('intro_plugins');
$html .= '</div>';
$plugins = (new Local())->getPlugins();
try {
// initialize remote data in one go
Repository::getInstance()->initExtensions(array_keys($plugins));
} catch (Exception $e) {
msg($e->getMessage(), -1); // this should not happen
}
$html .= '<div id="extension__list">';
$html .= '<form action="' . $this->tabURL('plugins') . '" method="post">';
$html .= '<input type="hidden" name="overwrite" value="1">';
$html .= formSecurityToken(false);
foreach ($plugins as $ext) {
$gui = new GuiExtension($ext);
$html .= $gui->render();
}
$html .= '</form>';
$html .= '</div>';
return $html;
}
/**
* Return the HTML for the list of installed templates
*
* @return string
*/
public function tabTemplates()
{
$html = '<div class="panelHeader">';
$html .= $this->helper->locale_xhtml('intro_templates');
$html .= '</div>';
$templates = (new Local())->getTemplates();
try {
// initialize remote data in one go
Repository::getInstance()->initExtensions(array_keys($templates));
} catch (Exception $e) {
msg($e->getMessage(), -1); // this should not happen
}
$html .= '<div id="extension__list">';
$html .= '<form action="' . $this->tabURL('templates') . '" method="post">';
$html .= '<input type="hidden" name="overwrite" value="1">';
$html .= formSecurityToken(false);
foreach ($templates as $ext) {
$gui = new GuiExtension($ext);
$html .= $gui->render();
}
$html .= '</form>';
$html .= '</div>';
return $html;
}
/**
* Return the HTML for the search tab
*
* @return string
*/
public function tabSearch()
{
global $INPUT;
$html = '<div class="panelHeader">';
$html .= $this->helper->locale_xhtml('intro_search');
$html .= '</div>';
$form = new Form([
'action' => $this->tabURL('search'),
'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');
$html .= $form->toHTML();
if ($INPUT->str('q')) $html .= $this->searchResults($INPUT->str('q'));
return $html;
}
/**
* Return the HTML for the install tab
*
* @return string
*/
public function tabInstall()
{
global $lang;
$html = '<div class="panelHeader">';
$html .= $this->helper->locale_xhtml('intro_install');
$html .= '</div>';
$form = new Form([
'action' => $this->tabURL('install'),
'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');
$html .= $form->toHTML();
return $html;
}
/**
* Execute the given search query and return the results
*
* @param string $q the query
* @return string
*/
protected function searchResults($q)
{
$repo = Repository::getInstance();
$html = '<div id="extension__list">';
$html .= '<form action="' . $this->tabURL('search') . '" method="post">';
$html .= formSecurityToken(false);
try {
$extensions = $repo->searchExtensions($q);
$html .= '<div id="extension__results">';
foreach ($extensions as $ext) {
$gui = new GuiExtension($ext);
$html .= $gui->render();
}
$html .= '</div>';
} catch (Exception $e) {
msg($e->getMessage(), -1);
}
$html .= '</form>';
$html .= '</div>';
return $html;
}
}