xref: /template/strap/action/metatitle.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1007225e5Sgerardnico<?php
2007225e5Sgerardnico
3*04fd306cSNickeauuse ComboStrap\ExceptionCompile;
4*04fd306cSNickeauuse ComboStrap\ExceptionNotFound;
5*04fd306cSNickeauuse ComboStrap\Html;
6*04fd306cSNickeauuse ComboStrap\LogUtility;
7*04fd306cSNickeauuse ComboStrap\MarkupPath;
8c3437056SNickeauuse ComboStrap\PluginUtility;
9c3437056SNickeauuse ComboStrap\Site;
10007225e5Sgerardnico
11007225e5Sgerardnico
12007225e5Sgerardnico/**
13007225e5Sgerardnico * Class action_plugin_combo_metatitle
14*04fd306cSNickeau * Set and manage the title of an HTML page
15007225e5Sgerardnico * The event is triggered in the strap template
16007225e5Sgerardnico */
17007225e5Sgerardnicoclass action_plugin_combo_metatitle extends DokuWiki_Action_Plugin
18007225e5Sgerardnico{
19007225e5Sgerardnico
20007225e5Sgerardnico
21c3437056SNickeau    const TITLE_SEPARATOR = ' | ';
22c3437056SNickeau
23007225e5Sgerardnico    public function register(Doku_Event_Handler $controller)
24007225e5Sgerardnico    {
25007225e5Sgerardnico        $controller->register_hook('TPL_TITLE_OUTPUT', 'BEFORE', $this, 'handleTitle', array());
26007225e5Sgerardnico    }
27007225e5Sgerardnico
28007225e5Sgerardnico    function handleTitle(&$event, $param)
29007225e5Sgerardnico    {
30*04fd306cSNickeau        $event->data = self::getHtmlTitle();
31007225e5Sgerardnico    }
32007225e5Sgerardnico
33*04fd306cSNickeau
34*04fd306cSNickeau    static function getHtmlTitle(): string
35c3437056SNickeau    {
36c3437056SNickeau
37c3437056SNickeau        // Page Title
38c3437056SNickeau        // Root Home page
39*04fd306cSNickeau        $currentPage = MarkupPath::createFromRequestedPage();
40*04fd306cSNickeau
41c3437056SNickeau        $pageTitle = $currentPage->getTitleOrDefault();
42c3437056SNickeau
43c3437056SNickeau        // Namespace name
44*04fd306cSNickeau        try {
45*04fd306cSNickeau            $parentPage = $currentPage->getParent();
46c3437056SNickeau            $pageTitle .= self::TITLE_SEPARATOR . $parentPage->getNameOrDefault();
47*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
48*04fd306cSNickeau            // no parent
49007225e5Sgerardnico        }
50*04fd306cSNickeau
51c3437056SNickeau        // Site name
52c3437056SNickeau        if (!empty(Site::getName())) {
53c3437056SNickeau            $pageTitle .= self::TITLE_SEPARATOR . Site::getName();
54007225e5Sgerardnico        }
55007225e5Sgerardnico
56*04fd306cSNickeau        return Html::encode($pageTitle);
57*04fd306cSNickeau
58007225e5Sgerardnico    }
59007225e5Sgerardnico}
60