fixes email replacement in subscription links
authorPhilipp Schüle <p.schuele@metaways.de>
Tue, 22 Sep 2015 08:05:38 +0000 (10:05 +0200)
committerPhilipp Schüle <p.schuele@metaways.de>
Tue, 22 Sep 2015 13:22:33 +0000 (15:22 +0200)
* do not replace emails if already embedded in uri

Change-Id: I41f9d451b4b0a23e72a706242e8857811b244806
Reviewed-on: http://gerrit.tine20.com/customers/2213
Tested-by: Jenkins CI (http://ci.tine20.com/)
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
tests/tine20/Felamimail/Model/MessageTest.php
tine20/Felamimail/Message.php

index 4c015ee..5b01cb3 100644 (file)
@@ -4,7 +4,7 @@
  * 
  * @package     Felamimail
  * @license     http://www.gnu.org/licenses/agpl.html
- * @copyright   Copyright (c) 2010-2013 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @copyright   Copyright (c) 2010-2015 Metaways Infosystems GmbH (http://www.metaways.de)
  * @author      Philipp Schüle <p.schuele@metaways.de>
  * 
  */
@@ -108,13 +108,19 @@ class Felamimail_Model_MessageTest extends PHPUnit_Framework_TestCase
      * 
      * @see 0008020: link did not get an anchor in html mail
      */
-    public function testReplaceUris()
+    public function testReplaceUrisAndMails()
     {
         $message = new Felamimail_Model_Message(array(
             'body'  =>  'http://www.facebook.com/media/set/?set=a.164136103742229.1073741825.100004375207149&type=1&l=692e495b17'
+                . " Klicken Sie bitte noch auf den folgenden Link, um Ihre Teilnahme zu bestätigen:\n"
+                . 'http://www.kieler-linuxtage.de/vortragsplaner/wsAnmeldung.php?fkt=best&wsID=111&code=xxxx&eMail=abc@efh.com'
         ));
         
         $result = Felamimail_Message::replaceUris($message->body);
-        $this->assertContains('a href=', $result);
+        $result = Felamimail_Message::replaceEmails($result);
+
+        $this->assertContains('a href="http://www.facebook.com/media/set/', $result);
+        $this->assertContains('a href="http://www.kieler-linuxtage.de/', $result);
+        $this->assertContains('eMail=abc@efh.com', $result);
     }
 }
index 80588c9..37ee567 100644 (file)
@@ -235,15 +235,16 @@ class Felamimail_Message extends Zend_Mail_Message
      *
      * @param string $_content
      * @return string
-     * 
-     * @todo try to skip email address that are already embedded in an url (such as unsubscription links with ?email=blabla@aha.com) 
      */
     public static function replaceEmails($_content) 
     {
         // add anchor to email addresses (remove mailto hrefs first)
         $mailtoPattern = '/<a[="a-z\-0-9 ]*href="mailto:([a-z0-9_\+-\.]+@[a-z0-9-\.]+\.[a-z]{2,4})"[^>]*>.*<\/a>/iU';
         $result = preg_replace($mailtoPattern, "\\1", $_content);
-        $result = preg_replace(Tinebase_Mail::EMAIL_ADDRESS_REGEXP, "<a href=\"#\" id=\"123:\\1\" class=\"tinebase-email-link\">\\1</a>", $result);
+        $emailRegex = Tinebase_Mail::EMAIL_ADDRESS_REGEXP;
+        // don't match emails with '=' as used in subscription uris (?email=blabla@aha.com)
+        $emailRegex = str_replace('/(', '/^=(', $emailRegex);
+        $result = preg_replace($emailRegex, "<a href=\"#\" id=\"123:\\1\" class=\"tinebase-email-link\">\\1</a>", $result);
         
         return $result;
     }