mirror of
https://github.com/e107inc/e107.git
synced 2025-08-01 20:30:39 +02:00
EONE-62 (New Feature): More work, getting data should work fine now, still work in progress
This commit is contained in:
@@ -3547,7 +3547,7 @@ class e_admin_ui extends e_admin_controller_ui
|
||||
$this->_model->setModelTable($this->table)
|
||||
->setFieldIdName($this->pid)
|
||||
->setValidationRules($this->validationRules)
|
||||
->setFieldTypes($this->fieldTypes)
|
||||
->setDbTypes($this->fieldTypes)
|
||||
->setDataFields($this->dataFields)
|
||||
->setMessageStackName('admin_ui_model_'.$this->table)
|
||||
->setParam('db_query', $this->editQry);
|
||||
|
@@ -1089,10 +1089,16 @@ class e107
|
||||
* Retrieve user model object.
|
||||
*
|
||||
* @param integer $user_id target user
|
||||
* @param boolean $checkIfCurrent if tru user_id will be compared to current user, if there is a match
|
||||
* current user object will be returned
|
||||
* @return e_system_user
|
||||
*/
|
||||
public static function getSystemUser($user_id)
|
||||
public static function getSystemUser($user_id, $checkIfCurrent = true)
|
||||
{
|
||||
if($checkIfCurrent && $user_id && $user_id === self::getUser()->getId())
|
||||
{
|
||||
return self::getUser();
|
||||
}
|
||||
$user = self::getRegistry('targets/core/user/'.$user_id);
|
||||
if(null === $user)
|
||||
{
|
||||
|
@@ -77,16 +77,6 @@ class e_model
|
||||
*/
|
||||
protected $_field_id;
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* Namespace to be used for model related system messages in {@link eMessage} handler
|
||||
*
|
||||
@@ -373,6 +363,19 @@ class e_model
|
||||
return $this->_isData($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $new_state new object state if set
|
||||
* @return boolean
|
||||
*/
|
||||
public function isModified($new_state = null)
|
||||
{
|
||||
if(is_bool($new_state))
|
||||
{
|
||||
$this->data_has_changed = $new_state;
|
||||
}
|
||||
return $this->data_has_changed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves data from the object
|
||||
*
|
||||
@@ -997,55 +1000,6 @@ class e_model
|
||||
$this->_cache_string = $str;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Predefined data fields types, passed to DB handler
|
||||
* @return array
|
||||
*/
|
||||
public function getFieldTypes()
|
||||
{
|
||||
return $this->_FIELD_TYPES;
|
||||
}
|
||||
|
||||
/**
|
||||
* Predefined data fields types, passed to DB handler
|
||||
*
|
||||
* @param array $field_types
|
||||
* @return e_model
|
||||
*/
|
||||
public function setFieldTypes($field_types)
|
||||
{
|
||||
$this->_FIELD_TYPES = $field_types;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto field type definitions
|
||||
*
|
||||
* @param boolean $force
|
||||
* @return boolean
|
||||
*/
|
||||
public function setFieldTypeDefs($force = false)
|
||||
{
|
||||
if($force || !$this->getFieldTypes())
|
||||
{
|
||||
$ret = e107::getDb()->getFieldDefs($this->getModelTable());
|
||||
if($ret)
|
||||
{
|
||||
foreach ($ret as $k => $v)
|
||||
{
|
||||
if('todb' == $v)
|
||||
{
|
||||
$ret[$k] = 'string';
|
||||
}
|
||||
}
|
||||
$this->setFieldTypes($ret);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save data to DB
|
||||
* Awaiting for child class implementation
|
||||
@@ -1055,12 +1009,30 @@ class e_model
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete DB record
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function delete()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new DB recorrd
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert data to DB
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function dbInsert()
|
||||
protected function dbInsert()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1069,7 +1041,7 @@ class e_model
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function dbUpdate()
|
||||
protected function dbUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1078,7 +1050,7 @@ class e_model
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function dbReplace()
|
||||
protected function dbReplace()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1087,7 +1059,7 @@ class e_model
|
||||
* Awaiting for child class implementation
|
||||
* @see e_model_admin
|
||||
*/
|
||||
public function dbDelete()
|
||||
protected function dbDelete()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -1262,10 +1234,8 @@ class e_model
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME - move e_model_admin to e_model_admin.php
|
||||
|
||||
/**
|
||||
* Base e107 Admin Model class
|
||||
* Base e107 Fron Model class interface
|
||||
*
|
||||
* Some important points:
|
||||
* - model data should be always in toDB() format:
|
||||
@@ -1286,11 +1256,11 @@ class e_model
|
||||
*
|
||||
* @package e107
|
||||
* @category e107_handlers
|
||||
* @version 1.0
|
||||
* @version $Id$
|
||||
* @author SecretR
|
||||
* @copyright Copyright (C) 2009, e107 Inc.
|
||||
* @copyright Copyright (C) 2008-2010 e107 Inc.
|
||||
*/
|
||||
class e_admin_model extends e_model
|
||||
class e_front_model extends e_model
|
||||
{
|
||||
/**
|
||||
* Posted data
|
||||
@@ -1300,6 +1270,17 @@ class e_admin_model extends e_model
|
||||
*/
|
||||
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.
|
||||
@@ -1311,6 +1292,8 @@ class e_admin_model extends e_model
|
||||
*/
|
||||
protected $_validation_rules = array();
|
||||
|
||||
protected $_optional_rules = array();
|
||||
|
||||
/**
|
||||
* @var integer Last SQL error number
|
||||
*/
|
||||
@@ -1340,17 +1323,100 @@ class e_admin_model extends e_model
|
||||
* Set object validation rules if $_validation_rules array is empty
|
||||
*
|
||||
* @param array $vrules
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setValidationRules(array $vrules)
|
||||
public function setValidationRules(array $vrules, $force = false)
|
||||
{
|
||||
if(empty($this->_validation_rules))
|
||||
if($force || empty($this->_validation_rules))
|
||||
{
|
||||
$this->_validation_rules = $vrules;
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getOptionalRules()
|
||||
{
|
||||
return $this->_optional_rules;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $rules
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setOptionalRules(array $rules)
|
||||
{
|
||||
$this->_optional_rules = $rules;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set object validation rules if $_validation_rules array is empty
|
||||
*
|
||||
* @param string $field
|
||||
* @param array $rule
|
||||
* @param boolean $required
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setValidationRule($field, $rule, $required = true)
|
||||
{
|
||||
$pname = $required ? '_validation_rules' : '_optional_rules';
|
||||
$rules = &$this->$pname;
|
||||
$rules[$field] = $rule;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Predefined data fields types, passed to DB handler
|
||||
* @return array
|
||||
*/
|
||||
public function getDbTypes()
|
||||
{
|
||||
return ($this->_FIELD_TYPES ? $this->_FIELD_TYPES : $this->getDataFields());
|
||||
}
|
||||
|
||||
/**
|
||||
* Predefined data fields types, passed to DB handler
|
||||
*
|
||||
* @param array $field_types
|
||||
* @return e_model
|
||||
*/
|
||||
public function setDbTypes($field_types)
|
||||
{
|
||||
$this->_FIELD_TYPES = $field_types;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Auto field type definitions
|
||||
* Disabled for now, it should auto-create _data_types
|
||||
* @param boolean $force
|
||||
* @return boolean
|
||||
*/
|
||||
// public function setFieldTypeDefs($force = false)
|
||||
// {
|
||||
// if($force || !$this->getFieldTypes())
|
||||
// {
|
||||
// $ret = e107::getDb()->getFieldDefs($this->getModelTable());
|
||||
// if($ret)
|
||||
// {
|
||||
// foreach ($ret as $k => $v)
|
||||
// {
|
||||
// if('todb' == $v)
|
||||
// {
|
||||
// $ret[$k] = 'string';
|
||||
// }
|
||||
// }
|
||||
// $this->setFieldTypes($ret);
|
||||
// return true;
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
|
||||
/**
|
||||
* Retrieves data from the object ($_posted_data) without
|
||||
* key parsing (performance wise, prefered when possible)
|
||||
@@ -1413,7 +1479,7 @@ class e_admin_model extends e_model
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @param boolean $strict update only
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setPosted($key, $value, $strict = false)
|
||||
{
|
||||
@@ -1429,7 +1495,7 @@ class e_admin_model extends e_model
|
||||
* @param string|array $key
|
||||
* @param mixed $value
|
||||
* @param boolean $strict update only
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setPostedData($key, $value = null, $strict = false)
|
||||
{
|
||||
@@ -1446,7 +1512,7 @@ class e_admin_model extends e_model
|
||||
* @param string|array $key
|
||||
* @param mixed $value
|
||||
* @param boolean $override override existing data
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function addPostedData($key, $value = null, $override = true)
|
||||
{
|
||||
@@ -1458,7 +1524,7 @@ class e_admin_model extends e_model
|
||||
* Public proxy of {@link _unsetDataSimple()}
|
||||
*
|
||||
* @param string $key
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function removePosted($key)
|
||||
{
|
||||
@@ -1474,7 +1540,7 @@ class e_admin_model extends e_model
|
||||
* Public proxy of {@link _unsetData()}
|
||||
*
|
||||
* @param string|null $key
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function removePostedData($key = null)
|
||||
{
|
||||
@@ -1555,7 +1621,7 @@ class e_admin_model extends e_model
|
||||
* @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
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function mergePostedData($strict = true, $sanitize = true, $validate = true)
|
||||
{
|
||||
@@ -1576,6 +1642,8 @@ class e_admin_model extends e_model
|
||||
}*/
|
||||
|
||||
$data = $this->getPostedData();
|
||||
$valid_data = $this->getValidator()->getValidData();
|
||||
|
||||
if($sanitize)
|
||||
{
|
||||
// search for db_field types
|
||||
@@ -1591,6 +1659,10 @@ class e_admin_model extends e_model
|
||||
|
||||
foreach ($data as $field => $dt)
|
||||
{
|
||||
// get values form validated array when possible
|
||||
// we need it because of advanced validation methods e.g. 'compare'
|
||||
if(isset($valid_data[$field])) $dt = $valid_data[$field];
|
||||
|
||||
$this->setData($field, $dt, $strict)
|
||||
->removePostedData($field);
|
||||
}
|
||||
@@ -1607,7 +1679,7 @@ class e_admin_model extends e_model
|
||||
* @param array $src_data
|
||||
* @param boolean $sanitize
|
||||
* @param boolean $validate perform validation check
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function mergeData(array $src_data, $strict = true, $sanitize = true, $validate = true)
|
||||
{
|
||||
@@ -1684,7 +1756,9 @@ class e_admin_model extends e_model
|
||||
if(null === $this->_validator)
|
||||
{
|
||||
$this->_validator = e107::getObject('e_validator');
|
||||
$this->_validator->setRules($this->getValidationRules())->setMessageStack($this->_message_stack.'_validator');
|
||||
$this->_validator->setRules($this->getValidationRules())
|
||||
->setOptionalRules($this->getOptionalRules())
|
||||
->setMessageStack($this->_message_stack.'_validator');
|
||||
//TODO - optional check rules
|
||||
}
|
||||
return $this->_validator;
|
||||
@@ -1745,7 +1819,7 @@ class e_admin_model extends e_model
|
||||
*
|
||||
* @param boolean $session store messages to session
|
||||
* @param boolean $validation move validation messages as well
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function setMessages($session = false, $validation = true)
|
||||
{
|
||||
@@ -1763,7 +1837,7 @@ class e_admin_model extends e_model
|
||||
* @param boolean|string $type E_MESSAGE_INFO | E_MESSAGE_SUCCESS | E_MESSAGE_WARNING | E_MESSAGE_WARNING | E_MESSAGE_DEBUG | false (all)
|
||||
* @param boolean $session reset session messages
|
||||
* @param boolean $validation reset validation messages as well
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function resetMessages($type = false, $session = false, $validation = false)
|
||||
{
|
||||
@@ -1818,7 +1892,7 @@ class e_admin_model extends e_model
|
||||
/**
|
||||
* Generic load data from DB
|
||||
* @param boolean $force
|
||||
* @return e_admin_model
|
||||
* @return e_front_model
|
||||
*/
|
||||
public function load($id, $force = false)
|
||||
{
|
||||
@@ -1835,177 +1909,6 @@ 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)
|
||||
{
|
||||
if(!$this->getFieldIdName())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($from_post)
|
||||
{
|
||||
//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();
|
||||
if($ret)
|
||||
{
|
||||
if($destroy)
|
||||
{
|
||||
$this->setMessages($session_messages)->destroy();
|
||||
}
|
||||
}
|
||||
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
|
||||
*/
|
||||
public function dbInsert($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Insert($this->getModelTable(), $this->toSqlQuery('create'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
$this->addMessageError('SQL Insert Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->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
|
||||
*/
|
||||
public function dbReplace($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Insert($this->getModelTable(), $this->toSqlQuery('replace'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Replace Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->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
|
||||
*/
|
||||
public function dbUpdate($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
$this->addMessageInfo(LAN_NO_CHANGE);
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Update($this->getModelTable(), $this->toSqlQuery('update'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Update Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->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
|
||||
*/
|
||||
public function dbDelete($session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!$this->getId())
|
||||
{
|
||||
$this->addMessageError('Record not found', $session_messages); //TODO - Lan
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Delete($this->getModelTable(), $this->getFieldIdName().'='.intval($this->getId()));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->getLastErrorText());
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build query array to be used with db methods (db_Update, db_Insert, db_Replace)
|
||||
@@ -2142,12 +2045,260 @@ class e_admin_model extends e_model
|
||||
$this->data_has_changed = array();
|
||||
$this->_FIELD_TYPES = array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
protected function dbUpdate($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
$this->addMessageInfo(LAN_NO_CHANGE);
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Update($this->getModelTable(), $this->toSqlQuery('update'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Update Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->getLastErrorText());
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->addMessageInfo(LAN_NO_CHANGE);
|
||||
return 0;
|
||||
}
|
||||
$this->addMessageSuccess(LAN_UPDATED);
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save data to DB
|
||||
*
|
||||
* @param boolen $from_post
|
||||
* @return boolean|integer
|
||||
*/
|
||||
public function save($from_post = true, $force = false, $session_messages = false)
|
||||
{
|
||||
if(!$this->getFieldIdName())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($from_post)
|
||||
{
|
||||
//no strict copy, validate & sanitize
|
||||
$this->mergePostedData(false, true, true);
|
||||
}
|
||||
|
||||
if($this->getId())
|
||||
{
|
||||
return $this->dbUpdate($force, $session_messages);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exactly what it says - your debug helper
|
||||
* @param boolean $retrun
|
||||
* @param boolean $undo
|
||||
* @return void
|
||||
*/
|
||||
public function saveDebug($return = false, $undo = true)
|
||||
{
|
||||
$ret = array();
|
||||
|
||||
$ret['validation_rules'] = $this->getValidationRules();
|
||||
$ret['optional_validation_rules'] = $this->getOptionalRules();
|
||||
$ret['model_base_ismodfied'] = $this->isModified();
|
||||
$ret['model_base_data'] = $this->getData();
|
||||
$ret['posted_data'] = $this->getPostedData();
|
||||
|
||||
$this->mergePostedData(false, true, true);
|
||||
|
||||
$ret['model_modified_data'] = $this->getData();
|
||||
$ret['model_modified_ismodfied'] = $this->isModified();
|
||||
$ret['validator_valid_data'] = $this->getValidator()->getValidData();
|
||||
|
||||
// undo
|
||||
if($undo)
|
||||
{
|
||||
$this->setData($ret['model_base_data'])
|
||||
->isModified($ret['model_base_ismodfied'])
|
||||
->setPostedData($ret['posted_data']);
|
||||
}
|
||||
if($return) return $ret;
|
||||
|
||||
print_a($ret);
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME - move e_model_admin to e_model_admin.php
|
||||
|
||||
/**
|
||||
* Base e107 Admin Model class
|
||||
*
|
||||
* @package e107
|
||||
* @category e107_handlers
|
||||
* @version $Id$
|
||||
* @author SecretR
|
||||
* @copyright Copyright (C) 2008-2010 e107 Inc.
|
||||
*/
|
||||
class e_admin_model extends e_front_model
|
||||
{
|
||||
/**
|
||||
* Save data to DB
|
||||
*
|
||||
* @param boolen $from_post
|
||||
*/
|
||||
public function save($from_post = true, $force = false, $session_messages = false)
|
||||
{
|
||||
if(!$this->getFieldIdName())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if($from_post)
|
||||
{
|
||||
//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();
|
||||
if($ret)
|
||||
{
|
||||
if($destroy)
|
||||
{
|
||||
$this->setMessages($session_messages)->destroy();
|
||||
}
|
||||
}
|
||||
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
|
||||
*/
|
||||
protected function dbInsert($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Insert($this->getModelTable(), $this->toSqlQuery('create'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
$this->addMessageError('SQL Insert Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->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
|
||||
*/
|
||||
protected function dbReplace($force = false, $session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError() || (!$this->data_has_changed && !$force))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Insert($this->getModelTable(), $this->toSqlQuery('replace'));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Replace Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->getLastErrorText());
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
protected function dbDelete($session_messages = false)
|
||||
{
|
||||
$this->_db_errno = 0;
|
||||
$this->_db_errmsg = '';
|
||||
if($this->hasError())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(!$this->getId())
|
||||
{
|
||||
$this->addMessageError('Record not found', $session_messages); //TODO - Lan
|
||||
return 0;
|
||||
}
|
||||
$sql = e107::getDb();
|
||||
$res = $sql->db_Delete($this->getModelTable(), $this->getFieldIdName().'='.intval($this->getId()));
|
||||
if(!$res)
|
||||
{
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if($this->_db_errno)
|
||||
{
|
||||
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$this->_db_errno.': '.$sql->getLastErrorText());
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Model collection handler
|
||||
*/
|
||||
class e_tree_model extends e_model
|
||||
class e_tree_model extends e_front_model
|
||||
{
|
||||
/**
|
||||
* Current model DB table, used in all db calls
|
||||
@@ -2515,9 +2666,17 @@ class e_tree_model extends e_model
|
||||
}
|
||||
return (string) e107::getArrayStorage()->WriteArray($this->toArray($total), $AddSlashes);
|
||||
}
|
||||
|
||||
public function update()
|
||||
{
|
||||
}
|
||||
|
||||
class e_admin_tree_model extends e_tree_model
|
||||
public function delete()
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
class e_front_tree_model extends e_tree_model
|
||||
{
|
||||
/**
|
||||
* @var integer Last SQL error number
|
||||
@@ -2561,53 +2720,6 @@ class e_admin_tree_model extends e_tree_model
|
||||
return $this->hasSqlError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch Delete records
|
||||
* @param mixed $ids
|
||||
* @param boolean $destroy [optional] destroy object instance after db delete
|
||||
* @param boolean $session_messages [optional]
|
||||
* @return integer deleted records number or false on DB error
|
||||
*/
|
||||
public function delete($ids, $destroy = true, $session_messages = false)
|
||||
{
|
||||
if(!$ids) return 0;
|
||||
|
||||
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.')');
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if(!$res)
|
||||
{
|
||||
if($sql->getLastErrorNumber())
|
||||
{
|
||||
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$sql->getLastErrorNumber().': '.$sql->getLastErrorText());
|
||||
}
|
||||
}
|
||||
elseif($destroy)
|
||||
{
|
||||
foreach ($ids as $id)
|
||||
{
|
||||
if($this->hasNode($id))
|
||||
{
|
||||
$this->getNode($id)->setMessages($session_messages);
|
||||
call_user_func(array($this->getNode(trim($id)), 'destroy')); // first call model destroy method if any
|
||||
$this->setNode($id, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch update tree records/nodes
|
||||
* @param string $field field name
|
||||
@@ -2669,3 +2781,55 @@ class e_admin_tree_model extends e_tree_model
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
class e_admin_tree_model extends e_front_tree_model
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* Batch Delete records
|
||||
* @param mixed $ids
|
||||
* @param boolean $destroy [optional] destroy object instance after db delete
|
||||
* @param boolean $session_messages [optional]
|
||||
* @return integer deleted records number or false on DB error
|
||||
*/
|
||||
public function delete($ids, $destroy = true, $session_messages = false)
|
||||
{
|
||||
if(!$ids) return 0;
|
||||
|
||||
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.')');
|
||||
$this->_db_errno = $sql->getLastErrorNumber();
|
||||
$this->_db_errmsg = $sql->getLastErrorText();
|
||||
if(!$res)
|
||||
{
|
||||
if($sql->getLastErrorNumber())
|
||||
{
|
||||
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
|
||||
$this->addMessageDebug('SQL Error #'.$sql->getLastErrorNumber().': '.$sql->getLastErrorText());
|
||||
}
|
||||
}
|
||||
elseif($destroy)
|
||||
{
|
||||
foreach ($ids as $id)
|
||||
{
|
||||
if($this->hasNode($id))
|
||||
{
|
||||
$this->getNode($id)->setMessages($session_messages);
|
||||
call_user_func(array($this->getNode(trim($id)), 'destroy')); // first call model destroy method if any
|
||||
$this->setNode($id, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $res;
|
||||
}
|
||||
}
|
@@ -21,142 +21,66 @@
|
||||
* Front-end User Models
|
||||
*/
|
||||
|
||||
if (!defined('e107_INIT')) { exit; }
|
||||
|
||||
/**
|
||||
* e_model abstract extension candidate (model_class.php)
|
||||
* TODO - e_model & e_admin_model need refactoring, make e_admin_model extension of e_front_model
|
||||
* We need DB interface, data validation, data security, etc. on front-end in most cases,
|
||||
* the only way is additional class between e_model and e_admin_model (to avoid code duplication)
|
||||
*/
|
||||
class e_front_model extends e_model
|
||||
if (!defined('e107_INIT'))
|
||||
{
|
||||
/**
|
||||
* Field type definitions
|
||||
* @var array
|
||||
*/
|
||||
protected $_posted_data = array();
|
||||
|
||||
/**
|
||||
* Get stored non-trusted data
|
||||
* @param string $field
|
||||
* @param mixed $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function getPosted($field = null, $default = null)
|
||||
{
|
||||
if(null === $field) return e107::getParser()->post_toForm($this->_posted_data);
|
||||
if(isset($this->_posted_data[$field]))
|
||||
{
|
||||
return e107::getParser()->post_toForm($this->_posted_data[$field]);
|
||||
}
|
||||
return $default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get non-trusted data if present, else model data
|
||||
* @param string $field
|
||||
* @param mixed $default
|
||||
* @return mixed
|
||||
*/
|
||||
public function getIfPosted($field, $default = null)
|
||||
{
|
||||
$posted = $this->getPosted($field);
|
||||
if(null === $posted)
|
||||
{
|
||||
return $this->get($field, $default);
|
||||
}
|
||||
return e107::getParser()->post_toForm($posted);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set non-trusted data
|
||||
* @param string $field
|
||||
* @param mixed $value
|
||||
* @return e_user_model
|
||||
*/
|
||||
public function setPosted($field, $value = null)
|
||||
{
|
||||
if(is_array($field))
|
||||
{
|
||||
$this->_posted_data = $field;
|
||||
}
|
||||
else $this->_posted_data[$field] = $value;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function unsetPosted($field)
|
||||
{
|
||||
if(null === $field) $this->_posted_data = array();
|
||||
else unset($this->_posted_data[$field]);
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Try to merge posted data with current user data
|
||||
* TODO - validate first
|
||||
*/
|
||||
final protected function mergePosted()
|
||||
{
|
||||
$this->setFieldTypeDefs(false);
|
||||
$error = false;
|
||||
foreach ($this->_posted_data as $field => $value)
|
||||
{
|
||||
if(!$this->isWritable($field) || !isset($this->_FIELD_TYPES[$field])) continue;
|
||||
|
||||
if($this->sanitize($this->_FIELD_TYPES[$field], $value))
|
||||
{
|
||||
$this->set($field, $value);
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = true;
|
||||
$this->addMessageError($field.': TODO message errors');
|
||||
}
|
||||
}
|
||||
|
||||
return $error;
|
||||
}
|
||||
|
||||
public function sanitize($type, &$value)
|
||||
{
|
||||
$tp = e107::getParser();
|
||||
switch ($type)
|
||||
{
|
||||
case 'int':
|
||||
case 'integer':
|
||||
$value = intval($this->toNumber($value));
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 'str':
|
||||
case 'string':
|
||||
$value = $tp->toDB($value);
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 'float':
|
||||
$value = $this->toNumber($value);
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 'bool':
|
||||
case 'boolean':
|
||||
$value = ($value ? true : false);
|
||||
return true;
|
||||
break;
|
||||
|
||||
case 'null':
|
||||
$value = ($value ? $tp->toDB($value) : null);
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
class e_user_model extends e_front_model
|
||||
{
|
||||
/**
|
||||
* Describes all model data, used as _FIELD_TYPE array as well
|
||||
* @var array
|
||||
*/
|
||||
protected $_data_fields = array(
|
||||
'user_id' => 'integer',
|
||||
'user_name' => 'string',
|
||||
'user_loginname' => 'string',
|
||||
'user_customtitle' => 'string',
|
||||
'user_password' => 'string',
|
||||
'user_sess' => 'string',
|
||||
'user_email' => 'string',
|
||||
'user_signature' => 'string',
|
||||
'user_image' => 'string',
|
||||
'user_hideemail' => 'integer',
|
||||
'user_join' => 'integer',
|
||||
'user_lastvisit' => 'integer',
|
||||
'user_currentvisit' => 'integer',
|
||||
'user_lastpost' => 'integer',
|
||||
'user_chats' => 'integer',
|
||||
'user_comments' => 'integer',
|
||||
'user_ip' => 'string',
|
||||
'user_ban' => 'integer',
|
||||
'user_prefs' => 'string',
|
||||
'user_visits' => 'integer',
|
||||
'user_admin' => 'integer',
|
||||
'user_login' => 'string',
|
||||
'user_class' => 'string',
|
||||
'user_perms' => 'string',
|
||||
'user_realm' => 'string',
|
||||
'user_pwchange' => 'integer',
|
||||
'user_xup' => 'string',
|
||||
);
|
||||
|
||||
/**
|
||||
* Validate required fields
|
||||
* @var array
|
||||
*/
|
||||
protected $_validation_rules = array(
|
||||
'user_name' => array('string', '1', 'LAN_USER_01', 'LAN_USER_HELP_01'), // TODO - regex
|
||||
'user_loginname' => array('string', '1', 'LAN_USER_02', 'LAN_USER_HELP_02'), // TODO - regex
|
||||
'user_password' => array('string', '5', 'LAN_USER_05', 'LAN_USER_HELP_05'), // TODO - pref - modify it somewhere below
|
||||
'user_email' => array('email', '', 'LAN_USER_08', 'LAN_USER_HELP_08'),
|
||||
);
|
||||
|
||||
/**
|
||||
* Validate optional fields - work in progress, not working yet
|
||||
* @var array
|
||||
*/
|
||||
protected $_optional_rules = array(
|
||||
'user_customtitle' => array('string', '1', 'LAN_USER_01'), // TODO - regex
|
||||
);
|
||||
|
||||
/**
|
||||
* @see e_model
|
||||
* @var string
|
||||
@@ -169,12 +93,6 @@ class e_user_model extends e_front_model
|
||||
*/
|
||||
protected $_field_id = 'user_id';
|
||||
|
||||
/**
|
||||
* Field type definitions
|
||||
* @var array
|
||||
*/
|
||||
protected $_FIELD_TYPES = array();
|
||||
|
||||
/**
|
||||
* @see e_model
|
||||
* @var string
|
||||
@@ -313,11 +231,13 @@ class e_user_model extends e_front_model
|
||||
|
||||
final public function checkEditorPerms($class = '')
|
||||
{
|
||||
if(!$this->hasEditor()) return false;
|
||||
if (!$this->hasEditor())
|
||||
return false;
|
||||
|
||||
$editor = $this->getEditor();
|
||||
|
||||
if('' !== $class) return ($editor->isAdmin() && $editor->checkClass($class));
|
||||
if ('' !== $class)
|
||||
return ($editor->isAdmin() && $editor->checkClass($class));
|
||||
|
||||
return $editor->isAdmin();
|
||||
}
|
||||
@@ -425,7 +345,8 @@ class e_user_model extends e_front_model
|
||||
*/
|
||||
public function isWritable($field)
|
||||
{
|
||||
if(!is_string($field)) return true;
|
||||
if (!is_string($field))
|
||||
return true;
|
||||
return !in_array($field, array($this->getFieldIdName(), 'user_admin', 'user_perms'));
|
||||
}
|
||||
|
||||
@@ -468,26 +389,38 @@ class e_user_model extends e_front_model
|
||||
/**
|
||||
* Send model data to DB
|
||||
*/
|
||||
public function save()
|
||||
public function save($force = false, $session = false)
|
||||
{
|
||||
if(!$this->getId())
|
||||
{
|
||||
return false; // TODO - message
|
||||
}
|
||||
if (!$this->checkEditorPerms())
|
||||
{
|
||||
return false; // TODO - message, admin log
|
||||
}
|
||||
|
||||
if($this->mergePosted() && $this->data_has_changed)
|
||||
// TODO - do the save manual in this order: validate() on user model, save() on extended fields, save() on user model
|
||||
$ret = parent::save(true, $force, $session);
|
||||
if(false !== $ret && null !== $this->_extended_model) // don't load extended fields if not already used
|
||||
{
|
||||
$update['data'] = $this->getData();
|
||||
$upate['WHERE'] = $this->getFieldIdName().'='.$this->getId();
|
||||
$upate['_FIELD_TYPES'] = $this->getFieldTypes();
|
||||
|
||||
return e107::getDb()->db_Update($this->getModelTable(), $upate);
|
||||
$ret_e = $this->_extended_model->save($force, $session);
|
||||
if(false !== $ret_e)
|
||||
{
|
||||
return ($ret_e + $ret);
|
||||
}
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function saveDebug($extended = true, $return = false, $undo = true)
|
||||
{
|
||||
$ret = array();
|
||||
$ret['CORE_FIELDS'] = parent::saveDebug(true, $undo);
|
||||
if($extended && null !== $this->_extended_model)
|
||||
{
|
||||
$ret['EXTENDED_FIELDS'] = $this->_extended_model->saveDebug(true, $undo);
|
||||
}
|
||||
|
||||
if($return) return $ret;
|
||||
print_a($ret);
|
||||
}
|
||||
|
||||
public function destroy()
|
||||
@@ -519,10 +452,18 @@ class e_system_user extends e_user_model
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns always false
|
||||
* Even if user data belongs to the current user, Current User interface
|
||||
* is not available
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
final public function isCurrent()
|
||||
{
|
||||
// check against current system user
|
||||
return ($this->getId() && $this->getId() == e107::getUser()->getId());
|
||||
//return ($this->getId() && $this->getId() == e107::getUser()->getId());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -535,7 +476,7 @@ class e_user extends e_user_model
|
||||
public function __construct()
|
||||
{
|
||||
// reference to self
|
||||
$this->setEditor($this);
|
||||
$this->load()->setEditor($this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -592,7 +533,9 @@ class e_user extends e_user_model
|
||||
// $this->initConstants(); - called after data is loaded
|
||||
|
||||
// FIXME - temporary here, for testing only!!!
|
||||
if(USER) $this->setData(get_user_data(USERID));
|
||||
|
||||
if (USER)
|
||||
$this->setData(get_user_data(USERID));
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -622,8 +565,17 @@ class e_user extends e_user_model
|
||||
}
|
||||
}
|
||||
|
||||
class e_user_extended_model extends e_model
|
||||
class e_user_extended_model extends e_front_model
|
||||
{
|
||||
/**
|
||||
* Describes known model fields
|
||||
* @var array
|
||||
*/
|
||||
protected $_data_fields = array(
|
||||
'user_extended_id' => 'integer',
|
||||
'user_hidden_fields' => 'string',
|
||||
);
|
||||
|
||||
/**
|
||||
* @see e_model
|
||||
* @var string
|
||||
@@ -725,7 +677,8 @@ class e_user_extended_model extends e_model
|
||||
public function getValue($field)
|
||||
{
|
||||
$field = 'user_'.$field;
|
||||
if(!$this->checkRead($field)) return null;
|
||||
if (!$this->checkRead($field))
|
||||
return null;
|
||||
return $this->get($field, $this->getDefault($field));
|
||||
}
|
||||
|
||||
@@ -739,7 +692,8 @@ class e_user_extended_model extends e_model
|
||||
public function setValue($field, $value)
|
||||
{
|
||||
$field = 'user_'.$field;
|
||||
if(!$this->checkWrite($field)) return $this;
|
||||
if (!$this->checkWrite($field))
|
||||
return $this;
|
||||
$this->set($field, $value, true);
|
||||
return $this;
|
||||
}
|
||||
@@ -801,7 +755,8 @@ class e_user_extended_model extends e_model
|
||||
*/
|
||||
public function load($force = false)
|
||||
{
|
||||
if($this->getId() && !$force) return $this;
|
||||
if ($this->getId() && !$force)
|
||||
return $this;
|
||||
|
||||
parent::load($this->getUser()->getId(), $force);
|
||||
$this->_loadAccess();
|
||||
@@ -815,7 +770,7 @@ class e_user_extended_model extends e_model
|
||||
protected function _loadAccess()
|
||||
{
|
||||
$struct_tree = $this->getExtendedStructure();
|
||||
if($this->getId() && $struct_tree->hasTree())
|
||||
if (/*$this->getId() && */$struct_tree->hasTree())
|
||||
{
|
||||
// load structure dependencies
|
||||
$ignore = array($this->getFieldIdName(), 'user_hidden_fields'); // TODO - user_hidden_fields? Old?
|
||||
@@ -837,15 +792,78 @@ class e_user_extended_model extends e_model
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build manage rules for single field
|
||||
* @param $structure_model
|
||||
* @return e_user_extended_model
|
||||
*/
|
||||
protected function _buildManageField(e_user_extended_structure_model $structure_model)
|
||||
{
|
||||
$ftype = $structure_model->getValue('type') == 6 ? 'integer' : 'string';
|
||||
|
||||
// 0- field control (html) attributes;1 - regex; 2 - validation error msg;
|
||||
$parms = explode('^,^', $structure_model->getValue('parms'));
|
||||
|
||||
// validaton rules
|
||||
$vtype = $parms[1] ? 'regex' : $ftype;
|
||||
$this->setValidationRule($structure_model->getValue('name'), array($vtype, $parms[1], $structure_model->getValue('text'), $parms[2]), $structure_model->getValue('required'));
|
||||
|
||||
// data type, required for sql query
|
||||
$this->_data_fields[$structure_model->getValue('name')] = $ftype;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build manage rules for single field
|
||||
* @param $structure_model
|
||||
* @return e_user_extended_model
|
||||
*/
|
||||
protected function _buildManageRules()
|
||||
{
|
||||
$struct_tree = $this->getExtendedStructure();
|
||||
if ($this->getId() && $struct_tree->hasTree())
|
||||
{
|
||||
// load structure dependencies TODO protected fields check as method
|
||||
$ignore = array($this->getFieldIdName(), 'user_hidden_fields'); // TODO - user_hidden_fields? Old?
|
||||
$fields = $struct_tree->getTree();
|
||||
foreach ($fields as $id => $field)
|
||||
{
|
||||
if (!in_array($field->getValue('name'), $ignore))
|
||||
{
|
||||
// build _data_type and rules
|
||||
$this->_buildManageField($field);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get extended structure tree
|
||||
* @return e_user_extended_structure_tree
|
||||
*/
|
||||
public function getExtendedStructure()
|
||||
{
|
||||
if(null === $this->_structure) $this->_structure = e107::getUserStructure();
|
||||
if (null === $this->_structure)
|
||||
$this->_structure = e107::getUserStructure();
|
||||
return $this->_structure;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build data types and rules on the fly and save
|
||||
* @see e107_handlers/e_front_model#save($from_post, $force, $session_messages)
|
||||
*/
|
||||
public function save($force = false, $session = false)
|
||||
{
|
||||
$this->_buildManageRules();
|
||||
return parent::save(true, $force, $session);
|
||||
}
|
||||
|
||||
public function saveDebug($retrun = false, $undo = true)
|
||||
{
|
||||
$this->_buildManageRules();
|
||||
parent::saveDebug($return, $undo);
|
||||
}
|
||||
}
|
||||
|
||||
class e_user_extended_structure_model extends e_model
|
||||
|
@@ -655,14 +655,6 @@ class e_validator
|
||||
return false;
|
||||
}
|
||||
|
||||
if('varchar' == $type && !varset($tmp[1])) $tmp[1] = 255;
|
||||
|
||||
if(is_numeric(varset($tmp[1])) && (integer) $tmp[1] < $length)
|
||||
{
|
||||
$this->addValidateResult($name, self::ERR_TOO_LONG);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!($value[0] && $value[1] && $value[0] == $value[1]))
|
||||
{
|
||||
$this->addValidateResult($name, self::ERR_FIELDS_MATCH);
|
||||
|
@@ -117,6 +117,7 @@ define('LAN_USER_86', 'Maximum avatar size is --WIDTH-- x --HEIGHT-- pixels');
|
||||
|
||||
|
||||
// Error messages for when user data is missing. Done this way so that other code can override the default messages
|
||||
// FIXME - do we need this?
|
||||
if (!defined('USER_ERR_01')) { define('USER_ERR_01','Missing value'); }
|
||||
if (!defined('USER_ERR_02')) { define('USER_ERR_02','Unexpected value'); }
|
||||
if (!defined('USER_ERR_03')) { define('USER_ERR_03','Value contains invalid characters'); }
|
||||
|
Reference in New Issue
Block a user