DataObjects/Core_email.php
[Pman.Core] / DataObjects / Core_email.php
index 929c84e..ead232f 100644 (file)
@@ -21,11 +21,10 @@ 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,6 +40,27 @@ 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(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
+        ");
     }
     
     function beforeDelete($dependants_array, $roo)
@@ -61,6 +81,24 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             $this->makeCopy($roo);
             
         }
+        
+        if ($this->to_group_id != -1) {
+                  
+            $c = DB_DataObject::factory('core_group_member');            
+            $c->group_id = $this->to_group_id;
+                        
+            if (!$c->count()) {
+                //cannot go to second check
+                if (!empty($request['_ignore_group_count'])) {
+                    if (!$request['_ignore_group_count']) {
+                        $roo->jerr('no_member',array('errcode'=> 100));
+                    }
+                } else {
+                    $roo->jerr('no_member',array('errcode'=> 100));
+                }
+            }
+            
+        }
     }
     
     function makeCopy($roo)
@@ -305,22 +343,25 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         
         $p = new PEAR();
         $contents = (array)$obj;
-
+        
         if(empty($this->id) && !empty($contents['template'])){
             $this->get('name', $contents['template']);
         }
+             
         
         if(empty($this->active)){
             return $p->raiseError("template [{$contents['template']}] is Disabled");
         }
         
+        
         if(empty($this->id)){
             return $p->raiseError("template [{$contents['template']}] has not been set");
         }
         
         // 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['rcpts_group'])) {
+            $admin = DB_DAtaObject::Factory('core_group')->lookupMembersByGroupId($this->bcc_group_id,'email');
             
             if (empty($admin)) {
                 return $p->raiseError("template [{$contents['template']}] - bcc group is empty");
@@ -338,13 +379,20 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             $contents['rcpts'] = $admin;
         }
         
+        //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']);
+            }
+        }
         
         if(!empty($contents['rcpts']) && is_array($contents['rcpts'])){
             $contents['rcpts'] = implode(',', $contents['rcpts']);
-        }
+        }     
         
         $ui = posix_getpwuid(posix_geteuid());
         
@@ -355,8 +403,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         }
          
         require_once 'Pman/Core/Mailer.php';
-        
-                       var_dump('die');exit;        
+              
         
         $templateDir = session_save_path() . '/email-cache-' . $ui['name'] ;
         //print_r($this);
@@ -382,6 +429,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';
@@ -407,7 +458,11 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
      * DEPRICATED !!! - DO NOT USE THIS !!!
      *
      * use: toMailerData() -- to return the email data..
-     * or toMailer($obj, false)->send()
+     * or
+     * $mailer = $core_email->toMailer($obj, false);
+     * $sent = is_a($mailer,'PEAR_Error') ? false : $mailer->send();
+
+     * toMailer($obj, false)->send()
      *
      * 
      */
@@ -481,8 +536,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()
@@ -530,6 +597,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();