private function _saveUser($idUser = null) { $result = array(); $oldValues = array(); $errors = array(); $redirectURL = '/admin/users/'; $useUsername = $this->config->item('use_username', 'factotum'); $usernameMinLength = $this->config->item('username_min_length', 'factotum'); $usernameMaxLength = $this->config->item('username_max_length', 'factotum'); $passwordMinLength = $this->config->item('password_min_length', 'factotum'); $passwordMaxLength = $this->config->item('password_max_length', 'factotum'); $emailActivation = $this->config->item('email_activation', 'factotum'); $activationPeriod = $this->config->item('email_activation_expire', 'factotum'); $emailAccountDetails = $this->config->item('email_account_details', 'factotum'); $siteName = $this->config->item('website_name', 'factotum'); $this->data['useUsername'] = $useUsername; $result['data_saved'] = FALSE; $roles = $this->fm_users_management->getUserRolesList(); $tmp = array(); foreach ($roles as $role) { $tmp[$role['id']] = $role['role']; } $roles = $tmp; $this->data['roles'] = $roles; if ($idUser) { $user = $this->fm_users_management->getUserById($idUser); $userProfile = $this->fm_users_management->getUserProfileByIdUser($idUser); $oldValues['username'] = $user['username']; $oldValues['email'] = $user['email']; $oldValues['role'] = $user['id_user_role']; // Profile Fields $oldValues['firstname'] = $userProfile['firstname']; $oldValues['lastname'] = $userProfile['lastname']; $oldValues['dob'] = FM_Utility::convertIsoDateToHuman($userProfile['dob']); } else { $oldValues['username'] = ''; $oldValues['email'] = ''; $oldValues['role'] = ''; // Profile Fields $oldValues['firstname'] = ''; $oldValues['lastname'] = ''; $oldValues['dob'] = ''; } if ($useUsername) { $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length[' . $usernameMinLength . ']|max_length[' . $usernameMaxLength . ']|alpha_dash'); $this->form_validation->set_message('username', $this->lang->line('auth_incorrect_username')); } $this->form_validation->set_rules('role', 'Role', 'trim|required|xss_clean'); $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email'); $this->form_validation->set_message('email', $this->lang->line('auth_incorrect_email')); // Profile Fields $this->form_validation->set_rules('firstname', 'Firstname', 'trim|required|xss_clean'); $this->form_validation->set_message('firstname', $this->lang->line('auth_incorrect_firstname')); $this->form_validation->set_rules('lastname', 'Lastname', 'trim|required|xss_clean'); $this->form_validation->set_message('lastname', $this->lang->line('auth_incorrect_lastname')); $this->form_validation->set_rules('dob', 'Date of Birth', 'trim|required|xss_clean|callback_checkDob'); $this->form_validation->set_message('dob', $this->lang->line('auth_incorrect_dob')); if ($this->input->post('add') || $this->input->post('save') && $this->input->post('password') != '') { $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|min_length[' . $passwordMinLength . ']|max_length[' . $passwordMaxLength . ']|alpha_dash'); $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'trim|required|xss_clean|matches[password]'); } if ($this->input->post('add') || $this->input->post('save')) { $redirectURL .= $this->input->post('save') ? 'edit/' . $idUser : '******'; $oldValues['username'] = $useUsername ? $this->input->post('username') : ''; $oldValues['email'] = $this->input->post('email'); $oldValues['role'] = $this->input->post('role'); // Profile Fields $oldValues['firstname'] = $this->input->post('firstname'); $oldValues['lastname'] = $this->input->post('lastname'); $oldValues['dob'] = $this->input->post('dob'); // validation ok if ($this->form_validation->run()) { $password = $this->form_validation->set_value('password'); $profileData = array('firstname' => $oldValues['firstname'], 'lastname' => $oldValues['lastname'], 'dob' => FM_Utility::convertHumanDateToIso($oldValues['dob'])); if ($idUser) { $userData = $this->fm_users_management->updateUser($idUser, $oldValues['email'], $oldValues['role'], $useUsername ? $oldValues['username'] : ''); if ($password) { $this->fm_users_management->updatePassword($idUser, $password); } // Update the profile for the user $this->fm_users_management->updateProfile($idUser, $profileData); } else { $userData = $this->fm_users_management->insertUser($oldValues['username'], $oldValues['email'], $password, $oldValues['role'], $emailActivation); // Insert the profile for the user $this->fm_users_management->insertProfile($userData['id'], $profileData); } // success if (!is_null($userData)) { if (!$idUser) { $userData['siteName'] = $siteName; $userData['activationPeriod'] = $activationPeriod / 3600; if ($emailActivation) { // send "activate" email $this->fm_users_management->sendEmail('activate', $userData['email'], $userData); // Clear password (just for any case) unset($userData['password']); } else { // send "welcome" email if ($emailAccountDetails) { $this->fm_users_management->sendEmail('welcome', $userData['email'], $userData); } // Clear password (just for any case) unset($userData['password']); } } $result['redirectURL'] = $redirectURL; $result['data_saved'] = TRUE; } else { $authErrors = $this->fm_users_management->getErrorMessage(); foreach ($authErrors as $index => $errMsg) { $errors[$index] = $this->lang->line($errMsg); } } } else { $result['data_saved'] = FALSE; $result['redirectURL'] = ''; if ($useUsername) { $errors['username'] = form_error('username'); } $errors['role'] = form_error('role'); $errors['email'] = form_error('email'); $errors['password'] = form_error('password'); $errors['confirm_password'] = form_error('confirm_password'); // Profiles Fields Errors $errors['firstname'] = form_error('firstname'); $errors['lastname'] = form_error('lastname'); $errors['dob'] = form_error('dob'); } } $result['errors'] = $errors; $result['oldValues'] = $oldValues; return $result; }