Added support for animoto videos.
[embedvideo/.git] / ItemAddEmbedVideo.inc
index 8049610d866fd38fdeae129938dea84a40d126d0..544c5225cd970821b8ff23a6379f983313e97ced 100644 (file)
@@ -93,6 +93,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           $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")) {
@@ -114,6 +115,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
             print "wordwrapSummary=$wordwrapSummary<br>\n";
             print "wordwrapDescription=$wordwrapDescription<br>\n";
             print "allowFullScreen=$allowFullScreen<br>\n";
+            print "centerVideo=$centerVideo\n";
             print "<hr>\n";
           }
 
@@ -165,6 +167,9 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 
           /* vimeo */
           $vimeoUrlPattern="vimeo.com";
+
+          /* animoto */
+          $animotoUrlPattern="animoto.com";
           
           /* Gallery2 specific paths and variables */
           $urlGenerator =& $gallery->getUrlGenerator();
@@ -480,7 +485,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            **********************************
            * Embed a Revver Video
            **********************************
-           * TODO: The autoStart parameter doesn't work with the yahoo video player
             */
           } else if(preg_match("/$revverUrlPattern/",$url)) {
 
@@ -538,7 +542,6 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
            **********************************
            * Embed a DailyMotion Video
            **********************************
-            * TODO: The autoStart parameter doesn't work with the yahoo video player
             */
           } else if(preg_match("/$dailymotionUrlPattern/",$url)) {
             
@@ -828,7 +831,70 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
               $description.= 'type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always"';
               $description.= 'width="'.$width.'" height="'.$height.'">';
               $description.= '</embed></object>';
-                              
+
+          /*
+           **********************************
+           * Embed an Animoto Video
+           **********************************
+            */
+          } else if(preg_match("/$animotoUrlPattern/",$url)) {
+            
+              /* Make sure we can extract a itemID */
+              if(preg_match("/\/play\/(.+)/",$url,$matches)) {
+                  $item_id = $matches[1];
+                  $item_id=preg_replace("/\/$/","",$item_id);
+              } else {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PARAMETER,__FILE__,__LINE__,
+                               "Unable to extract item id from url: $url"),null,null);
+              }
+
+              /* Grab the contents of the webpage used to display the video */
+              list ($successfullyCopied, $contents, $response, $headers) =
+                GalleryCoreApi::fetchWebPage($url, $extraHeaders);
+              if (!$successfullyCopied) {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                               "Unable to get video information at url: $url - $response"),NULL,NULL);
+              }
+
+              /* Extract the embed video xml page from the webpage contents */
+              if(preg_match('/type="text\/xml\+oembed" href="(.+?)"/', $contents, $matches)) { 
+                $xml_url=$matches[1];
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                                                   "Unable to extract xml information from url: $url"),NULL,NULL);
+              }
+
+              /* Get the xml page contents */
+              list ($successfullyCopied, $contents, $response, $headers) =
+                GalleryCoreApi::fetchWebPage($xml_url, $extraHeaders);
+              if (!$successfullyCopied) {
+                  return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                               "Unable to get video information at url: $xml_url - $response"),NULL,NULL);
+              }
+
+              /* Extract the title from the webpage contents */
+              preg_match('/<title>(.+?)<\/title>/i', $contents, $matches);
+              $title=htmlentities($matches[1], ENT_QUOTES, "UTF-8");
+              
+              /* Extract the thumbnail from the webpage contents */
+              preg_match('/<thumbnail_url>(.+?)<\/thumbnail_url>/i', $contents, $matches);
+              $thumbnail=$matches[1];
+
+              /* Format the description to hold a reference to the embedded video */
+              if(preg_match('/<html>(.+?)<\/html>/ism', $contents, $matches)) { 
+                $description=$matches[1];
+                $description=preg_replace("/&quot;/","'",$description);
+                $description=preg_replace("/&lt;/","<",$description);
+                $description=preg_replace("/&gth;/",">",$description);
+                $description=preg_replace("/\\\\\"/","\"",$description);
+                if(!strcmp($useRemoteSize,"false")) {
+                  $description=preg_replace("/width=\"\d+\"/","width=\"".$width."\"",$description);
+                  $description=preg_replace("/height=\"\d+\"/","height=\"".$height."\"",$description);
+                }
+              } else {
+                return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+                       "Unable to extract embedded video information from url: $url"),NULL,NULL);
+              }
           /*
            **********************************
            * Embed a remote .swf file
@@ -1088,6 +1154,11 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
           
           /* Tack on the summary to the end of the description */
           $description.= "<br>$description_summary";
+
+          /* Add centering tags to the description if requested */
+          if(!strcmp($centerVideo,"true")) {
+            $description = "<center>" . $description . "</center>";
+          }
           
           /* General debug output */
           if(!strcmp($debugOutput,"true")) {