1f21dad39SAndreas Gohr<?php 2f21dad39SAndreas Gohr 3f21dad39SAndreas Gohrnamespace dokuwiki\Action; 4f21dad39SAndreas Gohr 5f21dad39SAndreas Gohruse dokuwiki\Action\Exception\ActionAbort; 6f21dad39SAndreas Gohruse dokuwiki\Action\Exception\ActionException; 7f21dad39SAndreas Gohr 8ab583a1bSAndreas Gohr/** 9ab583a1bSAndreas Gohr * Class Revert 10ab583a1bSAndreas Gohr * 11ab583a1bSAndreas Gohr * Quick revert to an old revision 12ab583a1bSAndreas Gohr * 13ab583a1bSAndreas Gohr * @package dokuwiki\Action 14ab583a1bSAndreas Gohr */ 15f21dad39SAndreas Gohrclass Revert extends AbstractAction { 16f21dad39SAndreas Gohr 17f21dad39SAndreas Gohr /** @inheritdoc */ 18*ec701221SAndreas Gohr public function minimumPermission() { 19f21dad39SAndreas Gohr global $INFO; 20f21dad39SAndreas Gohr if($INFO['ismanager']) { 21f21dad39SAndreas Gohr return AUTH_EDIT; 22f21dad39SAndreas Gohr } else { 23f21dad39SAndreas Gohr return AUTH_ADMIN; 24f21dad39SAndreas Gohr } 25f21dad39SAndreas Gohr } 26f21dad39SAndreas Gohr 27*ec701221SAndreas Gohr /** 28*ec701221SAndreas Gohr * 29*ec701221SAndreas Gohr * @inheritdoc 30*ec701221SAndreas Gohr * @throws ActionAbort 31*ec701221SAndreas Gohr * @throws ActionException 32*ec701221SAndreas Gohr * @todo check for writability of the current page ($INFO might do it wrong and check the attic version) 33*ec701221SAndreas Gohr */ 34f21dad39SAndreas Gohr public function preProcess() { 35f21dad39SAndreas Gohr if(!checkSecurityToken()) throw new ActionException(); 36f21dad39SAndreas Gohr 37f21dad39SAndreas Gohr global $ID; 38f21dad39SAndreas Gohr global $REV; 39f21dad39SAndreas Gohr global $lang; 40f21dad39SAndreas Gohr global $INPUT; 41f21dad39SAndreas Gohr 42f21dad39SAndreas Gohr // when no revision is given, delete current one 43f21dad39SAndreas Gohr // FIXME this feature is not exposed in the GUI currently 44f21dad39SAndreas Gohr $text = ''; 45f21dad39SAndreas Gohr $sum = $lang['deleted']; 46f21dad39SAndreas Gohr if($REV) { 47f21dad39SAndreas Gohr $text = rawWiki($ID, $REV); 48f21dad39SAndreas Gohr if(!$text) throw new ActionException(); //something went wrong 49f21dad39SAndreas Gohr $sum = sprintf($lang['restored'], dformat($REV)); 50f21dad39SAndreas Gohr } 51f21dad39SAndreas Gohr 52f21dad39SAndreas Gohr // spam check 53f21dad39SAndreas Gohr if(checkwordblock($text)) { 54f21dad39SAndreas Gohr msg($lang['wordblock'], -1); 55f21dad39SAndreas Gohr throw new ActionException('edit'); 56f21dad39SAndreas Gohr } 57f21dad39SAndreas Gohr 58f21dad39SAndreas Gohr saveWikiText($ID, $text, $sum, false); 59f21dad39SAndreas Gohr msg($sum, 1); 60f21dad39SAndreas Gohr 61f21dad39SAndreas Gohr //delete any draft 62f21dad39SAndreas Gohr act_draftdel('fixme'); // FIXME replace this utility function 63f21dad39SAndreas Gohr //session_write_close(); // FIXME sessions should be close somewhere higher up, maybe ActionRouter 64f21dad39SAndreas Gohr 65f21dad39SAndreas Gohr // when done, show current page 66f21dad39SAndreas Gohr $INPUT->server->set('REQUEST_METHOD', 'post'); //should force a redirect // FIXME should we have a RedirectException? 67f21dad39SAndreas Gohr $REV = ''; 68f21dad39SAndreas Gohr 69f21dad39SAndreas Gohr throw new ActionAbort(); 70f21dad39SAndreas Gohr } 71f21dad39SAndreas Gohr 72f21dad39SAndreas Gohr} 73