my_parent_controller();
Response::handleSessionTimeout("bo");
//load language file
$this->load_language_backoffice();
$this->lang->load('backoffice/system_config', 'fr');
$this->load->model("user_model");
$this->load->model("user_activity_log_model");
}
public function add_new_user(){
if($this->input->post()) {
$data = array();
$data["mdetail"] = array();
$pwd = $this->validate($this->input->post(NULL, TRUE), "pwd", null);
$username = $this->validate($this->input->post(NULL, TRUE), "username", null);
$email = $this->validate($this->input->post(NULL, TRUE), "email", null);
if ($pwd["error"] || $username["error"] || $email["error"]) {
if ($pwd["error"]) {
array_push($data["mdetail"], array("field" => "password", "message" => $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 add new user
$insert_id = $this->user_model->add_new_user($this->input->post(NULL, TRUE));
if ($insert_id) {
$logs = $this->activity_logs_for_add($insert_id);
if (!$logs) {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("saving_act_logs_err")
));
} else {
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("new_user_added")
));
}
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("unknown_error_on_act_logs")
));
}
}
}else{
show_404();
}
}
private function activity_logs_for_add($user_id)
{
return $this->user_activity_log_model->add_activity_log(array(
"description" => "Add new user",
"user_id" => $this->data["logged_in"]["user_id"],
"action" => "ADD",
"table_origin" => "user",
"reference_id" => $user_id
));
}
public function edit_user_account($user_id){
if($this->input->post()){
$data = array();
$data["mdetail"] = array();
$pwd = $this->validate($this->input->post(NULL, TRUE), "pwd", $user_id);
$username = $this->validate($this->input->post(NULL, TRUE), "username", $user_id);
$email = $this->validate($this->input->post(NULL, TRUE), "email", $user_id);
if ($pwd["error"] || $username["error"] || $email["error"]) {
if ($pwd["error"]) {
array_push($data["mdetail"], array("field" => "password", "message" => $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 {
$activity_logs = $this->activity_logs_b4_update($user_id, $this->input->post(NULL, TRUE));
//no error so add new user
$update = $this->user_model->edit_user_account($user_id, $this->input->post(NULL, TRUE));
if ($update) {
$logs = $this->activity_logs_for_edit($user_id, $activity_logs);
if (!$logs) {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("saving_act_logs_err")
));
} else {
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("updated_user_info")
));
}
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("unknown_error_on_act_logs")
));
}
}
}else{
show_404();
}
}
private function activity_logs_b4_update($user_id, $data){
$activity_logs = "";
if(!$this->user_model->check_if_something_is_changed($user_id, $data["username"], "username")){
//updated username
$activity_logs .=" - ".$this->lang->line("change_username")."
";
}
if($data["password"] != "" && $data["confirm_password"] != ""){
if(!$this->user_model->check_if_something_is_changed($user_id, $data["password"], "password")){
//updated password
$activity_logs .=" - ".$this->lang->line("change_pwd")."
";
}
}
if($data["email_address"] != ""){
if(!$this->user_model->check_if_something_is_changed($user_id, $data["email_address"], "email_address")){
//updated eamil
$activity_logs .=" - ".$this->lang->line("change_email")."
";
}
}
if(!$this->user_model->check_if_fullname_is_changed($user_id, $data["first_name"], $data["last_name"])){
//updated full name
$activity_logs .=" - ".$this->lang->line("change_employee_name")."
";
}
return $activity_logs;
}
private function activity_logs_for_edit($user_id, $activity_logs){
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"=> $user_id
)));
}
return array("success" => 1);
}
private function validate($data, $query, $user_id){
$result = array("error" => false);
switch($query){
case "pwd" :
if(($this->input->post("password")!= "" && $this->input->post("confirm_password") != "") && (strtolower($this->input->post("password")) != strtolower($this->input->post("confirm_password")))){
$result["error"] = true;
$result["message"] = $this->lang->line("pwd_did_not_match");
}
break;
case "username" :
$check_name = $this->user_model->check_username($data["username"], $user_id);
if($check_name){
$result["error"] = true;
$result["message"] = $this->lang->line("username_exist");
}
break;
case "email" :
$check_email = $this->user_model->check_email($data["email_address"], $user_id, BO_USER_ROLES);
if($check_email){
$result["error"] = true;
$result["message"] = $this->lang->line("email_exist");
}
break;
default :
$result["error"] = false;
break;
}
return $result;
}
public function delete_user_account($user_id){
if($this->input->post() && $user_id) {
//must check dependencies before deleting, without checking, errors might encounter due to foreign keys
$result = $this->user_model->delete_user_account($user_id);
if ($result) {
$act_log = $this->user_activity_log_model->add_activity_log(array(
"description" => "- ".$this->lang->line("account_deleted")."
",
"user_id" => $this->data["logged_in"]["user_id"],
"action" => "DELETE",
"table_origin"=> "user",
"reference_id"=> $user_id
));
if($act_log){
output_to_json($this, array(
"mtype" => "success",
"message" => $this->lang->line("account_deleted")
));
}else{
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("saving_act_logs_err")
));
}
} else {
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("cannot_delete_account")
));
}
} else {
show_404();
}
}
public function deactivate_activate_user_account($user_id, $action){
if($this->input->post() && $user_id && $action) {
$status = ($action==1) ? 2 : 1;
//must check dependencies before deleting, without checking, errors might encounter due to foreign keys
$result = $this->user_model->deactivate_activate_user_account($user_id, $status);
if($result){
$description = (($action==1)?$this->lang->line('deactivated_account'):$this->lang->line('activated_account'));
$act_log = $this->user_activity_log_model->add_activity_log(array(
"description" => "- ".$description."
",
"user_id" => $this->data["logged_in"]["user_id"],
"action" => "EDIT",
"table_origin"=> "user",
"reference_id"=> $user_id
));
if($act_log){
output_to_json($this, array(
"mtype" => "success",
"message" => $description
));
}else{
output_to_json($this, array(
"mtype" => "error",
"message" => $this->lang->line("saving_act_logs_err")
));
}
}else {
output_to_json($this, array(
"mtype" => "error",
"message" => (($action==1)?$this->lang->line('unable_deactivate_account'):$this->lang->line('unable_activate_account'))
));
}
} else {
show_404();
}
}
public function get_user_account_list(){
if($this->input->post() && $this->data["logged_in"]["user_id"]) {
$list = $this->user_model->get_datatables($this->data["logged_in"]["user_id"], $this->input->post(), 1);
$data = array();
$row = array();
$x = $this->input->post("start");
foreach ($list as $employee) {
$row["employee_order"] = ++$x;
$row["employee"] = $employee->employee;
$row["email_address"] = $employee->email_address;
$row["username"] = $employee->username;
$row["role"] = $employee->role_name;
$row["role_id"] = $employee->role_id;
$row["status"] = $employee->status;
$row["action"] = array("user_id" => $employee->user_id,
"email_address" => $employee->email_address,
"username" => $employee->username,
"status" => $employee->user_status,
"first_name" => $employee->first_name,
"last_name" => $employee->last_name);
array_push($data, $row);
}
$output = array(
"draw" => $this->input->post('draw'),
"recordsTotal" => $this->user_model->count_all($this->data["logged_in"]["user_id"], $this->input->post(), 1),
"recordsFiltered" => $this->user_model->count_filtered($this->data["logged_in"]["user_id"], $this->input->post(), 1),
"data" => $data,
);
//output to json format
output_to_json($this, $output);
} else {
show_404();
}
}
}