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.
예제 #1
0
 /**
  * 	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;
 }
예제 #2
0
파일: general.php 프로젝트: soonick/poMMo
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
예제 #3
0
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
예제 #4
0
 *********************************/
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();
예제 #5
0
 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);
     }
예제 #6
0
    $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';
예제 #7
0
        } 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) {
예제 #8
0
	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();
예제 #9
0
파일: update.php 프로젝트: soonick/poMMo
}
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');
            }
예제 #10
0
$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.'));
예제 #11
0
파일: mailings.php 프로젝트: soonick/poMMo
    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
예제 #12
0
파일: messages.php 프로젝트: soonick/poMMo
    $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)$!');
예제 #13
0
파일: login.php 프로젝트: soonick/poMMo
 *********************************/
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>'));
예제 #14
0
파일: setup.php 프로젝트: soonick/poMMo
    // ___ 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);
예제 #15
0
$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) {