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\PageMeta; 11use dokuwiki\plugin\struct\meta\StructException; 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 * Registers a callback function for a given event 22 * 23 * @param Doku_Event_Handler $controller DokuWiki's event controller object 24 * @return void 25 */ 26 public function register(Doku_Event_Handler $controller) 27 { 28 $controller->register_hook('PARSER_METADATA_RENDER', 'AFTER', $this, 'handleMeta'); 29 } 30 31 /** 32 * Store the page's title 33 * 34 * @param Doku_Event $event 35 * @param $param 36 */ 37 public function handleMeta(Doku_Event $event, $param) 38 { 39 $id = $event->data['page']; 40 41 try { 42 $page = new PageMeta($id); 43 44 // check if we already have data for the latest revision, or we risk redundant db writes 45 $latest = $page->getPageData(); 46 if ( 47 $latest && 48 // external edits do not have last change info 49 isset($event->data['current']['last_change']['date']) && 50 (int)$latest['lastrev'] === $event->data['current']['last_change']['date'] 51 ) { 52 return; 53 } 54 55 if (!blank($event->data['current']['title'])) { 56 $page->setTitle($event->data['current']['title']); 57 } else { 58 $page->setTitle(null); 59 } 60 61 if (!blank($event->data['current']['last_change']['date'])) { 62 $page->setLastRevision($event->data['current']['last_change']['date']); 63 } else { 64 $page->setLastRevision(null); 65 } 66 67 if (!blank($event->data['current']['last_change']['user'])) { 68 $page->setLastEditor($event->data['current']['last_change']['user']); 69 } elseif (!blank($event->data['current']['last_change']['ip'])) { 70 $page->setLastEditor($event->data['current']['last_change']['ip']); 71 } else { 72 $page->setLastEditor(null); 73 } 74 75 if (!blank($event->data['current']['last_change']['sum'])) { 76 $page->setLastSummary($event->data['current']['last_change']['sum']); 77 } else { 78 $page->setLastSummary(null); 79 } 80 81 $page->savePageData(); 82 } catch (StructException $e) { 83 msg($e->getMessage(), -1); 84 } 85 } 86} 87