X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=DataObjects%2FCore_email.php;h=78f21462993769d6f7f056578cd8937666284ca6;hp=88b8112ac95f2b9e7f0ed2de48b667d1bf1b442d;hb=5d4ac076dc4f620fbb91944eead3e0af66216a03;hpb=9ca671196c337249634e21a79b510219c522d344 diff --git a/DataObjects/Core_email.php b/DataObjects/Core_email.php index 88b8112a..78f21462 100644 --- a/DataObjects/Core_email.php +++ b/DataObjects/Core_email.php @@ -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 { @@ -20,6 +20,12 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject public $from_name; public $owner_id; public $is_system; + public $active; + public $bcc_group; + public $test_class; + + + /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE @@ -188,18 +194,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'); @@ -236,7 +246,7 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject if(!empty($unsubscribe)){ $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'); @@ -259,38 +269,74 @@ 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; + } + /** + * 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 || 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. * - * Usage: - * $this->rcpts = array('sales@roojs.com'); - * // or - * $this->rcpts = "Tester "; - * - * - * // then send it.. - * $x = DB_DataObject::factory('core_enum'); - * $x->get('name', 'NAME OF TEMPLATE'); - * $x->send(array( - * 'rcpts' => "Tester ", - * 'page' => $this - * 'link' => 'http://......' - ); - * // on the template use {link:h} to render the link - * - * + * @returns Pman_Core_Mailer||PEAR_Error */ - function send($obj, $force = true, $send = true) - { + + function toMailer($obj,$force=false) + { + $p = new PEAR(); $contents = (array)$obj; - if(empty($this->id)){ + + 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) && empty($contents['rcpts_group'])) { + $admin = DB_DAtaObject::Factory('core_group')->lookupMembersByGroupId($this->bcc_group,'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; + } + if(empty($contents['subject'])){ $contents['subject'] = $this->subject; } @@ -311,15 +357,22 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject $templateDir = session_save_path() . '/email-cache-' . $ui['name'] ; //print_r($this); + + $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); @@ -330,11 +383,32 @@ class Pman_Core_DataObjects_Core_email extends DB_DataObject $r->images = $images; } - $ret = $r->toData(); - - if(!$send){ - return $ret; + return $r; + } + function toMailerData($obj,$force=false) + { + $r = $this->toMailer($obj, $force); + if (is_a($r, 'PEAR_Error')) { + return $r; + } + return $r->toData(); + } + + /** + * + * DEPRICATED !!! - DO NOT USE THIS !!! + */ + + function send($obj, $force = true, $send = true) + { + if (!$send) { + return $this->toMailerData($obj,$force); } + $r = $this->toMailer($obj, $force); + if (is_a($r, 'PEAR_Error')) { + return $r; + } + return $r->send(); } @@ -363,10 +437,10 @@ 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.mailgun-variables}X-Mailgun-Variables: {t.t.mailgun-variables:h}{end:}" + "{if:t.mailgunVariables}X-Mailgun-Variables: {t.mailgunVariables:h}{end:}" ))."\n"); @@ -424,7 +498,7 @@ Content-Transfer-Encoding: 7bit continue; } - $images["attachment-$i->id"] = array( + $images["attachment-{$i->id}"] = array( 'file' => $i->getStoreName(), 'mimetype' => $i->mimetype, 'ext' => $y->toExt($i->mimetype), @@ -474,5 +548,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); + + } + + }