function sendQueue($pQueueMixed) { global $gBitSmarty, $gBitSystem, $gBitLanguage; static $body = array(); if (is_array($pQueueMixed)) { $pick = $pQueueMixed; } elseif (is_numeric($pQueueMixed)) { $pick = $this->mDb->GetRow("SELECT * FROM `" . BIT_DB_PREFIX . "mail_queue` mq WHERE `mail_queue_id` = ? " . $this->mDb->SQLForUpdate(), array($pQueueMixed)); } if (!empty($pick)) { $startTime = microtime(TRUE); $this->mDb->query("UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `begin_date`=? WHERE `mail_queue_id` = ? ", array(time(), $pick['mail_queue_id'])); if (!empty($pick['user_id'])) { $userHash = $this->mDb->getRow("SELECT * FROM `" . BIT_DB_PREFIX . "users_users` WHERE `user_id`=?", array($pick['user_id'])); $pick['full_name'] = BitUser::getDisplayName(FALSE, $userHash); } else { $pick['full_name'] = NULL; } if (!isset($body[$pick['content_id']])) { $gBitSmarty->assign('sending', TRUE); // We only support sending of newsletters currently $content = new BitNewsletterEdition(NULL, $pick['content_id']); if ($content->load()) { $body[$pick['content_id']]['body'] = $content->render(); $body[$pick['content_id']]['subject'] = $content->getTitle(); $body[$pick['content_id']]['reply_to'] = $content->getField('reply_to', $gBitSystem->getConfig('site_sender_email', $_SERVER['SERVER_ADMIN'])); $body[$pick['content_id']]['object'] = $content; } else { bit_error_log($this->mErrors); } // $content[$pick['content_id']] = LibertyBase::getLibertyObject(); } print "[ {$pick['mail_queue_id']} ] {$pick['content_id']} TO: {$pick['email']}\t"; $unsub = $this->getUnsubscription($pick['email'], $pick['nl_content_id']); if (!empty($unsub)) { print " SKIPPED (unsubscribed) <br/>\n"; $this->mDb->query("DELETE FROM `" . BIT_DB_PREFIX . "mail_queue` WHERE `mail_queue_id`=?", array($pick['mail_queue_id'])); } elseif (!empty($body[$pick['content_id']])) { $pick['url_code'] = md5($pick['content_id'] . $pick['email'] . $pick['queue_date']); $unsub = ''; if ($body[$pick['content_id']]['object']->mNewsletter->getField('unsub_msg')) { $gBitSmarty->assign('url_code', $pick['url_code']); } $gBitSystem->preDisplay(''); $gBitSmarty->assign('sending', TRUE); $gBitSmarty->assign('unsubMessage', $unsub); $gBitSmarty->assign('trackCode', $pick['url_code']); $gBitSmarty->assign('mid', 'bitpackage:newsletters/view_edition.tpl'); $htmlBody = $gBitSmarty->fetch('bitpackage:newsletters/mail_edition.tpl'); $htmlBody = bit_add_clickthrough($htmlBody, $pick['url_code']); $mailer = new PHPMailer(); if ($gBitSystem->getConfig('bitmailer_errors_to')) { $mailer->Sender = $gBitSystem->getConfig('bitmailer_errors_to'); $mailer->addCustomHeader("Errors-To: " . $gBitSystem->getConfig('bitmailer_errors_to')); } $mailer->From = $gBitSystem->getConfig('bitmailer_sender_email', $gBitSystem->getConfig('site_sender_email', $_SERVER['SERVER_ADMIN'])); $mailer->FromName = $gBitSystem->getConfig('bitmailer_from', $gBitSystem->getConfig('site_title')); $mailer->Host = $gBitSystem->getConfig('bitmailer_servers', $gBitSystem->getConfig('kernel_server_name', '127.0.0.1')); $mailer->Mailer = $gBitSystem->getConfig('bitmailer_protocol', 'smtp'); // Alternative to IsSMTP() $mailer->CharSet = 'UTF-8'; if ($gBitSystem->getConfig('bitmailer_smtp_username')) { $mailer->SMTPAuth = TRUE; $mailer->Username = $gBitSystem->getConfig('bitmailer_smtp_username'); } if ($gBitSystem->getConfig('bitmailer_smtp_password')) { $mailer->Password = $gBitSystem->getConfig('bitmailer_smtp_password'); } $mailer->WordWrap = $gBitSystem->getConfig('bitmailer_word_wrap', 75); if (!$mailer->SetLanguage($gBitLanguage->getLanguage(), UTIL_PKG_PATH . 'phpmailer/language/')) { $mailer->SetLanguage('en'); } $mailer->ClearReplyTos(); $mailer->AddReplyTo($body[$pick['content_id']]['reply_to'], $gBitSystem->getConfig('bitmailer_from')); $mailer->Body = $htmlBody; $mailer->Subject = $body[$pick['content_id']]['subject']; $mailer->IsHTML(TRUE); $mailer->AltBody = ''; $mailer->AddAddress($pick['email'], $pick["full_name"]); if ($mailer->Send()) { print " SENT " . round(microtime(TRUE) - $startTime, 2) . " secs<br/>\n"; flush(); $updateQuery = "UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `sent_date`=?,`url_code`=? WHERE `content_id`=? AND `email`=?"; $this->mDb->query($updateQuery, array(time(), $pick['url_code'], $pick['content_id'], $pick['email'])); } else { $updateQuery = "UPDATE `" . BIT_DB_PREFIX . "mail_queue` SET `mail_error`=?,`sent_date`=? WHERE `content_id`=? AND `email`=?"; $this->mDb->query($updateQuery, array($mailer->ErrorInfo, time(), $pick['content_id'], $pick['email'])); $pick['error'] = $mailer->ErrorInfo; $this->logError($pick); } } } }
<?php require_once NEWSLETTERS_PKG_PATH . 'BitNewsletterMailer.php'; global $gBitSystem, $gBitUser; $gBitSystem->verifyPackage('newsletters'); if (!$gBitUser->isRegistered() && !$gBitUser->hasPermission('p_newsletters_subscribe') && empty($_REQUEST["sub"])) { require_once NEWSLETTERS_PKG_PATH . 'lookup_newsletter_inc.php'; /* List newsletters */ $listHash = array(); $newsletters = BitNewsletter::getList($listHash); foreach (array_keys($newsletters) as $contentId) { $listHash = array('nl_id' => $newsletters[$contentId]['nl_id']); $newsletters[$contentId]['editions'] = BitNewsletterEdition::getList($listHash); } $gBitSmarty->assignByRef('subs', BitNewsletter::getUserSubscriptions($gBitUser->getField('user_id'), $gBitUser->getField('email'))); $gBitSmarty->assignByRef('newsletters', $newsletters); }
function getEditions($pNewsletterId = NULL) { $ret = array(); if (empty($pNewsletterId)) { $nlId = $this->mNewsletterId; } elseif (BitBase::verifyId($pNewsletterId)) { $nlId = $pNewsletterId; } if (!empty($nlId)) { $listHash = array('nl_id' => $nlId); $ret = BitNewsletterEdition::getList($listHash); } return $ret; }
<?php /** * Copyright (c) 2005 bitweaver.org * All Rights Reserved. See below for details and a complete list of authors. * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details * * created 2005/12/10 * * @package newsletters * @author spider <*****@*****.**> */ /** * Initialization */ require_once NEWSLETTERS_PKG_PATH . 'BitNewsletterEdition.php'; if (empty($gContent) || !is_object($gContent) || !$gContent->isValid()) { $editionId = !empty($_REQUEST['edition_id']) ? $_REQUEST['edition_id'] : NULL; $conId = !empty($_REQUEST['content_id']) ? $_REQUEST['content_id'] : NULL; $nlId = !empty($_REQUEST['nl_id']) ? $_REQUEST['nl_id'] : NULL; $gContent = new BitNewsletterEdition($editionId, $conId, $nlId); $gContent->load(); $gBitSmarty->assignByRef('gContent', $gContent); }
function getList(&$pListHash) { global $gBitDb; $bindVars = array(); parent::prepGetList($pListHash); $mid = ''; if (@BitBase::verifyId($pListHash['nl_id'])) { $mid .= (empty($mid) ? 'WHERE' : 'AND') . ' n.nl_id=? '; $bindVars[] = $pListHash['nl_id']; } if ($pListHash['find']) { $findesc = '%' . $pListHash['find'] . '%'; $mid .= (empty($mid) ? 'WHERE' : 'AND') . ' (lc.`title` like ? or lc.`data` like ?)'; $bindVars[] = $findesc; $bindVars[] = $findesc; } $query = "SELECT `edition_id` AS `hash_key`, ne.*, lc.*, lc2.`title` AS `newsletter_title`\n\t\t\t\t FROM `" . BIT_DB_PREFIX . "newsletters_editions` ne\n\t\t\t\t \tINNER JOIN `" . BIT_DB_PREFIX . "liberty_content` lc ON( lc.`content_id`=ne.`content_id` )\n\t\t\t\t \tINNER JOIN `" . BIT_DB_PREFIX . "newsletters` n ON( ne.`nl_content_id`=n.`content_id` )\n\t\t\t\t \tLEFT OUTER JOIN `" . BIT_DB_PREFIX . "liberty_content` lc2 ON( n.`content_id`=lc2.`content_id` )\n\t\t\t\t {$mid} ORDER BY " . $gBitDb->convertSortmode($pListHash['sort_mode']); $query_cant = "select count(*) from `" . BIT_DB_PREFIX . "newsletters` n INNER JOIN `" . BIT_DB_PREFIX . "newsletters_editions` ne ON(n.`content_id`=ne.`nl_content_id`) {$mid}"; $ret = $gBitDb->getAssoc($query, $bindVars, $pListHash['max_records'], $pListHash['offset']); foreach (array_keys($ret) as $k) { $ret[$k]['display_url'] = BitNewsletterEdition::getDisplayUrlFromHash($ret[$k]); // remove formating tags $data = preg_replace('/{[^{}]*}/', '', $ret[$k]['data']); // $ret[$k]['parsed'] = BitNewsletterEdition::parseData( $data, $ret[$k]['format_guid'] ); } $pListHash['total_records'] = $gBitDb->getOne($query_cant, $bindVars); $pListHash['block_pages'] = 5; $pListHash['total_pages'] = ceil($pListHash['total_records'] / $pListHash['max_records']); $pListHash['current_page'] = !empty($pListHash['offset']) ? floor($pListHash['offset'] / $pListHash['max_records']) + 1 : 1; return $ret; }