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 ++ browse.php | 44 + graphics/Video_Icon.jpg | Bin 0 -> 64088 bytes graphics/badge3.gif | Bin 0 -> 16801 bytes graphics/logo_videos.png | Bin 0 -> 6333 bytes graphics/metacafe.jpg | Bin 0 -> 5523 bytes graphics/pic_youtubelogo_123x63.gif | Bin 0 -> 3457 bytes graphics/play.jpg | Bin 0 -> 15987 bytes graphics/vimeo_logo.gif | Bin 0 -> 3811 bytes graphics/youtube.jpg | Bin 0 -> 6877 bytes graphics/youtube_logo.jpg | Bin 0 -> 16791 bytes index.php | 46 + languages/en.php | 56 + manifest.xml | 9 + models/lib/class.vimeo.php | 3583 ++++++++++++++++++++ new.php | 47 + start.php | 216 ++ views/default/forms/add.php | 176 + views/default/forms/browsetube.php | 257 ++ views/default/forms/labels/googlevideos.php | 34 + views/default/forms/labels/metacafe.php | 34 + views/default/forms/labels/vimeo.php | 34 + views/default/forms/labels/youtube.php | 34 + views/default/object/videolist.php | 91 + views/default/object/watch.php | 45 + views/default/river/object/videolist/annotate.php | 13 + views/default/river/object/videolist/create.php | 18 + views/default/staticvideo/index.php | 62 + views/default/videolist/css.php | 199 ++ views/default/videolist/groupprofile_videolist.php | 62 + views/default/videolist/icon.php | 41 + views/default/videolist/notfound.php | 21 + views/default/videolist/videoprofile.php | 0 views/default/widgets/videolist_view/edit.php | 21 + views/default/widgets/videolist_view/view.php | 58 + views/rss/videolist/contentwrapper.php | 15 + views/rss/videolist/videolist.php | 17 + watch.php | 44 + world.php | 38 + 43 files changed, 5979 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 create mode 100644 browse.php create mode 100644 graphics/Video_Icon.jpg create mode 100644 graphics/badge3.gif create mode 100644 graphics/logo_videos.png create mode 100644 graphics/metacafe.jpg create mode 100644 graphics/pic_youtubelogo_123x63.gif create mode 100644 graphics/play.jpg create mode 100644 graphics/vimeo_logo.gif create mode 100644 graphics/youtube.jpg create mode 100644 graphics/youtube_logo.jpg create mode 100644 index.php create mode 100644 languages/en.php create mode 100644 manifest.xml create mode 100644 models/lib/class.vimeo.php create mode 100644 new.php create mode 100644 start.php create mode 100644 views/default/forms/add.php create mode 100644 views/default/forms/browsetube.php create mode 100644 views/default/forms/labels/googlevideos.php create mode 100644 views/default/forms/labels/metacafe.php create mode 100644 views/default/forms/labels/vimeo.php create mode 100644 views/default/forms/labels/youtube.php create mode 100644 views/default/object/videolist.php create mode 100644 views/default/object/watch.php create mode 100644 views/default/river/object/videolist/annotate.php create mode 100644 views/default/river/object/videolist/create.php create mode 100644 views/default/staticvideo/index.php create mode 100644 views/default/videolist/css.php create mode 100644 views/default/videolist/groupprofile_videolist.php create mode 100644 views/default/videolist/icon.php create mode 100644 views/default/videolist/notfound.php create mode 100644 views/default/videolist/videoprofile.php create mode 100644 views/default/widgets/videolist_view/edit.php create mode 100644 views/default/widgets/videolist_view/view.php create mode 100644 views/rss/videolist/contentwrapper.php create mode 100644 views/rss/videolist/videolist.php create mode 100644 watch.php create mode 100644 world.php 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; +?> diff --git a/browse.php b/browse.php new file mode 100644 index 000000000..064ce9574 --- /dev/null +++ b/browse.php @@ -0,0 +1,44 @@ + + * @copyright Prateek Choudhary + */ +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + //get videolist GUID + $container_guid = get_input('container'); + $parent_container = ""; + if(isset($container_guid) && !empty($container_guid)){ + $container_guid = explode(":", $container_guid); + if($container_guid[0] == "group"){ + $container = get_entity($container_guid[1]); + set_page_owner($container->getGUID()); + $page_owner = page_owner_entity(); + set_context("groupsvideos"); + } + else{ + $page_owner = page_owner_entity(); + if ($page_owner === false || is_null($page_owner)) { + $page_owner = $_SESSION['user']; + set_page_owner($_SESSION['guid']); + } + } + } + // Get the current page's owner + + + $title = sprintf(elgg_echo("videolist:browse"), $page_owner->name); + + $area2 = elgg_view_title($title); + $area2 .= elgg_view("forms/browsetube"); + + $body = elgg_view_layout('one_column_with_sidebar', $area1 . $area2); + + page_draw($title, $body); +?> diff --git a/graphics/Video_Icon.jpg b/graphics/Video_Icon.jpg new file mode 100644 index 000000000..6a22c3e88 Binary files /dev/null and b/graphics/Video_Icon.jpg differ diff --git a/graphics/badge3.gif b/graphics/badge3.gif new file mode 100644 index 000000000..6dc0c1007 Binary files /dev/null and b/graphics/badge3.gif differ diff --git a/graphics/logo_videos.png b/graphics/logo_videos.png new file mode 100644 index 000000000..3a626d314 Binary files /dev/null and b/graphics/logo_videos.png differ diff --git a/graphics/metacafe.jpg b/graphics/metacafe.jpg new file mode 100644 index 000000000..a74ab75f9 Binary files /dev/null and b/graphics/metacafe.jpg differ diff --git a/graphics/pic_youtubelogo_123x63.gif b/graphics/pic_youtubelogo_123x63.gif new file mode 100644 index 000000000..f66c93730 Binary files /dev/null and b/graphics/pic_youtubelogo_123x63.gif differ diff --git a/graphics/play.jpg b/graphics/play.jpg new file mode 100644 index 000000000..1e701c853 Binary files /dev/null and b/graphics/play.jpg differ diff --git a/graphics/vimeo_logo.gif b/graphics/vimeo_logo.gif new file mode 100644 index 000000000..2c3c65b5c Binary files /dev/null and b/graphics/vimeo_logo.gif differ diff --git a/graphics/youtube.jpg b/graphics/youtube.jpg new file mode 100644 index 000000000..19a0d1673 Binary files /dev/null and b/graphics/youtube.jpg differ diff --git a/graphics/youtube_logo.jpg b/graphics/youtube_logo.jpg new file mode 100644 index 000000000..59d8e0d36 Binary files /dev/null and b/graphics/youtube_logo.jpg differ diff --git a/index.php b/index.php new file mode 100644 index 000000000..95026ec24 --- /dev/null +++ b/index.php @@ -0,0 +1,46 @@ + + * @copyright Prateek Choudhary + */ + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + $owner = page_owner_entity(); + + //get videolist GUID + $container_guid = get_input('username'); + if(isset($container_guid) && !empty($container_guid)){ + $container_guid = explode(":", $container_guid); + if($container_guid[0] == "group"){ + $container = get_entity($container_guid[1]); + set_context("groupsvideos"); + //$page_owner = page_owner_entity(); + } + else{ + + } + } + //set page owner + //set_page_owner($videolist_guid); + + $title = sprintf(elgg_echo("videolist:home"), "$owner->name"); + + // Get objects + $area2 = elgg_view_title($title); + //set_input('search_viewtype', 'gallery'); + $area2 .= list_entities("object","videolist", page_owner(), 10); + + //$area2 .= elgg_view("staticvideo/index"); + + set_context('videolist'); + $body = elgg_view_layout('one_column_with_sidebar',$area1. $area2); + + // Finally draw the page + page_draw($title, $body); +?> diff --git a/languages/en.php b/languages/en.php new file mode 100644 index 000000000..d0c5555b0 --- /dev/null +++ b/languages/en.php @@ -0,0 +1,56 @@ + + * @copyright Prateek Choudhary + */ + $english = array( + "videolist" => "My Videos", + + "videolist:home" => '%s \'s Videos', + "videolist:new" => 'Add a Video', + "videolist:find" => 'All Site videos', + "videolist:search" => "All Site videos", + "videolist:title_videourl" => 'Enter Video Url', + "videolist:submit" => 'Submit', + "videolist:videoTitle" => "Title", + "videolist:error" => 'There was an error in saving the video, please try after sometime', + "videolist:posted" => 'Your video has been saved successfully!', + "video:more" => "View all videos", + "video:none" => "sorry, no videos were found", + "candidateprofile:candidatevideo" => "My videos", + "videos:deleted" => "Your Video was removed successfully!", + "videos:notdeleted" => "Unfortunately, this video could not be removed now. Please try again later", + "videolist:widget" => "Videos", + "videolist:widget:description" => "Your personal video playlist", + "videolist:num_videos" => "Number of videos to display", + 'videolist:widget' => "My Videos", + "videolist:widget:description" => "Showcase your personal video gallery from youtube", + "profile:videoheader" => "My Video Gallery", + "videolist:title_access" => "Access", + "item:object:videolist" => "Videos", + "videolist:tags" => "Add Tags", + "videolist:browse" => "Find Videos - %s", + "videolist:browsemenu" => "Find Videos", + "videolist:title_search_tube" => "Search Videos From", + "videolist:searchTubeVideos" => "Search youtube.com", + "videolist:comments" => "Comments", + "videolist:commentspost" => "Post", + "videolist:river:annotate" => "%s commented on", + "videolist:river:item" => "a video", + "videolist:river:created" => "%s added", + "videolist:searchTubeVideos:metacafe" => "Search metacafe.com", + "videolist:searchTubeVideos:vimeo" => "Search vimeo.com", + "videolist:searchTubeVideos:googlevideos" => "Search video.google.com", + "videolist:group" => "Group Videos", + "videolist:groupall" => "All Group Videos", + "videolist:none" => "This group does not have any videos yet", + ); + + add_translation("en",$english); + +?> diff --git a/manifest.xml b/manifest.xml new file mode 100644 index 000000000..0c2db8e00 --- /dev/null +++ b/manifest.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/models/lib/class.vimeo.php b/models/lib/class.vimeo.php new file mode 100644 index 000000000..03508d148 --- /dev/null +++ b/models/lib/class.vimeo.php @@ -0,0 +1,3583 @@ + +* @link http://code.google.com/p/php5-simplevimeo/ +*/ + +/** +* Enable debug to output raw request and response information +*/ + +define('VIMEO_DEBUG_REQUEST', true); +define('VIMEO_DEBUG_RESPONSE', true); + +/** +* Vimeo base class +* +* Provides vital functions to API (access, permission and object handling) +* +* @package SimpleVimeo +* @subpackage Base +*/ + +class VimeoBase { + + const PROJECT_NAME = 'php5-simplevimeo'; + + /** + * Currently logged in user object + * @var VimeoUserEntity + */ + private static $oUser = false; + + /** + * Currently logged in user permission + * @var string + */ + private static $ePermission = false; + + /** + * Currently logged in user token + * @var string + */ + private static $sToken = false; + + /** + * Vimeo Application API key + * @var string + */ + private static $sApiKey = '7a223534b3c1d0979a954f93cb746173 '; + + /** + * Vimeo Application API secret key + * @var string + */ + private static $sApiSecret = 'b11e83370'; + + const VIMEO_REST_URL = 'http://vimeo.com/api/rest/'; + const VIMEO_AUTH_URL = 'http://vimeo.com/services/auth/'; + const VIMEO_UPLOAD_URL = 'http://vimeo.com/services/upload/'; + const VIMEO_LOGIN_URL = 'http://vimeo.com/log_in'; + + /** + * You can choose between the following engines: + * executeRemoteCall_FSOCK = PHP5 file_get_content and stream_contexts (bad error handling) + * executeRemoteCall_CURL = CURL is used for file transfer (better error handling) + */ + const REQUEST_ENGINE_CURL = 'executeRemoteCall_CURL'; + const VIDEOPOST_ENGINE_FSOCK = 'executeVideopostCall_CURL'; + + const PERMISSION_NONE = false; + const PERMISSION_READ = 'read'; + const PERMISSION_WRITE = 'write'; + const PERMISSION_DELETE = 'delete'; + + const COOKIE_FILE = '/tmp/simplevimeo.cookies'; + + const DEBUG_ENABLE = false; + const DEBUG_LOGFILE = '/tmp/simplevimeo.debug'; + + /** + * Debug output function + */ + public static function debug($sTitle, $sContent) { + if(self::DEBUG_ENABLE) { + $sMessage = 'DEBUG ' . date('Y-m-d H:i:s', time()) . "\n"; + $sMessage .= 'CONTENT: ' . $sContent . "\n"; + $sMesasge .= $sContent . "\n\n"; + + $fhLog = fopen(self::DEBUG_LOGFILE, 'a+'); + + if(!$fhLog) { + throw new VimeoBaseException('Debug Logfile "' . self::DEBUG_LOGFILE . '" could not be found or written'); + } else { + fputs($fhLog, $sMessage); + fclose($fhLog); + } + } + } + + /** + * Update Authentication + * + * Initializes user and permission information if a token is present. + * You can alter this method or skip it if you store user information + * and permission in an external database. Then i would recommend a + * VimeoAuthRequest::checkLoogin for confirmation. + * + * @access private + * @return void + */ + private function updateAuthentication() { + if(self::$sToken && (!self::$ePermission || !self::$oUser)) { + $oResponse = VimeoAuthRequest::checkToken(self::$sToken); + + // Parse user + self::$oUser = $oResponse->getUser(); + + // Parse permission + self::$ePermission = $oResponse->getPermission(); + } + } + + /** + * Check permission + * + * Checks the current user permission with the given one. This will be + * heavily used by the executeRemoteCall method to ensure the user + * will not run into trouble. + * + * @access public + * @param string Needed Permission + * @return boolean TRUE if access can be granted, FALSE if permission denied + */ + public function checkPermission($ePermissionNeeded) { + // Update authentication data before permission check + self::updateAuthentication(); + + // Permission DELETE check + if($ePermissionNeeded == self::PERMISSION_DELETE && self::$ePermission == self::PERMISSION_DELETE) { + return true; + } + + // Permission WRITE check + if($ePermissionNeeded == self::PERMISSION_WRITE && (self::$ePermission == self::PERMISSION_DELETE || self::$ePermission == self::PERMISSION_WRITE)) { + return true; + } + + // Permission READ check + if($ePermissionNeeded == self::PERMISSION_READ && (self::$ePermission == self::PERMISSION_DELETE || self::$ePermission == self::PERMISSION_WRITE || self::$ePermission == self::PERMISSION_READ)) { + return true; + } + + return false; + } + + /** + * Proxy for API queries + * + * Will check permission for the requested API method as well as type + * of the object result response or exception. Will call the given + * API query handler method (default: executeRemoteCall_CURL) for + * the raw connection stuff + * + * @access public + * @param string API method name + * @param array Additional arguments that need to be passed to the API + * @return VimeoResponse Response object of API corresponding query (for vimeo.test.login you will get VimeoTestLoginResponse object) + */ + public function executeRemoteCall($sMethod, $aArgs = array()) { + // Get exception handler + $sExceptionClass = VimeoMethod::getExceptionObjectForMethod($sMethod); + + // Check for errors in parameters + $sTargetClass = VimeoMethod::getTargetObjectForMethod($sMethod); + + // Get the permission needed to run this method + $ePermissionNeeded = VimeoMethod::getPermissionRequirementForMethod($sMethod); + + // If permission requirement is not met refuse to even call the API, safes bandwith for both ends + if($ePermissionNeeded != VimeoBase::PERMISSION_NONE && !self::checkPermission($ePermissionNeeded)) { + throw new $sExceptionClass('Permission error: "' . VimeoMethod::getPermissionRequirementForMethod($sMethod) . '" needed, "' . self::$ePermission . '" given'); + } + + // Append method to request arguments + $aArgs['method'] = $sMethod; + + // Check that the API query handler method exists and can be called + if(!method_exists(__CLASS__, self::REQUEST_ENGINE_CURL)) { + throw new VimeoBaseException('Internal error: Request engine handler method not found', 2); + } + + // Build up the needed API arguments + + // Set API key + $aArgs['api_key'] = self::$sApiKey; + + // Set request format + $aArgs['format'] = 'php'; + + // Set token + if(self::$sToken) $aArgs['auth_token'] = self::$sToken; + + // Generate signature + $aArgs['api_sig'] = self::buildSignature($aArgs); + + // Do the request + $aResponse = call_user_func(array(__CLASS__, self::REQUEST_ENGINE_CURL), $aArgs); + + // Debug request + if(defined('VIMEO_DEBUG_REQUEST') && VIMEO_DEBUG_REQUEST) { + self::debug('API request', print_r($aArgs, true)); + } + + // Debug response + if(defined('VIMEO_DEBUG_RESPONSE') && VIMEO_DEBUG_RESPONSE) { + self::debug('API response', print_r($aResponse, true)); + } + + // Transform the result into a result class + $oResult = new $sTargetClass($aResponse); + + // Check if request was successfull + if(!$oResult->getStatus()) { + // If not, create an given exception class for the given method and pass through error code and message + throw new $sExceptionClass($oResult->getError()->getMessage(), $oResult->getError()->getCode()); + } + + // Return the base class object instance for the corresponding API query + return $oResult; + } + + /** + * Execute raw API query with CURL + * + * Implements CURL API queries in php format response + * + * @author Ted Roden + * @access private + * @param array Additional arguments for the API query + * @return stdClass Simple PHP object enclosing the API result + */ + private function executeRemoteCall_CURL($aArgs) { + $ch = curl_init(self::VIMEO_REST_URL); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs); + curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME); + + $data = curl_exec($ch); + if(curl_errno($ch)) + throw new VimeoRequestException('executeRemoteCall_CURL error: ' . curl_error($ch), curl_errno($ch)); + else { + curl_close($ch); + + if(!$data || strlen(trim($data)) < 2) { + throw new VimeoRequestException('API request error: No result returned.', 1); + } + return unserialize($data); + } + } + + /** + * Execute raw API query with FSOCK + * + * Implements FSOCK API queries in php format response + * + * @access private + * @param array Additional arguemnts for the API query + * @return stdClass Simple PHP object enclosing the API result + */ + private function executeRemoteCall_FSOCK($aArgs) { + $sResponse = file_get_contents(self::VIMEO_REST_URL, NULL, stream_context_create(array('http' => array('method' => 'POST', 'header'=> 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($aArgs))))); + if(!$sResponse || strlen(trim($sResponse)) < 2) { + throw new VimeoRequestException('API request error: No result returned.', 1); + } else { + return unserialize($sResponse); + } + } + + /** + * Proxy for video uploads + * + * Will call the given video upload handler method (default: executeVideopostCall_FSOCK) + * for the raw connection and send stuff + * + * @access public + * @param string Local filename to be transfered + * @param string Ticket + * @return string VimeoVideosCheckUploadStatusResponse + */ + public function executeVideopostCall($sFilename, $sTicket = false) { + // Check that the upload query handler method exists and can be called + if(!method_exists(__CLASS__, self::VIDEOPOST_ENGINE_FSOCK)) { + throw new VimeoUploadException('Upload error: Videopost engine handler method not found', 1); + } + + // If permission requirement is not met refuse to even call the API, safes bandwith for both ends + if(!self::checkPermission(VimeoBase::PERMISSION_WRITE)) { + throw new VimeoUploadException('Upload error: Missing "write" permission for current user', 2); + } + + // Check that the file exists + if(!file_exists($sFilename)) { + throw new VimeoUploadException('Upload error: Local file does not exists', 3); + } + + // Check that the file is readable + if(!is_readable($sFilename)) { + throw new VimeoUploadException('Upload error: Local file is not readable', 4); + } + + // Check that the file size is not larger then the allowed size you can upload + $oResponse = VimeoPeopleRequest::getUploadStatus(); + if(filesize($sFilename) > $oResponse->getRemainingBytes()) { + throw new VimeoUploadException('Upload error: Videosize exceeds remaining bytes', 5); + } + + // Try to get a upload ticket + if(!$sTicket) { + $oResponse = VimeoVideosRequest::getUploadTicket(); + $sTicket = $oResponse->getTicket(); + } + + // Build up the needed API arguments + + // Set API key + $aArgs['api_key'] = self::$sApiKey; + + // Set request format + $aArgs['format'] = 'php'; + + // Set token + if(self::$sToken) $aArgs['auth_token'] = self::$sToken; + + // Set ticket + $aArgs['ticket_id'] = $sTicket; + + // Generate signature + $aArgs['api_sig'] = self::buildSignature($aArgs); + + // Set file + $aArgs['file'] = "@$sFilename"; + + // Do the upload + $sResponse = call_user_func(array(__CLASS__, self::VIDEOPOST_ENGINE_FSOCK), $aArgs); + + // Call vimeo.videos.checkUploadStatus to prevent abandoned status + return VimeoVideosRequest::checkUploadStatus($sTicket); + } + + private function executeVideopostCall_CURL($aArgs) { + // Disable time limit + set_time_limit(0); + + $ch = curl_init(self::VIMEO_UPLOAD_URL); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs); + curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME); + + $data = curl_exec($ch); + if(curl_errno($ch)) + throw new VimeoRequestException('executeRemoteCall_CURL error: ' . curl_error($ch), curl_errno($ch)); + else { + curl_close($ch); + return unserialize($data); + } + } + + /** + * Build API query signature + * + * Composes the signature needed to verify its really us doing the query + * + * @author Ted Roden + * @access private + * @param array Additional arguments for the API query + * @return string MD5 signature + */ + private static function buildSignature($aArgs) { + $s = ''; + + // sort by name + ksort($aArgs); + + foreach($aArgs as $k => $v) + $s .= $k . $v; + + return(md5(self::$sApiSecret . $s)); + } + + /** + * Build authentication URL + * + * Easy way to build a correct authentication url. You can use this + * to link the user directly to the correct vimeo authentication page. + * + * @access public + * @param string Permission level you need the user to give you (i.e. VimeoBase::PERMISSION_READ) + * @return string URL you can use to directly link the user to the vimeo authentication page + */ + public static function buildAuthenticationUrl($ePermission) { + + $aArgs = array( + 'api_key' => self::$sApiKey, + 'perms' => $ePermission + ); + + return self::VIMEO_AUTH_URL . '?api_key=' . self::$sApiKey . '&perms=' . $ePermission . '&api_sig=' . self::buildSignature($aArgs); + } + + /** + * Get current logged in user token + * + * @access public + * @return string Token or FALSE if not logged in + */ + public static function getToken() { + return self::$sToken; + } + + /** + * Set current logged in user token + * + * @access public + * @param string Authentication token + * @return void + */ + public static function setToken($sToken) { + self::$sToken = $sToken; + } + + /** + * Clear current logged in user token + * + * Removes the current logged in user from the cache. Next API query + * will be made as clean, not logged in, request. + * + * @access public + * @return void + */ + public static function clearToken() { + self::$sToken = false; + } + + /** + * Execute a permit request + * + * ONLY USED IN SITE-MODE, see howto.autologin.php + * Permits the current CURL cached user with your vimeo API application + * + * @access public + * @param string Permission + * @return string Vimeo Token + */ + public function permit($ePermission) { + // Disable time limit + set_time_limit(0); + + // Construct login data + $aArgs = array( + 'api_key' => VimeoBase::$sApiKey, + 'perms' => $ePermission, + 'accept' => 'yes' + ); + $ch = curl_init(VimeoBase::buildAuthenticationUrl($ePermission)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs); + curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_COOKIEFILE, VimeoBase::COOKIE_FILE); + curl_setopt($ch, CURLOPT_COOKIEJAR, VimeoBase::COOKIE_FILE); + + $sPageContent = curl_exec($ch); + if(curl_errno($ch)) { + throw new VimeoRequestException('Error: Tried to login failed ' . curl_error($ch), curl_errno($ch)); + return false; + } else { + $sResponseUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); + + } + return $sPageContent; + } + + /** + * Ensures that the user is logged in + * + * ONLY USED IN SITE-MODE, see howto.autologin.php + * Ensures the site-account is logged in + * + * @access public + * @param string Username + * @param string Password + * @return boolean TRUE if user could be logged in, FALSE if an error occured (try manually to see error) + */ + public function login($sUsername, $sPassword) { + // Disable time limit + set_time_limit(0); + + // Construct login data + $aArgs = array( + 'sign_in[email]' => $sUsername, + 'sign_in[password]' => $sPassword, + 'redirect' => '' + ); + + $ch = curl_init(VimeoBase::VIMEO_LOGIN_URL); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $aArgs); + curl_setopt($ch, CURLOPT_USERAGENT, self::PROJECT_NAME); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_COOKIEFILE, VimeoBase::COOKIE_FILE); + curl_setopt($ch, CURLOPT_COOKIEJAR, VimeoBase::COOKIE_FILE); + + $sPageContent = curl_exec($ch); + + if(curl_errno($ch)) { + throw new VimeoRequestException('Error: Tried to login failed ' . curl_error($ch), curl_errno($ch)); + return false; + } else { + $sResponseUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); + curl_close($ch); + } + + if(stristr($sResponseUrl, 'log_in') !== false) { + // Login failed + return false; + } else { + return true; + } + } +} + +/** +* Vimeo base exception class +* +* Every exception caused by VimeoBase class will be of this type +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoBaseException extends VimeoException {} + +/** +* Vimeo request exception class +* +* Exception thrown when requesting the API failed +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoRequestException extends VimeoException {} + +/** +* Vimeo upload exception class +* +* Exception thrown when uploading a video failed +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoUploadException extends VimeoException {} + +/** +* Vimeo API method handler class +* +* This class will ensure that only functions can be called if the method is implemented +* and the permission is right (p). It also states what the source (s), result (t) and +* exception (e) object will be. +* +* @package SimpleVimeo +* @subpackage Base +*/ + +class VimeoMethod { + + private static $aMethods = array( + // Vimeo Test methods + 'vimeo.test.login' => array( 's' => 'VimeoTestRequest', + 't' => 'VimeoTestLoginResponse', + 'e' => 'VimeoTestLoginException', + 'p' => VimeoBase::PERMISSION_READ), + + 'vimeo.test.echo' => array( 's' => 'VimeoTestRequest', + 't' => 'VimeoTestEchoResponse', + 'e' => 'VimeoTestEchoException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.test.null' => array( 's' => 'VimeoTestRequest', + 't' => 'VimeoTestNullResponse', + 'e' => 'VimeoTestNullException', + 'p' => VimeoBase::PERMISSION_READ), + + // Vimeo Auth methods + 'vimeo.auth.getToken' => array( 's' => 'VimeoAuthRequest', + 't' => 'VimeoAuthGetTokenResponse', + 'e' => 'VimeoAuthGetTokenException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.auth.getFrob' => array( 's' => 'VimeoAuthRequest', + 't' => 'VimeoAuthGetFrobResponse', + 'e' => 'VimeoAuthGetFrobException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.auth.checkToken' => array( 's' => 'VimeoAuthRequest', + 't' => 'VimeoAuthCheckTokenResponse', + 'e' => 'VimeoAuthCheckTokenException', + 'p' => VimeoBase::PERMISSION_NONE), + + // Vimeo Videos methods + 'vimeo.videos.getList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetListResponse', + 'e' => 'VimeoVideosGetListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getUploadedList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetUploadedListResponse', + 'e' => 'VimeoVideosGetUploadedListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getAppearsInList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetAppearsInListResponse', + 'e' => 'VimeoVideosGetAppearsInListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getSubscriptionsList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetSubscriptionsListResponse', + 'e' => 'VimeoVideosGetSubscriptionsListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getListByTag' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetListByTagResponse', + 'e' => 'VimeoVideosGetListByTagException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getLikeList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetLikeListResponse', + 'e' => 'VimeoVideosGetLikeListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getContactsList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetContactsListResponse', + 'e' => 'VimeoVideosGetContactsListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getContactsLikeList' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetContactsLikeListResponse', + 'e' => 'VimeoVideosGetContactsLikeListException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.search' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosSearchResponse', + 'e' => 'VimeoVideosSearchException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getInfo' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetInfoResponse', + 'e' => 'VimeoVideosGetInfoException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.videos.getUploadTicket' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosGetUploadTicketResponse', + 'e' => 'VimeoVideosGetUploadTicketException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.checkUploadStatus' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosCheckUploadStatusResponse', + 'e' => 'VimeoVideosCheckUploadStatusException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.delete' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosDeleteResponse', + 'e' => 'VimeoVideosDeleteException', + 'p' => VimeoBase::PERMISSION_DELETE), + + 'vimeo.videos.setTitle' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosSetTitleResponse', + 'e' => 'VimeoVideosSetTitleException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.setCaption' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosSetCaptionResponse', + 'e' => 'VimeoVideosSetCaptionException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.setFavorite' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosSetFavoriteResponse', + 'e' => 'VimeoVideosSetFavoriteException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.addTags' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosAddTagsResponse', + 'e' => 'VimeoVideosAddTagsException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.removeTag' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosRemoveTagResponse', + 'e' => 'VimeoVideosRemoveTagException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.clearTags' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosClearTagsResponse', + 'e' => 'VimeoVideosClearTagsException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.videos.setPrivacy' => array( 's' => 'VimeoVideosRequest', + 't' => 'VimeoVideosSetPrivacyResponse', + 'e' => 'VimeoVideosSetPrivacyException', + 'p' => VimeoBase::PERMISSION_WRITE), + + // Vimeo People methods + 'vimeo.people.findByUserName' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleFindByUsernameResponse', + 'e' => 'VimeoPeopleFindByUsernameException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.people.findByEmail' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleFindByEmailResponse', + 'e' => 'VimeoPeopleFindByEmailException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.people.getInfo' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleGetInfoResponse', + 'e' => 'VimeoPeopleGetInfoException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.people.getPortraitUrl' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleGetPortraitUrlResponse', + 'e' => 'VimeoPeopleGetPortraitUrlException', + 'p' => VimeoBase::PERMISSION_NONE), + + 'vimeo.people.addContact' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleAddContactResponse', + 'e' => 'VimeoPeopleAddContactException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.people.removeContact' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleRemoveContactResponse', + 'e' => 'VimeoPeopleRemoveContactException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.people.getUploadStatus' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleGetUploadStatusResponse', + 'e' => 'VimeoPeopleGetUploadStatusException', + 'p' => VimeoBase::PERMISSION_READ), + + 'vimeo.people.addSubscription' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleAddSubscriptionResponse', + 'e' => 'VimeoPeopleAddSubscriptionException', + 'p' => VimeoBase::PERMISSION_WRITE), + + 'vimeo.people.removeSubscription' => array( 's' => 'VimeoPeopleRequest', + 't' => 'VimeoPeopleRemoveSubscriptionResponse', + 'e' => 'VimeoPeopleRemoveSubscriptionException', + 'p' => VimeoBase::PERMISSION_WRITE) + ); + + public static function getSourceObjectForMethod($sMethod) { + // Check if the method can be handled + self::checkMethod($sMethod); + + return self::$aMethods[$sMethod]['s']; + } + + public static function getTargetObjectForMethod($sMethod) { + // Check if the method can be handled + self::checkMethod($sMethod); + + return self::$aMethods[$sMethod]['t']; + } + + public static function getExceptionObjectForMethod($sMethod) { + // Check if the method can be handled + self::checkMethod($sMethod); + + return self::$aMethods[$sMethod]['e']; + } + + public static function getPermissionRequirementForMethod($sMethod) { + // Check if the method can be handled + self::checkMethod($sMethod); + + return self::$aMethods[$sMethod]['p']; + } + + public static function checkMethod($sMethod) { + // Check if the method can be handled + if(!isset(self::$aMethods[$sMethod])) { + throw new VimeoMethodException('Unhandled vimeo method "' . $sMethod . '" given', 2); + } + } +} + +/** +* Vimeo method exception class +* +* Every exception caused by VimeoMethod class will be of this type +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoMethodException extends Exception {} + +/* +* Abstract class constructs that the whole api stuff will be based on +*/ + +/** +* Vimeo exception class +* +* Every exception the whole SimpleVimeo throws will be extended of this base +* class. You can extend this one to alter all exceptions. +* +* @package SimpleVimeo +* @subpackage Exceptions +* @abstract +*/ + +abstract class VimeoException extends Exception {} + +/** +* Vimeo array of object handler class +* +* This class is for array of object handling. i.e.: An array of video objects. +* It ensures that you can work with foreach and count without getting into a hassle. +* +* @package SimpleVimeo +* @subpackage Base +* @abstract +*/ + +abstract class VimeoObjectList implements Iterator, Countable { + /** + * Array for instanced objects + * @var array + */ + private $aInstances = array(); + + /** + * Integer how many results + * @var integer + */ + private $iCount = 0; + + /** + * Class name + * @var string + */ + private $sClassName; + + private $aIDs = array(); + + /** + * Constructor + * + * @access public + * @return void + */ + public function __construct() { + // Parse class name + $this->sClassName = str_replace('List', '', get_class($this)); + } + + /** + * Add object to array + * + * @access public + * @param object Object to be added to array + * @param integer Array index to be used for the given object + * @return void + */ + public function add($oObject, $iID = false) { + if($iID !== false) { + $this->aInstances[$iID] = $oObject; + } else { + $this->aInstances[] = $oObject; + } + + $this->aIDs[] = $iID; + + $this->iCount++; + } + + /** + * Returns all array indexes for further parsing + * + * @access public + * @return array Array with object array indexes + */ + public function getAllUniqueIDs() { + return $this->getIDs(); + } + + /** + * @ignore + */ + public function rewind() { + reset($this->aInstances); + } + + /** + * @ignore + */ + public function current() { + return current($this->aInstances); + } + + /** + * @ignore + */ + public function key() { + return key($this->aInstances); + } + + /** + * @ignore + */ + public function next() { + return next($this->aInstances); + } + + /** + * @ignore + */ + public function valid() { + return $this->current() !== FALSE; + } + + /** + * @ignore + */ + public function count() { + return $this->iCount; + } +} + +/** +* Vimeo request class +* +* Every API query collection class will be based on this. +* +* @package SimpleVimeo +* @subpackage ApiRequest +* @abstract +*/ + +abstract class VimeoRequest {} + +/** +* Vimeo response class +* +* Every API response class will be based on this. It also handles +* everytime response variables like if the query was successfull and +* the generation time. +* +* @package SimpleVimeo +* @subpackage ApiResponse +* @abstract +*/ + +abstract class VimeoResponse { + private $bStatus = false; + private $fPerformance = false; + private $iErrorCode = false; + private $oError = false; + + /** + * Constructor + * + * Parses the API response + * You dont need to pass a response if you need to give a hint your coding tool for code completion + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + if($aResponse) { + // Parse status + $this->setStatus($aResponse->stat); + + // Parse performance + $this->fPerformance = (float) $aResponse->generated_in; + + // Parse error information + if(!$this->bStatus) { + $this->oError = new VimeoErrorEntity($aResponse->err->code, $aResponse->err->msg); + } + } + } + + private function setStatus($sStatus) { + if($sStatus === 'ok') { + $this->bStatus = true; + } + } + + public function getStatus() { + return $this->bStatus; + } + + public function getPerformance() { + return $this->fPerformance; + } + + public function getError() { + return $this->oError; + } +} + +/* +* Entity classes for default instances of users etc. they are always the same +* and their array of object handlers +*/ + +/** +* Vimeo API error entity class +* +* Implements API delivered error entities into an PHP 5 object with given result parameters. +* +* @package SimpleVimeo +* @subpackage Entities +*/ + +class VimeoErrorEntity { + private $iErrorCode = false; + private $sErrorMessage = false; + + public function __construct($iErrorCode, $sErrorMessage) { + $this->iErrorCode = $iErrorCode; + $this->sErrorMessage = $sErrorMessage; + } + + public function getCode() { + return $this->iErrorCode; + } + + public function getMessage() { + return $this->sErrorMessage; + } +} + +/** +* Vimeo API user entity class +* +* Implements API delivered user entities into an PHP 5 object with given result parameters. +* +* @package SimpleVimeo +* @subpackage Entities +*/ + +class VimeoUserEntity { + private $iUserNsId = false; + private $iUserId = false; + private $sUsername = false; + private $sFullname = false; + + // Optional information when vimeo.person.getInfo is called + private $sLocation = false; + private $sUrl = false; + private $iNumberOfContacts = false; + private $iNumberOfUploads = false; + private $iNumberOfLikes = false; + private $iNumberOfVideos = false; + private $iNumberOfVideosAppearsIn = false; + private $sProfileUrl = false; + private $sVideosUrl = false; + + public function __construct($aResponseSnippet) { + if(isset($aResponseSnippet->id)) { + $this->iUserId = $aResponseSnippet->id; + } + + if(isset($aResponseSnippet->nsid)) { + $this->iUserNsId = $aResponseSnippet->nsid; + } + + if(isset($aResponseSnippet->username)) { + $this->sUsername = $aResponseSnippet->username; + } + + if(isset($aResponseSnippet->fullname)) { + $this->sFullname = $aResponseSnippet->fullname; + } + + if(isset($aResponseSnippet->display_name)) { + $this->sFullname = $aResponseSnippet->display_name; + } + + // Optional stuff + if(isset($aResponseSnippet->location)) { + $this->sLocation = $aResponseSnippet->location; + } + + if(isset($aResponseSnippet->url)) { + $this->sUrl = $aResponseSnippet->url; + } + + if(isset($aResponseSnippet->number_of_contacts)) { + $this->iNumberOfContacts = $aResponseSnippet->number_of_contacts; + } + + if(isset($aResponseSnippet->number_of_uploads)) { + $this->iNumberOfUploads = $aResponseSnippet->number_of_uploads; + } + + if(isset($aResponseSnippet->number_of_likes)) { + $this->iNumberOfLikes = $aResponseSnippet->number_of_likes; + } + + if(isset($aResponseSnippet->number_of_videos)) { + $this->iNumberOfVideos = $aResponseSnippet->number_of_videos; + } + + if(isset($aResponseSnippet->number_of_videos_appears_in)) { + $this->iNumberOfVideosAppearsIn = $aResponseSnippet->number_of_videos_appears_in; + } + + if(isset($aResponseSnippet->profileurl)) { + $this->sProfileUrl = $aResponseSnippet->profileurl; + } + + if(isset($aResponseSnippet->videosurl)) { + $this->sVideosUrl = $aResponseSnippet->videosurl; + } + } + + public function getNsID() { + return $this->iUserNsId; + } + + public function getID() { + return $this->iUserId; + } + + public function getUsername() { + return $this->sUsername; + } + + public function getFullname() { + return $this->sFullname; + } + + public function getLocation() { + return $this->sLocation; + } + + public function getUrl() { + return $this->sUrl; + } + + public function getNumberOfContacts() { + return $this->iNumberOfContacts; + } + + public function getNumberOfUploads() { + return $this->iNumberOfUploads; + } + + public function getNumberOfLikes() { + return $this->iNumberOfLikes; + } + + public function getNumberOfVideos() { + return $this->iNumberOfVideos; + } + + public function getNumberOfVideosAppearsIn() { + return $this->iNumberOfVideosAppearsIn; + } + + public function getProfileUrl() { + return $this->sProfileUrl; + } + + public function getVideosUrl() { + return $this->sVideosUrl; + } +} + +/** +* Vimeo API video entity class +* +* Implements API delivered video into an PHP 5 object with given result parameters. +* +* @package SimpleVimeo +* @subpackage Entities +*/ + +class VimeoVideoEntity { + private $iID = false; + private $ePrivacy = false; + private $bIsUploading = false; + private $bIsTranscoding = false; + private $bIsHD = false; + + private $sTitle = false; + private $sCaption = false; + private $iUploadTime = false; + private $iNumberOfLikes = false; + private $iNumberOfPlays = false; + private $iNumberOfComments = false; + + private $sUrl = false; + + private $iWidth = false; + private $iHeight = false; + private $oOwner = false; + + private $oTagList = false; + + private $oThumbnailList = false; + + public function __construct($aResponseSnippet = false) { + if($aResponseSnippet) { + // Set basic information + $this->iID = $aResponseSnippet->id; + $this->ePrivacy = $aResponseSnippet->privacy; + $this->bIsUploading = $aResponseSnippet->is_uploading; + $this->bIsTranscoding = $aResponseSnippet->is_transcoding; + $this->bIsHD = $aResponseSnippet->is_hd; + + $this->sTitle = $aResponseSnippet->title; + $this->sCaption = $aResponseSnippet->caption; + $this->iUploadTime = strtotime($aResponseSnippet->upload_date); + $this->iNumberOfLikes = (int) $aResponseSnippet->number_of_likes; + $this->iNumberOfPlays = (int) $aResponseSnippet->number_of_plays; + $this->iNumberOfComments = (int) $aResponseSnippet->number_of_comments; + + $this->sUrl = $aResponseSnippet->urls->url->_content; + + $this->iWidth = (int) $aResponseSnippet->width; + $this->iHeight = (int) $aResponseSnippet->height; + + $this->oOwner = new VimeoUserEntity($aResponseSnippet->owner); + + // Parse Tags + $this->oTagList = new VimeoTagList(); + if(isset($aResponseSnippet->tags->tag)) { + foreach($aResponseSnippet->tags->tag as $aTagInformation) { + $oTag = new VimeoTagEntity($aTagInformation); + $this->oTagList->add($oTag, $oTag->getID()); + } + } + + // Parse Thumbnails + $this->oThumbnailList = new VimeoThumbnailList(); + if(isset($aResponseSnippet->thumbnails->thumbnail)) { + foreach($aResponseSnippet->thumbnails->thumbnail as $aThumbnailInformation) { + $oThumbnail = new VimeoThumbnailEntity($aThumbnailInformation); + $this->oThumbnailList->add($oThumbnail, ($oThumbnail->getWidth() * $oThumbnail->getHeight())); + } + } + } + } + + public function getID() { + return $this->iID; + } + + public function getPrivacy() { + return $this->ePrivacy; + } + + public function isUploading() { + return $this->bIsUploading; + } + + public function isTranscoding() { + return $this->bIsTranscoding; + } + + public function isHD() { + return $this->bIsHD; + } + + public function getTitle() { + return $this->sTitle; + } + + public function getCaption() { + return $this->sCaption; + } + + public function getUploadTimestamp() { + return $this->iUploadTime; + } + + public function getNumberOfLikes() { + return (int) $this->iNumberOfLikes; + } + + public function getNumberOfPlays() { + return (int) $this->iNumberOfPlays; + } + + public function getNumberOfComments() { + return (int) $this->iNumberOfComments; + } + + public function getWidth() { + return (int) $this->iWidth; + } + + public function getHeight() { + return (int) $this->iHeight; + } + + public function getOwner() { + return $this->oOwner; + } + + public function getTags() { + return $this->oTagList; + } + + public function getUrl() { + return $this->sUrl; + } + + public function getThumbnails() { + return $this->oThumbnailList; + } +} + +/** +* Vimeo API video list class +* +* Implements API delivered video list entities into an PHP 5 array of objects. +* +* @package SimpleVimeo +* @subpackage Lists +*/ + +class VimeoVideoList extends VimeoObjectList {} + +/** +* Vimeo API tag entity class +* +* Implements API delivered tag entities into an PHP 5 object with given result parameters. +* +* @package SimpleVimeo +* @subpackage Entities +*/ + +class VimeoTagEntity { + private $iID = false; + private $sContent = false; + + public function __construct($aResponseSnippet = false) { + if($aResponseSnippet) { + $this->iID = $aResponseSnippet->id; + $this->sContent = $aResponseSnippet->_content; + } + } + + public function getID() { + return $this->iID; + } + + public function getTag() { + return $this->sContent; + } +} + +/** +* Vimeo API tag list class +* +* Implements API delivered tag list entities into an PHP 5 array of objects. +* +* @package SimpleVimeo +* @subpackage Lists +*/ + +class VimeoTagList extends VimeoObjectList {} + +/** +* Vimeo API thumbnail entity class +* +* Implements API delivered thumbnail entities into an PHP 5 object with given result parameters. +* +* @package SimpleVimeo +* @subpackage Entities +*/ + +class VimeoThumbnailEntity { + private $iWidth = false; + private $iHeight = false; + private $sContent = false; + + public function __construct($aResponseSnippet = false) { + if($aResponseSnippet) { + $this->iWidth = (int) $aResponseSnippet->width; + $this->iHeight = (int) $aResponseSnippet->height; + $this->sContent = $aResponseSnippet->_content; + } + } + + public function getWidth() { + return (int) $this->iWidth; + } + + public function getHeight() { + return (int) $this->iHeight; + } + + public function getImageContent() { + return $this->sContent; + } +} + +/** +* Vimeo API thumbnail list class +* +* Implements API delivered thumbnail list entities into an PHP 5 array of objects. +* +* @package SimpleVimeo +* @subpackage Lists +*/ + +class VimeoThumbnailList extends VimeoObjectList { + public function getByWidth($iWidth, $bAlsoLower = false) { + /** + * @todo + */ + } + + public function getByHeight($iHeight, $bAlsoLower = false) { + /** + * @todo + */ + } + + public function getByWidthAndHeight($iWidth, $iHeight, $bAlsoLower = false) { + /** + * @todo + */ + } +} + + +/* +* vimeo.test.* methods +*/ + +/** +* Vimeo Test request handler class +* +* Implements all API queries in the vimeo.test.* category +* +* @package SimpleVimeo +* @subpackage ApiRequest +*/ + +class VimeoTestRequest extends VimeoRequest { + + /** + * Is the user logged in? + * + * @access public + * @return VimeoTestLoginResponse + */ + + public function login() { + return VimeoBase::executeRemoteCall('vimeo.test.login'); + } + + /** + * This will just repeat back any parameters that you send. + * + * @access public + * @param array Additional arguments that need to be passed to the API + * @return VimeoTestEchoResponse + */ + + public function echoback($aArgs) { + return VimeoBase::executeRemoteCall('vimeo.test.echo', $aArgs); + } + + /** + * This is just a simple null/ping test... + * + * @access public + * @return VimeoTestNullResponse + */ + + public function ping() { + return VimeoBase::executeRemoteCall('vimeo.test.null'); + } +} + +/** +* Vimeo Test Login response handler class +* +* Handles the API response for vimeo.test.login queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoTestLoginResponse extends VimeoResponse {} + +/** +* Vimeo Test Login exception handler class +* +* Handles exceptions caused by API response for vimeo.test.login queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoTestLoginException extends VimeoException {} + +/** +* Vimeo Test Echo response handler class +* +* Handles the API response for vimeo.test.echo queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoTestEchoResponse extends VimeoResponse { + private $aArgs = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->aArgs = get_object_vars($aResponse); + + // Unset default response stuff + if(isset($this->aArgs['stat'])) unset($this->aArgs['stat']); + if(isset($this->aArgs['generated_in'])) unset($this->aArgs['generated_in']); + } + + /** + * Returns an array of variables the request bounced back + * + * @access public + * @return array Echoed variables + */ + public function getResponseArray() { + return $this->aArgs; + } +} + +/** +* Vimeo Test Echo exception handler class +* +* Handles exceptions caused by API response for vimeo.test.echo queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoTestEchoException extends VimeoException {} + +/** +* Vimeo Test Null response handler class +* +* Handles the API response for vimeo.test.null queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoTestNullResponse extends VimeoResponse {} + +/** +* Vimeo Test Null exception handler class +* +* Handles exceptions caused by API response for vimeo.test.null queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoTestNullException extends VimeoException {} + +/* +* vimeo.auth.* methods +*/ + +/** +* Vimeo Auth request handler class +* +* Implements all API queries in the vimeo.auth.* category +* +* @package SimpleVimeo +* @subpackage ApiRequest +*/ + +class VimeoAuthRequest extends VimeoRequest { + + /** + * Get Token + * + * @access public + * @param string Frob taken from the vimeo authentication + * @return VimeoAuthGetTokenResponse + */ + public function getToken($sFrob) { + $aArgs = array( + 'frob' => $sFrob + ); + + return VimeoBase::executeRemoteCall('vimeo.auth.getToken', $aArgs); + } + + /** + * Check Token + * + * Checks the validity of the token. Returns the user associated with it. + * Returns the same as vimeo.auth.getToken + * + * @access public + * @param string Authentication token + * @return VimeoAuthCheckTokenResponse + */ + public function checkToken($sToken = false) { + if(!$sToken) $sToken = VimeoBase::getToken(); + + $aArgs = array( + 'auth_token' => $sToken + ); + + return VimeoBase::executeRemoteCall('vimeo.auth.checkToken', $aArgs); + } + + /** + * Get Frob + * + * This is generally used by desktop applications. If the user doesn't already have + * a token, you'll need to get the frob, send it to us at /services/auth. Then, + * after the user, clicks continue on your app, you call vimeo.auth.getToken($frob) + * and we give you the actual token. + * + * @access public + * @return VimeoAuthGetFrobResponse + */ + public function getFrob() { + return VimeoBase::executeRemoteCall('vimeo.auth.getFrob'); + } +} + +/** +* Vimeo Auth GetToken response handler class +* +* Handles the API response for vimeo.auth.getToken queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoAuthGetTokenResponse extends VimeoResponse { + + private $sToken = false; + private $ePermission = false; + private $oUser = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse) { + parent::__construct($aResponse); + + $this->sToken = $aResponse->auth->token; + $this->ePermission = $aResponse->auth->perms; + + $this->oUser = new VimeoUserEntity($aResponse->auth->user); + } + + /** + * Get token value + * + * @access public + * @return token + */ + public function getToken() { + return $this->sToken; + } + + /** + * Get permission value + * + * @access public + * @return permission + */ + + public function getPermission() { + return $this->ePermission; + } + + /** + * Get user information object + * + * @access public + * @return VimeoUserEntity + */ + public function getUser() { + return $this->oUser; + } +} + +/** +* Vimeo Auth GetToken exception handler class +* +* Handles exceptions caused by API response for vimeo.auth.getToken queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoAuthGetTokenException extends Exception {} + +/** +* Vimeo Auth CheckToken response handler class +* +* Handles the API response for vimeo.auth.checkToken queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoAuthCheckTokenResponse extends VimeoAuthGetTokenResponse {} + +/** +* Vimeo Auth CheckToken exception handler class +* +* Handles exceptions caused by API response for vimeo.auth.checkToken queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoAuthCheckTokenException extends VimeoAuthGetTokenException {} + +/** +* Vimeo Auth GetFrob response handler class +* +* Handles the API response for vimeo.auth.getFrob queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoAuthGetFrobResponse extends VimeoResponse { + private $sFrob = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse) { + parent::__construct($aResponse); + + $this->sFrob = $aResponse->frob; + } + + /** + * Get Frob value + * + * @access public + * @return frob + */ + public function getFrob() { + return $this->sFrob; + } +} + +/** +* Vimeo Auth GetFrob exception handler class +* +* Handles exceptions caused by API response for vimeo.auth.getFrob queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoAuthGetFrobException extends VimeoException {} + +/** +* vimeo.videos.* methods +*/ + +/** +* Vimeo Videos request handler class +* +* Implements all API queries in the vimeo.videos.* category +* +* @package SimpleVimeo +* @subpackage ApiRequest +*/ + +class VimeoVideosRequest extends VimeoRequest { + + const PRIVACY_ANYBODY = 'anybody'; + const PRIVACY_CONTACTS = 'contacts'; + const PRIVACY_NOBODY = 'nobody'; + const PRIVACY_USERS = 'users'; + + /** + * Search videos! + * + * If the calling user is logged in, this will return information that calling user + * has access to (including private videos). If the calling user is not authenticated, + * this will only return public information, or a permission denied error if none is available. + * + * @access public + * @param string Search query + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param boolean If TRUE, we'll only search the users contacts. If this is set, you must specifiy a User ID. Otherwise it will be ignored without error. + * @param integer ow many results per page? + * @return VimeoVideosSearchResponse + */ + public function search($sQuery, $iUserID = false, $bContactsOnly = false, $iItemsPerPage = false) { + + // Pass query (required) + $aArgs = array( + 'query' => $sQuery + ); + + // Pass user + if($iUserID) { + $aArgs['user_id'] = $iUserID; + } + + // Pass contacts + if($bContactsOnly) { + $aArgs['contacts_only'] = $bContactsOnly; + } + + // Pass items + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.search', $aArgs); + } + + /** + * This gets a list of videos for the specified user. + * + * This is the functionality of "My Videos" or "Ted's Videos." At the moment, this is the same list + * as vimeo.videos.getAppearsInList. If you need uploaded or appears in, those are available too. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetListResponse + */ + public function getList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getList', $aArgs); + } + + /** + * This gets a list of videos uploaded by the specified user. + * + * If the calling user is logged in, this will return information that calling user has access to + * (including private videos). If the calling user is not authenticated, this will only return + * public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetUploadedListResponse + */ + public function getUploadedList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getUploadedList', $aArgs); + } + + /** + * This gets a list of videos that the specified user appears in. + * + * If the calling user is logged in, this will return information that calling user has access + * to (including private videos). If the calling user is not authenticated, this will only return + * public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetAppearsInListResponse + */ + public function getAppearsInList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getAppearsInList', $aArgs); + } + + /** + * This gets a list of subscribed videos for a particular user. + * + * If the calling user is logged in, this will return information that calling user + * has access to (including private videos). If the calling user is not authenticated, + * this will only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetSubscriptionsListResponse + */ + public function getSubscriptionsList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getSubscriptionsList', $aArgs); + } + + /** + * This gets a list of videos by tag + * + * If you specify a user_id, we'll only get video uploaded by that user with the specified tag. + * If the calling user is logged in, this will return information that calling user has access + * to (including private videos). If the calling user is not authenticated, this will only + * return public information, or a permission denied error if none is available. + * + * @access public + * @param string A single tag: "cat" "new york" "cheese" + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetListByTagResponse + */ + public function getListByTag($sTag, $iUserID = false, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'tag' => $sTag + ); + + if($iUserID) { + $aArgs['user_id'] = $iUserID; + } + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getListByTag', $aArgs); + } + + /** + * Get a list of videos that the specified user likes. + * + * If the calling user is logged in, this will return information that calling user has + * access to (including private videos). If the calling user is not authenticated, this will + * only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetLikeListResponse + */ + public function getLikeList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getLikeList', $aArgs); + } + + /** + * Get a list of videos made by the contacts of a specific user. + * + * If the calling user is logged in, this will return information that calling user has + * access to (including private videos). If the calling user is not authenticated, this will + * only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetContactsListResponse + */ + public function getContactsList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getContactsList', $aArgs); + } + + /** + * Get a list of videos that the specified users contacts like. + * + * If the calling user is logged in, this will return information that calling user has + * access to (including private videos). If the calling user is not authenticated, this will + * only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer User ID, this can be the ID number (151542) or the username (ted) + * @param integer Which page to show. + * @param integer How many results per page? + * @return VimeoVideosGetContactsLikeListResponse + */ + public function getContactsLikeList($iUserID, $iPage = false, $iItemsPerPage = false) { + // Extend query + $aArgs = array( + 'user_id' => $iUserID + ); + + if($iPage) { + $aArgs['page'] = $iPage; + } + + if($iItemsPerPage) { + $aArgs['per_page'] = $iItemsPerPage; + } + + // Please deliver full response so we can handle videos with unified classes + $aArgs['fullResponse'] = 1; + + return VimeoBase::executeRemoteCall('vimeo.videos.getContactsLikeList', $aArgs); + } + + /** + * Get all kinds of information about a photo. + * + * If the calling user is logged in, this will return information that calling user has + * access to (including private videos). If the calling user is not authenticated, this will + * only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer Video ID + * @return VimeoVideosGetInfoResponse + */ + public function getInfo($iVideoID) { + // Extend query + $aArgs = array( + 'video_id' => $iVideoID + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.getInfo', $aArgs); + } + + /** + * Generate a new upload Ticket. + * + * You'll need to pass this to the uploader. It's only good for one upload, only good for one user. + * + * @access public + * @return VimeoVideosGetUploadTicketResponse + */ + public function getUploadTicket() { + return VimeoBase::executeRemoteCall('vimeo.videos.getUploadTicket'); + } + + /** + * Check the status of an upload started via the API + * + * This is how you get the video_id of a clip uploaded from the API + * If you never call this to check in, we assume it was abandoned and don't process it + * + * @access public + * @param string The ticket number of the upload + * @return VimeoVideosCheckUploadStatusResponse + */ + public function checkUploadStatus($sTicket) { + $aArgs = array( + 'ticket_id' => $sTicket + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.checkUploadStatus', $aArgs); + } + + /** + * Simple video upload + * + * @access public + * @param string Absolute path to file + * @param string Existing ticket or false to generate a new one + * @return VimeoVideosCheckUploadStatusResponse + */ + public function doUpload($sFilename, $sTicket = false) { + return VimeoBase::executeVideopostCall($sFilename, $sTicket); + } + + /** + * Delete a video + * + * The authenticated user must own the video and have granted delete permission + * + * @access public + * @param integer Video ID + * @return VimeoVideosDeleteResponse + */ + public function delete($iVideoID) { + $aArgs = array( + 'video_id' => $iVideoID + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.delete', $aArgs); + } + + /** + * Set the title of a video (overwrites previous title) + * + * @access public + * @param integer Video ID + * @param string Title + * @return VimeoVideosSetTitleResponse + */ + public function setTitle($iVideoID, $sVideoTitle) { + $aArgs = array( + 'video_id' => $iVideoID, + 'title' => $sVideoTitle + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.setTitle', $aArgs); + } + + /** + * Set a new caption for a video (overwrites previous caption) + * + * @access public + * @param integer Video ID + * @param string Caption + * @return VimeoVideosSetCaptionResponse + */ + public function setCaption($iVideoID, $sVideoCaption) { + $aArgs = array( + 'video_id' => $iVideoID, + 'caption' => $sVideoCaption + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.setCaption', $aArgs); + } + + /** + * Set a video as a favorite. + * + * @access public + * @param integer Video ID + * @param boolean TRUE to favorite, FALSE to return to normal + * @return VimeoVideosSetFavoriteResponse + */ + public function setFavorite($iVideoID, $bFavorite = true) { + $aArgs = array( + 'video_id' => $iVideoID, + 'favorite' => (int) $bFavorite + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.setFavorite', $aArgs); + } + + /** + * Add specified tags to the video, this does not replace any tags. + * + * Tags should be comma separated lists. + * + * If the calling user is logged in, this will return information that calling + * user has access to (including private videos). If the calling user is not authenticated, + * this will only return public information, or a permission denied error if none is available. + * + * @access public + * @param integer Video ID + * @param mixed Array with tags or Comma separated list of tags ("lions, tigers, bears") + * @return VimeoVideosAddTagsResponse + */ + public function addTags($iVideoID, $mTags) { + // Catch array of tags + if(is_array($mTags)) { + $mTags = implode(',', $mTags); + } + + // Prepare arguments + $aArgs = array( + 'video_id' => $iVideoID, + 'tags' => $mTags + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.addTags', $aArgs); + } + + /** + * Remove specified tag from the video. + * + * @access public + * @param integer Video ID + * @param integer Tag ID, this should be a tag id returned by vimeo.videos.getInfo + * @return VimeoVideosRemoveTagResponse + */ + public function removeTag($iVideoID, $iTagID) { + $aArgs = array( + 'video_id' => $iVideoID, + 'tag_id' => $iTagID + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.removeTag', $aArgs); + } + + /** + * Remove ALL of the tags from the video + * + * @access public + * @param integer Video ID + * @return VimeoVideosClearTags + */ + public function clearTags($iVideoID) { + $aArgs = array( + 'video_id' => $iVideoID + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.clearTags', $aArgs); + } + + /** + * Set the privacy of the video + * + * @access public + * @param integer Video ID + * @param integer Privacy enum see VimeoVideosRequest::PRIVACY_* + * @param mixed Array or comma separated list of users who can view the video. PRIVACY_USERS must be set. + */ + public function setPrivacy($iVideoID, $ePrivacy, $mUsers = array()) { + // Catch array of users + if(is_array($mUsers)) { + $mUsers = implode(', ', $mUsers); + } + + $aArgs = array( + 'video_id' => $iVideoID, + 'privacy' => $ePrivacy, + 'users' => $mUsers + ); + + return VimeoBase::executeRemoteCall('vimeo.videos.setPrivacy', $aArgs); + } +} + +/** +* Vimeo Videos Search response handler class +* +* Handles the API response for vimeo.videos.search queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosSearchResponse extends VimeoResponse { + private $iPage = false; + private $iItemsPerPage = false; + private $iOnThisPage = false; + + private $aoVideos = array(); + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse) { + parent::__construct($aResponse); + + // Parse information + if($aResponse && isset($aResponse->videos) && $this->getStatus()) { + // Create an video list instance + $this->aoVideos = new VimeoVideoList(); + + // Page information + $this->iPage = $aResponse->videos->page; + $this->iItemsPerPage = $aResponse->videos->perpage; + $this->iOnThisPage = $aResponse->videos->on_this_page; + + // Parse videos + if(isset($aResponse->videos->video)) { + // We should check if the subelement is an object (single hit) or an result array (multiple hits) + if(is_array($aResponse->videos->video)) { + // We got a couple of results + $aParseableData = $aResponse->videos->video; + } else { + // We only got one result + $aParseableData = array( + 0 => $aResponse->videos->video + ); + } + + // Parse the results + foreach($aParseableData as $aVideoInformation) { + $oVideo = new VimeoVideoEntity($aVideoInformation); + + $this->aoVideos->add($oVideo, $oVideo->getID()); + } + } + } + } + + /** + * Current page + * + * @access public + * @return integer Page number + */ + public function getPage() { + return $this->iPage; + } + + /** + * Items per page + * + * @access public + * @return integer Items per page + */ + + public function getItemsPerPage() { + return $this->iItemsPerPage; + } + + /** + * Items on the current page + * + * @access public + * @return integer Items on the current page + */ + + public function getOnThisPage() { + return $this->iOnThisPage; + } + + /** + * Get array of video objects + * + * @access public + * @return array Video objects + */ + + public function getVideos() { + return $this->aoVideos; + } +} + +/** +* Vimeo Videos Search exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.search queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosSearchException extends VimeoException {} + +/** +* Vimeo Videos GetList response handler class +* +* Handles the API response for vimeo.videos.getList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos Search exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.search queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetListException extends VimeoException {} + +/** +* Vimeo Videos GetUploadedList response handler class +* +* Handles the API response for vimeo.videos.getUploadedList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetUploadedListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetUploadedList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getUploadedList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetUploadedListException extends VimeoException {} + +/** +* Vimeo Videos GetAppearsInList response handler class +* +* Handles the API response for vimeo.videos.getAppearsInList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetAppearsInListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetAppearsInList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getAppearsInList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetAppearsInListException extends VimeoException {} + +/** +* Vimeo Videos GetSubscriptionsList response handler class +* +* Handles the API response for vimeo.videos.getSubscriptionsList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetSubscriptionsListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetSubscriptionsList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getSubscriptionsList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetSubscriptionsListException extends VimeoException {} + +/** +* Vimeo Videos GetListByTag response handler class +* +* Handles the API response for vimeo.videos.getListByTag queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetListByTagResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetListByTag exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getListByTag queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetListByTagException extends VimeoException {} + +/** +* Vimeo Videos GetLikeList response handler class +* +* Handles the API response for vimeo.videos.getLikeList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetLikeListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetLikeList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getLikeList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetLikeListException extends VimeoException {} + +/** +* Vimeo Videos GetContactsList response handler class +* +* Handles the API response for vimeo.videos.getContactsList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetContactsListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos GetContactsList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getContactsList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetContactsListException extends VimeoException {} + +/** +* Vimeo Videos getContactsLikeList response handler class +* +* Handles the API response for vimeo.videos.getContactsLikeList queries. +* Currently the response is exact the same as vimeo.videos.search +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosgetContactsLikeListResponse extends VimeoVideosSearchResponse {} + +/** +* Vimeo Videos getContactsLikeList exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getContactsLikeList queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetContactsLikeListException extends VimeoException {} + +/** +* Vimeo Videos GetInfo response handler class +* +* Handles the API response for vimeo.videos.getInfo queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetInfoResponse extends VimeoResponse { + private $oVideo = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse) { + parent::__construct($aResponse); + + $this->oVideo = new VimeoVideoEntity($aResponse->video); + } + + /** + * Get video information as object + * + * @access public + * @return VimeoVideoEntity + */ + public function getVideo() { + return $this->oVideo; + } +} + +/** +* Vimeo Videos GetInfo exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getInfo queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetInfoException extends VimeoException {} + +/** +* Vimeo Videos getUploadTicket response handler class +* +* Handles the API response for vimeo.videos.getUploadTicket queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosGetUploadTicketResponse extends VimeoResponse { + private $sTicket = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->sTicket = $aResponse->ticket->id; + } + + /** + * Get generated upload ticket + * + * @access public + * @return string The ticket number of the upload + */ + public function getTicket() { + return $this->sTicket; + } +} + +/** +* Vimeo Videos getUploadTicket exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.getUploadTicket queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosGetUploadTicketException extends VimeoException {} + +/** +* Vimeo Videos checkUploadStatus response handler class +* +* Handles the API response for vimeo.videos.checkUploadStatus queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosCheckUploadStatusResponse extends VimeoResponse { + private $sTicket = false; + private $iVideoID = false; + private $bIsUploading = false; + private $bIsTranscoding = false; + private $iTranscodingProgress = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->sTicket = $aResponse->ticket->id; + $this->iVideoID = $aResponse->ticket->video_id; + $this->bIsUploading = (bool) $aResponse->ticket->is_uploading; + $this->bIsTranscoding = (bool) $aResponse->ticket->is_transcoding; + $this->iTranscodingProgress = $aResponse->ticket->transcoding_progress; + } + + /** + * Get Ticket + * + * @access public + * @return string Ticket + */ + public function getTicket() { + return $this->sTicket; + } + + /** + * Get Video ID + * + * @access public + * @return integer Video ID + */ + public function getVideoID() { + return $this->iVideoID; + } + + /** + * Is the video uploading? + * + * @access public + * @return boolean TRUE if uploading, FALSE if not + */ + public function isUploading() { + return $this->bIsUploading; + } + + /** + * Is the video transcoding? + * + * Also check getTranscodingProgress() for percentage in transcoding + * + * @access public + * @return boolean TRUE if uploading, FALSE if not + */ + public function isTranscoding() { + return $this->bIsTranscoding; + } + + /** + * Get the transcoding progress + * + * Should only be called if isTranscoding() returns true + * + * @access public + * @return integer Percentage + */ + public function getTranscodingProgress() { + return $this->iTranscodingProgress; + } +} + +/** +* Vimeo Videos checkUploadStatus exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.checkUploadStatus queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosCheckUploadStatusException extends VimeoException {} + +/** +* Vimeo Videos delete response handler class +* +* Handles the API response for vimeo.videos.delete queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosDeleteResponse extends VimeoResponse {} + +/** +* Vimeo Videos delete exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.delete queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosDeleteException extends VimeoException {} + +/** +* Vimeo Videos setTitle response handler class +* +* Handles the API response for vimeo.videos.setTitle queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosSetTitleResponse extends VimeoResponse {} + +/** +* Vimeo Videos setTitle exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.setTitle queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosSetTitleException extends VimeoException {} + +/** +* Vimeo Videos setCaption response handler class +* +* Handles the API response for vimeo.videos.setCaption queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosSetCaptionResponse extends VimeoResponse {} + +/** +* Vimeo Videos setCaption exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.setCaption queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosSetCaptionException extends VimeoException {} + +/** +* Vimeo Videos setFavorite response handler class +* +* Handles the API response for vimeo.videos.setFavorite queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosSetFavoriteResponse extends VimeoResponse {} + +/** +* Vimeo Videos setFavorite exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.setFavorite queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosSetFavoriteException extends VimeoException {} + +/** +* Vimeo Videos addTags response handler class +* +* Handles the API response for vimeo.videos.addTags queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosAddTagsResponse extends VimeoResponse {} + +/** +* Vimeo Videos addTags exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.addTags queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosAddTagsException extends VimeoException {} + +/** +* Vimeo Videos removeTag response handler class +* +* Handles the API response for vimeo.videos.removeTag queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosRemoveTagResponse extends VimeoResponse {} + +/** +* Vimeo Videos removeTag exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.removeTag queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosRemoveTagException extends VimeoException {} + +/** +* Vimeo Videos clearTags response handler class +* +* Handles the API response for vimeo.videos.clearTags queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosClearTagsResponse extends VimeoResponse {} + +/** +* Vimeo Videos clearTags exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.clearTags queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosClearTagsException extends VimeoException {} + +/** +* Vimeo Videos setPrivacy response handler class +* +* Handles the API response for vimeo.videos.setPrivacy queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoVideosSetPrivacyResponse extends VimeoResponse {} + +/** +* Vimeo Videos setPrivacy exception handler class +* +* Handles exceptions caused by API response for vimeo.videos.setPrivacy queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoVideosSetPrivacyException extends VimeoException {} + +/** +* vimeo.people.* methods +*/ + +/** +* Vimeo People request handler class +* +* Implements all API queries in the vimeo.people.* category +* +* @package SimpleVimeo +* @subpackage ApiRequest +*/ + +class VimeoPeopleRequest extends VimeoRequest { + const TYPE_LIKES = 'likes'; + const TYPE_APPEARS = 'appears'; + const TYPE_BOTH = 'likes,appears'; + + /** + * Get a user id and full/display name with a username. + * + * You shouldn't need this to get the User ID, we allow you to use the + * username instead of User ID everywhere, it's much nicer that way. + * + * @access public + * @param string The username to lookup + * @return VimeoPeopleFindByUsernameResponse + */ + public function findByUsername($sUsername) { + $aArgs = array( + 'username' => $sUsername + ); + + return VimeoBase::executeRemoteCall('vimeo.people.findByUserName', $aArgs); + } + + /** + * Get tons of info about a user. + * + * @access public + * @param integer The id of the user we want. + * @return VimeoPeopleGetInfoResponse + */ + public function getInfo($iUserID) { + $aArgs = array( + 'user_id' => $iUserID + ); + + return VimeoBase::executeRemoteCall('vimeo.people.getInfo', $aArgs); + } + + /** + * Get a user id and full/display name via an Email Address. + * + * You shouldn't need to use this to get the User ID, we allow you + * to use the username instead of User ID everywhere, it's much nicer that way. + * + * @access public + * @param string Email + * @return VimeoPeopleFindByEmailResponse + */ + public function findByEmail($sEmail) { + $aArgs = array( + 'find_email' => $sEmail + ); + + return VimeoBase::executeRemoteCall('vimeo.people.findByEmail', $aArgs); + } + + /** + * Get a portrait URL for a given user/size + * + * Portraits are square, so you only need to pass one size parameter. + * Possible sizes are 20, 24, 28, 30, 40, 50, 60, 75, 100, 140, 278 and 300 + * + * @access public + * @param string The username to lookup + * @param integer The size of the portrait you you want. (defaults to 75) + * @return VimeoPeopleGetPortraitUrlResponse + * + * @todo Check functionality. Did not work, god knows why + */ + public function getPortraitUrl($sUser, $iSize = false) { + $aArgs = array( + 'user' => $sUser + ); + + if($iSize) { + $aArgs['size'] = $iSize; + } + + return VimeoBase::executeRemoteCall('vimeo.people.getPortraitUrl', $aArgs); + } + + /** + * Add a user as a contact for the authenticated user. + * + * If Jim is authenticated, and the $user is sally. Sally will be Jim's contact. + * It won't work the other way around. Depending on Sally's settings, this may + * send her an email notifying her that Jim Added her as a contact. + * + * @access public + * @param string The user to add. User ID, this can be the ID number (151542) or the username (ted) + * @return VimeoPeopleAddContactResponse + */ + public function addContact($sUser) { + $aArgs = array( + 'user' => $sUser + ); + + return VimeoBase::executeRemoteCall('vimeo.people.addContact', $aArgs); + } + + /** + * Remove a user as a contact for the authenticated user. + * + * @access public + * @param string The user to remove. User ID, this can be the ID number (151542) or the username (ted) + * @return VimeoPeopleRemoveContactResponse + */ + public function removeContact($sUser) { + $aArgs = array( + 'user' => $sUser + ); + + return VimeoBase::executeRemoteCall('vimeo.people.removeContact', $aArgs); + } + + /** + * This tells you how much space the user has remaining for uploads. + * + * We provide info in bytes and kilobytes. It probably makes sense for you to use kilobytes. + * + * @access public + * @return VimeoPeopleGetUploadStatusResponse + */ + public function getUploadStatus() { + return VimeoBase::executeRemoteCall('vimeo.people.getUploadStatus'); + } + + /** + * Subscribe to a user's videos. + * + * Just like on the site, you can subscribe to videos a user "appears" in or "likes." Or both! + * This will not remove any subscriptions. So if the user is subscribed to a user for both "likes" + * and "appears," this will not change anything if you only specify one of them. If you want to + * remove one, you must call vimeo.people.removeSubscription(). + * + * @access public + * @param string User ID, this can be the ID number (151542) or the username (ted) + * @param string with self::TYPE_LIKES or self::TYPE_APPEARS or self::TYPE_BOTH + * @return VimeoPeopleAddSubscriptionResponse + */ + public function addSubscription($sUser, $eType = self::TYPE_BOTH) { + $aArgs = array( + 'user' => $sUser, + 'type' => $eType + ); + + return VimeoBase::executeRemoteCall('vimeo.people.addSubscription', $aArgs); + } + + /** + * Unsubscribe to a user's videos. + * + * @access public + * @param string User ID, this can be the ID number (151542) or the username (ted) + * @param string with self::TYPE_LIKES or self::TYPE_APPEARS or self::TYPE_BOTH + * @return VimeoPeopleRemoveSubscriptionResponse + */ + public function removeSubscription($sUser, $eType = self::TYPE_BOTH) { + $aArgs = array( + 'user' => $sUser, + 'type' => $eType + ); + + return VimeoBase::executeRemoteCall('vimeo.people.removeSubscription', $aArgs); + } +} + +/** +* Vimeo People FindByUserName response handler class +* +* Handles the API response for vimeo.people.findByUserName queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleFindByUserNameResponse extends VimeoResponse { + private $oUser = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->oUser = new VimeoUserEntity($aResponse->user); + } + + /** + * Get user entity object + * + * @access public + * @return VimeoUserEntity + */ + public function getUser() { + return $this->oUser; + } +} + +/** +* Vimeo People FindByUserName exception handler class +* +* Handles exceptions caused by API response for vimeo.people.findByUserName queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleFindByUserNameException extends VimeoException {} + +/** +* Vimeo People FindByEmail response handler class +* +* Handles the API response for vimeo.people.findByEmail queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleFindByEmailResponse extends VimeoResponse { + private $oUser = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->oUser = new VimeoUserEntity($aResponse->user); + } + + /** + * Get user entity object + * + * @access public + * @return VimeoUserEntity + */ + public function getUser() { + return $this->oUser; + } +} + +/** +* Vimeo People FindByEmail exception handler class +* +* Handles exceptions caused by API response for vimeo.people.findByEmail queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleFindByEmailException extends VimeoException {} + +/** +* Vimeo People GetInfo response handler class +* +* Handles the API response for vimeo.people.getInfo queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleGetInfoResponse extends VimeoResponse { + private $oUser = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->oUser = new VimeoUserEntity($aResponse->person); + } + + /** + * Get user entity object + * + * @access public + * @return VimeoUserEntity + */ + public function getUser() { + return $this->oUser; + } +} + +/** +* Vimeo People GetInfo exception handler class +* +* Handles exceptions caused by API response for vimeo.people.getInfo queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleGetInfoException extends VimeoException {} + +/** +* Vimeo People getPortraitUrl response handler class +* +* Handles the API response for vimeo.people.getPortraitUrl queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleGetPortraitUrlResponse extends VimeoResponse {} + +/** +* Vimeo People getPortraitUrl exception handler class +* +* Handles exceptions caused by API response for vimeo.people.getPortraitUrl queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleGetPortraitUrlException extends VimeoException {} + +/** +* Vimeo People addContact response handler class +* +* Handles the API response for vimeo.people.addContact queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleAddContactResponse extends VimeoResponse {} + +/** +* Vimeo People addContact exception handler class +* +* Handles exceptions caused by API response for vimeo.people.addContact queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleAddContactException extends VimeoException {} + +/** +* Vimeo People removeContact response handler class +* +* Handles the API response for vimeo.people.removeContact queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleRemoveContactResponse extends VimeoResponse {} + +/** +* Vimeo People removeContact exception handler class +* +* Handles exceptions caused by API response for vimeo.people.removeContact queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleRemoveContactException extends VimeoException {} + +/** +* Vimeo People getUploadStatus response handler class +* +* Handles the API response for vimeo.people.getUploadStatus queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleGetUploadStatusResponse extends VimeoResponse { + private $iMaxBytes = false; + private $iMaxKBytes = false; + + private $iUsedBytes = false; + private $iUsedKBytes = false; + + private $iRemainingBytes = false; + private $iRemainingKBytes = false; + + /** + * Constructor + * + * Parses the API response + * + * @access public + * @param stdClass API response + * @return void + */ + public function __construct($aResponse = false) { + parent::__construct($aResponse); + + $this->iMaxBytes = $aResponse->user->bandwidth->maxbytes; + $this->iMaxKBytes = $aResponse->user->bandwidth->maxkb; + + $this->iUsedBytes = $aResponse->user->bandwidth->usedbytes; + $this->iUsedKBytes = $aResponse->user->bandwidth->usedkb; + + $this->iRemainingBytes = $aResponse->user->bandwidth->remainingbytes; + $this->iRemainingKBytes = $aResponse->user->bandwidth->remainingkb; + } + + /** + * Get maximum upload for this week in BYTES + * + * @access public + * @return integer Maximum bytes this week + */ + public function getMaxBytes() { + return $this->iMaxBytes; + } + + /** + * Get maximum upload for this week in KILOBYTES + * + * @access public + * @return integer Maximum kbytes this week + */ + public function getMaxKiloBytes() { + return $this->iMaxKBytes; + } + + /** + * Get used upload for this week in BYTES + * + * @access public + * @return integer Used bytes this week + */ + public function getUsedBytes() { + return $this->iUsedBytes; + } + + /** + * Get used upload for this week in KILOBYTES + * + * @access public + * @return integer Used kbytes this week + */ + public function getUsedKiloBytes() { + return $this->iUsedKBytes; + } + + /** + * Get remaining upload for this week in BYTES + * + * @access public + * @return integer Remaining bytes this week + */ + public function getRemainingBytes() { + return $this->iRemainingBytes; + } + + /** + * Get remaining upload for this week in KILOBYTES + * + * @access public + * @return integer Remaining kbytes this week + */ + public function getRemainingKiloBytes() { + return $this->iRemainingKBytes; + } +} + +/** +* Vimeo People getUploadStatus exception handler class +* +* Handles exceptions caused by API response for vimeo.people.getUploadStatus queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleGetUploadStatusException extends VimeoException {} + +/** +* Vimeo People addSubscription response handler class +* +* Handles the API response for vimeo.people.addSubscription queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleAddSubscriptionResponse extends VimeoResponse {} + +/** +* Vimeo People addSubscription exception handler class +* +* Handles exceptions caused by API response for vimeo.people.addSubscription queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleAddSubscriptionException extends VimeoException {} + +/** +* Vimeo People removeSubscription response handler class +* +* Handles the API response for vimeo.people.removeSubscription queries. +* +* @package SimpleVimeo +* @subpackage ApiResponse +*/ + +class VimeoPeopleRemoveSubscriptionResponse extends VimeoResponse {} + +/** +* Vimeo People removeSubscription exception handler class +* +* Handles exceptions caused by API response for vimeo.people.removeSubscription queries. +* +* @package SimpleVimeo +* @subpackage Exceptions +*/ + +class VimeoPeopleRemoveSubscriptionException extends VimeoException {} + +?> diff --git a/new.php b/new.php new file mode 100644 index 000000000..726245eb5 --- /dev/null +++ b/new.php @@ -0,0 +1,47 @@ + + * @copyright Prateek Choudhary + */ + + + // Render the video upload page + // Load Elgg engine + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + gatekeeper(); + + //get videolist GUID + $container_guid = get_input('container'); + if(isset($container_guid) && !empty($container_guid)){ + $container_guid = explode(":", $container_guid); + if($container_guid[0] == "group"){ + $container = get_entity($container_guid[1]); + set_page_owner($container->getGUID()); + $page_owner = page_owner_entity(); + set_context("groupsvideos"); + set_input("container_guid", $container->getGUID()); + } + else{ + // 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']); + set_input("container_guid", $_SESSION['guid']); + } + } + } + + $title = sprintf(elgg_echo("videolist:new"), $page_owner->name); + + $area2 = elgg_view_title($title); + $area2 .= elgg_view("forms/add"); + $body = elgg_view_layout('one_column_with_sidebar', $area1 . $area2); + + page_draw($title, $body); +?> diff --git a/start.php b/start.php new file mode 100644 index 000000000..fffc04c34 --- /dev/null +++ b/start.php @@ -0,0 +1,216 @@ + + * @copyright Prateek Choudhary + */ + + function videolist_init() { + + // Load system configuration + global $CONFIG; + if (isloggedin()) + { + add_menu(elgg_echo('videolist'), $CONFIG->wwwroot . "pg/videolist/owned/" . $_SESSION['user']->username); + } + + // Extend system CSS with our own styles + extend_view('css','videolist/css'); + // Load the language file - default is english + register_translations($CONFIG->pluginspath . "videolist/languages/"); + + // Register a page handler, so we can have nice URLs + register_page_handler('videolist','videolist_page_handler'); + + //extend this plugin for groups + extend_view('groups/left_column','videolist/groupprofile_videolist'); + + // Add a new videolist widget + add_widget_type('videolist_view',elgg_echo("videolist:widget"),elgg_echo("videolist:widget:description"), 'profile'); + + if (is_callable('register_notification_object')) + register_notification_object('object', 'videolist', elgg_echo('videolist:new')); + register_plugin_hook('object:notifications','object','videolist_object_notifications_intercept'); + + // Register URL handler + register_entity_url_handler('video_url','object', 'videolist'); + register_entity_url_handler('video_url','object', 'watch'); + + //register entity url handler + register_entity_url_handler('videolist_url','object','videolist'); + // Register entity type + register_entity_type('object','videolist'); + + + + + } + + /** + * videolist page handler; allows the use of fancy URLs + * + * @param array $page From the page_handler function + * @return true|false Depending on success + */ + function videolist_page_handler($page) { + + if (isset($page[0])) { + switch($page[0]) { + case "owned": if (isset($page[1])) set_input('username',$page[1]); + @include(dirname(__FILE__) . "/index.php"); + break; + case "search": @include(dirname(__FILE__) . "/world.php"); + break; + case "video": @include(dirname(__FILE__) . "/video.php"); + break; + case "new": if (isset($page[3])) set_input('add_videourl',$page[3]); + if (isset($page[5])) set_input('page',$page[5]); + if (isset($page[1])) set_input('container',$page[1]); + @include(dirname(__FILE__) . "/new.php"); + break; + case "watch": set_input('video_id',$page[1]); + @include(dirname(__FILE__) . "/watch.php"); + break; + case "browse": if (isset($page[1])) set_input('container',$page[1]); + @include(dirname(__FILE__) . "/browse.php"); + break; + default : if (isset($page[1])) set_input('username',$page[1]); + @include(dirname(__FILE__) . "/index.php"); + break; + } + // If the URL is just 'videolist/username', or just 'videolist/', load the standard index file + } else { + if (isset($page[1])) set_input('username',$page[1]); + @include(dirname(__FILE__) . "/index.php"); + return true; + } + + return false; + + } + + + function videolist_pagesetup() { + + global $CONFIG; + $page_owner = page_owner_entity(); + + if ($page_owner instanceof ElggGroup && get_context() == "groups") { + add_submenu_item(sprintf(elgg_echo("videolist:home"),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/owned/" . page_owner_entity()->username); + } + //add submenu options + else if (get_context() == "videolist") { + /********************************************************************************************** + ****if user is OR is not registered user then show him following page menus to choose from + ***********************************************************************************************/ + /* + add_submenu_item(elgg_echo('videolist:home'),$CONFIG->wwwroot."pg/videolist/". $page_owner->username); + + add_submenu_item(elgg_echo('videolist:new'),$CONFIG->wwwroot."pg/videolist/new"); + + add_submenu_item(elgg_echo('videolist:find'),$CONFIG->wwwroot."pg/videolist/search/"); + */ + if ((page_owner() == $_SESSION['guid'] || !page_owner()) && isloggedin()) { + add_submenu_item(sprintf(elgg_echo("videolist:home"),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/owned/" . page_owner_entity()->username); + add_submenu_item(sprintf(elgg_echo('videolist:new'),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/new/". page_owner_entity()->username); + add_submenu_item(sprintf(elgg_echo('videolist:browsemenu'),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/browse/". page_owner_entity()->username); + add_submenu_item(sprintf(elgg_echo('videolist:find'),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/search/"); + } else if (page_owner() && $page_owner instanceof ElggUser) { + add_submenu_item(sprintf(elgg_echo("videolist:home"),$page_owner->name), $CONFIG->wwwroot . "pg/videolist/owned/". $page_owner->username); + } + } + else if (get_context() == "groupsvideos") { + add_submenu_item(sprintf(elgg_echo("videolist:home"),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/owned/" . page_owner_entity()->username); + if ($page_owner->canEdit()) { + add_submenu_item(sprintf(elgg_echo('videolist:browsemenu'),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/browse/". page_owner_entity()->username); + add_submenu_item(sprintf(elgg_echo('videolist:new'),page_owner_entity()->name), $CONFIG->wwwroot . "pg/videolist/new/". page_owner_entity()->username); + } + } + } + + + function video_url($entity) { + global $CONFIG; + $video_id = $entity->video_id; + return $CONFIG->url . "pg/videolist/watch/" . $entity->getGUID() . "/" . $video_id; + + } + + function videolist_url($videolistpage) { + + global $CONFIG; + $owner = $videolistpage->container_guid; + $userdata = get_entity($owner); + $title = $videolistpage->title; + $title = friendly_title($title); + return $CONFIG->url . "pg/videolist/watch/" . $videolistpage->getGUID(); + } + + /** + * Event handler for videolist + * + */ + function videolist_object_notifications($event, $object_type, $object) { + + static $flag; + if (!isset($flag)) $flag = 0; + + if (is_callable('object_notifications')) + if ($object instanceof ElggObject) { + if ($object->getSubtype() == 'videolist') { + if ($flag == 0) { + $flag = 1; + object_notifications($event, $object_type, $object); + } + } + } + } + + /** + * Intercepts the notification on an event of new video being created and prevents a notification from going out + * (because one will be sent on the annotation) + * + * @param unknown_type $hook + * @param unknown_type $entity_type + * @param unknown_type $returnvalue + * @param unknown_type $params + * @return unknown + */ + function videolist_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) { + if (isset($params)) { + if ($params['event'] == 'create' && $params['object'] instanceof ElggObject) { + if ($params['object']->getSubtype() == 'videolist') { + return true; + } + } + } + return null; + } + + // Register a handler for adding videos + register_elgg_event_handler('create', 'videolist', 'videolist_create_event_listener'); + + // Register a handler for delete videos + register_elgg_event_handler('delete', 'videolist', 'videolist_delete_event_listener'); + + // Make sure the status initialisation function is called on initialisation + register_elgg_event_handler('init','system','videolist_init'); + + register_elgg_event_handler('pagesetup','system','videolist_pagesetup'); + register_elgg_event_handler('annotate','all','videolist_object_notifications'); + + // Register actions + global $CONFIG; + + register_action("videolist/addvideo", false, $CONFIG->pluginspath . "videolist/actions/addvideo.php"); + register_action("videolist/tubesearch", false, $CONFIG->pluginspath . "videolist/actions/tubesearch.php"); + //register_action("videolist/addcomment", false, $CONFIG->pluginspath . "videolist/actions/comments/add.php"); + register_action("videolist/remove", false, $CONFIG->pluginspath . "videolist/actions/delete.php"); + + +?> diff --git a/views/default/forms/add.php b/views/default/forms/add.php new file mode 100644 index 000000000..f9837ede4 --- /dev/null +++ b/views/default/forms/add.php @@ -0,0 +1,176 @@ + + * @copyright Prateek Choudhary + */ +// Make sure we're logged in (send us to the front page if not) + gatekeeper(); + $page_owner = page_owner_entity(); + $error = array( + 'no-video' => 1 + ); + $error_msg = array( + 'no-video' => "Please enter a valid video url" + ); + + $container_guid = get_input("container_guid"); + set_page_owner($container_guid); + + $confirm_action = get_input('video_action'); + $guid = get_input('guid'); + $access_id = get_input('access_id'); + $title_videourl = get_input('title_videourl'); + $Pagecontainer = get_input('page'); + $get_addvideourl = get_input('add_videourl'); + $timestamp = time(); + $token = generate_action_token(time()); + if(!empty($get_addvideourl) && ($Pagecontainer == "youtube")) + $title_add_videourl = "http://www.youtube.com/watch?v=".$get_addvideourl; + else if(!empty($get_addvideourl) && ($Pagecontainer == "metacafe")) + $title_add_videourl = "http://www.metacafe.com/api/item/".$get_addvideourl; + else if(!empty($get_addvideourl) && ($Pagecontainer == "vimeo")) + $title_add_videourl = "http://vimeo.com/".$get_addvideourl; + else + $title_add_videourl = ""; + + + $tags = get_input('videolisttags'); + + function video_youtube_parse_url($url) + { + if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(youtube\.com\/)(.*)/', $url, $matches)) + { + return false; + } + + $domain = $matches[2] . $matches[3]; + $path = $matches[4]; + + if (!preg_match('/^(watch\?v=)([a-zA-Z0-9_-]*)(&.*)?$/',$path, $matches)) + { + return false; + } + + $hash = $matches[2]; + + + return $domain . 'v/' . $hash; + } + + function video_vimeo_parse_url($url) + { + if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(vimeo\.com\/)(.*)/', $url, $matches)) + { + return false; + } + + $domain = $matches[2] . $matches[3]; + $path = $matches[4]; + + $hash = $matches[2]; + + + return $domain . '/' . $hash; + } + + function video_metacafe_parse_url($url) + { + if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(metacafe\.com\/)(.*)/', $url, $matches)) + { + return false; + } + + $domain = $matches[2] . $matches[3]; + $path = $matches[4]; + + $hash = $matches[2]; + + + return $domain . '/' . $hash; + } + + if(isset($confirm_action) && ($confirm_action == 'add_video')) + { + if(isset($title_videourl) && ($title_videourl != '')) + { + if($Pagecontainer != "youtube" || $Pagecontainer != "vimeo" || $Pagecontainer != "metacafe"){ + if(preg_match("/youtube/i", $title_videourl)) + $Pagecontainer = "youtube"; + if(preg_match("/vimeo/i", $title_videourl)) + $Pagecontainer = "vimeo"; + if(preg_match("/metacafe/i", $title_videourl)) + $Pagecontainer = "metacafe"; + } + if($Pagecontainer == "youtube") + $is_valid_video = video_youtube_parse_url($title_videourl); + else if($Pagecontainer == "vimeo"){ + $is_valid_video = video_vimeo_parse_url($title_videourl); + $is_valid_video = $get_addvideourl; + } + else if($Pagecontainer == "metacafe"){ + $is_valid_video = video_metacafe_parse_url($title_videourl); + $is_valid_video = $get_addvideourl; + } + if($is_valid_video) + { + $error['no-video'] = 1; + $_SESSION['candidate_profile_video'] = $is_valid_video; + $_SESSION['candidate_profile_video_access_id'] = $access_id; + $_SESSION['videolisttags'] = $tags; + $_SESSION['Pagecontainer'] = $Pagecontainer; + $_SESSION['container_guid'] = $container_guid; + //echo $_SESSION['candidate_profile_video']; + $url = "action/videolist/addvideo?__elgg_ts={$timestamp}&__elgg_token={$token}"; + forward($url); + } + else + $error['no-video'] = 0; + } + else + { + $error['no-video'] = 0; + } + } + + + + $body = '
'; + + $body .= '
'; + $body .= elgg_view('input/hidden',array('internalname'=>'video_action', 'value'=>'add_video')); + $body .= elgg_view('input/hidden',array('internalname'=>'guid', 'value'=>$vars['guid'])); + + + $body .= '

'.$error_msg['no-video'].'
'; + } + $body .= '

'; + + $body .= '

'; + + $body .= '

'; + $body .= elgg_view('input/submit', array('internalname'=>'submit','value'=>elgg_echo('videolist:submit'))); + $body .= '
'; + $body .= '
'; + + print $body."

"; + + +?> + + diff --git a/views/default/forms/browsetube.php b/views/default/forms/browsetube.php new file mode 100644 index 000000000..50fa7b164 --- /dev/null +++ b/views/default/forms/browsetube.php @@ -0,0 +1,257 @@ + + * @copyright Prateek Choudhary + */ + +$getcontainer_guid = get_input("container"); +$container_guid = explode(":", $getcontainer_guid); +if($container_guid[0] == "group"){ + $container = $container_guid[1]; +} +else{ + $container = $getcontainer_guid; +} + $error = array( + 'no-search' => 1 + ); + $error_msg = array( + 'no-search' => "Please enter a valid search term" + ); + $browseCat = get_input('q'); + if(empty($browseCat) || !isset($browseCat)) + $browseCat = "youtube"; + $confirm_action = get_input('video_action'); + + if(isset($confirm_action) && ($confirm_action == 'search_video')) + { + if(isset($title_search) && ($title_search != '')) + $error['no-search'] = 0; + else + $error['no-search'] = 1; + } + + + //$body = '
'; + //Load youtube menu + $body .= "
"; + $body .= "
    "; + $body .= "
  • "; + $body .= "YouTube"; + $body .= "
  • "; + $body .= "
  • "; + $body .= "Metacafe"; + $body .= "
  • "; + $body .= "
  • "; + $body .= "Vimeo"; + $body .= "
  • "; + /* + $body .= "
  • "; + $body .= "Google Videos"; + $body .= "
  • "; + */ + $body .= "
"; + $body .= "
"; + + $body .= "
"; + + //$body .= "
"; + $body .= '
'; + //$body .= ""; + $body .= elgg_view('input/hidden',array('internalname'=>'video_action', 'value'=>'search_video')); + $body .= elgg_view('input/hidden',array('internalname'=>'guid', 'value'=>$vars['guid'])); + //$body .= elgg_view('input/hidden',array('internalname'=>'start_index', 'value'=>1)); + + switch($browseCat) + { + case "youtube" : + $body .= elgg_view('forms/labels/youtube'); + break; + case "metacafe" : + $body .= elgg_view('forms/labels/metacafe'); + break; + case "vimeo" : + $body .= elgg_view('forms/labels/vimeo'); + break; + case "googlevideos" : + $body .= elgg_view('forms/labels/googlevideos'); + break; + default : + $body .= elgg_view('forms/labels/youtube'); + break; + } + $body .= elgg_view('input/hidden',array('internalname'=>'page', 'value'=>$browseCat)); + $body .= '
'; + //$body .= '
'; + //$body .= '
'; + + $body .= '
'; + $body .= '
'; + $body .= '
'; + $body .= '
'; + $body .= '
'; + $body .= '
'; + + print $body."

"; + + +?> + + diff --git a/views/default/forms/labels/googlevideos.php b/views/default/forms/labels/googlevideos.php new file mode 100644 index 000000000..de263c1c9 --- /dev/null +++ b/views/default/forms/labels/googlevideos.php @@ -0,0 +1,34 @@ + + * @copyright Prateek Choudhary + */ + + $body = '

"; + $body .= "
"; + $body .= ""; + $body .= "
"; + $body .= "
"; + $body .= "   "; + if($error['no-search'] == 0) + { + $body .= '
'.$error_msg['no-search'].'
'; + } + $body .= "
"; + //$body .= "
"; + //$body .= ''; + $body .= elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('videolist:searchTubeVideos:vimeo'))); + //$body .= "
"; + $body .= "
"; + $body .= '

'; + $body .= '
Loading...
'; + print $body; +?> diff --git a/views/default/forms/labels/metacafe.php b/views/default/forms/labels/metacafe.php new file mode 100644 index 000000000..79e87d1be --- /dev/null +++ b/views/default/forms/labels/metacafe.php @@ -0,0 +1,34 @@ + + * @copyright Prateek Choudhary + */ + + $body = '

"; + $body .= "
"; + $body .= ""; + $body .= "
"; + $body .= "
"; + $body .= "   "; + if($error['no-search'] == 0) + { + $body .= '
'.$error_msg['no-search'].'
'; + } + $body .= "
"; + //$body .= "
"; + //$body .= ''; + $body .= elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('videolist:searchTubeVideos:metacafe'))); + //$body .= "
"; + $body .= "
"; + $body .= '

'; + + print $body; +?> diff --git a/views/default/forms/labels/vimeo.php b/views/default/forms/labels/vimeo.php new file mode 100644 index 000000000..e5cf21235 --- /dev/null +++ b/views/default/forms/labels/vimeo.php @@ -0,0 +1,34 @@ + + * @copyright Prateek Choudhary + */ + + $body = '

"; + $body .= "
"; + $body .= ""; + $body .= "
"; + $body .= "
"; + $body .= "   "; + if($error['no-search'] == 0) + { + $body .= '
'.$error_msg['no-search'].'
'; + } + $body .= "
"; + //$body .= "
"; + //$body .= ''; + $body .= elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('videolist:searchTubeVideos:vimeo'))); + //$body .= "
"; + $body .= "
"; + $body .= '

'; + + print $body; +?> diff --git a/views/default/forms/labels/youtube.php b/views/default/forms/labels/youtube.php new file mode 100644 index 000000000..40be100ee --- /dev/null +++ b/views/default/forms/labels/youtube.php @@ -0,0 +1,34 @@ + + * @copyright Prateek Choudhary + */ + + $body = '

"; + $body .= "
"; + $body .= ""; + $body .= "
"; + $body .= "
"; + $body .= "   "; + if($error['no-search'] == 0) + { + $body .= '
'.$error_msg['no-search'].'
'; + } + $body .= "
"; + //$body .= "
"; + //$body .= ''; + $body .= elgg_view('input/submit', array('internalname' => 'submit', 'value' => elgg_echo('videolist:searchTubeVideos'))); + //$body .= "
"; + $body .= "
"; + $body .= '

'; + + print $body; +?> diff --git a/views/default/object/videolist.php b/views/default/object/videolist.php new file mode 100644 index 000000000..23754a899 --- /dev/null +++ b/views/default/object/videolist.php @@ -0,0 +1,91 @@ + + /* YouTube/vimeo/metacafe video Object file + /* @copyright Prateek.Choudhary + /*****************************************************************************************/ + + global $CONFIG; + + $video_file = $vars['entity']; + + if(!empty($video_file)) + { + $url = $video_file->url; + $title = $video_file->title; + $video_guid = $video_file->guid; + $video_id = $video_file->video_id; + $videotype = $video_file->videotype; + $videothumbnail = $video_file->thumbnail; + $owner = $vars['entity']->getOwnerEntity(); + $friendlytime = friendly_time($vars['entity']->time_created); + + $mime = "image/html"; + $thumbnail = $videothumbnail; + $watch_URL = $vars['url']."pg/videolist/watch/".$video_guid; + if (get_input('search_viewtype') == "gallery") + { + $videodiv .= ""; + $videodiv .= "
"; + print $videodiv; + } + else if(get_input('show_viewtype') == "all") + { + $info .= '

'.$title.'

'; + $info .= "

username}\">{$owner->name} {$friendlytime}"; + $info .= "

"; + $icon = "" . elgg_view("videolist/icon", array("mimetype" => $mime, 'thumbnail' => $thumbnail, 'video_guid' => $video_guid, 'size' => 'small')) . ""; + + echo elgg_view_listing($icon, $info); + } + else + { + /* + $videodiv .= ""; + $videodiv .= "unable to fetch image"; + $videodiv .= "   Title : ".$title; + $videodiv .= "
"; + */ + //video list-entity view + $info = '

'.$title.'

'; + $info .= "

username}\">{$owner->name} {$friendlytime}"; + $info .= "

"; + $icon = "" . elgg_view("videolist/icon", array("mimetype" => $mime, 'thumbnail' => $thumbnail, 'video_guid' => $video_guid, 'size' => 'small')) . ""; + + echo elgg_view_listing($icon, $info); + } + + + } + else + { + echo "No videos were found."; + } +?> diff --git a/views/default/object/watch.php b/views/default/object/watch.php new file mode 100644 index 000000000..c33a7b988 --- /dev/null +++ b/views/default/object/watch.php @@ -0,0 +1,45 @@ + + * @copyright Prateek Choudhary + */ +$videodiv = ''; +$width = "600"; +$height = "400"; +$file = $vars['entity']; +if(isset($vars['entity'])) +{ + +$videos = get_entity($vars['entity']); +$title = $videos->title; +$url = $videos->url; +$videoid = $videos->video_id; +$videodiv = "

".$title."

"; +if($videos->videotype == "youtube"){ + $videodiv .= "
"; +} +else if($videos->videotype == "metacafe"){ + $videoid_id = $videoid; + $path = explode("/", $videos->thumbnail); + $path = array_reverse($path); + $thumbnailArray = explode(".", $path[0]); + $videoid = $videoid_id."/".$thumbnailArray[0].".swf"; + $videodiv .= "
"; + +} +else if($videos->videotype == "vimeo"){ + $videodiv .= "
"; +} +$videodiv .= "
"; +$videodiv .= elgg_view_likes($videos); +$videodiv .= elgg_view_comments($videos); +print $videodiv; + +//echo elgg_view_comments($videos); +} +?> diff --git a/views/default/river/object/videolist/annotate.php b/views/default/river/object/videolist/annotate.php new file mode 100644 index 000000000..d243c7ef3 --- /dev/null +++ b/views/default/river/object/videolist/annotate.php @@ -0,0 +1,13 @@ +getSubject(); + $object = $statement->getObject(); + + $url = "getURL()}\">{$performed_by->name}"; + $string = sprintf(elgg_echo("videolist:river:annotate"),$url) . " "; + $string .= "getURL() . "\">" . elgg_echo("videolist:river:item") . ""; + + echo $string; + +?> diff --git a/views/default/river/object/videolist/create.php b/views/default/river/object/videolist/create.php new file mode 100644 index 000000000..061d01dd5 --- /dev/null +++ b/views/default/river/object/videolist/create.php @@ -0,0 +1,18 @@ +subject_guid); // $statement->getSubject(); + $object = get_entity($vars['item']->object_guid); + $thumbnail = $object->thumbnail; + //$url = $object->getURL(); + + $url = "getURL()}\">{$performed_by->name}"; + $title = $object->title; + if(!$title) + $title = "untitled"; + $string = sprintf(elgg_echo("videolist:river:created"),$url) . " "; + $string .= elgg_echo("videolist:river:item") . " titled getURL() . "\">" . $title . ""; + $string .= "
"; + $string .= "getURL() . "\">"; + $string .= "
"; + + echo $string; \ No newline at end of file diff --git a/views/default/staticvideo/index.php b/views/default/staticvideo/index.php new file mode 100644 index 000000000..a95625f3c --- /dev/null +++ b/views/default/staticvideo/index.php @@ -0,0 +1,62 @@ + + * @copyright Prateek Choudhary + */ + + +$owner = $_SESSION['guid']; +$number = 10; +$owner_videos = get_entities("object", "videolist", $_SESSION['guid'], $number); +$videodiv = ''; +$width = "390"; +$height = "275"; +?> +
+url; + $title = $node->title; + $video_guid = $node->guid; + $video_id = $node->video_id; + $videodiv .= "
"; + $videodiv .= ""; + $videodiv .= "no video"; + $videodiv .= ""; + + $videodiv .= "
"; + $videodiv .= "
"; + $videodiv .= "Title : ".$title."
"; + $videodiv .= "
"; + + $videodiv .= "
"; + $videodiv .= elgg_view("output/confirmlink", array( + 'href' => $vars['url'] . "action/videolist/remove?video_id=" . $video_guid, + 'text' => elgg_echo('delete'), + 'confirm' => elgg_echo('deleteconfirm'), + )); + /* + $videodiv .= ""; + $videodiv .= "delete"; + $videodiv .= ""; + */ + $videodiv .= "
"; + $videodiv .= "
"; + } + print $videodiv; +} +else +{ + echo "No videos were found."; +} +?> +
+ diff --git a/views/default/videolist/css.php b/views/default/videolist/css.php new file mode 100644 index 000000000..76f23941d --- /dev/null +++ b/views/default/videolist/css.php @@ -0,0 +1,199 @@ + + * @copyright Prateek Choudhary + */ + + +?> + +.error{ +color:red; +font-weight:bold; +font-size:11px; +} +#video-list-main{ +padding:10px; +} +#videocontainer{ +width:100%; +margin-bottom:10px; +} +.search_gallery_item{ +border:0px solid #CCCCCC; +} +#videobox{ +width:98%; +text-align:center; +margin-top:10px; +} +#videoDescbox{ +width:95%; +margin:0px 5px 0px 8px; +} +#videoActionbox{ +width:90%; +margin:0px 5px 0px 8px; +float:left; +} +#videothumbnail-box{ +float:left; +width:35%; +background: #333333; +text-align:center; +padding:3px 1px 3px 0px; +} +#videotitle-box{ +width:60%; +float:left; +font-size:12px; +font-weight:bold; +text-align:left; +padding-left:5px; +color:#474B9F; +} +.title{ +font-weight:bold; +} +#profile_video_widget_container{ +margin:0px 10px 10px 10px; +padding:8px; +-moz-border-radius-topleft:8px; +-moz-border-radius-topright:8px; +-moz-border-radius-bottomleft:8px; +-moz-border-radius-bottomright:8px; +border:0px solid #C3C3C3; +background: #FFFFFF; +max-height:250px; +overflow-y:auto; +} +#profile_video_image_container{ +float:left; +width:95%; +margin:6px 2px 0px 6px; +border-bottom:1px solid #CCC; +padding-bottom:3px; +} + +#widget_container_header{ +color:#474B9F; +margin:0px 0px 5px 0px; +font-weight:bold; +font-size:13px; +} +#loadingSearch{ +width:100%; +} +#SearchContainer{ +width:100%; +} +#responseSearch{ +padding:15px; +} +#paginateSearch{ +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +padding:2px 5px 2px 0px; +text-align:right; +background:#FFF; +border:0px solid #CCC; +color:#666; +} +th{ +text-align:center; +font-weight:bold; +font-size:13px; +} +#parentTab{ +-moz-border-radius-bottomleft:8px; +-moz-border-radius-bottomright:8px; +-moz-border-radius-topleft:8px; +-moz-border-radius-topright:8px; +border-top:1px solid #CCC; +border-bottom:6px solid #CCC; +border-left:1px solid #CCC; +border-right:5px solid #CCC; +background:#FFFFFF; +margin-top:7px; +} +.tabcellDesc{ +padding:5px 5px 5px 10px; +text-align: left; +} +.tabcellText{ +padding:5px; +text-align: center; +} +.videoDisp{ +position:absolute; +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #000000; +display:none; +padding:10px; +margin-left:120px; +margin-top:-100px; +background:#FFFFFF; +z-index:300000; +} +.videolist-content{ +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #C3C3C3; +width:675px; +margin:10px 0px 10px 10px; +padding:10px; +background:#FFFFFF; +} +.tubesearch{ +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #666666; +} +#comment_area_video_title{ +padding:10px; +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #CCCCCC; +border:1px solid #CCCCCC; +background:#FFFFFF; +} +.vid-comment-widget{ +font-size:11px; +font-weight:normal; +} +.searchvideorow{ +padding:10px; +-moz-border-radius-topleft:5px; +-moz-border-radius-topright:5px; +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #CCCCCC; +} +#videosearch-tablecontainer{ +-moz-border-radius-bottomleft:5px; +-moz-border-radius-bottomright:5px; +border:1px solid #CCCCCC; +background:#FFF; +padding:10px; +} +#videosearch-interface{ +border-color:#CCCCCC; +border-style:solid; +border-width:0 1px 1px; +margin-top:-15px; +padding:15px 0 15px 20px; +} diff --git a/views/default/videolist/groupprofile_videolist.php b/views/default/videolist/groupprofile_videolist.php new file mode 100644 index 000000000..279f2af81 --- /dev/null +++ b/views/default/videolist/groupprofile_videolist.php @@ -0,0 +1,62 @@ + + * @copyright Prateek Choudhary + */ + +?> +
+

+ +num_display; + if (!$number) + $number = 5; + + //get the user's files + $videos = get_user_objects($vars['entity']->guid, "videolist", $number, 0); + + //if there are some files, go get them + if ($videos) { + + //display in list mode + echo "
"; + foreach($videos as $f){ + + $mime = $f->mimetype; + $owner = get_entity($f->getOwner()); + $numcomments = elgg_count_comments($f); + echo ""; + echo "
"; + echo ""; + echo "

" . friendly_time($f->time_created) . "

"; + echo "
"; + + } + echo "
"; + + //get a link to the users files + $users_file_url = $vars['url'] . "pg/videolist/owned/" . page_owner_entity()->username; + + echo ""; + + } else { + + echo "
" . elgg_echo("videolist:none") . "
"; + + } + +?> +
+
diff --git a/views/default/videolist/icon.php b/views/default/videolist/icon.php new file mode 100644 index 000000000..1d25329ea --- /dev/null +++ b/views/default/videolist/icon.php @@ -0,0 +1,41 @@ +wwwroot}mod/videolist/graphics/icons/Video_Icon.jpg\" border=\"0\" />"; +} +else{ + + $mime = $vars['mimetype']; + if (isset($vars['thumbnail'])) { + $thumbnail = $vars['thumbnail']; + } else { + $thumbnail = false; + } + + $size = $vars['size']; + if ($size != 'large') { + $size = 'small'; + } + + if ($thumbnail && strpos($mime, "image/")!==false) + echo ""; + else + { + if ($size == 'large') + echo ""; + else + echo "wwwroot}mod/videolist/graphics/icons/Video_Icon.jpg\" border=\"0\" />"; + } +} +?> diff --git a/views/default/videolist/notfound.php b/views/default/videolist/notfound.php new file mode 100644 index 000000000..79df22779 --- /dev/null +++ b/views/default/videolist/notfound.php @@ -0,0 +1,21 @@ + + * @copyright Curverider Ltd 2008 + * @link http://elgg.com/ + */ + +?> + +

+ +

diff --git a/views/default/videolist/videoprofile.php b/views/default/videolist/videoprofile.php new file mode 100644 index 000000000..e69de29bb diff --git a/views/default/widgets/videolist_view/edit.php b/views/default/widgets/videolist_view/edit.php new file mode 100644 index 000000000..ec5b34bae --- /dev/null +++ b/views/default/widgets/videolist_view/edit.php @@ -0,0 +1,21 @@ +

+ : + + num_display == '') $vars['entity']->num_display = 6; + ?> + +

diff --git a/views/default/widgets/videolist_view/view.php b/views/default/widgets/videolist_view/view.php new file mode 100644 index 000000000..889ee5726 --- /dev/null +++ b/views/default/widgets/videolist_view/view.php @@ -0,0 +1,58 @@ + + * @copyright Prateek Choudhary + */ + + + //the number of files to display + $number = (int) $vars['entity']->num_display; + if (!$number) + $number = 5; + + $owner = page_owner_entity(); + $owner_videos = get_entities("object", "videolist", page_owner(), $order_by="time_created desc", $limit=$number); + //echo "
"; + if ($owner_videos) { + echo '
'; + foreach($owner_videos as $videos){ + $url = $videos->url; + $title = $videos->title; + $video_id = $videos->video_id; + $videothumbnail = $videos->thumbnail; + echo '
'; + //get video cover image + echo '
'; + echo "guid."'>"; + echo ""; + echo ''; + echo '
'; + echo '
'; + echo "guid."'>"; + echo $title; + echo ''; + $numcomments = elgg_count_comments($videos); + if ($numcomments) + echo "
guid."\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")
"; + echo '
'; + echo '
'; + } + echo "
"; + echo "
"; + //get a link to the users videos + $users_video_url = $vars['url'] . "pg/videolist/owned/" . $owner->username; + echo "
"; + echo "" . elgg_echo('video:more') . ""; + echo "
"; + echo "
"; + } + else { + echo elgg_echo("album:none"); + } + +?> diff --git a/views/rss/videolist/contentwrapper.php b/views/rss/videolist/contentwrapper.php new file mode 100644 index 000000000..b967ab371 --- /dev/null +++ b/views/rss/videolist/contentwrapper.php @@ -0,0 +1,15 @@ + + * @copyright Prateek Choudhary + */ + + + echo $vars['body']; + +?> diff --git a/views/rss/videolist/videolist.php b/views/rss/videolist/videolist.php new file mode 100644 index 000000000..f88300d98 --- /dev/null +++ b/views/rss/videolist/videolist.php @@ -0,0 +1,17 @@ + + * @copyright Prateek Choudhary + */ + + if ($foreach = get_entities('object','',$vars['entity']->guid)) { + foreach($foreach as $videos) + echo elgg_view_entity($videos); + } + +?> diff --git a/watch.php b/watch.php new file mode 100644 index 000000000..6d0542a2f --- /dev/null +++ b/watch.php @@ -0,0 +1,44 @@ + + * @copyright Prateek Choudhary + */ +require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + + + // Get objects + $video_id = (int) get_input('video_id'); + + // If we can get out the video corresponding to video_id object ... + if ($videos = get_entity($video_id)) { + set_page_owner($videos->container_guid); + $videos_container = get_entity($videos->container_guid); + if($videos_container->type == "group") + set_context("groupsvideos"); + $page_owner = page_owner_entity(); + $title = sprintf(elgg_echo("videolist:home"),page_owner_entity()->name); + // Display it + $area2 = elgg_view("object/watch",array( + 'entity' => $video_id, + 'entity_owner' => $page_owner, + 'full' => true + )); + //$area2 .= elgg_view("videolist/comments", array('entity' => $videos)); + $body = elgg_view_layout("one_column_with_sidebar", $area1 . $area2); + } + else + { + // Display the 'post not found' page instead + $body = elgg_view("videolist/notfound"); + $title = elgg_echo("video:none"); + + } + // Finally draw the page + page_draw($title, $body); +?> diff --git a/world.php b/world.php new file mode 100644 index 000000000..57af731de --- /dev/null +++ b/world.php @@ -0,0 +1,38 @@ + + * @copyright Prateek Choudhary + */ +// Render the video upload page + // Load Elgg engine + require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php"); + 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']); + } + + $title = sprintf(elgg_echo("videolist:search")); + + // Get objects + $area2 = elgg_view_title($title); + set_input('show_viewtype', 'all'); + $area2 .= list_entities("object","videolist", 0, 10, $fullview=true, $viewtypetoggle=false,$pagination=true); + + //$area2 .= elgg_view("staticvideo/index"); + + set_context('videolist'); + $body = elgg_view_layout('one_column_with_sidebar',$area1. $area2); + + // Finally draw the page + page_draw($title, $body); + +?> -- cgit v1.2.3