From c89207ee0c133a7176a21d0bca5d452a17977488 Mon Sep 17 00:00:00 2001
From: "Alan J. Pippin" <ajp@server.pippins.net>
Date: Thu, 17 Apr 2008 20:05:53 -0600
Subject: [PATCH] Added support to handle &fmt=18 type options to youtube video
 urls

---
 ItemAddEmbedVideo.inc | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/ItemAddEmbedVideo.inc b/ItemAddEmbedVideo.inc
index ac3f12a..6bb160f 100644
--- a/ItemAddEmbedVideo.inc
+++ b/ItemAddEmbedVideo.inc
@@ -178,14 +178,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 */
@@ -235,7 +254,8 @@ 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);
@@ -313,10 +333,10 @@ 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>';
 	       }
-- 
2.34.1