4 * Class User controls video hierarchy and searching
7 * @author Călin-Andrei Burloiu
9 class User extends CI_Controller {
11 private $import = FALSE;
12 private $activated_account = TRUE;
13 private $user_id = NULL;
15 public function __construct()
17 parent::__construct();
19 $this->lang->load('user');
20 $this->load->model('users_model');
23 public function index()
27 public function test($user_id = 1)
29 echo sha1('hQwCUEPQZcN8c4Es');
33 * Login a user and then redirect it to the last page which must be encoded
36 * @param string $redirect contains the last page URI segments encoded
37 * with helper url_encode_segments.
39 public function login($redirect = '')
41 $this->load->library('form_validation');
43 $this->form_validation->set_error_delimiters('<span class="error">',
46 if ($this->form_validation->run('login') === FALSE)
48 $params = array( 'title' =>
49 $this->lang->line('ui_nav_menu_login')
51 . $this->config->item('site_name'),
52 //'metas' => array('description'=>'')
54 $this->load->library('html_head_params', $params);
59 $this->load->view('html_begin', $this->html_head_params);
60 $this->load->view('header', array('selected_menu' => 'login'));
62 $main_params['content'] = $this->load->view('user/login_view',
63 array('redirect'=> $redirect), TRUE);
64 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
65 $this->load->view('main', $main_params);
67 $this->load->view('footer');
68 $this->load->view('html_end');
72 if (! $this->activated_account)
74 . site_url("user/activate/{$this->user_id}"));
75 else if (! $this->import)
77 // Redirect to last page before login.
78 header('Location: '. site_url(urldecode_segments($redirect)));
82 // Redirect to account page because an user authenticates here
83 // for the first time with external authentication. The page
84 // will display imported data.
85 header('Location: '. site_url('user/account'));
91 * Logout user and then redirect it to the last page which must be encoded
94 * @param string $redirect contains the last page URI segments encoded
95 * with helper url_encode_segments.
97 public function logout($redirect = '')
99 $this->session->unset_userdata('user_id');
100 $this->session->unset_userdata('username');
101 $this->session->unset_userdata('auth_src');
102 $this->session->unset_userdata('time_zone');
104 header('Location: '. site_url(urldecode_segments($redirect)));
107 public function register($redirect = '')
109 $this->load->library('form_validation');
110 $this->load->helper('localization');
111 $this->load->helper('date');
113 $this->form_validation->set_error_delimiters('<span class="error">',
116 if ($this->form_validation->run('register') === FALSE)
118 // Edit account data if logged in, otherwise register.
119 if ($user_id = $this->session->userdata('user_id'))
121 $userdata = $this->users_model->get_userdata(intval($user_id));
122 $selected_menu = 'account';
127 $selected_menu = 'register';
130 $params = array('title' =>
131 $this->lang->line('ui_nav_menu_register')
133 . $this->config->item('site_name'),
134 //'metas' => array('description'=>'')
136 $this->load->library('html_head_params', $params);
141 $this->load->view('html_begin', $this->html_head_params);
142 $this->load->view('header',
143 array('selected_menu' => $selected_menu));
145 $main_params['content'] = $this->load->view('user/register_view',
146 array('userdata'=> $userdata, 'redirect'=> $redirect),
148 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
149 $this->load->view('main', $main_params);
151 $this->load->view('footer');
152 $this->load->view('html_end');
156 $user_id = $this->input->post('user-id');
157 $data['email'] = $this->input->post('email');
158 $data['first_name'] = $this->input->post('first-name');
159 $data['last_name'] = $this->input->post('last-name');
160 $data['birth_date'] = $this->input->post('birth-date');
161 $data['country'] = $this->input->post('country');
162 $data['locality'] = $this->input->post('locality');
163 $data['ui_lang'] = $this->input->post('ui-lang');
164 $data['time_zone'] = $this->input->post('time-zone');
166 // Update session user data.
167 $this->_update_session_userdata($data);
172 $password = $this->input->post('new-password');
174 $data['password'] = $this->input->post('new-password');
176 $this->users_model->set_userdata($user_id, $data);
178 // Redirect to last page before login.
179 header('Location: '. site_url(urldecode_segments($redirect)));
184 $data['username'] = $this->input->post('username');
185 $data['password'] = $this->input->post('password');
187 $this->users_model->register($data);
188 $user_id = $this->users_model->get_userdata($data['username'],
190 $user_id = $user_id['id'];
192 // Redirect account activation page.
193 header('Location: '. site_url("user/activate/$user_id"));
198 public function account($redirect = '')
200 $this->register($redirect);
203 public function profile($username, $videos_offset = 0)
205 // TODO handle user not found
207 $this->load->config('localization');
208 $this->load->helper('date');
209 $this->lang->load('date');
214 // Logged in user time zone
215 $time_zone = $this->session->userdata('time_zone');
220 $userdata = $this->users_model->get_userdata($username);
221 $userdata['roles'] = Users_model::roles_to_string($userdata['roles']);
222 $country_list = $this->config->item('country_list');
223 $userdata['country_name'] = $country_list[ $userdata['country'] ];
224 $userdata['last_login'] = date('Y-m-d H:i:s',
226 strtotime($userdata['last_login']),
228 TRUE)) . ($time_zone == 'UTC' ? ' (UTC)' : '');
229 $userdata['time_zone'] = $this->lang->line($userdata['time_zone']);
232 $this->load->model('videos_model');
233 $vs_data['videos'] = $this->videos_model->get_videos_summary(
234 NULL, $username, intval($videos_offset),
235 $this->config->item('videos_per_page'));
238 $this->load->library('pagination');
239 $pg_config['base_url'] = site_url("user/profile/$username/");
240 $pg_config['uri_segment'] = 4;
241 $pg_config['total_rows'] = $this->videos_model->get_videos_count(
243 $pg_config['per_page'] = $this->config->item('videos_per_page');
244 $this->pagination->initialize($pg_config);
245 $vs_data['pagination'] = $this->pagination->create_links();
246 $vs_data['title'] = NULL;
247 $vs_data['category_name'] = ''; // TODO videos_summary with AJAX
250 'title'=> $this->lang->line('user_appelation').' '.$username
252 . $this->config->item('site_name'),
253 'css'=> array('catalog.css')
254 //'metas' => array('description'=>'')
256 $this->load->library('html_head_params', $params);
258 // Current user profile tab
259 $tab = (! $videos_offset ? 0 : 1);
264 $this->load->view('html_begin', $this->html_head_params);
265 $this->load->view('header', array());
267 $vs = $this->load->view('catalog/videos_summary_view', $vs_data, TRUE);
269 $main_params['content'] = $this->load->view('user/profile_view',
270 array('userdata'=> $userdata, 'videos_summary'=> $vs, 'tab'=>$tab),
272 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
273 $this->load->view('main', $main_params);
275 $this->load->view('footer');
276 $this->load->view('html_end');
279 public function activate($user_id, $method='', $activation_code='')
281 $user_id = intval($user_id);
282 $res_form_validation = FALSE;
284 if ($method == 'code')
286 if (! $activation_code)
287 $res_form_validation = $this->form_validation->run('activate');
288 // Activation code is provided in URL.
291 if ($this->_valid_activation_code($activation_code)
292 && $this->users_model->activate_account($user_id,
295 $this->session->set_flashdata('msg', sprintf(
296 $this->lang->line('user_msg_activated_account'),
297 site_url('user/login')));
298 header('Location: '. site_url('message/info'));
303 $this->session->set_flashdata('msg',
304 $this->lang->line('user_msg_wrong_activation_code'));
305 header('Location: '. site_url('message/error'));
310 else if ($method == 'resend')
312 $res_form_validation =
313 $this->form_validation->run('resend_activation');
316 $userdata = $this->users_model->get_userdata($user_id,
317 'email, a.activation_code');
318 $email = $userdata['email'];
319 $activated_account = ($userdata['activation_code'] == NULL);
321 if ($activated_account)
323 $this->session->set_flashdata('msg', sprintf(
324 $this->lang->line('user_msg_activated_account'),
325 site_url('user/login')));
326 header('Location: '. site_url('message/info'));
330 $this->load->library('form_validation');
332 $this->form_validation->set_error_delimiters('<span class="error">',
335 if ($res_form_validation === FALSE)
338 'title'=> $this->lang->line('user_title_activation')
340 . $this->config->item('site_name'),
341 //'metas' => array('description'=>'')
343 $this->load->library('html_head_params', $params);
348 $this->load->view('html_begin', $this->html_head_params);
349 $this->load->view('header', array());
352 $main_params['content'] =
353 $this->load->view('user/activate_view',
354 array( 'user_id'=> $user_id,
355 'email'=> $userdata['email']),
358 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
359 $this->load->view('main', $main_params);
361 $this->load->view('footer');
362 $this->load->view('html_end');
366 if ($method == 'code')
368 // Redirect to a message which tells the user that the
369 // activation was successful.
370 $this->session->set_flashdata('msg', sprintf(
371 $this->lang->line('user_msg_activated_account'),
372 site_url('user/login')));
373 header('Location: '. site_url('message/info'));
376 else if ($method == 'resend')
378 // Redirect to resent message
379 $this->session->set_flashdata('msg', sprintf(
380 $this->lang->line('user_msg_activation_resent'),
381 $this->input->post('email')));
382 header('Location: '. site_url('message/info'));
388 public function recover_password()
390 $this->load->library('form_validation');
392 $this->form_validation->set_error_delimiters('<span class="error">',
395 if ($this->form_validation->run('recover_password') === FALSE)
397 $params = array( 'title' =>
399 'user_title_password_recovery')
401 . $this->config->item('site_name'),
402 //'metas' => array('description'=>'')
404 $this->load->library('html_head_params', $params);
409 $this->load->view('html_begin', $this->html_head_params);
410 $this->load->view('header', array('selected_menu' =>
411 'recover_password'));
413 $main_params['content'] = $this->load->view(
414 'user/recover_password_view', array(),
417 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
418 $this->load->view('main', $main_params);
420 $this->load->view('footer');
421 $this->load->view('html_end');
425 // Redirect to resent message
426 $this->session->set_flashdata('msg', sprintf(
427 $this->lang->line('user_msg_password_recovery_email_sent'),
428 $this->input->post('username'),
429 $this->input->post('email')));
430 header('Location: '. site_url('message/info'));
435 public function _update_session_userdata($data)
437 foreach ($data as $key=> $val)
438 $this->session->set_userdata($key, $val);
441 public function _valid_username($username)
443 return (preg_match('/^[a-z0-9\._]+$/', $username) === 1);
446 public function _valid_username_or_email($username)
448 $this->load->helper('email');
450 if (valid_email($username))
453 return $this->_valid_username($username);
456 public function _valid_date($date)
461 return (preg_match('/[\d]{4}-[\d]{2}-[\d]{2}/', $date) === 1);
464 public function _valid_old_password($old_password, $field_username)
469 $username= $this->input->post($field_username);
471 if ($this->users_model->login($username, $old_password))
477 public function _change_password_cond($param)
479 $old = $this->input->post('old-password');
480 $new = $this->input->post('new-password');
481 $newc = $this->input->post('new-password-confirmation');
483 return (!$old && !$new && !$newc)
484 || ($old && $new && $newc);
487 public function _required_by_register($param)
489 $user_id = $this->input->post('user-id');
491 if (! $user_id && ! $param)
497 public function _valid_activation_code($activation_code)
499 return (preg_match('/^[a-fA-F0-9]{16}$/', $activation_code) == 1);
502 public function _do_login($username, $field_password)
504 $password = $this->input->post($field_password);
506 $user = $this->users_model->login($username, $password);
508 // Authentication failed.
512 // User has not activated the account.
513 if ($user['activation_code'] !== NULL)
515 $this->activated_account = FALSE;
516 $this->user_id = $user['id'];
520 // Authentication successful: set session with user data.
521 $this->session->set_userdata(array(
522 'user_id'=> $user['id'],
523 'username'=> $user['username'],
524 'auth_src'=> $user['auth_src'],
525 'time_zone'=> $user['time_zone']
527 $this->import = (isset($user['import']) ? $user['import'] : FALSE);
531 public function _do_activate($activation_code)
533 $user_id = $this->input->post('user-id');
534 if ($user_id === FALSE)
536 $user_id = intval($user_id);
538 return $this->users_model->activate_account($user_id,
542 public function _do_resend_activation($email)
544 $user_id = $this->input->post('user-id');
545 if ($user_id === FALSE)
547 $user_id = intval($user_id);
549 $this->users_model->set_userdata($user_id,
550 array('email'=> $email));
552 return $this->users_model->send_activation_email($user_id, $email);
555 public function _username_exists($username)
557 $userdata = $this->users_model->get_userdata($username);
565 public function _internal_account($username)
567 $userdata = $this->users_model->get_userdata($username, 'auth_src');
571 if ($userdata['auth_src'] != 'internal')
577 public function _do_recover_password($username)
579 $email = $this->input->post('email');
583 return $this->users_model->recover_password($username, $email);
587 /* End of file user.php */
588 /* Location: ./application/controllers/user.php */