lang->load('video');
}
public function index()
{
//phpinfo();
}
public function test($param)
{
$this->load->model('videos_model');
echo $this->videos_model->send_upload_error_email($param,
CIS_RESP_UNREACHABLE) ? 's-a trimis' : 'nu s-a trimis';
}
/**
* The page used for watching a video
*
* @param string $id DB id of the video
* @param string $name `name` of the video from DB
* @param string $plugin video plugin ('ns-vlc', 'ns-html5'). If it's set
* to NULL or 'auto', the plugin is automatically selected.
*/
public function watch($id, $name = NULL, $plugin = NULL)
{
// **
// ** LOADING MODEL
// **
$this->load->model('videos_model');
$data['user_id'] = $this->session->userdata('user_id');
if ($data['user_id'] === FALSE)
$data['user_id'] = '';
else
$data['user_id'] = intval($data['user_id']);
$user_roles = intval($this->session->userdata('roles'));
// echo USER_ROLE_ADMIN . ' / ';
// var_dump($user_roles);
// var_dump($user_roles | USER_ROLE_ADMIN);
// die();
// Retrieve video information.
$data['video'] = $this->videos_model->get_video($id, $name);
if ($data['video'] === FALSE)
{
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line('video_msg_no_video'));
return;
}
// Video is being processed by CIS.
if ($data['video']['activation_code']
&& $data['video']['cis_response'] == CIS_RESP_NONE)
{
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line('video_msg_video_not_ready'));
return;
}
// Unlogged in user can't see unactivated videos.
if (empty($data['user_id']))
$allow_unactivated = FALSE;
else
{
if (($user_roles & USER_ROLE_ADMIN) == 0
&& $data['user_id'] != $data['video']['user_id'])
$allow_unactivated = FALSE;
else
$allow_unactivated = TRUE;
}
// Video is not activated; can be seen by owner and admin.
if ($data['video']['activation_code'] && !$allow_unactivated)
{
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line('video_msg_video_unactivated'));
return;
}
$categories = $this->config->item('categories');
$data['video']['category_name'] =
$categories[ $data['video']['category_id'] ];
$data['plugin_type'] = ($plugin === NULL ? 'auto' : $plugin);
// Increment the number of views for the video.
$this->videos_model->inc_views($id);
// Display page.
$params = array( 'title' => $data['video']['title'] . ' – '
. $this->config->item('site_name'),
'css' => array(
'jquery.ui.nsvideo.css',
'video.css'
),
'js' => array(
'jquery.ui.nsvideo.js',
'jquery.ui.ajax_links_maker.js'
),
//'metas' => array('description'=>'','keywords'=>'')
);
$this->load->library('html_head_params', $params);
// Preloading video plugin.
// TODO plugin auto: type and format
if ($data['plugin_type'] == 'auto')
$data['plugin_type'] = 'ns-html5';
$data['asset_index'] = 0;
// TODO remove old AJAX plugin content
// $data['plugin_content'] = $this->_plugin('ns-html5',
// $data['video']['url'][0], TRUE);
// Comments
$data['comments'] = $this->_ajax_comment(TRUE, $id);
// **
// ** LOADING VIEWS
// **
$this->load->view('html_begin', $this->html_head_params);
$this->load->view('header');
//$main_params['content'] = $this->load->view('video/watch_view', $data, TRUE);
$this->load->view('video/watch_view', $data);
$this->load->view('footer');
$this->load->view('html_end');
}
public function upload()
{
$user_id = $this->session->userdata('user_id');
// Action not possible if an user is not logged in.
if (!$user_id)
{
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line('ui_msg_login_restriction'));
return;
}
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('',
'');
if ($this->form_validation->run('upload') === FALSE)
{
$params = array('title' =>
$this->lang->line('ui_nav_menu_upload')
.' – '
. $this->config->item('site_name'),
//'metas' => array('description'=>'')
);
$this->load->library('html_head_params', $params);
// **
// ** LOADING VIEWS
// **
$this->load->view('html_begin', $this->html_head_params);
$this->load->view('header',
array('selected_menu' => 'upload'));
$main_params['content'] = $this->load->view(
'video/upload_view', array(), TRUE);
$main_params['side'] = $this->load->view('side_default', NULL, TRUE);
$this->load->view('main', $main_params);
$this->load->view('footer');
$this->load->view('html_end');
}
else
{
$this->load->model('videos_model');
$this->load->helper('video');
$this->config->load('content_ingestion');
$name = urlencode(str_replace(' ', '-',
$this->input->post('video-title')));
$category_id = $this->input->post('video-category');
// Prepare formats
$formats = $this->config->item('formats');
$prepared_formats = prepare_formats($formats, $this->av_info,
$this->config->item('elim_dupl_res'));
// Add video to DB.
$activation_code = $this->videos_model->add_video($name,
$this->input->post('video-title'),
$this->input->post('video-description'),
$this->input->post('video-tags'),
$this->av_info['duration'],
$prepared_formats['db_formats'], $category_id, $user_id,
$this->uploaded_file);
if ($activation_code == FALSE)
{
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line('video_msg_add_video_db_error'));
return;
}
// Send a content ingestion request to
// CIS (Content Ingestion Server).
$r = $this->videos_model->send_content_ingestion($activation_code,
$this->uploaded_file,
$name, $this->av_info['size'],
$prepared_formats['transcode_configs']);
if ($r == FALSE)
{
$this->videos_model->set_cis_response($activation_code,
CIS_RESP_UNREACHABLE);
$this->load->helper('message');
show_error_msg_page($this,
$this->lang->line(
'video_msg_send_content_ingestion_error'));
return;
}
$this->load->helper('message');
show_info_msg_page($this,
$this->lang->line('video_msg_video_uploaded'));
}
}
/**
* URL used by CIS service to announce its content ingestion completion.
*
* @param string $activation_code
*/
public function cis_completion($activation_code)
{
$this->load->model('videos_model');
if ($this->config->item('require_moderation'))
$this->videos_model->set_cis_response($activation_code,
CIS_RESP_COMPLETION);
else
$this->videos_model->activate_video($activation_code);
// log_message('info', "cis_completion $activation_code");
}
/**
* URL used by CIS service to annouce an error which occured while
* ingesting content.
*
* @param string $activation_code
* @param string $error_name 'internal_error' corresponds to constant
* CIS_RESP_INTERNAL_ERROR and 'unreachable' corresponds to constant
* CIS_RESP_UNREACHABLE
*/
public function cis_error($activation_code, $error_name = 'internal_error')
{
$this->load->model('videos_model');
if ($error_name == 'internal_error')
{
$this->videos_model->set_cis_response ($activation_code,
CIS_RESP_INTERNAL_ERROR);
log_message('error',
"Internal CIS error for activation code $activation_code");
$this->videos_model->send_upload_error_email($activation_code,
CIS_RESP_INTERNAL_ERROR);
}
// Unreachable error is announced by a CIS-LB which was unable to
// contact an CIS.
else if ($error_name == 'unreachable')
{
$this->videos_model->set_cis_response($activation_code,
CIS_RESP_UNREACHABLE);
log_message('error',
"CIS-LB could not reach any CIS for activation code $activation_code");
$this->videos_model->send_upload_error_email($activation_code,
CIS_RESP_UNREACHABLE);
}
else
{
log_message('error',
"Invalid error name received from CIS / CIS-LB for activation code $activation_code");
}
}
/**
* Increments (dis)likes count for video with the specified id and returns to
* the client as plain text the number if likes.
*
* @param string $action 'like' or 'dislike'
* @param string $video_id
* @param string $user_id
*/
public function ajax_vote($action, $video_id)
{
$video_id = intval($video_id);
$user_id = $this->session->userdata('user_id');
$this->load->model('videos_model');
$res = $this->videos_model->vote($video_id, $user_id,
(strcmp($action, 'like') == 0 ? TRUE : FALSE));
if ($res !== -1)
echo $res;
}
/**
* Increments (dis)likes count for a comment with a specified id and returns
* to the client as plain text the number if likes.
*
* @param string $action 'like' or 'dislike'
* @param string $comment_id
*/
public function ajax_vote_comment($action, $comment_id)
{
$comment_id = intval($comment_id);
$user_id = $this->session->userdata('user_id');
$this->load->model('videos_model');
$res = $this->videos_model->vote_comment($comment_id, $user_id,
(strcmp($action, 'like') == 0 ? TRUE : FALSE));
if ($res !== -1)
echo $res;
}
public function ajax_comment($video_id,
$ordering = 'newest', $offset = '0')
{
$this->_ajax_comment(FALSE, $video_id, $ordering, $offset);
}
public function _ajax_comment($return_output, $video_id,
$ordering = 'newest', $offset = '0')
{
$video_id = intval($video_id);
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('',
'');
if ($this->form_validation->run('comment_video'))
{
$this->load->model('videos_model');
$user_id = intval($this->session->userdata('user_id'));
$comment = $this->input->post('comment');
$this->videos_model->comment_video($video_id, $user_id, $comment);
}
// **
// ** MODEL **
// **
$this->load->model('videos_model');
$data['comments'] = $this->videos_model->get_video_comments($video_id,
$offset, $this->config->item('video_comments_per_page'), $ordering);
$data['comments_count'] =
$this->videos_model->get_video_comments_count($video_id);
$data['hottest_comments'] = $this->videos_model->get_video_comments(
$video_id, 0, 2, 'hottest');
$data['video_id'] = $video_id;
$data['user_id'] = $this->session->userdata('user_id');
// Pagination
$this->load->library('pagination');
$pg_config['base_url'] = site_url("video/ajax_comment/$video_id/$ordering/");
$pg_config['uri_segment'] = 5;
$pg_config['total_rows'] = $data['comments_count'];
$pg_config['per_page'] = $this->config->item('video_comments_per_page');
$this->pagination->initialize($pg_config);
$data['comments_pagination'] = $this->pagination->create_links();
// **
// ** VIEWS **
// **
$output = $this->load->view('video/comments_view',
$data, $return_output);
if ($return_output)
return $output;
}
public function _is_user_loggedin($param)
{
if (! $this->session->userdata('user_id'))
return FALSE;
return TRUE;
}
public function _do_comment($comment)
{
// Note: Videos_model must be already loaded.
$this->load->model('videos_model');
$video_id = intval($this->input->post('video-id'));
$user_id = intval($this->session->userdata('user_id'));
$this->videos_model->comment_video($video_id, $user_id, $comment);
}
public function _valid_tags($tags)
{
$tok = strtok($tags, ',');
while ($tok != FALSE)
{
$tok = trim($tok);
if (!ctype_alnum($tok))
return FALSE;
$tok = strtok(',');
}
return TRUE;
}
public function _valid_upload($file)
{
if ($_FILES['video-upload-file']['tmp_name'])
{
// Upload library
$config_upload = array();
$config_upload['upload_path'] = './data/upload';
$config_upload['allowed_types'] = '*';
$this->load->library('upload', $config_upload);
if ($this->upload->do_upload('video-upload-file'))
{
$upload_data = $this->upload->data();
$this->uploaded_file = $upload_data['file_name'];
$this->load->helper('video');
$this->av_info = get_av_info($upload_data['full_path']);
if (!$this->av_info)
return FALSE;
return TRUE;
}
else
{
$this->form_validation->set_message('_valid_upload',
$this->upload->display_errors('',
''));
return FALSE;
}
}
$this->form_validation->set_message('_valid_upload',
$this->lang->line('_required_upload'));
return FALSE;
}
/**
* OBSOLETE: AJAX page which retrieves a video plugin.
*
* The view associated with this controller should be parameter type
* concatenated with '_plugin_view' and must be located in
* 'application/views/video'.
*
* @param string $type 'ns-vlc', 'ns-html5'
*/
public function plugin($type)
{
$url = $this->input->post('url', TRUE);
$this->_plugin($type, $url);
}
/**
* OBSOLETE: Video plugin controller
*
* See plugin function for details. If the second parameter is TRUE
* the output is return instead of being displayed (used in preloading).
*/
public function _plugin($type, $url, $return_output=FALSE)
{
if ($type == 'ns-html5')
$data['url'] = 'tribe://' . $url;
else if ($type == 'ns-vlc')
$data['url'] = $url;
$output = $this->load->view('video/'. $type . '_plugin_view', $data,
$return_output);
if ($return_output)
return $output;
}
}
/* End of file video.php */
/* Location: ./application/controllers/video.php */