diff options
-rw-r--r-- | actions/videolist/edit.php | 106 | ||||
-rw-r--r-- | lib/videolist.php | 135 | ||||
-rw-r--r-- | start.php | 9 |
3 files changed, 162 insertions, 88 deletions
diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php index 3aa536e4c..2ca99c1c4 100644 --- a/actions/videolist/edit.php +++ b/actions/videolist/edit.php @@ -1,40 +1,76 @@ <?php
/**
- * Elgg video edit
+ * Create or edit a video
+ *
+ * @package ElggVideolist
*/
-
-// Get variables
-$title = strip_tags(get_input("title_videourl"));
-$tags = get_input("tags");
-$access_id = (int) get_input("access_id");
-
-$guid = (int) get_input('video_guid');
-
-if (!$video = get_entity($guid)) {
- register_error(elgg_echo("videolist:noentity"));
- forward(elgg_get_site_url() . "videolist/" . $_SESSION['user']->username);
- exit;
+
+$variables = elgg_get_config('videolist');
+$input = array();
+foreach ($variables as $name => $type) {
+ $input[$name] = get_input($name);
+ if ($name == 'title') {
+ $input[$name] = strip_tags($input[$name]);
+ }
+ if ($type == 'tags') {
+ $input[$name] = string_to_tag_array($input[$name]);
+ }
+}
+
+// Get guids
+$videolist_guid = (int)get_input('videolist_guid');
+$container_guid = (int)get_input('container_guid');
+
+elgg_make_sticky_form('videolist');
+
+elgg_load_library('elgg:videolist');
+
+if (!$input['video_url']) {
+ register_error(elgg_echo('videolist:error:no_url'));
+ forward(REFERER);
+}
+
+$parsed_url = videolist_parseurl($input['video_url']);
+
+if(!$parsed) {
+ register_error(elgg_echo('videolist:error:invalid_url'));
+}
+
+if ($video_guid) {
+ $video = get_entity($video_guid);
+ if (!$video || !$video->canEdit()) {
+ register_error(elgg_echo('videolist:error:no_save'));
+ forward(REFERER);
+ }
+ $new_video = false;
+} else {
+ $video = new ElggObject();
+ $video->subtype = 'videolist_item';
+ $new_video = true;
}
-
-$result = false;
-
-$container_guid = $video->container_guid;
-$container = get_entity($container_guid);
-
-if ($video->canEdit()) {
-
- $video->access_id = $access_id;
- $video->title = $title;
-
- // Save tags
- $tags = explode(",", $tags);
- $video->tags = $tags;
- $result = $video->save();
+
+$input = array_merge($input, videolist_get_data($parsed_url));
+
+if (sizeof($input) > 0) {
+ foreach ($input as $name => $value) {
+ $video->$name = $value;
+ }
+}
+
+$video->container_guid = $container_guid;
+
+if ($video->save()) {
+
+ elgg_clear_sticky_form('videolist');
+
+ system_message(elgg_echo('videolist:saved'));
+
+ if ($new_video) {
+ add_to_river('river/object/videolist_item/create', 'create', elgg_get_logged_in_user_guid(), $video->guid);
+ }
+
+ forward($video->getURL());
+} else {
+ register_error(elgg_echo('videolist:error:no_save'));
+ forward(REFERER);
}
-
-if ($result)
- system_message(elgg_echo("videolist:editsaved"));
-else
- register_error(elgg_echo("videolist:editfailed"));
-
-forward($_SERVER['HTTP_REFERER']);
diff --git a/lib/videolist.php b/lib/videolist.php index 50f83c923..a71315027 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -1,6 +1,10 @@ <?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; } @@ -13,23 +17,28 @@ function video_youtube_parse_url($url) { } $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; } @@ -39,48 +48,76 @@ function video_metacafe_parse_url($url) { $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], + ); +} @@ -75,10 +75,11 @@ function videolist_init() { elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'profile_usericon_hook'); // Register actions - elgg_register_action("videolist/add", elgg_get_plugins_path() . "videolist/actions/add.php"); - elgg_register_action("videolist/edit", elgg_get_plugins_path() . "videolist/actions/edit.php"); - elgg_register_action("videolist/tubesearch", elgg_get_plugins_path() . "videolist/actions/tubesearch.php"); - elgg_register_action("videolist/delete", elgg_get_plugins_path() . "videolist/actions/delete.php"); + $actions_path = elgg_get_plugins_path() . "videolist/actions/videolist"; + elgg_register_action("videolist/add", "$actions_path/add.php"); + elgg_register_action("videolist/edit", "$actions_path/edit.php"); + elgg_register_action("videolist/tubesearch", "$actions_path/tubesearch.php"); + elgg_register_action("videolist/delete", "$actions_path/delete.php"); } /** |