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 (!$latest || (int) $latest['lastrev'] === $event->data['current']['last_change']['date']) { 48 return; 49 } 50 51 if (!blank($event->data['current']['title'])) { 52 $page->setTitle($event->data['current']['title']); 53 } else { 54 $page->setTitle(null); 55 } 56 57 if (!blank($event->data['current']['last_change']['date'])) { 58 $page->setLastRevision($event->data['current']['last_change']['date']); 59 } else { 60 $page->setLastRevision(null); 61 } 62 63 if (!blank($event->data['current']['last_change']['user'])) { 64 $page->setLastEditor($event->data['current']['last_change']['user']); 65 } elseif (!blank($event->data['current']['last_change']['ip'])) { 66 $page->setLastEditor($event->data['current']['last_change']['ip']); 67 } else { 68 $page->setLastEditor(null); 69 } 70 71 if (!blank($event->data['current']['last_change']['sum'])) { 72 $page->setLastSummary($event->data['current']['last_change']['sum']); 73 } else { 74 $page->setLastSummary(null); 75 } 76 77 $page->savePageData(); 78 } catch (StructException $e) { 79 msg($e->getMessage(), -1); 80 } 81 } 82} 83