From 7ec319c1b7a2ab44287ac3d6ecbd6f2e773533c9 Mon Sep 17 00:00:00 2001
From: "Alan J. Pippin" <ajp@pippins.net>
Date: Tue, 13 Oct 2009 22:45:06 -0600
Subject: [PATCH] Added support for animoto videos. Added new centerVideo
 parameter.

---
 ItemAddEmbedVideo.inc             | 77 +++++++++++++++++++++++++++++--
 module.inc                        |  2 +-
 templates/EmbedVideoSiteAdmin.tpl |  3 ++
 templates/ItemAddEmbedVideo.tpl   |  1 +
 4 files changed, 79 insertions(+), 4 deletions(-)

diff --git a/ItemAddEmbedVideo.inc b/ItemAddEmbedVideo.inc
index 8049610..544c522 100644
--- a/ItemAddEmbedVideo.inc
+++ b/ItemAddEmbedVideo.inc
@@ -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")) {
diff --git a/module.inc b/module.inc
index 8f589b1..4f91f89 100644
--- a/module.inc
+++ b/module.inc
@@ -33,7 +33,7 @@ class EmbedVideoModule extends GalleryModule {
 	$this->setId('embedvideo');
 	$this->setName($gallery->i18n('Embed Video'));
 	$this->setDescription($gallery->i18n('Add embedded videos from the web'));
-	$this->setVersion('1.1.4');
+	$this->setVersion('1.1.5');
 	$this->setGroup('import', $gallery->i18n('Import'));
 	$this->setCallbacks('getSiteAdminViews');
 	$this->setRequiredCoreApi(array(7, 3));
diff --git a/templates/EmbedVideoSiteAdmin.tpl b/templates/EmbedVideoSiteAdmin.tpl
index f19e2a2..18ce8f6 100644
--- a/templates/EmbedVideoSiteAdmin.tpl
+++ b/templates/EmbedVideoSiteAdmin.tpl
@@ -160,6 +160,9 @@
     <tr class="gbOdd"><td>wordwrapDescription</td><td>0 - N</td>
       <td>{g->text text="If non-zero, sets the maximum line width when displaying the item's description"}</td></tr>
 
+    <tr class="gbEven"><td>centerVideo</td><td>true/false</td>
+      <td>{g->text text="If set to true, video playback will be centered on the photo page"}</td></tr>
+
 
   </table>
 
diff --git a/templates/ItemAddEmbedVideo.tpl b/templates/ItemAddEmbedVideo.tpl
index 1ea2807..d2633ad 100644
--- a/templates/ItemAddEmbedVideo.tpl
+++ b/templates/ItemAddEmbedVideo.tpl
@@ -32,6 +32,7 @@
     <b>Myspace1:</b> http://vids.myspace.com/index.cfm?fuseaction=vids.individual&VideoID=xxxxxxxx<br>
     <b>Myspace2:</b> http://myspacetv.com/index.cfm?fuseaction=vids.individual&videoid=xxxxxxxx<br>
     <b>Vimeo:</b> http://www.vimeo.com/xxxxxx<br>
+    <b>Animoto:</b> http://www.animoto.com/play/xxxxxxxxxxxxxxxxxxxxxx<br>
     <b>Generic:</b> Any webpage with an '&lt;object ... &lt;embed ...' style video on its page<br>
     <br>
     <b><u>Supported File Types:</u></b><br>
-- 
2.34.1