'video');
var $video_manager_links = array();
var $video_manager_funcs = array();
var $video_delete_functions = array(); //Holds all delete functions of video
/**
* __Constructor of CBVideo
*/
function init()
{
global $Cbucket;
$this->cat_tbl = 'video_categories';
$this->section_tbl = 'video';
$this->use_sub_cats = TRUE;
$this->init_actions();
$this->init_collections();
if(config('vid_cat_height'));
$this->cat_thumb_height = config('vid_cat_height');
if(config('vid_cat_width'));
$this->cat_thumb_width = config('vid_cat_width');
if(isSectionEnabled('videos'))
$Cbucket->search_types['videos'] = "cbvid";
$Cbucket->clipbucket_footer[] = 'check_cbvideo';
$this->video_delete_functions[] = 'delete_video_from_collection';
}
/**
* Initiating Collections
*/
function init_collections()
{
$this->collection = new Collections();
$this->collection->objType = "v";
$this->collection->objClass = "cbvideo";
$this->collection->objTable = "video";
$this->collection->objName = "Video";
$this->collection->objFunction = "video_exists";
$this->collection->objFieldID = "videoid";
}
/**
* Function used to check weather video exists or not
* @param VID or VKEY
*/
function video_exists($vid)
{
global $db;
if(is_numeric($vid))
return $db->count(tbl("video"),"videoid"," videoid='$vid' ");
else
return $db->count(tbl("video"),"videoid"," videokey='$vid' ");
//return $this->get_video($vid);
}
function exists($vid){return $this->video_exists($vid);}
function videoexists($vid){return $this->video_exists($vid);}
/**
* Function used to get video data
*/
function get_video($vid,$file=false)
{
global $db;
$userFields = "users.userid,users.username,users.avatar,users.avatar_url,users.email";
if(!$file)
{
if(is_numeric($vid))
$results = $db->select(tbl("video,users"),tbl("video.*,$userFields"),tbl("video.videoid='$vid'")." AND ".tbl("video.userid=").tbl("users.userid"));
else
$results = $db->select(tbl("video,users"),tbl("video.*,$userFields"),tbl("video.videokey='$vid'")." AND ".tbl("video.userid=").tbl("users.userid"));
}else
{
$results = $db->select(tbl("video,users"),tbl("video.*,$userFields"),tbl("video.file_name='$vid'")." AND ".tbl("video.userid=").tbl("users.userid"));
}
if($db->num_rows>0)
{
return $results[0];
}else{
return false;
}
}
function getvideo($vid){return $this->get_video($vid);}
function get_video_data($vid){return $this->get_video($vid);}
function getvideodata($vid){return $this->get_video($vid);}
function get_video_details($vid){return $this->get_video($vid);}
function getvideodetails($vid){return $this->get_video($vid);}
/**
* Function used to perform several actions with a video
*/
function action($case,$vid)
{
global $db,$eh;
$video = $this->get_video_details($vid);
if(!$video)
return false;
//Lets just check weathter video exists or not
switch($case)
{
//Activating a video
case 'activate':
case 'av':
case 'a':
{
$db->update(tbl("video"),array('active'),array('yes')," videoid='$vid' OR videokey = '$vid' ");
e(lang("class_vdo_act_msg"),'m');
if(SEND_VID_APPROVE_EMAIL=='yes')
{
//Sending Email
global $cbemail,$userquery;
$tpl = $cbemail->get_template('video_activation_email');
$user_fields = $userquery->get_user_field($video['userid'],"username,email");
$more_var = array
('{username}' => $user_fields['username'],
'{video_link}' => videoLink($video)
);
if(!is_array($var))
$var = array();
$var = array_merge($more_var,$var);
$subj = $cbemail->replace($tpl['email_template_subject'],$var);
$msg = nl2br($cbemail->replace($tpl['email_template'],$var));
//Now Finally Sending Email
cbmail(array('to'=>$user_fields['email'],'from'=>WEBSITE_EMAIL,'subject'=>$subj,'content'=>$msg));
}
if(($video['broadcast']=='public' || $video['broadcast'] =="logged")
&& $video['subscription_email']=='pending')
{
//Sending Subscription email in background
if (stristr(PHP_OS, 'WIN'))
{
exec(php_path()." -q ".BASEDIR."/actions/send_subscription_email.php $vid ");
} else {
exec(php_path()." -q ".BASEDIR."/actions/send_subscription_email.php $vid &> /dev/null &");
}
}
}
break;
//Deactivating a video
case "deactivate":
case "dav":
case "d":
{
$db->update(tbl("video"),array('active'),array('no')," videoid='$vid' OR videokey = '$vid' ");
e(lang("class_vdo_act_msg1"),'m');
}
break;
//Featuring Video
case "feature":
case "featured":
case "f":
{
$db->update(tbl("video"),array('featured','featured_date'),array('yes',now())," videoid='$vid' OR videokey = '$vid' ");
e(lang("class_vdo_fr_msg"),'m');
}
break;
//Unfeatured video
case "unfeature":
case "unfeatured":
case "uf":
{
$db->update(tbl("video"),array('featured'),array('no')," videoid='$vid' OR videokey = '$vid' ");
e(lang("class_fr_msg1"),'m');
}
break;
}
}
/**
* Function used to update video
*/
function update_video($array=NULL)
{
global $eh,$Cbucket,$db,$Upload;
$Upload->validate_video_upload_form(NULL,TRUE);
if(empty($eh->error_list))
{
$required_fields = $Upload->loadRequiredFields($array);
$location_fields = $Upload->loadLocationFields($array);
$option_fields = $Upload->loadOptionFields($array);
$upload_fields = array_merge($required_fields,$location_fields,$option_fields);
//Adding Custom Upload Fields
if(count($Upload->custom_upload_fields)>0)
$upload_fields = array_merge($upload_fields,$Upload->custom_upload_fields);
//Adding Custom Form Fields
if(count($Upload->custom_form_fields)>0)
$upload_fields = array_merge($upload_fields,$Upload->custom_form_fields);
//Adding custom fields from group
if(count($Upload->custom_form_fields_groups)>0)
{
$custom_fields_from_group_fields = array();
$custom_fields_from_group = $Upload->custom_form_fields_groups;
foreach($custom_fields_from_group as $cffg)
{
$custom_fields_from_group_fields = array_merge($custom_fields_from_group_fields,$cffg['fields']);
}
$upload_fields = array_merge($upload_fields,$custom_fields_from_group_fields);
}
if(!$array)
$array = $_POST;
$vid = $array['videoid'];
if(is_array($_FILES))
$array = array_merge($array,$_FILES);
foreach($upload_fields as $field)
{
$name = formObj::rmBrackets($field['name']);
$val = $array[$name];
if(empty($val) && $field['use_if_value'])
{
}else
{
if($field['use_func_val'])
$val = $field['validate_function']($val);
if(!empty($field['db_field']))
$query_field[] = $field['db_field'];
if(is_array($val))
{
$new_val = '';
foreach($val as $v)
{
$new_val .= "#".$v."# ";
}
$val = $new_val;
}
if(!$field['clean_func'] || (!apply_func($field['clean_func'],$val) && !is_array($field['clean_func'])))
$val = ($val);
else
$val = apply_func($field['clean_func'],sql_free('|no_mc|'.$val));
if(!empty($field['db_field']))
$query_val[] = $val;
}
}
#$query = "INSERT INTO video (";
$total_fields = count($query_field);
/*for($key=0;$key<$total_fields;$key++)
{
$query .= query_field[$key]." = '".$query_val[$key]."'" ;
if($key<$total_fields-1)
$query .= ',';
}*/
if(has_access('admin_access',TRUE))
{
if(!empty($array['status']))
{
$query_field[] = 'status';
$query_val[] = $array['status'];
}
if(!empty($array['duration']) && is_numeric($array['duration']) && $array['duration']>0)
{
$query_field[] = 'duration';
$query_val[] = $array['duration'];
}
if(!empty($array['views']))
{
$query_field[] = 'views';
$query_val[] = $array['views'];
}
if(!empty($array['rating']))
{
$query_field[] = 'rating';
$rating = $array['rating'];
if(!is_numeric($rating) || $rating<0 || $rating>10)
$rating = 1;
$query_val[] = $rating;
}
if(!empty($array['rated_by']))
{
$query_field[] = 'rated_by';
$query_val[] = $array['rated_by'];
}
}
if(!userid())
{
e(lang("you_dont_have_permission_to_update_this_video"));
}elseif(!$this->video_exists($vid)){
e(lang("class_vdo_del_err"));
}elseif(!$this->is_video_owner($vid,userid()) && !has_access('admin_access',TRUE))
{
e(lang("no_edit_video"));
}else{
//pr($upload_fields);
$db->update(tbl('video'),$query_field,$query_val," videoid='$vid'");
//echo $db->db_query;
e(lang("class_vdo_update_msg"),'m');
}
}
}
/**
* Function used to delete a video
*/
function delete_video($vid)
{
global $db;
if($this->video_exists($vid))
{
$vdetails = $this->get_video($vid);
if($this->is_video_owner($vid,userid()) || has_access('admin_access',TRUE))
{
#THIS SHOULD NOT BE REMOVED :O
//list of functions to perform while deleting a video
$del_vid_funcs = $this->video_delete_functions;
if(is_array($del_vid_funcs))
{
foreach($del_vid_funcs as $func)
{
if(function_exists($func))
{
$func($vdetails);
}
}
}
//Finally Removing Database entry of video
$db->execute("DELETE FROM ".tbl("video")." WHERE videoid='$vid'");
//Removing Video From Playlist
$db->execute("DELETE FROM ".tbl("playlist_items")." WHERE object_id='$vid' AND playlist_item_type='v'");
$db->update(tbl("users"),array("total_videos"),array("|f|total_videos-1")," userid='".$vdetails['userid']."'");
//Removing video Comments
$db->delete(tbl("comments"),array("type","type_id"),array("v",$vdetails['videoid']));
//Removing video From Favortes
$db->delete(tbl("favorites"),array("type","id"),array("v",$vdetails['videoid']));
e(lang("class_vdo_del_msg"),'m');
}else{
e(lang("You cannot delete this video"));
}
}else{
e(lang("class_vdo_del_err"));
}
}
/**
* Function used to remove video thumbs
*/
function remove_thumbs($vdetails)
{
//First lets get list of all thumbs
$thumbs = get_thumb($vdetails,1,true,false,false);
if(!is_default_thumb($thumbs))
{
if(is_array($thumbs))
{
foreach($thumbs as $thumb)
{
$file = THUMBS_DIR.'/'.$thumb;
if(file_exists($file) && is_file($file))
unlink($file);
}
}else{
$file = THUMBS_DIR.'/'.$thumbs;
if(file_exists($file) && is_file($file))
unlink($file);
}
e(lang("vid_thumb_removed_msg"),'m');
}
}
/**
* Function used to remove video log
*/
function remove_log($vdetails)
{
global $db;
$src = $vdetails['videoid'];
$file = LOGS_DIR.'/'.$vdetails['file_name'].'.log';
$db->execute("DELETE FROM ".tbl("video_file")." WHERE src_name = '$src'");
if(file_exists($file))
unlink($file);
e(lang("vid_log_delete_msg"),'m');
}
/**
* Function used to remove video files
*/
function remove_files($vdetails)
{
//Return nothing incase there is no input
if(!$vdetails)
{
e("No input details specified");
return false;
}
//Callign Video Delete Functions
call_delete_video_function($vdetails);
//Getting list of files
$files = get_video_file($vdetails,false,false,true);
if(is_array($files))
{
foreach($files as $file)
{
if(file_exists(VIDEOS_DIR.'/'.$file) && is_file(VIDEOS_DIR.'/'.$file))
unlink(VIDEOS_DIR.'/'.$file);
}
}else{
if(file_exists(VIDEOS_DIR.'/'.$files) && is_file(VIDEOS_DIR.'/'.$files))
unlink(VIDEOS_DIR.'/'.$files);
}
e(lang("vid_files_removed_msg"),'m');
}
/**
* Function used to get videos
* this function has all options
* that you need to fetch videos
* please see docs.clip-bucket.com for more details
*/
function get_videos($params)
{
global $db;
$limit = $params['limit'];
$order = $params['order'];
$cond = "";
$superCond = "";
if(!has_access('admin_access',TRUE))
{
$superCond = $cond .= " ".tbl("video.status")."='Successful' AND
".tbl("video.active")."='yes' AND ".tbl("video.broadcast")." !='unlisted' ";
}else
{
if($params['active'])
$cond .= " ".tbl("video.active")."='".$params['active']."'";
if($params['status'])
{
if($cond!='')
$cond .=" AND ";
$cond .= " ".tbl("video.status")."='".$params['status']."'";
}
if($params['broadcast'])
{
if($cond!='')
$cond .=" AND ";
$cond .= " ".tbl("video.broadcast")."='".$params['broadcast']."'";
}
}
//Setting Category Condition
$all = false;
if(!is_array($params['category']))
if(strtolower($params['category'])=='all')
$all = true;
if($params['category'] && !$all)
{
if($cond!='')
$cond .= ' AND ';
$cond .= " (";
if(!is_array($params['category']))
{
$cats = explode(',',$params['category']);
}else
$cats = $params['category'];
$count = 0;
foreach($cats as $cat_params)
{
$count ++;
if($count>1)
$cond .=" OR ";
$cond .= " ".tbl("video.category")." LIKE '%#$cat_params#%' ";
}
$cond .= ")";
}
//date span
if($params['date_span'])
{
if($cond!='')
$cond .= ' AND ';
if($params['date_span_column'])
$column = $params['date_span_column'];
else
$column = 'date_added';
$cond .= " ".cbsearch::date_margin($column,$params['date_span']);
}
//uid
if($params['user'])
{
if(!is_array($params['user']))
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl("video.userid")."='".$params['user']."'";
}else
{
if($cond!='')
$cond .= ' AND (';
$uQu = 0;
foreach($params['user'] as $user)
{
if($uQu>0)
$cond .= ' OR ';
$cond .= " ".tbl("video.userid")."='".$user."'";
$uQu++;
}
$cond .=" ) ";
}
}
//non-uid to exclude user videos from related
if($params['nonuser'])
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl("video.userid")." <> '".$params['nonuser']."' ";
}
$tag_n_title='';
//Tags
if($params['tags'])
{
//checking for commas ;)
$tags = explode(",",$params['tags']);
if(count($tags)>0)
{
if($tag_n_title!='')
$tag_n_title .= ' OR ';
$total = count($tags);
$loop = 1;
foreach($tags as $tag)
{
$tag_n_title .= " ".tbl('video.tags')." LIKE '%".$tag."%'";
if($loop<$total)
$tag_n_title .= " OR ";
$loop++;
}
}else
{
if($tag_n_title!='')
$tag_n_title .= ' OR ';
$tag_n_title .= " ".tbl('video.tags')." LIKE '%".$params['tags']."%'";
}
}
//TITLE
if($params['title'])
{
if($tag_n_title!='')
$tag_n_title .= ' OR ';
$tag_n_title .= " ".tbl('video.title')." LIKE '%".$params['title']."%'";
}
if($tag_n_title)
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ($tag_n_title) ";
}
//FEATURED
if($params['featured'])
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl("video.featured")." = '".$params['featured']."' ";
}
//VIDEO ID
if($params['videoid'])
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl("video.videoid")." = '".$params['videoid']."' ";
}
//VIDEO ID
if($params['videoids'])
{
if(is_array($params['videoids']))
{
if($cond!='')
$cond .= ' AND ';
$cond .= ' ( ';
$curVid = 0;
foreach($params['videoids'] as $vid)
{
if(is_numeric($vid))
{
if($curVid>0)
$cond .= " OR ";
$cond .= " ".tbl("video.videoid")." = '".$vid."' ";
}
$curVid++;
}
$cond .= ' ) ';
}
}
//VIDEO KEY
if($params['videokey'])
{
if(!is_array($params['videokey']))
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl("video.videokey")." = '".$params['videokey']."' ";
}else
{
if($cond!='')
$cond .= ' AND (';
$vkeyQue = 0;
foreach($params['videokey'] as $videokey)
{
if($vkeyQue>0)
$cond .= ' OR ';
$cond .= " ".tbl("video.videokey")." = '".$videokey."' ";
$vkeyQue++;
}
$cond .=" ) ";
}
}
//Exclude Vids
if($params['exclude'])
{
if(!is_array($params['exclude']))
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.videoid')." <> '".$params['exclude']."' ";
}else
{
foreach($params['exclude'] as $exclude)
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.videoid')." <> '".$exclude."' ";
}
}
}
//Duration
if($params['duration'])
{
$duration_op = $params['duration_op'];
if(!$duration_op) $duration_op = "=";
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.duration')." ".$duration_op." '".$params['duration']."' ";
}
//Filename
if($params['filename'])
{
if(!is_array($params['filename']))
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.file_name')." <> '".$params['filename']."' ";
}else
{
if($cond!='')
$cond .= ' AND (';
else
$cond .=" ( ";
$fileNameQue = 0;
foreach($params['filename'] as $filename)
{
if($fileNameQue>0)
$cond .= ' OR ';
$cond .= " ".tbl("video.file_name")." = '".$filename."' ";
$fileNameQue++;
}
$cond .=" ) ";
}
}
if($params['cond'])
{
if($params['cond_and'])
if($cond!='')
$cond .= ' AND ';
$cond .= " ".$params['cond'];
}
$functions = cb_get_functions('get_videos');
if($functions)
{
foreach($functions as $func)
{
$array = array('params'=>$params,'cond'=>$cond);
if(function_exists($func['func']))
{
$returned = $func['func']($array);
if($returned)
$cond = $returned;
}
}
}
if(!$params['count_only'] && !$params['show_related'])
{
if(!empty($cond))
$cond .= " AND ";
$result = $db->select(tbl('video,users'),tbl('video.*,users.userid,users.username'),$cond." ".tbl("video.userid")." = ".tbl("users.userid"),$limit,$order);
//echo $db->db_query;
}
if($params['show_related'])
{
$cond = "";
if($superCond)
$cond = $superCond." AND ";
$cond .= "MATCH(".tbl("video.title,video.tags").")
AGAINST ('".cbsearch::set_the_key($params['title'])."' IN BOOLEAN MODE) ";
if($params['exclude'])
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.videoid')." <> '".$params['exclude']."' ";
}
$result = $db->select(tbl('video,users'),tbl('video.*,users.userid,users.username'),
$cond." AND ".tbl("video.userid")." = ".tbl("users.userid"),$limit,$order);
if($db->num_rows == 0)
{
$cond = "";
if($superCond)
$cond = $superCond." AND ";
//Try Finding videos via tags
$cond .= "MATCH(".tbl("video.title,video.tags").")
AGAINST ('".cbsearch::set_the_key($params['tags'])."' IN BOOLEAN MODE) ";
if($params['exclude'])
{
if($cond!='')
$cond .= ' AND ';
$cond .= " ".tbl('video.videoid')." <> '".$params['exclude']."' ";
}
$result = $db->select(tbl('video,users'),tbl('video.*,users.userid,users.username'),
$cond." AND ".tbl("video.userid")." = ".tbl("users.userid"),$limit,$order);
}
assign($params['assign'],$result);
}
if($params['pr']) pr($result,true);
if($params['count_only'])
return $result = $db->count(tbl('video'),'*',$cond);
if($params['assign'])
assign($params['assign'],$result);
else
return $result;
}
/**
* Function used to count total video comments
*/
function count_video_comments($id)
{
global $db;
$total_comments = $db->count(tbl('comments'),"comment_id","type='v' AND type_id='$id'");
return $total_comments;
}
/**
* Function used to update video comments count
*/
function update_comments_count($id)
{
global $db;
$total_comments = $this->count_video_comments($id);
$db->update(tbl("video"),array("comments_count","last_commented"),array($total_comments,now())," videoid='$id'");
}
/**
* Function used to add video comment
*/
function add_comment($comment,$obj_id,$reply_to=NULL,$force_name_email=false)
{
global $myquery,$db;
$video = $this->get_video_details($obj_id);
if(!$video)
e(lang("class_vdo_del_err"));
else
{
//Getting Owner Id
$owner_id = $this->get_video_owner($obj_id,true);
$add_comment = $myquery->add_comment($comment,$obj_id,$reply_to,'v',$owner_id,videoLink($video),$force_name_email);
if($add_comment)
{
//Loggin Comment
$log_array = array
(
'success'=>'yes',
'details'=> "comment on a video",
'action_obj_id' => $obj_id,
'action_done_id' => $add_comment,
);
insert_log('video_comment',$log_array);
//Updating Number of comments of video
$this->update_comments_count($obj_id);
}
return $add_comment;
}
}
/**
* Function used to remove video comment
*/
function delete_comment($cid,$is_reply=FALSE)
{
global $myquery,$db;
$remove_comment = $myquery->delete_comment($cid,'v',$is_reply);
if($remove_comment)
{
//Updating Number of comments of video
$this->update_comments_count($obj_id);
}
return $remove_comment;
}
/**
* Function used to generate Embed Code
*/
function embed_code($vdetails,$type='embed_object')
{
//Checking for video details
if(!is_array($vdetails))
{
$vdetails = $this->get_video($vdetails);
}
$embed_code = false;
$funcs = $this->embed_func_list;
if(is_array($funcs))
{
foreach($funcs as $func)
{
if(@function_exists($func))
$embed_code = $func($vdetails);
if($embed_code)
break;
}
}
if($type=='iframe')
{
$embed_code = '';
}
if(!$embed_code)
{
//Default ClipBucket Embed Code
if(function_exists('default_embed_code'))
{
$embed_code = default_embed_code($vdetails);
}else
{
//return new Embed Code
$vid_file = get_video_file($vdetails,false,false);
if($vid_file)
{
$code = '';
$code .= '