*/
class helper_plugin_pagetitle extends DokuWiki_Plugin
{
/**
* Hierarchical breadcrumbs for PageTitle plugin
*
* @param int $start_depth of hierarchical breadcrumbs
* @param bool $print if false return content
* @return bool|string html, or false if no data, true if printed
*/
public function tpl_youarehere($start_depth = 0, $print = true)
{
global $lang;
$out = ''.$lang['youarehere'].'';
$out.= $this->html_youarehere($start_depth);
if ($print) {
echo $out; return (bool) $out;
}
return $out;
}
public function html_youarehere($start_depth = 0, $id = null)
{
global $conf, $ID;
if (!isset($id)) $id = $ID;
// prepend virtual root namespace to id that is not start page
// tiers[0] becomes array(0 => '') for virtual root
$id = ($id == $conf['start']) ? '' : ':'.ltrim($id, ':');
$tiers = explode(':', $id);
$depth = count($tiers);
$items = [];
for ($i = $start_depth; $i < $depth; $i++) {
if ($i == 0 && $tiers[$i] == '') {
$p = $p0 = $conf['start'];
} else {
$p = $p0 = implode(':', array_slice($tiers, 1, $i));
}
// looks startpage of the name space when page not exists
if (!page_exists($p) && page_exists($p.':'.$conf['start'])) {
$p = $p.':'.$conf['start'];
}
// get short title of the page
$name = p_get_metadata($p, 'shorttitle', METADATA_DONT_RENDER) ?: noNS($p0);
$items[$i] = ''.$this->html_pagelink($p, $name, page_exists($p)).'';
}
// join items with a separator
$out = implode(' › ', $items);
return $out;
}
/**
* Prints a link to a WikiPage
* a customised function based on
* tpl_pagelink() defined in inc/template.php,
* html_wikilink() defined in inc/html.php,
* internallink() defined in inc/parser/xhtml.php
*
* @param string $id page id
* @param string $name the name of the link
* @param bool $exists
* @param bool $print if false return content
* @return bool|string html, or false if no data, true if printed
*/
public function tpl_pagelink($id = null, $name = null, $exists = null, $print = true)
{
global $conf;
$out = $this->html_pagelink($id, $name, $exists);
if ($print) {
echo $out; return (bool) $out;
}
return $out;
}
private function html_pagelink($id = null, $name = null, $exists = null)
{
global $conf, $ID;
if (!isset($id)) $id = $ID;
$title = p_get_metadata($id, 'title');
if (empty($title)) $title = $id;
if (isset($exists)) {
$class = ($exists) ? 'wikilink1' : 'wikilink2';
} else {
$class = (page_exists($id)) ? 'wikilink1' : 'wikilink2';
}
$short_title = $name;
if (empty($name)) {
$short_title = p_get_metadata($id, 'shorttitle') ?: noNS($id);
}
$out = '';
$out.= hsc($short_title).'';
return $out;
}
/**
* builds url of a wikipage
* a simplified function of DokuWiki wl() defined inc/common.php
*
* @param string $id page id
* @return string
*/
private function wl($id = null)
{
global $conf;
if (noNS($id) == $conf['start']) $id = ltrim(getNS($id).':', ':');
idfilter($id);
$xlink = DOKU_BASE;
switch ($conf['userewrite']) {
case 2: // eg. DOKU_BASE/doku.php/wiki:syntax
$xlink .= DOKU_SCRIPT.'/'.$id;
case 1: // eg. DOKU_BASE/wiki:syntax
$xlink .= $id;
$xlink = ($xlink == '/') ? '/' : rtrim($xlink,'/');
break;
default:
$xlink .= DOKU_SCRIPT;
$xlink .= ($id) ? '?id='.$id : '';
}
return $xlink;
}
/**
* Prints or returns the title of the given page (current one if none given)
* modified from DokuWiki original function tpl_pagetitle()
* defined in inc/template.php
* This variant function returns title from metadata, ignoring $conf['useheading']
*
* @param string $id page id
* @param bool $print if false return content
* @return bool|string html, or false if no data, true if printed
*/
public function tpl_pagetitle($id = null, $print = true)
{
$out = $this->pagetitle($id);
if ($print) {
echo $out; return (bool) $out;
}
return $out;
}
private function pagetitle($id = null)
{
global $ACT, $ID, $conf, $lang;
if (isset($id)) {
$title = (p_get_metadata($id, 'title')) ?: $id;
} else {
$title = (p_get_metadata($ID, 'title')) ?: $ID;
}
// default page title is the page name, modify with the current action
switch ($ACT) {
// admin functions
case 'adminhomepage' :
case 'admin' :
$page_title = $lang['btn_admin'];
// try to get the plugin name
/** @var $plugin DokuWiki_Admin_Plugin */
if (function_exists('plugin_getRequestAdminPlugin') &&
($plugin = plugin_getRequestAdminPlugin()) ) {
$plugin_title = $plugin->getMenuText($conf['lang']);
$page_title = $plugin_title ? $plugin_title : $plugin->getPluginName();
}
break;
// user functions
case 'login' :
case 'profile' :
case 'register' :
case 'resendpwd' :
$page_title = $lang['btn_'.$ACT];
break;
// wiki functions
case 'search' :
case 'index' :
$page_title = $lang['btn_'.$ACT];
break;
// page functions
case 'edit' :
$page_title = "✎ ".$title;
break;
case 'revisions' :
$page_title = $title . ' - ' . $lang['btn_revs'];
break;
case 'backlink' :
case 'recent' :
case 'subscribe' :
$page_title = $title . ' - ' . $lang['btn_'.$ACT];
break;
default : // SHOW and anything else not included
$page_title = $title;
}
return hsc($page_title);
}
}