*/ class Access { /** * Contains the CI instance. */ protected $ci; /** * Contains occured messages (using the language file). * * @var string */ protected $messages = array(); /** * Contains occured errors (using the language file). * * @var string */ protected $errors = array(); /** * Constructor. */ public function __construct() { $this->ci =& get_instance(); $this->ci->load->config('auth', true); $this->ci->load->library('email'); $this->ci->lang->load('auth'); $this->ci->load->model('user'); $this->ci->load->model('group'); $this->ci->load->helper('cookie'); // auto-login the user if they are remembered if (!$this->loggedIn() && get_cookie('username') && get_cookie('remember_code')) { $this->ci->access = $this; $this->ci->user->loginRememberedUser(); } } /** * Changes a users password. * * @return boolean */ public function changePassword($username, $old, $new) { if ($this->ci->user->changePassword($username, $old, $new)) { $this->setMessage('password_change_successful'); return true; } $this->setError('password_change_unsuccessful'); return false; } /** * forgotten password feature * * @return void */ public function forgottenPassword($username) { if ($this->ci->user->forgottenPassword($username)) { // get user information $user = $this->getUserByUsername($username); $data = array( 'username' => $user['username'], 'forgotten_password_code' => $user['forgotten_password_code'] ); $message = $this->ci->load->view($this->ci->config->item('email_templates', 'auth') . $this->ci->config->item('email_forgot_password', 'auth'), $data, true); $this->ci->email->clear(); $config['mailtype'] = $this->ci->config->item('email_type', 'auth'); $this->ci->email->initialize($config); $this->ci->email->set_newline("\r\n"); $this->ci->email->from($this->ci->config->item('admin_email', 'auth'), 'Scattport'); $this->ci->email->to($user['email']); $this->ci->email->subject('Scattport - Forgotten Password Verification'); $this->ci->email->message($message); if ($this->ci->email->send()) { $this->setMessage('forgot_password_successful'); return true; } else { $this->setError('forgot_password_unsuccessful'); return false; } } else { $this->setError('forgot_password_unsuccessful'); return false; } } /** * forgotten_password_complete * * @return void */ public function forgottenPasswordComplete($code) { $profile = $this->ci->user->profile($code, true); // pass the code to profile if (!is_object($profile)) { $this->setError('password_change_unsuccessful'); return false; } $new_password = $this->ci->user->forgottenPasswordComplete($code, $profile->salt); if ($new_password) { $data = array( 'username' => $profile->username, 'new_password' => $new_password ); $message = $this->ci->load->view($this->ci->config->item('email_templates', 'ion_auth').$this->ci->config->item('email_forgot_password_complete', 'ion_auth'), $data, true); $this->ci->email->clear(); $config['mailtype'] = $this->ci->config->item('email_type', 'ion_auth'); $this->ci->email->initialize($config); $this->ci->email->set_newline("\r\n"); $this->ci->email->from($this->ci->config->item('admin_email', 'ion_auth'), $this->ci->config->item('site_title', 'ion_auth')); $this->ci->email->to($profile->email); $this->ci->email->subject($this->ci->config->item('site_title', 'ion_auth') . ' - New Password'); $this->ci->email->message($message); if ($this->ci->email->send()) { $this->setMessage('password_change_successful'); return true; } else { $this->setError('password_change_unsuccessful'); return false; } } $this->setError('password_change_unsuccessful'); return false; } /** * Registers a new user. * * @return integer|boolean */ public function register($username, $password, $email, $additionalData, $groupName = false) { $id = $this->ci->user->register($username, $password, $email, $additionalData, $groupName); if ($id !== false) { $this->setMessage('account_creation_successful'); return $id; } else { $this->setError('account_creation_unsuccessful'); return false; } } /** * Logs the user in. * * @return boolean */ public function login($username, $password, $remember = false) { if ($this->ci->user->login($username, $password, $remember)) { $this->setMessage('login_successful'); return true; } else { $this->setError('login_unsuccessful'); return false; } } /** * Logs the user out. * * @return boolean */ public function logout() { $this->ci->session->unset_userdata('username'); $this->ci->session->unset_userdata('group'); $this->ci->session->unset_userdata('user_id'); // delete the remember cookies if they exist if (get_cookie('username')) { delete_cookie('username'); } if (get_cookie('remember_code')) { delete_cookie('remember_code'); } $this->ci->session->sess_destroy(); $this->setMessage('logout_successful'); return true; } /** * Checks if the user is logged in. * * @return boolean */ public function loggedIn() { return (boolean) $this->ci->session->userdata('username'); } /** * Checks if the user is an admin. * * @return boolean */ public function isAdmin() { $adminGroup = 'admins'; $userGroup = $this->ci->session->userdata('group'); return $userGroup == $adminGroup; } /** * Checks if the current user is assigned to the specified group. * * @return boolean */ public function isGroup($checkGroup) { $userGroup = $this->ci->session->userdata('group'); if (is_array($checkGroup)) { return in_array($userGroup, $checkGroup); } return $userGroup == $checkGroup; } /** * Gets the current logged in user. * * @return object */ public function getCurrentUser() { return $this->ci->user->getUserByID($this->ci->session->userdata('user_id'))->row_array(); } /** * Gets the profile of the current user. * * @return array */ public function profile() { return $this->ci->user->profile($this->ci->session->userdata('username')); } /** * Updates a specified user. * * @return boolean */ public function updateUser($id, $data) { if ($this->ci->user->update($id, $data)) { $this->setMessage('update_successful'); return true; } $this->setError('update_unsuccessful'); return false; } /** * Deletes a specified user. * * @return boolean */ public function deleteUser($id) { if ($this->ci->user->delete($id)) { $this->setMessage('delete_successful'); return true; } $this->setError('delete_unsuccessful'); return false; } /** * Sets a message. * * @return string */ public function setMessage($message) { $this->messages[] = $message; return $message; } /** * Gets all messages. * * @return void */ public function messages() { $output = ''; foreach ($this->messages as $message) { $output .= lang($message) . '
'; } return $output; } /** * Sets an error message. * * @return void */ public function setError($error) { $this->errors[] = $error; return $error; } /** * Gets all error messages. * * @return void */ public function errors() { $output = ''; foreach ($this->errors as $error) { $output .= lang($error) . '
'; } return $output; } } /* End of file Access.php */ /* Location: ./application/libraries/Access.php */