Fixed dailymotion import issues
[embedvideo/.git] / ItemAddEmbedVideo.inc
index 4e517acb19a0214542a31360beb9b4d74f835ed1..2ba1adf30853a3884883c3e4d30ccdf289c697da 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();
    
@@ -67,10 +67,11 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           }
           
           /* Store any Parameters into some simpler, shorter, local variables */
-          global $debugOutput, $useInternalFlvPlayer, $youtubeDevId;
+          global $debugOutput, $useInternalFlvPlayer;
           global $width, $height, $externalFlvPlayer, $externalFlvPlayerVars;
           global $flvThumbnail, $useRemoteSize, $autoStart;
           global $watermarkVideos, $watermarkImage, $watermarkAlignment;
+          global $unsupported_url;
 
           /* Find out what value our parameters should have by looking to see if they
             * are defined in our overrides section or default section. If they are not
@@ -78,7 +79,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            */
           $debugOutput = $this->getParameter($ItemAddEmbedVideo, 'debugOutput', "false");
           $useInternalFlvPlayer = $this->getParameter($ItemAddEmbedVideo, 'useInternalFlvPlayer', "true");
-          $youtubeDevId = $this->getParameter($ItemAddEmbedVideo, 'youtubeDevId', "");
           $youtubeShowRelated = $this->getParameter($ItemAddEmbedVideo, 'youtubeShowRelated', "false");
           $width = $this->getParameter($ItemAddEmbedVideo, 'width', "320");
           $height = $this->getParameter($ItemAddEmbedVideo, 'height', "240");
@@ -89,52 +89,87 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $autoStart = $this->getParameter($ItemAddEmbedVideo, 'autoStart', "false");
           $watermarkImage = $this->getParameter($ItemAddEmbedVideo, 'watermarkImage', "");
           $watermarkVideos = $this->getParameter($ItemAddEmbedVideo, 'watermarkVideos', "false");
-          $watermarkAlignment = $this->getParameter($ItemAddEmbedVideo, 'watermarkAlignment', "center");
-
+          $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 "<hr>";
-            print "<h2>Variable Parameters</h2>";
-            print "debugOutput=$debugOutput<br>";
-            print "useInternalFlvPlayer=$useInternalFlvPlayer<br>";
-            print "youtubeDevId=$youtubeDevId<br>";
-            print "youtubeShowRelated=$youtubeShowRelated<br>";
-            print "width=$width<br>";
-            print "height=$height<br>";
-            print "externalFlvPlayer=$externalFlvPlayer<br>";
-            print "externalFlvPlayerVars=$externalFlvPlayerVars<br>";
-            print "flvThumbnail=$flvThumbnail<br>";
-            print "useRemoteSize=$useRemoteSize<br>";
-            print "autoStart=$autoStart<br>";
-            print "watermarkVideos=$watermarkVideos<br>";
-            print "watermarkImage=$watermarkImage<br>";
-            print "watermarkAlignment=$watermarkAlignment<br>";
-            print "<hr>";
+            print "\n<hr>";
+            print "<h2>Variable Parameters</h2>\n";
+            print "debugOutput=$debugOutput<br>\n";
+            print "useInternalFlvPlayer=$useInternalFlvPlayer<br>\n";
+            print "youtubeShowRelated=$youtubeShowRelated<br>\n";
+            print "width=$width<br>\n";
+            print "height=$height<br>\n";
+            print "externalFlvPlayer=$externalFlvPlayer<br>\n";
+            print "externalFlvPlayerVars=$externalFlvPlayerVars<br>\n";
+            print "flvThumbnail=$flvThumbnail<br>\n";
+            print "useRemoteSize=$useRemoteSize<br>\n";
+            print "autoStart=$autoStart<br>\n";
+            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 "allowFullScreen=$allowFullScreen<br>\n";
+            print "centerVideo=$centerVideo\n";
+            print "<hr>\n";
           }
 
           /* Store other string constants we'll use later */
          
           /* youtube */
-          $youtubeUrlPattern="youtube.com";
-          $youtubeApiUrl="http://www.youtube.com/api2_rest";
+          $youtubeUrlPattern="youtube";
+          $youtubeApiUrl="http://gdata.youtube.com/feeds/api/";
+          $youtubeThumbnailUrl="http://img.youtube.com/vi/";
           /* We can't extract the server size from youtube */
           $youtubeWidth="425";
           $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";
+          $revverThumbnailUrl="http://frame.revver.com/frame/120x90/";
+
+          /* dailymotion */
+          $dailymotionUrlPattern="dailymotion";
+          $dailymotionThumbnailUrl="http://www.dailymotion.com/thumbnail/160x120/video/";
+
+          /* divshare */
+          $divshareUrlPattern="divshare";
+          $divshareThumbnailUrl="http://www.divshare.com/direct/video_thumb/";
+
+          /* stickam */
+          $stickamUrlPattern="stickam";
+          $stickamThumbnailUrl="http://static.stickam.com/";
+
+          /* myspace */
+          $myspaceUrlPattern="vids.myspace";
+          $myspaceUrlPattern2="myspacetv";
+          $myspaceThumbnailUrl="http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID=";
+
+          /* vimeo */
+          $vimeoUrlPattern="vimeo.com";
+
+          /* animoto */
+          $animotoUrlPattern="animoto.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -142,104 +177,147 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $gallery2_flv_thumbnail = "modules/embedvideo/images/G2video_thumbnail.jpg";
           $gallery2_video_watermark = "modules/embedvideo/images/G2video_watermark1.png";
           $gallery2_flv_player = "modules/flashvideo/lib/G2flv.swf";
+
+          /* Unsupported URLs */
+          $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
            *****************************
            */
           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 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);
               }
-              
-              /* Make sure we have a valid youtube developer id */
-              $dev_id = $youtubeDevId;
-              if(!preg_match("/\w+/",$dev_id)) {
-                  return array(GalleryCoreApi::error(ERROR_CONFIGURATION_REQUIRED,__FILE__,__LINE__,
-                               "Invalid/missing YouTube developer ID: $dev_id"),null,null);
+
+              /* If extra params were given, handle them here */
+              if(strcmp($extra_params,"")) {
+                /* 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.'?method=youtube.videos.get_details';
-              $feed.= "&dev_id=$dev_id&video_id=$video_id";
-              
+              $feed = $youtubeApiUrl."videos/".urlencode($video_id);
+
+              if(!strcmp($debugOutput,"true")) {
+                  print "\n<h2>Youtube URL Parsing Results</h2>";
+                  print "video_id: $video_id<br>";
+                  print "extra_embed_params: $extra_params<br>";
+                  print "gdata feed: $feed<br>";
+                   print "<hr>";
+              }
+
               /* Get the youtube xml feed as a string data source */
               list ($successfullyCopied, $xml, $response, $headers) =
                 GalleryCoreApi::fetchWebPage($feed, $extraHeaders);
               if (!$successfullyCopied) {
-                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
-                               "Unable to get video information at url: $url - $response"),null,null);
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                                                   "Unable to get video information at url: $url - $response"),null,null);
               }
-
+                
               if(preg_match("/This video is private/",$xml)) {
                 return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
-                               "Unable to retrieve video information from youtube.".
-                               "You cannot embed a private youtube video: $url"),null,null);
+                                                   "Unable to retrieve video information from youtube.".
+                                                   "You cannot embed a private youtube video: $url"),null,null);
               }
-              
+                
               if(!strcmp($debugOutput,"true")) {
-                print "<h2>Youtube XML Dump</h2>";
+                print "\n<h2>Youtube XML Dump</h2>";
                 print "$xml";
                 print "<hr>";
               }
-              
+                
               /* Extract certain information from the xml feed */
-              preg_match_all("/\<title\>(.+?)\<\/title\>/smi",$xml, $title);
-              preg_match_all("/\<description\>(.+?)\<\/description\>/smi",$xml, $description);
-              preg_match_all("/\<thumbnail_url\>(.+?)\<\/thumbnail_url\>/smi",$xml, $thumbnail);
-              
+              preg_match_all("/\<media:title.+?\>(.+?)\<\/media:title\>/smi",$xml, $title);
+              preg_match_all("/\<media:description.+?\>(.+?)\<\/media:description\>/smi",$xml, $description);
+              preg_match_all("/\<media:thumbnail url='(.+?)'/smi",$xml, $thumbnail);
+                
               array_shift($title);
               array_shift($thumbnail);
               array_shift($description);
-         
+
               /* Replace html characters. More can be added but this seems to work */
               for($i=0;$i<count($description[0]);$i++){          
-                  $description[0][$i] = preg_replace("/&#60;/","<",$description[0][$i]);
-                  $description[0][$i] = html_entity_decode($description[0][$i],ENT_QUOTES);      
+                $description[0][$i] = preg_replace("/&#60;/","<",$description[0][$i]);
+                $description[0][$i] = html_entity_decode($description[0][$i],ENT_QUOTES);        
               }
-
+                
               /* Store the information found in some local variables */
               $title = $title[0][0];
               $summary = $description[0][0];
-              $thumbnail = $thumbnail[0][0];
+                
+              /* The last thumbnail match we make will always be the highest resolution */
+              $thumbnail = $thumbnail[0][sizeof($thumbnail[0])-1];
 
+              if(!strcmp($debugOutput,"true")) {
+                print "title: $title<br>";
+                print "summary: $summary<br>";
+                print "thumbnail: $thumbnail<br>";
+              }
+                
               /* Determine what our width and height should be based on our useRemoteSize parameter */
               if(!strcmp($useRemoteSize,"true")) {
                 $width = $youtubeWidth;
                 $height = $youtubeHeight;
               }
-              
+                
               /* Determine if the video should autoplay or not based on the autoStart parameter */
               $autoStartStr="";
               if(!strcmp($autoStart,"true")) {
                 $autoStartStr="&autoplay=1";
               }
-
+                
               /* Determine if the video should show related videos or not based on the youtubeShowRelated parameter */
               $youtubeShowRelatedStr="";
               if(!strcmp($youtubeShowRelated,"false")) {
                 $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.'"></param>';
+              $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.$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.= "<br>$summary";
+              $description.= 'width="'.$width.'" height="'.$height.'"'.$fullScreenParamStr2.'></embed></object>';
 
           /*
            **********************************
@@ -279,11 +357,13 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
 
               /* Extract the thumbnail URL from the webpage contents */
-              preg_match('/<img src="(http:\/\/video\.google\.com\/ThumbnailServer2.+?)" /i',
+              preg_match('/\'.+?thumbnail.+?(http:\/\/.*?\/ThumbnailServer2.+?)\'/i',
                          $contents, $matches);
               $thumbnail=$matches[1];
-              $thumbnail=preg_replace("/offsetms=0/","offsetms=0",$thumbnail);
-
+              $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;
@@ -302,7 +382,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $description.= 'type="application/x-shockwave-flash" ';
               $description.= 'src="'.$googlePlayer.'?docId='.$doc_id.$autoStartStr.'" flashvars=""> ';
               $description.= '</embed>';
-              $description.= "<br>$summary";
 
           /*
            **********************************
@@ -320,7 +399,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) {
@@ -344,13 +423,16 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $thumbnail=$yahooThumbnailUrl.$vid_id."_01";
 
               /* Format the description to hold a reference to the embedded video */
-              preg_match('/(<embed src.+?<\/embed>)/', $contents, $matches);
-              $description=$matches[1];
-              if(!strcmp($useRemoteSize,"false")) {
-                $description=preg_replace("/width='\d+'/","width='".$width."'",$description);
-                $description=preg_replace("/height='\d+'/","height='".$height."'",$description);
+              if(preg_match('/(<embed src.+?<\/embed>)/', $contents, $matches)) { 
+                $description=$matches[1];
+                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);
               }
-              $description.= "<br>$summary";
 
           /*
            **********************************
@@ -367,7 +449,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) {
@@ -387,21 +469,437 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $thumbnail=$metacafeThumbnailUrl.$item_id.".jpg";
 
               /* Format the description to hold a reference to the embedded video */
-              preg_match('/(embed src.+?\/embed)/', $contents, $matches);
-              $description="<".$matches[1];
-              $description=preg_replace("/&quot;/","'",$description);
-              if(!strcmp($useRemoteSize,"false")) {
-                $description=preg_replace("/width='\d+'/","width='".$width."'",$description);
-                $description=preg_replace("/height='\d+'/","height='".$height."'",$description);
+              if(preg_match('/(embed src.+?\/embed)/', $contents, $matches)) { 
+                $description="<".$matches[1];
+                $description=preg_replace("/&quot;/","'",$description);
+                if(!strcmp($useRemoteSize,"false")) {
+                  $description=preg_replace("/width='\d+'/","width='".$width."'",$description);
+                  $description=preg_replace("/height='\d+'/","height='".$height."'",$description);
+                }
+                if(!strcmp($autoStart,"true")) {
+                  $description=preg_replace("/\.swf/",".swf?playerVars=autoPlay=yes",$description);
+                }
+                $description.= "</embed>";
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                       "Unable to extract embedded video information from url: $url"),NULL,NULL);
+              }
+
+           /*
+           **********************************
+           * Embed a Revver Video
+           **********************************
+            */
+          } else if(preg_match("/$revverUrlPattern/",$url)) {
+
+              /* Make sure we can extract a itemID */
+              if(preg_match("/\/watch\/(.+)/",$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 summary from the webpage contents */
+              if(preg_match('/"video_description">(.+?)<\/p>/i', $contents, $matches)) {
+                $summary=$matches[1];
+              }
+              if(preg_match('/"video_description">(.+)/i', $contents, $matches)) {
+                $summary=$matches[1];
+              }
+
+              /* Extract the title from the webpage contents */
+              preg_match('/digg_title = \'(.+?)\'/i', $contents, $matches);
+              $title=$matches[1];
+              
+              /* Build the thumbnail URL from the item_id */
+              $thumbnail=$revverThumbnailUrl.$item_id.".jpg";
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/<input class.+?(script src.+?\/script)/', $contents, $matches)) {
+                $description="<".$matches[1];
+                if(!strcmp($useRemoteSize,"false")) {
+                  $description=preg_replace("/width:\d+/","width:".$width,$description);
+                  $description=preg_replace("/height:\d+/","height:".$height,$description);
+                }
+                if(!strcmp($autoStart,"true")) {
+                  preg_match('/(height:\d+)/',$description,$matches);
+                  $height=$matches[1];
+                  $description=preg_replace("/$height/",$height.";autoplay:true",$description);
+                }
+                $description.= ">";
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                       "Unable to extract embedded video information from url: $url"),NULL,NULL);
+              }
+           
+          /*
+           **********************************
+           * Embed a DailyMotion Video
+           **********************************
+            */
+          } else if(preg_match("/$dailymotionUrlPattern/",$url)) {
+            
+              /* Make sure we can extract a itemID */
+              if(preg_match("/\/video\/(.+)/",$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 summary from the webpage contents */
+              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=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('/embed code:.+? 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 DivShare Video
+           **********************************
+            */
+          } else if(preg_match("/$divshareUrlPattern/",$url)) {
+            
+              /* Make sure we can extract a itemID */
+              if(preg_match("/\/download\/(.+)/",$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 summary from the webpage contents */
+              //preg_match('/<meta name="description" content="(.+?)" \/>/i', $contents, $matches);
+              //$summary=$matches[1];
+              // Right now, the description is a plug for divshare, nothing user specific about it
+              $summary="";
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<title>(.+?) - Divshare<\/title>/i', $contents, $matches);
+              $title=$matches[1];
+              
+              /* Build the thumbnail URL from the item_id */
+              $thumbnail=$divshareThumbnailUrl.$item_id;
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/(<embed src.+?<\/embed>)/', $contents, $matches)) { 
+                $description=$matches[1];
+                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 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 */
+              $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('/readonly 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 */
+              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 {
+                 /*
+                  * 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) ||
+                 preg_match('/(&lt;embed src.+?\/object&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 */
+              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('/"og:image" content="(.+?)"/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")) {
-                $description=preg_replace("/\.swf/",".swf?playerVars=autoPlay=yes",$description);
+                $autoStartStr="&amp;autoplay=1";
+              }
+
+              /* Format the description to hold a reference to the embedded video */
+              $description = '<object width="'.$width.'" height="'.$height.'">';
+              $description.= '<param name="allowfullscreen" value="true" />';
+              $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 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);
               }
-              $description.= "</embed>";
-              $description.= "<br>$summary";
 
+              /* 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
            **********************************
@@ -443,11 +941,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];
@@ -549,15 +1048,71 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                   $description.= 'pluginspage="http://www.macromedia.com/go/getflashplayer"/>';
                   $description.= '</object></div>';
               }
-              
+
+          /*
+           **********************************
+           * Embed a generic <object ... <embed ... video
+           **********************************
+            */ 
+          } else {
+
+            /* 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 URL base (site name) */
+            preg_match("/(http:\/\/.+?)\//i",$url,$matches);
+            $site = $matches[1];
+            print "site: $site<br>";
+            
+            /* Extract the summary from the webpage contents */
+            $summary="Unknown";
+            if(preg_match('/<meta name="description" content="(.+?)"/si', $contents, $matches)) {
+              $summary=$matches[1];
+            }
+
+            /* Extract the title from the webpage contents */
+            $title="Unknown";
+            if(preg_match('/<title>(.+?)<\/title>/i', $contents, $matches)) {
+              $title=$matches[1];
+            }
+
+            /*
+             * Set the thumbnail to some generic jpg image,
+             * since we can't extract it from a generic website.
+             * 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('/(<object.+?<embed.+?<\/object>)/', $contents, $matches)) { 
+              $description=$matches[1];
+              if(!strcmp($useRemoteSize,"false")) {
+                $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
+                $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
+              }
+              $description=preg_replace("/src=\"\//","src=\"".$site."\/",$description);
+            } else {
+              $unsupported_url=1;
+            }
+          }
+          
          /*
           **********************************
           * Unsupported URL to embed
           **********************************
            */   
-          } else {
+          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);
           }
           
 
@@ -589,19 +1144,39 @@ 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";
+
+          /* Add centering tags to the description if requested */
+          if(!strcmp($centerVideo,"true")) {
+            $description = "<center>" . $description . "</center>";
+          }
           
           /* General debug output */
           if(!strcmp($debugOutput,"true")) {
-              print "<h2>Item Parameters</h2>";
-              print "url: $url <br>";
-              print "title: $title <br>";
-              print "thumbnailUrl: <img src=\"".$thumbnail."\">\n</a>".$summary."</p>";
-              print "description: <p>$description</p>";
-              print "thumbnail: $tmpFile <br>";
-              print "mimeType: $mimeType <br>";
-              print "fileName: $fileName <br>";
-              print "width: $width <br>";
-              print "height: $height <br>";
+              print "\n<h2>Item Parameters</h2>\n";
+              print "url: $url <br>\n";
+              print "title: $title <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";
+              print "mimeType: $mimeType <br>\n";
+              print "fileName: $fileName <br>\n";
+              print "width: $width <br>\n";
+              print "height: $height <br>\n";
               print "<hr>";
           }
 
@@ -647,9 +1222,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               }
           }
           if(!strcmp($debugOutput,"true")) {
-              print "<h2>Thumbnail Resize</h2>";
-              print "$debugString";
-              print "<hr>";
+              print "\n<h2>Thumbnail Resize</h2>\n";
+              print "$debugString\n";
+              print "<hr>\n";
           }
 
           /* Watermark the video thumbnail image if indicated by our parameter */
@@ -744,14 +1319,14 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
             
             /* General debug output */
             if(!strcmp($debugOutput,"true")) {
-              print "<h2>Watermark Operation</h2>";
-              print "watermarkImage: $watermarkImage <br>";
-              print "watermarkTmpImage: $watermark <br>";
-              print "watermarkMimeType: $watermarkMimeType <br>";
-              print "watermarkWidth: $watermarkWidth <br>";
-              print "watermarkHeight: $watermarkHeight <br>";
-              print "watermarkedWidth: $thumbnailWidth <br>";
-              print "watermarkedHeight: $thumbnailHeight <br>";
+              print "\n<h2>Watermark Operation</h2>\n";
+              print "watermarkImage: $watermarkImage <br>\n";
+              print "watermarkTmpImage: $watermark <br>\n";
+              print "watermarkMimeType: $watermarkMimeType <br>\n";
+              print "watermarkWidth: $watermarkWidth <br>\n";
+              print "watermarkHeight: $watermarkHeight <br>\n";
+              print "watermarkedWidth: $thumbnailWidth <br>\n";
+              print "watermarkedHeight: $thumbnailHeight <br>\n";
             }
 
             /* Apply the watermark image to the thumbnail */
@@ -769,7 +1344,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
             }
 
             if(!strcmp($debugOutput,"true")) {
-              print "watermarked Image: $tmpFile <br>";
+              print "\nwatermarked Image: $tmpFile <br>";
               print "<hr>";
             }
                       
@@ -796,7 +1371,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
                                           'warnings' => array());
 
           if(!strcmp($debugOutput,"true")) {
-              print "<br><br><h2>Video Successfully Added to your Gallery Album</h2><br><br><hr>";
+              print "\n<br><br><h2>Video Successfully Added to your Gallery Album</h2><br><br><hr>";
           }
        }
        
@@ -837,7 +1412,8 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
      global $gallery;
      
      $requestMethod='GET';
-
+     $requestBody='';
+     
      /* Convert illegal characters */
      $url = str_replace(' ', '%20', $url);