<?php\r
/**\r
- * Elgg video edit\r
+ * Create or edit a video\r
+ *\r
+ * @package ElggVideolist\r
*/\r
- \r
-// Get variables\r
-$title = strip_tags(get_input("title_videourl"));\r
-$tags = get_input("tags");\r
-$access_id = (int) get_input("access_id");\r
- \r
-$guid = (int) get_input('video_guid');\r
-\r
-if (!$video = get_entity($guid)) {\r
- register_error(elgg_echo("videolist:noentity"));\r
- forward(elgg_get_site_url() . "videolist/" . $_SESSION['user']->username);\r
- exit;\r
+\r
+$variables = elgg_get_config('videolist');\r
+$input = array();\r
+foreach ($variables as $name => $type) {\r
+ $input[$name] = get_input($name);\r
+ if ($name == 'title') {\r
+ $input[$name] = strip_tags($input[$name]);\r
+ }\r
+ if ($type == 'tags') {\r
+ $input[$name] = string_to_tag_array($input[$name]);\r
+ }\r
+}\r
+\r
+// Get guids\r
+$videolist_guid = (int)get_input('videolist_guid');\r
+$container_guid = (int)get_input('container_guid');\r
+\r
+elgg_make_sticky_form('videolist');\r
+\r
+elgg_load_library('elgg:videolist');\r
+\r
+if (!$input['video_url']) {\r
+ register_error(elgg_echo('videolist:error:no_url'));\r
+ forward(REFERER);\r
+}\r
+\r
+$parsed_url = videolist_parseurl($input['video_url']);\r
+\r
+if(!$parsed) {\r
+ register_error(elgg_echo('videolist:error:invalid_url'));\r
+}\r
+\r
+if ($video_guid) {\r
+ $video = get_entity($video_guid);\r
+ if (!$video || !$video->canEdit()) {\r
+ register_error(elgg_echo('videolist:error:no_save'));\r
+ forward(REFERER);\r
+ }\r
+ $new_video = false;\r
+} else {\r
+ $video = new ElggObject();\r
+ $video->subtype = 'videolist_item';\r
+ $new_video = true;\r
}\r
- \r
-$result = false;\r
-\r
-$container_guid = $video->container_guid;\r
-$container = get_entity($container_guid);\r
- \r
-if ($video->canEdit()) {\r
- \r
- $video->access_id = $access_id;\r
- $video->title = $title;\r
- \r
- // Save tags\r
- $tags = explode(",", $tags);\r
- $video->tags = $tags;\r
- $result = $video->save();\r
+\r
+$input = array_merge($input, videolist_get_data($parsed_url));\r
+\r
+if (sizeof($input) > 0) {\r
+ foreach ($input as $name => $value) {\r
+ $video->$name = $value;\r
+ }\r
+}\r
+\r
+$video->container_guid = $container_guid;\r
+\r
+if ($video->save()) {\r
+\r
+ elgg_clear_sticky_form('videolist');\r
+\r
+ system_message(elgg_echo('videolist:saved'));\r
+\r
+ if ($new_video) {\r
+ add_to_river('river/object/videolist_item/create', 'create', elgg_get_logged_in_user_guid(), $video->guid);\r
+ }\r
+\r
+ forward($video->getURL());\r
+} else {\r
+ register_error(elgg_echo('videolist:error:no_save'));\r
+ forward(REFERER);\r
}\r
- \r
-if ($result)\r
- system_message(elgg_echo("videolist:editsaved"));\r
-else\r
- register_error(elgg_echo("videolist:editfailed"));\r
- \r
-forward($_SERVER['HTTP_REFERER']);\r
<?php
-function video_youtube_parse_url($url) {
+define('YOUTUBE', 1);
+define('VIMEO', 2);
+define('METACAFE', 3);
+
+function videolist_parseurl_youtube($url) {
if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(youtube\.com\/)(.*)/', $url, $matches)) {
return false;
}
}
$hash = $matches[2];
- return $domain . 'v/' . $hash;
+
+ return array(
+ 'domain' => $domain,
+ 'videoid' => $hash,
+ );
}
-function video_vimeo_parse_url($url) {
- if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(vimeo\.com\/)(.*)/', $url, $matches)) {
+function videolist_parseurl_vimeo($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];
+ $hash = $matches[4];
- return $domain . '/' . $hash;
+ return array(
+ 'domain' => $domain,
+ 'videoid' => $hash,
+ );
}
-function video_metacafe_parse_url($url) {
+function videolist_parseurl_metacafe($url) {
if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(metacafe\.com\/)(.*)/', $url, $matches)) {
return false;
}
$hash = $matches[2];
- return $domain . '/' . $hash;
+ return array(
+ 'domain' => $domain,
+ 'videoid' => $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;
- $url = "action/videolist/add?__elgg_ts={$timestamp}&__elgg_token={$token}";
- forward($url);
- }
- else
- $error['no-video'] = 0;
+function videolist_parseurl($url){
+ if ($parsed = videolist_parseurl_youtube($url)){
+ $parsed['site'] = YOUTUBE;
+ return $parsed;
+ } elseif ($parsed = videolist_parseurl_vimeo($url)) {
+ $parsed['site'] = VIMEO;
+ return $parsed;
+ } elseif ($parsed = videolist_parseurl_metacafe($url)) {
+ $parsed['site'] = METACAFE;
+ return $parsed;
+ } else {
+ return array();
}
- else {
- $error['no-video'] = 0;
+}
+
+function videolist_get_data($video_parsed_url) {
+ $site = $video_parsed_url['site'];
+ $videoid = $video_parsed_url['videoid'];
+ switch($site){
+ case YOUTUBE: return videolist_get_data_youtube($videoid);
+ case VIMEO: return videolist_get_data_vimeo($videoid);
+ case METACAFE: return videolist_get_data_metacafe($videoid);
+ default: return array();
}
}
+
+
+function videolist_get_data_youtube($videoid){
+ $buffer = file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$videoid);
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => sanitize_string($xml->title),
+ 'description' => sanitize_string($xml->content),
+ 'icon' => "http://img.youtube.com/vi/$videoid/default.jpg",
+ );
+}
+
+function videolist_get_data_vimeo($videoid){
+ $buffer = file_get_contents("http://vimeo.com/api/v2/video/$videoid.xml");
+ $xml = new SimpleXMLElement($buffer);
+
+ $videos = $xml->children();
+ $video = $videos[0];
+
+ return array(
+ 'title' => sanitize_string($video->title),
+ 'description' => sanitize_string($video->description),
+ 'icon' => sanitize_string($video->thumbnail_medium),
+ );
+}
+
+function videolist_get_data_metacafe($videoid){ //FIXME
+ $buffer = file_get_contents("http://www.metacafe.com/api/item/$videoid");
+ $xml = new SimpleXMLElement($buffer);
+
+ $children = $xml->children();
+ $channel = $children[1];
+
+ preg_match('/<img[^>]+src[\\s=\'"]+([^"\'>\\s]+)/is', $channel->description, $matches);
+
+ return array(
+ 'title' => $channel->title,
+ 'description' => $channel->description,
+ 'icon' => $matches[1],
+ );
+}