mirror of
https://github.com/Mibew/mibew.git
synced 2025-01-31 13:24:41 +03:00
Refactor update_operator function
This commit is contained in:
parent
614f02a108
commit
05f5a606d1
@ -204,18 +204,29 @@ class ProfileController extends AbstractController
|
||||
return $this->redirect($redirect_to);
|
||||
}
|
||||
|
||||
// Update existing operator
|
||||
update_operator($op_id, $login, $email, $password, $local_name, $common_name, $code);
|
||||
// Mix old operator's fields with updated values
|
||||
$target_operator = array(
|
||||
'vclogin' => $login,
|
||||
'vcemail' => $email,
|
||||
'vclocalename' => $local_name,
|
||||
'vccommonname' => $common_name,
|
||||
'code' => $code,
|
||||
) + operator_by_id($op_id);
|
||||
// Set the password only if it's not an empty string.
|
||||
if ($password !== '') {
|
||||
$target_operator['vcpassword'] = calculate_password_hash($login, $password);
|
||||
}
|
||||
// Update operator's fields in the database.
|
||||
update_operator($target_operator);
|
||||
|
||||
// Operator data are cached in the authentication manager, thus we need
|
||||
// Operator's data are cached in the authentication manager, thus we need
|
||||
// to manually update them.
|
||||
if (!empty($password) && $op_id == $operator['operatorid']) {
|
||||
if ($target_operator['operatorid'] == $operator['operatorid']) {
|
||||
// Check if the admin has set his password for the first time.
|
||||
$to_dashboard = check_password_hash($login, '', $operator['vcpassword']) && $password != '';
|
||||
|
||||
// Update operator's password.
|
||||
$operator['vcpassword'] = calculate_password_hash($login, $password);
|
||||
$this->getAuthenticationManager()->setOperator($operator);
|
||||
// Update operator's fields.
|
||||
$this->getAuthenticationManager()->setOperator($target_operator);
|
||||
|
||||
// Redirect the admin to the home page if needed.
|
||||
if ($to_dashboard) {
|
||||
|
@ -277,45 +277,55 @@ function operator_is_disabled($operator)
|
||||
/**
|
||||
* Update existing operator's info.
|
||||
*
|
||||
* If $password argument is empty operators password will not be changed.
|
||||
* @param array $operator Associative array of operator's fields. This array
|
||||
* must contain the following keys:
|
||||
* - operatorid,
|
||||
* - vclogin,
|
||||
* - vcpassword,
|
||||
* - vclocalename,
|
||||
* - vccommonname,
|
||||
* - vcemail,
|
||||
* - dtmlastvisited,
|
||||
* - istatus,
|
||||
* - idisabled,
|
||||
* - vcavatar,
|
||||
* - iperm,
|
||||
* - dtmrestore,
|
||||
* - vcrestoretoken,
|
||||
* - code
|
||||
*
|
||||
* @param int $operator_id ID of operator to update
|
||||
* @param string $login Operator's login
|
||||
* @param string $email Operator's
|
||||
* @param string $password Operator's password
|
||||
* @param string $locale_name Operator's local name
|
||||
* @param string $common_name Operator's international name
|
||||
* @param string $code Operator's code which use to start chat with specified
|
||||
* operator
|
||||
* @throws \InvalidArgumentException if not all operator's fields are in place.
|
||||
*/
|
||||
function update_operator(
|
||||
$operator_id,
|
||||
$login,
|
||||
$email,
|
||||
$password,
|
||||
$locale_name,
|
||||
$common_name,
|
||||
$code
|
||||
) {
|
||||
$db = Database::getInstance();
|
||||
$values = array(
|
||||
':login' => $login,
|
||||
':localname' => $locale_name,
|
||||
':commonname' => $common_name,
|
||||
':email' => $email,
|
||||
':operatorid' => $operator_id,
|
||||
':code' => $code,
|
||||
);
|
||||
if ($password) {
|
||||
$values[':password'] = calculate_password_hash($login, $password);
|
||||
function update_operator($operator)
|
||||
{
|
||||
if (!check_operator_fields($operator)) {
|
||||
throw new \InvalidArgumentException('Not all operator fields are specified');
|
||||
}
|
||||
$db->query(
|
||||
("UPDATE {operator} SET vclogin = :login, "
|
||||
. ($password ? " vcpassword=:password, " : "")
|
||||
. "vclocalename = :localname, vccommonname = :commonname, "
|
||||
. "vcemail = :email, code = :code "
|
||||
. "WHERE operatorid = :operatorid"),
|
||||
$values
|
||||
|
||||
Database::getInstance()->query(
|
||||
('UPDATE {operator} SET vclogin = :login, vcpassword=:password, '
|
||||
. 'vclocalename = :local_name, vccommonname = :common_name, '
|
||||
. 'vcemail = :email, dtmlastvisited = :last_visited, '
|
||||
. 'istatus = :status, idisabled = :disabled, vcavatar = :avatar, '
|
||||
. 'iperm = :permissions, dtmrestore = :restore_time, '
|
||||
. 'vcrestoretoken = :restore_token, code = :code '
|
||||
. 'WHERE operatorid = :id'),
|
||||
array(
|
||||
':id' => $operator['operatorid'],
|
||||
':login' => $operator['vclogin'],
|
||||
':password' => $operator['vcpassword'],
|
||||
':local_name' => $operator['vclocalename'],
|
||||
':common_name' => $operator['vccommonname'],
|
||||
':email' => $operator['vcemail'],
|
||||
':last_visited' => $operator['dtmlastvisited'],
|
||||
':status' => $operator['istatus'],
|
||||
':disabled' => $operator['idisabled'],
|
||||
':avatar' => $operator['vcavatar'],
|
||||
':permissions' => $operator['iperm'],
|
||||
':restore_time' => $operator['dtmrestore'],
|
||||
':restore_token' => $operator['vcrestoretoken'],
|
||||
':code' => $operator['code'],
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@ -792,3 +802,31 @@ function enable_operator($operator_id)
|
||||
array('0', $operator_id)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks that operator array has all needed fields.
|
||||
*
|
||||
* @param array $operator Associative operator's array.
|
||||
* @return bool Boolean true if all the fields are in place and false otherwise.
|
||||
*/
|
||||
function check_operator_fields($operator)
|
||||
{
|
||||
$obligatory_fields = array(
|
||||
'operatorid',
|
||||
'vclogin',
|
||||
'vcpassword',
|
||||
'vclocalename',
|
||||
'vccommonname',
|
||||
'vcemail',
|
||||
'dtmlastvisited',
|
||||
'istatus',
|
||||
'idisabled',
|
||||
'vcavatar',
|
||||
'iperm',
|
||||
'dtmrestore',
|
||||
'vcrestoretoken',
|
||||
'code',
|
||||
);
|
||||
|
||||
return (count(array_diff($obligatory_fields, array_keys($operator))) == 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user