From a161b38e65fa698133402f4fb23548242f494018 Mon Sep 17 00:00:00 2001 From: Dave Tosh Date: Tue, 23 Mar 2010 17:30:14 +0000 Subject: This videolist plugin shows real promise so we shall work on it for v1.8 then release it back to the community. --- actions/addvideo.php | 216 ++++++++++++++++++++++++++ actions/comments_delete/add.php | 58 +++++++ actions/delete.php | 44 ++++++ actions/save.php | 16 ++ actions/tubesearch.php | 330 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 664 insertions(+) create mode 100644 actions/addvideo.php create mode 100644 actions/comments_delete/add.php create mode 100644 actions/delete.php create mode 100644 actions/save.php create mode 100644 actions/tubesearch.php (limited to 'actions') diff --git a/actions/addvideo.php b/actions/addvideo.php new file mode 100644 index 000000000..519f6ae04 --- /dev/null +++ b/actions/addvideo.php @@ -0,0 +1,216 @@ + + * @copyright Prateek Choudhary + */ + +// Make sure we're logged in (send us to the front page if not) +gatekeeper(); + +// Get the current page's owner +set_page_owner($_SESSION['container_guid']); + +$page_owner = page_owner_entity(); + +if ($page_owner === false || is_null($page_owner)) { + $page_owner = $_SESSION['user']; + set_page_owner($_SESSION['guid']); +} + +if($page_owner->type == "group") + $entity_referer = $page_owner->type.":".$page_owner->getGUID(); +else + $entity_referer = $page_owner->username; + +require_once(dirname(dirname(__FILE__)) . "/models/lib/class.vimeo.php"); + +function fetchyoutubeDatatitle($videoid){ + $buffer = file_get_contents('http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=rG48P7iz0eo&video_id='.$videoid); + /** + ** generate XML View + **/ + $xml_buffer = new SimpleXMLElement($buffer); + $vidDataTitle = $xml_buffer->video_details->title; + return $vidDataTitle; + //return ""; +} + +function fetchyoutubeDatadesc($videoid){ + $buffer = file_get_contents('http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=rG48P7iz0eo&video_id='.$videoid); + /** + ** generate XML View + **/ + $xml_buffer = new SimpleXMLElement($buffer); + $vidDataDesc = $xml_buffer->video_details->description; + return $vidDataDesc; + //return ""; +} + +function getVimeoInfoDataTitle($iGetVideoId){ + // Now lets do the search query. We will get an response object containing everything we need + $oResponse = VimeoVideosRequest::getInfo($iGetVideoId); + // We want the result videos as an array of objects + $aoVideos = $oResponse->getVideo(); + $title = $aoVideos->getTitle(); + return $title; +} + +function getVimeoInfoDataDesc($iGetVideoId){ + // Now lets do the search query. We will get an response object containing everything we need + $oResponse = VimeoVideosRequest::getInfo($iGetVideoId); + // We want the result videos as an array of objects + $aoVideos = $oResponse->getVideo(); + $description = $aoVideos->getCaption(); + return $description; +} + +function getVimeoInfoImage($iGetVideoId){ + // Now lets do the search query. We will get an response object containing everything we need + $oResponse = VimeoVideosRequest::getInfo($iGetVideoId); + // We want the result videos as an array of objects + $aoVideos = $oResponse->getVideo(); + //get all thumbnails + + $aThumbnails = array(); + foreach($aoVideos->getThumbnails() as $oThumbs) { + $aThumbnails[] = $oThumbs->getImageContent(); + } + + foreach($aThumbnails as $thumbnailArray){ + $thumbnail = $thumbnailArray; + break; + } + + return $thumbnail; +} + +function fetchyoutubeDatathumbnail($videoId){ + $thumbnail = "http://img.youtube.com/vi/".$videoId."/default.jpg"; + return $thumbnail; +} + +function metacafeFetchData($getVideoId){ + $feedURL = "http://www.metacafe.com/api/item/".$getVideoId; + $sxml = new DomDocument; + $sxml->load($feedURL); + $myitem = $sxml->getElementsByTagName('item'); + return $myitem; +} + +function fetchmetacafeTitle($getVideoId){ + $myitem = metacafeFetchData($getVideoId); + foreach($myitem as $searchNode){ + $xmlTitle = $searchNode->getElementsByTagName("title"); + $valueTitle = $xmlTitle->item(0)->nodeValue; + } + return $valueTitle; +} + +function fetchmetacafeDesc($getVideoId){ + $myitem = metacafeFetchData($getVideoId); + foreach($myitem as $searchNode){ + $xmlDesc = $searchNode->getElementsByTagName("description"); + $valueDesc = $xmlDesc->item(0)->nodeValue; + $ot = "

"; + $ct = "

"; + $string = trim($valueDesc); + $start = intval(strpos($string, $ot) + strlen($ot)); + $desc_src = substr($string,$start,intval(strpos($string,$ct) - $start)); + } + return $desc_src; +} + +function fetchmetacafeImg($getVideoId){ + $myitem = metacafeFetchData($getVideoId); + foreach($myitem as $searchNode){ + $xmlDesc = $searchNode->getElementsByTagName("description"); + $valueDesc = $xmlDesc->item(0)->nodeValue; + $pattern = '/]+src[\\s=\'"]'; + $pattern .= '+([^"\'>\\s]+)/is'; + if(preg_match($pattern,$valueDesc,$match)){ + $thumbnail = $match[1]; + } + } + return $thumbnail; +} + + $pageContainer = $_SESSION['Pagecontainer']; + + + // Initialise a new ElggObject + $videolist = new ElggObject(); + // Tell the system it's a blog post + $videolist->subtype = "videolist"; + // Set its owner to the current user + $videolist->owner_guid = $_SESSION['user']->getGUID(); + + // Set container of the video whether it was uploaded to groups or profile + $videolist->container_guid = $_SESSION['container_guid']; + // For now, set its access to public (we'll add an access dropdown shortly) + $videolist->access_id = $_SESSION['candidate_profile_video_access_id']; + + // In order to Set its title and description appropriately WE need the video ID + $videolist->url = $_SESSION['candidate_profile_video']; + + if($pageContainer == "youtube"){ + $videoIDArray = split("/v/", $videolist->url); + $videolist->video_id = $videoIDArray[1]; + // Now set the video title and description appropriately + $videolist->title = fetchyoutubeDatatitle($videoIDArray[1]); + $videolist->desc = fetchyoutubeDatadesc($videoIDArray[1]); + $videolist->thumbnail = fetchyoutubeDatathumbnail($videoIDArray[1]); + $videolist->videotype = "youtube"; + } + else if($pageContainer == "metacafe"){ + $videolist->video_id = $_SESSION['candidate_profile_video']; + // Now set the video title and description appropriately + $videolist->title = fetchmetacafeTitle($_SESSION['candidate_profile_video']); + $videolist->desc = fetchmetacafeDesc($_SESSION['candidate_profile_video']); + $videolist->thumbnail = fetchmetacafeImg($_SESSION['candidate_profile_video']); + $videolist->videotype = "metacafe"; + } + else if($pageContainer == "vimeo"){ + $videolist->video_id = $_SESSION['candidate_profile_video']; + + // Now set the video title and description appropriately + $videolist->title = getVimeoInfoDataTitle($_SESSION['candidate_profile_video']); + $videolist->desc = getVimeoInfoDataDesc($_SESSION['candidate_profile_video']); + $videolist->thumbnail = getVimeoInfoImage($_SESSION['candidate_profile_video']); + $videolist->videotype = "vimeo"; + } + + // Before we can set metadata, we need to save the blog post + if (!$videolist->save()) { + register_error(elgg_echo("videolist:error")); + forward("pg/videolist/new"); + } + //add video tags + $videolist_tags_array = string_to_tag_array($_SESSION['videolisttags']); + if (is_array($videolist_tags_array)) { + $videolist->tags = $videolist_tags_array; + } + + // add to river + add_to_river('river/object/videolist/create', 'create', $_SESSION['user']->guid, $videolist->guid); + + // add_to_river('river/object/blog/create','create',$_SESSION['user']->guid,$blog->guid); + // Success message + system_message(elgg_echo("videolist:posted")); + // Remove the videolist cache + unset($_SESSION['candidate_profile_video_access_id']); unset($_SESSION['candidate_profile_video']); + unset($_SESSION['videolisttags']);unset($_SESSION['Pagecontainer']); + // Forward to the main videolist page + +forward("pg/videolist/owned/".page_owner_entity()->username); + +// Remove the videolist cache + unset($_SESSION['candidate_profile_video_access_id']); unset($_SESSION['candidate_profile_video']); + unset($_SESSION['videolisttags']);unset($_SESSION['Pagecontainer']);unset($_SESSION['container_guid']); + +?> diff --git a/actions/comments_delete/add.php b/actions/comments_delete/add.php new file mode 100644 index 000000000..a2d672fe9 --- /dev/null +++ b/actions/comments_delete/add.php @@ -0,0 +1,58 @@ + + * @copyright Curverider Ltd 2008-2009 + * @link http://elgg.org/ + */ + + // Make sure we're logged in; forward to the front page if not + gatekeeper(); + action_gatekeeper(); + + // Get input + $entity_guid = (int) get_input('entity_guid'); + $comment_text = get_input('generic_comment'); + + // Let's see if we can get an entity with the specified GUID + if ($entity = get_entity($entity_guid)) { + + // If posting the comment was successful, say so + if ($entity->annotate('generic_comment',$comment_text,$entity->access_id, $_SESSION['guid'])) { + + if ($entity->owner_guid != $_SESSION['user']->getGUID()) + notify_user($entity->owner_guid, $_SESSION['user']->getGUID(), elgg_echo('generic_comment:email:subject'), + sprintf( + elgg_echo('generic_comment:email:body'), + $entity->title, + $_SESSION['user']->name, + $comment_text, + $entity->getURL(), + $_SESSION['user']->name, + $_SESSION['user']->getURL() + ) + ); + + system_message(elgg_echo("generic_comment:posted")); + //add to river + add_to_river('annotation/annotate','comment',$_SESSION['user']->guid,$entity->guid); + + + } else { + register_error(elgg_echo("generic_comment:failure")); + } + + } else { + + register_error(elgg_echo("generic_comment:notfound")); + + } + + // Forward to the + forward($_SERVER['HTTP_REFERER']); + +?> diff --git a/actions/delete.php b/actions/delete.php new file mode 100644 index 000000000..da3ad0c3b --- /dev/null +++ b/actions/delete.php @@ -0,0 +1,44 @@ + + * @copyright Prateek Choudhary + */ +// Make sure we're logged in (send us to the front page if not) +gatekeeper(); + + // Get the current page's owner + $page_owner = page_owner_entity(); + if ($page_owner === false || is_null($page_owner)) { + $page_owner = $_SESSION['user']; + set_page_owner($_SESSION['guid']); + } + + // Get input data + $guid = (int) get_input('video_id'); + + // Make sure we actually have permission to edit + $videos = get_entity($guid); + if ($videos->getSubtype() == "videolist" && $videos->canEdit()) { + + // Get owning user + $owner = get_entity($videos->getOwner()); + // Delete it! + $rowsaffected = $videos->delete(); + if ($rowsaffected > 0) { + // Success message + system_message(elgg_echo("videos:deleted")); + } else { + register_error(elgg_echo("videos:notdeleted")); + } + // Forward to the main video list page + //forward("pg/videolist/owned/" . page_owner_entity()->username); + forward($_SERVER['HTTP_REFERER']); + + } + +?> diff --git a/actions/save.php b/actions/save.php new file mode 100644 index 000000000..61f3eb401 --- /dev/null +++ b/actions/save.php @@ -0,0 +1,16 @@ + + * @copyright Prateek Choudhary + */ + + + + +?> diff --git a/actions/tubesearch.php b/actions/tubesearch.php new file mode 100644 index 000000000..d1a83722c --- /dev/null +++ b/actions/tubesearch.php @@ -0,0 +1,330 @@ + + * @copyright Prateek Choudhary + */ + +// Get the current page's owner +//set_page_owner($_SESSION['container_guid']); + +$page_ownerx = get_entity(get_input('container')); +if(!$page_ownerx) + $page_ownerx = get_user_by_username(get_input('container')); +set_page_owner($page_ownerx->getGUID()); +$page_owner = page_owner_entity(); + +if($page_owner->type == "group") + $container = "group:".$page_ownerx->getGUID(); +else + $container = $page_ownerx->username; + +if ($page_owner === false || is_null($page_owner)) { + $page_owner = $_SESSION['user']; + set_page_owner($_SESSION['guid']); +} + +global $CONFIG; + $queryFeed = get_input('q'); + $start_index = get_input('start_index'); + $results_perpage = 10; + $queryCatgory = get_input('page'); +if (!isset($queryFeed) || empty($queryFeed)) { + +} +else +{ + $q = $queryFeed; + if($queryCatgory == "youtube") + { + $feedURL = "http://gdata.youtube.com/feeds/api/videos?vq=".$queryFeed."&orderby=relevance&start-index=".$start_index."&max-results=10"; + $sxml = simplexml_load_file($feedURL); + + $counts = $sxml->children('http://a9.com/-/spec/opensearchrss/1.0/'); + $total = $counts->totalResults; + $startOffset = $counts->startIndex; + $endOffset = ($startOffset-1) + $counts->itemsPerPage; + + $body = '
'; + $rem = floor($total/10); + $rem*=10; + if($rem<$total) + $last = $rem+1; + $lpVid = $total - $rem; + if($startOffset==1 && ($endOffset)==$total){} + else if($startOffset==1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset+$lpVid)>=$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + $body .= '
'; + $body .= '
'; + $k = 0;$counter = 0; + foreach ($sxml->entry as $entry) { + $k++; + $media = $entry->children('http://search.yahoo.com/mrss/'); + $attrs = $media->group->player->attributes(); + $watch = $attrs['url']; + $vid_array = explode("?v=", $watch); + if(preg_match("/&/", $vid_array[1])){ + $vid_array = explode("&", $vid_array[1]); + $vid_array[1] = $vid_array[0]; + } + + $attrs = $media->group->thumbnail[0]->attributes(); + $thumbnail = $attrs['url']; + $yt = $media->children('http://gdata.youtube.com/schemas/2007'); + $attrs = $yt->duration->attributes(); + $length = $attrs['seconds']; + $gd = $entry->children('http://schemas.google.com/g/2005'); + if ($gd->rating) { + $attrs = $gd->rating->attributes(); + $rating = $attrs['average']; + } else { + $rating = 0; + } + $tags = array(); + $tags[] = $media->group->keywords; + $showEncodedVideo = preg_replace('/(http:)(\/\/)(www.)([^ \/"]*)([^ >"]*)watch\?(v=)([^ >"]*)/i', '$1$2$3$4$5v/$7', $watch); + $body .= '
'; + $body .= ''; + + $body .= ''; + + $body .= ''; + + //$body .= ""; + + $body .= ""; + + $body .= ''; + $body .= '
'; + $body .= ""; + $body .= '
'; + $body .= "".$media->group->title."
"; + $body .= "Duration : " . sprintf("%0.2f", $length/60) . " min.
user rating : ".$rating."
"; + $body .= "Description : ".substr($media->group->description, 0, 140)." ..."; + $body .= '
play | add wwwroot."pg/videolist/new/".$container."/title_videourl/".$vid_array[1]."/page/".$queryCatgory."\");\">
'; + } + $body .= '
'; + print $body; + } + else if($queryCatgory == "metacafe") + { + + + $feedURL = "http://www.metacafe.com/api/videos/?vq=".$queryFeed."&orderby=rating&start-index=".$start_index."&max-results=10"; + + + $sxml = new DomDocument; + $sxml->load($feedURL); + $total = 999; + $startOffset = $start_index; + $endOffset = ($startOffset-1) + $results_perpage; + + $body = '
'; + $rem = floor($total/10); + $rem*=10; + if($rem<$total) + $last = $rem+1; + $lpVid = $total - $rem; + if($startOffset==1 && ($endOffset)==$total){} + else if($startOffset==1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset+$lpVid)>=$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + $body .= '
'; + $k = 0; + $body .= '
'; + $myitem = $sxml->getElementsByTagName('item'); + foreach($myitem as $searchNode){ + $k++; + $xmlTitle = $searchNode->getElementsByTagName("title"); + $valueTitle = $xmlTitle->item(0)->nodeValue; + + $xmlLink = $searchNode->getElementsByTagName("link"); + $valueLink = $xmlLink->item(0)->nodeValue; + + $xmlDesc = $searchNode->getElementsByTagName("description"); + $valueDesc = $xmlDesc->item(0)->nodeValue; + + $pattern = '/]+src[\\s=\'"]'; + $pattern .= '+([^"\'>\\s]+)/is'; + if(preg_match($pattern,$valueDesc,$match)){ + $thumbnail = $match[1]; + } + + $pattern = '/]+href[\\s=\'"]'; + $pattern .= '+([^"\'>\\s]+)/is'; + if(preg_match($pattern,$valueDesc,$match)){ + $anchor_src = $match[1]; + } + + $encodedVideoUrlArray = explode("/watch/", $valueLink); + $showEncodedVideo = $encodedVideoUrlArray[1]; + $metacafevideoIdArray = explode("/", $showEncodedVideo); + + $ot = "

"; + $ct = "

"; + $string = trim($valueDesc); + $start = intval(strpos($string, $ot) + strlen($ot)); + $desc_src = substr($string,$start,intval(strpos($string,$ct) - $start)); + + $body .= '
'; + $body .= ''; + $body .= ''; + + $body .= ''; + + $body .= ''; + + //$body .= ""; + + $body .= ""; + + $body .= ''; + $body .= '
'; + $body .= ""; + $body .= '
'; + $body .= "".$valueTitle."
"; + //$body .= "Duration : " . sprintf("%0.2f", $length/60) . " min.
user rating : ".$rating."
"; + $body .= "Description : ".$desc_src; + $body .= '
play | add wwwroot."pg/videolist/new/".$container."/title_videourl/".$metacafevideoIdArray[0]."/page/".$queryCatgory."\");\">
'; + $body .= '
'; + } + $body .= '
'; + print $body; + } + else if($queryCatgory == "vimeo") + { + require_once(dirname(dirname(__FILE__)) . "/models/lib/class.vimeo.php"); + // Now lets do the search query. We will get an response object containing everything we need + $oResponse = VimeoVideosRequest::search($queryFeed); + + // We want the result videos as an array of objects + $aoVideos = $oResponse->getVideos(); + + // Just for code completion + $oVideo = new VimeoVideoEntity(); + + $total = count($aoVideos); + $startOffset = $start_index; + + $endOffset = ($startOffset-1) + $results_perpage; + $body = '
'; + $rem = floor($total/10); + $rem*=10; + if($rem<$total) + $last = $rem+1; + $lpVid = $total - $rem; + if($startOffset==1 && ($endOffset)==$total){} + else if($startOffset==1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset)<$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + else if($startOffset>1 && ($endOffset+$lpVid)>=$total){ + $body .= 'first | '; + $body .= 'previous | '; + $body .= 'next | '; + $body .= 'last'; + } + $body .= '
'; + $body .= '
'; + $counter = 0;$k = 0; + foreach($aoVideos as $oVideo) { + $k++; + if(($counter > $startOffset) && ($counter < $endOffset)) + { + //get all thumbnails + $aThumbnails = array(); + foreach($oVideo->getThumbnails() as $oThumbs) { + $aThumbnails[] = $oThumbs->getImageContent(); + } + + foreach($aThumbnails as $thumbnailArray){ + $thumbnail = $thumbnailArray; + break; + } + //print_r($oVideo); + $title = $oVideo->getTitle(); + $description = $oVideo->getCaption(); + $url = $oVideo->getUrl(); + $rating = $oVideo->getNumberOfLikes(); + $playedTimes = $oVideo->getNumberOfPlays(); + // Print all tags + $aTags = array(); + foreach($oVideo->getTags() as $oTag) { + $aTags[] = $oTag->getTag(); + } + $play_idArray = explode("http://vimeo.com/", $url); + $embedidArray = explode("/", $play_idArray[1]); + $body .= '
'; + $body .= ''; + $body .= ''; + + $body .= ''; + + $body .= ''; + + $body .= ""; + + $body .= ''; + $body .= '
'; + $body .= ""; + $body .= '
'; + $body .= "".$title."
"; + $body .= "User Likes : ".$rating."
"; + $body .= "Played : ".$playedTimes." times
"; + $body .= "Description : ".$description." ...
"; + $body .= "Tags : ".implode(', ', $aTags); + $body .= '
wwwroot."pg/videolist/new/".$container."/title_videourl/".$embedidArray[0]."/page/".$queryCatgory."\");\">
'; + $body .= '
'; + } + $counter++; + } + $body .= '
'; + print $body; + } +} +exit; +?> -- cgit v1.2.3