187dc1344SAndreas Gohr<?php 2d6d97f60SAnna Dabrowska 387dc1344SAndreas Gohr/** 487dc1344SAndreas Gohr * DokuWiki Plugin struct (Action Component) 587dc1344SAndreas Gohr * 687dc1344SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 787dc1344SAndreas Gohr * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 887dc1344SAndreas Gohr */ 987dc1344SAndreas Gohr 10f392071eSAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTable; 1187dc1344SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments; 1287dc1344SAndreas Gohr 1387dc1344SAndreas Gohr/** 1487dc1344SAndreas Gohr * Class action_plugin_struct_entry 1587dc1344SAndreas Gohr * 1687dc1344SAndreas Gohr * Handles reverting to old data via revert action 1787dc1344SAndreas Gohr */ 18d6d97f60SAnna Dabrowskaclass action_plugin_struct_revert extends DokuWiki_Action_Plugin 19d6d97f60SAnna Dabrowska{ 2087dc1344SAndreas Gohr 2187dc1344SAndreas Gohr /** 2287dc1344SAndreas Gohr * Registers a callback function for a given event 2387dc1344SAndreas Gohr * 2487dc1344SAndreas Gohr * @param Doku_Event_Handler $controller DokuWiki's event controller object 2587dc1344SAndreas Gohr * @return void 2687dc1344SAndreas Gohr */ 27d6d97f60SAnna Dabrowska public function register(Doku_Event_Handler $controller) 28d6d97f60SAnna Dabrowska { 2987dc1344SAndreas Gohr // ensure a page revision is created when struct data changes: 30748e747fSAnna Dabrowska $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'BEFORE', $this, 'handlePagesaveBefore'); 3187dc1344SAndreas Gohr // save struct data after page has been saved: 32748e747fSAnna Dabrowska $controller->register_hook('COMMON_WIKIPAGE_SAVE', 'AFTER', $this, 'handlePagesaveAfter'); 3387dc1344SAndreas Gohr } 3487dc1344SAndreas Gohr 3587dc1344SAndreas Gohr /** 3687dc1344SAndreas Gohr * Check if the page has to be changed 3787dc1344SAndreas Gohr * 3887dc1344SAndreas Gohr * @param Doku_Event $event event object by reference 3987dc1344SAndreas Gohr * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 4087dc1344SAndreas Gohr * handler was registered] 4187dc1344SAndreas Gohr * @return bool 4287dc1344SAndreas Gohr */ 43748e747fSAnna Dabrowska public function handlePagesaveBefore(Doku_Event $event, $param) 44d6d97f60SAnna Dabrowska { 4587dc1344SAndreas Gohr if ($event->data['contentChanged']) return false; // will be saved for page changes already 4687dc1344SAndreas Gohr global $ACT; 4787dc1344SAndreas Gohr global $REV; 4887dc1344SAndreas Gohr if ($ACT != 'revert' || !$REV) return false; 4987dc1344SAndreas Gohr 5087dc1344SAndreas Gohr // force changes for revert if there are assignments 51025cb9daSAndreas Gohr $assignments = Assignments::getInstance(); 5287dc1344SAndreas Gohr $tosave = $assignments->getPageAssignments($event->data['id']); 5387dc1344SAndreas Gohr if (count($tosave)) { 5487dc1344SAndreas Gohr $event->data['contentChanged'] = true; // save for data changes 5587dc1344SAndreas Gohr } 5687dc1344SAndreas Gohr 5787dc1344SAndreas Gohr return true; 5887dc1344SAndreas Gohr } 5987dc1344SAndreas Gohr 6087dc1344SAndreas Gohr /** 6187dc1344SAndreas Gohr * Save the data, by loading it from the old revision and storing it as a new revision 6287dc1344SAndreas Gohr * 6387dc1344SAndreas Gohr * @param Doku_Event $event event object by reference 6487dc1344SAndreas Gohr * @param mixed $param [the parameters passed as fifth argument to register_hook() when this 6587dc1344SAndreas Gohr * handler was registered] 6687dc1344SAndreas Gohr * @return bool 6787dc1344SAndreas Gohr */ 68748e747fSAnna Dabrowska public function handlePagesaveAfter(Doku_Event $event, $param) 69d6d97f60SAnna Dabrowska { 7087dc1344SAndreas Gohr global $ACT; 7187dc1344SAndreas Gohr global $REV; 7287dc1344SAndreas Gohr if ($ACT != 'revert' || !$REV) return false; 7387dc1344SAndreas Gohr 74025cb9daSAndreas Gohr $assignments = Assignments::getInstance(); 7587dc1344SAndreas Gohr 7687dc1344SAndreas Gohr // we load the data to restore from DB: 7787dc1344SAndreas Gohr $tosave = $assignments->getPageAssignments($event->data['id']); 7887dc1344SAndreas Gohr foreach ($tosave as $table) { 79*4cd5cc28SAnna Dabrowska $accessOld = AccessTable::getPageAccess($table, $event->data['id'], $REV); 80*4cd5cc28SAnna Dabrowska $accessNew = AccessTable::getPageAccess($table, $event->data['id'], $event->data['newRevision']); 8187dc1344SAndreas Gohr $accessNew->saveData($accessOld->getDataArray()); 8287dc1344SAndreas Gohr 8387dc1344SAndreas Gohr // make sure this schema is assigned 8487dc1344SAndreas Gohr $assignments->assignPageSchema($event->data['id'], $table); 8587dc1344SAndreas Gohr } 8687dc1344SAndreas Gohr return true; 8787dc1344SAndreas Gohr } 8887dc1344SAndreas Gohr} 89