*/
/**
* Class helper_plugin_extension_list takes care of creating a HTML list of extensions
*/
class helper_plugin_extension_list extends DokuWiki_Plugin
{
protected $form = '';
/** @var helper_plugin_extension_gui */
protected $gui;
/**
* Constructor
*
* loads additional helpers
*/
public function __construct()
{
$this->gui = plugin_load('helper', 'extension_gui');
}
/**
* Initialize the extension table form
*/
public function startForm()
{
$this->form .= '
';
}
/**
* Build single row of extension table
*
* @param helper_plugin_extension_extension $extension The extension that shall be added
* @param bool $showinfo Show the info area
*/
public function addRow(helper_plugin_extension_extension $extension, $showinfo = false)
{
$this->startRow($extension);
$this->populateColumn('legend', $this->makeLegend($extension, $showinfo));
$this->populateColumn('actions', $this->makeActions($extension));
$this->endRow();
}
/**
* Adds a header to the form
*
* @param string $id The id of the header
* @param string $header The content of the header
* @param int $level The level of the header
*/
public function addHeader($id, $header, $level = 2)
{
$this->form .=''.hsc($header).''.DOKU_LF;
}
/**
* Adds a paragraph to the form
*
* @param string $data The content
*/
public function addParagraph($data)
{
$this->form .= '
'.hsc($data).'
'.DOKU_LF;
}
/**
* Add hidden fields to the form with the given data
*
* @param array $data key-value list of fields and their values to add
*/
public function addHidden(array $data)
{
$this->form .= '
'.DOKU_LF;
}
/**
* Add closing tags
*/
public function endForm()
{
$this->form .= '
';
}
/**
* Show message when no results are found
*/
public function nothingFound()
{
global $lang;
$this->form .= '
'.$lang['nothingfound'].'
';
}
/**
* Print the form
*
* @param bool $returnonly whether to return html or print
*/
public function render($returnonly = false)
{
if ($returnonly) return $this->form;
echo $this->form;
}
/**
* Start the HTML for the row for the extension
*
* @param helper_plugin_extension_extension $extension The extension
*/
private function startRow(helper_plugin_extension_extension $extension)
{
$this->form .= '
';
}
/**
* Add a column with the given class and content
* @param string $class The class name
* @param string $html The content
*/
private function populateColumn($class, $html)
{
$this->form .= '
'.$html.'
'.DOKU_LF;
}
/**
* End the row
*/
private function endRow()
{
$this->form .= '
'.DOKU_LF;
}
/**
* Generate the link to the plugin homepage
*
* @param helper_plugin_extension_extension $extension The extension
* @return string The HTML code
*/
public function makeHomepageLink(helper_plugin_extension_extension $extension)
{
global $conf;
$url = $extension->getURL();
if (strtolower(parse_url($url, PHP_URL_HOST)) == 'www.dokuwiki.org') {
$linktype = 'interwiki';
} else {
$linktype = 'extern';
}
$param = array(
'href' => $url,
'title' => $url,
'class' => ($linktype == 'extern') ? 'urlextern' : 'interwiki iw_doku',
'target' => $conf['target'][$linktype],
'rel' => ($linktype == 'extern') ? 'noopener' : '',
);
if ($linktype == 'extern' && $conf['relnofollow']) {
$param['rel'] = implode(' ', [$param['rel'], 'ugc nofollow']);
}
$html = ' '.
$this->getLang('homepage_link').'';
return $html;
}
/**
* Generate the class name for the row of the extension
*
* @param helper_plugin_extension_extension $extension The extension object
* @return string The class name
*/
public function makeClass(helper_plugin_extension_extension $extension)
{
$class = ($extension->isTemplate()) ? 'template' : 'plugin';
if ($extension->isInstalled()) {
$class.=' installed';
$class.= ($extension->isEnabled()) ? ' enabled':' disabled';
if ($extension->updateAvailable()) $class .= ' updatable';
}
if (!$extension->canModify()) $class.= ' notselect';
if ($extension->isProtected()) $class.= ' protected';
//if($this->showinfo) $class.= ' showinfo';
return $class;
}
/**
* Generate a link to the author of the extension
*
* @param helper_plugin_extension_extension $extension The extension object
* @return string The HTML code of the link
*/
public function makeAuthor(helper_plugin_extension_extension $extension)
{
if ($extension->getAuthor()) {
$mailid = $extension->getEmailID();
if ($mailid) {
$url = $this->gui->tabURL('search', array('q' => 'authorid:'.$mailid));
$html = ''.
' '.
hsc($extension->getAuthor()).'';
} else {
$html = ''.hsc($extension->getAuthor()).'';
}
$html = ''.$html.'';
} else {
$html = ''.$this->getLang('unknown_author').''.DOKU_LF;
}
return $html;
}
/**
* Get the link and image tag for the screenshot/thumbnail
*
* @param helper_plugin_extension_extension $extension The extension object
* @return string The HTML code
*/
public function makeScreenshot(helper_plugin_extension_extension $extension)
{
$screen = $extension->getScreenshotURL();
$thumb = $extension->getThumbnailURL();
if ($screen) {
// use protocol independent URLs for images coming from us #595
$screen = str_replace('http://www.dokuwiki.org', '//www.dokuwiki.org', $screen);
$thumb = str_replace('http://www.dokuwiki.org', '//www.dokuwiki.org', $thumb);
$title = sprintf($this->getLang('screenshot'), hsc($extension->getDisplayName()));
$img = ''.
''.
'';
} elseif ($extension->isTemplate()) {
$img = '';
} else {
$img = '';
}
$html = '
'.$img.'
'.DOKU_LF;
return $html;
}
/**
* Extension main description
*
* @param helper_plugin_extension_extension $extension The extension object
* @param bool $showinfo Show the info section
* @return string The HTML code
*/
public function makeLegend(helper_plugin_extension_extension $extension, $showinfo = false)
{
$html = '
'.DOKU_LF;
return $html;
}
/**
* Generate the link bar HTML code
*
* @param helper_plugin_extension_extension $extension The extension instance
* @return string The HTML code
*/
public function makeLinkbar(helper_plugin_extension_extension $extension)
{
global $conf;
$html = '
'.DOKU_LF;
return $html;
}
/**
* Generate a list of links for extensions
*
* @param array $ext The extensions
* @return string The HTML code
*/
public function makeLinkList($ext)
{
$html = '';
foreach ($ext as $link) {
$html .= ''.
hsc($link).', ';
}
return rtrim($html, ', ');
}
/**
* Display the action buttons if they are possible
*
* @param helper_plugin_extension_extension $extension The extension
* @return string The HTML code
*/
public function makeActions(helper_plugin_extension_extension $extension)
{
global $conf;
$html = '';
$errors = '';
if ($extension->isInstalled()) {
if (($canmod = $extension->canModify()) === true) {
if (!$extension->isProtected()) {
$html .= $this->makeAction('uninstall', $extension);
}
if ($extension->getDownloadURL()) {
if ($extension->updateAvailable()) {
$html .= $this->makeAction('update', $extension);
} else {
$html .= $this->makeAction('reinstall', $extension);
}
}
} else {
$errors .= '
'.$this->getLang($canmod).'
';
}
if (!$extension->isProtected() && !$extension->isTemplate()) { // no enable/disable for templates
if ($extension->isEnabled()) {
$html .= $this->makeAction('disable', $extension);
} else {
$html .= $this->makeAction('enable', $extension);
}
}
if ($extension->isGitControlled()) {
$errors .= '