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