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