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;
14 public function __construct()
16 parent::__construct();
18 $this->lang->load('user');
19 $this->load->model('users_model');
22 public function index()
27 * Login a user and then redirect it to the last page which must be encoded
30 * @param string $redirect contains the last page URI segments encoded
31 * with helper url_encode_segments.
33 public function login($redirect = '')
35 $this->load->library('form_validation');
37 $this->form_validation->set_error_delimiters('<span class="error">',
40 if ($this->form_validation->run('signin') === FALSE)
42 $params = array( 'title' =>
43 $this->lang->line('ui_nav_menu_login')
45 . $this->config->item('site_name'),
46 //'metas' => array('description'=>'')
48 $this->load->library('html_head_params', $params);
53 $this->load->view('html_begin', $this->html_head_params);
54 $this->load->view('header', array('selected_menu' => 'login'));
56 $main_params['content'] = $this->load->view('user/login_view',
57 array('redirect'=> $redirect), TRUE);
58 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
59 $this->load->view('main', $main_params);
61 $this->load->view('footer');
62 $this->load->view('html_end');
66 if (! $this->activated_account)
67 header('Location: '. site_url('catalog/test'));
68 else if (! $this->import)
70 // Redirect to last page before login.
71 header('Location: '. site_url(urldecode_segments($redirect)));
75 // Redirect to account page because an user authenticates here
76 // for the first time with external authentication. The page
77 // will display imported data.
78 header('Location: '. site_url('user/account'));
84 * Logout user and then redirect it to the last page which must be encoded
87 * @param string $redirect contains the last page URI segments encoded
88 * with helper url_encode_segments.
90 public function logout($redirect = '')
92 $this->session->unset_userdata('user_id');
93 $this->session->unset_userdata('username');
94 $this->session->unset_userdata('auth_src');
95 $this->session->unset_userdata('time_zone');
97 header('Location: '. site_url(urldecode_segments($redirect)));
100 public function register($redirect = '')
102 $this->load->library('form_validation');
103 $this->load->helper('localization');
104 $this->load->helper('date');
106 $this->form_validation->set_error_delimiters('<span class="error">',
109 if ($this->form_validation->run('register') === FALSE)
111 // Edit account data if logged in, otherwise register.
112 if ($user_id = $this->session->userdata('user_id'))
114 $userdata = $this->users_model->get_userdata(intval($user_id));
115 $selected_menu = 'account';
120 $selected_menu = 'register';
123 $params = array('title' =>
124 $this->lang->line('ui_nav_menu_register')
126 . $this->config->item('site_name'),
127 //'metas' => array('description'=>'')
129 $this->load->library('html_head_params', $params);
134 $this->load->view('html_begin', $this->html_head_params);
135 $this->load->view('header',
136 array('selected_menu' => $selected_menu));
138 $main_params['content'] = $this->load->view('user/register_view',
139 array('userdata'=> $userdata, 'redirect'=> $redirect),
141 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
142 $this->load->view('main', $main_params);
144 $this->load->view('footer');
145 $this->load->view('html_end');
149 $user_id = $this->input->post('user-id');
150 $data['email'] = $this->input->post('email');
151 $data['first_name'] = $this->input->post('first-name');
152 $data['last_name'] = $this->input->post('last-name');
153 $data['birth_date'] = $this->input->post('birth-date');
154 $data['country'] = $this->input->post('country');
155 $data['locality'] = $this->input->post('locality');
156 $data['ui_lang'] = $this->input->post('ui-lang');
157 $data['time_zone'] = $this->input->post('time-zone');
159 // Update session user data.
160 $this->_update_session_userdata($data);
165 $password = $this->input->post('new-password');
167 $data['password'] = $this->input->post('new-password');
169 $this->users_model->set_userdata($user_id, $data);
174 $data['username'] = $this->input->post('username');
175 $data['password'] = $this->input->post('password');
177 $this->users_model->register($data);
180 // Redirect to last page before login.
181 header('Location: '. site_url(urldecode_segments($redirect)));
185 public function account($redirect = '')
187 $this->register($redirect);
190 public function profile($username, $videos_offset = 0)
192 // TODO handle user not found
194 $this->load->config('localization');
195 $this->load->helper('date');
196 $this->lang->load('date');
201 // Logged in user time zone
202 $time_zone = $this->session->userdata('time_zone');
207 $userdata = $this->users_model->get_userdata($username);
208 $userdata['roles'] = Users_model::roles_to_string($userdata['roles']);
209 $country_list = $this->config->item('country_list');
210 $userdata['country_name'] = $country_list[ $userdata['country'] ];
211 $userdata['last_login'] = date('Y-m-d H:i:s',
213 strtotime($userdata['last_login']),
215 TRUE)) . ($time_zone == 'UTC' ? ' (UTC)' : '');
216 $userdata['time_zone'] = $this->lang->line($userdata['time_zone']);
219 $this->load->model('videos_model');
220 $vs_data['videos'] = $this->videos_model->get_videos_summary(
221 NULL, $username, intval($videos_offset),
222 $this->config->item('videos_per_page'));
225 $this->load->library('pagination');
226 $pg_config['base_url'] = site_url("user/profile/$username/");
227 $pg_config['uri_segment'] = 4;
228 $pg_config['total_rows'] = $this->videos_model->get_videos_count(
230 $pg_config['per_page'] = $this->config->item('videos_per_page');
231 $this->pagination->initialize($pg_config);
232 $vs_data['pagination'] = $this->pagination->create_links();
233 $vs_data['title'] = NULL;
234 $vs_data['category_name'] = ''; // TODO videos_summary with AJAX
237 'title'=> $this->lang->line('user_appelation').' '.$username
239 . $this->config->item('site_name'),
240 'css'=> array('catalog.css')
241 //'metas' => array('description'=>'')
243 $this->load->library('html_head_params', $params);
245 // Current user profile tab
246 $tab = (! $videos_offset ? 0 : 1);
251 $this->load->view('html_begin', $this->html_head_params);
252 $this->load->view('header', array());
254 $vs = $this->load->view('catalog/videos_summary_view', $vs_data, TRUE);
256 $main_params['content'] = $this->load->view('user/profile_view',
257 array('userdata'=> $userdata, 'videos_summary'=> $vs, 'tab'=>$tab),
259 $main_params['side'] = $this->load->view('side_default', NULL, TRUE);
260 $this->load->view('main', $main_params);
262 $this->load->view('footer');
263 $this->load->view('html_end');
266 public function activate($user_id, $activation_code)
268 $user_id = intval($user_id);
269 echo ''. $this->users_model->activate_account($user_id, $activation_code);
272 public function _update_session_userdata($data)
274 foreach ($data as $key=> $val)
275 $this->session->set_userdata($key, $val);
278 public function _valid_username($username)
280 return (preg_match('/^[a-z0-9\._]+$/', $username) === 1);
283 public function _valid_username_or_email($username)
285 $this->load->helper('email');
287 if (valid_email($username))
290 return $this->_valid_username($username);
293 public function _valid_date($date)
298 return (preg_match('/[\d]{4}-[\d]{2}-[\d]{2}/', $date) === 1);
301 public function _valid_old_password($old_password, $field_username)
306 $username= $this->input->post($field_username);
308 if ($this->users_model->login($username, $old_password))
314 public function _change_password_cond($param)
316 $old = $this->input->post('old-password');
317 $new = $this->input->post('new-password');
318 $newc = $this->input->post('new-password-confirmation');
320 return (!$old && !$new && !$newc)
321 || ($old && $new && $newc);
324 public function _required_by_register($param)
326 $user_id = $this->input->post('user-id');
328 if (! $user_id && ! $param)
334 public function _do_login($username, $field_password)
336 $password = $this->input->post($field_password);
338 $user = $this->users_model->login($username, $password);
340 // Authentication failed.
344 // User has not activated the account.
345 if ($user['activation_code'] !== NULL)
347 $this->activated_account = FALSE;
351 // Authentication successful: set session with user data.
352 $this->session->set_userdata(array(
353 'user_id'=> $user['id'],
354 'username'=> $user['username'],
355 'auth_src'=> $user['auth_src'],
356 'time_zone'=> $user['time_zone']
358 $this->import = (isset($user['import']) ? $user['import'] : FALSE);
363 /* End of file user.php */
364 /* Location: ./application/controllers/user.php */