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()
28 * Login a user and then redirect it to the last page which must be encoded
31 * @param string $redirect contains the last page URI segments encoded
32 * with helper url_encode_segments.
34 public function login($redirect = '')
36 $this->load->library('form_validation');
38 $this->form_validation->set_error_delimiters('<span class="error">',
41 if ($this->form_validation->run('signin') === FALSE)
43 $params = array( 'title' =>
44 $this->lang->line('ui_nav_menu_login')
46 . $this->config->item('site_name'),
47 //'metas' => array('description'=>'')
49 $this->load->library('html_head_params', $params);
54 $this->load->view('html_begin', $this->html_head_params);
55 $this->load->view('header', array('selected_menu' => 'login'));
57 $main_params['content'] = $this->load->view('user/login_view',
58 array('redirect'=> $redirect), TRUE);
59 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
60 $this->load->view('main', $main_params);
62 $this->load->view('footer');
63 $this->load->view('html_end');
67 if (! $this->activated_account)
69 . site_url("user/activate/{$this->user_id}"));
70 else if (! $this->import)
72 // Redirect to last page before login.
73 header('Location: '. site_url(urldecode_segments($redirect)));
77 // Redirect to account page because an user authenticates here
78 // for the first time with external authentication. The page
79 // will display imported data.
80 header('Location: '. site_url('user/account'));
86 * Logout user and then redirect it to the last page which must be encoded
89 * @param string $redirect contains the last page URI segments encoded
90 * with helper url_encode_segments.
92 public function logout($redirect = '')
94 $this->session->unset_userdata('user_id');
95 $this->session->unset_userdata('username');
96 $this->session->unset_userdata('auth_src');
97 $this->session->unset_userdata('time_zone');
99 header('Location: '. site_url(urldecode_segments($redirect)));
102 public function register($redirect = '')
104 $this->load->library('form_validation');
105 $this->load->helper('localization');
106 $this->load->helper('date');
108 $this->form_validation->set_error_delimiters('<span class="error">',
111 if ($this->form_validation->run('register') === FALSE)
113 // Edit account data if logged in, otherwise register.
114 if ($user_id = $this->session->userdata('user_id'))
116 $userdata = $this->users_model->get_userdata(intval($user_id));
117 $selected_menu = 'account';
122 $selected_menu = 'register';
125 $params = array('title' =>
126 $this->lang->line('ui_nav_menu_register')
128 . $this->config->item('site_name'),
129 //'metas' => array('description'=>'')
131 $this->load->library('html_head_params', $params);
136 $this->load->view('html_begin', $this->html_head_params);
137 $this->load->view('header',
138 array('selected_menu' => $selected_menu));
140 $main_params['content'] = $this->load->view('user/register_view',
141 array('userdata'=> $userdata, 'redirect'=> $redirect),
143 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
144 $this->load->view('main', $main_params);
146 $this->load->view('footer');
147 $this->load->view('html_end');
151 $user_id = $this->input->post('user-id');
152 $data['email'] = $this->input->post('email');
153 $data['first_name'] = $this->input->post('first-name');
154 $data['last_name'] = $this->input->post('last-name');
155 $data['birth_date'] = $this->input->post('birth-date');
156 $data['country'] = $this->input->post('country');
157 $data['locality'] = $this->input->post('locality');
158 $data['ui_lang'] = $this->input->post('ui-lang');
159 $data['time_zone'] = $this->input->post('time-zone');
161 // Update session user data.
162 $this->_update_session_userdata($data);
167 $password = $this->input->post('new-password');
169 $data['password'] = $this->input->post('new-password');
171 $this->users_model->set_userdata($user_id, $data);
173 // Redirect to last page before login.
174 header('Location: '. site_url(urldecode_segments($redirect)));
179 $data['username'] = $this->input->post('username');
180 $data['password'] = $this->input->post('password');
182 $this->users_model->register($data);
183 $user_id = $this->users_model->get_userdata($data['username'],
185 $user_id = $user_id['id'];
187 // Redirect account activation page.
188 header('Location: '. site_url("user/activate/$user_id"));
193 public function account($redirect = '')
195 $this->register($redirect);
198 public function profile($username, $videos_offset = 0)
200 // TODO handle user not found
202 $this->load->config('localization');
203 $this->load->helper('date');
204 $this->lang->load('date');
209 // Logged in user time zone
210 $time_zone = $this->session->userdata('time_zone');
215 $userdata = $this->users_model->get_userdata($username);
216 $userdata['roles'] = Users_model::roles_to_string($userdata['roles']);
217 $country_list = $this->config->item('country_list');
218 $userdata['country_name'] = $country_list[ $userdata['country'] ];
219 $userdata['last_login'] = date('Y-m-d H:i:s',
221 strtotime($userdata['last_login']),
223 TRUE)) . ($time_zone == 'UTC' ? ' (UTC)' : '');
224 $userdata['time_zone'] = $this->lang->line($userdata['time_zone']);
227 $this->load->model('videos_model');
228 $vs_data['videos'] = $this->videos_model->get_videos_summary(
229 NULL, $username, intval($videos_offset),
230 $this->config->item('videos_per_page'));
233 $this->load->library('pagination');
234 $pg_config['base_url'] = site_url("user/profile/$username/");
235 $pg_config['uri_segment'] = 4;
236 $pg_config['total_rows'] = $this->videos_model->get_videos_count(
238 $pg_config['per_page'] = $this->config->item('videos_per_page');
239 $this->pagination->initialize($pg_config);
240 $vs_data['pagination'] = $this->pagination->create_links();
241 $vs_data['title'] = NULL;
242 $vs_data['category_name'] = ''; // TODO videos_summary with AJAX
245 'title'=> $this->lang->line('user_appelation').' '.$username
247 . $this->config->item('site_name'),
248 'css'=> array('catalog.css')
249 //'metas' => array('description'=>'')
251 $this->load->library('html_head_params', $params);
253 // Current user profile tab
254 $tab = (! $videos_offset ? 0 : 1);
259 $this->load->view('html_begin', $this->html_head_params);
260 $this->load->view('header', array());
262 $vs = $this->load->view('catalog/videos_summary_view', $vs_data, TRUE);
264 $main_params['content'] = $this->load->view('user/profile_view',
265 array('userdata'=> $userdata, 'videos_summary'=> $vs, 'tab'=>$tab),
267 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
268 $this->load->view('main', $main_params);
270 $this->load->view('footer');
271 $this->load->view('html_end');
274 public function activate($user_id, $method='', $activation_code='')
276 $user_id = intval($user_id);
277 $userdata = $this->users_model->get_userdata($user_id,
278 'email, a.activation_code');
279 $email = $userdata['email'];
280 //print_r($userdata['activation_code']);
281 $activated_account = ($userdata['activation_code'] == NULL);
283 $this->load->library('form_validation');
285 $this->form_validation->set_error_delimiters('<span class="error">',
288 $res_form_validation = FALSE;
289 if ($method == 'code')
291 $res_form_validation = $this->form_validation->run('activate');
293 else if ($method == 'resend')
295 $res_form_validation =
296 $this->form_validation->run('resend_activation');
299 if ($res_form_validation === FALSE)
302 'title'=> $this->lang->line('user_title_activation')
304 . $this->config->item('site_name'),
305 //'metas' => array('description'=>'')
307 $this->load->library('html_head_params', $params);
312 $this->load->view('html_begin', $this->html_head_params);
313 $this->load->view('header', array());
315 if (! $activated_account)
317 $main_params['content'] =
318 $this->load->view('user/activate_view',
319 array('user_id'=> $user_id, 'email'=> $userdata['email']),
324 $main_params['content'] =
325 $this->load->view('user/activated_account_view',
329 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
330 $this->load->view('main', $main_params);
332 $this->load->view('footer');
333 $this->load->view('html_end');
337 if ($method == 'code')
339 // Redirect to a message which tells the user that the
340 // activation was successful.
341 header('Location: '. site_url("user/activate/$user_id"));
343 else if ($method == 'resend')
345 // Redirect to home page
346 header('Location: '. site_url());
351 public function _update_session_userdata($data)
353 foreach ($data as $key=> $val)
354 $this->session->set_userdata($key, $val);
357 public function _valid_username($username)
359 return (preg_match('/^[a-z0-9\._]+$/', $username) === 1);
362 public function _valid_username_or_email($username)
364 $this->load->helper('email');
366 if (valid_email($username))
369 return $this->_valid_username($username);
372 public function _valid_date($date)
377 return (preg_match('/[\d]{4}-[\d]{2}-[\d]{2}/', $date) === 1);
380 public function _valid_old_password($old_password, $field_username)
385 $username= $this->input->post($field_username);
387 if ($this->users_model->login($username, $old_password))
393 public function _change_password_cond($param)
395 $old = $this->input->post('old-password');
396 $new = $this->input->post('new-password');
397 $newc = $this->input->post('new-password-confirmation');
399 return (!$old && !$new && !$newc)
400 || ($old && $new && $newc);
403 public function _required_by_register($param)
405 $user_id = $this->input->post('user-id');
407 if (! $user_id && ! $param)
413 public function _valid_activation_code($activation_code)
415 return (preg_match('/^[a-fA-F0-9]{16}$/', $activation_code) == 1);
418 public function _do_login($username, $field_password)
420 $password = $this->input->post($field_password);
422 $user = $this->users_model->login($username, $password);
424 // Authentication failed.
428 // User has not activated the account.
429 if ($user['activation_code'] !== NULL)
431 $this->activated_account = FALSE;
432 $this->user_id = $user['id'];
436 // Authentication successful: set session with user data.
437 $this->session->set_userdata(array(
438 'user_id'=> $user['id'],
439 'username'=> $user['username'],
440 'auth_src'=> $user['auth_src'],
441 'time_zone'=> $user['time_zone']
443 $this->import = (isset($user['import']) ? $user['import'] : FALSE);
447 public function _do_activate($activation_code)
449 $user_id = $this->input->post('user-id');
450 if ($user_id === FALSE)
452 $user_id = intval($user_id);
454 return $this->users_model->activate_account($user_id,
458 public function _do_resend_activation($email)
464 /* End of file user.php */
465 /* Location: ./application/controllers/user.php */