'video'); var $video_manager_links = array(); var $video_manager_funcs = array(); var $video_delete_functions = array(); //Holds all delete functions of video private $basic_fields = array(); private $extra_fields = array(); /** * __Constructor of CBVideo */ function init() { global $Cbucket, $cb_columns; $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'; $basic_fields = array( 'videoid', 'videokey', 'userid', 'title','server_ip', 'description', 'tags', 'category','file_directory', 'active', 'date_added', 'broadcast', 'rating', 'file_server_path', 'files_thumbs_path', 'file_thumbs_count', 'duration', 'has_hq', 'has_mobile', 'views', 'file_name', 'rated_by', 'default_thumb', 'comments_count', 'last_viewed', 'featured', 'featured_date', 'status','re_conv_status','conv_progress' ); $cb_columns->object( 'videos' )->register_columns( $basic_fields ); #$this->basic_fields_setup(); } /** * @return array */ function get_basic_fields() { return $this->basic_fields; } function set_basic_fields( $fields = array() ) { return $this->basic_fields = $fields; } function basic_fields_setup() { # Set basic video fields $basic_fields = array( 'videoid', 'videokey', 'userid', 'title', 'description', 'tags', 'category', 'active', 'date_added', 'broadcast', 'rating', 'file_server_path', 'files_thumbs_path', 'file_thumbs_count', 'duration', 'has_hq', 'has_mobile', 'views', 'file_name', 'rated_by', 'default_thumb', 'comments_count', 'last_viewed' ); return $this->set_basic_fields( $basic_fields ); } function get_extra_fields() { return $this->extra_fields; } function set_extra_fields( $fields = array() ) { return $this->extra_fields = $fields; } function get_video_fields( $extra_fields = array() ) { $fields = $this->get_basic_fields(); $extra = $this->get_extra_fields(); if ( empty( $fields ) ) { $fields = $this->basic_fields_setup(); } if ( !empty( $extra ) ) { $fields = array_merge( $fields, $extra ); } if ( !empty( $extra_fields ) ) { if ( is_array( $extra_fields ) ) { $fields = array_merge( $fields, $extra_fields ); } else { $fields[] = $extra_fields; } } # Do make array unqiue, otherwise we might get duplicate # fields $fields = array_unique( $fields ); return $fields; } function add_video_field( $field ) { $extra_fields = $this->get_extra_fields(); if ( is_array( $field ) ) { $extra_fields = array_merge( $extra_fields, $field ); } else { $extra_fields[] = $field; } return $this->set_extra_fields( $extra_fields ); } /** * 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, $basic = false ) { global $db, $cb_columns; $userFields = get_user_fields(); $videoFields = array( 'video' => '*' ); if ( $basic === true ) { $videoFields = get_video_fields(); } $fields = array( 'video' => $videoFields, 'users' => $userFields ); $cond = ( ( $file ) ? 'video.file_name' : ( is_numeric( $vid ) ? 'video.videoid' : 'video.videokey' ) )." = '%s' "; $query = "SELECT ".tbl_fields( $fields )." FROM ".cb_sql_table( 'video' ); $query .= " LEFT JOIN ".cb_sql_table( 'users' )." ON video.userid = users.userid"; if ( $cond ) { $query .= " WHERE ".sprintf( $cond, $vid ); } $query .= 'LIMIT 1'; $query_id = cb_query_id ( $query ); $data = cb_do_action( 'select_video', array( 'query_id' => $query_id, 'videoid' => $vid ) ); if ( $data ) { return $data; } //pr($query,true); $result = select( $query ); if ( $result ) { $result = apply_filters( $result[ 0 ], 'get_video' ); cb_do_action( 'return_video', array( 'query_id' => $query_id, 'results' => $result, 'object_id' => $vid, 'videoid' => $vid ) ); return $result; } 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 get_basic_video_details( $vid ){ return $this->get_video( $vid, false, true ); } /** * 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}' => $video['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'=>$video['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'); return "featured"; } 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 (function_exists('custom_fields_list')) { $custom_flds = $Upload->load_custom_form_fields($array,true); #pr($custom_flds,true); $upload_fields = array_merge($upload_fields,$custom_flds); } /*//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; #pr($array,true); $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['video_users'])) { $query_field[] = 'video_users'; $query_val[] = $array['video_users']; } 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 (!empty($array['embed_code'])) { $query_field[] = 'embed_code'; $query_val[] = $array['embed_code']; } } $query_val[0] = str_replace('<!--', '', $query_val[0]); $query_val[1] = str_replace('<!--', '', $query_val[1]); $query_val[3] = strtolower($query_val[3]); 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")); }elseif(strlen($array['title']) > 100){ e(lang("Title exceeds max length of 100 characters")); }else{ //pr($upload_fields); #pr($query_field,true); $db->update(tbl('video'),$query_field,$query_val," videoid='$vid'"); cb_do_action( 'update_video', array( 'object_id' => $vid, 'results' => $array )); //echo $db->db_query; e(lang("class_vdo_update_msg"),'m'); // condition for Clip press plugin if ( function_exists('post_to_wp_upload_culr') ) { post_to_wp_upload_culr ( $vid ); } } } } /** * 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,true,false); if(!is_default_thumb($thumbs)) { if(is_array($thumbs)) { foreach($thumbs as $thumb) { if (strstr($thumb,'timthumb')) $thumb = $this->convert_tim_thumb_url_to_file($thumb,$file_name=false); if (!empty($vdetails['file_directory'])){ $file = THUMBS_DIR.'/'.$vdetails['file_directory'].'/'.$thumb; }else{ $file = THUMBS_DIR.'/'.$thumb; } if(file_exists($file) && is_file($file)){ unlink($file); } } } else { if (strstr($thumbs,'timthumb')) $thumbs_ = $this->convert_tim_thumb_url_to_file($thumbs,$file_name=false); else $thumbs_ = substr($thumbs, 0, -6); $file = THUMBS_DIR.'/'.$thumbs_; if(file_exists($file) && is_file($file)) unlink($file); if (strstr($thumbs,'timthumb')) $fn = $this->convert_tim_thumb_url_to_file($thumbs,$file_name=true); else $fn = substr($thumbs, 0, -6); $result = db_select("SELECT * FROM ".tbl("video")." WHERE file_name = '$fn'"); if($result) { foreach($result as $result1) { $str = '/'.$result1['file_directory'].'/'; $file1 = THUMBS_DIR.$str.$thumbs; if(file_exists($file1) && is_file($file1)) { unlink($file1); } } } } 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); $fn = $vdetails['file_name']; $result = db_select("SELECT * FROM ".tbl("video")." WHERE file_name = '$fn'"); if($result) { foreach($result as $result1) { $str = '/'.$result1['file_directory'].'/'; $file1 = LOGS_DIR.$str.$vdetails['file_name'].'.log'; if(file_exists($file1) && is_file($file1)) unlink($file1); } } 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); //Extracting File Name for Video File $fn = explode('-', $file); $fn = $fn[0]; $result = db_select("SELECT * FROM ".tbl("video")." WHERE file_name = '$fn'"); if($result) { foreach($result as $result1) { $str = '/'.$result1['file_directory'].'/'; if(file_exists(VIDEOS_DIR.$str.$file) && is_file(VIDEOS_DIR.$str.$file)) unlink(VIDEOS_DIR.$str.$file); } } } } else { if(file_exists(VIDEOS_DIR.'/'.$files) && is_file(VIDEOS_DIR.'/'.$files)) unlink(VIDEOS_DIR.'/'.$files); $fn = substr($files, 0, -7); $result = db_select("SELECT * FROM ".tbl("video")." WHERE file_name = '$fn'"); if($result) { foreach($result as $result1) { $str = '/'.$result1['file_directory'].'/'; if(file_exists(VIDEOS_DIR.$str.$files) && is_file(VIDEOS_DIR.$str.$files)) unlink(VIDEOS_DIR.$str.$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, $cb_columns; $limit = $params['limit']; $order = $params['order']; $cond = ""; $superCond = ""; if( !has_access('admin_access',TRUE) ) { $superCond = " ".("video.status")."='Successful' AND ".("video.active")."='yes' AND ".("video.broadcast")." !='unlisted' "; } else { if($params['active']) $cond .= " ".("video.active")."='".$params['active']."'"; if($params['status']) { if($cond!='') $cond .=" AND "; $cond .= " ".("video.status")."='".$params['status']."'"; } if($params['broadcast']) { if($cond!='') $cond .=" AND "; $cond .= " ".("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 .= " ".("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 .= " ".("video.userid")."='".$params['user']."'"; }else { if($cond!='') $cond .= ' AND ('; $uQu = 0; foreach($params['user'] as $user) { if($uQu>0) $cond .= ' OR '; $cond .= " ".("video.userid")."='".$user."'"; $uQu++; } $cond .=" ) "; } } //non-uid to exclude user videos from related if($params['nonuser']) { if($cond!='') $cond .= ' AND '; $cond .= " ".("video.userid")." <> '".$params['nonuser']."' "; } if($params['editor_pick']) { if($cond!='') $cond .= ' AND '; $cond .= " ".("in_editor_pick")." = '".$params['editor_pick']."' "; } //padding videos in mass_embed pllugin if($params['mass_embed_status']) { if($cond!='') $cond .= ' AND '; $cond .= " ".("video.mass_embed_status")." = '".$params['mass_embed_status']."' "; } $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 .= " ".('video.tags')." LIKE '%".$tag."%'"; if($loop<$total) $tag_n_title .= " OR "; $loop++; } }else { if($tag_n_title!='') $tag_n_title .= ' OR '; $tag_n_title .= " ".('video.tags')." LIKE '%".$params['tags']."%'"; } } //TITLE if($params['title']) { if($tag_n_title!='') $tag_n_title .= ' OR '; $tag_n_title .= " ".('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 .= " ".("video.featured")." = '".$params['featured']."' "; } //VIDEO ID if($params['videoid']) { if($cond!='') $cond .= ' AND '; $cond .= " ".("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 .= " ".("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 .= " ".('video.videoid')." <> '".$params['exclude']."' "; }else { foreach($params['exclude'] as $exclude) { if($cond!='') $cond .= ' AND '; $cond .= " ".('video.videoid')." <> '".$exclude."' "; } } } //Duration if($params['duration']) { $duration_op = $params['duration_op']; if(!$duration_op) $duration_op = "="; if($cond!='') $cond .= ' AND '; $cond .= " ".('video.duration')." ".$duration_op." '".$params['duration']."' "; } //Filename if($params['filename']) { if(!is_array($params['filename'])) { if($cond!='') $cond .= ' AND '; $cond .= " ".('video.file_name')." <> '".$params['filename']."' "; }else { if($cond!='') $cond .= ' AND ('; $fileNameQue = 0; foreach($params['filename'] as $filename) { if($fileNameQue>0) $cond .= ' OR '; $cond .= " ".("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; } } } $fields = array( 'video' => get_video_fields(), // 'users' => get_user_fields() 'users' => $cb_columns->object('users')->temp_change('featured','user_featured')->get_columns() ); if (!isset($fields['video_users'])) { $fields[] = 'video_users'; } $fields = tbl_fields( $fields ); if(!$params['count_only'] && !$params['show_related']) { $query = "SELECT $fields FROM ".cb_sql_table( 'video' ); $query .= " LEFT JOIN ".cb_sql_table( 'users' )." ON video.userid = users.userid"; if(!empty($superCond)) { if ($cond !=="") { $cond .= " AND ".$superCond; } else { $cond .= $superCond; } } if( $cond ) { $query .= " WHERE ".$cond; } $query .= $order ? " ORDER BY ".$order : false; $query .= $limit ? " LIMIT ".$limit : false; #pr( $query, true ); $result = select( $query ); #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; } global $cbsearch; if($params['show_related']) { $cond = ""; if($superCond) $cond = $superCond." AND "; $cond .= "MATCH(".("video.title,video.tags").") AGAINST ('".$params['title']."' IN BOOLEAN MODE) "; if($params['exclude']) { if($cond!='') $cond .= ' AND '; $cond .= " ".('video.videoid')." <> '".$params['exclude']."' "; } $query = " SELECT ".$fields." FROM ".cb_sql_table('video'); $query .= " LEFT JOIN ".cb_sql_table('users'); $query .= " ON video.userid = users.userid "; if( $cond ) { $query .= " WHERE ".$cond; } $query .= $order ? " ORDER BY ".$order : false; $query .= $limit ? " LIMIT ".$limit : false; $result = select( $query ); #$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(".("video.title,video.tags").") AGAINST ('".($params['tags'])."' IN BOOLEAN MODE) "; if($params['exclude']) { if($cond!='') $cond .= ' AND '; $cond .= " ".('video.videoid')." <> '".$params['exclude']."' "; } $query = " SELECT ".$fields." FROM ".cb_sql_table('video'); $query .= " LEFT JOIN ".cb_sql_table('users'); $query .= " ON video.userid = users.userid "; if( $cond ) { $query .= " WHERE ".$cond; } $query .= $order ? " ORDER BY ".$order : false; $query .= $limit ? " LIMIT ".$limit : false; $result = select( $query ); #$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']){ if (!empty($superCond)){ if (!empty($cond)){ $cond .= " AND "; } $cond .= $superCond; } return $result = $db->count( cb_sql_table('video') , 'videoid' ,$cond ); } if($params['assign']) assign($params['assign'], apply_filters( $result, 'get_video' ) ); else return apply_filters( $result, 'get_video' ); } /** * 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' AND parent_id='0'"); 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 if comment is not a reply if ($reply_to < 1) $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 .= ''; $code .= ''; $code .= ''; $code .= ''; $code .= 'action = new cbactions(); $this->action->init(); $this->action->type = 'v'; $this->action->name = 'video'; $this->action->obj_class = 'cbvideo'; $this->action->check_func = 'video_exists'; $this->action->type_tbl = $this->dbtbl['video']; $this->action->type_id_field = 'videoid'; } /** * Function used to create value array for email templates * @param video_details ARRAY */ function set_share_email($details) { $this->email_template_vars = array ('{video_title}' => $details['title'], '{video_description}' => $details['description'], '{video_tags}' => $details['tags'], '{video_date}' => cbdate(DATE_FORMAT,strtotime($details['date_added'])), '{video_link}' => video_link($details), '{video_thumb}'=> GetThumb($details) ); $this->action->share_template_name = 'share_video_template'; $this->action->val_array = $this->email_template_vars; } /** * Function used to use to initialize search object for video section * op=>operator (AND OR) */ function init_search() { $this->search = new cbsearch; $this->search->db_tbl = "video"; $this->search->columns =array( array('field'=>'title','type'=>'LIKE','var'=>'%{KEY}%'), array('field'=>'tags','type'=>'LIKE','var'=>'%{KEY}%','op'=>'OR'), array('field'=>'broadcast','type'=>'!=','var'=>'unlisted','op'=>'AND','value'=>'static'), array('field'=>'status','type'=>'=','var'=>'Successful','op'=>'AND','value'=>'static') ); //commit this line so that videos search can be applied to %like% instead of whole word search //$this->search->use_match_method = true; $this->search->match_fields = array("title","tags"); $this->search->cat_tbl = $this->cat_tbl; $this->search->display_template = LAYOUT.'/blocks/video.html'; $this->search->template_var = 'video'; $this->search->has_user_id = true; /** * Setting up the sorting thing */ $sorting = array( 'date_added'=> lang("date_added"), 'views' => lang("views"), 'comments' => lang("comments"), 'rating' => lang("rating"), 'favorites' => lang("favorites") ); $this->search->sorting = array( 'date_added'=> " date_added DESC", 'views' => " views DESC", 'comments' => " comments_count DESC ", 'rating' => " rating DESC", 'favorites' => " favorites DeSC" ); /** * Setting Up The Search Fields */ $default = $_GET; if(is_array($default['category'])) $cat_array = array($default['category']); $uploaded = $default['datemargin']; $sort = $default['sort']; $this->search->search_type['videos'] = array('title'=>lang('videos')); $this->search->results_per_page = config('videos_items_search_page'); $fields = array( 'query' => array( 'title'=> lang('keywords'), 'type'=> 'textfield', 'name'=> 'query', 'id'=> 'query', 'value'=>cleanForm($default['query']) ), 'category' => array( 'title' => lang('vdo_cat'), 'type' => 'checkbox', 'name' => 'category[]', 'id' => 'category', 'value' => array('category',$cat_array), ), 'uploaded' => array( 'title' => lang('uploaded'), 'type' => 'dropdown', 'name' => 'datemargin', 'id' => 'datemargin', 'value' => $this->search->date_margins(), 'checked' => $uploaded, ), 'sort' => array( 'title' => lang('sort_by'), 'type' => 'dropdown', 'name' => 'sort', 'value' => $sorting, 'checked' => $sort ) ); $this->search->search_type['videos']['fields'] = $fields; } /* * Function used to update video and set a thumb as default * @param VID * @param THUMB NUM */ function set_default_thumb($vid,$thumb) { global $db,$LANG; $num = get_thumb_num($thumb); $file = THUMBS_DIR.'/'.$thumb; //if(file_exists($file)) //{ $db->update(tbl("video"),array("default_thumb"),array($num)," videoid='$vid'"); e(lang('vid_thumb_changed'),'m'); //}else{ // e(lang('vid_thumb_change_err')); //} } /** * Function used to get video owner */ function get_video_owner($vid,$idonly=false) { global $db; if($idonly) { $results = $db->select(tbl("video"),"userid"," videoid='$vid' ",1); if($db->num_rows>0) return $results[0]['userid']; else return false; }else{ $results = $db->select(tbl("video"),"*"," videoid='$vid' ",1); if($db->num_rows>0) return $results[0]; else return false; } } /** * Function used to check weather current user is video owner or not */ function is_video_owner($vid,$uid) { global $db; $result = $db->count(tbl($this->dbtbl['video']),'videoid',"videoid='$vid' AND userid='$uid' "); if($result>0) return true; else return false; } /** * Function used to display video manger link */ function video_manager_link($link,$vid) { if(function_exists($link) && !is_array($link)) { return $link($vid); }else { if(!empty($link['title']) && !empty($link['link'])) { return ''.$link['title'].''; } } } /** * Function used to display video manger link temporay */ function video_manager_link_new($link,$vid) { if(function_exists($link) && !is_array($link)) { return $link($vid); }else { if(!empty($link['title']) && !empty($link['link'])) { return ''.$link['title'].''; } } } /** * Function used to display video categories manger link temporay */ function video_categories_manager_link($link,$vid) { if(function_exists($link) && !is_array($link)) { return $link($vid); }else { if(!empty($link['title']) && !empty($link['link'])) { return ''.$link['title'].''; } } } /** * Function used to get video rating details */ function get_video_rating($id) { global $db; if(is_numeric($id)) { $results = $db->select(tbl("video"),"userid,allow_rating,rating,rated_by,voter_ids"," videoid='$id'"); }else $results = $db->select(tbl("video"),"userid,allow_rating,rating,rated_by,voter_ids"," videokey='$id'"); if($db->num_rows>0) return $results[0]; else return false; } /** * Function used to display rating option for videos * this is an OLD TYPICAL RATING SYSTEM * and yes, still with AJAX */ function show_video_rating($params) { $rating = $params['rating']; $ratings = $params['ratings']; $total = $params['total']; $id = $params['id']; $type = $params['type']; if (empty($ratings)) { $ratings = $params['rated_by']; } //Checking Percent { if($total<=10) $total = 10; $perc = $rating*100/$total; $perc = round($perc); $disperc = 100 - $perc; if($ratings <= 0 && $disperc == 100) $disperc = 0; } $perc = $perc.'%'; $disperc = $disperc.'%'; $likes = round($ratings*$perc/100); // get lowest integer if($params['is_rating']) { if(error()) { $rating_msg = error(); $rating_msg = ''.$rating_msg[0].''; } if(msg()) { $rating_msg = msg(); $rating_msg = ''.$rating_msg[0].''; } } assign('perc',$perc); assign('disperc',$disperc); assign('id',$id); assign('type',$type); assign('id',$id); assign('rating_msg',$rating_msg); assign("likes",$likes); assign("dislikes",($ratings-$likes)); assign('disable',$params['disable']); if(SMARTY_VERSION>2) Template('blocks/common/rating.html'); else Template('blocks/rating.html'); } /** * Calculate rating and likes * * @param Arrray $video * @return Array $rating */ function get_video_likes($video) { $ratings = $video['rated_by']; $rating = $video['rating']; $perc = $rating * 10; $likes = round(($perc * $ratings / 100) ); return array('likes' => $likes, 'dislikes' => $ratings - $likes); } /** * Function used to rate video */ function rate_video($id,$rating) { global $db; if(!is_numeric($rating) || $rating <= 9) $rating = 0; if($rating >= 10) $rating = 10; $rating_details = $this->get_video_rating($id); $voter_id = $rating_details['voter_ids']; $new_by = $rating_details['rated_by']; $newrate = $rating_details['rating']; if(phpversion < '5.2.0') global $json; $js = $json; $Oldvoters = explode('|',$voter_id); if(is_array($Oldvoters) && count($Oldvoters)>2) { foreach($Oldvoters as $voter) { if($voter) { $voters[$voter] = array( "userid" => $voter, "time" => now(), "method" => 'old', ); } } }else { if(!empty($js)) $voters = $js->json_decode($voter_id,TRUE); else $voters = json_decode($voter_id,TRUE); } if(!empty($voters)) $already_voted = array_key_exists(userid(),$voters); if(!userid()) e(lang("please_login_to_rate")); elseif(userid()==$rating_details['userid'] && !config('own_video_rating')) e(lang("you_cant_rate_own_video")); elseif(!empty($already_voted)) e(lang("you_hv_already_rated_vdo")); elseif(!config('video_rating') || $rating_details['allow_rating'] !='yes' ) e(lang("vid_rate_disabled")); else { $voters[userid()] = array( "userid" => userid(), "username" => username(), "time" => now(), "rating" => $rating ); $total_voters = count($voters); if(!empty($js)) $voters = $js->json_encode($voters); else $voters = json_encode($voters); $t = $rating_details['rated_by'] * $rating_details['rating']; //$new_by = $rating_details['rated_by'] + 1; $new_by = $total_voters; $newrate = ($t + $rating) / $new_by; if($newrate>10) $newrate = 10; $db->update(tbl($this->dbtbl['video']),array("rating","rated_by","voter_ids"),array($newrate,$new_by,"|no_mc|$voters")," videoid='$id'"); $userDetails = array( "object_id" => $id, "type" => "video", "time" => now(), "rating" => $rating, "userid" => userid(), "username" => username() ); /* Updating user details */ update_user_voted($userDetails); e(lang("thnx_for_voting"),"m"); } $result = array('rating'=>$newrate,'ratings'=>$new_by,'total'=>10,'id'=>$id,'type'=>'video','disable'=>'disabled'); return $result; /* Following code is unused $niddle = "|"; $niddle .= userid(); $niddle .= "|"; $flag = strstr($voter_id, $niddle); //checking if raings are allowed or not $vid_rating = config('video_rating'); if(!userid()) e(lang("please_login_to_rate")); elseif(userid()==$rating_details['userid'] && !config('own_video_rating')) e(lang("you_cant_rate_own_video")); elseif(!empty($flag)) e(lang("you_hv_already_rated_vdo")); elseif(!config('video_rating') || $rating_details['allow_rating'] !='yes' ) e(lang("vid_rate_disabled")); else { if(empty($voter_id)) $voter_id .= "|"; $voter_id .= userid(); $voter_id .= "|"; $t = $rating_details['rated_by'] * $rating_details['rating']; $new_by = $rating_details['rated_by'] + 1; $newrate = ($t + $rating) / $new_by; $db->update(tbl($this->dbtbl['video']),array("rating","rated_by","voter_ids"),array($newrate,$new_by,$voter_id)," videoid='$id'"); e(lang("thnx_for_voting"),"m"); } $result = array('rating'=>$newrate,'ratings'=>$new_by,'total'=>10,'id'=>$id,'type'=>'video','disable'=>'disabled'); return $result; */ } /** * Function used to get playlist items */ function get_playlist_items( $playlist_id, $order = null, $limit = 10 ) { global $db, $cb_columns; $fields = array( 'playlist_items' => $cb_columns->object( 'playlist_items' )->temp_change( 'date_added', 'item_added' )->get_columns(), 'playlists' => $cb_columns->object( 'playlists' )->temp_remove( 'first_item,cover' )->temp_change( 'date_added,description,tags,category', 'playlist_added,playlist_description,playlist_tags,playlist_category' )->get_columns(), 'video' => $cb_columns->object( 'videos' )->get_columns() ); $query = "SELECT ".table_fields( $fields )." FROM ".table( 'playlist_items' ); $query .= " LEFT JOIN ".table( 'playlists' )." ON playlist_items.playlist_id = playlists.playlist_id"; $query .= " LEFT JOIN ".table( 'video' )." ON playlist_items.object_id = video.videoid"; $query .= " WHERE playlist_items.playlist_id = '".$playlist_id."' "; if ( !is_null( $order ) ) { $query .= "ORDER BY ".$order; } if ( $limit > 0 ) { $query .= " LIMIT ".$limit; } $query_id = cb_query_id( $query ); $data = cb_do_action( 'select_playlist_items', array( 'query_id' => $query_id, 'playlist_id' => $playlist_id ) ); if ( $data ) { return $data; } $data = select( $query ); if ( $data ) { cb_do_action( 'return_playlist_items', array( 'query_id' => $query_id, 'results' => $data ) ); return $data; } return false; } /** * Function used to add video in quicklist */ function add_to_quicklist($id) { global $json, $sess, $userquery; if($this->exists($id)) { if(phpversion() < '5.2.0') { $list = $json->decode($sess->get_cookie(QUICK_LIST_SESS), true); } else { $list = json_decode($sess->get_cookie(QUICK_LIST_SESS), true); } $list[] = $id; $new_list = array_unique($list); /*//Getting list of videos $vids = $this->get_videos(array('videoids'=>$new_list)); $newlist = array(); //setting up the list if($vids) foreach($vids as $vid) { $newlist[$vid['videoid']] = array( 'title' => $vid['title'], 'description' => $vid['description'], 'duration' => SetTime($vid['duration']), 'thumb' => get_thumb($vid), 'url' => video_link($video), 'owner' => $vid['username'], 'ownner_url' => $userquery->profile_link($vid), 'date_added' => $vid['date_added'], 'views' => $vid['views'], ); }*/ if(phpversion() < '5.2.0') { $sess->set_cookie(QUICK_LIST_SESS,$json->encode($new_list)); } else { $sess->set_cookie(QUICK_LIST_SESS,json_encode($new_list)); } return true; }else return false; } /** * Removing video from quicklist */ function remove_from_quicklist($id) { global $json, $sess; if(phpversion() < '5.2.0') { $list = $json->decode($sess->get_cookie(QUICK_LIST_SESS), true); } else { $list = json_decode($sess->get_cookie(QUICK_LIST_SESS), true); } $key = array_search($id,$list); unset($list[$key]); if(phpversion() < '5.2.0') { $sess->set_cookie(QUICK_LIST_SESS,$json->encode($list)); } else { $sess->set_cookie(QUICK_LIST_SESS,json_encode($list)); } return true; } /** * function used to count num of quicklist */ function total_quicklist() { global $json, $sess; $total = $sess->get_cookie(QUICK_LIST_SESS); if(phpversion() < '5.2.0') { $total = $json->decode($total, true); } else { $total = json_decode($total, true); } return count($total); } /** * Function used to get quicklist */ function get_quicklist() { global $json, $sess; if(phpversion() < '5.2.0') { return $json->decode($sess->get_cookie(QUICK_LIST_SESS), true); } else { return json_decode($sess->get_cookie(QUICK_LIST_SESS), true); } } /** * Function used to remove all items of quicklist */ function clear_quicklist() { global $sess; $sess->set_cookie(QUICK_LIST_SESS,''); } /** * Function used to check weather video is downloadable or not */ function downloadable($vdo) { $file = get_video_file($vdo,false); if($file) return true; else return false; } /** * Function used get comments of videos */ function get_comments($params=NULL) { global $db; $comtbl = tbl("comments"); $limit = $params['limit']; $order = $params['order']; $type = $params['type']; if($type) $cond = " $comtbl.type = '$type'"; else $cond = ''; switch($type) { case 'v': { $sectbl = tbl('video'); $sectblName = 'video'; $secfields = $sectbl.".videokey,".$sectbl.".videoid,".$sectbl.".file_name,".$sectbl.".title"; if($cond) { $cond .= " AND"; } $cond .= " $comtbl.type_id = $sectbl.videoid"; } break; case 't': { $sectbl = tbl('group_topics'); $sectblName = 'group_topics'; $secfields = $sectbl.".topic_title,".$sectbl.".topic_id,".$sectbl.".topic_title"; if($cond) { $cond .= " AND"; } $cond .= " $comtbl.type_id = $sectbl.topic_id"; } break; case 'c': { $sectbl = tbl('users'); $sectblName = 'users'; $secfields = $sectbl.".username,".$sectbl.".userid"; if($cond) { $cond .= " AND"; } $cond .= " $comtbl.type_id = $sectbl.userid"; } break; default: { $sectbl = tbl('video'); $sectblName = 'video'; $secfields = $sectbl.".videokey,".$sectbl.".videoid,".$sectbl.".file_name,".$sectbl.".title"; if($cond) { $cond .= " AND"; } $cond .= " $comtbl.type_id = $sectbl.videoid"; } } if($params['cond']) $cond .= " ".$params['cond']; if(!$params['count_only']) { $result = $db->select(tbl("comments,".$sectblName.""), "$comtbl.*,$secfields", $cond,$limit,$order); // echo $db->db_query; } if($params['count_only']) return $result = $db->count(tbl("comments,video"),"*",$cond); else return $result; } /** * Function used get single comment */ function get_comment($cid) { global $db; $result = $db->select(tbl("comments"),"*", " comment_id = $cid"); if($result) return $result[0]; else return false; } /** * Function used get single comment */ function send_notifications() { // Put your device token here (without spaces): $deviceToken = '610b18964b4ec3ccb8157ff22cb917fe0f6b9c1673cd4229674d87eb9aa0e5b1'; // Put your private key's passphrase here: $passphrase = 'janjua'; // Put your alert message here: $message = 'Jeevay Pakistan!'; //////////////////////////////////////////////////////////////////////////////// $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; // Create the payload body $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); // Encode the payload as JSON $payload = json_encode($body); // Build the binary notification $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; // Send it to the server $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL; // Close the connection to the server fclose($fp); } /** * Function used to convert timthumb url to filename and file * @param : url, flag * @date : 6/2/2015 * @author : Fahad Abbas * @reason : to delete the thumb from server forcefully */ function convert_tim_thumb_url_to_file($url,$file_name=false) { $thumb = explode('src=',$url); if ($file_name) $thumb = explode('-', $thumb[1]); else $thumb = explode('&', $thumb[1]); $fn = $thumb[0]; return $fn; } /** * Function used update comment */ // function update_comment($cid,$comment) { // global $db; // if(!$comment) { // e(lang('usr_cmt_err1'),e); // } else { // $db->update(tbl("comments"),array("comment"),array($comment)," comment_id = $cid"); // e(lang("Comment Updated"),m); // } // } } ?>