xref: /plugin/struct/action/title.php (revision 5e29103a15bd9873f422f66a6a5239b6aec4651e)
11c9ef013SAndreas Gohr<?php
2d6d97f60SAnna Dabrowska
31c9ef013SAndreas Gohr/**
41c9ef013SAndreas Gohr * DokuWiki Plugin struct (Action Component)
51c9ef013SAndreas Gohr *
61c9ef013SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
71c9ef013SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
81c9ef013SAndreas Gohr */
91c9ef013SAndreas Gohr
107234bfb1Ssplitbrainuse dokuwiki\Extension\ActionPlugin;
117234bfb1Ssplitbrainuse dokuwiki\Extension\EventHandler;
127234bfb1Ssplitbrainuse dokuwiki\Extension\Event;
133aad9612SMichael Grosseuse dokuwiki\plugin\struct\meta\PageMeta;
140549dcc5SAndreas Gohruse dokuwiki\plugin\struct\meta\StructException;
151c9ef013SAndreas Gohr
161c9ef013SAndreas Gohr/**
171c9ef013SAndreas Gohr * Class action_plugin_struct_title
181c9ef013SAndreas Gohr *
191c9ef013SAndreas Gohr * Saves the page title when meta data is saved
201c9ef013SAndreas Gohr */
217234bfb1Ssplitbrainclass action_plugin_struct_title extends ActionPlugin
22d6d97f60SAnna Dabrowska{
231c9ef013SAndreas Gohr    /**
241c9ef013SAndreas Gohr     * Registers a callback function for a given event
251c9ef013SAndreas Gohr     *
26*5e29103aSannda     * @param EventHandler $controller DokuWiki's event controller object
271c9ef013SAndreas Gohr     * @return void
281c9ef013SAndreas Gohr     */
297234bfb1Ssplitbrain    public function register(EventHandler $controller)
30d6d97f60SAnna Dabrowska    {
31748e747fSAnna Dabrowska        $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handleMeta');
321c9ef013SAndreas Gohr    }
331c9ef013SAndreas Gohr
341c9ef013SAndreas Gohr    /**
351c9ef013SAndreas Gohr     * Store the page's title
361c9ef013SAndreas Gohr     *
37*5e29103aSannda     * @param Event $event
381c9ef013SAndreas Gohr     * @param $param
391c9ef013SAndreas Gohr     */
407234bfb1Ssplitbrain    public function handleMeta(Event $event, $param)
41d6d97f60SAnna Dabrowska    {
42a7cffaf2SAndreas Gohr        $id = $event->data['page'];
43a7cffaf2SAndreas Gohr
447cbcfbdbSAndreas Gohr        try {
453aad9612SMichael Grosse            $page = new PageMeta($id);
461c9ef013SAndreas Gohr
4758cb2b19SAnna Dabrowska            // check if we already have data for the latest revision, or we risk redundant db writes
4858cb2b19SAnna Dabrowska            $latest = $page->getPageData();
49208bb3f3SAnna Dabrowska            if (
50208bb3f3SAnna Dabrowska                $latest &&
5134ea6e10SAnna Dabrowska                // external edits do not have last change info
5234ea6e10SAnna Dabrowska                isset($event->data['current']['last_change']['date']) &&
5334ea6e10SAnna Dabrowska                (int)$latest['lastrev'] === $event->data['current']['last_change']['date']
5434ea6e10SAnna Dabrowska            ) {
5558cb2b19SAnna Dabrowska                return;
5658cb2b19SAnna Dabrowska            }
5758cb2b19SAnna Dabrowska
581c9ef013SAndreas Gohr            if (!blank($event->data['current']['title'])) {
59109edca8SMichael Grosse                $page->setTitle($event->data['current']['title']);
601c9ef013SAndreas Gohr            } else {
61109edca8SMichael Grosse                $page->setTitle(null);
62109edca8SMichael Grosse            }
63109edca8SMichael Grosse
64109edca8SMichael Grosse            if (!blank($event->data['current']['last_change']['date'])) {
65109edca8SMichael Grosse                $page->setLastRevision($event->data['current']['last_change']['date']);
66109edca8SMichael Grosse            } else {
67109edca8SMichael Grosse                $page->setLastRevision(null);
68109edca8SMichael Grosse            }
69109edca8SMichael Grosse
70109edca8SMichael Grosse            if (!blank($event->data['current']['last_change']['user'])) {
71109edca8SMichael Grosse                $page->setLastEditor($event->data['current']['last_change']['user']);
72109edca8SMichael Grosse            } elseif (!blank($event->data['current']['last_change']['ip'])) {
739abde7b5SMichael Grosse                $page->setLastEditor($event->data['current']['last_change']['ip']);
74109edca8SMichael Grosse            } else {
75109edca8SMichael Grosse                $page->setLastEditor(null);
761c9ef013SAndreas Gohr            }
7788b58a21SSzymon Olewniczak
7888b58a21SSzymon Olewniczak            if (!blank($event->data['current']['last_change']['sum'])) {
7988b58a21SSzymon Olewniczak                $page->setLastSummary($event->data['current']['last_change']['sum']);
8088b58a21SSzymon Olewniczak            } else {
8188b58a21SSzymon Olewniczak                $page->setLastSummary(null);
8288b58a21SSzymon Olewniczak            }
8388b58a21SSzymon Olewniczak
848d1ed4ceSMichael Grosse            $page->savePageData();
857cbcfbdbSAndreas Gohr        } catch (StructException $e) {
867cbcfbdbSAndreas Gohr            msg($e->getMessage(), -1);
877cbcfbdbSAndreas Gohr        }
881c9ef013SAndreas Gohr    }
891c9ef013SAndreas Gohr}
90