1
0
mirror of https://github.com/e107inc/e107.git synced 2025-05-03 10:49:12 +02:00

more e_model tweaking

This commit is contained in:
secretr 2009-10-22 14:18:18 +00:00
parent b923520bbf
commit 3d22c7170a
4 changed files with 95 additions and 48 deletions

View File

@ -9,8 +9,8 @@
* e107 Main * e107 Main
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/e107_class.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/e107_class.php,v $
* $Revision: 1.57 $ * $Revision: 1.58 $
* $Date: 2009-10-21 10:29:42 $ * $Date: 2009-10-22 14:18:18 $
* $Author: secretr $ * $Author: secretr $
*/ */
@ -123,7 +123,9 @@ class e107
'e107_traffic' => '{e_HANDLER}traffic_class.php', 'e107_traffic' => '{e_HANDLER}traffic_class.php',
'comment' => '{e_HANDLER}comment_class.php', 'comment' => '{e_HANDLER}comment_class.php',
'e_validator' => '{e_HANDLER}validator_class.php', 'e_validator' => '{e_HANDLER}validator_class.php',
'themeHandler' => '{e_HANDLER}theme_handler.php' 'themeHandler' => '{e_HANDLER}theme_handler.php',
'e_model' => '{e_HANDLER}model_class.php',
'e_admin_model' => '{e_HANDLER}model_class.php',
); );
/** /**

View File

@ -9,8 +9,8 @@
* Message Handler * Message Handler
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/message_handler.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/message_handler.php,v $
* $Revision: 1.21 $ * $Revision: 1.22 $
* $Date: 2009-10-22 11:18:55 $ * $Date: 2009-10-22 14:18:18 $
* $Author: secretr $ * $Author: secretr $
* *
*/ */
@ -149,7 +149,7 @@ class eMessage
* Should be used for dealing with messages with custom message stacks. * Should be used for dealing with messages with custom message stacks.
* Supports message arrays. * Supports message arrays.
* *
* @param string $message message(s) * @param string|array $message message(s)
* @param string $mstack defaults to 'default' * @param string $mstack defaults to 'default'
* @param string $type [optional] * @param string $type [optional]
* @param boolean $sesion [optional] * @param boolean $sesion [optional]

View File

@ -9,9 +9,9 @@
* e107 Base Model * e107 Base Model
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/model_class.php,v $
* $Revision: 1.19 $ * $Revision: 1.20 $
* $Date: 2009-10-22 07:52:07 $ * $Date: 2009-10-22 14:18:18 $
* $Author: e107coders $ * $Author: secretr $
*/ */
if (!defined('e107_INIT')) { exit; } if (!defined('e107_INIT')) { exit; }
@ -33,6 +33,17 @@ class e_model
* @var array * @var array
*/ */
protected $_data = array(); protected $_data = array();
/**
* 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();
/** /**
* Runtime cache of parsed from {@link _getData()} keys * Runtime cache of parsed from {@link _getData()} keys
@ -74,6 +85,15 @@ class e_model
{ {
$this->setData($data); $this->setData($data);
} }
/**
* Predefined data fields in format key => type
* @return array
*/
public function getDataFields()
{
return $this->_data_fields;
}
/** /**
* Set name of object's field id * Set name of object's field id
@ -103,9 +123,9 @@ class e_model
} }
/** /**
* Retrieve object field id value * Retrieve object primary id field value
* *
* @return mixed * @return integer
*/ */
public function getId() public function getId()
{ {
@ -115,6 +135,20 @@ class e_model
} }
return $this->get('id', 0); return $this->get('id', 0);
} }
/**
* Set object primary id field value
*
* @return e_model
*/
public function setId($id)
{
if ($this->getFieldIdName())
{
return $this->set($this->getFieldIdName(), intval($id));
}
return $this;
}
/** /**
* Retrieves data from the object ($_data) without * Retrieves data from the object ($_data) without
@ -691,6 +725,18 @@ class e_model
return e107::getMessage()->render($this->_message_stack, $session, $reset); 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 setMessages
*/
public function setMessages($session = false)
{
e107::getMessage()->moveStack($this->_message_stack, 'default', false, $session);
return $this;
}
/** /**
* User defined model validation * User defined model validation
* Awaiting for child class implementation * Awaiting for child class implementation
@ -819,16 +865,16 @@ class e_model
* - retrieved direct from DB * - retrieved direct from DB
* - set & sanitized via setPostedData()->mergePostedData() * - 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
* - $_db_fields property is important, it tells to sanitize() method how to sanitize posted data * - $_data_fields property is important, it tells to sanitize() method how to sanitize posted data
* - if $_db_fields is missing, sanitize() will call internally e107::getParser()->toDB() on the 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 * - sanitize() is triggered by default on mergePostedData() and mergeData() methods
* - mergePostedData() and mergeData() methods will filter posted/passed data against (in this order): * - mergePostedData() and mergeData() methods will filter posted/passed data against (in this order):
* - getValidator()->getValidData() if true is passed as validate parameter (currently disabled, gather feedback) * - getValidator()->getValidData() if true is passed as validate parameter (currently disabled, gather feedback)
* - $_db_fields if true is passed as sanitize parameter * - $_data_fields if true is passed as sanitize parameter
* - toSqlQuery() needs $_db_fields and $_field_id to work proper, $_FIELD_TYPES is optional but recommended (faster SQL queries) * - toSqlQuery() needs $_data_fields and $_field_id to work proper, $_FIELD_TYPES is optional but recommended (faster SQL queries)
* - result array from toSqlQuery() call will be filtered against $_db_fields * - result array from toSqlQuery() call will be filtered against $_data_fields
* - 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) * - 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, $_db_fields alone could do the job * - 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 * - default db related methods (save(), dbUpdate(), etc.) need $_db_table
* *
* @package e107 * @package e107
@ -837,7 +883,7 @@ class e_model
* @author SecretR * @author SecretR
* @copyright Copyright (C) 2009, e107 Inc. * @copyright Copyright (C) 2009, e107 Inc.
*/ */
class e_model_admin extends e_model class e_admin_model extends e_model
{ {
/** /**
* Current model DB table, used in all db calls * Current model DB table, used in all db calls
@ -856,17 +902,6 @@ class e_model_admin extends e_model
*/ */
protected $_posted_data = array(); protected $_posted_data = array();
/**
* DB structure array, required for {@link 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 $_db_fields = array();
/** /**
* DB format array - see db::_getTypes() and db::_getFieldValue() (mysql_class.php) * DB format array - see db::_getTypes() and db::_getFieldValue() (mysql_class.php)
* for example * for example
@ -935,14 +970,7 @@ class e_model_admin extends e_model
} }
/** /**
* @return array * Predefined data fields types, passed to DB handler
*/
public function getDbFields()
{
return $this->_db_fields;
}
/**
* @return array * @return array
*/ */
public function getFieldTypes() public function getFieldTypes()
@ -1197,7 +1225,7 @@ class e_model_admin extends e_model
if($sanitize) if($sanitize)
{ {
// search for db_field types // search for db_field types
if($this->getDbFields()) if($this->getDataFields())
{ {
$data = $this->sanitize($data); $data = $this->sanitize($data);
} }
@ -1247,7 +1275,7 @@ class e_model_admin extends e_model
if($sanitize) if($sanitize)
{ {
// search for db_field types // search for db_field types
if($this->getDbFields()) if($this->getDataFields())
{ {
$src_data = $this->sanitize($src_data); $src_data = $this->sanitize($src_data);
} }
@ -1359,6 +1387,23 @@ class e_model_admin extends e_model
} }
return parent::renderMessages($session, $reset); return parent::renderMessages($session, $reset);
} }
/**
* Move model System messages (if any) to the default eMessage stack
*
* @param boolean $validation move validation messages as well
* @param boolean $session store messages to session
* @return e_admin_model
*/
public function setMessages($validation = true, $session = false)
{
if($validation)
{
e107::getMessage()->moveStack($this->_message_stack.'_validator', 'default', false, $session);
}
parent::setMessages($session);
return $this;
}
/** /**
* @return boolean * @return boolean
@ -1492,7 +1537,7 @@ class e_model_admin extends e_model
*/ */
public function toSqlQuery($force = '') public function toSqlQuery($force = '')
{ {
$fields = array_keys($this->_db_fields); $fields = array_keys($this->_data_fields);
$qry = array(); $qry = array();
$action = $this->getId() ? 'update' : 'create'; $action = $this->getId() ? 'update' : 'create';
@ -1526,12 +1571,12 @@ class e_model_admin extends e_model
} }
/** /**
* Sanitize value based on its db field type ($_db_fields), * Sanitize value based on its db field type ($_data_fields),
* method will return null only if db field rule is not found. * 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 $value is null, it'll be retrieved from object posted data
* If $key is an array, $value is omitted. * If $key is an array, $value is omitted.
* *
* NOTE: If $key is not found in object's _db_fields array, null is returned * 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 $key string key name or array data to be sanitized
* @param mixed $value * @param mixed $value
@ -1545,7 +1590,7 @@ class e_model_admin extends e_model
$ret = array(); $ret = array();
foreach ($key as $k=>$v) foreach ($key as $k=>$v)
{ {
if(isset($this->_db_fields[$k])) if(isset($this->_data_fields[$k]))
{ {
$ret[$k] = $this->toDb($k, $v); $ret[$k] = $this->toDb($k, $v);
} }
@ -1553,11 +1598,11 @@ class e_model_admin extends e_model
return $ret; return $ret;
} }
if(!isset($this->_db_fields[$key])) if(!isset($this->_data_fields[$key]))
{ {
return null; return null;
} }
$type = $this->_db_fields[$key]; $type = $this->_data_fields[$key];
if(null === $value) if(null === $value)
{ {
$value = $this->getPostedData($key); $value = $this->getPostedData($key);

View File

@ -9,8 +9,8 @@
* e107 Preference Handler * e107 Preference Handler
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/pref_class.php,v $ * $Source: /cvs_backup/e107_0.8/e107_handlers/pref_class.php,v $
* $Revision: 1.25 $ * $Revision: 1.26 $
* $Date: 2009-10-21 11:57:15 $ * $Date: 2009-10-22 14:18:17 $
* $Author: secretr $ * $Author: secretr $
*/ */
@ -27,7 +27,7 @@ require_once(e_HANDLER.'model_class.php');
* @author SecretR * @author SecretR
* @copyright Copyright (c) 2009, e107 Inc. * @copyright Copyright (c) 2009, e107 Inc.
*/ */
class e_pref extends e_model_admin class e_pref extends e_admin_model
{ {
/** /**
* Preference ID - DB row value * Preference ID - DB row value