diff --git a/class2.php b/class2.php index 4e6ccd74f..24408363d 100644 --- a/class2.php +++ b/class2.php @@ -9,8 +9,8 @@ * General purpose file * * $Source: /cvs_backup/e107_0.8/class2.php,v $ -* $Revision: 1.156 $ -* $Date: 2009-11-12 16:43:44 $ +* $Revision: 1.157 $ +* $Date: 2009-11-14 14:52:26 $ * $Author: secretr $ * */ @@ -2124,6 +2124,7 @@ function plugInstalled($plugname) * } * * TODO - use spl_autoload[_*] for core autoloading some day (PHP5 > 5.1.2) + * TODO - at this time we could create e107 version of spl_autoload_register - e_event->register/trigger('autoload') * * @param string $className * @return void @@ -2148,14 +2149,21 @@ function __autoload($className) break; default: //core libraries - $filename = e107::getHandlerPath($className, true); + $filename = e107::getHandlerPath($className, true); //TODO add debug screen Auto-loaded classes - ['core: '.$filename.' - '.$className]; break; } - + if($filename) { // auto load doesn't REQUIRE files, because this will break things like call_user_func() include($filename); } } + +// register __autoload if possible to prevent its override by +// 3rd party spl_autoload_register calls +if(function_exists('spl_autoload_register')) +{ + spl_autoload_register('__autoload'); +} diff --git a/e107_handlers/admin_handler.php b/e107_handlers/admin_handler.php index 5dd179e7f..c13905cda 100644 --- a/e107_handlers/admin_handler.php +++ b/e107_handlers/admin_handler.php @@ -9,8 +9,8 @@ * Administration UI handlers, admin helper functions * * $Source: /cvs_backup/e107_0.8/e107_handlers/admin_handler.php,v $ - * $Revision: 1.25 $ - * $Date: 2009-11-12 16:55:50 $ + * $Revision: 1.26 $ + * $Date: 2009-11-14 14:52:26 $ * $Author: secretr $ */ @@ -91,7 +91,13 @@ class e_admin_request * Current Mode * @var string */ - protected $_mode = 'main'; + protected $_mode = ''; + + /** + * Default Mode + * @var string + */ + protected $_default_mode = 'main'; /** * Key name for mode search @@ -103,7 +109,13 @@ class e_admin_request * Current action * @var string */ - protected $_action = 'index'; + protected $_action = ''; + + /** + * Default Action + * @var string + */ + protected $_default_action = 'index'; /** * Key name for action search @@ -278,9 +290,19 @@ class e_admin_request */ 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 * @@ -288,7 +310,7 @@ class e_admin_request */ public function getModeName() { - return strtolower(str_replace('-', '_', $this->_mode)); + return strtolower(str_replace('-', '_', $this->getMode())); } /** @@ -303,6 +325,17 @@ class e_admin_request 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 @@ -320,16 +353,26 @@ class e_admin_request */ 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->_action); + return $this->camelize($this->getAction()); } /** @@ -345,6 +388,18 @@ class e_admin_request 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 @@ -927,12 +982,22 @@ class e_admin_dispatcher /** * Required (set by child class). * Controller map array in format - * 'MODE' => array('controller' =>'CONTROLLER_CLASS'[, 'path' => 'CONTROLLER SCRIPT PATH']); + * '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; + /** + * @var string + */ + protected $defaultMode = ''; + + /** + * @var string + */ + protected $defaultAction = ''; + /** * Optional - map 'mode/action' pair to 'modeAlias/actionAlias' * @var string @@ -953,7 +1018,12 @@ class e_admin_dispatcher * @var string */ protected $menuTitle = 'Menu'; - + + /** + * @var string + */ + protected $pluginTitle = ''; + /** * Constructor * @@ -974,6 +1044,13 @@ class e_admin_dispatcher $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); @@ -992,6 +1069,31 @@ class e_admin_dispatcher { } + /** + * 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), 2); + } + 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 request object * @return e_admin_request @@ -1892,30 +1994,21 @@ class e_admin_controller //FIXME - move everything from e_admin_ui except model auto-create related code class e_admin_controller_ui extends e_admin_controller { - -} - -class e_admin_ui extends e_admin_controller_ui -{ + /** + * @var array UI field data + */ protected $fields = array(); + + /** + * @var array default fields activated on List view + */ protected $fieldpref = array(); - protected $fieldTypes = array(); - protected $dataFields = array(); - protected $validationRules = array(); + + /** + * @var array Plugin Preference description array + */ protected $prefs = array(); - protected $pluginName; - protected $listQry; - protected $tableJoin; - protected $editQry; - protected $table; - protected $tableAlias; - protected $pid; - - protected $pluginTitle; - protected $perPage = 20; - protected $batchDelete = true; - /** * @var e_admin_model */ @@ -1936,6 +2029,238 @@ class e_admin_ui extends e_admin_controller_ui */ protected $_pref = null; + /** + * Get all field data + * @return array + */ + public function getFields() + { + return $this->fields; + } + + /** + * + * @param string $field + * @param string $key attribute name + * @param mixed $default default value if not set, default is null + * @return mixed + */ + public function getFieldAttr($field, $key, $default = null) + { + if(isset($this->fields[$field][$key])) + { + return $this->fields[$field][$key]; + } + return $default; + } + + /** + * Get fields stored as user preferences + * @return array + */ + public function getFieldPref() + { + return $this->fieldpref; + } + + /** + * Get Config data array + * @return array + */ + public function getPrefs() + { + return $this->prefs; + } + + + /** + * Get column preference array + * @return array + */ + public function getUserPref() + { + global $user_pref; + return vartrue($user_pref['admin_cols_'.$this->getTableName()], array()); + } + + /** + * Set column preference array + * @return boolean success + */ + public function setUserPref($new) + { + global $user_pref; + $user_pref['admin_cols_'.$this->getTableName()] = $new; + $this->fieldpref = $new; + return save_prefs('user'); + } + + /** + * Get current model + * + * @return e_admin_model + */ + public function getModel() + { + if(null === $this->_model) + { + $this->_setModel(); + } + + return $this->_model; + } + + /** + * Set controller model + * @param e_admin_model $model + * @return e_admin_controller_ui + */ + public function setModel($model) + { + $this->_model = $model; + return $this; + } + + public function getValidationRules() + { + return $this->getModel()->getValidationRules(); + } + + public function getDataFields() + { + return $this->getModel()->getDataFields(); + } + + /** + * User defined model setter + * @return e_admin_controller_ui + */ + protected function _setModel() + { + return $this; + } + + /** + * Get current tree model + * @return e_admin_tree + */ + public function getTreeModel() + { + if(null === $this->_tree_model) + { + $this->_setTreeModel(); + } + + return $this->_tree_model; + } + + /** + * Set controller tree model + * @param e_admin_tree $tree_model + * @return e_admin_controller_ui + */ + public function setTreeModel($tree_model) + { + $this->_tree_model = $tree_model; + return $this; + } + + /** + * User defined tree model setter + * @return e_admin_controller_ui + */ + protected function _setTreeModel() + { + return $this; + } + + /** + * Get extended (UI) Form instance + * + * @return e_admin_form_ui + */ + public function getUI() + { + if(null === $this->_ui) + { + $this->_setUI(); + } + return $this->_ui; + } + + /** + * Set controller UI form + * @param e_admin_form_ui $ui + * @return e_admin_controller_ui + */ + public function setUI($ui) + { + $this->_ui = $ui; + return $this; + } + + /** + * User defined UI form setter + * @return e_admin_controller_ui + */ + protected function _setUI() + { + return $this; + } + + /** + * Get Config object + * @return e_plugin_pref or e_core_pref when used in core areas + */ + public function getConfig() + { + if(null === $this->_pref) + { + $this->_setConfig(); + } + return $this->_pref; + } + + /** + * Set Config object + * @return e_admin_controller_ui + */ + public function setConfig($config) + { + $this->_prefs = $config; + return $this; + } + + /** + * User defined config setter + * @return e_admin_controller_ui + */ + protected function _setConfig() + { + return $this; + } +} + +class e_admin_ui extends e_admin_controller_ui +{ + + protected $fieldTypes = array(); + protected $dataFields = array(); + protected $validationRules = array(); + + protected $pluginName; + + protected $listQry; + protected $tableJoin; + protected $editQry; + protected $table; + protected $tableAlias; + protected $pid; + + protected $pluginTitle; + protected $perPage = 20; + protected $batchDelete = true; + /** * Constructor * @param e_admin_request $request @@ -1944,7 +2269,7 @@ class e_admin_ui extends e_admin_controller_ui */ public function __construct($request, $response, $params = array()) { - $this->setDefaultAction('list'); + $this->setDefaultAction($request->getDefaultAction()); $params['enable_triggers'] = true; // override parent::__construct($request, $response, $params); @@ -2631,8 +2956,7 @@ class e_admin_ui extends e_admin_controller_ui { if(!varset($this->pid) && vartrue($this->fields)) { - $mes = e107::getMessage(); - $mes->add("There is no pid set.", E_MESSAGE_WARNING); + e107::getMessage()->add("There is no pid set.", E_MESSAGE_WARNING); } return $this->pid; @@ -2657,7 +2981,7 @@ class e_admin_ui extends e_admin_controller_ui public function getJoinTable($alias = false, $prefix = false) { if($alias && $this->tableAlias) return $this->tableAlias; - return ($prefix ? '#.' : '').$this->table; + return ($prefix ? '#' : '').$this->table; } public function getBatchDelete() @@ -2665,208 +2989,140 @@ class e_admin_ui extends e_admin_controller_ui return $this->batchDelete; } - public function getFields() + /** + * Validation rules retrieved from controller object + * @return array + */ + public function getValidationRules() { - return $this->fields; - } - - public function getFieldAttr($key) - { - if(isset($this->fields[$key])) - { - return $this->fields[$key]; - } - return array(); - } - - public function getFieldPref() - { - return $this->fieldpref; - } - - public function getFieldPrefAttr($key) - { - if(isset($this->fieldpref[$key])) - { - return $this->fieldpref[$key]; - } - return array(); + return $this->validationRules; } /** - * Get Config object - * @return e_plugin_pref|e_core_pref + * Data Field array retrieved from controller object + * @return array */ - public function getConfig() + public function getDataFields() + { + return $this->dataFields; + } + + /** + * Set Config object + * @return e_admin_ui + */ + protected function _setConfig() { - if(null === $this->_pref) + $this->_pref = $this->pluginName == 'core' ? e107::getConfig() : e107::getPlugConfig($this->pluginName); + + $dataFields = $validateRules = array(); + foreach ($this->prefs as $key => $att) { - $this->_pref = $this->pluginName == 'core' ? e107::getConfig() : e107::getPlugConfig($this->pluginName); + // create dataFields array + $dataFields[$key] = vartrue($att['data'], 'string'); - $dataFields = $validateRules = array(); - foreach ($this->prefs as $key => $att) + // create validation array + if(vartrue($att['validate'])) { - // create dataFields array - if(vartrue($att['data'])) + $validateRules[$key] = array((true === $att['validate'] ? 'required' : $att['validate']), varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); + } + /* Not implemented in e_model yet + elseif(vartrue($att['check'])) + { + $validateRules[$key] = array($att['check'], varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); + }*/ + } + $this->_pref->setDataFields($dataFields)->setValidationRules($validateRules); + + return $this; + } + + /** + * Set current model + * + * @return e_admin_ui + */ + public function _setModel() + { + // try to create dataFields array if missing + if(!$this->dataFields) + { + $this->dataFields = array(); + foreach ($this->fields as $key => $att) + { + if((null !== $att['type'] && !vartrue($att['noedit'])) || vartrue($att['forceSave'])) { - $dataFields[$key] = $att['data']; + $this->dataFields[$key] = vartrue($att['data'], 'str'); + } + } + } + // TODO - do it in one loop, or better - separate method(s) -> convertFields(validate), convertFields(data),... + if(!$this->validationRules) + { + $this->validationRules = array(); + foreach ($this->fields as $key => $att) + { + if(null === $att['type'] || vartrue($att['noedit'])) + { + continue; } - - // create validation array if(vartrue($att['validate'])) { - $validateRules[$key] = array((true === $att['validate'] ? 'required' : $att['validate']), varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); + $this->validationRules[$key] = array((true === $att['validate'] ? 'required' : $att['validate']), varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); } - - - $this->_pref->setDataFields($dataFields)->setValidationRules($validateRules); - /* Not implemented in e_model yet - elseif(vartrue($att['check'])) + /*elseif(vartrue($att['check'])) could go? { - $validateRules[$key] = array($att['check'], varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); + $this->checkRules[$key] = array($att['check'], varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); }*/ } - - } - return $this->_pref; - } - - /** - * Get Config object - * @return e_plugin_pref|e_core_pref - */ - public function getPrefs() - { - return $this->prefs; - } - - /** - * Get column preference array - * @return array - */ - public function getUserPref() - { - global $user_pref; - return vartrue($user_pref['admin_cols_'.$this->getTableName()], array()); - } - - /** - * Get column preference array - * @return array - */ - public function setUserPref($new) - { - global $user_pref; - $user_pref['admin_cols_'.$this->getTableName()] = $new; - $this->fieldpref = $new; - save_prefs('user'); - } - - /** - * Get current model - * - * @return e_admin_model - */ - public function getModel() - { - if(null === $this->_model) - { - // try to create dataFields array if missing - if(!$this->dataFields) - { - $this->dataFields = array(); - foreach ($this->fields as $key => $att) - { - if((null !== $att['type'] && !vartrue($att['noedit'])) || vartrue($att['forceSave'])) - { - $this->dataFields[$key] = vartrue($att['data'], 'str'); - } - } - } - // TODO - do it in one loop, or better - separate method(s) -> convertFields(validate), convertFields(data),... - if(!$this->validationRules) - { - $this->validationRules = array(); - foreach ($this->fields as $key => $att) - { - if(null === $att['type'] || vartrue($att['noedit'])) - { - continue; - } - if(vartrue($att['validate'])) - { - $this->validationRules[$key] = array((true === $att['validate'] ? 'required' : $att['validate']), varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); - } - /*elseif(vartrue($att['check'])) could go? - { - $this->checkRules[$key] = array($att['check'], varset($att['rule']), $att['title'], varset($att['error'], $att['help'])); - }*/ - } - } - - // default model - $this->_model = new e_admin_model(); - $this->_model->setModelTable($this->table) - ->setFieldIdName($this->pid) - ->setValidationRules($this->validationRules) - ->setFieldTypes($this->fieldTypes) - ->setDataFields($this->dataFields) - ->setParam('db_query', $this->editQry); } - return $this->_model; + // default model + $this->_model = new e_admin_model(); + $this->_model->setModelTable($this->table) + ->setFieldIdName($this->pid) + ->setValidationRules($this->validationRules) + ->setFieldTypes($this->fieldTypes) + ->setDataFields($this->dataFields) + ->setParam('db_query', $this->editQry); + + return $this; } - public function setModel($model) + /** + * Set current tree + * @return e_admin_ui + */ + public function _setTreeModel() { - $this->_model = $model; - } - - public function getTreeModel() - { - if(null === $this->_tree_model) - { - // default tree model - $this->_tree_model = new e_admin_tree_model(); - $this->_tree_model->setModelTable($this->table) - ->setFieldIdName($this->pid) - ->setParams(array('model_class' => 'e_admin_model', 'db_query' => $this->listQry)); - } + // default tree model + $this->_tree_model = new e_admin_tree_model(); + $this->_tree_model->setModelTable($this->table) + ->setFieldIdName($this->pid) + ->setParams(array('model_class' => 'e_admin_model', 'db_query' => $this->listQry)); - return $this->_tree_model; + return $this; } - - public function setTreeModel($tree_model) - { - $this->_tree_model = $tree_model; - } - + /** * Get extended (UI) Form instance * - * @return e_admin_form_ui + * @return e_admin_ui */ - public function getUI() + public function _setUI() { - if(null === $this->_ui) + if($this->getParam('ui')) { - if($this->getParam('ui')) - { - $this->_ui = $this->getParam('ui'); - $this->setParam('ui', null); - } - else// default ui - { - $this->_ui = new e_admin_form_ui($this); - } + $this->_ui = $this->getParam('ui'); + $this->setParam('ui', null); } - return $this->_ui; - } - - public function setUI($ui) - { - $this->_ui = $ui; + else// default ui + { + $this->_ui = new e_admin_form_ui($this); + } + return $this; } + } class e_admin_form_ui extends e_form diff --git a/e107_plugins/release/includes/admin.php b/e107_plugins/release/includes/admin.php index 8bfe110a4..810112b50 100644 --- a/e107_plugins/release/includes/admin.php +++ b/e107_plugins/release/includes/admin.php @@ -9,8 +9,8 @@ * Release Plugin Administration UI * * $Source: /cvs_backup/e107_0.8/e107_plugins/release/includes/admin.php,v $ - * $Revision: 1.9 $ - * $Date: 2009-11-11 20:57:33 $ + * $Revision: 1.10 $ + * $Date: 2009-11-14 14:52:26 $ * $Author: secretr $ */ @@ -18,12 +18,21 @@ class plugin_release_admin extends e_admin_dispatcher { /** - * Format: 'MODE' => array('controller' =>'CONTROLLER_CLASS'[, 'path' => 'CONTROLLER SCRIPT PATH', 'ui' => 'UI CLASS NAME child of e_admin_ui', 'uipath' => 'UI SCRIPT PATH']); + * Format: 'MODE' => array('controller' =>'CONTROLLER_CLASS'[, 'index' => 'list', 'path' => 'CONTROLLER SCRIPT PATH', 'ui' => 'UI CLASS NAME child of e_admin_ui', 'uipath' => 'UI SCRIPT PATH']); + * Note - default mode/action is autodetected in this order: + * - $defaultMode/$defaultAction (owned by dispatcher - see below) + * - $adminMenu (first key if admin menu array is not empty) + * - $modes (first key == mode, corresponding 'index' key == action) * @var array */ protected $modes = array( 'main' => array('controller' => 'plugin_release_admin_ui', 'path' => null, 'ui' => 'plugin_release_admin_form_ui', 'uipath' => null) ); + + /* Both are optional + protected $defaultMode = null; + protected $defaultAction = null; + */ /** * Format: 'MODE/ACTION' => array('caption' => 'Menu link title'[, 'url' => '{e_PLUGIN}release/admin_config.php', 'perm' => '0']);