xref: /plugin/struct/action/title.php (revision 8a30dd7dbe102ef10154085983ffe3285372cd93)
1<?php
2
3/**
4 * DokuWiki Plugin struct (Action Component)
5 *
6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7 * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
8 */
9
10use dokuwiki\plugin\struct\meta\StructException;
11use dokuwiki\plugin\struct\meta\PageMeta;
12
13/**
14 * Class action_plugin_struct_title
15 *
16 * Saves the page title when meta data is saved
17 */
18class action_plugin_struct_title extends DokuWiki_Action_Plugin
19{
20
21    /**
22     * Registers a callback function for a given event
23     *
24     * @param Doku_Event_Handler $controller DokuWiki's event controller object
25     * @return void
26     */
27    public function register(Doku_Event_Handler $controller)
28    {
29        $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handleMeta');
30    }
31
32    /**
33     * Store the page's title
34     *
35     * @param Doku_Event $event
36     * @param $param
37     */
38    public function handleMeta(Doku_Event $event, $param)
39    {
40        $id = $event->data['page'];
41
42        try {
43            $page = new PageMeta($id);
44
45            // check if we already have data for the latest revision, or we risk redundant db writes
46            $latest = $page->getPageData();
47            if (
48                $latest &&
49                // external edits do not have last change info
50                isset($event->data['current']['last_change']['date']) &&
51                (int) $latest['lastrev'] === $event->data['current']['last_change']['date']
52            ) {
53                return;
54            }
55
56            if (!blank($event->data['current']['title'])) {
57                $page->setTitle($event->data['current']['title']);
58            } else {
59                $page->setTitle(null);
60            }
61
62            if (!blank($event->data['current']['last_change']['date'])) {
63                $page->setLastRevision($event->data['current']['last_change']['date']);
64            } else {
65                $page->setLastRevision(null);
66            }
67
68            if (!blank($event->data['current']['last_change']['user'])) {
69                $page->setLastEditor($event->data['current']['last_change']['user']);
70            } elseif (!blank($event->data['current']['last_change']['ip'])) {
71                $page->setLastEditor($event->data['current']['last_change']['ip']);
72            } else {
73                $page->setLastEditor(null);
74            }
75
76            if (!blank($event->data['current']['last_change']['sum'])) {
77                $page->setLastSummary($event->data['current']['last_change']['sum']);
78            } else {
79                $page->setLastSummary(null);
80            }
81
82            $page->savePageData();
83        } catch (StructException $e) {
84            msg($e->getMessage(), -1);
85        }
86    }
87}
88