/**
* 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
{
public $from_name;
public $owner_id;
public $is_system;
-
+ public $active;
+ public $bcc_group_id;
+ public $test_class;
+
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
$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
+ ");
+
+
+ if (!empty($_REQUEST['_hide_system_emails'])) {
+ $this->whereAddIn("!{$this->tableName()}.name", array('EVENT_ERRORS_REPORT'), 'string');
+ }
+
}
function beforeDelete($dependants_array, $roo)
$i->ontable = $this->tableName();
$i->find();
while ($i->fetch()){
- $i->beforeDelete();
+ $i->beforeDelete(array(), $roo);
$i->delete();
}
}
$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() && empty($request['_ignore_group_count'])) {
+ $roo->jerr('Failed to create email template - No member found in recieptent group',array('errcode'=> 100));
+ }
+ }
}
function makeCopy($roo)
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
}
- 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');
$element->setAttribute('width', '1');
$element->setAttribute('height', '1');
$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);
}
* convert email with contents into a core mailer object. - ready to send..
* @param Object|Array $obj Object (or array) to send @see Pman_Core_Mailer
* + subject
- * + rcpts
+ * + 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
+ * + person << who it actually goes to..
+ *
* @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) && $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) && $admin_grp->name != 'Empty Group') { // allow 'empty group mname'
+ 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;
+ }
+ 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'])) {
+
+ // 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']);
+ }
+ }
+ }
+
if(!empty($contents['rcpts']) && is_array($contents['rcpts'])){
$contents['rcpts'] = implode(',', $contents['rcpts']);
- }
+ }
$ui = posix_getpwuid(posix_geteuid());
require_once 'Pman/Core/Mailer.php';
$templateDir = session_save_path() . '/email-cache-' . $ui['name'] ;
- //print_r($this);
-
$cfg = array(
'template'=> $this->tableName() . '-' . $this->id,
'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);
}
+ if(isset($contents['css_inline'])){
+ $cfg['css_inline'] = $contents['css_inline'];
+ }
$r = new Pman_Core_Mailer($cfg);
return $r;
}
-
- $ret = $r->toData();
-
- if(!$send){
- return $ret;
+ function toMailerData($obj,$force=false)
+ {
+ $r = $this->toMailer($obj, $force);
+ if (is_a($r, 'PEAR_Error')) {
+ return $r;
}
-
- return $r->send();
-
-
+ return $r->toData();
}
-
/**
*
- * 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
+ * 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)
{
- $contents = (array)$obj;
-
- if(empty($this->id)){
- $this->get('name', $contents['template']);
- }
-
- if(empty($this->id)){
- $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';
-
- if($force || !$this->isGenerated($cachePath)){
- $this->cachedMailWithOutImages($force, empty($contents['replace_links']) ? false : $contents['replace_links']);
- }
-
- require_once 'Pman/Core/Mailer.php';
-
- $templateDir = session_save_path() . '/email-cache-' . $ui['name'] ;
- //print_r($this);
-
-
- $cfg = array(
- 'template'=> $this->tableName() . '-' . $this->id,
- 'templateDir' => $templateDir,
- 'page' => $this,
- '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);
+ if (!$send) {
+ return $this->toMailerData($obj,$force);
}
+ $r = $this->toMailer($obj, $force);
- $r = new Pman_Core_Mailer($cfg);
-
- $imageCache = session_save_path() . '/email-cache-' . $ui['name'] . '/mail/' . $this->tableName() . '-' . $this->id . '-images.txt';
-
- if(file_exists($imageCache) && filesize($imageCache)){
- $images = json_decode(file_get_contents($imageCache), true);
- $r->images = $images;
- }
-
- $ret = $r->toData();
-
- if(!$send){
- return $ret;
+ if (is_a($r, 'PEAR_Error')) {
+ return $r;
}
return $r->send();
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:}"
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()
continue;
}
- $images["attachment-$i->id"] = array(
+ $images["attachment-{$i->id}"] = array(
'file' => $i->getStoreName(),
'mimetype' => $i->mimetype,
'ext' => $y->toExt($i->mimetype),
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();
}
+ // 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);
+
+ }
+
+
+ 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;
+ }
}