From 1b1822456d66be4761748a02d9f1d9e8caefb8be Mon Sep 17 00:00:00 2001
From: Alan Jack Pippin 
";
-	     print "Variable Parameters
";
-	     print "debugOutput=$debugOutput
";
-	     print "useInternalFlvPlayer=$useInternalFlvPlayer
";
-	     print "youtubeDevId=$youtubeDevId
";
-	     print "youtubeShowRelated=$youtubeShowRelated
";
-	     print "width=$width
";
-	     print "height=$height
";
-	     print "externalFlvPlayer=$externalFlvPlayer
";
-	     print "externalFlvPlayerVars=$externalFlvPlayerVars
";
-	     print "flvThumbnail=$flvThumbnail
";
-	     print "useRemoteSize=$useRemoteSize
";
-	     print "autoStart=$autoStart
";
-	     print "watermarkVideos=$watermarkVideos
";
-	     print "watermarkImage=$watermarkImage
";
-	     print "watermarkAlignment=$watermarkAlignment
";
-	     print "
";
+	     print "\n
";
+	     print "Variable Parameters
\n";
+	     print "debugOutput=$debugOutput
\n";
+	     print "useInternalFlvPlayer=$useInternalFlvPlayer
\n";
+	     print "youtubeDevId=$youtubeDevId
\n";
+	     print "youtubeShowRelated=$youtubeShowRelated
\n";
+	     print "width=$width
\n";
+	     print "height=$height
\n";
+	     print "externalFlvPlayer=$externalFlvPlayer
\n";
+	     print "externalFlvPlayerVars=$externalFlvPlayerVars
\n";
+	     print "flvThumbnail=$flvThumbnail
\n";
+	     print "useRemoteSize=$useRemoteSize
\n";
+	     print "autoStart=$autoStart
\n";
+	     print "watermarkVideos=$watermarkVideos
\n";
+	     print "watermarkImage=$watermarkImage
\n";
+	     print "watermarkAlignment=$watermarkAlignment
\n";
+	     print "
\n";
 	   }
 
 	   /* Store other string constants we'll use later */
@@ -117,6 +117,7 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   /* youtube */
 	   $youtubeUrlPattern="youtube.com";
 	   $youtubeApiUrl="http://www.youtube.com/api2_rest";
+	   $youtubeThumbnailUrl="http://img.youtube.com/vi/";
 	   /* We can't extract the server size from youtube */
 	   $youtubeWidth="425";
 	   $youtubeHeight="350";
@@ -135,6 +136,18 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   /* metacafe */
 	   $metacafeUrlPattern="metacafe.com";
 	   $metacafeThumbnailUrl="http://www.metacafe.com/thumb/";
+
+	   /* revver */
+	   $revverUrlPattern="revver.com";
+	   $revverThumbnailUrl="http://frame.revver.com/frame/120x90/";
+
+	   /* dailymotion */
+	   $dailymotionUrlPattern="dailymotion.com";
+	   $dailymotionThumbnailUrl="http://www.dailymotion.com/thumbnail/160x120/video/";
+
+	   /* divshare */
+	   $divshareUrlPattern="divshare.com";
+	   $divshareThumbnailUrl="http://www.divshare.com/direct/video_thumb/";
 	   
 	   /* Gallery2 specific paths and variables */
 	   $urlGenerator =& $gallery->getUrlGenerator();
@@ -161,86 +174,141 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 				"Unable to extract video id from url: $url"),null,null);
 	       }
 	       
-	       /* Make sure we have a valid youtube developer id */
+	       /* 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 */
 	       $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);
-	       }
-	       
-	       /* Youtube api feed */
-	       $feed = $youtubeApiUrl.'?method=youtube.videos.get_details';
-	       $feed.= "&dev_id=$dev_id&video_id=$video_id";
-	       
-	       /* 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);
-	       }
+		 /* No developer ID found. Proceed with direct page parsing. */
 
-	       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);
-	       }
-	       
-	       if(!strcmp($debugOutput,"true")) {
-		 print "Youtube XML Dump
";
-		 print "$xml";
-		 print "
";
-	       }
-	       
-	       /* Extract certain information from the xml feed */
-	       preg_match_all("/\
$summary";
+		 } else {
+		   return array(GalleryCoreApi::error(ERROR_BAD_PATH,__FILE__,__LINE__,
+		  	  "Unable to extract embedded video information from url: $url"),NULL,NULL);
+		 }
+		 
+	       } else {
+		 /* We found a valid developer ID. Proceed with API calls. */
+	      	       
+		 /* Youtube api feed */
+		 $feed = $youtubeApiUrl.'?method=youtube.videos.get_details';
+		 $feed.= "&dev_id=$dev_id&video_id=$video_id";
+		 
+		 /* 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);
+		 }
+		 
+		 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);
+		 }
+		 
+		 if(!strcmp($debugOutput,"true")) {
+		   print "\nYoutube XML Dump
";
+		   print "$xml";
+		   print "
";
+		 }
+		 
+		 /* Extract certain information from the xml feed */
+		 preg_match_all("/\
$summary";
 	       }
-
-	       /* Store the information found in some local variables */
-	       $title = $title[0][0];
-	       $summary = $description[0][0];
-	       $thumbnail = $thumbnail[0][0];
-
-	       /* 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";
-	       }
-	       
-	       /* Format the description to hold a reference to the embedded video */
-	       $description = '';
-	       $description.= "
$summary";
-
 	   /*
 	    **********************************
 	    * Embed a Google Video
@@ -344,13 +412,17 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	       $thumbnail=$yahooThumbnailUrl.$vid_id."_01";
 
 	       /* Format the description to hold a reference to the embedded video */
-	       preg_match('/(";
-	       $description.= "
$summary";
 
+	       /* 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 */
+	       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('/";
+		 $description.= "
$summary";
+	       } 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
+	    **********************************
+            * TODO: The autoStart parameter doesn't work with the yahoo video player
+            */
+	   } 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 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('//i', $contents, $matches);
+	       $summary=$matches[1];
+
+	       /* Extract the title from the webpage contents */
+	       preg_match('//i', $contents, $matches);
+	       $title=$matches[1];	       
+	       
+	       /* 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)) { 
+		 $description=$matches[1];
+		 $description=preg_replace("/"/","'",$description);
+		 $description=preg_replace("/</","<",$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);
+		 }
+		 $description.= "
$summary";
+	       } 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 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('//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('/
$summary";
+	       } 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
 	    **********************************
@@ -592,16 +828,17 @@ class ItemAddEmbedVideo extends ItemAddPlugin {
 	   
 	   /* General debug output */
 	   if(!strcmp($debugOutput,"true")) {
-	       print "Item Parameters
";
-	       print "url: $url 
";
-  	       print "title: $title 
";
-	       print "thumbnailUrl: \n".$summary."
$description
"; - print "thumbnail: $tmpFile$summary
\n"; + print "description:$description
\n"; + print "thumbnail: $tmpFile