xref: /plugin/struct/action/title.php (revision 61356325e2c5dbdcb8405fa2eb4c34732d79b65f)
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
10// must be run within Dokuwiki
11use dokuwiki\plugin\struct\meta\StructException;
12use dokuwiki\plugin\struct\meta\PageMeta;
13
14if (!defined('DOKU_INC')) die();
15
16/**
17 * Class action_plugin_struct_title
18 *
19 * Saves the page title when meta data is saved
20 */
21class action_plugin_struct_title extends DokuWiki_Action_Plugin
22{
23
24    /**
25     * Registers a callback function for a given event
26     *
27     * @param Doku_Event_Handler $controller DokuWiki's event controller object
28     * @return void
29     */
30    public function register(Doku_Event_Handler $controller)
31    {
32        $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handle_meta');
33    }
34
35    /**
36     * Store the page's title
37     *
38     * @param Doku_Event $event
39     * @param $param
40     */
41    public function handle_meta(Doku_Event $event, $param)
42    {
43        $id = $event->data['page'];
44
45        try {
46            $page = new PageMeta($id);
47
48            if (!blank($event->data['current']['title'])) {
49                $page->setTitle($event->data['current']['title']);
50            } else {
51                $page->setTitle(null);
52            }
53
54            if (!blank($event->data['current']['last_change']['date'])) {
55                $page->setLastRevision($event->data['current']['last_change']['date']);
56            } else {
57                $page->setLastRevision(null);
58            }
59
60            if (!blank($event->data['current']['last_change']['user'])) {
61                $page->setLastEditor($event->data['current']['last_change']['user']);
62            } elseif (!blank($event->data['current']['last_change']['ip'])) {
63                $page->setLastEditor($event->data['current']['last_change']['ip']);
64            } else {
65                $page->setLastEditor(null);
66            }
67
68            if (!blank($event->data['current']['last_change']['sum'])) {
69                $page->setLastSummary($event->data['current']['last_change']['sum']);
70            } else {
71                $page->setLastSummary(null);
72            }
73
74            $page->savePageData();
75        } catch (StructException $e) {
76            msg($e->getMessage(), -1);
77        }
78    }
79}
80