function __construct($groupID = NULL, $status = 1, $filter = FALSE) { $this->_status = $status; if (!is_numeric($groupID)) { // exception if no group ID was passed -- group assumes "all subscribers". require_once Pommo::$_baseDir . 'classes/Pommo_Subscribers.php'; $this->_group = array('rules' => array(), 'id' => 0); $this->_id = 0; $this->_name = Pommo::_T('All Subscribers'); $this->_memberIDs = is_array($filter) ? Pommo_Groups::getMemberIDs($this->_group, $status, $filter) : null; $this->_tally = is_array($filter) ? count($this->_memberIDs) : Pommo_Subscribers::tally($status); return; } $this->_group = current(Pommo_Groups::get(array('id' => $groupID))); $this->_id = $groupID; $this->_name =& $this->_group['name']; $this->_memberIDs = Pommo_Groups::getMemberIDs($this->_group, $status, $filter); $this->_tally = count($this->_memberIDs); return; }
SmartyValidate::register_validator('mailgroup', 'mailgroup:/(all|\\d+)/i', 'isRegExp', false, false, 'trim'); SmartyValidate::register_validator('list_charset', 'list_charset', 'isCharSet', false, false, 'trim'); $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'); $smarty->assign('vMsg', $vMsg); } else { // ___ USER HAS SENT FORM ___ /********************************** JSON OUTPUT INITIALIZATION *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Json.php'; $json = new Pommo_Json(); SmartyValidate::connect($smarty); if (SmartyValidate::is_valid($_POST)) { // __ FORM IS VALID SmartyValidate::disconnect(); $json->success(); } else { // __ FORM NOT VALID $json->add('fieldErrors', $smarty->getInvalidFields()); $json->fail(Pommo::_T('Please review and correct errors with your submission.')); } } $mailgroups = explode(',', $state['mailgroup']); $smarty->assign('mailgroups', $mailgroups); $smarty->assign('groups', Pommo_Groups::get()); $smarty->assign($state); $smarty->display('admin/mailings/mailing/setup.tpl');
} if ($state['order'] != 'asc' && $state['order'] != 'desc') { $state['order'] = 'asc'; } if (!is_numeric($state['sort']) && $state['sort'] != 'email' && $state['sort'] != 'ip' && $state['sort'] != 'time_registered' && $state['sort'] != 'time_touched') { $state['sort'] = 'email'; } if (!is_numeric($state['status'])) { $state['status'] = 1; } if (!is_numeric($state['group']) && $state['group'] != 'all') { $state['group'] = 'all'; } if (isset($_REQUEST['searchClear'])) { $state['search'] = false; } elseif (isset($_REQUEST['searchField']) && (is_numeric($_REQUEST['searchField']) || $_REQUEST['searchField'] == 'email' || $_REQUEST['searchField'] == 'ip' || $_REQUEST['searchField'] == 'time_registered' || $_REQUEST['searchField'] == 'time_touched')) { $_REQUEST['searchString'] = trim($_REQUEST['searchString']); $state['search'] = empty($_REQUEST['searchString']) ? false : array('field' => $_REQUEST['searchField'], 'string' => trim($_REQUEST['searchString'])); } /********************************** DISPLAY METHODS *********************************/ // Get the *empty* group [no member IDs. 3rd arg is set TRUE] $group = new Pommo_Groups($state['group'], $state['status'], $state['search']); // Calculate and Remember number of pages for this group/status combo $state['pages'] = is_numeric($group->_tally) && $group->_tally > 0 ? ceil($group->_tally / $state['limit']) : 0; $view->assign('state', $state); $view->assign('tally', $group->_tally); $view->assign('groups', Pommo_Groups::get()); $view->assign('fields', Pommo_Fields::get()); $view->display('admin/subscribers/subscribers_manage');
public static function groupSQL($group, $tally = false, $status = 1, $filter = false) { // used to prevent against group include/exclude recursion static $groups; if (!isset($groups[$group['id']])) { $groups[$group['id']] = TRUE; } global $pommo; $dbo =& Pommo::$_dbo; $rules = Pommo_Sql::sortRules($group['rules']); $ands = Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['and'])); $ors = empty($rules['or']) ? array() : Pommo_Sql::getSubQueries(Pommo_Sql::sortLogic($rules['or'])); $sql = $tally ? 'SELECT count(subscriber_id) ' : 'SELECT subscriber_id '; $sql .= "\n FROM {$dbo->table['subscribers']}\n WHERE status=" . intval($status); $q = FALSE; if (!empty($ands)) { $sql .= " AND (\n"; foreach ($ands as $k => $s) { if ($k != 0) { $sql .= "\n AND "; } $sql .= $s; } foreach ($ors as $s) { $sql .= "\n OR {$s}"; } $sql .= "\n)"; $q = TRUE; } foreach ($rules['exclude'] as $gid) { if (!isset($groups[$gid])) { $sql .= "\nAND subscriber_id NOT IN (\n"; $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid)))); $sql .= "\n)"; } $q = TRUE; } foreach ($rules['include'] as $gid) { if (!isset($groups[$gid])) { $sql .= "\n" . ($q ? 'OR' : 'AND') . " subscriber_id IN (\n"; $sql .= Pommo_Sql::groupSQL(current(Pommo_Groups::get(array('id' => $gid)))); $sql .= "\n)"; } $q = TRUE; } // If a filter/search is requested, perform a match if (is_array($filter) && !empty($filter['field']) && !empty($filter['string'])) { // make MySQL LIKE() compliant $filter['string'] = mysql_real_escape_string(addcslashes($filter['string'], '%_')); $sql .= is_numeric($filter['field']) ? "\n AND subscriber_id in (select subscriber_id from {$dbo->table['subscriber_data']} WHERE field_id = " . (int) $filter['field'] . " AND value LIKE '%{$filter['string']}%')" : "\n AND " . mysql_real_escape_string($filter['field']) . " LIKE '%{$filter['string']}%'"; } return $sql; }
require_once Pommo::$_baseDir . 'classes/Pommo_Sql.php'; require_once Pommo::$_baseDir . 'classes/Pommo_Groups.php'; require_once Pommo::$_baseDir . 'classes/Pommo_Fields.php'; require_once Pommo::$_baseDir . 'classes/Pommo_Rules.php'; Pommo::init(); $logger = Pommo::$_logger; $dbo = Pommo::$_dbo; /********************************** SETUP TEMPLATE, PAGE *********************************/ require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $view = new Pommo_Template(); $view->assign('returnStr', _('Groups Page')); // Initialize page state with default values overriden by those held in $_REQUEST $state =& Pommo_Api::stateInit('groups_edit', array('group' => 0), $_REQUEST); $groups = Pommo_Groups::get(); $fields = Pommo_Fields::get(); $group =& $groups[$state['group']]; if (empty($group)) { Pommo::redirect('subscribers_groups.php'); } $rules = Pommo_Sql::sortRules($group['rules']); $rules['and'] = Pommo_Sql::sortLogic($rules['and']); $rules['or'] = Pommo_Sql::sortLogic($rules['or']); foreach ($rules as $key => $a) { if ($key == 'include' || $key == 'exclude') { foreach ($a as $k => $gid) { $rules[$key][$k] = $groups[$gid]['name']; } } }
require_once Pommo::$_baseDir . 'classes/Pommo_Template.php'; $smarty = new Pommo_Template(); $smarty->prepareForForm(); // add group if requested if (!empty($_POST['group_name'])) { if (Pommo_Groups::nameExists($_POST['group_name'])) { $logger->addMsg(sprintf(Pommo::_T('Group name (%s) already exists'), $_POST['group_name'])); } else { $group = Pommo_Groups::make(array('name' => $_POST['group_name'])); $id = Pommo_Groups::add($group); $id ? Pommo::redirect("groups_edit.php?group={$id}") : $logger->addMsg(Pommo::_T('Error with addition.')); } } if (!empty($_GET['delete'])) { // make sure it is a valid group $group = current(Pommo_Groups::get(array('id' => $_GET['group_id']))); if (empty($group)) { Pommo::redirect($_SERVER['PHP_SELF']); } $affected = Pommo_Groups::rulesAffected($group['id']); // See if this change will affect any subscribers, if so, confirm the change. if ($affected > 1 && empty($_GET['dVal-force'])) { $smarty->assign('confirm', array('title' => Pommo::_T('Confirm Action'), 'nourl' => $_SERVER['PHP_SELF'] . '?group_id=' . $_GET['group_id'], 'yesurl' => $_SERVER['PHP_SELF'] . '?group_id=' . $_GET['group_id'] . '&delete=TRUE&dVal-force=TRUE', 'msg' => sprintf(Pommo::_T('%1$s filters belong this group . Are you sure you want to remove %2$s?'), '<b>' . $affected . '</b>', '<b>' . $group['name'] . '</b>'))); $smarty->display('admin/confirm.tpl'); Pommo::kill(); } else { // delete group if (!Pommo_Groups::delete($group['id'])) { $logger->addMsg(Pommo::_T('Group cannot be deleted.')); } else { $logger->addMsg(sprintf(Pommo::_T('%s deleted.'), $group['name']));
case 'is': case 'not': case 'less': case 'greater': $values = array_unique($_REQUEST['match']); $type = $_REQUEST['type'] == 'or' ? 'or' : 'and'; Pommo_Rules::addFieldRule($state['group'], $_REQUEST['field'], $_REQUEST['logic'], $values, $type); break; } $json->add('callbackFunction', 'redirect'); $json->add('callbackParams', Pommo::$_baseUrl . 'groups_edit.php'); $json->serve(); break; case 'updateRule': require_once Pommo::$_baseDir . 'classes/Pommo_Sql.php'; $group =& current(Pommo_Groups::get(array('id' => $state['group']))); $rules = Pommo_Sql::sortRules($group['rules']); switch ($_REQUEST['request']) { case 'update': if ($_REQUEST['type'] == 'or' && count($rules['and']) < 2) { $json->add('callbackFunction', 'resume'); $json->success(Pommo::_T('At least 1 "and" rule must exist before an "or" rule takes effect.')); } Pommo_Rules::changeType($group['id'], $_REQUEST['fieldID'], $_REQUEST['logic'], $_REQUEST['type']); break; case 'delete': Pommo_Rules::deleteRule($group['id'], $_REQUEST['fieldID'], $_REQUEST['logic']); break; } $json->add('callbackFunction', 'redirect'); $json->add('callbackParams', Pommo::$_baseUrl . 'groups_edit.php');