Fixed dailymotion import issues
[embedvideo/.git] / ItemAddEmbedVideo.inc
index 4e16f42b64a17da624bdd5cc76ed2447a935a551..2ba1adf30853a3884883c3e4d30ccdf289c697da 100644 (file)
@@ -92,7 +92,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $watermarkAlignment = $this->getParameter($ItemAddEmbedVideo, 'watermarkAlignment', "left");
           $wordwrapSummary = $this->getParameter($ItemAddEmbedVideo, 'wordwrapSummary', "0");
           $wordwrapDescription = $this->getParameter($ItemAddEmbedVideo, 'wordwrapDescription', "0");
-
+           $allowFullScreen = $this->getParameter($ItemAddEmbedVideo, 'allowFullScreen', "false");
+          $centerVideo = $this->getParameter($ItemAddEmbedVideo, 'centerVideo', "false");
+          
           /* Print our stored/set Parameters */
           if(!strcmp($debugOutput,"true")) {
             print "\n<hr>";
@@ -112,6 +114,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
             print "watermarkAlignment=$watermarkAlignment<br>\n";
             print "wordwrapSummary=$wordwrapSummary<br>\n";
             print "wordwrapDescription=$wordwrapDescription<br>\n";
+            print "allowFullScreen=$allowFullScreen<br>\n";
+            print "centerVideo=$centerVideo\n";
             print "<hr>\n";
           }
 
@@ -163,6 +167,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 
           /* vimeo */
           $vimeoUrlPattern="vimeo.com";
+
+          /* animoto */
+          $animotoUrlPattern="animoto.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -175,8 +182,12 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $unsupported_url=0;
           
           /* Store the passed URL in a shorter local variable */
+          /* Strip trailing whitespace in the url, this will cause problems later */
           $url = $form['webPage']['URL'];
-
+           if(preg_match("/(.*?)\s+/",$url,$matches)) {
+            $url = $matches[1];
+          }
+          
           /*
            *****************************
            * Embed a Youtube Video
@@ -203,11 +214,15 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                 /* Handle the high quality format information */
                 if(preg_match("/fmt=(\d+)/",$extra_params,$matches)) {
                   $extra_params="&ap=%2526fmt%3D".$matches[1];
+                  if(!strcmp($matches[1],"22")) {
+                     //$youtubeWidth=1280;
+                     //$youtubeHeight=720;
+                   }
                 }
               }
                       
               /* Youtube api feed */
-              $feed = $youtubeApiUrl."videos/$video_id";
+              $feed = $youtubeApiUrl."videos/".urlencode($video_id);
 
               if(!strcmp($debugOutput,"true")) {
                   print "\n<h2>Youtube URL Parsing Results</h2>";
@@ -283,15 +298,26 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                 $youtubeShowRelatedStr="&rel=0";
               }
 
+              /* Determine if the video should show related videos or not based on the youtubeShowRelated parameter */
+              $fullScreenStr="";
+              $fullScreenParamStr1="";
+              $fullScreenParamStr2="";
+              if(!strcmp($allowFullScreen,"true")) {
+                $fullScreenStr="&fs=1";
+                $fullScreenParamStr1="<param name=\"allowFullScreen\" value=\"true\"></param>";
+                $fullScreenParamStr2=" allowfullscreen=\"true\"";
+              }
+
               /* Format the description to hold a reference to the embedded video */
               $description = '<object width="'.$width.'" height="'.$height.'">';
               $description.= '<param name="movie" ';
               $description.= 'value="http://www.youtube.com/v/'.$video_id.$extra_params.'"></param>';
               $description.= '<param name="wmode" value="transparent"></param>';
+              $description.= $fullScreenParamStr1;
               $description.= '<embed src="http://www.youtube.com/v/';
-              $description.= $video_id.$extra_params.$autoStartStr.$youtubeShowRelatedStr;
+              $description.= $video_id.$extra_params.$autoStartStr.$youtubeShowRelatedStr.$fullScreenStr;
               $description.= '" type="application/x-shockwave-flash" wmode="transparent" ';
-              $description.= 'width="'.$width.'" height="'.$height.'"></embed></object>';
+              $description.= 'width="'.$width.'" height="'.$height.'"'.$fullScreenParamStr2.'></embed></object>';
 
           /*
            **********************************
@@ -331,12 +357,13 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Extract the thumbnail URL from the webpage contents */
-              preg_match('/thumbnail: \'(http:\/\/.*?\/ThumbnailServer2.+?)\'/i',
+              preg_match('/\'.+?thumbnail.+?(http:\/\/.*?\/ThumbnailServer2.+?)\'/i',
                          $contents, $matches);
               $thumbnail=$matches[1];
               $thumbnail=preg_replace("/\\\\x26/","&",$thumbnail);
               $thumbnail=preg_replace("/\\\\x3d/","=",$thumbnail);
-
+              $thumbnail=urldecode($thumbnail);
+              
               /* Determine what our width and height should be based on our useRemoteSize parameter */
               if(!strcmp($useRemoteSize,"true")) {
                 $width = $googleWidth;
@@ -462,7 +489,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            **********************************
            * Embed a Revver Video
            **********************************
-           * TODO: The autoStart parameter doesn't work with the yahoo video player
             */
           } else if(preg_match("/$revverUrlPattern/",$url)) {
 
@@ -520,7 +546,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            **********************************
            * Embed a DailyMotion Video
            **********************************
-            * TODO: The autoStart parameter doesn't work with the yahoo video player
             */
           } else if(preg_match("/$dailymotionUrlPattern/",$url)) {
             
@@ -553,7 +578,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $thumbnail=$dailymotionThumbnailUrl.$item_id;
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/<textarea id="video_player_embed_code_text".+?>(.+?)<\/textarea>/', $contents, $matches)) { 
+              if(preg_match('/embed code:.+? value="(.+?)" /', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -779,7 +804,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $title=$matches[1];
 
               /* Extract the thumbnail URL from the webpage contents */
-              preg_match('/"videothumbnail" href="(.+?)"/i',
+              preg_match('/"og:image" content="(.+?)"/i',
                          $contents, $matches);
               $thumbnail=$matches[1];
 
@@ -810,7 +835,70 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $description.= 'type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"';
               $description.= 'width="'.$width.'" height="'.$height.'">';
               $description.= '</embed></object>';
-                              
+
+          /*
+           **********************************
+           * Embed an Animoto Video
+           **********************************
+            */
+          } else if(preg_match("/$animotoUrlPattern/",$url)) {
+            
+              /* Make sure we can extract a itemID */
+              if(preg_match("/\/play\/(.+)/",$url,$matches)) {
+                  $item_id = $matches[1];
+                  $item_id=preg_replace("/\/$/","",$item_id);
+              } else {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
+                               "Unable to extract item id from url: $url"),null,null);
+              }
+
+              /* Grab the contents of the webpage used to display the video */
+              list ($successfullyCopied, $contents, $response, $headers) =
+                GalleryCoreApi::fetchWebPage($url, $extraHeaders);
+              if (!$successfullyCopied) {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                               "Unable to get video information at url: $url - $response"),NULL,NULL);
+              }
+
+              /* Extract the embed video xml page from the webpage contents */
+              if(preg_match('/type="text\/xml\+oembed" href="(.+?)"/', $contents, $matches)) { 
+                $xml_url=$matches[1];
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                                                   "Unable to extract xml information from url: $url"),NULL,NULL);
+              }
+
+              /* Get the xml page contents */
+              list ($successfullyCopied, $contents, $response, $headers) =
+                GalleryCoreApi::fetchWebPage($xml_url, $extraHeaders);
+              if (!$successfullyCopied) {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                               "Unable to get video information at url: $xml_url - $response"),NULL,NULL);
+              }
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<title>(.+?)<\/title>/i', $contents, $matches);
+              $title=htmlentities($matches[1], ENT_QUOTES, "UTF-8");
+              
+              /* Extract the thumbnail from the webpage contents */
+              preg_match('/<thumbnail_url>(.+?)<\/thumbnail_url>/i', $contents, $matches);
+              $thumbnail=$matches[1];
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/<html>(.+?)<\/html>/ism', $contents, $matches)) { 
+                $description=$matches[1];
+                $description=preg_replace("/&quot;/","'",$description);
+                $description=preg_replace("/&lt;/","<",$description);
+                $description=preg_replace("/&gth;/",">",$description);
+                $description=preg_replace("/\\\\\"/","\"",$description);
+                if(!strcmp($useRemoteSize,"false")) {
+                  $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
+                  $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
+                }
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                       "Unable to extract embedded video information from url: $url"),NULL,NULL);
+              }
           /*
            **********************************
            * Embed a remote .swf file
@@ -1070,6 +1158,11 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           
           /* Tack on the summary to the end of the description */
           $description.= "<br>$description_summary";
+
+          /* Add centering tags to the description if requested */
+          if(!strcmp($centerVideo,"true")) {
+            $description = "<center>" . $description . "</center>";
+          }
           
           /* General debug output */
           if(!strcmp($debugOutput,"true")) {