This file is part of poMMo (http://www.pommo.org)
poMMo is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
by the Free Software Foundation; either version 2, or any later version.
poMMo is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with program; see the file docs/LICENSE. If not, write to the
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
/** * validateInstallationData * Validates data necessary for installation * * @param array $data.- Data to be validated * * @return boolean True on success, false otherwise */ public static function validateInstallationData($data) { require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; self::$errors = array(); $validator = new Pommo_Validate(); $validator->setPost($data); $validator->addData('list_name', 'Other', false); $validator->addData('site_name', 'Other', false); $validator->addData('site_url', 'Url', false); $validator->addData('admin_password', 'Other', false); $validator->addData('admin_email', 'Email', false); $validator->addPasswordMatch('admin_password', 'admin_password2'); $result = $validator->checkData(); self::$errors = $validator->getErrors(); return $result; }
if (empty($_POST)) { // no validation for exchanger $vMsg = array(); $vMsg['site_url'] = $vMsg['site_success'] = $vMsg['site_confirm'] = Pommo::_T('Must be a valid URL'); $vMsg['list_name'] = $vMsg['site_name'] = Pommo::_T('Cannot be empty.'); $view->assign('vMsg', $vMsg); // populate _POST with info from database (fills in form values...) $dbVals = Pommo_Api::configGet(array('site_success', 'site_confirm', 'list_exchanger', 'list_confirm')); $dbVals['site_url'] = Pommo::$_config['site_url']; $dbVals['site_name'] = Pommo::$_config['site_name']; $dbVals['list_name'] = Pommo::$_config['list_name']; $view->assign($dbVals); } else { // ___ USER HAS SENT FORM ___ require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('list_name', 'Other', false); $validator->addData('site_name', 'Other', false); $validator->addData('site_url', 'Url', false); $validator->addData('site_success', 'Url', true); $validator->addData('site_confirm', 'Url', true); $validator->addData('list_confirm', 'matchRegex', false, '!^(on|off)$!'); $validator->addData('list_exchanger', 'matchRegex', false, '!^(sendmail|mail|smtp)$!'); /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); if ($result = $validator->checkData()) { // __ FORM IS VALID
if ($field['id'] != $_REQUEST['field_id']) { die('bad field ID'); } if (empty($_POST)) { $vMsg = array(); $vMsg['field_name'] = $vMsg['field_prompt'] = Pommo::_T('Cannot be empty.'); $view->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('field_name', 'Other', false); $validator->addData('field_prompt', 'Other', false); $validator->addData('field_required', 'matchRegex', false, '!^(on|off)$!'); $validator->addData('field_active', 'matchRegex', false, '!^(on|off)$!'); if ($result = $validator->checkData()) { // __ FORM IS VALID // TODO -> Which below logic is better? the computed diff, or send all fields for update? /* // make a difference between updated & original field $update = array_diff_assoc(Pommo_Fields::makeDB($_POST),$field); // restore the ID $update['id'] = $field['id']; */ // let MySQL do the difference processing
*********************************/ if (empty($_POST['pommo_signup'])) { Pommo::redirect('login.php'); } $subscriber = array('email' => $_POST['Email'], 'registered' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'status' => 1, 'data' => @$_POST['d']); // ** check for correct email syntax if (!Pommo_Helper::isEmail($subscriber['email'])) { $logger->addErr(Pommo::_T('Invalid Email Address')); } // ** check if email already exists in DB ("duplicates are bad..") if (Pommo_Helper::isDupe($subscriber['email'])) { $logger->addErr(Pommo::_T('Email address already exists. Duplicates are not allowed.')); $smarty->assign('dupe', TRUE); } // check if errors exist with data, if so print results and die. if ($logger->isErr() || !Pommo_Validate::subscriberData($subscriber['data'], array('active' => FALSE))) { $smarty->assign('back', TRUE); $smarty->display('user/process.tpl'); Pommo::kill(); } $comments = isset($_POST['comments']) ? substr($_POST['comments'], 0, 255) : false; /********************************** ADD SUBSCRIBER *********************************/ $config = Pommo_Api::configGet(array('site_success', 'site_confirm', 'list_confirm', 'notices')); $notices = unserialize($config['notices']); require_once Pommo::$_baseDir . 'classes/Pommo_Helper_Messages.php'; if ($config['list_confirm'] == 'on') { // email confirmation required. // add user as "pending" $subscriber['pending_code'] = Pommo_Helper::makeCode();
case 'editSubscriber': if (!is_numeric($_REQUEST['id']) || $_REQUEST['id'] == 0) { $json->fail('ERROR; Bad Subscriber ID Received'); } $subscriber = array('id' => $_REQUEST['id'], 'email' => $_REQUEST['email'], 'data' => $_REQUEST['d']); $validateOptions = array('skipReq' => TRUE, 'active' => FALSE); // check if email is valid if (!Pommo_Helper::isEmail($subscriber['email'])) { $json->fail(Pommo::_T('Invalid email.')); } // check for dupe $lookupID = current(Pommo_Subscribers::getIDByEmail($subscriber['email'], array(1, 2))); if ($lookupID && $lookupID != $subscriber['id']) { $json->fail(Pommo::_T('Email address already exists. Duplicates are not allowed.')); } if (!Pommo_Validate::subscriberData($subscriber['data'], $validateOptions) && !isset($_REQUEST['force'])) { $json->addErr(Pommo::_T('Fields failed validation') . " >>> "); $json->addErr($logger->getAll()); $json->fail(Pommo::_T('Error updating subscriber.')); } if (!Pommo_Subscribers::update($subscriber, 'REPLACE_ALL')) { $json->fail(Pommo::_T('Error updating subscriber.')); } // subscriber updated successfully, build output $out = array('email' => $subscriber['email'], 'id' => $subscriber['id']); // return human readable date formatting require_once Pommo::$_baseDir . 'classes/Pommo_Fields.php'; $dateFields = Pommo_Fields::getByType('date'); foreach ($subscriber['data'] as $k => $val) { $out['d' . $k] = in_array($k, $dateFields) ? Pommo_Helper::timeToStr($val) : htmlspecialchars($val); }
$vMsg['email'] = Pommo::_T('Invalid email address'); $smarty->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ SmartyValidate::connect($smarty); if (SmartyValidate::is_valid($_POST) && !$current) { // __ FORM IS VALID require_once Pommo::$_baseDir . 'classes/Pommo_Mail_Ctl.php'; require_once Pommo::$_baseDir . 'classes/Pommo_Subscribers.php'; require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; // get a copy of the message state // composition is valid (via preview.php) $state = Pommo::$_session['state']['mailing']; // create temp subscriber $subscriber = array('email' => $_POST['email'], 'registered' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'status' => 0, 'data' => $_POST['d']); Pommo_Validate::subscriberData($subscriber['data'], array('active' => FALSE, 'ignore' => TRUE, 'log' => false)); $key = Pommo_Subscribers::add($subscriber); if (!$key) { $logger->addErr('Unable to Add Subscriber'); } else { // temp subscriber created $state['tally'] = 1; $state['group'] = Pommo::_T('Test Mailing'); if ($state['ishtml'] == 'off') { $state['body'] = $state['altbody']; $state['altbody'] = ''; } // create mailing $mailing = Pommo_Mailing::make(array(), TRUE); $state['status'] = 1; $state['current_status'] = 'stopped';
} elseif ($fid == 'registered') { $subscriber['registered'] = Pommo_Helper::timeFromStr($col); } elseif ($fid == 'ip') { $subscriber['ip'] = $col; } } if ($subscriber['email']) { // check for dupe // TODO -- DO THIS IN BATCH ?? if (Pommo_Helper::isDupe($subscriber['email'], $includeUnsubscribed)) { $dupes++; $dupe_emails[] = $subscriber['email']; continue; } // validate/fix data if (!Pommo_Validate::subscriberData($subscriber['data'], array('log' => false, 'ignore' => true, 'active' => false))) { $subscriber['flag'] = 9; } // add subscriber if (Pommo_Subscribers::add($subscriber)) { $tally++; if (isset($subscriber['flag'])) { $flagged++; } } } } unlink(Pommo::$_workDir . '/import.csv'); echo '<div class="warn"><p>' . sprintf(_('%s subscribers imported! Of these, %s' . ' were flagged to update their records.'), $tally, $flagged) . '<p>' . sprintf(_('%s duplicates encountered.'), $dupes) . '</p></div>'; echo "<table>"; foreach ($dupe_emails as $de) {
SETUP TEMPLATE, PAGE *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $view = new Pommo_Template(); $exchanger = current(Pommo_Api::configGet(array('list_exchanger'))); if (empty($_POST)) { // ___ USER HAS NOT SENT FORM ___ $vMsg = array(); $vMsg['email'] = Pommo::_T('Invalid email address'); $view->assign('vMsg', $vMsg); $dbvals = array('exchanger' => $exchanger, 'email' => Pommo::$_config['admin_email']); $view->assign($dbvals); } else { // ___ USER HAS SENT FORM ___ require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('email', 'Email', false); /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); if ($result = $validator->checkData()) { // __ FORM IS VALID require_once Pommo::$_baseDir . 'classes/Pommo_Helper_Messages.php'; $msg = Pommo_Helper_Messages::testExchanger($_POST['email'], $exchanger) ? Pommo::_T('Mail Sent.') : Pommo::_T('Error Sending Mail'); $json->success($msg); } else { // __ FORM NOT VALID $fieldErrors = array();
} if ($_REQUEST['code'] != Pommo_Subscribers::getActCode($subscriber)) { Pommo::kill(Pommo::_T('Invalid activation code.')); } // check if we have pending request if (Pommo_Pending::isPending($subscriber['id'])) { $input = urlencode(serialize(array('Email' => $_POST['Email']))); Pommo::redirect('pending.php?input=' . $input); } $config = Pommo_Api::configGet(array('notices')); $notices = unserialize($config['notices']); if (!isset($_POST['d'])) { $view->assign('d', $subscriber['data']); } // check for an update + validate new subscriber info (also converts dates to ints) if (!empty($_POST['update']) && Pommo_Validate::subscriberData($_POST['d'])) { $newsub = array('id' => $subscriber['id'], 'email' => $subscriber['email'], 'data' => $_POST['d']); if (!empty($_POST['newemail'])) { // if change in email, validate and send confirmation of update if ($_POST['newemail'] != $_POST['newemail2']) { $logger->addErr(Pommo::_T('Emails must match.')); } elseif (!Pommo_Helper::isEmail($_POST['newemail'])) { $logger->addErr(Pommo::_T('Invalid Email Address')); } elseif (Pommo_Helper::isDupe($_POST['newemail'])) { $logger->addMsg(Pommo::_T('Email address already exists. Duplicates are not allowed.')); } else { $newsub['email'] = $_POST['newemail']; $code = Pommo_Pending::add($newsub, 'change'); if (!$code) { die('Failed to Generate Pending Subscriber Code'); }
$logger = Pommo::$_logger; $dbo = Pommo::$_dbo; /********************************** SETUP TEMPLATE, PAGE *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $view = new Pommo_Template(); if (empty($_POST)) { // ___ USER HAS NOT SENT FORM ___ $vMsg = array(); $vMsg['name'] = Pommo::_T('Cannot be empty.'); $view->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ include_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('name', 'Other', false); if ($result = $validator->checkData()) { // __ FORM IS VALID $t = Pommo_Mailing_Template::make(array('name' => $_POST['name'], 'description' => $_POST['description'], 'body' => Pommo::$_session['state']['mailing']['body'], 'altbody' => Pommo::$_session['state']['mailing']['altbody'])); $id = Pommo_Mailing_Template::add($t); if ($id) { $logger->addMsg(sprintf(Pommo::_T('Template %s saved.'), '<strong>' . $_POST['name'] . '</strong>')); $view->assign('success', true); } else { $logger->addMsg(Pommo::_T('Error with addition.')); } } else { // __ FORM NOT VALID $logger->addMsg(Pommo::_T('Please choose a name for your template.'));
return in_array($value, $validCharsets); } if (empty($_POST)) { $vMsg = array(); $vMsg['maxRuntime'] = _('Enter a number.'); $vMsg['list_fromname'] = _('Cannot be empty.'); $vMsg['list_fromemail'] = $vMsg['list_frombounce'] = _('Invalid email address'); $view->assign('vMsg', $vMsg); // populate _POST with info from database (fills in form values...) $dbVals = Pommo_Api::configGet(array('list_fromname', 'list_fromemail', 'list_frombounce', 'list_charset', 'public_history', 'maxRuntime')); $dbVals['demo_mode'] = !empty(Pommo::$_config['demo_mode']) && Pommo::$_config['demo_mode'] == "on" ? 'on' : 'off'; $view->assign($dbVals); } else { // ___ USER HAS SENT FORM ___ require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('list_fromname', 'Other', false); $validator->addData('list_fromemail', 'Email', false); $validator->addData('list_frombounce', 'Email', false); $validator->addData('public_history', 'matchRegex', false, '!^(on|off)$!'); $validator->addData('demo_mode', 'matchRegex', false, '!^(on|off)$!'); $validator->addData('list_fromname', 'Other', false); $_POST['maxRunTime'] = (int) $_POST['maxRunTime']; /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); if ($result = $validator->checkData()) { // __ FORM IS VALID
$p['subscribe_web'] = $messages['subscribe']['web']; $p['subscribe_email'] = $messages['subscribe']['email']; $p['unsubscribe_sub'] = $messages['unsubscribe']['sub']; $p['unsubscribe_msg'] = $messages['unsubscribe']['msg']; $p['unsubscribe_web'] = $messages['unsubscribe']['web']; $p['unsubscribe_email'] = $messages['unsubscribe']['email']; $p['confirm_sub'] = $messages['confirm']['sub']; $p['confirm_msg'] = $messages['confirm']['msg']; $p['activate_sub'] = $messages['activate']['sub']; $p['activate_msg'] = $messages['activate']['msg']; $p['update_sub'] = $messages['update']['sub']; $p['update_msg'] = $messages['update']['msg']; $view->assign($p); } else { require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('subscribe_sub', 'Other', false); $validator->addData('subscribe_msg', 'Other', false); $validator->addData('subscribe_web', 'Other', false); $validator->addData('unsubscribe_sub', 'Other', false); $validator->addData('unsubscribe_msg', 'Other', false); $validator->addData('unsubscribe_web', 'Other', false); $validator->addData('confirm_sub', 'Other', false); $validator->addData('confirm_msg', 'matchRegex', false, '!\\[\\[URL\\]\\]!i'); $validator->addData('activate_sub', 'Other', false); $validator->addData('activate_msg', 'matchRegex', false, '!\\[\\[URL\\]\\]!i'); $validator->addData('update_sub', 'Other', false); $validator->addData('update_msg', 'matchRegex', false, '!\\[\\[URL\\]\\]!i'); $validator->addData('notify_email', 'Email', false); $validator->addData('notify_subscribe', 'matchRegex', false, '!^(on|off)$!');
*********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $view = new Pommo_Template(); $view->assign('title', Pommo::$_config['site_name'] . ' - ' . Pommo::_T('subscriber logon')); if (empty($_POST)) { // ___ USER HAS NOT SENT FORM ___ // Assign email to form if pre-provided if (isset($_REQUEST['Email'])) { $view->assign('Email', $_REQUEST['Email']); } elseif (isset($_REQUEST['email'])) { $view->assign('Email', $_REQUEST['email']); } } else { // ___ USER HAS SENT FORM ___ require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('Email', 'Email', false); if ($result = $validator->checkData()) { if (Pommo_Helper::isDupe($_POST['Email'])) { if (Pommo_Pending::isEmailPending($_POST['Email'])) { $input = urlencode(serialize(array('Email' => $_POST['Email']))); Pommo::redirect('pending.php?input=' . $input); } else { // __ EMAIL IN SUBSCRIBERS TABLE, REDIRECT Pommo::redirect('activate.php?email=' . $_POST['Email']); } } else { // __ REPORT STATUS $logger->addMsg(Pommo::_T('Email address not found! Please try again.')); $logger->addMsg(sprintf(Pommo::_T('To subscribe, %sclick here%s'), '<a href="' . Pommo::$_baseUrl . 'subscribe.php?Email=' . $_POST['Email'] . '">', '</a>'));
// ___ USER HAS NOT SENT FORM ___ $vMsg = array(); $vMsg['fromname'] = $vMsg['subject'] = Pommo::_T('Cannot be empty.'); $vMsg['charset'] = Pommo::_T('Invalid Character Set'); $vMsg['fromemail'] = $vMsg['frombounce'] = Pommo::_T('Invalid email address'); $vMsg['ishtml'] = $vMsg['mailgroup'] = Pommo::_T('Invalid Input'); $view->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); require_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('fromname', 'Other', false); $validator->addData('subject', 'Other', false); $validator->addData('fromemail', 'Email', false); $validator->addData('frombounce', 'Email', false); if ($result = $validator->checkData()) { $json->success(); } else { // __ FORM NOT VALID $fieldErrors = array(); $errors = $validator->getErrors(); foreach ($errors as $key => $val) { $fieldErrors[] = array('field' => $key, 'message' => $val); } $json->add('fieldErrors', $fieldErrors);
$dbo = Pommo::$_dbo; /********************************** SETUP TEMPLATE, PAGE *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $view = new Pommo_Template(); $current = Pommo_Mailing::isCurrent(); if (empty($_POST)) { // ___ USER HAS NOT SENT FORM ___ $vMsg = array(); $vMsg['email'] = Pommo::_T('Invalid email address'); $view->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ include_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; $validator = new Pommo_Validate(); $validator->setPost($_POST); $validator->addData('email', 'Email', false); if ($result = $validator->checkData() && !$current) { // __ FORM IS VALID include_once Pommo::$_baseDir . 'classes/Pommo_Mail_Ctl.php'; include_once Pommo::$_baseDir . 'classes/Pommo_Subscribers.php'; include_once Pommo::$_baseDir . 'classes/Pommo_Validate.php'; // get a copy of the message state // composition is valid (via preview.php) $state = Pommo::$_session['state']['mailing']; // create temp subscriber $subscriber = array('email' => $_POST['email'], 'registered' => time(), 'ip' => $_SERVER['REMOTE_ADDR'], 'status' => 0, 'data' => $_POST['d']); Pommo_Validate::subscriberData($subscriber['data'], array('active' => false, 'ignore' => true, 'log' => false)); $key = Pommo_Subscribers::add($subscriber); if (!$key) {