Incremented version number
[embedvideo/.git] / ItemAddEmbedVideo.inc
index b2a4539dcd45e107c56f12fda9fee21381eb3462..8049610d866fd38fdeae129938dea84a40d126d0 100644 (file)
@@ -92,7 +92,8 @@ 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");
+          
           /* Print our stored/set Parameters */
           if(!strcmp($debugOutput,"true")) {
             print "\n<hr>";
@@ -112,13 +113,14 @@ 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 "<hr>\n";
           }
 
           /* Store other string constants we'll use later */
          
           /* youtube */
-          $youtubeUrlPattern="youtube.com";
+          $youtubeUrlPattern="youtube";
           $youtubeApiUrl="http://gdata.youtube.com/feeds/api/";
           $youtubeThumbnailUrl="http://img.youtube.com/vi/";
           /* We can't extract the server size from youtube */
@@ -126,43 +128,43 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $youtubeHeight="350";
 
           /* google */
-          $googleUrlPattern="video.google.com";
+          $googleUrlPattern="video.google";
           $googlePlayer="http://video.google.com/googleplayer.swf";
           /* We can't extract the server size from google video */
           $googleWidth="400";
           $googleHeight="326";
           
           /* yahoo */
-          $yahooUrlPattern="video.yahoo.com";
+          $yahooUrlPattern="video.yahoo";
           $yahooThumbnailUrl="http://thmg01.video.search.yahoo.com/image/";
           
           /* metacafe */
-          $metacafeUrlPattern="metacafe.com";
+          $metacafeUrlPattern="metacafe";
           $metacafeThumbnailUrl="http://www.metacafe.com/thumb/";
 
           /* revver */
-          $revverUrlPattern="revver.com";
+          $revverUrlPattern="revver";
           $revverThumbnailUrl="http://frame.revver.com/frame/120x90/";
 
           /* dailymotion */
-          $dailymotionUrlPattern="dailymotion.com";
+          $dailymotionUrlPattern="dailymotion";
           $dailymotionThumbnailUrl="http://www.dailymotion.com/thumbnail/160x120/video/";
 
           /* divshare */
-          $divshareUrlPattern="divshare.com";
+          $divshareUrlPattern="divshare";
           $divshareThumbnailUrl="http://www.divshare.com/direct/video_thumb/";
 
           /* stickam */
-          $stickamUrlPattern="stickam.com";
+          $stickamUrlPattern="stickam";
           $stickamThumbnailUrl="http://static.stickam.com/";
 
           /* myspace */
-          $myspaceUrlPattern="vids.myspace.com";
-          $myspaceUrlPattern2="myspacetv.com";
+          $myspaceUrlPattern="vids.myspace";
+          $myspaceUrlPattern2="myspacetv";
           $myspaceThumbnailUrl="http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID=";
 
           /* vimeo */
-          $vimeoUrlPattern="www.vimeo.com";
+          $vimeoUrlPattern="vimeo.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -175,8 +177,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
@@ -191,6 +197,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $extra_params = $matches[2];
               } else if (preg_match("/watch\?v=(.*)/",$url,$matches)) {
                   $video_id = $matches[1];
+              } else if (preg_match("/v\/(.*)/",$url,$matches)) {
+                  $video_id = $matches[1];
               } else {
                   return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
                                "Unable to extract video id from url: $url"),null,null);
@@ -281,15 +289,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>';
 
           /*
            **********************************
@@ -329,12 +348,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;
@@ -370,7 +390,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract vid id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -420,7 +440,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -473,7 +493,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -531,7 +551,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -551,7 +571,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('/<.+? value="(.+?)" class=".+?" id="video_player_embed_code_text" \/>/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -581,7 +601,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -630,7 +650,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract item id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               $url=preg_replace("/&amp;/","&",$url);
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
@@ -658,7 +678,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/input type.+?'.$item_id.'.+?value="(.+?)"/', $contents, $matches)) { 
+              if(preg_match('/readonly value="(.+?)"/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -688,7 +708,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract video id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -715,12 +735,21 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               if(preg_match('/thumbnail url="(.+?)"/',$video_info, $matches)) {
                 $thumbnail = $matches[1];
               } else {
-                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
-                       "Unable to extract thumbnail information from url: $url"),NULL,NULL);
+                 /*
+                  * Set the thumbnail to some generic jpg image,
+                  * since we can't extract it from the site.
+                  * If no parameter is set, set it to a default value.
+                  */
+                if(preg_match("/\w+/", $flvThumbnail)) {
+                  $thumbnail = $flvThumbnail;
+                } else {
+                  $thumbnail = $gallery2_url.$gallery2_flv_thumbnail;
+                }
               }
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/(&lt;embed src.+?\/embed&gt;)/', $contents, $matches)) { 
+              if(preg_match('/(&lt;embed src.+?\/embed&gt;)/', $contents, $matches) ||
+                 preg_match('/(&lt;embed src.+?\/object&gt;)/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -749,7 +778,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                "Unable to extract video id from url: $url"),null,null);
               }
 
-              /* Grab the contents of the webpage used to display the video on video.google.com */
+              /* Grab the contents of the webpage used to display the video */
               list ($successfullyCopied, $contents, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($url, $extraHeaders);
               if (!$successfullyCopied) {
@@ -787,18 +816,19 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Format the description to hold a reference to the embedded video */
-              $description = '<object type="application/x-shockwave-flash" width="'.$width.'" height="'.$height.'"';
-              $description.= 'data="http://www.vimeo.com/moogaloop.swf?clip_id='.$video_id;
-              $description.= '&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1'.$autoStartStr;
-              $description.= '&amp;show_byline=1&amp;show_portrait=0&amp;color=">';
-              $description.= '<param name="quality" value="best" />';
+              $description = '<object width="'.$width.'" height="'.$height.'">';
               $description.= '<param name="allowfullscreen" value="true" />';
-              $description.= '<param name="scale" value="showAll" />';
-              $description.= '<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id='.$video_id;
-              $description.= '&amp;server=www.vimeo.com&amp;fullscreen=1&amp;show_title=1'.$autoStartStr;
-              $description.= '&amp;show_byline=1&amp;show_portrait=0&amp;color=" />';
-              $description.= '</object>';
-              
+              $description.= '<param name="allowscriptaccess" value="always" />';
+              $description.= '<param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id='.$video_id;
+              $description.= '&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;'.$autoStartStr;
+              $description.= 'show_portrait=0&amp;color=&amp;fullscreen=1"/ >';
+              $description.= '<embed src="http://vimeo.com/moogaloop.swf?clip_id='.$video_id;
+              $description.= '&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;'.$autoStartStr;
+              $description.= 'show_portrait=0&amp;color=&amp;fullscreen=1"';
+              $description.= 'type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"';
+              $description.= 'width="'.$width.'" height="'.$height.'">';
+              $description.= '</embed></object>';
+                              
           /*
            **********************************
            * Embed a remote .swf file
@@ -841,11 +871,12 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               
           /*
            **********************************
-           * Embed a remote .flv file
+           * Embed a remote .flv or .mp4 file
            **********************************
             */
-          } else if(preg_match("/.*\/(.+?)\.flv/i",$url,$matches)) {
-
+          } else if(preg_match("/.*\/(.+?)\.flv/i",$url,$matches) ||
+                    preg_match("/.*\/(.+?)\.mp4/i",$url,$matches)) {
+            
               /* Set the title and summary to the name of the file */
               $title = $matches[1];
               $summary = $matches[1];
@@ -1011,7 +1042,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            */   
           if($unsupported_url == 1) {
               return array(GalleryCoreApi::error(ERROR_UNSUPPORTED_FILE_TYPE,__FILE__,__LINE__,
-                           "Unable to embed video from: $url"),null,null);
+                           "The URL you have supplied is unsupported (check the list of supported URLs, they must match exactly). You tried to embed a video from this url: $url"),null,null);
           }