diff --git a/e107_handlers/admin_ui.php b/e107_handlers/admin_ui.php
index 0adc39ed0..93a3b63ae 100644
--- a/e107_handlers/admin_ui.php
+++ b/e107_handlers/admin_ui.php
@@ -10,64 +10,64 @@ class e_admin_request
* @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
*/
@@ -82,7 +82,7 @@ class e_admin_request
$this->parseRequest($request_string);
}
}
-
+
/**
* Parse request data
* @param string|array $request_data
@@ -95,34 +95,34 @@ class e_admin_request
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 = intval($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
@@ -135,12 +135,12 @@ class e_admin_request
}
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
- *
+ * If $value is null, (string) $key is unset
+ *
* @param string|array $key
* @param mixed $value [optional]
* @return e_admin_request
@@ -155,21 +155,21 @@ class e_admin_request
}
return $this;
}
-
+
if(null === $value)
{
unset($this->_request_qry[$key]);
return $this;
}
-
+
$this->_request_qry[$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
@@ -182,12 +182,12 @@ class e_admin_request
}
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
- *
+ * If $value is null, (string) $key is unset
+ *
* @param object $key
* @param object $value [optional]
* @return e_admin_request
@@ -202,18 +202,18 @@ class e_admin_request
}
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
@@ -223,7 +223,7 @@ class e_admin_request
if(!$this->_mode) return $this->getDefaultMode();
return $this->_mode;
}
-
+
/**
* Get default mode
* @return string
@@ -232,17 +232,17 @@ class e_admin_request
{
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
@@ -254,7 +254,7 @@ class e_admin_request
$this->setQuery($this->_mode_key, $this->_mode);
return $this;
}
-
+
/**
* Set default mode
* @param string $mode
@@ -265,7 +265,7 @@ class e_admin_request
if($mode) $this->_default_mode = $mode;
return $this;
}
-
+
/**
* Set mode key name
* @param string $key
@@ -276,7 +276,7 @@ class e_admin_request
$this->_mode_key = $key;
return $this;
}
-
+
/**
* Get current action
* @return TBD
@@ -286,7 +286,7 @@ class e_admin_request
if(!$this->_action) return $this->getDefaultAction();
return $this->_action;
}
-
+
/**
* Get default action
* @return string
@@ -295,7 +295,7 @@ class e_admin_request
{
return $this->_default_action;
}
-
+
/**
* Get current action name
* @return string camelized action
@@ -304,10 +304,10 @@ class e_admin_request
{
return $this->camelize($this->getAction());
}
-
+
/**
* Reset current action
- *
+ *
* @param string $action
* @return e_admin_request
*/
@@ -317,10 +317,10 @@ class e_admin_request
$this->setQuery($this->_action_key, $this->_action);
return $this;
}
-
+
/**
* Set default action
- *
+ *
* @param string $action
* @return e_admin_request
*/
@@ -329,7 +329,7 @@ class e_admin_request
if($action) $this->_default_action = $action;
return $this;
}
-
+
/**
* Set action key name
* @param string $key
@@ -340,7 +340,7 @@ class e_admin_request
$this->_action_key = $key;
return $this;
}
-
+
/**
* Get current ID
* @return integer
@@ -349,7 +349,7 @@ class e_admin_request
{
return $this->_id;
}
-
+
/**
* Reset current ID
* @param string $id
@@ -362,7 +362,7 @@ class e_admin_request
$this->setQuery($this->_id_key, $id);
return $this;
}
-
+
/**
* Set id key name
* @param string $key
@@ -373,11 +373,11 @@ class e_admin_request
$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
@@ -386,7 +386,7 @@ class e_admin_request
public function buildQueryString($merge_with = array(), $encode = true, $exclude_from_query = '')
{
$ret = $this->getQuery();
-
+
//special case - exclude all current
if(true === $exclude_from_query)
{
@@ -397,14 +397,14 @@ class e_admin_request
{
$exclude_from_query = array_map('trim', explode(',', $exclude_from_query));
}
- if($exclude_from_query)
+ if($exclude_from_query)
{
foreach ($exclude_from_query as $var)
{
unset($ret[$var]);
}
}
-
+
if(is_string($merge_with))
{
parse_str($merge_with, $merge_with);
@@ -416,7 +416,7 @@ class e_admin_request
$separator = '&';
//$ret = array_map('rawurlencode', $ret);
}
-
+
$ret = http_build_query($ret, 'numeric_', $separator);
if(!$encode)
{
@@ -424,10 +424,10 @@ class e_admin_request
}
return $ret;
}
-
+
/**
* Convert string to CamelCase
- *
+ *
* @param string $str
* @return string
*/
@@ -448,56 +448,56 @@ class e_admin_response
* @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
*
@@ -553,7 +553,7 @@ class e_admin_response
$this->_body[$namespace] = array_merge(array($content), $this->_body[$namespace]);
return $this;
}
-
+
/**
* Get body segments from a namespace
*
@@ -597,7 +597,7 @@ class e_admin_response
* @return e_admin_response
*/
function appendTitle($title, $namespace = 'default')
- {
+ {
if(empty($title))
{
return $this;
@@ -606,7 +606,7 @@ class e_admin_response
{
$this->_title[$namespace] = array();
}
- $this->_title[$namespace][] = $title;
+ $this->_title[$namespace][] = $title;
return $this;
}
@@ -699,7 +699,7 @@ class e_admin_response
}
return $this;
}
-
+
/**
* Add meta title segment
*
@@ -711,7 +711,7 @@ class e_admin_response
$this->addMetaData('e_PAGETITLE', $title);
return $this;
}
-
+
/**
* Add meta description segment
*
@@ -723,7 +723,7 @@ class e_admin_response
$this->addMetaData('META_DESCRIPTION', $description);
return $this;
}
-
+
/**
* Add meta keywords segment
*
@@ -746,12 +746,12 @@ class e_admin_response
//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));
@@ -762,7 +762,7 @@ class e_admin_response
}
return $this;
}
-
+
/**
* Add content segment to the header namespace
*
@@ -774,7 +774,7 @@ class e_admin_response
$this->appendBody($content, 'header_content');
return $this;
}
-
+
/**
* Get page header namespace content segments
*
@@ -786,7 +786,7 @@ class e_admin_response
{
return $this->getBody('header_content', $reset, $glue);
}
-
+
/**
* Switch to iframe mod
* FIXME - implement e_IFRAME to frontend - header_default.php
@@ -796,9 +796,9 @@ class e_admin_response
function setIframeMod()
{
global $HEADER, $FOOTER, $CUSTOMHEADER, $CUSTOMFOOTER;
- $HEADER = $FOOTER = '';
+ $HEADER = $FOOTER = '';
$CUSTOMHEADER = $CUSTOMFOOTER = array();
-
+
// New
if(!defined('e_IFRAME'))
{
@@ -820,63 +820,63 @@ class e_admin_response
{
parse_str($options, $options);
}
-
+
// Merge with all available default options
$options = array_merge(array(
- 'messages' => true,
- 'render' => true,
- 'meta' => false,
- 'return' => false,
+ 'messages' => true,
+ 'render' => true,
+ 'meta' => false,
+ 'return' => false,
'raw' => false,
'ajax' => false
), $options);
-
+
$content = $this->getBody($name, true);
- $title = $this->getTitle($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
*
@@ -898,42 +898,42 @@ 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
+ * 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;
-
+
/**
* @var string
*/
protected $defaultMode = '';
-
+
/**
* @var string
*/
protected $defaultAction = '';
-
+
/**
- * Optional - map 'mode/action' pair to 'modeAlias/actionAlias'
+ * Optional - map 'mode/action' pair to 'modeAlias/actionAlias'
* @var string
*/
protected $adminMenuAliases = array();
-
+
/**
* Optional (set by child class).
* Required for admin menu render
@@ -942,21 +942,21 @@ class e_admin_dispatcher
* @var array
*/
protected $adminMenu = array();
-
+
/**
* Optional (set by child class).
* @var string
*/
protected $menuTitle = 'Menu';
-
+
/**
* @var string
*/
protected $pluginTitle = '';
-
+
/**
- * Constructor
- *
+ * Constructor
+ *
* @param string|array|e_admin_request $request [optional]
* @param e_admin_response $response
*/
@@ -966,31 +966,31 @@ class e_admin_dispatcher
{
$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);
-
+
if($auto_observe)
{
$this->runObservers(true);
}
-
+
}
-
+
/**
* User defined constructor - called before _initController() method
* @return e_admin_dispatcher
@@ -998,7 +998,7 @@ class e_admin_dispatcher
public function init()
{
}
-
+
/**
* Retrieve missing default action/mode
* @return e_admin_dispatcher
@@ -1017,13 +1017,13 @@ class e_admin_dispatcher
$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
@@ -1032,7 +1032,7 @@ class e_admin_dispatcher
{
return $this->_request;
}
-
+
/**
* Set request object
* @param e_admin_request $request
@@ -1043,7 +1043,7 @@ class e_admin_dispatcher
$this->_request = $request;
return $this;
}
-
+
/**
* Get response object
* @return e_admin_response
@@ -1052,7 +1052,7 @@ class e_admin_dispatcher
{
return $this->_response;
}
-
+
/**
* Set response object
* @param e_admin_response $response
@@ -1063,38 +1063,38 @@ class e_admin_dispatcher
$this->_response = $response;
return $this;
}
-
+
/**
* Dispatch & render all
- *
- * @param boolean $return if true, array(title, body, render_mod) will be returned
+ *
+ * @param boolean $return if true, array(title, body, render_mod) will be returned
* @return string|array current admin page body
*/
public function run($return = false)
{
return $this->runObserver()->renderPage($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())
@@ -1104,7 +1104,7 @@ class e_admin_dispatcher
* - 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
*/
@@ -1119,20 +1119,20 @@ class e_admin_dispatcher
{
case 'render_return':
$options = array(
- 'messages' => true,
- 'render' => true,
- 'meta' => true,
- 'return' => true,
+ 'messages' => true,
+ 'render' => true,
+ 'meta' => true,
+ 'return' => true,
'raw' => false
);
break;
case 'raw':
$options = array(
- 'messages' => false,
- 'render' => false,
- 'meta' => false,
- 'return' => true,
+ 'messages' => false,
+ 'render' => false,
+ 'meta' => false,
+ 'return' => true,
'raw' => true
);
break;
@@ -1142,43 +1142,43 @@ class e_admin_dispatcher
case 'ajax_xml';
case 'ajax_json';
$options = array(
- 'messages' => false,
- 'render' => false,
- 'meta' => false,
- 'return' => false,
+ '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,
+ '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
@@ -1191,10 +1191,10 @@ class e_admin_dispatcher
}
return $this->_current_controller;
}
-
+
/**
* Try to init Controller from request using current controller map
- *
+ *
* @return e_admin_dispatcher
*/
protected function _initController()
@@ -1205,7 +1205,7 @@ class e_admin_dispatcher
{
$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));
@@ -1214,22 +1214,22 @@ class e_admin_dispatcher
{
$this->_current_controller = new $class_name($request, $response);
//give access to current request object, user defined init
- $this->_current_controller->setRequest($this->getRequest())->init();
+ $this->_current_controller->setRequest($this->getRequest())->init();
}
else
{
- //TODO - get default controller (core or user defined), set Action for
+ //TODO - get default controller (core or user defined), set Action for
//'Controller not found' page, add message(?), break
- // get default controller
+ // get default controller
$this->_current_controller = $this->getDefaultController();
// add messages
e107::getMessage()->add('Can\'t find class '.($class_name ? $class_name : 'n/a'), E_MESSAGE_ERROR)
->add('Requested: '.e_SELF.'?'.$request->buildQueryString(), E_MESSAGE_DEBUG);
- //
+ //
$request->setMode($this->getDefaultControllerName())->setAction('e404');
- $this->_current_controller->setRequest($request)->init();
+ $this->_current_controller->setRequest($request)->init();
}
-
+
if(vartrue($this->modes[$request->getModeName()]['ui']))
{
$class_name = $this->modes[$request->getModeName()]['ui'];
@@ -1244,12 +1244,12 @@ class e_admin_dispatcher
}
}
$this->_current_controller->setParam('modes', $this->modes);
-
+
}
-
+
return $this;
}
-
+
/**
* Default controller object - needed if controller not found
* @return e_admin_controller
@@ -1259,7 +1259,7 @@ class e_admin_dispatcher
$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
@@ -1268,7 +1268,7 @@ class e_admin_dispatcher
{
return 'e_admin_controller';
}
-
+
/**
* Generic Admin Menu Generator
* @return string
@@ -1277,11 +1277,11 @@ class e_admin_dispatcher
{
$tp = e107::getParser();
$var = array();
-
+
foreach($this->adminMenu as $key => $val)
{
$tmp = explode('/', trim($key, '/'), 2);
-
+
foreach ($val as $k=>$v)
{
switch($k)
@@ -1289,12 +1289,12 @@ class e_admin_dispatcher
case 'caption':
$k2 = 'text';
break;
-
+
case 'url':
$k2 = 'link';
$v = $tp->replaceConstants($v, 'abs').'?mode='.$tmp[0].'&action='.$tmp[1];
break;
-
+
default:
$k2 = $k;
break;
@@ -1306,12 +1306,12 @@ class e_admin_dispatcher
{
$var[$key]['link'] = e_SELF.'?mode='.$tmp[0].'&action='.$tmp[1]; // FIXME - URL based on $modes, remove url key
}
-
+
/*$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']; */
}
-
+
$request = $this->getRequest();
$selected = $request->getMode().'/'.$request->getAction();
$selected = vartrue($this->adminMenuAliases[$selected], $selected);
@@ -1325,24 +1325,24 @@ 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';
-
+
/**
- * Constructor
+ * Constructor
* @param e_admin_request $request [optional]
*/
public function __construct($request, $response, $params = array())
@@ -1352,7 +1352,7 @@ class e_admin_controller
->setResponse($response)
->setParams($params);
}
-
+
/**
* User defined init
* Called before dispatch routine
@@ -1360,7 +1360,7 @@ class e_admin_controller
public function init()
{
}
-
+
/**
* Get controller parameter
* Currently used core parameters:
@@ -1368,8 +1368,8 @@ class e_admin_controller
* - 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 string $key [optional] if null - get whole array
* @param mixed $default [optional]
* @return mixed
*/
@@ -1381,7 +1381,7 @@ class e_admin_controller
}
return (isset($this->_params[$key]) ? $this->_params[$key] : $default);
}
-
+
/**
* Set parameter
* @param string $key
@@ -1398,7 +1398,7 @@ class e_admin_controller
$this->_params[$key] = $value;
return $this;
}
-
+
/**
* Merge passed parameter array with current parameters
* @param array $params
@@ -1409,7 +1409,7 @@ class e_admin_controller
$this->_params = array_merge($this->_params, $params);
return $this;
}
-
+
/**
* Reset parameter array
* @param array $params
@@ -1420,16 +1420,16 @@ class e_admin_controller
$this->_params = $params;
return $this;
}
-
+
/**
* Get current request object
- * @return e_admin_request
+ * @return e_admin_request
*/
public function getRequest()
{
return $this->_request;
}
-
+
/**
* Set current request object
* @param e_admin_request $request
@@ -1443,13 +1443,13 @@ class e_admin_controller
/**
* Get current response object
- * @return e_admin_response
+ * @return e_admin_response
*/
public function getResponse()
{
return $this->_response;
}
-
+
/**
* Set current response object
* @param e_admin_response $response
@@ -1460,9 +1460,9 @@ class e_admin_controller
$this->_response = $response;
return $this;
}
-
+
/**
- * Request proxy method
+ * Request proxy method
* @param string $key [optional]
* @param mixed $default [optional]
* @return mixed
@@ -1471,9 +1471,9 @@ class e_admin_controller
{
return $this->getRequest()->getQuery($key, $default);
}
-
+
/**
- * Request proxy method
+ * Request proxy method
* @param string|array $key
* @param mixed $value [optional]
* @return e_admin_controller
@@ -1483,9 +1483,9 @@ class e_admin_controller
$this->getRequest()->setQuery($key, $value);
return $this;
}
-
+
/**
- * Request proxy method
+ * Request proxy method
* @param string $key [optional]
* @param mixed $default [optional]
* @return mixed
@@ -1494,9 +1494,9 @@ class e_admin_controller
{
return $this->getRequest()->getPosted($key, $default);
}
-
+
/**
- * Request proxy method
+ * Request proxy method
* @param string $key
* @param mixed $value [optional]
* @return e_admin_controller
@@ -1506,7 +1506,7 @@ class e_admin_controller
$this->getRequest()->setPosted($key, $value);
return $this;
}
-
+
/**
* Add page title, response proxy method
*
@@ -1520,7 +1520,7 @@ class e_admin_controller
if($meta) $this->addMetaTitle($title);
return $this;
}
-
+
/**
* Add page meta title, response proxy method.
* Should be called before header.php
@@ -1533,11 +1533,11 @@ class e_admin_controller
$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
*/
@@ -1546,7 +1546,7 @@ class e_admin_controller
$this->getResponse()->addHeaderContent($content);
return $this;
}
-
+
/**
* Get header content, response proxy method
*
@@ -1556,7 +1556,7 @@ class e_admin_controller
{
return $this->getResponse()->getHeaderContent();
}
-
+
/**
* Get current mode, response proxy method
* @return string
@@ -1565,7 +1565,7 @@ class e_admin_controller
{
return $this->getRequest()->getMode();
}
-
+
/**
* Get current actin, response proxy method
* @return string
@@ -1574,7 +1574,7 @@ class e_admin_controller
{
return $this->getRequest()->getAction();
}
-
+
/**
* Get current ID, response proxy method
* @return string
@@ -1583,7 +1583,7 @@ class e_admin_controller
{
return $this->getRequest()->getId();
}
-
+
/**
* Get response owned JS Helper instance, response proxy method
*
@@ -1593,16 +1593,16 @@ class e_admin_controller
{
return $this->getResponse()->getJsHelper();
}
-
+
protected function _preDispatch($action = '')
{
- if(!$action) $action = $this->getRequest()->getActionName();
- $method = $this->toMethodName($action, 'page');
+ 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))
@@ -1611,10 +1611,10 @@ class e_admin_controller
e107::getMessage()->add('Action '.$method.' not found!', E_MESSAGE_ERROR);
}
}
-
+
/**
* Dispatch observer, check for triggers
- *
+ *
* @param string $action [optional]
* @return e_admin_controller
*/
@@ -1626,13 +1626,13 @@ class e_admin_controller
$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))
@@ -1648,7 +1648,7 @@ class e_admin_controller
{
if(strpos($key, 'etrigger_') === 0)
{
- $actionTriggerName = $this->toMethodName($action.$request->camelize(substr($key, 9)), 'trigger', false);
+ $actionTriggerName = $this->toMethodName($action.$request->camelize(substr($key, 9)), 'trigger', false);
if(method_exists($this, $actionTriggerName))
{
$this->$actionTriggerName($value);
@@ -1661,10 +1661,10 @@ class e_admin_controller
}
}
}
-
+
return $this;
}
-
+
/**
* Dispatch header, not allowed in Ajax mode
* @param string $action [optional]
@@ -1677,35 +1677,35 @@ class e_admin_controller
{
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);
+ $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
*/
@@ -1718,15 +1718,15 @@ class e_admin_controller
$this->setRequest($request);
}
$response = $this->getResponse();
- $this->_preDispatch($action);
-
+ $this->_preDispatch($action);
+
if(null === $action)
{
$action = $request->getActionName();
}
-
+
// check for observer
- $actionName = $this->toMethodName($action, 'page');
+ $actionName = $this->toMethodName($action, 'page');
$ret = '';
if(!method_exists($this, $actionName)) // pre dispatch already switched to default action/not found page if needed
{
@@ -1735,23 +1735,23 @@ class e_admin_controller
}
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)
+ 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)
{
@@ -1762,33 +1762,33 @@ class e_admin_controller
{
$response->appendBody($ret);
}
-
+
return $response;
}
-
+
public function E404Observer()
{
$this->getResponse()->setTitle('Page Not Found');
}
-
+
public function E404Page()
{
return '
Requested page was not found!
'; // TODO - lan
}
-
-
+
+
public function E404AjaxPage()
{
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 $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
@@ -1801,21 +1801,21 @@ class e_admin_controller
if($mode) $request->setMode($mode);
if($action) $request->setAction($action);
if(!$path) $path = e_SELF;
-
+
$url = $path.'?'.$request->buildQueryString($merge_query, false, $exclude_query);
// Transfer all messages to session
- e107::getMessage()->moveToSession();
+ 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
+ * 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]
@@ -1825,11 +1825,11 @@ class e_admin_controller
{
$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]
@@ -1848,11 +1848,11 @@ class e_admin_controller
}
$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 $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
@@ -1862,14 +1862,14 @@ class e_admin_controller
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
* @return boolean
*/
public function hasTrigger()
{
- $posted = array_keys($this->getPosted());
+ $posted = array_keys($this->getPosted());
foreach ($posted as $key)
{
if(strpos($key, 'etrigger_') === 0)
@@ -1879,7 +1879,7 @@ class e_admin_controller
}
return false;
}
-
+
/**
* Get default action
* @return string action
@@ -1888,9 +1888,9 @@ class e_admin_controller
{
return $this->_default_action;
}
-
+
/**
- * Set default action
+ * Set default action
* @param string $action_name
* @return e_admin_controller
*/
@@ -1899,7 +1899,7 @@ class e_admin_controller
$this->_default_action = $action_name;
return $this;
}
-
+
/**
* @return boolean
*/
@@ -1907,7 +1907,7 @@ class e_admin_controller
{
return $this->getParam('enable_triggers');
}
-
+
/**
* @param boolean $flag
* @return e_admin_controller
@@ -1926,75 +1926,93 @@ 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
+ * @var array
*/
protected $tableJoin = array();
-
+
/**
* Main model table alias
* @var string
*/
protected $tableAlias;
-
+
/**
* @var string plugin name
*/
protected $pluginName;
-
-
+
+ /**
+ * @var string
+ */
+ protected $defaultOrderField = null;
+
+ /**
+ * @var string
+ */
+ protected $defaultOrder = 'asc';
+
+ /**
+ * @var string SQL order, false to disable order, null is default order
+ */
+ protected $listOrder = null;
+
+ /**
+ * @var boolean
+ */
protected $batchDelete = true;
-
+
/**
* Could be LAN constant (mulit-language support)
+ *
* @var string plugin name
*/
protected $pluginTitle;
-
+
/**
* Default (db) limit value
* @var integer
*/
protected $perPage = 20;
-
+
/**
* @var e_admin_model
*/
protected $_model = null;
-
+
/**
* @var e_admin_tree_model
*/
protected $_tree_model = null;
-
+
/**
* @var e_admin_tree_model
*/
protected $_ui = null;
-
+
/**
* @var e_plugin_pref|e_core_pref
*/
protected $_pref = null;
-
+
public function getBatchDelete()
{
return $this->batchDelete;
}
-
+
/**
* @return string
*/
@@ -2002,7 +2020,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this->pluginName;
}
-
+
/**
* @return string
*/
@@ -2010,7 +2028,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return deftrue($this->pluginTitle, $this->pluginTitle);
}
-
+
/**
* Get all field data
* @return array
@@ -2019,9 +2037,9 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this->fields;
}
-
+
/**
- *
+ *
* @param string $field
* @param string $key attribute name
* @param mixed $default default value if not set, default is null
@@ -2039,9 +2057,9 @@ class e_admin_controller_ui extends e_admin_controller
}
return $default;
}
-
+
/**
- *
+ *
* @param string $field
* @param string $key attribute name
* @param mixed $value default value if not set, default is null
@@ -2083,7 +2101,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->fields[$field][$key] = $value;
return $this;
}
-
+
/**
* Get fields stored as user preferences
* @return array
@@ -2092,26 +2110,37 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this->fieldpref;
}
-
+
/**
- * Get Config data array
+ * Get Config data array
* @return array
*/
public function getPrefs()
{
return $this->prefs;
}
-
+
public function getPerPage()
{
return $this->perPage;
}
-
+
public function getPrimaryName()
{
return $this->getModel()->getFieldIdName();
}
-
+
+
+ public function getDefaultOrderField()
+ {
+ return ($this->defaultOrder ? $this->defaultOrderField : $this->getPrimaryName());
+ }
+
+ public function getDefaultOrder()
+ {
+ return ($this->defaultOrder ? $this->defaultOrder : 'asc');
+ }
+
/**
* Get column preference array
* @return array
@@ -2121,7 +2150,7 @@ class e_admin_controller_ui extends e_admin_controller
global $user_pref;
return vartrue($user_pref['admin_cols_'.$this->getTableName()], array());
}
-
+
/**
* Set column preference array
* @return boolean success
@@ -2133,7 +2162,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->fieldpref = $new;
return save_prefs('user');
}
-
+
/**
* Get current model
*
@@ -2145,7 +2174,7 @@ class e_admin_controller_ui extends e_admin_controller
{
$this->_setModel();
}
-
+
return $this->_model;
}
@@ -2159,7 +2188,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->_model = $model;
return $this;
}
-
+
/**
* Get model validation array
* @return array
@@ -2168,7 +2197,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this->getModel()->getValidationRules();
}
-
+
/**
* Get model data field array
* @return array
@@ -2177,7 +2206,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this->getModel()->getDataFields();
}
-
+
/**
* Get model table or alias
* @param boolean $alias get table alias on true, default false
@@ -2189,17 +2218,17 @@ class e_admin_controller_ui extends e_admin_controller
if($alias) return ($this->tableAlias ? $this->tableAlias : '');
return ($prefix ? '#' : '').$this->getModel()->getModelTable();
}
-
+
public function getIfTableAlias($prefix = false, $quote = false)
{
$alias = $this->getTableName(true);
if($alias)
{
return $alias;
- }
+ }
return ( !$quote ? $this->getTableName(false, $prefix) : '`'.$this->getTableName(false, $prefix).'`' );
}
-
+
/**
* Get join table data
* @param string $table if null all data will be returned
@@ -2218,10 +2247,10 @@ class e_admin_controller_ui extends e_admin_controller
}
return (isset($this->tableJoin[$table][$att_name]) ? $this->tableJoin[$table][$att_name] : $default_att);
}
-
+
public function setJoinData($table, $data)
{
- if(null === $data)
+ if(null === $data)
{
unset($this->tableJoin[$table]);
return $this;
@@ -2229,7 +2258,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->tableJoin[$table] = (array) $data;
return $this;
}
-
+
/**
* User defined model setter
* @return e_admin_controller_ui
@@ -2238,7 +2267,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this;
}
-
+
/**
* Get current tree model
* @return e_admin_tree
@@ -2249,10 +2278,10 @@ class e_admin_controller_ui extends e_admin_controller
{
$this->_setTreeModel();
}
-
+
return $this->_tree_model;
}
-
+
/**
* Set controller tree model
* @param e_admin_tree $tree_model
@@ -2263,7 +2292,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->_tree_model = $tree_model;
return $this;
}
-
+
/**
* User defined tree model setter
* @return e_admin_controller_ui
@@ -2272,7 +2301,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this;
}
-
+
/**
* Get extended (UI) Form instance
*
@@ -2286,7 +2315,7 @@ class e_admin_controller_ui extends e_admin_controller
}
return $this->_ui;
}
-
+
/**
* Set controller UI form
* @param e_admin_form_ui $ui
@@ -2306,22 +2335,22 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this;
}
-
+
/**
- * Get Config object
+ * 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
+ * Set Config object
* @return e_admin_controller_ui
*/
public function setConfig($config)
@@ -2329,7 +2358,7 @@ class e_admin_controller_ui extends e_admin_controller
$this->_prefs = $config;
return $this;
}
-
+
/**
* User defined config setter
* @return e_admin_controller_ui
@@ -2338,7 +2367,7 @@ class e_admin_controller_ui extends e_admin_controller
{
return $this;
}
-
+
/**
* Manage column visibility
* @param string $batch_trigger
@@ -2356,13 +2385,13 @@ class e_admin_controller_ui extends e_admin_controller
continue;
}
}
-
+
if($cols)
{
$this->setUserPref($cols);
}
}
-
+
/**
* Handle posted batch options routine
* @param string $batch_trigger
@@ -2374,12 +2403,12 @@ class e_admin_controller_ui extends e_admin_controller
//$multi_name = vartrue($this->fields['checkboxes']['toggle'], 'multiselect');
$multi_name = $this->getFieldAttr('checkboxes', 'toggle', 'multiselect');
$selected = array_values($this->getPosted($multi_name, array()));
-
+
if(empty($selected)) return $this;
-
+
$selected = array_map('intval', $selected);
$trigger = $tp->toDB(explode('__', $batch_trigger));
-
+
$this->setTriggersEnabled(false); //disable further triggering
switch($trigger[0])
@@ -2392,8 +2421,8 @@ class e_admin_controller_ui extends e_admin_controller
$this->$method($selected);
}
break;
-
- case 'bool':
+
+ case 'bool':
$field = $trigger[1];
$value = $trigger[2] ? 1 : 0;
//something like handleListBoolBatch(); for custom handling of 'bool' batch
@@ -2404,7 +2433,7 @@ class e_admin_controller_ui extends e_admin_controller
break;
}
break;
-
+
case 'boolreverse':
$field = $trigger[1];
//something like handleListBoolreverseBatch(); for custom handling of 'boolreverse' batch
@@ -2415,7 +2444,7 @@ class e_admin_controller_ui extends e_admin_controller
break;
}
break;
-
+
default:
$field = $trigger[0];
$value = $trigger[1]; //TODO - errors
@@ -2435,7 +2464,7 @@ class e_admin_controller_ui extends e_admin_controller
break;
}
return $this;
- }
+ }
/**
* Handle requested filter dropdown value
@@ -2453,11 +2482,11 @@ class e_admin_controller_ui extends e_admin_controller
$res = array();
switch($filter[0])
{
- case 'bool':
+ case 'bool':
// direct query
$res = array($filter[1], $filter[2]);
break;
-
+
default:
//something like handleListUrlTypeFilter(); for custom handling of 'url_type' field name filters
$method = 'handle'.$this->getRequest()->getActionName().$this->getRequest()->camelize($filter[0]).'Filter';
@@ -2473,8 +2502,8 @@ class e_admin_controller_ui extends e_admin_controller
}
return $res;
}
-
-
+
+
/**
* Convert posted to model values after submit (based on field type)
* @param array $data
@@ -2495,10 +2524,10 @@ class e_admin_controller_ui extends e_admin_controller
case 'datestamp':
if(!is_numeric($value))
{
- $value = trim($value) ? e107::getDateConvert()->toTime($value, 'input') : 0;
+ $value = trim($value) ? e107::getDateConvert()->toTime($value, 'input') : 0;
}
break;
-
+
case 'ip': // TODO - ask Steve if this check is required
if(strpos($value, '.') !== FALSE)
{
@@ -2509,10 +2538,10 @@ class e_admin_controller_ui extends e_admin_controller
}
$data = $model->getData();
unset($model);
-
+
$this->toData($data);
}
-
+
/**
* User defined method for converting POSTED to MODEL data
* @param array $data posted data
@@ -2522,7 +2551,7 @@ class e_admin_controller_ui extends e_admin_controller
protected function toData(&$data, $type = '')
{
}
-
+
/**
* Take approproate action after successfull submit
*
@@ -2533,19 +2562,19 @@ class e_admin_controller_ui extends e_admin_controller
{
if($noredirect_for && $noredirect_for == $this->getPosted('__after_submit_action') && $noredirect_for == $this->getAction())
{
- return;
+ return;
}
-
+
$choice = $this->getPosted('__after_submit_action', 0);
switch ($choice) {
case 'create': // create
$this->redirectAction('create', 'id');
break;
-
+
case 'edit': // edit
$this->redirectAction('edit', '', 'id='.$id);
break;
-
+
case 'list': // list
$this->redirectAction('list', 'id');
break;
@@ -2557,17 +2586,17 @@ class e_admin_controller_ui extends e_admin_controller
}
return;
}
-
+
/**
* Build ajax auto-complete filter response
* @return string response markup
*/
protected function renderAjaxFilterResponse($listQry = '')
{
-
+
$srch = $this->getPosted('searchquery');
$this->getRequest()->setQuery('searchquery', $srch); //_modifyListQry() is requiring GET String
-
+
$ret = '';
$ret .= ''.$srch.' (typed) '; // fix Enter - search for typed word only
@@ -2576,7 +2605,7 @@ class e_admin_controller_ui extends e_admin_controller
{
// Build query
$qry = $this->_modifyListQry(false, true, 0, 20, $listQry);
-
+
// Make query
$sql = e107::getDb();
if($qry && $sql->db_Select_gen($qry))
@@ -2587,7 +2616,7 @@ class e_admin_controller_ui extends e_admin_controller
$tmp = array_values(preg_grep('#'.$srch.'#i', $res));
foreach ($tmp as $w)
{
- if($w == $srch)
+ if($w == $srch)
{
array_unshift($reswords, $w); //exact match
continue;
@@ -2597,22 +2626,22 @@ class e_admin_controller_ui extends e_admin_controller
}
}
}
-
- // Build response
+
+ // Build response
$reswords = array_unique($reswords);
if($reswords)
{
$ret .= ''.implode(" \n\t", $reswords).' ';
}
}
-
+
$ret .= ' clear filter '; // clear filter option
$ret .= ' ';
return $ret;
}
-
+
/**
- * Parses all available field data, adds internal attributes for handling join requests
+ * Parses all available field data, adds internal attributes for handling join requests
* @return e_admin_controller_ui
*/
protected function parseAliases()
@@ -2640,12 +2669,12 @@ class e_admin_controller_ui extends e_admin_controller
$this->setJoinData($table, $att);
}
}
-
+
// check for table & field aliases
$fields = array(); // preserve order
foreach ($this->fields as $field => $att)
{
- // tableAlias.fieldName.fieldAlias
+ // tableAlias.fieldName.fieldAlias
if(strpos($field, '.') !== false)
{
$tmp = explode('.', $field, 3);
@@ -2653,7 +2682,7 @@ class e_admin_controller_ui extends e_admin_controller
$att['alias'] = vartrue($tmp[2]);
$att['field'] = $tmp[1];
$field = $att['alias'] ? $att['alias'] : $tmp[1];
- $fields[$field] = $att;
+ $fields[$field] = $att;
unset($tmp);
}
else
@@ -2663,9 +2692,9 @@ class e_admin_controller_ui extends e_admin_controller
$att['field'] = $field;
$fields[$field] = $att;
}
-
+
if($fields[$field]['table'] == $this->getIfTableAlias(false))
- {
+ {
$fields[$field]['__tableField'] = $att['alias'] ? $att['alias'] : $this->getIfTableAlias(true, true).'.'.$att['field'];
$fields[$field]['__tableFrom'] = $this->getIfTableAlias(true, true).'.'.$att['field'].($att['alias'] ? ' AS '.$att['alias'] : '');
}
@@ -2674,9 +2703,9 @@ class e_admin_controller_ui extends e_admin_controller
$fields[$field]['__tableField'] = $this->getJoinData($fields[$field]['table'], '__tablePath').$field;
}
/*if($fields[$field]['table'])
- {
+ {
if($fields[$field]['table'] == $this->getIfTableAlias(false))
- {
+ {
$fields[$field]['__tableField'] = $att['alias'] ? $att['alias'] : $this->getIfTableAlias(true, true).'.'.$att['field'];
$fields[$field]['__tableFrom'] = $this->getIfTableAlias(true, true).'.'.$att['field'].($att['alias'] ? ' AS '.$att['alias'] : '');
}
@@ -2691,10 +2720,10 @@ class e_admin_controller_ui extends e_admin_controller
}*/
}
$this->fields = $fields;
-
+
return $this;
}
-
+
// TODO - abstract, array return type, move to parent?
protected function _modifyListQry($raw = false, $isfilter = false, $forceFrom = false, $forceTo = false, $listQry = '')
{
@@ -2707,7 +2736,7 @@ class e_admin_controller_ui extends e_admin_controller
$tableSFieldsArr = array(); // FROM for main table
$tableSJoinArr = array(); // FROM for join tables
$filter = array();
-
+
$searchQuery = $tp->toDB($request->getQuery('searchquery', ''));
$searchFilter = $this->_parseFilterRequest($request->getQuery('filter_options', ''));
list($filterField, $filterValue) = $searchFilter;
@@ -2726,25 +2755,25 @@ class e_admin_controller_ui extends e_admin_controller
{
continue;
}
-
+
// select FROM... for main table
if($var['alias'] && vartrue($var['__tableFrom']))
{
$tableSFieldsArr[] = $var['__tableFrom'];
}
-
- // filter for WHERE and FROM clauses
+
+ // filter for WHERE and FROM clauses
$searchable_types = array('text', 'textarea', 'bbarea', 'user'); //method?
if(trim($searchQuery) !== '' && in_array($var['type'], $searchable_types))
{
- $filter[] = $var['__tableField']." REGEXP ('".$searchQuery."')";
+ $filter[] = $var['__tableField']." REGEXP ('".$searchQuery."')";
if($isfilter)
{
$filterFrom[] = $var['__tableField'];
}
}
}
-
+
if($isfilter)
{
if(!$filterFrom) return false;
@@ -2754,11 +2783,11 @@ class e_admin_controller_ui extends e_admin_controller
{
$tableSFields = $tableSFieldsArr ? implode(', ', $tableSFieldsArr) : $tablePath.'*';
}
-
+
$jwhere = array();
$joins = array();
//file_put_contents('e:/www/log', $tableSFields."\n\n", FILE_APPEND);
- if($this->getJoinData())
+ if($this->getJoinData())
{
$qry = "SELECT SQL_CALC_FOUND_ROWS ".$tableSFields;
foreach ($this->getJoinData() as $jtable => $tparams)
@@ -2781,21 +2810,21 @@ class e_admin_controller_ui extends e_admin_controller
}*/
}
}
-
+
// Prepare Joins
$joins[] = "
".vartrue($tparams['joinType'], 'LEFT JOIN')." {$tparams['__tableFrom']} ON ".(vartrue($tparams['leftTable']) ? $tparams['leftTable'].'.' : $tablePath)."`".vartrue($tparams['leftField'])."` = {$tparams['__tablePath']}`".vartrue($tparams['rightField'])."`".(vartrue($tparams['whereJoin']) ? ' '.$tparams['whereJoin'] : '');
-
+
// Prepare Where
if(vartrue($tparams['where']))
{
$jwhere[] = $tparams['where'];
}
}
-
+
//From
$qry .= ', '.implode(', ', $tableSJoinArr)." FROM ".$tableFrom;
-
+
// Joins
if(count($joins) > 0)
{
@@ -2819,7 +2848,7 @@ class e_admin_controller_ui extends e_admin_controller
$rawData['limitTo'] = false === $forceTo ? intval($this->getPerPage()) : intval($forceTo);
return $rawData;
}
-
+
// join where
if(count($jwhere) > 0)
{
@@ -2830,34 +2859,41 @@ class e_admin_controller_ui extends e_admin_controller
{
$searchQry[] = " ( ".implode(" OR ",$filter)." ) ";
}
-
+
// where query
if(count($searchQry) > 0)
{
$qry .= " WHERE ".implode(" AND ", $searchQry);
}
-
- $orderField = $request->getQuery('field', $this->getPrimaryName());
- if(isset($this->fields[$orderField]) && strpos($this->listQry,'ORDER BY')==FALSE) //override ORDER using listQry (admin->sitelinks)
+
+ if(null !== $this->listOrder && $this->listOrder)
{
- // no need of sanitize - it's found in field array
- $qry .= ' ORDER BY '.$this->fields[$orderField]['__tableField'].' '.($request->getQuery('asc') == 'desc' ? 'DESC' : 'ASC');
+ $qry .= ' ORDER BY '.$this->listOrder;
+ }
+ elseif(false !== $this->listOrder)
+ {
+ $orderField = $request->getQuery('field', $this->getDefaultOrderField());
+ $orderDef = (null === $request->getQuery('asc', null) ? $this->getDefaultOrder() : $request->getQuery('asc'));
+ if(isset($this->fields[$orderField]) && strpos($this->listQry,'ORDER BY')==FALSE) //override ORDER using listQry (admin->sitelinks)
+ {
+ // no need of sanitize - it's found in field array
+ $qry .= ' ORDER BY '.$this->fields[$orderField]['__tableField'].' '.(strtolower($orderDef) == 'desc' ? 'DESC' : 'ASC');
+ }
}
-
if($this->getPerPage() || false !== $forceTo)
{
$from = false === $forceFrom ? intval($request->getQuery('from', 0)) : intval($forceFrom);
if(false === $forceTo) $forceTo = $this->getPerPage();
$qry .= ' LIMIT '.$from.', '.intval($forceTo);
}
-
+
return $qry;
}
-
+
/**
* Manage submit item
* Note: $callbackBefore will break submission if returns false
- *
+ *
* @param string $callbackBefore existing method from $this scope to be called before submit
* @param string $callbackAfter existing method from $this scope to be called after successfull submit
* @param string $noredirectAction passed to doAfterSubmit()
@@ -2867,10 +2903,10 @@ class e_admin_controller_ui extends e_admin_controller
{
$model = $this->getModel();
$old_data = $model->getData();
-
+
$_posted = $this->getPosted();
$this->convertToData($_posted);
-
+
if($callbackBefore && method_exists($this, $callbackBefore))
{
$data = $this->$callbackBefore($_posted, $old_data, $model->getId());
@@ -2893,19 +2929,19 @@ class e_admin_controller_ui extends e_admin_controller
$_posted = array_merge($_posted, $data);
}
}
-
-
+
+
// Scenario I - use request owned POST data - toForm already executed
$model->setPostedData($_posted, null, false, false)
->save(true);
// Scenario II - inner model sanitize
//$this->getModel()->setPosted($this->convertToData($_POST, null, false, true);
-
+
// Take action based on use choice after success
if(!$this->getModel()->hasError())
{
// callback (if any)
- if($callbackAfter && method_exists($this, $callbackAfter))
+ if($callbackAfter && method_exists($this, $callbackAfter))
{
$this->$callbackAfter($model->getData(), $old_data, $model->getId());
}
@@ -2922,7 +2958,7 @@ class e_admin_controller_ui extends e_admin_controller
}
return false;
}
-
+
// Copy model messages to the default message stack
$model->setMessages();
return false;
@@ -2935,39 +2971,39 @@ class e_admin_ui extends e_admin_controller_ui
protected $fieldTypes = array();
protected $dataFields = array();
protected $validationRules = array();
-
+
protected $table;
protected $pid;
protected $listQry;
protected $editQry;
/**
- * Constructor
+ * Constructor
* @param e_admin_request $request
* @param e_admin_response $response
* @param array $params [optional]
*/
public function __construct($request, $response, $params = array())
{
- $this->setDefaultAction($request->getDefaultAction());
+ $this->setDefaultAction($request->getDefaultAction());
$params['enable_triggers'] = true; // override
-
+
parent::__construct($request, $response, $params);
if(!$this->pluginName)
{
$this->pluginName = 'core';
}
-
+
$ufieldpref = $this->getUserPref();
if($ufieldpref)
{
$this->fieldpref = $ufieldpref;
}
-
- $this->addTitle($this->pluginTitle, true)->parseAliases();
+
+ $this->addTitle($this->pluginTitle, true)->parseAliases();
}
-
+
/**
* Catch fieldpref submit
* @param string $batch_trigger
@@ -2978,7 +3014,7 @@ class e_admin_ui extends e_admin_controller_ui
$this->setTriggersEnabled(false); //disable further triggering
parent::manageColumns();
}
-
+
/**
* Catch batch submit
* @param string $batch_trigger
@@ -2986,11 +3022,11 @@ class e_admin_ui extends e_admin_controller_ui
*/
public function ListBatchTrigger($batch_trigger)
{
- $this->setPosted('etrigger_batch', null);
+ $this->setPosted('etrigger_batch', null);
// proceed ONLY if there is no other trigger
if($batch_trigger && !$this->hasTrigger()) $this->_handleListBatch($batch_trigger);
}
-
+
/**
* Batch delete trigger
* @param array $selected
@@ -3002,7 +3038,7 @@ class e_admin_ui extends e_admin_controller_ui
{
e107::getMessage()->add('Batch delete not allowed!', E_MESSAGE_WARNING);
return;
- }
+ }
// delete one by one - more control, less performance
// TODO - pass afterDelete() callback to tree delete method?
$set_messages = true;
@@ -3027,7 +3063,7 @@ class e_admin_ui extends e_admin_controller_ui
//$this->getTreeModel()->delete($selected);
if($set_messages) $this->getTreeModel()->setMessages();
}
-
+
/**
* Batch boolean trigger
* @param array $selected
@@ -3042,7 +3078,7 @@ class e_admin_ui extends e_admin_controller_ui
}
$this->getTreeModel()->setMessages();
}
-
+
/**
* Batch boolean reverse trigger
* @param array $selected
@@ -3060,7 +3096,7 @@ class e_admin_ui extends e_admin_controller_ui
}
$this->getTreeModel()->setMessages();
}
-
+
/**
* Batch default (field) trigger
* @param array $selected
@@ -3070,13 +3106,13 @@ class e_admin_ui extends e_admin_controller_ui
{
$cnt = $this->getTreeModel()->update($field, "'".$value."'", $selected, $value, false);
if($cnt)
- {
- $vttl = $this->getUI()->renderValue($field, $value, $this->getFieldAttr($field));
+ {
+ $vttl = $this->getUI()->renderValue($field, $value, $this->getFieldAttr($field));
$this->getTreeModel()->addMessageSuccess(''.$vttl.' set for '.$cnt.' record(s).');
}
$this->getTreeModel()->setMessages();
}
-
+
/**
* Catch delete submit
* @param string $batch_trigger
@@ -3085,7 +3121,7 @@ class e_admin_ui extends e_admin_controller_ui
public function ListDeleteTrigger($posted)
{
$this->setTriggersEnabled(false);
- $id = intval(array_shift($posted));
+ $id = intval(array_shift($posted));
$data = array();
$model = $this->getTreeModel()->getNode($id);
if($model)
@@ -3105,7 +3141,7 @@ class e_admin_ui extends e_admin_controller_ui
}
}
}
-
+
/**
* User defined pre-delete logic
*/
@@ -3113,7 +3149,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return true;
}
-
+
/**
* User defined after-delete logic
*/
@@ -3121,7 +3157,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return true;
}
-
+
/**
* List action header
* @return void
@@ -3141,7 +3177,7 @@ class e_admin_ui extends e_admin_controller_ui
$this->getTreeModel()->setParam('db_query', $this->_modifyListQry(false, false, false, false, $this->listQry))->load();
$this->addTitle('List'); // FIXME - get captions from dispatch list
}
-
+
/**
* Filter response ajax page
* @return string
@@ -3150,7 +3186,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->renderAjaxFilterResponse($this->listQry); //listQry will be used only if available
}
-
+
/**
* Generic List action page
* @return string
@@ -3159,7 +3195,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->getUI()->getList();
}
-
+
/**
* List action observer
* @return void
@@ -3168,7 +3204,7 @@ class e_admin_ui extends e_admin_controller_ui
{
$this->getTreeModel()->setParam('db_query', $this->_modifyListQry(false, false, 0, false, $this->listQry))->load();
}
-
+
/**
* Generic List action page (Ajax)
* @return string
@@ -3177,7 +3213,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->getUI()->getList(true);
}
-
+
/**
* Generic Edit observer
*/
@@ -3186,7 +3222,7 @@ class e_admin_ui extends e_admin_controller_ui
$this->getModel()->load($this->getId());
$this->addTitle(LAN_UPDATE, true);
}
-
+
/**
* Generic Create submit trigger
*/
@@ -3194,7 +3230,7 @@ class e_admin_ui extends e_admin_controller_ui
{
$this->redirectAction('list', 'id');
}
-
+
/**
* Generic Edit submit trigger
*/
@@ -3202,7 +3238,7 @@ class e_admin_ui extends e_admin_controller_ui
{
$this->_manageSubmit('beforeUpdate', 'afterUpdate', 'onUpdateError', 'edit');
}
-
+
/**
* Edit - send JS to page Header
* @return none
@@ -3211,7 +3247,7 @@ class e_admin_ui extends e_admin_controller_ui
{
e107::getJs()->requireCoreLib('core/admin.js');
}
-
+
/**
* Generic Edit page
* @return string
@@ -3220,7 +3256,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->CreatePage();
}
-
+
/**
* Generic Create observer
* @return string
@@ -3230,7 +3266,7 @@ class e_admin_ui extends e_admin_controller_ui
$this->setTriggersEnabled(true);
$this->addTitle(LAN_CREATE, true);
}
-
+
/**
* Generic Create submit trigger
*/
@@ -3238,7 +3274,7 @@ class e_admin_ui extends e_admin_controller_ui
{
$this->redirectAction('list', 'id');
}
-
+
/**
* Generic Create submit trigger
*/
@@ -3246,49 +3282,49 @@ class e_admin_ui extends e_admin_controller_ui
{
$this->_manageSubmit('beforeCreate', 'afterCreate', 'onCreateError');
}
-
+
/**
* User defined pre-create logic, return false to prevent DB query execution
*/
public function beforeCreate($new_data, $old_data)
{
}
-
+
/**
* User defined after-create logic
*/
public function afterCreate($new_data, $old_data, $id)
{
}
-
+
/**
* User defined error handling, return true to suppress model messages
*/
public function onCreateError($new_data, $old_data)
{
}
-
+
/**
* User defined pre-update logic, return false to prevent DB query execution
*/
public function beforeUpdate($new_data, $old_data, $id)
{
}
-
+
/**
* User defined after-update logic
*/
public function afterUpdate($new_data, $old_data, $id)
{
}
-
+
/**
* User defined error handling, return true to suppress model messages
*/
public function onUpdateError($new_data, $old_data, $id)
{
}
-
+
/**
* Create - send JS to page Header
* @return none
@@ -3298,16 +3334,16 @@ class e_admin_ui extends e_admin_controller_ui
// TODO - invoke it on className (not all textarea elements)
e107::getJs()->requireCoreLib('core/admin.js');
}
-
+
/**
- *
+ *
* @return TBD
*/
public function CreatePage()
{
return $this->getUI()->getCreate();
}
-
+
public function PrefsSaveTrigger()
{
$this->getConfig()
@@ -3316,14 +3352,14 @@ class e_admin_ui extends e_admin_controller_ui
->save(true);
$this->getConfig()->setMessages();
-
+
}
-
+
public function PrefsPage()
{
return $this->getUI()->getSettings();
}
-
+
/**
* Parent overload
* @return e_admin_ui
@@ -3334,13 +3370,13 @@ class e_admin_ui extends e_admin_controller_ui
if(strpos($this->table, '.') !== false)
{
$tmp = explode('.', $this->table, 2);
- $this->table = $tmp[1];
+ $this->table = $tmp[1];
$this->tableAlias = $tmp[0];
unset($tmp);
}
-
+
parent::parseAliases();
-
+
return $this;
}
@@ -3348,18 +3384,18 @@ class e_admin_ui extends e_admin_controller_ui
{
if(!varset($this->pid) && vartrue($this->fields))
{
- e107::getMessage()->add("There is no pid set.", E_MESSAGE_WARNING);
+ e107::getMessage()->add("There is no pid set.", E_MESSAGE_WARNING);
}
-
+
return $this->pid;
}
-
+
public function getTableName($alias = false, $prefix = false)
{
if($alias) return ($this->tableAlias ? $this->tableAlias : '');
return ($prefix ? '#' : '').$this->table;
}
-
+
/**
* Validation rules retrieved from controller object
* @return array
@@ -3368,7 +3404,7 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->validationRules;
}
-
+
/**
* Data Field array retrieved from controller object
* @return array
@@ -3377,51 +3413,51 @@ class e_admin_ui extends e_admin_controller_ui
{
return $this->dataFields;
}
-
-
+
+
/**
* Set read and write parms with drop-down-list array data (ie. type='dropdown')
* @param str $field
* @param array $array [optional]
* @return none
*/
- public function setDropDown($field,$array) //TODO Have Miro check this.
+ public function setDropDown($field,$array) //TODO Have Miro check this.
{
$this->fields[$field]['readParms'] = $array;
$this->fields[$field]['writeParms'] = $array;
}
-
+
/**
- * Set Config object
+ * Set Config object
* @return e_admin_ui
*/
protected function _setConfig()
- {
+ {
$this->_pref = $this->pluginName == 'core' ? e107::getConfig() : e107::getPlugConfig($this->pluginName);
-
+
$dataFields = $validateRules = array();
foreach ($this->prefs as $key => $att)
{
// create dataFields array
$dataFields[$key] = vartrue($att['data'], 'string');
-
+
// 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']));
}
- /* Not implemented in e_model yet
+ /* 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
*
@@ -3461,7 +3497,7 @@ class e_admin_ui extends e_admin_controller_ui
}*/
}
}
-
+
// default model
$this->_model = new e_admin_model();
$this->_model->setModelTable($this->table)
@@ -3470,11 +3506,11 @@ class e_admin_ui extends e_admin_controller_ui
->setFieldTypes($this->fieldTypes)
->setDataFields($this->dataFields)
->setMessageStackName('admin_ui_model_'.$this->table)
- ->setParam('db_query', $this->editQry);
-
+ ->setParam('db_query', $this->editQry);
+
return $this;
}
-
+
/**
* Set current tree
* @return e_admin_ui
@@ -3487,7 +3523,7 @@ class e_admin_ui extends e_admin_controller_ui
->setFieldIdName($this->pid)
->setMessageStackName('admin_ui_tree_'.$this->table)
->setParams(array('model_class' => 'e_admin_model', 'model_message_stack' => 'admin_ui_model_'.$this->table ,'db_query' => $this->listQry));
-
+
return $this;
}
@@ -3513,13 +3549,13 @@ class e_admin_ui extends e_admin_controller_ui
}
class e_admin_form_ui extends e_form
-{
+{
/**
* @var e_admin_ui
*/
protected $_controller = null;
-
-
+
+
/**
* Constructor
* @param e_admin_ui $controller
@@ -3529,13 +3565,13 @@ class e_admin_form_ui extends e_form
{
$this->_controller = $controller;
parent::__construct($tabindex);
-
- // protect current methods from conflict.
+
+ // protect current methods from conflict.
$this->preventConflict();
// user constructor
$this->init();
}
-
+
protected function preventConflict()
{
$err = "";
@@ -3543,38 +3579,38 @@ class e_admin_form_ui extends e_form
foreach($fields as $val)
{
- if(method_exists('e_form',$val)) // check even if type is not method. - just in case of an upgrade later by 3rd-party.
+ if(method_exists('e_form',$val)) // check even if type is not method. - just in case of an upgrade later by 3rd-party.
{
$err .= "ERROR: The field name (".$val.") is not allowed. ";
$err .= "Please rename the key (".$val.") to something else in your fields array and database table. ";
- }
+ }
}
-
+
if($err)
{
echo $err;
exit;
- }
+ }
}
-
-
-
+
+
+
/**
* User defined init
*/
public function init()
{
}
-
+
/**
* TODO - lans
- * Generic DB Record Creation Form.
+ * Generic DB Record Creation Form.
* @return string
*/
function getCreate()
{
$controller = $this->getController();
- $request = $controller->getRequest();
+ $request = $controller->getRequest();
if($controller->getId())
{
$legend = LAN_UPDATE.' record #'.$controller->getId();
@@ -3595,24 +3631,24 @@ class e_admin_form_ui extends e_form
'fields' => $controller->getFields(), //see e_admin_ui::$fields
'after_submit_options' => true, // or true for default redirect options
'after_submit_default' => $request->getPosted('__after_submit_action', $controller->getDefaultAction()), // or true for default redirect options
- 'triggers' => 'auto', // standard create/update-cancel triggers
+ 'triggers' => 'auto', // standard create/update-cancel triggers
)
- )
+ )
);
$models[] = $controller->getModel();
-
+
return $this->renderCreateForm($forms, $models, e_AJAX_REQUEST);
}
-
+
/**
* TODO - lans
- * Generic Settings Form.
+ * Generic Settings Form.
* @return string
*/
function getSettings()
{
$controller = $this->getController();
- $request = $controller->getRequest();
+ $request = $controller->getRequest();
$legend = 'Settings';
$forms = $models = array();
$forms[] = array(
@@ -3626,20 +3662,20 @@ class e_admin_form_ui extends e_form
'fields' => $controller->getPrefs(), //see e_admin_ui::$prefs
'after_submit_options' => false,
'after_submit_default' => false, // or true for default redirect options
- 'triggers' => array('save' => array(LAN_SAVE, 'update')), // standard create/update-cancel triggers
+ 'triggers' => array('save' => array(LAN_SAVE, 'update')), // standard create/update-cancel triggers
)
- )
+ )
);
$models[] = $controller->getConfig();
-
+
return $this->renderCreateForm($forms, $models, e_AJAX_REQUEST);
}
-
+
/**
* Create list view
* Search for the following GET variables:
* - from: integer, current page
- *
+ *
* @return string
*/
public function getList($ajax = false)
@@ -3650,7 +3686,7 @@ class e_admin_form_ui extends e_form
$request = $controller->getRequest();
$id = $this->getElementId();
$tree = $options = array();
- $tree[$id] = $controller->getTreeModel();
+ $tree[$id] = $controller->getTreeModel();
$options[$id] = array(
'id' => $this->getElementId(), // unique string used for building element ids, REQUIRED
'pid' => $controller->getPrimaryName(), // primary field name, REQUIRED
@@ -3663,9 +3699,9 @@ class e_admin_form_ui extends e_form
'form_post' => '', // markup to be added after closing form element
'fields' => $controller->getFields(), // see e_admin_ui::$fields
'fieldpref' => $controller->getFieldPref(), // see e_admin_ui::$fieldpref
- 'table_pre' => '', // markup to be added before opening table element
+ 'table_pre' => '', // markup to be added before opening table element
'table_post' => !$tree[$id]->isEmpty() ? $this->renderBatch($controller->getBatchDelete()) : '',
- 'fieldset_pre' => '', // markup to be added before opening fieldset element
+ 'fieldset_pre' => '', // markup to be added before opening fieldset element
'fieldset_post' => '', // markup to be added after closing fieldset element
'perPage' => $controller->getPerPage(), // if 0 - no next/prev navigation
'from' => $controller->getQuery('from', 0), // current page, default 0
@@ -3674,7 +3710,7 @@ class e_admin_form_ui extends e_form
);
return $this->renderListForm($options, $tree, $ajax);
}
-
+
function renderFilter($current_query = array(), $location = '', $input_options = array())
{
if(!$input_options) $input_options = array('size' => 20);
@@ -3682,7 +3718,7 @@ class e_admin_form_ui extends e_form
{
$location = 'main/list'; //default location
}
- $l = e107::getParser()->post_toForm(explode('/', $location));
+ $l = e107::getParser()->post_toForm(explode('/', $location));
if(!is_array($input_options))
{
parse_str($input_options, $input_options);
@@ -3700,7 +3736,7 @@ class e_admin_form_ui extends e_form
".$this->option('Clear Filter', '___reset___')."
".$this->renderBatchFilter('filter', $current_query[1])."
".$this->select_close()."
-
+
".$this->hidden('mode', $l[0])."
".$this->hidden('action', $l[1])."
".$this->admin_button('etrigger_filter', 'etrigger_filter', 'filter e-hide-if-js', LAN_FILTER, array('id' => false))."
@@ -3710,24 +3746,24 @@ class e_admin_form_ui extends e_form
- ";
+ ";
e107::getJs()->requireCoreLib('scriptaculous/controls.js', 2);
//TODO - external JS
e107::getJs()->footerInline("
//autocomplete fields
- \$\$('input[name=searchquery]').each(function(el, cnt) {
+ \$\$('input[name=searchquery]').each(function(el, cnt) {
if(!cnt) el.activate();
else return;
new Ajax.Autocompleter(el, el.next('div.e-autocomplete'), '".e_SELF."?mode=".$l[0]."&action=filter', {
paramName: 'searchquery',
minChars: 2,
frequency: 0.5,
- afterUpdateElement: function(txt, li) {
+ afterUpdateElement: function(txt, li) {
var cfrm = el.up('form'), cont = cfrm.next('.e-container');
if(!cont) {
return;
- }
+ }
cfrm.submitForm(cont);
},
indicator: el.next('span.indicator'),
@@ -3735,7 +3771,7 @@ class e_admin_form_ui extends e_form
});
var sel = el.next('select.filter');
if(sel) {
- sel.observe('change', function (e) {
+ sel.observe('change', function (e) {
var cfrm = e.element().up('form'), cont = cfrm.next('.e-container');
if(cfrm && cont && e.element().value != '___reset___') {
e.stop();
@@ -3747,19 +3783,19 @@ class e_admin_form_ui extends e_form
}
});
");
-
- return $text;
+
+ return $text;
}
-
+
// FIXME - use e_form::batchoptions(), nice way of buildig batch dropdown - news administration show_batch_options()
function renderBatch($allow_delete = false)
- {
+ {
$fields = $this->getController()->getFields();
if(!varset($fields['checkboxes']))
{
return '';
- }
-
+ }
+
$text = "
@@ -3773,26 +3809,26 @@ class e_admin_form_ui extends e_form
";
return $text;
}
-
+
// TODO - do more
- function renderBatchFilter($type='batch', $selected = '') // Common function used for both batches and filters.
+ function renderBatchFilter($type='batch', $selected = '') // Common function used for both batches and filters.
{
$optdiz = array('batch' => 'Modify ', 'filter'=> 'Filter by ');
$table = $this->getController()->getTableName();
$text = '';
$textsingle = '';
-
+
foreach($this->getController()->getFields() as $key=>$val)
{
if(!varset($val[$type]))
{
continue;
}
-
+
$option = array();
$parms = vartrue($val['writeParms'], array());
if(is_string($parms)) parse_str($parms, $parms);
-
+
switch($val['type'])
{
case 'boolean': //TODO modify description based on $val['parm]
@@ -3804,7 +3840,7 @@ class e_admin_form_ui extends e_form
}
break;
- case 'templates':
+ case 'templates':
case 'layouts':
$parms['raw'] = true;
$val['writeParms'] = $parms;
@@ -3814,23 +3850,23 @@ class e_admin_form_ui extends e_form
$option[$key.'__'.$k] = $name;
}
break;
-
- case 'dropdown': // use the array $parm;
+
+ case 'dropdown': // use the array $parm;
unset($parms['__options']); //remove element options if any
foreach($parms as $k => $name)
{
$option[$key.'__'.$k] = $name;
}
break;
-
- case 'datestamp': // use $parm to determine unix-style or YYYY-MM-DD
- //TODO last hour, today, yesterday, this-month, last-month etc.
+
+ case 'datestamp': // use $parm to determine unix-style or YYYY-MM-DD
+ //TODO last hour, today, yesterday, this-month, last-month etc.
/* foreach($val['parm'] as $k=>$name)
{
- $text .= $frm->option($name, $type.'__'.$key."__".$k);
+ $text .= $frm->option($name, $type.'__'.$key."__".$k);
}*/
break;
-
+
case 'userclass':
//case 'userclasses':
$classes = e107::getUserClass()->uc_required_class_list(vartrue($parms['classlist'], ''));
@@ -3838,12 +3874,12 @@ class e_admin_form_ui extends e_form
{
$option[$key.'__'.$k] = $name;
}
- break;
-
+ break;
+
case 'method':
$method = $key;
$list = call_user_func_array(array($this, $method), array('', $type, $parms));
-
+
if(is_array($list))
{
//check for single option
@@ -3865,33 +3901,33 @@ class e_admin_form_ui extends e_form
}
break;
}
-
+
if(count($option) > 0)
{
$text .= "\t".$this->optgroup_open($optdiz[$type].defset($val['title'], $val['title']), varset($disabled))."\n";
foreach($option as $okey=>$oval)
{
- $text .= $this->option($oval, $okey, $selected == $okey)."\n";
+ $text .= $this->option($oval, $okey, $selected == $okey)."\n";
}
- $text .= "\t".$this->optgroup_close()."\n";
+ $text .= "\t".$this->optgroup_close()."\n";
}
}
-
+
return $textsingle.$text;
-
+
}
-
+
public function getElementId()
{
$controller = $this->getController();
return str_replace('_', '-', ($controller->getPluginName() == 'core' ? 'core-'.$controller->getTableName() : 'plugin-'.$controller->getPluginName()));
}
-
+
/**
* @return e_admin_ui
*/
public function getController()
- {
+ {
return $this->_controller;
}
}
@@ -3905,8 +3941,8 @@ include_once(e107::coreTemplatePath('admin_icons'));
* 2. [DONE - at least for alpha release] remove duplicated code (e_form & e_admin_form_ui), refactoring
* 3. make JS Manager handle Styles (.css files and inline CSS)
* 4. [DONE] e_form is missing some methods used in e_admin_form_ui
- * 5. [DONE] date convert needs string-to-datestamp auto parsing, strptime() is the solution but needs support for
- * Windows and PHP < 5.1.0 - build custom strptime() function (php_compatibility_handler.php) on this -
+ * 5. [DONE] date convert needs string-to-datestamp auto parsing, strptime() is the solution but needs support for
+ * Windows and PHP < 5.1.0 - build custom strptime() function (php_compatibility_handler.php) on this -
* http://sauron.lionel.free.fr/?page=php_lib_strptime (bad license so no copy/paste is allowed!)
* 6. [DONE - read/writeParms introduced ] $fields[parms] mess - fix it, separate list/edit mode parms somehow
* 7. clean up/document all object vars (e_admin_ui, e_admin_dispatcher)
@@ -3915,7 +3951,7 @@ include_once(e107::coreTemplatePath('admin_icons'));
* 10. draggable (or not?) ordering (list view)
* 11. [DONE] realtime search filter (typing text) - like downloads currently
* 12. [DONE] autosubmit when 'filter' dropdown is changed (quick fix?)
- * 13. tablerender captions
+ * 13. tablerender captions
* 14. [DONE] textareas auto-height
* 15. [DONE] multi JOIN table support (optional), aliases
* 16. tabs support (create/edit view)
diff --git a/e107_handlers/form_handler.php b/e107_handlers/form_handler.php
index b09ab6035..f9be90f6d 100644
--- a/e107_handlers/form_handler.php
+++ b/e107_handlers/form_handler.php
@@ -9,9 +9,9 @@
* Form Handler
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/form_handler.php,v $
- * $Revision: 1.102 $
- * $Date: 2009-12-23 10:04:38 $
- * $Author: e107coders $
+ * $Revision: 1.103 $
+ * $Date: 2009-12-23 15:12:13 $
+ * $Author: secretr $
*
*/
@@ -73,9 +73,9 @@ class e_form
function __construct($enable_tabindex = false)
{
-
+
$this->_tabindex_enabled = $enable_tabindex;
- $this->_uc = e107::getUserClass();
+ $this->_uc = e107::getUserClass();
}
function text($name, $value, $maxlength = 200, $options = array())
@@ -84,9 +84,9 @@ class e_form
//never allow id in format name-value for text fields
return "
get_attributes($options, $name)." />";
}
-
+
function iconpreview($id, $default, $width='', $height='') // FIXME
- {
+ {
$parms = $name."|".$width."|".$height."|".$id;
$sc_parameters .= 'mode=preview&default='.$default.'&id='.$id;
return e107::getParser()->parseTemplate("{ICONPICKER=".$sc_parameters."}");
@@ -116,27 +116,27 @@ class e_form
return $ret;
}
-
+
// FIXME - better GUI, {IMAGESELECTOR} rewrite, flexibility, thumbnails, tooltip image preivew, etc.
- //FIXME - use the media-manager as an image selector.
+ //FIXME - use the media-manager as an image selector.
function imagepicker($name, $default, $label = '', $sc_parameters = '')
{
- // Temporary Fix for using Media-Manager data
-
+ // Temporary Fix for using Media-Manager data
+
$sql = e107::getDb();
+
if($sql->db_Select('core_media','*',"media_userclass IN (".USERCLASS_LIST.") ORDER BY media_name"))
{
while($row = $sql->db_Fetch())
{
$opts[$row['media_category']][$row['media_url']] = $row['media_name']. " (".$row['media_dimensions'].") ";
}
-
- asort($opts);
- return $this->selectbox($name,$opts,$default, array('default'=>' '));
+
+ asort($opts);
+ return $this->selectbox($name,$opts,$default, array('default'=>' '));
}
-
- // ----------------
-
+ // ----------------
+
if(is_string($sc_parameters)) parse_str($sc_parameters, $sc_parameters);
if(!$label) $label = LAN_SELECT;
$parms = "name={$name}";
@@ -153,12 +153,12 @@ class e_form
//$parms .= "&click_target=data";
//$parms .= "&click_prefix=[img][[e_IMAGE]]newspost_images/";
//$parms .= "&click_postfix=[/img]";
- $tp = e107::getParser();
+ $tp = e107::getParser();
$ret = "
".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=select}")."
";
$ret .= "
".$tp->parseTemplate("{IMAGESELECTOR={$parms}&scaction=preview}")."
";
return $ret;
}
-
+
/**
* Date field with popup calendar
* $options allowed keys:
@@ -166,7 +166,7 @@ class e_form
* - others: ???, default is false
* - weeks: show weeks, default is false
* - size: input field size attribute, default 25
- *
+ *
* @param string $name the name of the field
* @param integer $datestamp UNIX timestamp - default value of the field
* @param array $options calendar options
@@ -195,21 +195,21 @@ class e_form
return $cal->make_input_field($cal_options, $cal_attrib);
}
-
+
/**
* User auto-complete search
- *
+ *
* @param string $name_fld field name for user name
* @param string $id_fld field name for user id
- * @param string $default_name default user name value
+ * @param string $default_name default user name value
* @param integer $default_id default user id
- * @param array|string $options [optional] 'readonly' (make field read only), 'name' (db field name, default user_name)
+ * @param array|string $options [optional] 'readonly' (make field read only), 'name' (db field name, default user_name)
* @return string HTML text for display
*/
function userpicker($name_fld, $id_fld, $default_name, $default_id, $options = array())
{
if(!is_array($options)) parse_str($options, $options);
-
+
//'.$this->text($id_fld, $default_id, 10, array('id' => false, 'readonly'=>true, 'class'=>'tbox number')).'
$ret = '
@@ -218,30 +218,30 @@ class e_form
-
-
+
+
';
-
+
e107::getJs()->requireCoreLib('scriptaculous/controls.js', 2);
//TODO - external JS
e107::getJs()->footerInline("
//autocomplete fields
\$\$('input[name={$name_fld}]').each(function(el) {
- if(el.readOnly) {
- el.observe('click', function(ev) { ev.stop(); var el1 = ev.findElement('input'); el1.blur(); } );
- el.next('span.indicator').hide();
+ if(el.readOnly) {
+ el.observe('click', function(ev) { ev.stop(); var el1 = ev.findElement('input'); el1.blur(); } );
+ el.next('span.indicator').hide();
el.next('div.e-autocomplete').hide();
- return;
+ return;
}
new Ajax.Autocompleter(el, el.next('div.e-autocomplete'), '".e_FILE_ABS."e_ajax.php', {
paramName: '{$name_fld}',
minChars: 2,
frequency: 0.5,
- afterUpdateElement: function(txt, li) {
+ afterUpdateElement: function(txt, li) {
if(!\$(li)) return;
- if(\$(li).id) {
- el.next('input[name={$id_fld}]').value = parseInt(\$(li).id);
+ if(\$(li).id) {
+ el.next('input[name={$id_fld}]').value = parseInt(\$(li).id);
} else {
el.next('input[name={$id_fld}]').value = 0
}
@@ -252,7 +252,7 @@ class e_form
});
");
return $ret;
-
+
}
function file($name, $options = array())
@@ -261,7 +261,7 @@ class e_form
//never allow id in format name-value for text fields
return " get_attributes($options, $name)." />";
}
-
+
function upload($name, $options = array())
{
return 'Ready to use upload form fields, optional - file list view';
@@ -283,7 +283,7 @@ class e_form
{
$options['class'] = (isset($options['class']) && $options['class']) ? $options['class'].' e-autoheight' : 'tbox textarea e-autoheight';
}
-
+
$options = $this->format_options('textarea', $name, $options);
//never allow id in format name-value for text fields
return "".(false !== $counter ? $this->hidden('__'.$name.'autoheight_opt', $counter) : '');
@@ -294,22 +294,22 @@ class e_form
//size - large|medium|small
//width should be explicit set by current admin theme
switch($size)
- {
+ {
case 'medium':
$rows = '10';
break;
-
+
case 'small':
$rows = '7';
break;
-
+
case 'large':
default:
$rows = '15';
$size = 'large';
break;
}
-
+
// auto-height support
$options = array('class' => 'tbox bbarea '.($size ? ' '.$size : '').' e-wysiwyg');
$bbbar = '';
@@ -339,7 +339,7 @@ class e_form
return " get_attributes($options, $name, $value)." />";
}
-
+
function checkbox_label($label_title, $name, $value, $checked = false, $options = array())
{
return $this->checkbox($name, $value, $checked, $options).$this->label($label_title, $name, $value);
@@ -372,7 +372,7 @@ class e_form
return '';
$tmp = explode(',', $current_value); //TODO add support for when $current_value is an array.
-
+
$class = $style = '';
if($nest_level == 0)
{
@@ -386,11 +386,11 @@ class e_form
return "".$this->checkbox($treename.'[]', $classnum, in_array($classnum, $tmp), $field_options).$this->label($this->_uc->uc_get_classname($classnum).$descr, $treename.'[]', $classnum)."
\n";
}
-
-
+
+
function uc_label($classnum)
{
- return $this->_uc->uc_get_classname($classnum);
+ return $this->_uc->uc_get_classname($classnum);
}
function radio($name, $value, $checked = false, $options = array())
@@ -437,7 +437,7 @@ class e_form
}
/**
- *
+ *
* @param object $name
* @param object $option_array
* @param object $selected [optional]
@@ -446,17 +446,19 @@ class e_form
*/
function selectbox($name, $option_array, $selected = false, $options = array())
{
+ if(!is_array($options)) parse_str($options, $options);
+
if($option_array == 'yesno')
{
$option_array = array(1=>LAN_YES,0=>LAN_NO);
- }
+ }
$text = $this->select_open($name, $options)."\n";
-
+
if(vartrue($options['default']))
{
- $text .= $this->option($options['default'],'');
+ $text .= $this->option($options['default'],'');
}
-
+
$text .= $this->option_multi($option_array, $selected)."\n".$this->select_close();
return $text;
}
@@ -516,14 +518,14 @@ class e_form
$text .= $this->optgroup_open($value);
foreach($label as $val => $lab)
{
- $text .= $this->option($lab, $val, ($selected == $val), $options)."\n";
+ $text .= $this->option($lab, $val, ($selected == $val), $options)."\n";
}
- $text .= $this->optgroup_close();
+ $text .= $this->optgroup_close();
}
else
{
- $text .= $this->option($label, $value, $selected == $value, $options)."\n";
- }
+ $text .= $this->option($label, $value, $selected == $value, $options)."\n";
+ }
}
return $text;
@@ -571,7 +573,7 @@ class e_form
}
/**
- *
+ *
* @param string $name
* @param string $value
* @param string $action [optional] default is submit
@@ -633,7 +635,7 @@ class e_form
case 'title':
if($optval) $ret .= " title='{$optval}'";
break;
-
+
case 'label':
if($optval) $ret .= " label='{$optval}'";
break;
@@ -690,7 +692,7 @@ class e_form
$value = trim(preg_replace('#[^a-z0-9\-]/i#','-', $value), '-');
$value = trim(str_replace("/","-",$value), '-');
if(!$id_value && is_numeric($value)) $id_value = $value;
-
+
// clean - do it better, this could lead to dups
$id_value = trim($id_value, '-');
@@ -843,7 +845,7 @@ class e_form
- ";
+ ";
$text .= "";
return $text;
@@ -877,20 +879,20 @@ class e_form
$text = "";
// Recommended pattern: mode=list&field=[FIELD]&asc=[ASC]&from=[FROM]
-
+
if(strpos($querypattern,'&')!==FALSE)
{
- // we can assume it's always $_GET since that's what it will generate
+ // we can assume it's always $_GET since that's what it will generate
// more flexible (e.g. pass default values for order/field when they can't be found in e_QUERY) & secure
- $tmp = str_replace('&', '&', $requeststr ? $requeststr : e_QUERY);
+ $tmp = str_replace('&', '&', $requeststr ? $requeststr : e_QUERY);
parse_str($tmp, $tmp);
-
+
$etmp = array();
parse_str(str_replace('&', '&', $querypattern), $etmp);
}
else // Legacy Queries. eg. main.[FIELD].[ASC].[FROM]
{
- $tmp = explode(".", ($requeststr ? $requeststr : e_QUERY));
+ $tmp = explode(".", ($requeststr ? $requeststr : e_QUERY));
$etmp = explode(".", $querypattern);
}
@@ -930,7 +932,7 @@ class e_form
$repl = array($key,$ascdesc,$from);
$val['url'] = e_SELF."?".str_replace($srch,$repl,$querypattern);
}
-
+
$text .= (vartrue($val['url'])) ? "" : ""; // Really this column-sorting link should be auto-generated, or be autocreated via unobtrusive js.
$text .= vartrue($val['title'], '');
$text .= ($val['url']) ? " " : "";
@@ -951,9 +953,9 @@ class e_form
";
}
-
+
/**
- * Render Table cells from field listing.
+ * Render Table cells from field listing.
* @param array $fieldarray - eg. $this->fields
* @param array $currentlist - eg $this->fieldpref
* @param array $fieldvalues - eg. $row
@@ -964,14 +966,14 @@ class e_form
{
$cnt = 0;
$ret = '';
-
+
/*$fieldarray = $obj->fields;
$currentlist = $obj->fieldpref;
$pid = $obj->pid;*/
-
+
$trclass = vartrue($fieldvalues['__trclass']) ? ' class="'.$trclass.'"' : '';
unset($fieldvalues['__trclass']);
-
+
foreach ($fieldarray as $field => $data)
{
// shouldn't happen...
@@ -980,7 +982,7 @@ class e_form
$fieldvalues[$data['alias']] = $fieldvalues[$data['field']];
$field = $data['alias'];
}
-
+
//Not found
if((!varset($data['forced']) && !in_array($field, $currentlist)) || varset($data['nolist']))
{
@@ -993,10 +995,10 @@ class e_form
Not Found!
";
-
+
continue;
}
-
+
$tdclass = vartrue($data['class']);
if($field == 'checkboxes') $tdclass = $tdclass ? $tdclass.' autocheck e-pointer' : 'autocheck e-pointer';
// there is no other way for now - prepare user data
@@ -1023,10 +1025,10 @@ class e_form
'.$value.'
';
-
+
$cnt++;
}
-
+
if($cnt)
{
return '
@@ -1035,10 +1037,10 @@ class e_form
';
}
-
+
return '';
}
-
+
/**
* Render Field Value
* @param string $field field name
@@ -1062,9 +1064,9 @@ class e_form
{
parse_str(str_replace('&', '&', e_QUERY), $query); //FIXME - FIX THIS
// keep other vars in tact
- $query['action'] = 'edit';
- $query['id'] = $id;
-
+ $query['action'] = 'edit';
+ $query['id'] = $id;
+
//$edit_query = array('mode' => varset($query['mode']), 'action' => varset($query['action']), 'id' => $id);
$query = http_build_query($query);
@@ -1074,14 +1076,14 @@ class e_form
//$attributes['type'] = 'text';
return $value;
break;
-
+
case 'checkboxes':
$value = $this->checkbox(vartrue($attributes['toggle'], 'multiselect').'['.$id.']', $id);
//$attributes['type'] = 'text';
return $value;
break;
}
-
+
switch($attributes['type'])
{
case 'number':
@@ -1093,14 +1095,14 @@ class e_form
$value = vartrue($parms['pre']).$value.vartrue($parms['post']);
// else same
break;
-
+
case 'ip':
$e107 = e107::getInstance();
$value = $e107->ipDecode($value);
// else same
break;
-
- case 'templates':
+
+ case 'templates':
case 'layouts':
$pre = vartrue($parms['pre']);
$post = vartrue($parms['post']);
@@ -1117,16 +1119,16 @@ class e_form
$tmp = $this->renderElement($key, '', $attributes);
$value = $pre.vartrue($tmp[$value]).$post;
break;
-
+
case 'dropdown':
if(vartrue($parms) && is_array($parms))
{
$value = vartrue($parms['pre']).vartrue($parms[$value]).vartrue($parms['post']);
}
break;
-
+
case 'text':
-
+
if(vartrue($parms['truncate']))
{
$value = $tp->text_truncate($value, $parms['truncate'], '...');
@@ -1137,7 +1139,7 @@ class e_form
}
$value = vartrue($parms['pre']).$value.vartrue($parms['post']);
break;
-
+
case 'bbarea':
case 'textarea':
$expand = '...';
@@ -1150,7 +1152,7 @@ class e_form
$ttl = vartrue($parms['expand'], ' ...');
$expand = ' '.defset($ttl, $ttl)." ";
}
-
+
$oldval = $value;
if(vartrue($parms['truncate']))
{
@@ -1169,11 +1171,11 @@ class e_form
$value .= '';
}
break;
-
+
case 'icon':
$value = ' ';
break;
-
+
case 'image': //TODO - thumb, js tooltip...
if($value)
{
@@ -1183,15 +1185,15 @@ class e_form
$value = ''.defset($ttl, $ttl).' ';
}
break;
-
+
case 'datestamp':
$value = $value ? e107::getDateConvert()->convert_date($value, vartrue($parms['mask'], 'short')) : '';
break;
-
+
case 'userclass':
$value = $this->_uc->uc_get_classname($value);
break;
-
+
case 'userclasses':
$classes = explode(',', $value);
$value = array();
@@ -1201,7 +1203,7 @@ class e_form
}
$value = implode(vartrue($parms['separator']), $pieces);
break;
-
+
/*case 'user_name':
case 'user_loginname':
case 'user_login':
@@ -1215,7 +1217,7 @@ class e_form
{
$value = $value[$attributes['type']] ? $value[$attributes['type']] : $value['user_name'];
}
- else
+ else
{
$value = 'not found';
}
@@ -1246,11 +1248,12 @@ class e_form
$value = $ttl;
}
break;
-
+
+ case 'bool':
case 'boolean':
$value = $value ? ADMIN_TRUE_ICON : ADMIN_FALSE_ICON;
break;
-
+
case 'url':
if(!$value) break;
$ttl = $value;
@@ -1260,7 +1263,7 @@ class e_form
}
$value = "".$ttl." ";
break;
-
+
case 'email':
if(!$value) break;
$ttl = $value;
@@ -1270,26 +1273,26 @@ class e_form
}
$value = "".$ttl." ";
break;
-
- case 'method': // Custom Function
- $method = $field;
- $value = call_user_func_array(array($this, $method), array($value, 'read', $parms));
+
+ case 'method': // Custom Function
+ $method = $field;
+ $value = call_user_func_array(array($this, $method), array($value, 'read', $parms));
break;
-
+
case 'hidden':
return (vartrue($parms['show']) ? ($value ? $value : vartrue($parms['empty'])) : '');
break;
-
+
//TODO - order
-
+
default:
//unknown type
break;
}
-
+
return $value;
}
-
+
/**
* Auto-render Form Element
* @param string $key
@@ -1301,12 +1304,12 @@ class e_form
{
$parms = vartrue($attributes['writeParms'], array());
$tp = e107::getParser();
-
+
if(is_string($parms)) parse_str($parms, $parms);
-
+
if(vartrue($attributes['readonly'])) // quick fix (maybe 'noedit'=>'readonly'?)
{
- return $this->renderValue($key, $value, $attributes);
+ return $this->renderValue($key, $value, $attributes);
}
switch($attributes['type'])
@@ -1318,41 +1321,40 @@ class e_form
if(!vartrue($parms['class'])) $parms['class'] = 'tbox number';
return vartrue($parms['pre']).$this->text($key, $value, $maxlength, $parms).vartrue($parms['post']);
break;
-
+
case 'ip':
return $this->text($key, e107::getInstance()->ipDecode($value), 32, $parms);
break;
-
+
case 'url':
case 'email':
case 'text':
-
$maxlength = vartrue($parms['maxlength'], 255);
unset($parms['maxlength']);
return vartrue($parms['pre']).$this->text($key, $value, $maxlength, vartrue($parms['__options'])).vartrue($parms['post']);
break;
-
+
case 'textarea':
return $this->textarea($key, $value, vartrue($parms['rows'], 5), vartrue($parms['cols'], 40), vartrue($parms['__options']), varset($parms['counter'], false));
break;
-
+
case 'bbarea':
return $this->bbarea($key, $value, vartrue($parms['help']), vartrue($parms['helptag']), vartrue($parms['size'], 'medium'), varset($parms['counter'], false));
break;
-
+
case 'image': //TODO - thumb, image list shortcode, js tooltip...
$label = varset($parms['label'], 'LAN_EDIT');
unset($parms['label']);
return $this->imagepicker($key, $value, defset($label, $label), vartrue($parms['__options']));
break;
-
- case 'icon':
+
+ case 'icon':
$label = varset($parms['label'], 'LAN_EDIT');
$ajax = varset($parms['ajax'], true) ? true : false;
unset($parms['label'], $parms['ajax']);
return $this->iconpicker($key, $value, defset($label, $label), $parms, $ajax);
break;
-
+
case 'datestamp':
if(vartrue($parms['auto']))
{
@@ -1366,22 +1368,22 @@ class e_form
return $this->datepicker($key, $value, $parms);
break;
-
+
case 'layouts': //to do - exclude param (exact match)
$location = varset($parms['plugin']); // empty - core
$ilocation = vartrue($parms['id'], $location); // omit if same as plugin name
- $where = vartrue($parms['area'], 'front'); //default is 'front'
+ $where = vartrue($parms['area'], 'front'); //default is 'front'
$filter = varset($parms['filter']);
$merge = vartrue($parms['merge']) ? true : false;
$layouts = e107::getLayouts($location, $ilocation, $where, $filter, $merge, true);
if(varset($parms['default']) && !isset($layouts[0]['default']))
{
$layouts[0] = array('default' => $parms['default']) + $layouts[0];
- }
+ }
$info = array();
if($layouts[1])
{
- foreach ($layouts[1] as $k => $info_array)
+ foreach ($layouts[1] as $k => $info_array)
{
if(isset($info_array['description']))
$info[$k] = defset($info_array['description'], $info_array['description']);
@@ -1390,8 +1392,8 @@ class e_form
//$this->selectbox($key, $layouts, $value)
return (vartrue($parms['raw']) ? $layouts[0] : $this->radio_multi($key, $layouts[0], $value, true, $info));
- break;
-
+ break;
+
case 'templates': //to do - exclude param (exact match)
$templates = array();
if(varset($parms['default']))
@@ -1406,7 +1408,7 @@ class e_form
$k = str_replace('_template.php', '', $files['fname']);
$templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k))); //TODO add LANS?
}
-
+
// override
$where = vartrue($parms['area'], 'front');
$location = vartrue($parms['plugin']) ? $parms['plugin'].'/' : '';
@@ -1417,15 +1419,15 @@ class e_form
$templates[$k] = implode(' ', array_map('ucfirst', explode('_', $k))); //TODO add LANS?
}
return (vartrue($parms['raw']) ? $templates : $this->selectbox($key, $templates, $value));
- break;
-
+ break;
+
case 'dropdown':
$eloptions = vartrue($parms['__options'], array());
if(is_string($eloptions)) parse_str($eloptions);
unset($parms['__options']);
return $this->selectbox($key, $parms, $value, $eloptions);
- break;
-
+ break;
+
case 'userclass':
case 'userclasses':
$uc_options = vartrue($parms['classlist'], 'public,guest,nobody,member,classes,admin,main'); // defaults to 'public,guest,nobody,member,classes' (userclass handler)
@@ -1433,7 +1435,7 @@ class e_form
$method = $attributes['type'] == 'userclass' ? 'uc_select' : 'uc_checkbox';
return $this->$method($key, $value, $uc_options, vartrue($parms['__options'], array()));
break;
-
+
/*case 'user_name':
case 'user_loginname':
case 'user_login':
@@ -1444,7 +1446,7 @@ class e_form
// Just temporary solution, could be changed soon
if(!isset($parms['__options'])) $parms['__options'] = array();
if(!is_array($parms['__options'])) parse_str($parms['__options'], $parms['__options']);
-
+
if((empty($value) && vartrue($parms['currentInit'])) || vartrue($parms['current']))
{
$value = USERID;
@@ -1458,31 +1460,32 @@ class e_form
{
$value = get_user_data($value);
}
-
+
$colname = vartrue($parms['nameType'], 'user_name');
$parms['__options']['name'] = $colname;
-
+
if(!$value) $value = array();
$uname = varset($value[$colname]);
$value = varset($value['user_id'], 0);
return $this->userpicker(vartrue($parms['nameField'], $key.'_usersearch'), $key, $uname, $value, vartrue($parms['__options']));
break;
-
+
+ case 'bool':
case 'boolean':
$lenabled = vartrue($parms['enabled'], 'LAN_ENABLED');
$ldisabled = vartrue($parms['disabled'], 'LAN_DISABLED');
unset($parms['enabled'], $parms['disabled']);
return $this->radio_switch($key, $value, defset($lenabled, $lenabled), defset($ldisabled, $ldisabled));
break;
-
- case 'method': // Custom Function
+
+ case 'method': // Custom Function
return call_user_func_array(array($this, $key), array($value, 'write', $parms));
break;
-
+
case 'upload': //TODO - from method
return $tp->parseTemplate("{UPLOADFILE=".e_UPLOAD."}");
break;
-
+
case 'hidden':
$ret = (vartrue($parms['show']) ? ($value ? $value : vartrue($parms['empty'])) : '');
return $ret.$this->hidden($key, $value);
@@ -1493,7 +1496,7 @@ class e_form
break;
}
}
-
+
/**
* Generic List Form, used internal by admin UI
* Expected options array format:
@@ -1511,9 +1514,9 @@ class e_form
* 'form_post' => '', // markup to be added after closing form element
* 'fields' => array(...), // see e_admin_ui::$fields
* 'fieldpref' => array(...), // see e_admin_ui::$fieldpref
- * 'table_pre' => '', // markup to be added before opening table element
+ * 'table_pre' => '', // markup to be added before opening table element
* 'table_post' => '', // markup to be added after closing table element (e.g. Batch actions)
- * 'fieldset_pre' => '', // markup to be added before opening fieldset element
+ * 'fieldset_pre' => '', // markup to be added before opening fieldset element
* 'fieldset_post' => '', // markup to be added after closing fieldset element
* 'perPage' => 15, // if 0 - no next/prev navigation
* 'from' => 0, // current page, default 0
@@ -1531,13 +1534,13 @@ class e_form
public function renderListForm($form_options, $tree_models, $nocontainer = false)
{
$tp = e107::getParser();
-
+
foreach ($form_options as $fid => $options)
{
$tree_model = $tree_models[$fid];
$tree = $tree_model->getTree();
$total = $tree_model->getTotal();
-
+
$amount = $options['perPage'];
$from = vartrue($options['from'], 0);
$field = vartrue($options['field'], $options['pid']);
@@ -1548,7 +1551,7 @@ class e_form
$formurl = $url.($query ? '?'.$query : '');
$fields = $options['fields'];
$current_fields = varset($options['fieldpref']) ? $options['fieldpref'] : array_keys($options['fields']);
-
+
$text = "
- ";
+ ";
e107::getJs()->footerInline("Form.focusFirstElement('{$form['id']}-form');");
}
if(!$nocontainer)
@@ -1675,7 +1678,7 @@ class e_form
}
return $text;
}
-
+
function renderCreateFieldset($id, $fdata, $model, $nocontainer = false)
{
$text = vartrue($fdata['fieldset_pre'])."
@@ -1689,20 +1692,20 @@ class e_form
";
-
+
foreach($fdata['fields'] as $key => $att)
{
// convert aliases - not supported in edit mod
if($att['alias'] && !$model->hasData($key))
{
- $key = $att['field'];
+ $key = $att['field'];
}
-
+
$parms = vartrue($att['formparms'], array());
if(!is_array($parms)) parse_str($parms, $parms);
$label = vartrue($att['note']) ? ''.deftrue($att['note'], $att['note']).'
' : '';
$help = vartrue($att['help']) ? ''.deftrue($att['help'], $att['help']).'
' : '';
-
+
$valPath = trim(vartrue($att['dataPath'], $key), '/');
$keyName = $key;
if(strpos($valPath, '/')) //not TRUE, cause string doesn't start with /
@@ -1714,7 +1717,7 @@ class e_form
$keyName .= '['.$path.']';
}
}
-
+
// type null - system (special) fields
if($att['type'] !== null && !vartrue($att['noedit']) && $key != $model->getFieldIdName())
{
@@ -1731,12 +1734,12 @@ class e_form
";
}
//if($bckp) $model->remove($bckp);
-
+
}
$text .= "
-
+
".vartrue($fdata['table_post'])."
";
@@ -1747,7 +1750,7 @@ class e_form
{
$submitopt = $defsubmitopt;
}
-
+
if($submitopt)
{
$selected = isset($fdata['after_submit_default']) && array_key_exists($fdata['after_submit_default'], $submitopt) ? $fdata['after_submit_default'] : '';
@@ -1757,7 +1760,7 @@ class e_form
';
}
-
+
$triggers = vartrue($fdata['triggers'], 'auto');
if(is_string($triggers) && 'auto' === $triggers)
{
@@ -1772,7 +1775,7 @@ class e_form
}
$triggers['cancel'] = array(LAN_CANCEL, 'cancel');
}
-
+
foreach ($triggers as $trigger => $tdata)
{
$text .= $this->admin_button('etrigger_'.$trigger, $tdata[0], $tdata[1]);
@@ -1781,26 +1784,26 @@ class e_form
$text .= $this->hidden($trigger.'_value', $tdata[2]);
}
}
-
+
$text .= "
".vartrue($fdata['fieldset_post'])."
- ";
+ ";
return $text;
}
-
+
// The 2 functions below are for demonstration purposes only, and may be moved/modified before release.
function filterType($fieldarray)
{
return " frm-> filterType() is Deprecated ";
}
-
+
function filterValue($type = '', $fields = '')
{
return " frm-> filterValue() is Deprecated. ";
}
-
+
/**
* Generates a batch options select component
* This component is generally associated with a table of items where one or more rows in the table can be selected (using checkboxes).
@@ -1818,14 +1821,14 @@ class e_form
".$this->select_open('execute_batch', array('class' => 'tbox select batch e-autosubmit', 'id' => false))."
".$this->option('With selected...', '')."
";
-
-
- //used for getperms() check
+
+
+ //used for getperms() check
$permissions = vartrue($options['__permissions'], array());
//used for check_classs() check
$classes = vartrue($options['__check_class'], array());
unset($options['__permissions'], $options['__check_class']);
-
+
foreach ($options as $key => $val)
{
if(isset($permissions[$key]) && !getperms($permissions[$key]))
@@ -1835,35 +1838,35 @@ class e_form
$disabled = false;
if(isset($classes[$key]) && !is_array($classes[$key]) && !check_class($classes[$key]))
{
- $disabled = true;
+ $disabled = true;
}
if(!is_array($val))
{
if($disabled) $val = $val.' ('.LAN_NOPERMISSION.')';
- $text .= "\t".$this->option(' '.$val, $key, false, array('disabled' => $disabled))."\n";
+ $text .= "\t".$this->option(' '.$val, $key, false, array('disabled' => $disabled))."\n";
}
else
{
if($disabled) $val[0] = $val[0].' ('.LAN_NOPERMISSION.')';
-
+
$text .= "\t".$this->optgroup_open($val[0], $disabled)."\n";
foreach ($val[1] as $k => $v)
{
- $disabled = false;
+ $disabled = false;
if(isset($classes[$key][$k]) && !check_class($classes[$key][$k]))
{
- $disabled = true;
+ $disabled = true;
$v = $v.' ('.LAN_NOPERMISSION.')';
}
- $text .= "\t\t".$this->option($v, $key.'_selected_'.$k, false, array('disabled' => $disabled))."\n";
+ $text .= "\t\t".$this->option($v, $key.'_selected_'.$k, false, array('disabled' => $disabled))."\n";
}
$text .= $this->optgroup_close()."\n";
-
- }
+
+ }
}
- if ($ucOptions) // Userclass List.
+ if ($ucOptions) // Userclass List.
{
foreach ($ucOptions as $ucKey => $ucVal)
{
@@ -1875,14 +1878,14 @@ class e_form
$text .= $this->optgroup_close()."\n";
}
}
-
+
$text .= "
".$this->select_close()."
".$this->admin_button('trigger_execute_batch', 'trigger_execute_batch', 'submit multi e-hide-if-js', 'Go')."
";
-
+
return $text;
}
}
diff --git a/e107_handlers/model_class.php b/e107_handlers/model_class.php
index 982c2f148..f42a313d3 100644
--- a/e107_handlers/model_class.php
+++ b/e107_handlers/model_class.php
@@ -9,16 +9,16 @@
* e107 Base Model
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $
- * $Revision: 1.49 $
- * $Date: 2009-12-13 21:52:32 $
- * $Author: e107steved $
+ * $Revision: 1.50 $
+ * $Date: 2009-12-23 15:12:12 $
+ * $Author: secretr $
*/
if (!defined('e107_INIT')) { exit; }
/**
* Base e107 Model class
- *
+ *
* @package e107
* @category e107_handlers
* @version 1.0
@@ -33,34 +33,34 @@ class e_model
* @var array
*/
protected $_data = array();
-
+
/**
- * Data structure (types) array, required for {@link e_admin_model::sanitize()} method,
+ * Data structure (types) array, required for {@link e_admin_model::sanitize()} method,
* it also serves as a map (find data) for building DB queries,
* copy/sanitize posted data to object data, etc.
- *
+ *
* This can/should be overwritten by extending the class
*
* @var array
*/
protected $_data_fields = array();
-
+
/**
* Current model DB table, used in all db calls
- *
+ *
* This can/should be overwritten/set by extending the class
- *
+ *
* @var string
*/
protected $_db_table;
-
+
/**
* Runtime cache of parsed from {@link _getData()} keys
*
* @var array
*/
protected $_parsed_keys = array();
-
+
/**
* Avoid DB calls if data is not changed
*
@@ -68,7 +68,7 @@ class e_model
* @var boolean
*/
protected $data_has_changed = false;
-
+
/**
* Name of object id field
* Required for {@link getId()()} method
@@ -76,21 +76,21 @@ class e_model
* @var string
*/
protected $_field_id;
-
+
/**
* Namespace to be used for model related system messages in {@link eMessage} handler
- *
- * @var string
+ *
+ * @var string
*/
protected $_message_stack = 'default';
-
+
/**
* Model parameters passed mostly from external sources
- *
+ *
* @var array
*/
protected $_params = array();
-
+
/**
* Constructor - set data on initialization
*
@@ -100,12 +100,12 @@ class e_model
{
$this->setData($data);
}
-
+
/**
* Optional DB table - used for auto-load data from the DB
* @param string $table
* @return e_model
- */
+ */
public function getModelTable()
{
return $this->_db_table;
@@ -115,13 +115,13 @@ class e_model
* Set model DB table
* @param string $table
* @return e_model
- */
+ */
public function setModelTable($table)
{
$this->_db_table = $table;
return $this;
}
-
+
/**
* Get data fields array
* @return array
@@ -130,7 +130,7 @@ class e_model
{
return $this->_data_fields;
}
-
+
/**
* Set Predefined data fields in format key => type
* @return e_model
@@ -140,7 +140,7 @@ class e_model
$this->_data_fields = $data_fields;
return $this;
}
-
+
/**
* Set Predefined data field
* @return e_model
@@ -150,12 +150,12 @@ class e_model
$this->_data_fields[$field] = $type;
return $this;
}
-
+
/**
* Set name of object's field id
*
* @see getId()
- *
+ *
* @param string $name
* @return e_model
*/
@@ -169,7 +169,7 @@ class e_model
* Retrieve name of object's field id
*
* @see getId()
- *
+ *
* @param string $name
* @return string
*/
@@ -185,13 +185,13 @@ class e_model
*/
public function getId()
{
- if ($this->getFieldIdName())
+ if ($this->getFieldIdName())
{
return $this->get($this->getFieldIdName(), 0);
}
return $this->get('id', 0);
}
-
+
/**
* Set object primary id field value
*
@@ -199,13 +199,13 @@ class e_model
*/
public function setId($id)
{
- if ($this->getFieldIdName())
+ if ($this->getFieldIdName())
{
return $this->set($this->getFieldIdName(), intval($id));
}
return $this;
}
-
+
/**
* Retrieves data from the object ($_data) without
* key parsing (performance wise, prefered when possible)
@@ -219,7 +219,7 @@ class e_model
{
return $this->_getDataSimple((string) $key, $default);
}
-
+
/**
* Retrieves data from the object ($_data)
* If $key is empty, return all object data
@@ -234,12 +234,12 @@ class e_model
{
return $this->_getData($key, $default, $index);
}
-
+
/**
* Overwrite data in the object for a single field. Key is not parsed.
* Public proxy of {@link _setDataSimple()}
* Data isn't sanitized so use this method only when data comes from trustable sources (e.g. DB)
- *
+ *
*
* @see _setData()
* @param string $key
@@ -251,7 +251,7 @@ class e_model
{
return $this->_setDataSimple($key, $value, $strict);
}
-
+
/**
* Overwrite data in the object. Public proxy of {@link _setData()}
* Data isn't sanitized so use this method only when data comes from trustable sources (e.g. DB)
@@ -266,14 +266,14 @@ class e_model
{
return $this->_setData($key, $value, $strict);
}
-
+
/**
* Add data to the object.
* Retains existing data in the object.
* Public proxy of {@link _addData()}
- *
+ *
* If $override is false, data will be updated only (check against existing data)
- *
+ *
* @param string|array $key
* @param mixed $value
* @param boolean $override override existing data
@@ -283,7 +283,7 @@ class e_model
{
return $this->_addData($key, $value, $override);
}
-
+
/**
* Unset single field from the object.
* Public proxy of {@link _unsetDataSimple()}
@@ -295,13 +295,13 @@ class e_model
{
return $this->_unsetDataSimple($key);
}
-
+
/**
* Unset data from the object.
* $key can be a string only. Array will be ignored.
* '/' inside the key will be treated as array path
* if $key is null entire object will be reset
- *
+ *
* Public proxy of {@link _unsetData()}
*
* @param string|null $key
@@ -311,7 +311,7 @@ class e_model
{
return $this->_unsetData($key);
}
-
+
/**
* @param string $key
* @return boolean
@@ -320,7 +320,7 @@ class e_model
{
return $this->_hasData($key);
}
-
+
/**
* @param string $key
* @return boolean
@@ -329,7 +329,7 @@ class e_model
{
return $this->_hasData($key);
}
-
+
/**
* @param string $key
* @return boolean
@@ -338,7 +338,7 @@ class e_model
{
return (isset($this->_data[$key]));
}
-
+
/**
* @param string $key
* @return boolean
@@ -347,7 +347,7 @@ class e_model
{
return $this->_isData($key);
}
-
+
/**
* Retrieves data from the object
*
@@ -367,7 +367,7 @@ class e_model
protected function _getData($key = '', $default = null, $index = null, $data_src = '_data')
{
$key = trim($key, '/');
- if ('' === $key)
+ if ('' === $key)
{
return $this->$data_src;
}
@@ -380,21 +380,21 @@ class e_model
}
$keyArr = explode('/', $key);
$data = $this->$data_src;
- foreach ($keyArr as $k)
+ foreach ($keyArr as $k)
{
- if ('' === $k)
+ if ('' === $k)
{
return $default;
}
- if (is_array($data))
+ if (is_array($data))
{
- if (!isset($data[$k]))
+ if (!isset($data[$k]))
{
return $default;
}
$data = $data[$k];
}
- else
+ else
{
return $default;
}
@@ -404,23 +404,23 @@ class e_model
}
//get $index
- if (isset($this->{$data_src}[$key]))
+ if (isset($this->{$data_src}[$key]))
{
- if (null === $index)
+ if (null === $index)
{
return $this->{$data_src}[$key];
}
$value = $this->{$data_src}[$key];
- if (is_array($value))
+ if (is_array($value))
{
- if (isset($value[$index]))
+ if (isset($value[$index]))
{
return $value[$index];
}
return $default;
- }
- elseif (is_string($value))
+ }
+ elseif (is_string($value))
{
$arr = explode("\n", $value);
return (isset($arr[$index]) ? $arr[$index] : $default);
@@ -429,7 +429,7 @@ class e_model
}
return $default;
}
-
+
/**
* Get value from _data array without parsing the key
*
@@ -442,7 +442,7 @@ class e_model
{
return isset($this->{$data_src}[$key]) ? $this->{$data_src}[$key] : $default;
}
-
+
/**
* Overwrite data in the object.
*
@@ -451,7 +451,7 @@ class e_model
* '/' inside the key will be treated as array path
*
* If $key is an array and $strict is false, it will overwrite all the data in the object.
- *
+ *
* If $strict is true and $data_src is '_data', data will be updated only (no new data will be added)
*
* @param string|array $key
@@ -462,11 +462,11 @@ class e_model
*/
protected function _setData($key, $value = null, $strict = false, $data_src = '_data')
{
- if(is_array($key))
+ if(is_array($key))
{
if($strict)
{
- foreach(array_keys($key) as $k)
+ foreach(array_keys($key) as $k)
{
$this->_setData($k, $key[$k], true, $data_src);
}
@@ -475,8 +475,8 @@ class e_model
$this->$data_src = $key;
return $this;
- }
-
+ }
+
//multidimensional array support - strict _setData for values of type array
if($strict && !empty($value) && is_array($value))
{
@@ -486,30 +486,30 @@ class e_model
}
return $this;
}
-
+
//multidimensional array support - parse key
$key = trim($key, '/');
- if(strpos($key,'/'))
+ if(strpos($key,'/'))
{
//if strict - update only
if($strict && !$this->isData($key))
{
return $this;
}
-
+
$keyArr = explode('/', $key);
$data = &$this->{$data_src};
- for ($i = 0, $l = count($keyArr); $i < $l; $i++)
+ for ($i = 0, $l = count($keyArr); $i < $l; $i++)
{
$k = $keyArr[$i];
-
- if (!isset($data[$k]))
+
+ if (!isset($data[$k]))
{
$data[$k] = array();
}
$data = &$data[$k];
}
-
+
//data has changed - optimized
if('_data' === $data_src && !$this->data_has_changed)
{
@@ -518,7 +518,7 @@ class e_model
$this->_parsed_keys[$data_src.'/'.$key] = $value;
$data = $value;
}
- else
+ else
{
//if strict - update only
if($strict && !isset($this->_data[$key]))
@@ -534,7 +534,7 @@ class e_model
return $this;
}
-
+
/**
* Set data for the given source. More simple (and performance wise) version
* of {@link _setData()}
@@ -558,7 +558,7 @@ class e_model
$this->{$data_src}[$key] = $value;
return $this;
}
-
+
if($this->isData($key))
{
if('_data' === $data_src && !$this->data_has_changed)
@@ -570,13 +570,13 @@ class e_model
return $this;
}
-
+
/**
* Add data to the object.
* Retains existing data in the object.
- *
+ *
* If $override is false, only new (non-existent) data will be added
- *
+ *
* @param string|array $key
* @param mixed $value
* @param boolean $override allow override of existing data
@@ -593,7 +593,7 @@ class e_model
}
return $this;
}
-
+
if($override || !$this->_isData($key, $data_src))
{
if(is_array($value))
@@ -611,7 +611,7 @@ class e_model
}
return $this;
}
-
+
/**
* Unset data from the object from the given source.
* $key can be a string only. Array will be ignored.
@@ -624,7 +624,7 @@ class e_model
*/
protected function _unsetData($key = null, $data_src = '_data')
{
- if (null === $key)
+ if (null === $key)
{
if('_data' === $data_src && !empty($this->_data))
{
@@ -632,19 +632,19 @@ class e_model
}
$this->{$data_src} = array();
return $this;
- }
-
+ }
+
$key = trim($key, '/');
- if(strpos($key,'/'))
+ if(strpos($key,'/'))
{
$keyArr = explode('/', $key);
$data = &$this->{$data_src};
-
+
$unskey = array_pop($keyArr);
- for ($i = 0, $l = count($keyArr); $i < $l; $i++)
+ for ($i = 0, $l = count($keyArr); $i < $l; $i++)
{
$k = $keyArr[$i];
- if (!isset($data[$k]))
+ if (!isset($data[$k]))
{
return $this; //not found
}
@@ -659,7 +659,7 @@ class e_model
unset($data[$unskey], $this->_parsed_keys[$data_src.'/'.$key]);
}
}
- else
+ else
{
if('_data' === $data_src && isset($this->{$data_src}[$key]))
{
@@ -669,7 +669,7 @@ class e_model
}
return $this;
}
-
+
/**
* Unset single field from the object from the given source. Key is not parsed
*
@@ -697,14 +697,14 @@ class e_model
*/
protected function _hasData($key = '', $data_src = '_data')
{
- if (empty($key))
+ if (empty($key))
{
return !empty($this->$data_src);
}
$value = $this->_getData($key, null, null, $data_src);
return !empty($value);
}
-
+
/**
* Checks if the specified key is set
*
@@ -719,7 +719,7 @@ class e_model
/**
* Add system message of type Information
- *
+ *
* @param string $message
* @param boolean $session [optional]
* @return e_model
@@ -729,10 +729,10 @@ class e_model
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_INFO, $session);
return $this;
}
-
+
/**
* Add system message of type Success
- *
+ *
* @param string $message
* @param boolean $session [optional]
* @return e_model
@@ -742,10 +742,10 @@ class e_model
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_SUCCESS, $session);
return $this;
}
-
+
/**
* Add system message of type Warning
- *
+ *
* @param string $message
* @param boolean $session [optional]
* @return e_model
@@ -755,10 +755,10 @@ class e_model
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_WARNING, $session);
return $this;
}
-
+
/**
* Add system message of type Error
- *
+ *
* @param string $message
* @param boolean $session [optional]
* @return e_model
@@ -768,10 +768,10 @@ class e_model
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_ERROR, $session);
return $this;
}
-
+
/**
* Add system message of type Information
- *
+ *
* @param string $message
* @param boolean $session [optional]
* @return e_model
@@ -781,10 +781,10 @@ class e_model
e107::getMessage()->addStack($message, $this->_message_stack, E_MESSAGE_DEBUG, $session);
return $this;
}
-
+
/**
* Render System messages (if any)
- *
+ *
* @param boolean $session store messages to session
* @param boolean $reset reset errors
* @return string
@@ -793,10 +793,10 @@ class e_model
{
return e107::getMessage()->render($this->_message_stack, $session, $reset);
}
-
+
/**
* Move model System messages (if any) to the default eMessage stack
- *
+ *
* @param boolean $session store messages to session
* @return e_model
*/
@@ -805,7 +805,7 @@ class e_model
e107::getMessage()->moveStack($this->_message_stack, 'default', false, $session);
return $this;
}
-
+
/**
* Set model message stack
* @param string $stack_name
@@ -816,7 +816,7 @@ class e_model
$this->_message_stack = $stack_name;
return $this;
}
-
+
/**
* Get model message stack name
* @return string
@@ -825,7 +825,7 @@ class e_model
{
return $this->_message_stack;
}
-
+
/**
* User defined model validation
* Awaiting for child class implementation
@@ -834,15 +834,15 @@ class e_model
public function verify()
{
}
-
+
/**
- * Model validation
+ * Model validation
* @see e_model_admin
*/
public function validate()
{
}
-
+
/**
* Generic load data from DB
* @param boolean $force
@@ -854,13 +854,13 @@ class e_model
{
return $this;
}
-
+
if($force)
{
$this->setData(array());
}
$id = intval($id);
-
+
$qry = str_replace('{ID}', $id, $this->getParam('db_query'));
if(!$qry)
{
@@ -874,7 +874,7 @@ class e_model
{
$this->setData($sql->db_Fetch());
}
-
+
if($sql->getLastErrorNumber())
{
$this->addMessageDebug('SQL error #'.$sql->getLastErrorNumber().': '.$sql->getLastErrorText());
@@ -882,7 +882,7 @@ class e_model
return $this;
}
-
+
/**
* Save data to DB
* Awaiting for child class implementation
@@ -891,7 +891,7 @@ class e_model
public function save()
{
}
-
+
/**
* Insert data to DB
* Awaiting for child class implementation
@@ -900,7 +900,7 @@ class e_model
public function dbInsert()
{
}
-
+
/**
* Update DB data
* Awaiting for child class implementation
@@ -909,7 +909,7 @@ class e_model
public function dbUpdate()
{
}
-
+
/**
* Replace DB record
* Awaiting for child class implementation
@@ -918,7 +918,7 @@ class e_model
public function dbReplace()
{
}
-
+
/**
* Delete DB data
* Awaiting for child class implementation
@@ -927,7 +927,7 @@ class e_model
public function dbDelete()
{
}
-
+
/**
* Set parameter array
* Core parameters:
@@ -942,7 +942,7 @@ class e_model
$this->_params = $params;
return $this;
}
-
+
/**
* Update parameter array
* @param array $params
@@ -953,21 +953,21 @@ class e_model
$this->_params = array_merge($this->_params, $params);
return $this;
}
-
+
/**
* Get parameter array
- *
+ *
* @return array parameters
*/
public function getParams()
{
return $this->_params;
}
-
+
/**
* Set parameter
- *
- * @param string $key
+ *
+ * @param string $key
* @param mixed $value
* @return e_model
*/
@@ -976,7 +976,7 @@ class e_model
$this->_params[$key] = $value;
return $this;
}
-
+
/**
* Get parameter
*
@@ -987,11 +987,11 @@ class e_model
{
return (isset($this->_params[$key]) ? $this->_params[$key] : $default);
}
-
+
/**
* Render model data, all 'sc_*' methods will be recongnized
* as shortcodes.
- *
+ *
* @param string $template
* @param boolean $parsesc parse external shortcodes, default is true
* @return string parsed template
@@ -1000,12 +1000,12 @@ class e_model
{
return e107::getParser()->parseTemplate($template, $parsesc, $this);
}
-
+
public function toXML()
{
$ret = "\n";
$ret .= "\n";
-
+
$ret .= "\t\n";
// TODO - handle multi dimensional arrays (already possible - field1/field2?), method toXMLValue($value, $type)
foreach ($this->getDataFields() as $field => $type)
@@ -1015,15 +1015,15 @@ class e_model
$ret .= "\n";
}
$ret .= "\t \n";
-
+
$ret .= " ";
return $ret;
}
-
+
/**
* Try to convert string to a number
* Shoud fix locale related troubles
- *
+ *
* @param string $value
* @return integer|float
*/
@@ -1031,14 +1031,14 @@ class e_model
{
if(!is_numeric($value))
{
- $larr = localeconv();
+ $larr = localeconv();
$search = array($larr['decimal_point'], $larr['mon_decimal_point'], $larr['thousands_sep'], $larr['mon_thousands_sep'], $larr['currency_symbol'], $larr['int_curr_symbol']);
$replace = array('.', '.', '', '', '', '');
$value = str_replace($search, $replace, $value);
}
return (0 + $value);
}
-
+
/**
* Convert model object to array
* @return array object data
@@ -1047,7 +1047,7 @@ class e_model
{
return $this->getData();
}
-
+
/**
* Convert object data to a string
*
@@ -1068,12 +1068,12 @@ class e_model
}
return (string) e107::getArrayStorage()->WriteArray($this->getData(), $AddSlashes);
}
-
+
/**
* Magic method - convert object data to a string
- * NOTE: before PHP 5.2.0 the __toString method was only
+ * NOTE: before PHP 5.2.0 the __toString method was only
* called when it was directly combined with echo() or print()
- *
+ *
* NOTE: PHP 5.3+ is throwing parse error if __toString has optional arguments.
*
* @param boolean $AddSlashes
@@ -1083,7 +1083,7 @@ class e_model
{
return $this->toString((func_num_args() && @func_get_arg(0) === true));
}
-
+
public function destroy()
{
$this->_data = array();
@@ -1099,12 +1099,12 @@ class e_model
/**
* Base e107 Admin Model class
- *
+ *
* Some important points:
* - model data should be always in toDB() format:
* - retrieved direct from DB
* - set & sanitized via setPostedData()->mergePostedData()
- * - manually sanitized before passed to model setter (set(), setData(), add(), addData(), etc.) methods
+ * - manually sanitized before passed to model setter (set(), setData(), add(), addData(), etc.) methods
* - $_data_fields property is important, it tells to sanitize() method how to sanitize posted data
* - if $_data_fields is missing, sanitize() will call internally e107::getParser()->toDB() on the data
* - sanitize() is triggered by default on mergePostedData() and mergeData() methods
@@ -1116,7 +1116,7 @@ class e_model
* - in almost every case $_FIELD_TYPES shouldn't contain 'escape' and 'todb' - dont't forget you are going to pass already sanitized data (see above)
* - most probably $_FIELD_TYPES will go in the future, $_data_fields alone could do the job
* - default db related methods (save(), dbUpdate(), etc.) need $_db_table
- *
+ *
* @package e107
* @category e107_handlers
* @version 1.0
@@ -1132,17 +1132,17 @@ class e_admin_model extends e_model
* @var array
*/
protected $_posted_data = array();
-
+
/**
* DB format array - see db::_getTypes() and db::_getFieldValue() (mysql_class.php)
* for example
- *
+ *
* This can/should be overwritten by extending the class
*
* @var array
*/
protected $_FIELD_TYPES = array();
-
+
/**
* Validation structure - see {@link e_validator::$_required_rules} for
* more information about the array format.
@@ -1153,19 +1153,19 @@ class e_admin_model extends e_model
* @var array
*/
protected $_validation_rules = array();
-
+
/**
* @var integer Last SQL error number
*/
protected $_db_errno = 0;
-
+
/**
* Validator object
- *
- * @var e_validator
+ *
+ * @var e_validator
*/
protected $_validator = null;
-
+
/**
* @return array
*/
@@ -1173,10 +1173,10 @@ class e_admin_model extends e_model
{
return $this->_validation_rules;
}
-
+
/**
* Set object validation rules if $_validation_rules array is empty
- *
+ *
* @param array $vrules
* @return e_admin_model
*/
@@ -1188,7 +1188,7 @@ class e_admin_model extends e_model
}
return $this;
}
-
+
/**
* Predefined data fields types, passed to DB handler
* @return array
@@ -1197,10 +1197,10 @@ class e_admin_model extends e_model
{
return $this->_FIELD_TYPES;
}
-
+
/**
* Predefined data fields types, passed to DB handler
- *
+ *
* @param array $field_types
* @return e_admin_model
*/
@@ -1209,7 +1209,7 @@ class e_admin_model extends e_model
$this->_FIELD_TYPES = $field_types;
return $this;
}
-
+
/**
* Retrieves data from the object ($_posted_data) without
* key parsing (performance wise, prefered when possible)
@@ -1223,7 +1223,7 @@ class e_admin_model extends e_model
{
return $this->_getDataSimple((string) $key, $default, '_posted_data');
}
-
+
/**
* Retrieves data from the object ($_posted_data)
* If $key is empty, return all object posted data
@@ -1237,13 +1237,13 @@ class e_admin_model extends e_model
{
return $this->_getData($key, $default, $index, '_posted_data');
}
-
+
/**
* Search for requested data from available sources in this order:
* - posted data
* - default object data
* - passed default value
- *
+ *
* Use this method inside forms
*
* @param string $key
@@ -1260,13 +1260,13 @@ class e_admin_model extends e_model
}
return e107::getParser()->toForm($this->getData((string) $key, $default, $index));
}
-
+
/**
* Overwrite posted data in the object for a single field. Key is not parsed.
* Public proxy of {@link _setDataSimple()}
- * Use this method to store data from non-trustable sources (e.g. _POST) - it doesn't overwrite
+ * Use this method to store data from non-trustable sources (e.g. _POST) - it doesn't overwrite
* the original object data
- *
+ *
* @param string $key
* @param mixed $value
* @param boolean $strict update only
@@ -1283,11 +1283,11 @@ class e_admin_model extends e_model
}
return $this->_setDataSimple($key, $value, $strict, '_posted_data');
}
-
+
/**
* Overwrite posted data in the object. Key is parsed (multidmensional array support).
* Public proxy of {@link _setData()}
- * Use this method to store data from non-trustable sources (e.g. _POST) - it doesn't overwrite
+ * Use this method to store data from non-trustable sources (e.g. _POST) - it doesn't overwrite
* the original object data
*
* @param string|array $key
@@ -1306,14 +1306,14 @@ class e_admin_model extends e_model
}
return $this->_setData($key, $value, $strict, '_posted_data');
}
-
+
/**
* Add data to the object.
* Retains existing data in the object.
* Public proxy of {@link _addData()}
- *
+ *
* If $override is false, data will be updated only (check against existing data)
- *
+ *
* @param string|array $key
* @param mixed $value
* @param boolean $override override existing data
@@ -1330,7 +1330,7 @@ class e_admin_model extends e_model
}
return $this->_addData($key, $value, $override, '_posted_data');
}
-
+
/**
* Unset single posted data field from the object.
* Public proxy of {@link _unsetDataSimple()}
@@ -1342,13 +1342,13 @@ class e_admin_model extends e_model
{
return $this->_unsetDataSimple($key, '_posted_data');
}
-
+
/**
* Unset posted data from the object.
* $key can be a string only. Array will be ignored.
* '/' inside the key will be treated as array path
* if $key is null entire object will be reset
- *
+ *
* Public proxy of {@link _unsetData()}
*
* @param string|null $key
@@ -1368,7 +1368,7 @@ class e_admin_model extends e_model
{
return $this->_hasData($key, '_posted_data');
}
-
+
/**
* Check if posted data is empty
* @return boolean
@@ -1377,10 +1377,10 @@ class e_admin_model extends e_model
{
return $this->_hasData('', '_posted_data');
}
-
+
/**
* Check if given key exists in the posted data array
- *
+ *
* @param string $key
* @return boolean
*/
@@ -1388,10 +1388,10 @@ class e_admin_model extends e_model
{
return (isset($this->_posted_data[$key]));
}
-
+
/**
* Check if given key exists in the posted data array ($key us parsed)
- *
+ *
* @param string $key
* @return boolean
*/
@@ -1399,7 +1399,7 @@ class e_admin_model extends e_model
{
return $this->_isData($key, '_posted_data');
}
-
+
/**
* Compares posted data vs object data
*
@@ -1413,7 +1413,7 @@ class e_admin_model extends e_model
$postedData = $this->getPostedData($field);
return ($strict ? $newData !== $postedData : $newData != $postedData);
}
-
+
/**
* @return boolean
*/
@@ -1421,16 +1421,16 @@ class e_admin_model extends e_model
{
return $this->data_has_changed;
}
-
+
/**
* Merge posted data with the object data
* Should be used on edit/update/create record (back-end)
* Retrieved for copy Posted data will be removed (no matter if copy is successfull or not)
- *
+ *
* If $strict is true, only existing object data will be copied (update)
* If $validate is true, data will be copied only after successful validation
*
- * @param boolean $strict
+ * @param boolean $strict
* @param boolean $sanitize sanitize posted data before move it to the object data
* @param boolean $validate perform validation check
* @return e_admin_model
@@ -1439,12 +1439,12 @@ class e_admin_model extends e_model
{
if(!$this->hasPostedData() || ($validate && !$this->validate()))
{
- return $this;
+ return $this;
}
-
+
/* XXX - Wrong? Should validator keep track on validated data at all?
// retrieve only valid data
- if($validate)
+ if($validate)
{
$data = $this->getValidator()->getValidData();
}
@@ -1452,7 +1452,7 @@ class e_admin_model extends e_model
{
$data = $this->getPostedData();
}*/
-
+
$data = $this->getPostedData();
if($sanitize)
{
@@ -1467,19 +1467,19 @@ class e_admin_model extends e_model
$data = $tp->toDB($data);
}
}
-
- foreach ($data as $field => $dt)
+
+ foreach ($data as $field => $dt)
{
$this->setData($field, $dt, $strict)
->removePostedData($field);
}
return $this;
}
-
+
/**
* Merge passed data array with the object data
* Should be used on edit/update/create record (back-end)
- *
+ *
* If $strict is true, only existing object data will be copied (update)
* If $validate is true, data will be copied only after successful validation
*
@@ -1495,14 +1495,14 @@ class e_admin_model extends e_model
{
return $this;
}
-
+
/* Wrong?
// retrieve only valid data
- if($validate)
+ if($validate)
{
$src_data = $this->getValidator()->getValidData();
}*/
-
+
if($sanitize)
{
// search for db_field types
@@ -1515,15 +1515,15 @@ class e_admin_model extends e_model
$src_data = $tp->toDB($src_data);
}
}
-
+
foreach ($src_data as $key => $value)
{
$this->setData($key, $value, $strict);
}
-
+
return $this;
}
-
+
/**
* Validate posted data:
* 1. validate posted data against object validation rules
@@ -1539,13 +1539,13 @@ class e_admin_model extends e_model
{
return true;
}
- if(null === $data)
+ if(null === $data)
{
$data = $this->getPostedData();
}
return $this->getValidator()->validate($data);
}
-
+
/**
* User defined model validation
* Awaiting for child class implementation
@@ -1554,7 +1554,7 @@ class e_admin_model extends e_model
public function verify()
{
}
-
+
/**
* @return e_validator
*/
@@ -1573,12 +1573,12 @@ class e_admin_model extends e_model
* Add custom validation message.
* $field_type and $error_code will be inserted via sprintf()
* in the $message string
- * Example:
+ * Example:
*
- * $model->addValidationError('Custom error message [#%d] for %s', 'My Field', 1000);
+ * $model->addValidationError('Custom error message [#%d] for %s', 'My Field', 1000);
* //produces 'Custom error message [#1000] for My Field'
*
- *
+ *
* @param string $message
* @param string $field_title [optional]
* @param integer $error_code [optional]
@@ -1589,10 +1589,10 @@ class e_admin_model extends e_model
$this->getValidator()->addValidateMessage($field_title, $error_code, $message);
return $this;
}
-
+
/**
* Render validation errors (if any)
- *
+ *
* @param boolean $session store messages to session
* @param boolean $reset reset errors
* @return string
@@ -1601,10 +1601,10 @@ class e_admin_model extends e_model
{
return $this->getValidator()->renderValidateMessages($session, $reset);
}
-
+
/**
* Render System messages (if any)
- *
+ *
* @param boolean $validation render validation messages as well
* @param boolean $session store messages to session
* @param boolean $reset reset errors
@@ -1618,10 +1618,10 @@ class e_admin_model extends e_model
}
return parent::renderMessages($session, $reset);
}
-
+
/**
* Move model System messages (if any) to the default eMessage stack
- *
+ *
* @param boolean $session store messages to session
* @param boolean $validation move validation messages as well
* @return e_admin_model
@@ -1643,7 +1643,7 @@ class e_admin_model extends e_model
{
return $this->getValidator()->isValid();
}
-
+
/**
* @return boolean
*/
@@ -1651,7 +1651,7 @@ class e_admin_model extends e_model
{
return !empty($this->_db_errno);
}
-
+
/**
* @return integer last mysql error number
*/
@@ -1659,7 +1659,7 @@ class e_admin_model extends e_model
{
return $this->_db_errno;
}
-
+
/**
* @return string last mysql error message
*/
@@ -1667,7 +1667,7 @@ class e_admin_model extends e_model
{
return e107::getDb()->getLastErrorText();
}
-
+
/**
* @return boolean
*/
@@ -1675,7 +1675,7 @@ class e_admin_model extends e_model
{
return ($this->hasValidationError() || $this->hasSqlError());
}
-
+
/**
* Generic load data from DB
* @param boolean $force
@@ -1684,7 +1684,7 @@ class e_admin_model extends e_model
public function load($id, $force = false)
{
parent::load($id, $force);
-
+
$this->_db_errno = e107::getDb()->getLastErrorNumber();
if($this->_db_errno)
{
@@ -1693,10 +1693,10 @@ class e_admin_model extends e_model
}
return $this;
}
-
+
/**
* Save data to DB
- *
+ *
* @param boolen $from_post
*/
public function save($from_post = true, $force = false, $session_messages = false)
@@ -1705,21 +1705,21 @@ class e_admin_model extends e_model
{
return false;
}
-
+
if($from_post)
{
- //no strict copy, validate & sanitize
+ //no strict copy, validate & sanitize
$this->mergePostedData(false, true, true);
}
-
+
if($this->getId())
{
return $this->dbUpdate($force, $session_messages);
}
-
+
return $this->dbInsert($force, $session_messages);
}
-
+
public function delete($destroy = true, $session_messages = false)
{
$ret = $this->dbDelete();
@@ -1732,10 +1732,10 @@ class e_admin_model extends e_model
}
return $ret;
}
-
+
/**
* Insert data to DB
- *
+ *
* @param boolean $force force query even if $data_has_changed is false
* @param boolean $session_messages to use or not session to store system messages
*/
@@ -1755,17 +1755,17 @@ class e_admin_model extends e_model
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
return false;
}
-
+
// Set the reutrned ID
$this->setId($res);
$this->addMessageSuccess(LAN_CREATED);
-
+
return $res;
}
-
+
/**
* Replace data in DB
- *
+ *
* @param boolean $force force query even if $data_has_changed is false
* @param boolean $session_messages to use or not session to store system messages
*/
@@ -1776,7 +1776,7 @@ class e_admin_model extends e_model
{
return 0;
}
-
+
$res = e107::getDb()->db_Insert($this->getModelTable(), $this->toSqlQuery('replace'));
if(!$res)
{
@@ -1787,13 +1787,13 @@ class e_admin_model extends e_model
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
}
}
-
+
return $res;
}
-
+
/**
* Update DB data
- *
+ *
* @param boolean $force force query even if $data_has_changed is false
* @param boolean $session_messages to use or not session to store system messages
*/
@@ -1815,17 +1815,17 @@ class e_admin_model extends e_model
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
return false;
}
-
+
$this->addMessageInfo(LAN_NO_CHANGE);
return 0;
}
$this->addMessageSuccess(LAN_UPDATED);
return $res;
}
-
+
/**
* Delete DB data
- *
+ *
* @param boolean $force force query even if $data_has_changed is false
* @param boolean $session_messages to use or not session to store system messages
*/
@@ -1836,7 +1836,7 @@ class e_admin_model extends e_model
{
return 0;
}
-
+
if(!$this->getId())
{
$this->addMessageError('Record not found', $session_messages); //TODO - Lan
@@ -1852,20 +1852,20 @@ class e_admin_model extends e_model
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.e107::getDb()->getLastErrorText());
}
}
-
+
return $res;
}
-
+
/**
* Build query array to be used with db methods (db_Update, db_Insert, db_Replace)
- *
+ *
* @param string $force [optional] force action - possible values are create|update|replace
* @return array db query
*/
public function toSqlQuery($force = '')
{
$qry = array();
-
+
if($force)
{
$action = $force;
@@ -1874,11 +1874,11 @@ class e_admin_model extends e_model
{
$action = $this->getId() ? 'update' : 'create';
}
-
+
$qry['_FIELD_TYPES'] = $this->_FIELD_TYPES; //DB field types are optional
$qry['data'][$this->getFieldIdName()] = $this->getId();
$qry['_FIELD_TYPES'][$this->getFieldIdName()] = 'int';
-
+
foreach ($this->_data_fields as $key => $type)
{
if($key == $this->getFieldIdName())
@@ -1891,7 +1891,7 @@ class e_admin_model extends e_model
}
$qry['data'][$key] = $this->getData($key);
}
-
+
switch($action)
{
case 'create':
@@ -1900,26 +1900,26 @@ class e_admin_model extends e_model
case 'replace':
$qry['_REPLACE'] = true;
break;
-
+
case 'update':
unset($qry['data'][$this->getFieldIdName()]);
$qry['WHERE'] = $this->getFieldIdName().'='.intval($this->getId()); //intval just in case...
break;
}
-
+
return $qry;
}
-
+
/**
* Sanitize value based on its db field type ($_data_fields),
* method will return null only if db field rule is not found.
* If $value is null, it'll be retrieved from object posted data
* If $key is an array, $value is omitted.
- *
+ *
* NOTE: If $key is not found in object's _data_fields array, null is returned
- *
+ *
* @param mixed $key string key name or array data to be sanitized
- * @param mixed $value
+ * @param mixed $value
* @return mixed sanitized $value or null on failure
*/
public function sanitize($key, $value = null)
@@ -1927,7 +1927,7 @@ class e_admin_model extends e_model
$tp = e107::getParser();
if(is_array($key))
{
- $ret = array();
+ $ret = array();
foreach ($key as $k=>$v)
{
if(isset($this->_data_fields[$k]))
@@ -1937,7 +1937,7 @@ class e_admin_model extends e_model
}
return $ret;
}
-
+
if(!isset($this->_data_fields[$key]))
{
return null;
@@ -1947,7 +1947,7 @@ class e_admin_model extends e_model
{
$value = $this->getPostedData($key);
}
-
+
switch ($type)
{
case 'int':
@@ -1960,7 +1960,7 @@ class e_admin_model extends e_model
return $tp->toDB($value);
break;
- case 'float':
+ case 'float':
return $this->toNumber($value);
break;
@@ -1972,12 +1972,12 @@ class e_admin_model extends e_model
case 'model':
return $value->mergePostedData(false, true, true);
break;
-
+
case 'null':
return ($value ? $tp->toDB($value) : null);
break;
}
-
+
return null;
}
@@ -1989,30 +1989,30 @@ class e_admin_model extends e_model
$this->_db_errno = null;
$this->_posted_data = array();
$this->data_has_changed = array();
- $this->_FIELD_TYPES = array();
+ $this->_FIELD_TYPES = array();
}
}
/**
* Model collection handler
*/
-class e_tree_model extends e_model
+class e_tree_model extends e_model
{
/**
* Current model DB table, used in all db calls
* This can/should be overwritten by extending the class
- *
+ *
* @var string
*/
protected $_db_table;
-
+
/**
* All records (no limit) cache
- *
+ *
* @var string
*/
protected $_total = false;
-
+
/**
* Constructor
*
@@ -2024,18 +2024,18 @@ class e_tree_model extends e_model
$this->setTree($tree_data);
}
}
-
+
public function getTotal()
{
- return $this->_total;
+ return $this->_total;
}
-
+
public function setTotal($num)
{
$this->_total = $num;
return $this;
}
-
+
/**
* Set table name
* @param object $table
@@ -2046,7 +2046,7 @@ class e_tree_model extends e_model
$this->_db_table = $table;
return $this;
}
-
+
/**
* Get table name
* @return string
@@ -2055,16 +2055,16 @@ class e_tree_model extends e_model
{
return $this->_db_table;
}
-
+
/**
- * Set array of models
+ * Get array of models
* @return array
*/
- function getTree($force = false)
+ function getTree()
{
return $this->get('__tree', array());
}
-
+
/**
* Set array of models
* @return e_tree_model
@@ -2078,26 +2078,26 @@ class e_tree_model extends e_model
return $this;
}
-
+
/**
* Default load method
- *
+ *
* @return e_tree_model
*/
public function load($force = false)
{
-
+
if(!$force && !$this->isEmpty())
{
return $this;
}
-
+
if ($force)
{
$this->setTree(array(), true);
$this->_total = false;
}
-
+
if($this->getParam('db_query') && $this->getParam('model_class') && class_exists($this->getParam('model_class')))
{
$sql = e107::getDb();
@@ -2116,13 +2116,13 @@ class e_tree_model extends e_model
}
$this->setNode($tmp->get($this->getFieldIdName()), $tmp);
}
-
+
if(false === $this->_total && $this->getModelTable() && !$this->getParam('nocount'))
{
//SQL_CALC_FOUND_ROWS not found in the query, do one more query
$this->_total = e107::getDb()->db_Count($this->getModelTable());
}
-
+
unset($tmp);
}
}
@@ -2138,10 +2138,10 @@ class e_tree_model extends e_model
{
return $this->getData('__tree/'.$node_id);
}
-
+
/**
* Add or remove (when $node is null) model to the collection
- *
+ *
* @param integer $node_id
* @param e_model $node
* @return e_tree_model
@@ -2153,14 +2153,14 @@ class e_tree_model extends e_model
$this->removeData('__tree/'.$node_id);
return $this;
}
-
+
$this->setData('__tree/'.$node_id, $node);
return $this;
}
-
+
/**
* Check if model with passed id exists in the collection
- *
+ *
* @param integer $node_id
* @return boolean
*/
@@ -2168,10 +2168,10 @@ class e_tree_model extends e_model
{
return $this->isData('__tree/'.$node_id);
}
-
+
/**
* Check if model with passed id exists in the collection and is not empty
- *
+ *
* @param integer $node_id
* @return boolean
*/
@@ -2179,7 +2179,7 @@ class e_tree_model extends e_model
{
return $this->hasData('__tree/'.$node_id);
}
-
+
/**
* Check if collection is empty
*
@@ -2207,16 +2207,16 @@ class e_admin_tree_model extends e_tree_model
if(!is_array($ids))
{
$ids = explode(',', $ids);
-
+
}
-
+
$ids = array_map('intval', $ids);
$idstr = implode(', ', $ids);
-
+
$sql = e107::getDb();
$res = $sql->db_Delete($this->getModelTable(), $this->getFieldIdName().' IN ('.$idstr.')');
if(!$res)
- {
+ {
if($sql->getLastErrorNumber())
{
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
@@ -2235,10 +2235,10 @@ class e_admin_tree_model extends e_tree_model
}
}
}
-
+
return $res;
}
-
+
/**
* Batch update tree records/nodes
* @param string $field field name
@@ -2252,7 +2252,7 @@ class e_admin_tree_model extends e_tree_model
public function update($field, $value, $ids, $syncvalue = null, $sanitize = true, $session_messages = false)
{
$tp = e107::getParser();
- $sql = e107::getDb();
+ $sql = e107::getDb();
if(empty($ids))
{
return 0;
@@ -2261,7 +2261,7 @@ class e_admin_tree_model extends e_tree_model
{
$ids = explode(',', $ids);
}
-
+
if($sanitize)
{
$ids = array_map('intval', $ids);
@@ -2269,23 +2269,23 @@ class e_admin_tree_model extends e_tree_model
$value = "'".$tp->toDb($value)."'";
}
$idstr = implode(', ', $ids);
-
+
$res = $sql->db_Update($this->getModelTable(), "{$field}={$value} WHERE ".$this->getFieldIdName().' IN ('.$idstr.')');
if(!$res)
- {
+ {
if($sql->getLastErrorNumber())
{
- $this->addMessageError(LAN_UPDATED_FAILED, $session_messages);
+ $this->addMessageError(LAN_UPDATED_FAILED, $session_messages);
$this->addMessageDebug('SQL Error #'.$sql->getLastErrorNumber().': '.$sql->getLastErrorText());
}
else
{
- $this->addMessageInfo(LAN_NO_CHANGE, $session_messages);
+ $this->addMessageInfo(LAN_NO_CHANGE, $session_messages);
}
}
-
+
if(null === $syncvalue) return $res;
-
+
foreach ($ids as $id)
{
if($this->hasNode($id))