Can choose to show external images
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Mon, 29 Jan 2007 14:27:32 +0000 (14:27 +0000)
committerx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Mon, 29 Jan 2007 14:27:32 +0000 (14:27 +0000)
Css external images are now catched

git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@182 9869982d-c50d-0410-be91-f2a2ec7c7c7b

banana/banana.inc.php.in
banana/message.func.inc.php
banana/templates/banana-message.inc.tpl

index 1c52fc5..5da2a44 100644 (file)
@@ -50,6 +50,7 @@ class Banana
     static public $msgshow_xface     = true;
     static public $msgshow_wrap      = 78;
     static public $msgshow_externalimages = false;
+    static public $msgshow_hasextimages   = false;
     static public $msgshow_withthread = true;
 
     /** Match an url
@@ -99,6 +100,7 @@ class Banana
     const ACTION_MSG_READ   = 5;
     const ACTION_MSG_NEW    = 9;
     const ACTION_MSG_CANCEL = 17;
+    const ACTION_MSG_IMAGES = 33;
 
     // Box list view
     const BOXES_ALL = 0;
@@ -206,6 +208,9 @@ class Banana
           case 'cancel':
             Banana::$action = Banana::ACTION_MSG_CANCEL;
             return;
+          case 'showext':
+            Banana::$action = Banana::ACTION_MSG_IMAGES;
+            return;
           default:
             Banana::$action = Banana::ACTION_MSG_READ;
         }
@@ -245,6 +250,8 @@ class Banana
           case Banana::ACTION_MSG_LIST:
             $error = $this->action_showThread(Banana::$group, Banana::$first);
             break;
+          case Banana::ACTION_MSG_IMAGES:
+            Banana::$msgshow_externalimages = true;
           case Banana::ACTION_MSG_READ:
             $error = $this->action_showMessage(Banana::$group, Banana::$artid, Banana::$part);
             break;
@@ -365,6 +372,7 @@ class Banana
             Banana::$page->assign('groups', $groups);
         }    
         Banana::$page->assign_by_ref('message', $msg);
+        Banana::$page->assign('extimages', Banana::$msgshow_hasextimages);
         Banana::$page->assign('headers', Banana::$msgshow_headers);
         Banana::$page->assign('type', $partid);
         return true;
index f86e731..f0f8d93 100644 (file)
@@ -310,6 +310,19 @@ function banana_cleanStyles($tag, $attributes)
     }
     return ' ' . $style . trim($attributes);
 }
+
+function banana_filterCss($css)
+{
+    $css = preg_replace("/(^|\n|,)\s*(\w+[^\{\}\<]+\{)/s", '\1.banana .message .body .html \2', $css);
+    $css = preg_replace('/ body\b/i', '', $css);
+    if (!Banana::$msgshow_externalimages) {
+        if (preg_match("/url\(((ht|f)tps?:.*?)\)/i", $css)) {
+            $css = preg_replace("/url\(((ht|f)tps?:.*?)\)/i", 'url(invalid-image.png)', $css);
+            Banana::$msgshow_hasextimages = true;
+        }
+    }
+    return $css;
+}
     
 /**
  * @return string
@@ -348,8 +361,7 @@ function banana_cleanHtml($source, $to_xhtml = false)
             foreach ($matches[1] as &$match) {
                 $css .= $match;
             }
-            $css = preg_replace("/(^|\n|,)\s*(\w+[^\{\}\<]+\{)/s", '\1.banana .message .body .html \2', $css);
-            $css = preg_replace('/ body\b/i', '', $css);
+            $css = banana_filterCss($css);
             Banana::$page->addCssInline($css);
         }
 
@@ -395,9 +407,13 @@ function banana__linkAttachment($cid)
 
 function banana_hideExternalImages($text)
 {
-    return preg_replace("/<img([^>]*?)src=['\"](?!cid).*?['\"](.*?)>/i",
-                        '<img\1src="invalid"\2>',
-                        $text);
+    if (preg_match("/<img([^>]*?)src=['\"](?!cid).*?['\"](.*?)>/i", $text)) {
+        Banana::$msgshow_hasextimages = true;
+        return preg_replace("/<img([^>]*?)src=['\"](?!cid).*?['\"](.*?)>/i",
+                            '<img\1src="invalid"\2>',
+                            $text);
+    }
+    return $text;
 }
 
 function banana_catchPartLinks($text)
index f7672b7..6fe2479 100644 (file)
     <td class="hdr">{"Versions"|b}</td>
     <td colspan="2">
       {foreach from=$alter key=ctype item=text name=alter}
-      {if $type eq $ctype}{$text}{else}{link group=$group artid=$artid part=$ctype text=$text}{/if}
+      {if $type eq $ctype}
+      {$text}
+      {if $extimages}[{link group=$group artid=$artid part=$type action=showext text="Afficher les images externes"|b}]{/if}
+      {else}
+      {link group=$group artid=$artid part=$ctype text=$text}
+      {/if}
       {if !$smarty.foreach.alter.last}&nbsp;&bull;&nbsp;{/if}
       {/foreach}
     </td>