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 107cbcfbdbSAndreas Gohruse dokuwiki\plugin\struct\meta\StructException; 113aad9612SMichael Grosseuse dokuwiki\plugin\struct\meta\PageMeta; 121c9ef013SAndreas Gohr 131c9ef013SAndreas Gohr/** 141c9ef013SAndreas Gohr * Class action_plugin_struct_title 151c9ef013SAndreas Gohr * 161c9ef013SAndreas Gohr * Saves the page title when meta data is saved 171c9ef013SAndreas Gohr */ 18d6d97f60SAnna Dabrowskaclass action_plugin_struct_title extends DokuWiki_Action_Plugin 19d6d97f60SAnna Dabrowska{ 201c9ef013SAndreas Gohr 211c9ef013SAndreas Gohr /** 221c9ef013SAndreas Gohr * Registers a callback function for a given event 231c9ef013SAndreas Gohr * 241c9ef013SAndreas Gohr * @param Doku_Event_Handler $controller DokuWiki's event controller object 251c9ef013SAndreas Gohr * @return void 261c9ef013SAndreas Gohr */ 27d6d97f60SAnna Dabrowska public function register(Doku_Event_Handler $controller) 28d6d97f60SAnna Dabrowska { 29748e747fSAnna Dabrowska $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handleMeta'); 301c9ef013SAndreas Gohr } 311c9ef013SAndreas Gohr 321c9ef013SAndreas Gohr /** 331c9ef013SAndreas Gohr * Store the page's title 341c9ef013SAndreas Gohr * 351c9ef013SAndreas Gohr * @param Doku_Event $event 361c9ef013SAndreas Gohr * @param $param 371c9ef013SAndreas Gohr */ 38748e747fSAnna Dabrowska public function handleMeta(Doku_Event $event, $param) 39d6d97f60SAnna Dabrowska { 40a7cffaf2SAndreas Gohr $id = $event->data['page']; 41a7cffaf2SAndreas Gohr 427cbcfbdbSAndreas Gohr try { 433aad9612SMichael Grosse $page = new PageMeta($id); 441c9ef013SAndreas Gohr 4558cb2b19SAnna Dabrowska // check if we already have data for the latest revision, or we risk redundant db writes 4658cb2b19SAnna Dabrowska $latest = $page->getPageData(); 47*34ea6e10SAnna Dabrowska if ($latest && 48*34ea6e10SAnna Dabrowska // external edits do not have last change info 49*34ea6e10SAnna Dabrowska isset($event->data['current']['last_change']['date']) && 50*34ea6e10SAnna Dabrowska (int) $latest['lastrev'] === $event->data['current']['last_change']['date'] 51*34ea6e10SAnna Dabrowska ) { 5258cb2b19SAnna Dabrowska return; 5358cb2b19SAnna Dabrowska } 5458cb2b19SAnna Dabrowska 551c9ef013SAndreas Gohr if (!blank($event->data['current']['title'])) { 56109edca8SMichael Grosse $page->setTitle($event->data['current']['title']); 571c9ef013SAndreas Gohr } else { 58109edca8SMichael Grosse $page->setTitle(null); 59109edca8SMichael Grosse } 60109edca8SMichael Grosse 61109edca8SMichael Grosse if (!blank($event->data['current']['last_change']['date'])) { 62109edca8SMichael Grosse $page->setLastRevision($event->data['current']['last_change']['date']); 63109edca8SMichael Grosse } else { 64109edca8SMichael Grosse $page->setLastRevision(null); 65109edca8SMichael Grosse } 66109edca8SMichael Grosse 67109edca8SMichael Grosse if (!blank($event->data['current']['last_change']['user'])) { 68109edca8SMichael Grosse $page->setLastEditor($event->data['current']['last_change']['user']); 69109edca8SMichael Grosse } elseif (!blank($event->data['current']['last_change']['ip'])) { 709abde7b5SMichael Grosse $page->setLastEditor($event->data['current']['last_change']['ip']); 71109edca8SMichael Grosse } else { 72109edca8SMichael Grosse $page->setLastEditor(null); 731c9ef013SAndreas Gohr } 7488b58a21SSzymon Olewniczak 7588b58a21SSzymon Olewniczak if (!blank($event->data['current']['last_change']['sum'])) { 7688b58a21SSzymon Olewniczak $page->setLastSummary($event->data['current']['last_change']['sum']); 7788b58a21SSzymon Olewniczak } else { 7888b58a21SSzymon Olewniczak $page->setLastSummary(null); 7988b58a21SSzymon Olewniczak } 8088b58a21SSzymon Olewniczak 818d1ed4ceSMichael Grosse $page->savePageData(); 827cbcfbdbSAndreas Gohr } catch (StructException $e) { 837cbcfbdbSAndreas Gohr msg($e->getMessage(), -1); 847cbcfbdbSAndreas Gohr } 851c9ef013SAndreas Gohr } 861c9ef013SAndreas Gohr} 87