DataObjects/Core_email.php
[Pman.Core] / DataObjects / Core_email.php
index 1c628a1..929e608 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Table Definition for core_email
  */
-require_once 'DB/DataObject.php';
+class_exists('DB_DataObject') ? '' : require_once 'DB/DataObject.php';
 
 class Pman_Core_DataObjects_Core_email extends DB_DataObject 
 {
@@ -21,7 +21,7 @@ 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;
     
 
@@ -41,6 +41,29 @@ 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 
+                {$cgm}
+            WHERE 
+                to_group_id = {$cgm}.group_id
+            ) 
+            AS group_member_count,
+            
+           (
+            SELECT 
+                count(user_id) 
+            FROM 
+                {$cgm}
+            WHERE 
+                bcc_group_id = {$cgm}.group_id
+           ) 
+           AS bcc_group_member_count
+        ");
     }
     
     function beforeDelete($dependants_array, $roo)
@@ -61,6 +84,23 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             $this->makeCopy($roo);
             
         }
+        
+        if ($this->to_group != -1) {
+                  
+            $c = DB_DataObject::factory('core_group_member');            
+            $c->whereAdd("group_id = {$this->to_group}");
+                        
+            if (!$c->count()) {
+                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)
@@ -288,6 +328,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
      * @param Object|Array $obj Object (or array) to send @see Pman_Core_Mailer
      *    + subject
      *    + rcpts || person   << if person is set - then it goes to them...
+     *    + rcpts_group (string) << name of group - normally to send admin emails.. (if set, then bcc_group is ignored.)
      *    + replace_links
      *    + template
      *    + mailer_opts
@@ -295,30 +336,65 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
      *    
      * @param bool $force - force re-creation of cached version of email.
      *
-     * @returns Pman_Core_Mailer
+     * @returns Pman_Core_Mailer||PEAR_Error
      */
     
     function toMailer($obj,$force=false)
     {
+        require_once 'PEAR.php';
         
+        $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)){
-            $p = new PEAR();
             return $p->raiseError("template [{$contents['template']}] has not been set");
         }
         
+        // fill in BCC
+        
+        if (!empty($this->bcc_group_id) && 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");
+            }
+            
+            $contents['bcc'] = $admin ;
+        }
+        if (!empty($contents['rcpts_group'])) {
+            
+            $admin = DB_DAtaObject::Factory('core_group')->lookupMembers($contents['rcpts_group'],'email');
+            
+            if (empty($admin)) {
+                return $p->raiseError("Trying to send to {$contents['rcpts_group']} - group is empty");
+            }
+            $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());
         
@@ -329,6 +405,7 @@ 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);
@@ -341,14 +418,19 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
             '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['attachments'])) {
+            $cfg['attachments'] = $contents['attachments'];
+        }
+        
         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';
@@ -372,6 +454,15 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
     /**
      *
      * DEPRICATED !!! - DO NOT USE THIS !!!
+     *
+     * use: toMailerData() -- to return the email data..
+     * or
+     * $mailer = $core_email->toMailer($obj, false);
+     * $sent = is_a($mailer,'PEAR_Error') ? false : $mailer->send();
+
+     * toMailer($obj, false)->send()
+     *
+     * 
      */
     
     function send($obj, $force = true, $send = true)
@@ -379,11 +470,12 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject
         if (!$send) {
             return $this->toMailerData($obj,$force);
         }
+        
         $r = $this->toMailer($obj, $force);
+        
         if (is_a($r, 'PEAR_Error')) {
             return $r;
         }
-         
         
         return $r->send();
     }
@@ -412,7 +504,7 @@ 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:}{rcpts:h}{end:}",
-            "Subject: {t.subject} ",
+            "Subject: {t.subject:h} ",
             "X-Message-ID: {t.id} ",
             "{if:t.replyTo}Reply-To: {t.replyTo:h}{end:}",
             "{if:t.mailgunVariables}X-Mailgun-Variables: {t.mailgunVariables:h}{end:}"
@@ -523,5 +615,30 @@ Content-Transfer-Encoding: 7bit
     } 
     
     
+     // fixme - this is now in core/udatedatabase..
+    
+    function initMail($mail_template_dir,  $name, $master='')
+    {
+        $cm = DB_DataObject::factory('core_email');
+        if ($cm->get('name', $name)) {
+            return;
+        }
+        
+//        $basedir = $this->bootLoader->rootDir . $mail_template_dir;
+        
+        $opts = array();
+        
+        $opts['file'] = $mail_template_dir. $name .'.html';
+        if (!empty($master)) {
+            $opts['master'] = $mail_template_dir . $master .'.html';
+        }
+        print_r($opts);
+        require_once 'Pman/Core/Import/Core_email.php';
+        $x = new Pman_Core_Import_Core_email();
+        $x->get('', $opts);
+         
+    }
+    
+    
     
 }