1
0
mirror of https://github.com/e107inc/e107.git synced 2025-01-17 12:48:24 +01:00

Various system fixes, improvements and code flexibility (base models, user model, sql handler, user signup/handling)

This commit is contained in:
secretr 2012-02-07 16:37:44 +00:00
parent 3f4b7c7f20
commit 3bc59210af
11 changed files with 124 additions and 43 deletions

View File

@ -1073,7 +1073,7 @@ if (!file_exists(FOOTERF))
message_handler('CRITICAL_ERROR', 'Unable to find file: '.FOOTERF, __LINE__ - 2, __FILE__);
}
define('LOGINMESSAGE', '');
//define('LOGINMESSAGE', ''); - not needed, breaks login messages
define('OPEN_BASEDIR', (ini_get('open_basedir') ? true : false));
define('SAFE_MODE', (ini_get('safe_mode') ? true : false));
define('FILE_UPLOADS', (ini_get('file_uploads') ? true : false));

View File

@ -194,7 +194,7 @@ foreach($catList as $cat)
$done_heading = TRUE;
}
$replace = array(
$tp->toHTML($ext['user_extended_struct_text'], FALSE, 'emotes_off,defs'),
$tp->toHTML(deftrue($ext['user_extended_struct_text'], $ext['user_extended_struct_text']), FALSE, 'emotes_off,defs'),
($ext['user_extended_struct_required'] == 1 ? $EXTENDED_USER_FIELD_REQUIRED : ''),
$usere->user_extended_edit($ext, $_POST['ue']['user_'.$ext['user_extended_struct_name']])
);

View File

@ -3622,6 +3622,8 @@ class e_admin_ui extends e_admin_controller_ui
{
$vttl = $this->getUI()->renderValue($field, $value, $this->getFieldAttr($field));
$this->getTreeModel()->addMessageSuccess(sprintf(LAN_UI_BATCH_UPDATE_SUCCESS, $vttl, $cnt));
// force reload the collection from DB, fix some issues as 'observer' is executed before the batch handler
$this->getTreeModel()->setParam('db_query', $this->_modifyListQry(false, false, false, false, $this->listQry))->load(true);
}
$this->getTreeModel()->setMessages();
return $cnt;

View File

@ -1158,7 +1158,7 @@ class e107
/**
* Retrieve IP/ban handler singleton object
*
* @return language
* @return eIPHandler
*/
public static function getIPHandler()
{

View File

@ -441,68 +441,68 @@ class userlogin
switch ($reason)
{
case LOGIN_ABORT : // alt_auth reject
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_21);
$this->genNote($this->userIP,$username, 'Alt_auth: '.LAN_LOGIN_14);
$this->logNote('LAN_ROLL_LOG_04', 'Alt_Auth: '.$username);
$doCheck = TRUE;
break;
case LOGIN_DB_ERROR : // alt_auth couldn't add valid user
define("LOGINMESSAGE", LAN_LOGIN_31."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_31);
$this->genNote($username, 'Alt_auth: '.LAN_LOGIN_30);
// $this->logNote('LAN_ROLL_LOG_04', 'Alt_Auth: '.$username); // Added in alt_auth login
$doCheck = TRUE;
break;
case LOGIN_BAD_PW :
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_21);
$this->logNote('LAN_ROLL_LOG_03', $username);
break;
case LOGIN_CHAP_FAIL :
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_21);
$this->logNote('LAN_ROLL_LOG_03', 'CHAP: '.$username);
break;
case LOGIN_BAD_USER :
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_21);
$this->genNote($username, LAN_LOGIN_14);
$this->logNote('LAN_ROLL_LOG_04', $username);
$doCheck = TRUE;
break;
case LOGIN_BAD_USERNAME :
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_21);
$this->logNote('LAN_ROLL_LOG_08', $username);
break;
case LOGIN_MULTIPLE :
define("LOGINMESSAGE", LAN_LOGIN_24."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_24);
$this->logNote('LAN_ROLL_LOG_07', "U: {$username} IP: {$this->userIP}");
$this->genNote($username, LAN_LOGIN_16);
$doCheck = TRUE;
break;
case LOGIN_BAD_CODE :
define("LOGINMESSAGE", LAN_LOGIN_23."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_23);
$this->logNote('LAN_ROLL_LOG_02', $username);
break;
case LOGIN_NOT_ACTIVATED :
$srch = array("[","]");
$repl = array("<a href='".e_BASE_ABS."signup.php?resend'>","</a>");
define("LOGINMESSAGE", str_replace($srch,$repl,LAN_LOGIN_22)."<br /><br />");
define("LOGINMESSAGE", str_replace($srch,$repl,LAN_LOGIN_22));
$this->logNote('LAN_ROLL_LOG_05', $username);
$this->genNote($username, LAN_LOGIN_27);
$doCheck = TRUE;
break;
case LOGIN_BLANK_FIELD :
define("LOGINMESSAGE", LAN_LOGIN_20."<br /><br />");
define("LOGINMESSAGE", LAN_LOGIN_20);
$this->logNote('LAN_ROLL_LOG_01', $username);
break;
case LOGIN_BAD_TRIGGER :
define("LOGINMESSAGE", $extra_text."<br /><br />");
define("LOGINMESSAGE", $extra_text);
$this->logNote('LAN_ROLL_LOG_06', $username);
break;
case LOGIN_BANNED :
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />"); // Just give 'incorrect login' message
define("LOGINMESSAGE", LAN_LOGIN_21); // Just give 'incorrect login' message
$this->genNote($username, LAN_LOGIN_25);
$this->logNote('LAN_ROLL_LOG_09', $username);
break;
default : // Something's gone wrong!
define("LOGINMESSAGE", LAN_LOGIN_21."<br /><br />"); // Just give 'incorrect login' message
define("LOGINMESSAGE", LAN_LOGIN_21); // Just give 'incorrect login' message
$this->genNote($username, LAN_LOGIN_26);
$this->logNote('LAN_ROLL_LOG_10', $username);
}

View File

@ -94,7 +94,7 @@ class e_object
{
if ($this->getFieldIdName())
{
return $this->get($this->getFieldIdName(), 0);
return $this->get($this->getFieldIdName(), null);
}
return $this->get('id', 0);
}
@ -108,7 +108,7 @@ class e_object
{
if ($this->getFieldIdName())
{
return $this->set($this->getFieldIdName(), intval($id));
return $this->set($this->getFieldIdName(), $id);
}
return $this;
}
@ -1340,7 +1340,7 @@ class e_model extends e_object
$this->setData(array())
->_clearCacheData();
}
$id = intval($id);
$id = e107::getParser()->toDB($id);
if(!$id)
{
return $this;
@ -2377,11 +2377,18 @@ class e_front_model extends e_model
}
$qry['_FIELD_TYPES'] = $this->_FIELD_TYPES; //DB field types are optional
$qry['data'][$this->getFieldIdName()] = $this->getId();
$qry['_FIELD_TYPES'][$this->getFieldIdName()] = 'int';
// support for tables with no auto-increment PK
$id = $this->getId();
$qry['data'][$this->getFieldIdName()] = $id;
if($action == 'create' && !$id) $qry['_FIELD_TYPES'][$this->getFieldIdName()] = 'NULL';
elseif(is_numeric($id)) $qry['_FIELD_TYPES'][$this->getFieldIdName()] = 'integer';
else $qry['_FIELD_TYPES'][$this->getFieldIdName()] = 'string';
foreach ($this->_data_fields as $key => $type)
{
if($key == $this->getFieldIdName())
{
continue;
@ -2396,7 +2403,7 @@ class e_front_model extends e_model
switch($action)
{
case 'create':
$qry['data'][$this->getFieldIdName()] = 0;
//$qry['data'][$this->getFieldIdName()] = NULL;
break;
case 'replace':
$qry['_REPLACE'] = true;
@ -2404,7 +2411,9 @@ class e_front_model extends e_model
case 'update':
unset($qry['data'][$this->getFieldIdName()]);
$qry['WHERE'] = $this->getFieldIdName().'='.intval($this->getId()); //intval just in case...
if(is_numeric($id)) $id = intval($id);
else $id = "'".e107::getParser()->toDB($id)."'";
$qry['WHERE'] = $this->getFieldIdName().'='.$id;
break;
}
@ -2458,6 +2467,7 @@ class e_front_model extends e_model
case 'str':
case 'string':
case 'array':
return $tp->toDB($value);
break;
@ -2555,6 +2565,28 @@ class e_front_model extends e_model
return false;
}
/**
* Update record
*
* @param boolen $from_post
* @return boolean|integer
*/
public function update($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);
}
return $this->dbUpdate($force, $session_messages);
}
/**
* Exactly what it says - your debug helper
@ -2629,6 +2661,24 @@ class e_admin_model extends e_front_model
return $this->dbInsert($session_messages);
}
/**
* Insert record
*
* @param boolen $from_post
* @param boolean $session_messages
* @return integer inserted ID or false on error
*/
public function insert($from_post = true, $session_messages = false)
{
if($from_post)
{
//no strict copy, validate & sanitize
$this->mergePostedData(false, true, true);
}
return $this->dbInsert($session_messages);
}
public function delete($destroy = true, $session_messages = false)
{
@ -2728,7 +2778,10 @@ class e_admin_model extends e_front_model
return 0;
}
$sql = e107::getDb();
$res = $sql->db_Delete($this->getModelTable(), $this->getFieldIdName().'='.intval($this->getId()));
$id = $this->getId();
if(is_numeric($id)) $id = intval($id);
else $id = "'".e107::getParser()->toDB($id)."'";
$res = $sql->db_Delete($this->getModelTable(), $this->getFieldIdName().'='.$id);
if(!$res)
{
$this->_db_errno = $sql->getLastErrorNumber();
@ -2945,7 +2998,9 @@ class e_tree_model extends e_front_model
// auto-load all
if(!$this->getParam('db_query') && $this->getModelTable())
{
$this->setParam('db_query', 'SELECT'.(!$this->getParam('nocount') ? ' SQL_CALC_FOUND_ROWS' : '').' * FROM #'.$this->getModelTable()
$this->setParam('db_query', 'SELECT'.(!$this->getParam('nocount') ? ' SQL_CALC_FOUND_ROWS' : '')
.($this->getParam('db_cols') ? ' '.$this->getParam('db_cols') : ' *').' FROM #'.$this->getModelTable()
.($this->getParam('db_joins') ? ' '.$this->getParam('db_joins') : '')
.($this->getParam('db_where') ? ' WHERE '.$this->getParam('db_where') : '')
.($this->getParam('db_order') ? ' ORDER BY '.$this->getParam('db_order') : '')
.($this->getParam('db_limit') ? ' LIMIT '.$this->getParam('db_limit') : '')
@ -3216,9 +3271,9 @@ class e_front_tree_model extends e_tree_model
if($sanitize)
{
$ids = array_map('intval', $ids);
$ids = array_map(array($tp, 'toDB'), $ids);
$field = $tp->toDb($field);
$value = "'".$tp->toDb($value)."'";
$value = "'".$tp->toDB($value)."'";
}
$idstr = implode(', ', $ids);
@ -3281,7 +3336,8 @@ class e_admin_tree_model extends e_front_tree_model
$ids = explode(',', $ids);
}
$ids = array_map('intval', $ids);
$tp = e107::getParser();
$ids = array_map(array($tp, 'toDB'), $ids);
$idstr = implode(', ', $ids);
$sql = e107::getDb();
@ -3321,12 +3377,13 @@ class e_admin_tree_model extends e_front_tree_model
*/
public function copy($ids)
{
$ids = array_map('intval', $ids);
$tp = e107::getParser();
$ids = array_map(array($tp, 'toDB'), $ids);
$idstr = implode(', ', $ids);
$sql = e107::getDb();
if($res = $sql->db_CopyRow($this->getModelTable(), "*", $this->getFieldIdName().' IN ('.$idstr.')'))
$res = $sql->db_CopyRow($this->getModelTable(), "*", $this->getFieldIdName().' IN ('.$idstr.')');
if(false !== $res)
{
$this->addMessageSuccess('Copied #'.$idstr);
}
@ -3334,7 +3391,7 @@ class e_admin_tree_model extends e_front_tree_model
{
if($sql->getLastErrorNumber())
{
$this->addMessageError('SQL Delete Error', $session_messages); //TODO - Lan
$this->addMessageError('SQL Copy Error', $session_messages); //TODO - Lan
$this->addMessageDebug('SQL Error #'.$sql->getLastErrorNumber().': '.$sql->getLastErrorText());
}
}

View File

@ -668,6 +668,14 @@ class e_db_mysql
case 'escape':
return "'".mysql_real_escape_string($fieldValue)."'";
break;
case 'array':
if(is_array($fieldValue))
{
return "'".e107::getArrayStorage()->writeArray($fieldValue, true)."'";
}
return "'". (string) $fieldValue."'";
break;
case 'todb':
default:
@ -1442,7 +1450,7 @@ class e_db_mysql
{
if(!$table || !$args )
{
return;
return false;
}
if($fields == '*')

View File

@ -174,9 +174,10 @@ class e107_user_extended
case EUF_LANGUAGE :
case EUF_PREDEFINED :
case EUF_CHECKBOX :
case EUF_RADIO :
$target['_FIELD_TYPES'][$k] = 'todb';
break;
case EUF_RADIO :
case EUF_INTEGER :
$target['_FIELD_TYPES'][$k] = 'int';
break;

View File

@ -360,7 +360,7 @@ class UserHandler
$digitLength = strlen($digit) - 1;
// Create alpha numeric [A-Z][a-z]
$alphaNum = $alpha.$digit;
$alphaNum = $alpha.$digit.chr(45).chr(95); // add support for - and _
$alphaNumLength = strlen($alphaNum) - 1;
// Next character of seed (if used)

View File

@ -26,7 +26,7 @@ if (!defined('e107_INIT'))
exit;
}
class e_user_model extends e_front_model
class e_user_model extends e_admin_model
{
/**
* Describes all model data, used as _FIELD_TYPE array as well
@ -888,6 +888,7 @@ class e_user_model extends e_front_model
// TODO - do the save manually 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
{
$ret_e = $this->_extended_model->save($force, $session);
@ -1352,7 +1353,7 @@ class e_user extends e_user_model
}
}
class e_user_extended_model extends e_front_model
class e_user_extended_model extends e_admin_model
{
/**
* Describes known model fields
@ -1740,10 +1741,11 @@ class e_user_extended_model extends e_front_model
// 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'));
$name = 'user_'.$structure_model->getValue('name');
$this->setValidationRule($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;
$this->_data_fields[$name] = $ftype;
return $this;
}
@ -1762,7 +1764,7 @@ class e_user_extended_model extends e_front_model
$fields = $struct_tree->getTree();
foreach ($fields as $id => $field)
{
if (!in_array($field->getValue('name'), $ignore))
if (!in_array('user_'.$field->getValue('name'), $ignore) && !$field->isCategory())
{
// build _data_type and rules
$this->_buildManageField($field);
@ -1808,7 +1810,17 @@ class e_user_extended_model extends e_front_model
*/
public function save($force = false, $session = false)
{
// when not loaded from db, see the construct check
if(!$this->getId())
{
$this->setId($this->getUser()->getId());
}
$this->_buildManageRules();
// insert new record
if(!e107::getDb()->db_Count('user_extended', '(user_extended_id)', "user_extended_id=".$this->getId()))
{
return $this->insert(true, $session);
}
return parent::save(true, $force, $session);
}
@ -2116,7 +2128,8 @@ class e_user_pref extends e_front_model
*/
public function apply()
{
$this->_user->set('user_prefs', $this->toString(true));
$data = $this->hasData() ? $this->toString(true) : '';
$this->_user->set('user_prefs', $data);
return $this;
}

View File

@ -425,7 +425,7 @@ if ($dataToSave && !$promptPassword)
//print_a($changedEUFData);
// ***** Next line creates a record which presumably should be there anyway, so could generate an error
$sql->db_Select_gen("INSERT INTO #user_extended (user_extended_id, user_hidden_fields) values ('".intval($inp)."', '')");
if (!$sql->db_Update('user_extended', $changedEUFData))
if (false === $sql->db_Update('user_extended', $changedEUFData))
{
$message .= '<br />Error updating EUF';
}