164ab5140SAndreas Gohr<?php 264ab5140SAndreas Gohr 364ab5140SAndreas Gohrnamespace dokuwiki\Action; 464ab5140SAndreas Gohr 564ab5140SAndreas Gohruse dokuwiki\Action\Exception\ActionException; 6f21dad39SAndreas Gohruse dokuwiki\Action\Exception\FatalException; 764ab5140SAndreas Gohr 8ab583a1bSAndreas Gohr/** 9ab583a1bSAndreas Gohr * Class AbstractAction 10ab583a1bSAndreas Gohr * 11ab583a1bSAndreas Gohr * Base class for all actions 12ab583a1bSAndreas Gohr * 13ab583a1bSAndreas Gohr * @package dokuwiki\Action 14ab583a1bSAndreas Gohr */ 1564ab5140SAndreas Gohrabstract class AbstractAction { 1664ab5140SAndreas Gohr 1764ab5140SAndreas Gohr /** @var string holds the name of the action (lowercase class name, no namespace) */ 1864ab5140SAndreas Gohr protected $actionname; 1964ab5140SAndreas Gohr 2064ab5140SAndreas Gohr /** 2164ab5140SAndreas Gohr * AbstractAction constructor. 2273522543SAndreas Gohr * 23225d36a1SAndreas Gohr * @param string $actionname the name of this action (see getActionName() for caveats) 2464ab5140SAndreas Gohr */ 256e4bf08eSAndreas Gohr public function __construct($actionname = '') { 266e4bf08eSAndreas Gohr if($actionname !== '') { 2773522543SAndreas Gohr $this->actionname = $actionname; 286e4bf08eSAndreas Gohr } else { 296e4bf08eSAndreas Gohr // http://stackoverflow.com/a/27457689/172068 306e4bf08eSAndreas Gohr $this->actionname = strtolower(substr(strrchr(get_class($this), '\\'), 1)); 316e4bf08eSAndreas Gohr } 3264ab5140SAndreas Gohr } 3364ab5140SAndreas Gohr 3464ab5140SAndreas Gohr /** 3564ab5140SAndreas Gohr * Return the minimum permission needed 3664ab5140SAndreas Gohr * 3764ab5140SAndreas Gohr * This needs to return one of the AUTH_* constants. It will be checked against 3864ab5140SAndreas Gohr * the current user and page after checkPermissions() ran through. If it fails, 3964ab5140SAndreas Gohr * the user will be shown the Denied action. 4064ab5140SAndreas Gohr * 4164ab5140SAndreas Gohr * @return int 4264ab5140SAndreas Gohr */ 43ec701221SAndreas Gohr abstract public function minimumPermission(); 4464ab5140SAndreas Gohr 4564ab5140SAndreas Gohr /** 46b2c9cd19SAndreas Gohr * Check conditions are met to run this action 4764ab5140SAndreas Gohr * 4864ab5140SAndreas Gohr * @throws ActionException 4964ab5140SAndreas Gohr * @return void 5064ab5140SAndreas Gohr */ 51b2c9cd19SAndreas Gohr public function checkPreconditions() { 5264ab5140SAndreas Gohr } 5364ab5140SAndreas Gohr 5464ab5140SAndreas Gohr /** 5564ab5140SAndreas Gohr * Process data 5664ab5140SAndreas Gohr * 5764ab5140SAndreas Gohr * This runs before any output is sent to the browser. 5864ab5140SAndreas Gohr * 5964ab5140SAndreas Gohr * Throw an Exception if a different action should be run after this step. 6064ab5140SAndreas Gohr * 6164ab5140SAndreas Gohr * @throws ActionException 6264ab5140SAndreas Gohr * @return void 6364ab5140SAndreas Gohr */ 6464ab5140SAndreas Gohr public function preProcess() { 6564ab5140SAndreas Gohr } 6664ab5140SAndreas Gohr 6764ab5140SAndreas Gohr /** 6864ab5140SAndreas Gohr * Output whatever content is wanted within tpl_content(); 69f21dad39SAndreas Gohr * 70f21dad39SAndreas Gohr * @fixme we may want to return a Ui class here 71*79a2d784SGerrit Uitslag * @throws FatalException 7264ab5140SAndreas Gohr */ 7364ab5140SAndreas Gohr public function tplContent() { 74f21dad39SAndreas Gohr throw new FatalException('No content for Action ' . $this->actionname); 75f21dad39SAndreas Gohr } 76f21dad39SAndreas Gohr 77f21dad39SAndreas Gohr /** 7873522543SAndreas Gohr * Returns the name of this action 7973522543SAndreas Gohr * 8073522543SAndreas Gohr * This is usually the lowercased class name, but may differ for some actions. 8173522543SAndreas Gohr * eg. the export_ modes or for the Plugin action. 8273522543SAndreas Gohr * 83f21dad39SAndreas Gohr * @return string 84f21dad39SAndreas Gohr */ 85f21dad39SAndreas Gohr public function getActionName() { 86f21dad39SAndreas Gohr return $this->actionname; 8764ab5140SAndreas Gohr } 8864ab5140SAndreas Gohr} 89