dokuwiki-template-sprintdoc.../Template.php
Michael Große e302d67fb6
Remove references to removed options
In commit cb7cc643bf the other options
were removed, as discussed.

This commit now removes references to these options from the codebase.

SPR-754
2017-04-18 13:24:33 +02:00

208 lines
6 KiB
PHP

<?php
namespace dokuwiki\template\sprintdoc;
/**
* Class Template
*
* provides additional logic for the sprintdoc template
*
* @package dokuwiki\template\sprintdoc
*/
class Template {
/**
* @var array loaded plugins
*/
protected $plugins = array(
'sqlite' => null,
'tagging' => null,
'magicmatcher' => null,
);
/**
* Get the singleton instance
*
* @return Template
*/
public static function getInstance() {
static $instance = null;
if($instance === null) $instance = new Template();
return $instance;
}
/**
* Template constructor.
*/
protected function __construct() {
$this->initializePlugins();
/** @var \Doku_Event_Handler */
global $EVENT_HANDLER;
$EVENT_HANDLER->register_hook('PLUGIN_TPLINC_LOCATIONS_SET', 'BEFORE', $this, 'registerIncludes');
}
/**
* Makes include position info available to the tplinc plugin
*
* @param \Doku_Event $event
*/
public function registerIncludes(\Doku_Event $event) {
$event->data['footer'] = 'Footer below the page content';
$event->data['sidebarfooter'] = 'Footer below the sidebar';
$event->data['sidebarheader'] = 'Header above the sidebar';
}
/**
* Get the content to include from the tplinc plugin
*
* prefix and postfix are only added when there actually is any content
*
* @param string $location
* @param string $pre prepend this before the content
* @param string $post append this to the content
* @return string
*/
public function getInclude($location, $pre = '', $post = '') {
if(!$this->plugins['tplinc']) return '';
$content = $this->plugins['tplinc']->renderIncludes($location);
if($content === '') return '';
return $pre . $content . $post;
}
/**
* Load all the plugins we support directly
*/
protected function initializePlugins() {
$this->plugins['sqlite'] = plugin_load('helper', 'sqlite');
if($this->plugins['sqlite']) {
$this->plugins['tagging'] = plugin_load('helper', 'tagging');
$this->plugins['magicmatcher'] = plugin_load('syntax', 'magicmatcher_issuelist');
}
$this->plugins['tplinc'] = plugin_load('helper', 'tplinc');
}
/**
* Get all the tabs to display
*
* @return array
*/
public function getMetaBoxTabs() {
global $lang;
$tabs = array();
$toc = tpl_toc(true);
if($toc) {
$tabs[] = array(
'id' => 'spr__tab-toc',
'label' => $lang['toc'],
'tab' => $toc,
'count' => null,
);
}
if($this->plugins['tagging']) {
$tabs[] = array(
'id' => 'spr__tab-tags',
'label' => tpl_getLang('tab_tags'),
'tab' => $this->plugins['tagging']->tpl_tags(false),
'count' => null, // FIXME
);
}
if ($this->plugins['magicmatcher']) {
$tabs[] = array(
'id' => 'spr__tab-issues',
'label' => tpl_getLang('tab_issues'),
'tab' => $this->plugins['magicmatcher']->getIssueListHTML(),
'count' => $this->plugins['magicmatcher']->getCountIssues(),
);
}
return $tabs;
}
/**
* Creates an image tag and includes the first found image correctly resized
*
* @param string $tag
* @param array $attributes
* @param int $w
* @param int $h
* @return string
*/
public static function getResizedImgTag($tag, $attributes, $w, $h) {
$attr = '';
$medias = array();
// the attribute having an array defines where the image goes
foreach($attributes as $attribute => $data) {
if(is_array($data)) {
$medias = $data;
$attr = $attribute;
}
}
// if the image attribute could not be found return
if(!$attr || !$medias) return '';
// try all medias until an existing one is found
$media = '';
foreach($medias as $media) {
if(file_exists(mediaFN($media))) break;
$media = '';
}
if($media === '') return '';
// replace the array
$media = ml($media, array('w' => $w, 'h' => $h, 'crop' => 1), true, '&');
$attributes[$attr] = $media;
// return the full tag
return '<' . $tag . ' ' . buildAttributes($attributes) . ' />' . "\n";
}
/**
* Embed the main logo
*
* Tries a few different locations
*/
public function mainLogo() {
global $conf;
// homepage logo should not link to itself (BITV accessibility requirement)
$linkit = (strcmp(wl(), $_SERVER['REQUEST_URI']) !== 0);
if($linkit) {
$title = $conf['title'] . tpl_getLang('adjunct_linked_logo_text');
} else {
$title = tpl_getLang('adjunct_start_logo_text') . $conf['title'];
}
$desktop = self::getResizedImgTag(
'img',
array(
'class' => 'mobile-hide',
'src' => array('wiki:logo-wide.png', 'wiki:logo.png'),
'alt' => $title,
),
0, 0
);
$mobile = self::getResizedImgTag(
'img',
array(
'class' => 'mobile-only',
'src' => array('wiki:logo-32x32.png', 'wiki:favicon.png', 'wiki:logo-square.png', 'wiki:logo.png'),
'alt' => $title,
),
32, 32
);
// homepage logo should not link to itself (BITV accessibility requirement)
if($linkit) {
tpl_link(wl(), $desktop, 'accesskey="h" title="[H]"');
tpl_link(wl(), $mobile, 'accesskey="h" title="[H]"');
} else {
echo $desktop;
echo $mobile;
}
}
}