/e107_handlers/admin_ui.php
PHP | 5872 lines | 3529 code | 715 blank | 1628 comment | 486 complexity | 34ed6a3c5068ad414d571024b6ab9174 MD5 | raw file
Possible License(s): GPL-2.0
Large files files are truncated, but you can click here to view the full file
- <?php
- /*
- * e107 website system
- *
- * Copyright (C) 2008-2012 e107 Inc (e107.org)
- * Released under the terms and conditions of the
- * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
- *
- * Administration User Interface logic
- *
- * $URL$
- * $Id$
- */
- /**
- * @package e107
- * @subpackage e107_handlers
- * @version $Id$
- *
- * Administration User Interface logic
- */
- /**
- * @todo core request handler (non-admin), core response
- */
- if (!defined('e107_INIT')){ exit; }
-
-
- class e_admin_request
- {
- /**
- * Current GET request array
- * @var array
- */
- protected $_request_qry;
- /**
- * Current POST array
- * @var array
- */
- protected $_posted_qry;
- /**
- * Current Mode
- * @var string
- */
- protected $_mode = '';
- /**
- * Default Mode
- * @var string
- */
- protected $_default_mode = 'main';
- /**
- * Key name for mode search
- * @var string
- */
- protected $_mode_key = 'mode';
- /**
- * Current action
- * @var string
- */
- protected $_action = '';
- /**
- * Default Action
- * @var string
- */
- protected $_default_action = 'index';
- /**
- * Key name for action search
- * @var string
- */
- protected $_action_key = 'action';
- /**
- * Current ID
- * @var integer
- */
- protected $_id = 0;
- /**
- * Key name for ID search
- * @var string
- */
- protected $_id_key = 'id';
- /**
- * Constructor
- *
- * @param string|array $qry [optional]
- * @return none
- */
- public function __construct($request_string = null, $parse = true)
- {
- if(null === $request_string)
- {
- $request_string = str_replace('&', '&', e_QUERY);
- }
- if($parse)
- {
- $this->parseRequest($request_string);
- }
- }
- /**
- * Parse request data
- * @param string|array $request_data
- * @return e_admin_request
- */
- protected function parseRequest($request_data)
- {
- if(is_string($request_data))
- {
- parse_str($request_data, $request_data);
- }
- $this->_request_qry = (array) $request_data;
- // Set current mode
- if(isset($this->_request_qry[$this->_mode_key]))
- {
- $this->_mode = preg_replace('/[^\w]/', '', $this->_request_qry[$this->_mode_key]);
- }
- // Set current action
- if(isset($this->_request_qry[$this->_action_key]))
- {
- $this->_action = preg_replace('/[^\w]/', '', $this->_request_qry[$this->_action_key]);
- }
- // Set current id
- if(isset($this->_request_qry[$this->_id_key]))
- {
- $this->_id = preg_replace('/[^\w-:.]/', '', $this->_request_qry[$this->_id_key]);
- }
- $this->_posted_qry =& $_POST; //raw?
- return $this;
- }
- /**
- * Retrieve variable from GET scope
- * If $key is null, all GET data will be returned
- *
- * @param string $key [optional]
- * @param mixed $default [optional]
- * @return mixed
- */
- public function getQuery($key = null, $default = null)
- {
- if(null === $key)
- {
- return $this->_request_qry;
- }
- return (isset($this->_request_qry[$key]) ? $this->_request_qry[$key] : $default);
- }
- /**
- * Set/Unset GET variable
- * If $key is array, $value is not used.
- * If $value is null, (string) $key is unset
- *
- * @param string|array $key
- * @param mixed $value [optional]
- * @return e_admin_request
- */
- public function setQuery($key, $value = null)
- {
- if(is_array($key))
- {
- foreach ($key as $k=>$v)
- {
- $this->setQuery($k, $v);
- }
- return $this;
- }
- if(null === $value)
- {
- unset($this->_request_qry[$key]);
- unset($_GET[$key]);
- return $this;
- }
- $this->_request_qry[$key] = $value;
- $_GET[$key] = $value;
- return $this;
- }
- /**
- * Retrieve variable from POST scope
- * If $key is null, all POST data will be returned
- *
- * @param string $key [optional]
- * @param mixed $default [optional]
- * @return mixed
- */
- public function getPosted($key = null, $default = null)
- {
- if(null === $key)
- {
- return $this->_posted_qry;
- }
- return (isset($this->_posted_qry[$key]) ? $this->_posted_qry[$key] : $default);
- }
- /**
- * Set/Unset POST variable
- * If $key is array, $value is not used.
- * If $value is null, (string) $key is unset
- *
- * @param object $key
- * @param object $value [optional]
- * @return e_admin_request
- */
- public function setPosted($key, $value = null)
- {
- if(is_array($key))
- {
- if(empty($key))
- {
- $this->_posted_qry = array(); //POST reset
- return $this;
- }
- foreach ($key as $k=>$v)
- {
- $this->setPosted($k, $v);
- }
- return $this;
- }
- if(null === $value)
- {
- unset($this->_posted_qry[$key]);
- return $this;
- }
- $tp = e107::getParser();
- $this->_posted_qry[$tp->post_toForm($key)] = $tp->post_toForm($value);
- return $this;
- }
- /**
- * Get current mode
- * @return string
- */
- public function getMode()
- {
- if(!$this->_mode) return $this->getDefaultMode();
- return $this->_mode;
- }
- /**
- * Get default mode
- * @return string
- */
- public function getDefaultMode()
- {
- return $this->_default_mode;
- }
- /**
- * Get current mode name
- *
- * @return string
- */
- public function getModeName()
- {
- return strtolower(str_replace('-', '_', $this->getMode()));
- }
- /**
- * Reset current mode
- * @param string $mode
- * @return e_admin_request
- */
- public function setMode($mode)
- {
- $this->_mode = preg_replace('/[^\w]/', '', $mode);
- $this->setQuery($this->_mode_key, $this->_mode);
- return $this;
- }
- /**
- * Set default mode
- * @param string $mode
- * @return e_admin_request
- */
- public function setDefaultMode($mode)
- {
- if($mode) $this->_default_mode = $mode;
- return $this;
- }
- /**
- * Set mode key name
- * @param string $key
- * @return e_admin_request
- */
- public function setModeKey($key)
- {
- $this->_mode_key = $key;
- return $this;
- }
- /**
- * Get current action
- * @return TBD
- */
- public function getAction()
- {
- if(!$this->_action) return $this->getDefaultAction();
- return $this->_action;
- }
- /**
- * Get default action
- * @return string
- */
- public function getDefaultAction()
- {
- return $this->_default_action;
- }
- /**
- * Get current action name
- * @return string camelized action
- */
- public function getActionName()
- {
- return $this->camelize($this->getAction());
- }
- /**
- * Reset current action
- *
- * @param string $action
- * @return e_admin_request
- */
- public function setAction($action)
- {
- $this->_action = preg_replace('/[^\w]/', '', $action);
- $this->setQuery($this->_action_key, $this->_action);
- return $this;
- }
- /**
- * Set default action
- *
- * @param string $action
- * @return e_admin_request
- */
- public function setDefaultAction($action)
- {
- if($action) $this->_default_action = $action;
- return $this;
- }
- /**
- * Set action key name
- * @param string $key
- * @return e_admin_request
- */
- public function setActionKey($key)
- {
- $this->_action_key = $key;
- return $this;
- }
- /**
- * Get current ID
- * @return integer
- */
- public function getId()
- {
- return $this->_id;
- }
- /**
- * Reset current ID
- * @param string $id
- * @return e_admin_request
- */
- public function setId($id)
- {
- $id = intval($id);
- $this->_id = $id;
- $this->setQuery($this->_id_key, $id);
- return $this;
- }
- /**
- * Set id key name
- * @param string $key
- * @return e_admin_request
- */
- public function setIdKey($key)
- {
- $this->_id_key = $key;
- return $this;
- }
- /**
- * Build query string from current request array
- * NOTE: changing url separator to & ($encode==true) (thus URL XHTML compliance) works in PHP 5.1.2+ environment
- *
- * @param string|array $merge_with [optional] override request values
- * @param boolean $encode if true & separator will be used, all values will be http encoded, default true
- * @param string|array $exclude_from_query numeric array/comma separated list of vars to be excluded from current query, true - don't use current query at all
- * @param boolean $keepSpecial don't exclude special vars as 'mode' and 'action'
- * @return string url encoded query string
- */
- public function buildQueryString($merge_with = array(), $encode = true, $exclude_from_query = '', $keepSpecial = true)
- {
- $ret = $this->getQuery();
- //special case - exclude all current
- if(true === $exclude_from_query)
- {
- $exclude_from_query = array_keys($ret);
- }
- // to array
- if(is_string($exclude_from_query))
- {
- $exclude_from_query = array_map('trim', explode(',', $exclude_from_query));
- }
- if($exclude_from_query)
- {
- foreach ($exclude_from_query as $var)
- {
- if($keepSpecial && $var != $this->_action_key && $var != $this->_mode_key) unset($ret[$var]);
- }
- }
- if(is_string($merge_with))
- {
- parse_str($merge_with, $merge_with);
- }
- $ret = array_merge($ret, (array) $merge_with);
- $separator = '&';
- if($encode)
- {
- $separator = '&';
- //$ret = array_map('rawurlencode', $ret);
- }
- $ret = http_build_query($ret, 'numeric_', $separator);
- if(!$encode)
- {
- return rawurldecode($ret);
- }
- return $ret;
- }
- /**
- * Convert string to CamelCase
- *
- * @param string $str
- * @return string
- */
- public function camelize($str)
- {
- return implode('', array_map('ucfirst', explode('-', str_replace('_', '-', $str))));
- }
- }
- /**
- * TODO - front response parent, should do all the header.php work
- */
- class e_admin_response
- {
- /**
- * Body segments
- *
- * @var array
- */
- protected $_body = array();
- /**
- * Title segments
- *
- * @var unknown_type
- */
- protected $_title = array();
- /**
- * e107 meta title
- *
- * @var array
- */
- protected $_e_PAGETITLE = array();
- /**
- * e107 meta description
- *
- * @var array
- */
- protected $_META_DESCRIPTION = array();
- /**
- * e107 meta keywords
- *
- * @var array
- */
- protected $_META_KEYWORDS = array();
- /**
- * Render mods
- *
- * @var array
- */
- protected $_render_mod = array();
- /**
- * Meta title segment description
- *
- * @var string
- */
- protected $_meta_title_separator = ' - ';
- /**
- * Title segment separator
- *
- * @var string
- */
- protected $_title_separator = ' » ';
- /**
- * Constructor
- *
- */
- public function __construct()
- {
- $this->_render_mod['default'] = 'admin_page';
- }
- /**
- * Set body segments for a namespace
- *
- * @param string $content
- * @param string $namespace segment namesapce
- * @return e_admin_response
- */
- function setBody($content, $namespace = 'default')
- {
- $this->_body[$namespace] = $content;
- return $this;
- }
- /**
- * Append body segment to a namespace
- *
- * @param string $content
- * @param string $namespace segment namesapce
- * @return e_admin_response
- */
- function appendBody($content, $namespace = 'default')
- {
- if(!isset($this->_body[$namespace]))
- {
- $this->_body[$namespace] = array();
- }
- $this->_body[$namespace][] = $content;
- return $this;
- }
- /**
- * Prepend body segment to a namespace
- *
- * @param string $content
- * @param string $namespace segment namespace
- * @return e_admin_response
- */
- function prependBody($content, $namespace = 'default')
- {
- if(!isset($this->_body[$namespace]))
- {
- $this->_body[$namespace] = array();
- }
- $this->_body[$namespace] = array_merge(array($content), $this->_body[$namespace]);
- return $this;
- }
- /**
- * Get body segments from a namespace
- *
- * @param string $namespace segment namesapce
- * @param boolean $reset reset segment namespace
- * @param string|boolean $glue if false return array, else return string
- * @return string|array
- */
- function getBody($namespace = 'default', $reset = false, $glue = '')
- {
- $content = vartrue($this->_body[$namespace], array());
- if($reset)
- {
- $this->_body[$namespace] = array();
- }
- if(is_bool($glue))
- {
- return ($glue ? $content : implode('', $content));
- }
- return implode($glue, $content);
- }
- /**
- * Set title segments for a namespace
- *
- * @param string $title
- * @param string $namespace
- * @return e_admin_response
- */
- function setTitle($title, $namespace = 'default')
- {
- $this->_title[$namespace] = array($title);
- return $this;
- }
- /**
- * Append title segment to a namespace
- *
- * @param string $title
- * @param string $namespace segment namesapce
- * @return e_admin_response
- */
- function appendTitle($title, $namespace = 'default')
- {
- if(empty($title))
- {
- return $this;
- }
- if(!isset($this->_title[$namespace]))
- {
- $this->_title[$namespace] = array();
- }
- $this->_title[$namespace][] = $title;
- return $this;
- }
- /**
- * Prepend title segment to a namespace
- *
- * @param string $title
- * @param string $namespace segment namespace
- * @return e_admin_response
- */
- function prependTitle($title, $namespace = 'default')
- {
- if(empty($title))
- {
- return $this;
- }
- if(!isset($this->_title[$namespace]))
- {
- $this->_title[$namespace] = array();
- }
- $this->_title[$namespace] = array_merge(array($title), $this->_title[$namespace]);
- return $this;
- }
- /**
- * Get title segments from namespace
- *
- * @param string $namespace
- * @param boolean $reset
- * @param boolean|string $glue
- * @return unknown
- */
- function getTitle($namespace = 'default', $reset = false, $glue = ' ')
- {
- $content = array();
- if(isset($this->_title[$namespace]) && is_array($this->_title[$namespace]))
- {
- $content = $this->_title[$namespace];
- }
- if($reset)
- {
- unset($this->_title[$namespace]);
- }
- if(is_bool($glue) || empty($glue))
- {
- return ($glue ? $content : implode($this->_title_separator, $content));
- }
- $glue = deftrue('SEP',' - '); // Defined by admin theme. // admin-ui used only by bootstrap.
- return implode($glue, $content);
- // return $head. implode($glue, $content).$foot;
- }
- /**
- * Set render mode for a namespace
- *
- * @param string $render_mod
- * @param string $namespace
- * @return e_admin_response
- */
- function setRenderMod($render_mod, $namespace = 'default')
- {
- $this->_render_mod[$namespace] = $render_mod;
- return $this;
- }
- /**
- * Set render mode for namespace
- *
- * @param string $namespace
- * @return string
- */
- function getRenderMod($namespace = 'default')
- {
- return varset($this->_render_mod[$namespace], null);
- }
- /**
- * Add meta title, description and keywords segments
- *
- * @param string $meta property name
- * @param string $content meta content
- * @return e_admin_response
- */
- function addMetaData($meta, $content)
- {
- $tp = e107::getParser();
- $meta = '_' . $meta;
- if(isset($this->{$meta}) && !empty($content))
- {
- $this->{$meta}[] = strip_tags($content);
- }
- return $this;
- }
- /**
- * Add meta title segment
- *
- * @param string $title
- * @return e_admin_response
- */
- function addMetaTitle($title)
- {
- $this->addMetaData('e_PAGETITLE', $title);
- return $this;
- }
- /**
- * Add meta description segment
- *
- * @param string $description
- * @return e_admin_response
- */
- function addMetaDescription($description)
- {
- $this->addMetaData('META_DESCRIPTION', $description);
- return $this;
- }
- /**
- * Add meta keywords segment
- *
- * @param string $keyword
- * @return e_admin_response
- */
- function addMetaKeywords($keyword)
- {
- $this->addMetaData('META_KEYWORDS', $keyword);
- return $this;
- }
- /**
- * Send e107 meta-data
- *
- * @return e_admin_response
- */
- function sendMeta()
- {
- //HEADERF already included or meta content already sent
- if(e_AJAX_REQUEST || defined('HEADER_INIT') || defined('e_PAGETITLE'))
- return $this;
- if(!defined('e_PAGETITLE') && !empty($this->_e_PAGETITLE))
- {
- define('e_PAGETITLE', implode($this->_meta_title_separator, $this->_e_PAGETITLE));
- }
- if(!defined('META_DESCRIPTION') && !empty($this->_META_DESCRIPTION))
- {
- define('META_DESCRIPTION', implode(' ', $this->_META_DESCRIPTION));
- }
- if(!defined('META_KEYWORDS') && !empty($this->_META_KEYWORDS))
- {
- define('META_KEYWORDS', implode(', ', $this->_META_KEYWORDS));
- }
- return $this;
- }
- /**
- * Add content segment to the header namespace
- *
- * @param string $content
- * @return e_admin_response
- */
- function addHeaderContent($content)
- {
- $this->appendBody($content, 'header_content');
- return $this;
- }
- /**
- * Get page header namespace content segments
- *
- * @param boolean $reset
- * @param boolean $glue
- * @return string
- */
- function getHeaderContent($reset = true, $glue = "\n\n")
- {
- return $this->getBody('header_content', $reset, $glue);
- }
- /**
- * Switch to iframe mod
- * FIXME - implement e_IFRAME to frontend - header_default.php
- *
- * @return e_admin_response
- */
- function setIframeMod()
- {
- global $HEADER, $FOOTER, $CUSTOMHEADER, $CUSTOMFOOTER;
- $HEADER = $FOOTER = '';
- $CUSTOMHEADER = $CUSTOMFOOTER = array();
- //TODO generic $_GET to activate for any page of admin.
- // New
- if(!defined('e_IFRAME'))
- {
- define('e_IFRAME', true);
- }
- return $this;
- }
- /**
- * Send Response Output
- *
- * @param string $name segment
- * @param array $options valid keys are: messages|render|meta|return|raw|ajax
- * @return mixed
- */
- function send($name = 'default', $options = array())
- {
- if(is_string($options))
- {
- parse_str($options, $options);
- }
- // Merge with all available default options
- $options = array_merge(array(
- 'messages' => true,
- 'render' => true,
- 'meta' => false,
- 'return' => false,
- 'raw' => false,
- 'ajax' => false
- ), $options);
- $content = $this->getBody($name, true);
- $title = $this->getTitle($name, true);
- $return = $options['return'];
- if($options['ajax'] || e_AJAX_REQUEST)
- {
- $type = $options['ajax'] && is_string($options['ajax']) ? $options['ajax'] : '';
- $this->getJsHelper()->sendResponse($type);
- }
- if($options['messages'])
- {
- $content = e107::getMessage()->render().$content;
- }
- if($options['meta'])
- {
- $this->sendMeta();
- }
- // raw output expected - force return array
- if($options['raw'])
- {
- return array($title, $content, $this->getRenderMod($name));
- }
- //render disabled by the controller
- if(!$this->getRenderMod($name))
- {
- $options['render'] = false;
- }
- if($options['render'])
- {
- return e107::getRender()->tablerender($title, $content, $this->getRenderMod($name), $return);
- }
- if($return)
- {
- return $content;
- }
- print($content);
- return '';
- }
- /**
- * Get JS Helper instance
- *
- * @return e_jshelper
- */
- public function getJsHelper()
- {
- return e107::getSingleton('e_jshelper', true, 'admin_response');
- }
- }
- /**
- * TODO - request related code should be moved to core
- * request handler
- */
- class e_admin_dispatcher
- {
- /**
- * @var e_admin_request
- */
- protected $_request = null;
- /**
- * @var e_admin_response
- */
- protected $_response = null;
- /**
- * @var e_admin_controller
- */
- protected $_current_controller = null;
- /**
- * Required (set by child class).
- * Controller map array in format
- * 'MODE' => array('controller' =>'CONTROLLER_CLASS_NAME'[, 'path' => 'CONTROLLER SCRIPT PATH', 'ui' => extend of 'comments_admin_form_ui', 'uipath' => 'path/to/ui/']);
- *
- * @var array
- */
- protected $modes = array();
-
- /**
- * Optional - access restrictions per action
- * Access array in format (similar to adminMenu)
- * 'MODE/ACTION' => e_UC_* (userclass constant, or custom userclass ID if dynamically set)
- *
- * @var array
- */
- protected $access = array();
-
- /**
- * Optional - generic entry point access restriction (via getperms())
- * Value of this for plugins would be always 'P'.
- * More detailed access control is granted with $access and $modes[MODE]['perm'] or $modes[MODE]['userclass'] settings
- *
- * @var string
- */
- protected $perm;
- /**
- * @var string
- */
- protected $defaultMode = '';
- /**
- * @var string
- */
- protected $defaultAction = '';
- /**
- * Optional - map 'mode/action' pair to 'modeAlias/actionAlias'
- * @var string
- */
- protected $adminMenuAliases = array();
- /**
- * Optional (set by child class).
- * Required for admin menu render
- * Format: 'mode/action' => array('caption' => 'Link title'[, 'perm' => '0', 'url' => '{e_PLUGIN}plugname/admin_config.php'], ...);
- * Note that 'perm' and 'userclass' restrictions are inherited from the $modes, $access and $perm, so you don't have to set that vars if
- * you don't need any additional 'visual' control.
- * All valid key-value pair (see e107::getNav()->admin function) are accepted.
- * @var array
- */
- protected $adminMenu = array();
-
- /**
- * Optional (set by child class).
- * Page titles for pages not in adminMenu (e.g. main/edit)
- * Format array(mod/action => Page Title)
- * @var string
- */
- protected $pageTitles = array(
- 'main/edit' => LAN_MANAGE,
- );
- /**
- * Optional (set by child class).
- * @var string
- */
- protected $menuTitle = 'Menu';
- /**
- * @var string
- */
- protected $pluginTitle = '';
- /**
- * Constructor
- *
- * @param string|array|e_admin_request $request [optional]
- * @param e_admin_response $response
- */
- public function __construct($auto_observe = true, $request = null, $response = null)
- {
- // we let know some admin routines we are in UI mod - related with some legacy checks and fixes
- if(!defined('e_ADMIN_UI'))
- {
- define('e_ADMIN_UI', true);
- }
- require_once(e_ADMIN.'boot.php');
-
- if(null === $request || !is_object($request))
- {
- $request = new e_admin_request($request);
- }
- if(null === $response)
- {
- $response = new e_admin_response();
- }
- $this->setRequest($request)->setResponse($response)->init();
- if(!$this->defaultMode || !$this->defaultAction)
- {
- $this->setDefaults();
- }
- $request->setDefaultMode($this->defaultMode)->setDefaultAction($this->defaultAction);
- // register itself
- e107::setRegistry('admin/ui/dispatcher', $this);
-
- // permissions and restrictions
- $this->checkAccess();
- if($auto_observe)
- {
- $this->runObservers(true);
- }
- }
- /**
- * User defined constructor - called before _initController() method
- * @return e_admin_dispatcher
- */
- public function init()
- {
- }
-
- public function checkAccess()
- {
- $request = $this->getRequest();
- $currentMode = $request->getMode();
- // access based on mode setting - general controller access
- if(!$this->checkModeAccess($currentMode))
- {
- $request->setAction('e403');
- e107::getMessage()->addError('You don\'t have permissions to view this page.')
- ->addDebug('Mode access restriction triggered.');
- return false;
- }
-
- // access based on $access settings - access per action
- $currentAction = $request->getAction();
- $route = $currentMode.'/'.$currentAction;
- if(!$this->checkRouteAccess($route))
- {
- $request->setAction('e403');
- e107::getMessage()->addError('You don\'t have permissions to view this page.')
- ->addDebug('Route access restriction triggered.');
- return false;
- }
-
- return true;
- }
-
- public function checkModeAccess($mode)
- {
- // mode userclass (former check_class())
- if(isset($this->modes[$mode]['userclass']) && !e107::getUser()->checkClass($this->modes[$mode]['userclass'], false))
- {
- return false;
- }
- // mode admin permission (former getperms())
- if(isset($this->modes[$mode]['perm']) && !e107::getUser()->checkAdminPerms($this->modes[$mode]['perm']))
- {
- return false;
- }
- // generic dispatcher admin permission (former getperms())
- if(null !== $this->perm && !e107::getUser()->checkAdminPerms($this->perm))
- {
- return false;
- }
- return true;
- }
-
- public function checkRouteAccess($route)
- {
- if(isset($this->access[$route]) && !e107::getUser()->checkClass($this->access[$route], false))
- {
- return false;
- }
- return true;
- }
- /**
- * Retrieve missing default action/mode
- * @return e_admin_dispatcher
- */
- public function setDefaults()
- {
- // try Admin menu first
- if($this->adminMenu)
- {
- reset($this->adminMenu);
- list($mode, $action) = explode('/', key($this->adminMenu), 3);
- }
- else
- {
- reset($this->modes);
- $mode = key($this->modes);
- $action = $this->modes[$mode]['index'];
- }
- if(!$this->defaultMode) $this->defaultMode = $mode;
- if(!$this->defaultAction) $this->defaultAction = $action;
- return $this;
- }
- /**
- * Get admin menu array
- * @return array
- */
- public function getMenuData()
- {
- return $this->adminMenu;
- }
-
- /**
- * Get admin menu array
- * @return array
- */
- public function getPageTitles()
- {
- return $this->pageTitles;
- }
- /**
- * Get admin menu array
- * @return array
- */
- public function getMenuAliases()
- {
- return $this->adminMenuAliases;
- }
- /**
- * Get request object
- * @return e_admin_request
- */
- public function getRequest()
- {
- return $this->_request;
- }
- /**
- * Set request object
- * @param e_admin_request $request
- * @return e_admin_dispatcher
- */
- public function setRequest($request)
- {
- $this->_request = $request;
- return $this;
- }
- /**
- * Get response object
- * @return e_admin_response
- */
- public function getResponse()
- {
- return $this->_response;
- }
- /**
- * Set response object
- * @param e_admin_response $response
- * @return e_admin_dispatcher
- */
- public function setResponse($response)
- {
- $this->_response = $response;
- return $this;
- }
- /**
- * Dispatch & render all
- *
- * @param boolean $run_header see runObservers()
- * @param boolean $return see runPage()
- * @return string|array current admin page body
- */
- public function run($run_header = true, $return = 'render')
- {
- return $this->runObservers()->runPage($return);
- }
- /**
- * Run observers/headers only, should be called before header.php call
- *
- * @return e_admin_dispatcher
- */
- public function runObservers($run_header = true)
- {
- //search for $actionName.'Observer' method. Additional $actionName.$triggerName.'Trigger' methods will be called as well
- $this->getController()->dispatchObserver();
- //search for $actionName.'Header' method, js manager should be used inside for sending JS to the page,
- // meta information should be created there as well
- if($run_header)
- {
- $this->getController()->dispatchHeader();
- }
- return $this;
- }
- /**
- * Run page action.
- * If return type is array, it should contain allowed response options (see e_admin_response::send())
- * Available return type string values:
- * - render_return: return rendered content ( see e107::getRender()->tablerender()), add system messages, send meta information
- * - render: outputs rendered content ( see e107::getRender()->tablerender()), add system messages
- * - response: return response object
- * - raw: return array(title, content, render mode)
- * - ajax: force ajax output (and exit)
- *
- * @param string|array $return_type expected string values: render|render_out|response|raw|ajax[_text|_json|_xml]
- * @return mixed
- */
- public function runPage($return_type = 'render')
- {
- $response = $this->getController()->dispatchPage();
- if(is_array($return_type))
- {
- return $response->send('default', $return_type);
- }
- switch($return_type)
- {
- case 'render_return':
- $options = array(
- 'messages' => true,
- 'render' => true,
- 'meta' => true,
- 'return' => true,
- 'raw' => false
- );
- break;
- case 'raw':
- $options = array(
- 'messages' => false,
- 'render' => false,
- 'meta' => false,
- 'return' => true,
- 'raw' => true
- );
- break;
- case 'ajax':
- case 'ajax_text':
- case 'ajax_xml';
- case 'ajax_json';
- $options = array(
- 'messages' => false,
- 'render' => false,
- 'meta' => false,
- 'return' => false,
- 'raw' => false,
- 'ajax' => str_replace(array('ajax_', 'ajax'), array('', 'text'), $return_type)
- );
- break;
- case 'response':
- return $response;
- break;
- case 'render':
- default:
- $options = array(
- 'messages' => true,
- 'render' => true,
- 'meta' => false,
- 'return' => false,
- 'raw' => false
- );
- break;
- }
- return $response->send('default', $options);
- }
- /**
- * Proxy method
- *
- * @return string
- */
- public function getHeader()
- {
- return $this->getController()->getHeader();
- }
- /**
- * Get current controller object
- * @return e_admin_controller
- */
- public function getController()
- {
- if(null === $this->_current_controller)
- {
- $this->_initController();
- }
- return $this->_current_controller;
- }
- /**
- * Try to init Controller from request using current controller map
- *
- * @return e_admin_dispatcher
- */
- protected function _initController()
- {
- $request = $this->getRequest();
- $response = $this->getResponse();
- if(isset($this->modes[$request->getModeName()]) && isset($this->modes[$request->getModeName()]['controller']))
- {
- $class_name = $this->modes[$request->getModeName()]['controller'];
- $class_path = vartrue($this->modes[$request->getModeName()]['path']);
- if($class_path)
- {
- require_once(e107::getParser()->replaceConstants($class_path));
- }
- if($class_name && class_exists($class_name))//NOTE: autoload in the play
- {
- $this->_current_controller = new $class_name($request, $response);
- //give access to current request object, user defined init
- $this->_current_controller->setRequest($this->getRequest())->init();
- }
- // Known controller (found in e_admin_dispatcher::$modes), class not found exception
- else
- {
- // TODO - admin log
- // get default controller
- $this->_current_controller = $this->getDefaultController();
- // add messages
- e107::getMessage()->add('Can\'t find class <strong>"'.($class_name ? $class_name : 'n/a').'"</strong> for controller <strong>"'.ucfirst($request->getModeName()).'"</strong>', E_MESSAGE_ERROR)
- ->add('Requested: '.e_SELF.'?'.$request->buildQueryString(), E_MESSAGE_DEBUG);
- //
- $request->setMode($this->getDefaultControllerName())->setAction('e404');
- $this->_current_controller->setRequest($request)->init();
- }
- if(vartrue($this->modes[$request->getModeName()]['ui']))
- {
- $class_name = $this->modes[$request->getModeName()]['ui'];
- $class_path = vartrue($this->modes[$request->getModeName()]['uipath']);
- if($class_path)
- {
- require_once(e107::getParser()->replaceConstants($class_path));
- }
- if(class_exists($class_name))//NOTE: autoload in the play
- {
- $this->_current_controller->setParam('ui', new $class_name($this->_current_controller));
- }
- }
- $this->_current_controller->setParam('modes', $this->modes);
- }
- // Not known controller (not found in e_admin_dispatcher::$modes) exception
- else
- {
- // TODO - admin log
- $this->_current_controller = $this->getDefaultController();
- // add messages
- e107::getMessage()->add('Can\'t find class for controller <strong>"'.ucfirst($request->getModeName()).'"</strong>', E_MESSAGE_ERROR)
- ->add('Requested: '.e_SELF.'?'.$request->buildQueryString(), E_MESSAGE_DEBUG);
- // go to not found page
- $request->setMode($this->getDefaultControllerName())->setAction('e404');
- $this->_current_controller->setRequest($request)->init();
- }
- return $this;
- }
- /**
- * Default controller object - needed if controller not found
- * @return e_admin_controller
- */
- public function getDefaultController()
- {
- $class_name = $this->getDefaultControllerName();
- return new $class_name($this->getRequest(), $this->getResponse());
- }
- /**
- * Default controller name - needed if controller not found
- * @return string name of controller
- */
- public function getDefaultControllerName()
- {
- return 'e_admin_controller';
- }
- /**
- * Generic Admin Menu Generator
- * @return string
- */
- function renderMenu()
- {
-
- $tp = e107::getParser();
- $var = array();
- $selected = false;
- foreach($this->adminMenu as $key => $val)
- {
- $tmp = explode('/', trim($key, '/'), 3);
- // sync with mode/route access
- if(!$this->checkModeAccess($tmp[0]) || !$this->checkRouteAccess($tmp[0].'/'.$tmp[1]))
- {
- continue;
- }
- // custom 'selected' check
- if(isset($val['selected']) && $val['selected']) $selected = $val['selected'] === true ? $key : $val['selected'];
- foreach ($val as $k=>$v)
- {
- switch($k)
- {
- case 'caption':
- $k2 = 'text';
- $v = defset($v, $v);
- break;
- case 'url':
- $k2 = 'link';
- $v = $tp->replaceConstants($v, 'abs').'?mode='.$tmp[0].'&action='.$tmp[1];
- break;
- case 'uri':
- $k2 = 'link';
- $v = $tp->replaceConstants($v, 'abs');
- break;
- default:
- $k2 = $k;
-
- break;
- }
-
- // Access check done above
- // if($val['perm']!= null) // check perms
- // {
- // if(getperms($val['perm']))
- // {
- // $var[$key][$k2] = $v;
- // }
- // }
- // else
- {
- $var[$key][$k2] = $v;
-
- }
- }
-
-
-
- // TODO slide down menu options?
- if(!vartrue($var[$key]['link']))
- {
- $var[$key]['link'] = e_SELF.'?mode='.$tmp[0].'&action='.$tmp[1]; // FIXME - URL based on $modes, remove url key
- }
-
- if(varset($val['tab']))
- {
- $var[$key]['link'] .= "&tab=".$val['tab'];
- }
- /*$var[$key]['text'] = $val['caption'];
- $var[$key]['link'] = (vartrue($val['url']) ? $tp->replaceConstants($val['url'], 'abs') : e_SELF).'?mode='.$tmp[0].'&action='.$tmp[1];
- $var[$key]['perm'] = $val['perm']; */
- }
-
- if(empty($var)) return '';
-
- $request = $this->getRequest();
- if(!$selected) $selected = $request->getMode().'/'.$request->getAction();
- $selected = vartrue($this->adminMenuAliases[$selected], $selected);
- return e107::getNav()->admin($this->menuTitle, $selected, $var);
- }
- /**
- * Render Help Text in <ul> format. XXX TODO
- */
- function renderHelp()
- {
-
-
-
- }
-
- /**
- * Check for table issues and warn the user. XXX TODO
- * ie. user is using French interface but no french tables found for the current DB tables.
- */
- function renderWarnings()
- {
-
-
-
-
- }
-
- }
- class e_admin_controller
- {
- /**
- * @var e_admin_request
- */
- protected $_request;
- /**
- * @var e_admin_response
- */
- protected $_response;
- /**
- * @var array User defined parameters
- */
- protected $_params = array();
- /**
- * @var string default action name
- */
- protected $_default_action = 'index';
-
- /**
- * List (numerical array) of only allowed for this controller actions
- * Useful to grant access for certain pre-defined actions only
- * XXX - we may move this in dispatcher (or even having it also there), still searching the most 'friendly' way
- * @var array
- */
- protected $allow = array();
-
- /**
- * List (numerical array) of only disallowed for this controller actions
- * Useful to restrict access for certain pre-defined actions only
- * XXX - we may move this in dispatcher (or even having it also there), still searching the most 'friendly' way
- * @var array
- */
- protected $disallow = array();
- /**
- * Constructor
- * @param e_admin_request $request [optional]
- */
- public function __construct($request, $response, $params = array())
- {
- $this->_params = array_merge(array('enable_triggers' => false), $params);
- $this->setRequest($request)
- ->setResponse($response)
- ->setParams($params);
-
- $this->checkAccess();
- }
- /**
- * Check against allowed/disallowed actions
- * FIXME check plugin admin access (check_class(P)), confirm e-token is verified
- */
- public function checkAccess()
- {
- $request = $this->getRequest();
- $currentAction = $request->getAction();
- // access based on mode setting - general controller access
- if(!empty($this->disallow) && in_array($currentAction, $this->disallow))
- {
- $request->setAction('e403');
- e107::getMessage()->addError('You don\'t have permissions to view this page.')
- ->addDebug('Controller action disallowed restriction triggered.');
- return false;
- }
-
- // access based on $access settings - access per action
- if(!empty($this->allow) && !in_array($currentAction, $this->allow))
- {
- $request->setAction('e403');
- e107::getMessage()->addError('You don\'t have permissions to view this page.')
- ->addDebug('Controller action not in allowed list restriction triggered.');
- return false;
- }
- return true;
- }
- /**
- * User defined init
- * Called before dispatch routine
- */
- public function init()
- {
- }
- /**
- * Get controller parameter
- * Currently used core parameters:
- * - enable_triggers: don't use it direct, see {@link setTriggersEnabled()}
- * - modes - see dispatcher::$modes
- * - ajax_response - text|xml|json - default is 'text'; this should be set by the action method
- * - TODO - more parameters/add missing to this list
- *
- * @param string $key [optional] if null - get whole array
- * @param mixed $default [optional]
- * @return mixed
- */
- public function getParam($key = null, $default = null)
- {
- if(null === $key)
- {
- return $this->_params;
- }
- return (isset($this->_params[$key]) ? $this->_params[$key] : $default);
- }
- /**
- * Set parameter
- * @param string $key
- * @param mixed $value
- * @return e_admin_controller
- */
- public function setParam($key, $value)
- {
- if(null === $value)
- {
- unset($this->_params[$key]);
- return $this;
- }
- $this->_params[$key] = $value;
- return $this;
- }
- /**
- * Merge passed parameter array with current parameters
- * @param array $params
- * @return e_admin_controller
- */
- public function setParams($params)
- {
- $this->_params = array_merge($this->_params, $params);
- return $this;
- }
- /**
- * Reset parameter array
- * @param array $params
- * @return e_admin_controller
- */
- public function resetParams($params)
- {
- $this->_params = $params;
- return $this;
- }
- /**
- * Get current request object
- * @return e_admin_request
- */
- public function getRequest()
- {
- return $this->_request;
- }
- /**
- * Set current request object
- * @param e_admin_request $request
- * @return e_admin_controller
- */
- public function setRequest($request)
- {
- $this->_request = $request;
- return $this;
- }
- /**
- * Get current response object
- * @return e_admin_response
- */
- public function getResponse()
- {
- return $this->_response;
- }
- /**
- * Set current response object
- * @param e_admin_response $response
- * @return e_admin_controller
- */
- public function setResponse($response)
- {
- $this->_response = $response;
- return $this;
- }
-
- /**
- * Get current dispatcher object
- * @return e_admin_dispatcher
- */
- public function getDispatcher()
- {
- return e107::getRegistry('admin/ui/dispatcher');
- }
- /**
- * Request proxy method
- * @param string $key [optional]
- * @param mixed $default [optional]
- * @return mixed
- */
- public function getQuery($key = null, $default = null)
- {
- return $this->getRequest()->getQuery($key, $default);
- }
- /**
- * Request proxy method
- * @param string|array $key
- * @param mixed $value [optional]
- * @return e_admin_controller
- */
- public function setQuery($key, $value = null)
- {
- $this->getRequest()->setQuery($key, $value);
- return $this;
- }
- /**
- * Request proxy method
- * @param string $key [optional]
- * @param mixed $default [optional]
- * @return mixed
- */
- public function getPosted($key = null, $default = null)
- {
- return $this->getRequest()->getPosted($key, $default);
- }
- /**
- * Request proxy method
- * @param string $key
- * @param mixed $value [optional]
- * @return e_admin_controller
- */
- public function setPosted($key, $value = null)
- {
- $this->getRequest()->setPosted($key, $value);
- return $this;
- }
- /**
- * Add page title, response proxy method
- *
- * @param string $title if boolean true - current menu caption will be used
- * @param boolean $meta add to meta as well
- * @return e_admin_controller
- */
- public function addTitle($title = true, $meta = true)
- {
- if(true === $title)
- {
- $_dispatcher = $this->getDispatcher();
- $data = $_dispatcher->getPageTitles();
- $search = $this->getMode().'/'.$this->getAction();
- if(isset($data[$search])) $res['caption'] = $data[$search];
- else
- {
- $data = $_dispatcher->getMenuData();
- if(isset($data[$search])) $res = $data[$search];
- else return $this;
- }
- $title = $res['caption'];
- }
- // print_a($title);
- $this->getResponse()->appendTitle($title);
- if($meta) $this->addMetaTitle($title);
- return $this;
- }
- /**
- * Add page meta title, response proxy method.
- * Should be called before header.php
- *
- * @param string $title
- * @return e_admin_controller
- */
- public function addMetaTitle($title)
- {
- $this->getResponse()->addMetaTitle($title);
- return $this;
- }
- /**
- * Add header content, response proxy method
- * Should be called before header.php
- *
- * @param string $content
- * @return e_admin_controller
- */
- public function addHeader($content)
- {
- $this->getResponse()->addHeaderContent(vartrue($content));
- return $this;
- }
- /**
- * Get header content, response proxy method
- *
- * @return string
- */
- public function getHeader()
- {
- return $this->getResponse()->getHeaderContent();
- }
- /**
- * Get current mode, response proxy method
- * @return string
- */
- public function getMode()
- {
- return $this->getRequest()->getMode();
- }
- /**
- * Get current actin, response proxy method
- * @return string
- */
- public function getAction()
- {
- return $this->getRequest()->getAction();
- }
- /**
- * Get current ID, response proxy method
- * @return string
- */
- public function getId()
- {
- return $this->getRequest()->getId();
- }
- /**
- * Get response owned JS Helper instance, response proxy method
- *
- * @return e_jshelper
- */
- public function getJsHelper()
- {
- return $this->getResponse()->getJsHelper();
- }
- protected function _preDispatch($action = '')
- {
- if(!$action) $action = $this->getRequest()->getActionName();
- $method = $this->toMethodName($action, 'page');
- if(!method_exists($this, $method))
- {
- $this->getRequest()->setAction($this->getDefaultAction());
- }
- // switch to 404 if needed
- $method = $this->toMethodName($this->getRequest()->getActionName(), 'page');
- if(!method_exists($this, $method))
- {
- $this->getRequest()->setAction('e404');
- $message = e107::getParser()->lanVars(LAN_UI_404_METHOD_ERROR, $method, true);
- e107::getMessage()->add($message, E_MESSAGE_ERROR);
- }
- }
- /**
- * Dispatch observer, check for triggers
- *
- * @param string $action [optional]
- * @return e_admin_controller
- */
- public function dispatchObserver($action = null)
- {
- $request = $this->getRequest();
- if(null === $request)
- {
- $request = new e_admin_request();
- $this->setRequest($request);
- }
- $this->_preDispatch($action);
- if(null === $action)
- {
- $action = $request->getActionName();
- }
- // check for observer
- $actionObserverName = $this->toMethodName($action, 'observer', e_AJAX_REQUEST);
- if(method_exists($this, $actionObserverName))
- {
- $this->$actionObserverName();
- }
- // check for triggers, not available in Ajax mode
- if(!e_AJAX_REQUEST && $this->triggersEnabled())
- {
- $posted = $request->getPosted();
- foreach ($posted as $key => $value)
- {
- if(strpos($key, 'etrigger_') === 0)
- {
- $actionTriggerName = $this->toMethodName($action.$request->camelize(substr($key, 9)), 'trigger', false);
- if(method_exists($this, $actionTriggerName))
- {
- $this->$actionTriggerName($value);
- }
- //Check if triggers are still enabled
- if(!$this->triggersEnabled())
- {
- break;
- }
- }
- }
- }
- return $this;
- }
- /**
- * Dispatch header, not allowed in Ajax mode
- * @param string $action [optional]
- * @return e_admin_controller
- */
- public function dispatchHeader($action = null)
- {
- // not available in Ajax mode
- if(e_AJAX_REQUEST)
- {
- return $this;
- }
- $request = $this->getRequest();
- if(null === $request)
- {
- $request = new e_admin_request();
- $this->setRequest($request);
- }
- $this->_preDispatch($action);
- if(null === $action)
- {
- $action = $request->getActionName();
- }
- // check for observer
- $actionHeaderName = $this->toMethodName($action, 'header', false);
- if(method_exists($this, $actionHeaderName))
- {
- $this->$actionHeaderName();
- }
- //send meta data
- $this->getResponse()->sendMeta();
- return $this;
- }
- /**
- * Dispatch controller action
- *
- * @param string $action [optional]
- * @return e_admin_response
- */
- public function dispatchPage($action = null)
- {
- $request = $this->getRequest();
- if(null === $request)
- {
- $request = new e_admin_request();
- $this->setRequest($request);
- }
- $response = $this->getResponse();
- $this->_preDispatch($action);
- if(null === $action)
- {
- $action = $request->getActionName();
- }
- // check for observer
- $actionName = $this->toMethodName($action, 'page');
- $ret = '';
- if(!method_exists($this, $actionName)) // pre dispatch already switched to default action/not found page if needed
- {
- e107::getMessage()->add('Action '.$actionName.' no found!', E_MESSAGE_ERROR);
- return $response;
- }
- ob_start(); //catch any output
- $ret = $this->{$actionName}();
- //Ajax XML/JSON communication
- if(e_AJAX_REQUEST && is_array($ret))
- {
- $response_type = $this->getParam('ajax_response', 'xml');
- ob_clean();
- $js_helper = $response->getJsHelper();
- foreach ($ret as $act => $data)
- {
- $js_helper->addResponse($data, $act);
- }
- $js_helper->sendResponse($response_type);
- }
- $ret .= ob_get_clean();
- // Ajax text response
- if(e_AJAX_REQUEST)
- {
- $response_type = 'text';
- $response->getJsHelper()->addResponse($ret)->sendResponse($response_type);
- }
- else
- {
- $response->appendBody($ret);
- }
- return $response;
- }
- public function E404Observer()
- {
- $this->getResponse()->setTitle(LAN_UI_404_TITLE_ERROR);
- }
- public function E404Page()
- {
- return '<div class="center">'.LAN_UI_404_BODY_ERROR.'</div>'; // TODO - lan
- }
- public function E404AjaxPage()
- {
- exit;
- }
-
- public function E403Observer()
- {
- $this->getResponse()->setTitle(LAN_UI_403_TITLE_ERROR);
- }
- public function E403Page()
- {
- return '<div class="center">'.LAN_UI_403_BODY_ERROR.'</div>'; // TODO - lan
- }
- public function E403AjaxPage()
- {
- exit;
- }
- /**
- * Generic redirect handler, it handles almost everything we would need.
- * Additionally, it moves currently registered system messages to SESSION message stack
- * In almost every case {@link redirectAction()} and {@link redirectMode()} are better solution
- *
- * @param string $action defaults to current action
- * @param string $mode defaults to current mode
- * @param string|array $exclude_query comma delimited variable names to be excluded from current query OR TRUE to exclude everything
- * @param string|array $merge_query query string (& delimiter) or associative array to be merged with current query
- * @param string $path default to e_SELF
- * @return void
- */
- public function redirect($action = null, $mode = null, $exclude_query = '', $merge_query = array(), $path = null)
- {
- $request = $this->getRequest();
- if($mode) $request->setMode($mode);
- if($action) $request->setAction($action);
- if(!$path) $path = e_SELF;
-
- //prevent cache
- header('Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
- // header('Pragma: no-cache');
- $url = $path.'?'.$request->buildQueryString($merge_query, false, $exclude_query);
- // Transfer all messages to session
- e107::getMessage()->moveToSession();
- // write session data
- session_write_close();
- // do redirect
- header('Location: '.$url);
- exit;
- }
- /**
- * Convenient redirect() proxy method, make life easier when redirecting between actions
- * in same mode.
- *
- * @param string $action [optional]
- * @param string|array $exclude_query [optional]
- * @param string|array $merge_query [optional]
- * @return none
- */
- public function redirectAction($action = null, $exclude_query = '', $merge_query = array())
- {
- $this->redirect($action, null, $exclude_query, $merge_query);
- }
- /**
- * Convenient redirect to another mode (doesn't use current Query state)
- * If path is empty, it'll be auto-detected from modes (dispatcher) array
- *
- * @param string $mode
- * @param string $action
- * @param string|array $query [optional]
- * @param string $path
- * @return void
- */
- public function redirectMode($mode, $action, $query = array(), $path = null)
- {
- if(!$path && $this->getParam('modes'))
- {
- $modes = $this->getParam('modes');
- if(vartue($modes[$mode]) && vartrue($modes[$mode]['url']))
- {
- $path = e107::getParser()->replaceConstants($modes[$mode]['url'], 'abs');
- }
- }
- $this->redirect($action, $mode, true, $query, $path);
- }
- /**
- * Convert action name to method name
- *
- * @param string $action_name formatted (e.g. request method getActionName()) action name
- * @param string $type page|observer|header|trigger
- * @param boolean $ajax force with true/false, if null will be auto-resolved
- * @return string
- */
- public function toMethodName($action_name, $type= 'page', $ajax = null)
- {
- if(null === $ajax) $ajax = e_AJAX_REQUEST; //auto-resolving
- return $action_name.($ajax ? 'Ajax' : '').ucfirst(strtolower($type));
- }
- /**
- * Check if there is a trigger available in the posted data
- * @param array $exclude
- * @return boolean
- */
- public function hasTrigger($exclude = array())
- {
- $posted = array_keys($this->getPosted());
- foreach ($posted as $key)
- {
- if(!in_array($key, $exclude) && strpos($key, 'etrigger_') === 0)
- {
- return true;
- }
- }
- return false;
- }
- /**
- * Get default action
- * @return string action
- */
- public function getDefaultAction()
- {
- return $this->_default_action;
- }
- /**
- * Set default action
- * @param string $action_name
- * @return e_admin_controller
- */
- public function setDefaultAction($action_name)
- {
- $this->_default_action = $action_name;
- return $this;
- }
- /**
- * @return boolean
- */
- public function triggersEnabled()
- {
- return $this->getParam('enable_triggers');
- }
- /**
- * @param boolean $flag
- * @return e_admin_controller
- */
- public function setTriggersEnabled($flag)
- {
- $this->setParam('enable_triggers', $flag);
- return $this;
- }
- }
- //FIXME - move everything from e_admin_ui except model auto-create related code
- class e_admin_controller_ui extends e_admin_controller
- {
- /**
- * @var array UI field data
- */
- protected $fields = array();
- /**
- * @var array default fields activated on List view
- */
- protected $fieldpref = array();
- /**
- * @var array Plugin Preference description array
- */
- protected $prefs = array();
- /**
- * Data required for _modifyListQry() to automate
- * db query building
- * @var array
- */
- protected $tableJoin = array();
- /**
- * Array of table names and their a…
Large files files are truncated, but you can click here to view the full file