function replace(&$msg, &$s, &$personalizations) { $subject = $msg; foreach ($personalizations as $p) { // lookup replace string switch (strtolower($p['field'])) { case 'email': $replace = $s['email']; break; case 'ip': $replace = $s['ip']; break; case 'registered': $replace = $s['registered']; break; case '!unsubscribe': $replace = $GLOBALS['pommo']->_http . $GLOBALS['pommo']->_baseUrl . 'user/update.php?email=' . $s['email'] . '&code=' . PommoSubscriber::getActCode($s); break; case '!weblink': $replace = $GLOBALS['pommo']->_http . $GLOBALS['pommo']->_baseUrl . 'user/mailings.php?mail_id=' . $_GET['id'] . '&id=' . $_GET['id'] . '&email=' . $s['email'] . '&code=' . PommoSubscriber::getActCode($s); break; case '!subscriber_id': $replace = $s['id']; break; case '!mailing_id': $replace = $_GET['id']; break; default: if (isset($p['field_id'])) { $replace = $s['data'][$p['field_id']]; } break; } // attempt to add default if replacement is empty if (empty($replace)) { $replace = $p['default']; } $subject = str_replace($p['search'], $replace, $subject); } return $subject; }
$smarty = new PommoTemplate(); $smarty->assign('title', $pommo->_config['site_name'] . ' - ' . Pommo::_T('Mailing History')); /** SET PAGE STATE * limit - # of mailings per page * sort - Sorting of Mailings [subject, started] * order - Order Type (ascending - ASC /descending - DESC) */ // Initialize page state with default values overriden by those held in $_REQUEST $state =& PommoAPI::stateInit('mailings_history', array('limit' => 100, 'sort' => 'finished', 'order' => 'asc', 'page' => 1), $_REQUEST); // if mail_id is passed, display the mailing. if (isset($_GET['mail_id']) && is_numeric($_GET['mail_id'])) { $input = current(PommoMailing::get(array('id' => $_GET['mail_id']))); // attempt personalizations of body/subject if (isset($_GET['email']) && isset($_GET['code'])) { $subscriber = current(PommoSubscriber::get(array('email' => $_GET['email'], 'status' => 1))); if ($_GET['code'] == PommoSubscriber::getActCode($subscriber)) { Pommo::requireOnce($pommo->_baseDir . 'inc/helpers/personalize.php'); // require once here so that mailer can use Pommo::requireOnce($pommo->_baseDir . 'inc/helpers/personalizetitle.php'); // title personalization $matches1 = array(); preg_match('/\\[\\[[^\\]]+]]/', $input['body'], $matches1); if (!empty($matches1)) { $pBody = PommoHelperPersonalize::search($input['body']); $input['body'] = PommoHelperPersonalize::replace($input['body'], $subscriber, $pBody); } $matches2 = array(); preg_match('/\\[\\[[^\\]]+]]/', $input['altbody'], $matches2); if (!empty($matches2)) { $pAltBody = PommoHelperPersonalize::search($input['altbody']); $input['altbody'] = PommoHelperPersonalize::replace($input['altbody'], $subscriber, $pAltBody);
SETUP TEMPLATE, PAGE *********************************/ Pommo::requireOnce($pommo->_baseDir . 'inc/classes/template.php'); $smarty = new PommoTemplate(); // make sure email/login is valid $subscriber = current(PommoSubscriber::get(array('email' => empty($_REQUEST['email']) ? '0' : $_REQUEST['email'], 'status' => 1))); if (empty($subscriber)) { Pommo::redirect('login.php'); } // see if an anctivation email was sent to this subscriber in the last 2 minutes; $query = "\n\tSELECT \n\t\t*\n\tFROM \n\t\t" . $dbo->table['scratch'] . "\n\tWHERE\n\t\t`type`=1\n\t\tAND `int`=%i\n\t\tAND `time` > (NOW() - INTERVAL 2 MINUTE)\n\tLIMIT 1"; $query = $dbo->prepare($query, array($subscriber['id'])); $test = $dbo->query($query, 0); // attempt to send activation code if once has not recently been sent if (empty($test)) { $code = PommoSubscriber::getActCode($subscriber); if (PommoHelperMessages::sendMessage(array('to' => $subscriber['email'], 'code' => $code, 'type' => 'activate'))) { $smarty->assign('sent', true); // timestamp this activation email $query = "\n\t\t\tINSERT INTO " . $dbo->table['scratch'] . "\n\t\t\tSET\n\t\t\t\t`type`=1,\n\t\t\t\t`int`=%i"; $query = $dbo->prepare($query, array($subscriber['id'])); $dbo->query($query); // remove ALL activation email timestamps older than 2 minutes $query = "\n\t\t\tDELETE FROM \n\t\t\t\t" . $dbo->table['scratch'] . "\n\t\t\tWHERE\n\t\t\t\t`type`=1\n\t\t\t\tAND `time` < (NOW() - INTERVAL 2 MINUTE)"; $query = $dbo->prepare($query, array()); $dbo->query($query); } } else { $smarty->assign('sent', false); } $smarty->assign('email', $subscriber['email']);
$pommo->init(array('authLevel' => 0, 'noSession' => true)); $logger =& $pommo->_logger; $dbo =& $pommo->_dbo; /********************************** SETUP TEMPLATE, PAGE *********************************/ Pommo::requireOnce($pommo->_baseDir . 'inc/classes/template.php'); $smarty = new PommoTemplate(); // Prepare for subscriber form -- load in fields + POST/Saved Subscribe Form $smarty->prepareForSubscribeForm(); // fetch the subscriber, validate code $subscriber = current(PommoSubscriber::get(array('email' => empty($_REQUEST['email']) ? '0' : $_REQUEST['email'], 'status' => 1))); if (empty($subscriber)) { Pommo::redirect('login.php'); } if ($_REQUEST['code'] != PommoSubscriber::getActCode($subscriber)) { Pommo::kill(Pommo::_T('Invalid activation code.')); } // check if we have pending request if (PommoPending::isPending($subscriber['id'])) { $input = urlencode(serialize(array('Email' => $_POST['Email']))); Pommo::redirect('pending.php?input=' . $input); } $config = PommoAPI::configGet(array('notices')); $notices = unserialize($config['notices']); if (!isset($_POST['d'])) { $smarty->assign('d', $subscriber['data']); } // check for an update + validate new subscriber info (also converts dates to ints) if (!empty($_POST['update']) && PommoValidate::subscriberData($_POST['d'])) { $newsub = array('id' => $subscriber['id'], 'email' => $subscriber['email'], 'data' => $_POST['d']);