my_parent_controller();
Response::handleSessionTimeout("bo");
//load language file
$this->load_language_backoffice();
$this->lang->load('backoffice/my_profile', 'fr');
$this->load->model("user_model");
$this->load->model("user_activity_log_model");
}
public function update() {
if($this->input->post()) {
$data = array();
$data["mdetail"] = array();
$pwd = $this->validate($_POST, "pwd");
$new_pwd = $this->validate($_POST, "new_pwd");
$username = $this->validate($_POST, "username");
$email = $this->validate($_POST, "email");
if($pwd["error"] || $new_pwd["error"] || $email["error"]) {
if($pwd["error"]){
array_push($data["mdetail"], array("field" => "old_password", "message" => $pwd["message"]));
}
if($new_pwd["error"]){
array_push($data["mdetail"], array("field" => "new_password", "message" => $new_pwd["message"]));
}
if($username["error"]){
array_push($data["mdetail"], array("field" => "username", "message" => $username["message"]));
}
if($email["error"]){
array_push($data["mdetail"], array("field" => "email_address", "message" => $email["message"]));
}
$data["mtype"] = "error";
$data["message"] = $this->lang->line("check_input");
output_to_json($this, $data);
} else {
//no error so save the updates
$insert = $this->user_model->update_user_profile($this->data["logged_in"], $_POST);
if($insert){
$logs = $this->save_activity_logs($_POST);
if(!$logs["success"]) {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("unknown_error_on_act_logs")
));
}else{
$this->update_session($_POST, $logs["changes"]);
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("updated_profile_info")
));
}
}else{
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("saving_act_logs_err")
));
}
}
}else{
show_404();
}
}
private function save_activity_logs($data){
$activity_logs = "";
$changes = array();
if($data["new_password"]!= "" && $data["confirm_new_password"] != ""){
//updated password
$activity_logs .=" - ".$this->lang->line("change_pwd")."
";
array_push($changes, "new_password");
}
if(!$this->user_model->check_if_something_is_changed($this->data["logged_in"]["user_id"], $data["username"], "username")){
//updated username
$activity_logs .=" - ".$this->lang->line("change_username")."
";
array_push($changes, "username");
}
if(strtolower($this->data["logged_in"]["email_address"]) != strtolower($data["email_address"])){
//updated email address
$activity_logs .=" - ".$this->lang->line("change_email")."
";
array_push($changes, "email_address");
}
if(strtolower($this->data["logged_in"]["fullname"]) != strtolower($data["first_name"]." ".$data["last_name"])){
//updated full name
$activity_logs .=" - ".$this->lang->line("change_employee_name")."
";
array_push($changes, "fullname");
}
if($activity_logs != ""){
return array("success" => $this->user_activity_log_model->add_activity_log(array(
"description" => $activity_logs,
"user_id" => $this->data["logged_in"]["user_id"],
"action" => "EDIT",
"table_origin"=> "user",
"reference_id"=> $this->data["logged_in"]["user_id"]
)),"changes" => $changes);
}
return array("success" => 1, "changes" => $changes);
}
private function validate($data, $query){
$result = array("error" => false);
switch($query){
case "pwd" :
$check_pwd = $this->user_model->check_password($this->data["logged_in"]["user_id"], $data["old_password"]);
if(!$check_pwd){
$result["error"] = true;
$result["message"] = $this->lang->line("old_pwd_didnt_match");
}
break;
case "new_pwd" :
if(($data["new_password"]!= "" && $data["confirm_new_password"] != "") && (strtolower($data["new_password"]) != strtolower($data["confirm_new_password"]))){
$result["error"] = true;
$result["message"] = $this->lang->line("old_new_pwd_didnt_match");
} else if(($data["new_password"] == "" && $data["confirm_new_password"] != "") || ($data["new_password"] != "" && $data["confirm_new_password"] == "")){
$result["error"] = true;
$result["message"] = $this->lang->line("old_new_pwd_didnt_match");
}
break;
case "fullname" :
$check_name = $this->user_model->check_password($this->data["logged_in"]["user_id"], $this->data["logged_in"]["role_id"], $data["first_name"], $data["last_name"]);
if($check_name){
$result["error"] = true;
$result["message"] = $this->lang->line("full_name_didnt_match");
}
break;
case "username" :
$check_name = $this->user_model->check_username($data["username"], $this->data["logged_in"]["user_id"]);
if($check_name){
$result["error"] = true;
$result["message"] = $this->lang->line("username_exist");
}
break;
case "email" :
$check_name = $this->user_model->check_email($data["email_address"], $this->data["logged_in"]["user_id"], BO_USER_ROLES);
if($check_name){
$result["error"] = true;
$result["message"] = $this->lang->line("email_exist");
}
break;
default :
$result["error"] = false;
break;
}
return $result;
}
private function update_session($data, $changes){
//get active session
$employee_session = $this->data['logged_in'];
// Update Session
foreach($changes as $row){
if($row == "fullname"){
$employee_session["fullname"] = $data["first_name"]." ".$data["last_name"];
}else {
$employee_session[$row] = $data[$row];
}
}
//unset remember me
$employee_session["remember_me"] = '';
$this->session->set_userdata(array("logged_in" => $employee_session));
}
}