164ab5140SAndreas Gohr<?php 264ab5140SAndreas Gohr 364ab5140SAndreas Gohrnamespace dokuwiki\Action; 464ab5140SAndreas Gohr 564ab5140SAndreas Gohruse dokuwiki\Action\Exception\ActionDisabledException; 664ab5140SAndreas Gohruse dokuwiki\Action\Exception\ActionException; 7f21dad39SAndreas Gohruse dokuwiki\Action\Exception\FatalException; 864ab5140SAndreas Gohr 9ab583a1bSAndreas Gohr/** 10ab583a1bSAndreas Gohr * Class AbstractAction 11ab583a1bSAndreas Gohr * 12ab583a1bSAndreas Gohr * Base class for all actions 13ab583a1bSAndreas Gohr * 14ab583a1bSAndreas Gohr * @package dokuwiki\Action 15ab583a1bSAndreas Gohr */ 1664ab5140SAndreas Gohrabstract class AbstractAction { 1764ab5140SAndreas Gohr 1864ab5140SAndreas Gohr /** @var string holds the name of the action (lowercase class name, no namespace) */ 1964ab5140SAndreas Gohr protected $actionname; 2064ab5140SAndreas Gohr 2164ab5140SAndreas Gohr /** 2264ab5140SAndreas Gohr * AbstractAction constructor. 2373522543SAndreas Gohr * 24225d36a1SAndreas Gohr * @param string $actionname the name of this action (see getActionName() for caveats) 2564ab5140SAndreas Gohr */ 266e4bf08eSAndreas Gohr public function __construct($actionname = '') { 276e4bf08eSAndreas Gohr if($actionname !== '') { 2873522543SAndreas Gohr $this->actionname = $actionname; 296e4bf08eSAndreas Gohr } else { 306e4bf08eSAndreas Gohr // http://stackoverflow.com/a/27457689/172068 316e4bf08eSAndreas Gohr $this->actionname = strtolower(substr(strrchr(get_class($this), '\\'), 1)); 326e4bf08eSAndreas Gohr } 3364ab5140SAndreas Gohr } 3464ab5140SAndreas Gohr 3564ab5140SAndreas Gohr /** 3664ab5140SAndreas Gohr * Return the minimum permission needed 3764ab5140SAndreas Gohr * 3864ab5140SAndreas Gohr * This needs to return one of the AUTH_* constants. It will be checked against 3964ab5140SAndreas Gohr * the current user and page after checkPermissions() ran through. If it fails, 4064ab5140SAndreas Gohr * the user will be shown the Denied action. 4164ab5140SAndreas Gohr * 4264ab5140SAndreas Gohr * @return int 4364ab5140SAndreas Gohr */ 44ec701221SAndreas Gohr abstract public function minimumPermission(); 4564ab5140SAndreas Gohr 4664ab5140SAndreas Gohr /** 47*b2c9cd19SAndreas Gohr * Check conditions are met to run this action 4864ab5140SAndreas Gohr * 4964ab5140SAndreas Gohr * @throws ActionException 5064ab5140SAndreas Gohr * @return void 5164ab5140SAndreas Gohr */ 52*b2c9cd19SAndreas Gohr public function checkPreconditions() { 5364ab5140SAndreas Gohr } 5464ab5140SAndreas Gohr 5564ab5140SAndreas Gohr /** 5664ab5140SAndreas Gohr * Process data 5764ab5140SAndreas Gohr * 5864ab5140SAndreas Gohr * This runs before any output is sent to the browser. 5964ab5140SAndreas Gohr * 6064ab5140SAndreas Gohr * Throw an Exception if a different action should be run after this step. 6164ab5140SAndreas Gohr * 6264ab5140SAndreas Gohr * @throws ActionException 6364ab5140SAndreas Gohr * @return void 6464ab5140SAndreas Gohr */ 6564ab5140SAndreas Gohr public function preProcess() { 6664ab5140SAndreas Gohr } 6764ab5140SAndreas Gohr 6864ab5140SAndreas Gohr /** 6964ab5140SAndreas Gohr * Output whatever content is wanted within tpl_content(); 70f21dad39SAndreas Gohr * 71f21dad39SAndreas Gohr * @fixme we may want to return a Ui class here 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