PageRenderTime 58ms CodeModel.GetById 12ms RepoModel.GetById 2ms app.codeStats 0ms

/masportales/application/controllers/login.php

https://github.com/eloypineda/XHTMLized
PHP | 207 lines | 156 code | 34 blank | 17 comment | 20 complexity | ff69c6ef12159024526901e35bfc250c MD5 | raw file
  1. <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  2. /**
  3. * Login controller that extends API Controller
  4. *
  5. * This Controller must AJAX user login
  6. *
  7. * @since 0.5
  8. *
  9. * @package masPortales
  10. * @subpackage API
  11. */
  12. class Login extends API_Controller {
  13. public function index($params=null)
  14. {
  15. /*
  16. echo '<pre>';
  17. print_r($this->input->post());
  18. echo '</pre>';
  19. */
  20. $this->load->library('form_validation');
  21. $this->form_validation->set_rules('usr', 'Nombre de usuario', 'trim|required|xss_clean');
  22. $this->form_validation->set_rules('psw', 'Contraseña', 'trim|required|xss_clean');
  23. if ($this->form_validation->run() == false) {
  24. echo json_encode(array('login' => false, 'message' => 'Debe indicar su usuario y contraseña'));
  25. exit();
  26. } else {
  27. if ($user_data = $this->validate_login($this->input->post('usr'), $this->input->post('psw'))) {
  28. $this->session->set_userdata(array('user_logged' => $user_data['username']));
  29. $this->registry->set('section', 'welcome', 'request');
  30. } else {
  31. echo json_encode(array('login' => false, 'message' => 'Usuario o contraseña incorrecto'));
  32. exit();
  33. }
  34. echo json_encode(array('login' => true, 'message' => 'Usuario logueado correctamente'));
  35. exit();
  36. }
  37. }
  38. public function forgotpsw()
  39. {
  40. $this->load->model('users_model');
  41. $this->load->library('form_validation');
  42. $this->form_validation->set_rules('usr', 'Nombre de usuario', 'trim|required|xss_clean');
  43. if ($this->form_validation->run() == false) {
  44. echo json_encode(array('sent' => false, 'message' => 'Debe indicar el usuario para el que no recuerda la contraseña'));
  45. exit();
  46. } else {
  47. if ($user_data = $this->users_model->getUser($this->input->post('usr')) and $user_data['status']) {
  48. $this->_send_email_newpassword($user_data);
  49. echo json_encode(array('sent' => true, 'message' => 'Se le ha enviado un email con su nueva contraseña.'));
  50. exit();
  51. } else {
  52. echo json_encode(array('sent' => false, 'message' => 'No existe el usuario.'));
  53. exit();
  54. }
  55. }
  56. }
  57. public function register()
  58. {
  59. $this->load->model('users_model');
  60. $this->load->library('form_validation');
  61. $this->form_validation->set_rules('name', 'Nombre', 'trim|required|xss_clean');
  62. $this->form_validation->set_rules('surname', 'Apellidos', 'trim|required|xss_clean');
  63. $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|is_unique[users.email]');
  64. $this->form_validation->set_rules('username', 'Nombre de usuario', 'trim|required|is_unique[users.username]|xss_clean');
  65. $this->form_validation->set_rules('password', 'Contraseña', 'trim|required|matches[password2]');
  66. $this->form_validation->set_rules('password2', 'Repite contraseña', 'trim|required');
  67. if ($this->form_validation->run() == false) {
  68. echo json_encode(array('registered' => false, 'message' => validation_errors()));
  69. exit();
  70. } else {
  71. $data = array(
  72. 'users' => array(
  73. 'username' => $this->input->post('username'),
  74. 'display_name' => $this->input->post('name') . ' ' . $this->input->post('surname'),
  75. 'email' => $this->input->post('email'),
  76. 'password' => sha1($this->input->post('password').$this->config->item('encryption_key')),
  77. 'status' => '0',
  78. 'IP' => $this->input->ip_address(),
  79. 'date_modified' => date('Y-m-d H:i:s'),
  80. 'date_added' => date('Y-m-d H:i:s')
  81. ),
  82. 'users_roles' => array('4'),
  83. 'users_address' => array(
  84. 'name' => $this->input->post('name'),
  85. 'surname' => $this->input->post('surname')
  86. )
  87. );
  88. if ($user_id = $this->users_model->saveUser($data)) {
  89. $data['users']['user_ID'] = $user_id;
  90. $this->_send_email_confirmation($data);
  91. echo json_encode(array('registered' => true, 'message' => 'Hemos recibido tu solicitud correctamente. En breve recibirá un email para confirmar su cuenta.'));
  92. exit();
  93. } else {
  94. echo json_encode(array('registered' => false, 'message' => 'Ha habido un fallo al recibir su solicitud, intentelo de nuevo más tarde si es tan amable.'));
  95. exit();
  96. }
  97. }
  98. }
  99. public function validemail()
  100. {
  101. $this->load->model('users_model');
  102. if ($this->users_model->isUserEmail($this->input->post('email'))) {
  103. echo json_encode(array('registered' => true));
  104. return true;
  105. } else {
  106. echo json_encode(array('registered' => false));
  107. return false;
  108. }
  109. }
  110. public function validusername()
  111. {
  112. $this->load->model('users_model');
  113. if ($this->users_model->isUserName($this->input->post('username'))) {
  114. echo json_encode(array('registered' => true));
  115. return true;
  116. } else {
  117. echo json_encode(array('registered' => false));
  118. return false;
  119. }
  120. }
  121. private function _send_email_confirmation($user)
  122. {
  123. $this->load->model('users_model');
  124. $data = array(
  125. 'user_ID' => $user['users']['user_ID'],
  126. 'meta_key' => 'confirmation_user_hash',
  127. 'meta_value' => random_string('unique')
  128. );
  129. $this->users_model->setUserMeta($data);
  130. $email_html = '<p>Estimado ' . $user['users_address']['name'] . ' ' . $user['users_address']['surname'] . '</p>';
  131. $email_html.= '<p>Gracias por registrarse en +Portales.</p>';
  132. $email_html.= '<p>Para activar su cuenta debe pulsar en el siguiente enlace.</p>';
  133. $email_html.= '<p><a href="' . _reg('site_url') . 'registrarse/confirmation/' . $data['meta_value'] . '">Confirma tu cuenta en +Portales</a></p>';
  134. $email_html.= '<p>Un saludo,</p>';
  135. $email_html.= '<p>+Portales</p>';
  136. $this->load->library('email');
  137. $config['mailtype'] = 'html';
  138. $this->email->initialize($config);
  139. $this->email->from('no-reply@masportales.es', '+portales');
  140. $this->email->to($user['users']['email']);
  141. $this->email->subject('Confirma tu cuenta en +Portales');
  142. $this->email->message($email_html);
  143. $this->email->send();
  144. }
  145. private function _send_email_newpassword($user)
  146. {
  147. $this->load->model('users_model');
  148. $new_password = random_string('alnum', 8);
  149. $this->users_model->updatePassword($user['user_ID'], $new_password);
  150. $email_html = '<p>Estimado ' . $user['display_name'] . '</p>';
  151. $email_html.= '<p>Le enviamos su nueva contraseña para acceder a +Portales.</p>';
  152. $email_html.= '<p>Nombre de usuario: ' . $user['username'] . '</p>';
  153. $email_html.= '<p>Contraseña: ' . $new_password . '</p>';
  154. $email_html.= '<p>Un saludo,</p>';
  155. $email_html.= '<p>+Portales</p>';
  156. $email_mssg = "Estimado " . $user['display_name'] . "\r\n
  157. Le enviamos su nueva contraseña para acceder a +Portales.\r\n
  158. Nombre de usuario: " . $user['username'] . ".\r\n
  159. Contraseña: $new_password.\r\n
  160. Un saludo,\r\n
  161. +Portales";
  162. $this->load->library('email');
  163. $config['mailtype'] = 'html';
  164. $this->email->initialize($config);
  165. $this->email->from('no-reply@masportales.es', '+portales');
  166. $this->email->to($user['email']);
  167. $this->email->subject('Nueva contraseña para acceder a +Portales');
  168. $this->email->message($email_html);
  169. $this->email->send();
  170. }
  171. }
  172. /* End of file login.php */
  173. /* Location: ./application/controllers/login.php */