DataObjects/Core_person_signup.php
[Pman.Core] / DataObjects / Core_email.php
index a7ed6d6..1f9318d 100644 (file)
@@ -188,18 +188,22 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         
         foreach ($xpath->query('//img[@src]') as $img) { // process images!
             $href = $img->getAttribute('src');
-            $cid = explode('#', $href);
-            if(isset($cid[1])){
-                $img->setAttribute('src', 'cid:' . $cid[1]);
+            $hash = explode('#', $href);
+            // we name all our cid's as attachment-*
+            // however the src url may be #image-*
+            
+            
+            if(!isset($hash[1])){
+                continue;
+            }
+            $cid = explode('-', $hash[1]);
+            if(!empty($cid[1])){
+                $img->setAttribute('src', 'cid:attachment-' . $cid[1]);
             }
         }
         
-        $unsubscribe = false;
+        $unsubscribe = $this->unsubscribe_url();
         
-        if(!empty($cfg)){
-            $unsubscribe = $cfg ['server_baseurl'] . '/Crm/Unsubscribe/' . $this->id . '/{person.id}';
-        }
-       
         foreach ($xpath->query('//a[@href]') as $a) { 
             
             $href = $a->getAttribute('href');
@@ -242,7 +246,9 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             $element->setAttribute('height', '1');
 
             $html = $doc->getElementsByTagName('html');
-            $html->item(0)->appendChild($element);
+            if ($html->length) {
+                $html->item(0)->appendChild($element);
+            }
             
             $this->plaintext = str_replace("{unsubscribe_link}", $unsubscribe, $this->plaintext);
         }
@@ -258,21 +264,59 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         return;
     }
     
+    function unsubscribe_url()
+    {
+        $unsubscribe = false;
+        
+        $cfg = isset(HTML_FlexyFramework::get()->Pman_Crm) ? HTML_FlexyFramework::get()->Pman_Crm : false;
+        
+        if(!empty($cfg)){
+            $unsubscribe = $cfg ['server_baseurl'] . '/Crm/Unsubscribe/' . $this->id . '/{person.id}';
+        }
+        
+        return $unsubscribe;
+    }
+    /**
+     *
+     * Usage:
+     * $this->rcpts = array('sales@roojs.com');
+     * // or 
+     * $this->rcpts = "Tester <sales@roojs.com>";
+     *
+     * 
+     * // then send it..
+     * $x = DB_DataObject::factory('core_enum');
+     * $x->get('name', 'NAME OF TEMPLATE');
+     * $x->send(array(
+     *      'rcpts' => "Tester <sales@roojs.com>",
+     *      'page' => $this
+     *      'mailer_opts' => array( <<< additional options, like urlmap..)
+     *       'link' => 'http://......'
+       );
+     * // on the template use {link:h} to render the link
+     *
+     *
+     */
     function send($obj, $force = true, $send = true)
     {   
         $contents = (array)$obj;
-        
+
         if(empty($this->id)){
             $this->get('name', $contents['template']);
         }
         
         if(empty($this->id)){
-            return PEAR::raiseError("template [{$contents['template']}]has not been set");
+            $p = new PEAR();
+            return $p->raiseError("template [{$contents['template']}] has not been set");
         }
         if(empty($contents['subject'])){
            $contents['subject'] = $this->subject; 
         }
         
+        if(!empty($contents['rcpts']) && is_array($contents['rcpts'])){
+            $contents['rcpts'] = implode(',', $contents['rcpts']);
+        }
+        
         $ui = posix_getpwuid(posix_geteuid());
         
         $cachePath = session_save_path() . '/email-cache-' . $ui['name'] . '/mail/' . $this->tableName() . '-' . $this->id . '.txt';
@@ -284,13 +328,25 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         require_once 'Pman/Core/Mailer.php';
         
         $templateDir = session_save_path() . '/email-cache-' . $ui['name'] ;
+        //print_r($this);
+        
         
-        $r = new Pman_Core_Mailer(array(
+        $cfg = array(
             'template'=> $this->tableName() . '-' . $this->id,
             'templateDir' => $templateDir,
             'page' => $this,
-            'contents' => $contents
-        ));
+            'contents' => $contents,
+            'css_embed' => true, // we should always try and do this with emails...
+        );
+        if (isset($contents['rcpts'])) {
+            $cfg['rcpts'] = $contents['rcpts'];
+        }
+        if (isset($contents['mailer_opts']) && is_array($contents['mailer_opts'])) {
+            $cfg = array_merge($contents['mailer_opts'], $cfg);
+        }
+        
+        
+        $r = new Pman_Core_Mailer($cfg);
         
         $imageCache = session_save_path() . '/email-cache-' . $ui['name'] . '/mail/' . $this->tableName() . '-' . $this->id . '-images.txt';
         
@@ -305,7 +361,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             return $ret;
         }
         
-        return $r->send($ret);
+        return $r->send();
     }
     
     function cachedMailWithOutImages($force = false, $replace_links = true)
@@ -315,7 +371,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         
         $cachePath = session_save_path() . '/email-cache-' . $ui['name'] . '/mail/' . $this->tableName() . '-' . $this->id . '.txt';
           
-        if (!$force || $this->isGenerated($cachePath)) {
+        if (!$force && $this->isGenerated($cachePath)) {
             return;
         }
         
@@ -331,10 +387,11 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
 
         fwrite($fh, implode("\n", array(
             "From: {if:t.messageFrom}{t.messageFrom:h}{else:}{t.messageFrom():h}{end:}",
-            "To: {if:t.person}{t.person.getEmailFrom():h}{else:}{foreach:rcpts,v}{v:h},{end:}{end:}",
-            "{if:t.replyTo}Reply-To: {t.replyTo:h}{end:}",
+            "To: {if:t.person}{t.person.getEmailFrom():h}{else:}{rcpts:h}{end:}",
             "Subject: {t.subject} ",
-            "X-Message-ID: {t.id} "
+            "X-Message-ID: {t.id} ",
+            "{if:t.replyTo}Reply-To: {t.replyTo:h}{end:}",
+            "{if:t.mailgunVariables}X-Mailgun-Variables: {t.mailgunVariables:h}{end:}"
         ))."\n");
         
         
@@ -430,7 +487,10 @@ Content-Transfer-Encoding: 7bit
     
     function messageFrom()
     {
-        return '"' . addslashes($this->from_name) . '" <' . $this->from_email. '>'  ;
+        if (empty($this->from_name)) {
+            return trim($this->from_email);
+        }
+        return trim('"' . addslashes($this->from_name) . '" <' . $this->from_email. '>')  ;
     }
     
     function formatDate($dt, $format = 'd/M/Y')