*/
/**
* Class helper_plugin_extension_list takes care of creating a HTML list of extensions
*/
class helper_plugin_extension_list extends 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 = [
'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', ['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 = '