Revved module version to 1.0.9
[embedvideo/.git] / ItemAddEmbedVideo.inc
index 319a98efc03848c0bd699d75a584c0d7585d8b87..0e277a490427e598fda49ef8a32c2473ca12118b 100644 (file)
@@ -34,7 +34,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
    * @see ItemAddPlugin::handleRequest
    */
  function handleRequest($form, &$item) {
-   global $gallery;
+   global $gallery, $url;
     
    $status = $error = array();
    
@@ -90,6 +90,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $watermarkImage = $this->getParameter($ItemAddEmbedVideo, 'watermarkImage', "");
           $watermarkVideos = $this->getParameter($ItemAddEmbedVideo, 'watermarkVideos', "false");
           $watermarkAlignment = $this->getParameter($ItemAddEmbedVideo, 'watermarkAlignment', "left");
+          $wordwrapSummary = $this->getParameter($ItemAddEmbedVideo, 'wordwrapSummary', "0");
+          $wordwrapDescription = $this->getParameter($ItemAddEmbedVideo, 'wordwrapDescription', "0");
 
           /* Print our stored/set Parameters */
           if(!strcmp($debugOutput,"true")) {
@@ -109,6 +111,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
             print "watermarkVideos=$watermarkVideos<br>\n";
             print "watermarkImage=$watermarkImage<br>\n";
             print "watermarkAlignment=$watermarkAlignment<br>\n";
+            print "wordwrapSummary=$wordwrapSummary<br>\n";
+            print "wordwrapDescription=$wordwrapDescription<br>\n";
             print "<hr>\n";
           }
 
@@ -148,6 +152,18 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           /* divshare */
           $divshareUrlPattern="divshare.com";
           $divshareThumbnailUrl="http://www.divshare.com/direct/video_thumb/";
+
+          /* stickam */
+          $stickamUrlPattern="stickam.com";
+          $stickamThumbnailUrl="http://static.stickam.com/";
+
+          /* myspace */
+          $myspaceUrlPattern="vids.myspace.com";
+          $myspaceUrlPattern2="myspacetv.com";
+          $myspaceThumbnailUrl="http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID=";
+
+          /* vimeo */
+          $vimeoUrlPattern="www.vimeo.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -165,14 +181,33 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            *****************************
            */
           if(preg_match("/$youtubeUrlPattern/",$url)) {
-
+            
               /* Make sure we can find a video_id in the URL */
-              if(preg_match("/watch\?v=(.*)/",$url,$matches)) {
+              $extra_params = "";
+              if(preg_match("/watch\?v=(.*?)(&\S+=\S+)/",$url,$matches)) {
+                  $video_id = $matches[1];
+                  $extra_params = $matches[2];
+              } else if (preg_match("/watch\?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);
               }
+
+              /* If extra params were given, handle them here */
+              if(strcmp($extra_params,"")) {
+                /* Handle the HD format information */
+                if(preg_match("/fmt=(\d+)/",$extra_params,$matches)) {
+                  $extra_params="&ap=%2526fmt%3D".$matches[1];
+                }
+              }
+              
+              if(!strcmp($debugOutput,"true")) {
+                  print "<h2>URL Parsing Results</h2>";
+                  print "video_id: $video_id<br>";
+                  print "extra_embed_params: $extra_params<br>";
+                   print "<hr>";
+              }
               
               /* If we have a valid youtube developer id, use that to get information about the video */
               /* Otherwise, just parse it directly from the HTML page */
@@ -222,12 +257,12 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/&lt;/","<",$description);
                   $description=preg_replace("/&gt;/",">",$description);
                   $description=preg_replace("/&amp;/","&",$description);
-                  $description=preg_replace("/&rel=1/",$autoStartStr.$youtubeShowRelatedStr,$description);
+                  $description=preg_replace("/$video_id/",$video_id.$autoStartStr.$youtubeShowRelatedStr,$description);
+                  $description=preg_replace("/$video_id/",$video_id.$extra_params,$description);
                   if(!strcmp($useRemoteSize,"false")) {                   
                     $description=preg_replace("/width='\d+'/","width='".$width."'",$description);
                     $description=preg_replace("/height='\d+'/","height='".$height."'",$description);
                   }
-                  $description.= "<br>$summary";
                 } else {
                   return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                          "Unable to extract embedded video information from url: $url"),NULL,NULL);
@@ -301,13 +336,12 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                 /* 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.'"></param>';
+                $description.= 'value="http://www.youtube.com/v/'.$video_id.$extra_params.'"></param>';
                 $description.= '<param name="wmode" value="transparent"></param>';
                 $description.= '<embed src="http://www.youtube.com/v/';
-                $description.= $video_id.$autoStartStr.$youtubeShowRelatedStr;
+                $description.= $video_id.$extra_params.$autoStartStr.$youtubeShowRelatedStr;
                 $description.= '" type="application/x-shockwave-flash" wmode="transparent" ';
                 $description.= 'width="'.$width.'" height="'.$height.'"></embed></object>';
-                $description.= "<br>$summary";
               }
           /*
            **********************************
@@ -370,7 +404,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $description.= 'type="application/x-shockwave-flash" ';
               $description.= 'src="'.$googlePlayer.'?docId='.$doc_id.$autoStartStr.'" flashvars=""> ';
               $description.= '</embed>';
-              $description.= "<br>$summary";
 
           /*
            **********************************
@@ -418,7 +451,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/width='\d+'/","width='".$width."'",$description);
                   $description=preg_replace("/height='\d+'/","height='".$height."'",$description);
                 }
-                $description.= "<br>$summary";
               } else {
                 return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                        "Unable to extract embedded video information from url: $url"),NULL,NULL);
@@ -470,7 +502,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/\.swf/",".swf?playerVars=autoPlay=yes",$description);
                 }
                 $description.= "</embed>";
-                $description.= "<br>$summary";
               } else {
                 return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                        "Unable to extract embedded video information from url: $url"),NULL,NULL);
@@ -529,7 +560,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/$height/",$height.";autoplay:true",$description);
                 }
                 $description.= ">";
-                $description.= "<br>$summary";
               } else {
                 return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                        "Unable to extract embedded video information from url: $url"),NULL,NULL);
@@ -561,18 +591,18 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Extract the summary from the webpage contents */
-              preg_match('/<meta name="description" content="(.+?)" \/>/i', $contents, $matches);
+              preg_match('/<div class="description\s+foreground">(.+?)<\/div>/i', $contents, $matches);
               $summary=$matches[1];
 
               /* Extract the title from the webpage contents */
               preg_match('/<meta name="title" content="Dailymotion : (.+?)" \/>/i', $contents, $matches);
-              $title=$matches[1];             
+              $title=htmlentities($matches[1], ENT_QUOTES, "UTF-8");
               
               /* Build the thumbnail URL from the item_id */
               $thumbnail=$dailymotionThumbnailUrl.$item_id;
 
               /* Format the description to hold a reference to the embedded video */
-              if(preg_match('/Embeddable Player:.+?value="(.+?)"/', $contents, $matches)) { 
+              if(preg_match('/<textarea id="video_player_embed_code_text".+?>(.+?)<\/textarea>/', $contents, $matches)) { 
                 $description=$matches[1];
                 $description=preg_replace("/&quot;/","'",$description);
                 $description=preg_replace("/&lt;/","<",$description);
@@ -581,7 +611,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
                   $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
                 }
-                $description.= "<br>$summary";
               } else {
                 return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                        "Unable to extract embedded video information from url: $url"),NULL,NULL);
@@ -631,11 +660,195 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
                   $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
                 }
-                $description.= "<br>$summary";
               } else {
                 return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
                        "Unable to extract embedded video information from url: $url"),NULL,NULL);
               }
+
+          /*
+           **********************************
+           * Embed a StickAm Video
+           **********************************
+            */
+          } else if(preg_match("/$stickamUrlPattern/",$url)) {
+
+              /* Make sure we can extract a itemID */
+              if(preg_match("/mId=(.+)/",$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 on video.google.com */
+              $url=preg_replace("/&amp;/","&",$url);
+              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 summary from the webpage contents */
+              preg_match('/<meta name="description" content="(.+?)"\/>/i', $contents, $matches);
+              $summary=$matches[1];
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<meta name="title" content="(.+?)">/i', $contents, $matches);
+              $title=$matches[1];             
+              
+              /* Build the thumbnail URL from the item_id */
+              if(preg_match('/movieName=(.+?)&userId=/i', $contents, $matches)) { 
+                $thumbnail_url=$matches[1];
+                $thumbnail_url=preg_replace("/%2F/","/",$thumbnail_url);
+                $thumbnail=$stickamThumbnailUrl.$thumbnail_url.".jpg";
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                       "Unable to extract thumbnail from url: $url"),NULL,NULL);
+              }
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/input type.+?'.$item_id.'.+?value="(.+?)"/', $contents, $matches)) { 
+                $description=$matches[1];
+                $description=preg_replace("/&quot;/","'",$description);
+                $description=preg_replace("/&lt;/","<",$description);
+                $description=preg_replace("/&gt;/",">",$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 Myspace Video
+           **********************************
+            */
+          } else if(preg_match("/($myspaceUrlPattern|$myspaceUrlPattern2)/",$url)) {
+
+              /* Make sure we can extract a itemID */
+              if(preg_match("/videoid=(.+)/i",$url,$matches)) {
+                  $video_id = $matches[1];
+                  $video_id=preg_replace("/\/$/","",$video_id);
+              } else {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
+                               "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 */
+              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 summary from the webpage contents */
+              preg_match('/class="description" id="vid_description">(.+?)<\/div>/i', $contents, $matches);
+              $summary=$matches[1];
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<h1>(.+?)<\/h1>/i', $contents, $matches);
+              $title=$matches[1];             
+              
+              /* Build the thumbnail URL from the item_id */
+              $video_info_url=$myspaceThumbnailUrl.$video_id;
+              list ($successfullyCopied, $video_info, $response, $headers) =
+                GalleryCoreApi::fetchWebPage($video_info_url, $extraHeaders);
+              if (!$successfullyCopied) {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                               "Unable to get video information at url: $url - $response"),NULL,NULL);
+              }
+              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);
+              }
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/(&lt;embed src.+?\/embed&gt;)/', $contents, $matches)) { 
+                $description=$matches[1];
+                $description=preg_replace("/&quot;/","'",$description);
+                $description=preg_replace("/&lt;/","<",$description);
+                $description=preg_replace("/&gt;/",">",$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 Vimeo Video
+           **********************************
+            */
+          } else if(preg_match("/$vimeoUrlPattern/",$url)) {
+
+              /* Make sure we can extract a docID */
+              if(preg_match("/$vimeoUrlPattern\/(.*)/",$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);
+              }
+
+              /* Grab the contents of the webpage used to display the video on video.google.com */
+              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 summary from the webpage contents */
+              preg_match('/<meta name="description" content="(.+?)"/i',
+                         $contents, $matches);
+              $summary=$matches[1];
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<meta name="title" content="(.+?)"/i',
+                         $contents, $matches);
+              $title=$matches[1];
+
+              /* Extract the thumbnail URL from the webpage contents */
+              preg_match('/"videothumbnail" href="(.+?)"/i',
+                         $contents, $matches);
+              $thumbnail=$matches[1];
+
+              /* Determine what our width and height should be based on our useRemoteSize parameter */
+              if(!strcmp($useRemoteSize,"true")) {
+                preg_match('/id="vimeo_player_'.$video_id.'".+?style="width:(\d+)px;height:(\d+)px;"/i',
+                           $contents, $matches);
+                $width = $matches[1];
+                $height = $matches[2];
+              }
+
+              /* Determine if the video should autoplay or not based on the autoStart parameter */
+              $autoStartStr="";
+              if(!strcmp($autoStart,"true")) {
+                $autoStartStr="&amp;autoplay=1";
+              }
+
+              /* 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.= '<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>';
               
           /*
            **********************************
@@ -825,13 +1038,27 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $fileName = preg_replace("/'/","",$fileName);
           $fileName = preg_replace("/\"/","",$fileName);
           $fileName = preg_replace("/&#\d+;/","",$fileName);
+
+          /* Wordwrap the description or summary as appropriate */
+          $description_summary = $summary;
+
+          if(strcmp($wordwrapSummary,"0")) {
+            $summary = wordwrap($summary,$wordwrapSummary,"<br>",FALSE);
+          }
+
+          if(strcmp($wordwrapDescription,"0")) {
+            $description_summary = wordwrap($description_summary,$wordwrapDescription,"<br>",FALSE);
+          }
+          
+          /* Tack on the summary to the end of the description */
+          $description.= "<br>$description_summary";
           
           /* General debug output */
           if(!strcmp($debugOutput,"true")) {
               print "\n<h2>Item Parameters</h2>\n";
               print "url: $url <br>\n";
               print "title: $title <br>\n";
-              print "thumbnailUrl: <img src=\"".$thumbnail."\"> <br>\n";
+              print "thumbnailUrl: $thumbnail <br><img src=\"".$thumbnail."\"> <br>\n";
               print "summary: <p>$summary</p>\n";
               print "description: <p>$description</p>\n";
               print "thumbnail: $tmpFile <br>\n";
@@ -1074,7 +1301,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
      global $gallery;
      
      $requestMethod='GET';
-
+     $requestBody='';
+     
      /* Convert illegal characters */
      $url = str_replace(' ', '%20', $url);