typo
[Pman.Core] / DataObjects / Core_email.php
index 2144a68..02ce342 100644 (file)
@@ -21,12 +21,9 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
     public $owner_id;
     public $is_system;
     public $active;
-    public $bcc_group;
+    public $bcc_group_id;
     public $test_class;
-    
-
-    
-
+     
     /* the code above is auto generated do not remove the tag below */
     ###END_AUTOCODE
     
@@ -41,18 +38,33 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
                 $tn.subject LIKE '%{$this->escape($q['search']['nameortitle'])}%'
             ");
         }
-        
+        $cgm = DB_DataObject::Factory('core_group_member')->tableName();;
+      
         $this->selectAdd("
-           (
-            SELECT 
-                count(user_id) 
-            FROM 
-                core_group_member 
-            WHERE 
-                to_group_id = core_group_member.group_id
-            ) 
-            AS group_member_count
+            (
+                SELECT 
+                    count(id) 
+                FROM 
+                    {$cgm}
+                WHERE 
+                    to_group_id = {$cgm}.group_id
+            )  AS group_member_count,
+            
+            (
+                SELECT 
+                    count(id) 
+                FROM 
+                    {$cgm}
+                WHERE 
+                    bcc_group_id = {$cgm}.group_id
+            )  AS bcc_group_member_count
         ");
+
+       
+       if (!empty($_REQUEST['_hide_system_emails'])) {
+           $this->whereAddIn("!{$this->tableName()}.name", array('EVENT_ERRORS_REPORT'), 'string');
+       }
+       
     }
     
     function beforeDelete($dependants_array, $roo)
@@ -62,7 +74,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         $i->ontable = $this->tableName();
         $i->find();
         while ($i->fetch()){
-            $i->beforeDelete();
+            $i->beforeDelete(array(), $roo);
             $i->delete();
         }
     }
@@ -74,14 +86,13 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             
         }
         
-        if ($this->to_group != -1) {
+        if ($this->to_group_id != -1) {
                   
             $c = DB_DataObject::factory('core_group_member');            
-            $c->whereAdd("group_id = {$this->to_group}");
-            print_r($request['_ignore_group_count']);
-            print_r($c->count());exit;            
-            if ($c->count() && empty($request['_ignore_group_count'])) {
-                $roo->jerr('no_member',array('errcode'=> 100));
+            $c->group_id = $this->to_group_id;
+                        
+            if (!$c->count() && empty($request['_ignore_group_count'])) {
+                $roo->jerr('Failed to create email template - No member found in recieptent group',array('errcode'=> 100));
             }
         }
     }
@@ -248,6 +259,10 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             if (!$replace_links) {
                 continue;
             }
+           if (empty($cfg)) {
+               continue;
+           }
+           // not available if server_baseurl not set... and crm module not used.
             $link = DB_DataObject::factory('crm_mailing_list_link');
             $link->setFrom(array(
                 'url' => $href
@@ -267,7 +282,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             
         }
         
-        if(!empty($unsubscribe)){
+        if(!empty($unsubscribe) && !empty($cfg)){
             $element = $doc->createElement('img');
             $element->setAttribute('mailembed', 'no');
             $element->setAttribute('src', $cfg ['server_baseurl']  . '/Crm/Open/' . $this->id . '/{person.id}.html');
@@ -279,7 +294,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
                 $html->item(0)->appendChild($element);
             }
             
-            $this->plaintext = str_replace("{unsubscribe_link}", $unsubscribe, $this->plaintext);
+            $this->plaintext = str_replace("{unsubscribe_link}", $unsubscribe, empty($this->plaintext) ? '' : $this->plaintext);
         }
         
         
@@ -345,10 +360,12 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         
         // fill in BCC
         
-        if (!empty($this->bcc_group) && empty($contents['rcpts_group'])) {
-            $admin = DB_DAtaObject::Factory('core_group')->lookupMembersByGroupId($this->bcc_group,'email');
+        if (!empty($this->bcc_group_id) && $this->bcc_group_id > 0 && empty($contents['bcc']) && empty($contents['rcpts_group'])) {
+            $admin_grp = DB_DAtaObject::Factory('core_group')->load($this->bcc_group_id);
+           
+           $admin = $admin_grp ?  $admin_grp->members('email') : false;
             
-            if (empty($admin)) {
+            if (empty($admin) && $admin_grp->name != 'Empty Group') { // allow 'empty group mname'
                 return $p->raiseError("template [{$contents['template']}] - bcc group is empty");
             }
             
@@ -363,15 +380,33 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             }
             $contents['rcpts'] = $admin;
         }
-        
+        if (empty($contents['rcpts']) && $this->to_group_id > 0) {
+           $members = $this->to_group()->members();
+           $contents['rcpts'] = array();
+           foreach($this->to_group()->members() as $m) {
+               $contents['rcpts'][] = $m->email;
+           }
+           //var_dump($contents['rcpts']);
+           
+       }
         //subject replacement
         if(empty($contents['subject'])){
            $contents['subject'] = $this->subject; 
         }
-
+        
         if (!empty($contents['subject_replace'])) {
-            foreach ($contents['mapping'] as $pattern => $replace) {
-                $contents['subject'] = preg_replace($pattern,$replace,$contents['subject']);
+            
+            // do not use the mapping 
+            if (isset($contents['mapping'])) {
+                foreach ($contents['mapping'] as $pattern => $replace) {
+                    $contents['subject'] = preg_replace($pattern,$replace,$contents['subject']);
+                }
+            }
+            
+            foreach ($contents as $k => $v) {
+                if (is_string($v)) {
+                    $contents['subject'] = str_replace('{'. $k . '}', $v, $contents['subject']);
+                }
             }
         }
         
@@ -388,11 +423,8 @@ 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);
-        
         
         $cfg = array(
             'template'=> $this->tableName() . '-' . $this->id,
@@ -414,6 +446,10 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             $cfg = array_merge($contents['mailer_opts'], $cfg);
         }
         
+        if(isset($contents['css_inline'])){
+            $cfg['css_inline'] = $contents['css_inline'];
+        }
+        
         $r = new Pman_Core_Mailer($cfg);
         
         $imageCache = session_save_path() . '/email-cache-' . $ui['name'] . '/mail/' . $this->tableName() . '-' . $this->id . '-images.txt';
@@ -517,8 +553,20 @@ Content-Transfer-Encoding: 7bit
             mkdir(dirname($cachePath), 0700, true);
         }
         
-        file_put_contents($cachePath, $this->bodytext);
+        if (empty($this->use_file)) {
+            file_put_contents($cachePath, $this->bodytext);
+            return;
+        }
+        // use-file -- uses the original template...
+        $mailtext = file_get_contents($this->use_file);        
+         
+        require_once 'Mail/mimeDecode.php';
+        require_once 'Mail/RFC822.php';
         
+        $decoder = new Mail_mimeDecode($mailtext);
+        $parts = $decoder->getSendArray();
+        file_put_contents($cachePath,$parts[2]);
+         
     }
     
     function cachedImages()
@@ -566,6 +614,17 @@ Content-Transfer-Encoding: 7bit
             return false;
         }
         
+        if (!empty($this->use_file)) {
+            $ctime = filemtime($cachePath);
+            $mtime = filemtime($this->use_file);
+            if($ctime >= $mtime){
+                return true;
+            }
+            return false;
+            
+        }
+        
+        
         
         $ctime = filemtime($cachePath);
         $mtime = array();
@@ -615,7 +674,7 @@ Content-Transfer-Encoding: 7bit
         if (!empty($master)) {
             $opts['master'] = $mail_template_dir . $master .'.html';
         }
-        print_r($opts);
+        //print_r($opts);
         require_once 'Pman/Core/Import/Core_email.php';
         $x = new Pman_Core_Import_Core_email();
         $x->get('', $opts);
@@ -623,5 +682,45 @@ Content-Transfer-Encoding: 7bit
     }
     
     
+    function testData($person, $dt , $core_notify)
+    {
+        
+       // should return the formated email???
+       $pg = HTML_FlexyFramework::get()->page;
+       
+        
+       
+       
+        if(empty($this->test_class)){
+            $pg->jerr("[{$this->name}] does not has test class");
+        }
+        
+        require_once "{$this->test_class}.php";
+        
+        $cls = str_replace('/', '_', $this->test_class);
+        
+        $x = new $cls;
+        
+        $method = "test_{$this->name}";
+        
+        if(!method_exists($x, $method)){
+            $pg->jerr("{$method} does not exists in {$cls}");
+        }
+        
+        $content = $x->{$method}($this, $person);
+        $content['to'] = $person->getEmailFrom();
+
+        $content['bcc'] = array();
+       $data = $this->toMailerData($content);
+       return $data;
+        
+           
+    }
     
+    function to_group()
+    {
+       $g = DB_DataObject::Factory('core_group');
+       $g->get($this->to_group_id);
+       return $g;
+    }
 }