function &getNotificationsConf(&$params) { static $nConf = null; if ($nConf !== null) { return $nConf; } // (a) Check if notifications are not enabled if (!$params->get('enable_notifications', 0)) { $nConf = false; return $nConf; } $db = JFactory::getDBO(); $nConf = new stdClass(); // (b) Get Content Type specific notifications (that override global) $nConf->userlist_notify_new = FLEXIUtilities::paramToArray($params->get('userlist_notify_new'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $nConf->usergrps_notify_new = FLEXIUtilities::paramToArray($params->get('usergrps_notify_new', array())); $nConf->usergrps_notify_new_fa = FLEXIUtilities::paramToArray($params->get('usergrps_notify_new_fa', array())); $nConf->userlist_notify_new_pending = FLEXIUtilities::paramToArray($params->get('userlist_notify_new_pending'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $nConf->usergrps_notify_new_pending = FLEXIUtilities::paramToArray($params->get('usergrps_notify_new_pending', array())); $nConf->usergrps_notify_new_pending_fa = FLEXIUtilities::paramToArray($params->get('usergrps_notify_new_pending_fa', array())); $nConf->userlist_notify_existing = FLEXIUtilities::paramToArray($params->get('userlist_notify_existing'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $nConf->usergrps_notify_existing = FLEXIUtilities::paramToArray($params->get('usergrps_notify_existing', array())); $nConf->usergrps_notify_existing_fa = FLEXIUtilities::paramToArray($params->get('usergrps_notify_existing_fa', array())); $nConf->userlist_notify_existing_reviewal = FLEXIUtilities::paramToArray($params->get('userlist_notify_existing_reviewal'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $nConf->usergrps_notify_existing_reviewal = FLEXIUtilities::paramToArray($params->get('usergrps_notify_existing_reviewal', array())); $nConf->usergrps_notify_existing_reviewal_fa = FLEXIUtilities::paramToArray($params->get('usergrps_notify_existing_reviewal_fa', array())); // (c) Get category specific notifications if ($params->get('nf_allow_cat_specific')) { $cats = $this->get('categories'); $query = "SELECT params FROM #__categories WHERE id IN (" . implode(',', $cats) . ")"; $db->setQuery($query); $mcats_params = FLEXI_J16GE ? $db->loadColumn() : $db->loadResultArray(); foreach ($mcats_params as $cat_params) { $cat_params = FLEXI_J16GE ? new JRegistry($cat_params) : new JParameter($cat_params); if (!$cat_params->get('cats_enable_notifications', 0)) { continue; } // Skip this category if category-specific notifications are not enabled for this category $cats_userlist_notify_new = FLEXIUtilities::paramToArray($cat_params->get('cats_userlist_notify_new'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $cats_usergrps_notify_new = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_new', array())); $cats_usergrps_notify_new_fa = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_new_fa', array())); $cats_userlist_notify_new_pending = FLEXIUtilities::paramToArray($cat_params->get('cats_userlist_notify_new_pending'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $cats_usergrps_notify_new_pending = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_new_pending', array())); $cats_usergrps_notify_new_pending_fa = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_new_pending_fa', array())); $cats_userlist_notify_existing = FLEXIUtilities::paramToArray($cat_params->get('cats_userlist_notify_existing'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $cats_usergrps_notify_existing = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_existing', array())); $cats_usergrps_notify_existing_fa = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_existing_fa', array())); $cats_userlist_notify_existing_reviewal = FLEXIUtilities::paramToArray($cat_params->get('cats_userlist_notify_existing_reviewal'), $regex = "/[\\s]*,[\\s]*/", $filterfunc = "intval"); $cats_usergrps_notify_existing_reviewal = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_existing_reviewal', array())); $cats_usergrps_notify_existing_reviewal_fa = FLEXIUtilities::paramToArray($cat_params->get('cats_usergrps_notify_existing_reviewal_fa', array())); $nConf->userlist_notify_new = array_unique(array_merge($nConf->userlist_notify_new, $cats_userlist_notify_new)); $nConf->usergrps_notify_new = array_unique(array_merge($nConf->usergrps_notify_new, $cats_usergrps_notify_new)); $nConf->usergrps_notify_new_fa = array_unique(array_merge($nConf->usergrps_notify_new_fa, $cats_usergrps_notify_new_fa)); $nConf->userlist_notify_new_pending = array_unique(array_merge($nConf->userlist_notify_new_pending, $cats_userlist_notify_new_pending)); $nConf->usergrps_notify_new_pending = array_unique(array_merge($nConf->usergrps_notify_new_pending, $cats_usergrps_notify_new_pending)); $nConf->usergrps_notify_new_pending_fa = array_unique(array_merge($nConf->usergrps_notify_new_pending_fa, $cats_usergrps_notify_new_pending_fa)); $nConf->userlist_notify_existing = array_unique(array_merge($nConf->userlist_notify_existing, $cats_userlist_notify_existing)); $nConf->usergrps_notify_existing = array_unique(array_merge($nConf->usergrps_notify_existing, $cats_usergrps_notify_existing)); $nConf->usergrps_notify_existing_fa = array_unique(array_merge($nConf->usergrps_notify_existing_fa, $cats_usergrps_notify_existing_fa)); $nConf->userlist_notify_existing_reviewal = array_unique(array_merge($nConf->userlist_notify_existing_reviewal, $cats_userlist_notify_existing_reviewal)); $nConf->usergrps_notify_existing_reviewal = array_unique(array_merge($nConf->usergrps_notify_existing_reviewal, $cats_usergrps_notify_existing_reviewal)); $nConf->usergrps_notify_existing_reviewal_fa = array_unique(array_merge($nConf->usergrps_notify_existing_reviewal_fa, $cats_usergrps_notify_existing_reviewal_fa)); } } //echo "<pre>"; print_r($nConf); exit; // Construct configuation parameter names $nConf_emails = new stdClass(); $notify_types = array('notify_new', 'notify_new_pending', 'notify_existing', 'notify_existing_reviewal'); foreach ($notify_types as $ntype) { $ugrps_fa[$ntype] = 'usergrps_' . $ntype . '_fa'; $ugrps[$ntype] = 'usergrps_' . $ntype; $ulist[$ntype] = 'userlist_' . $ntype; } // (e) Get emails, but first convert user groups to user ids foreach ($notify_types as $ntype) { $user_emails = array(); // emails for user ids $user_emails_ulist = array(); $_user_ids = array(); $_user_names = array(); foreach ($nConf->{$ulist[$ntype]} as $user_id_name) { if (is_numeric($user_id_name)) { $_user_ids[] = (int) $user_id_name; } else { $_user_names[] = $db->Quote($user_id_name); } } if (count($_user_ids) || count($_user_names)) { $query = "SELECT DISTINCT email FROM #__users"; $where_clauses = array(); if (count($_user_ids)) { $where_clauses[] = " id IN (" . implode(",", $_user_ids) . ") "; } if (count($_user_names)) { $_user_names_quoted = array(); foreach ($_user_names as $_user_name) { $_user_names_quoted[] = $db->Quote($_user_name); } $where_clauses[] = " username IN (" . implode(",", $_user_names_quoted) . ") "; } $query .= " WHERE " . implode(' OR ', $where_clauses); $db->setQuery($query); $user_emails_ulist = FLEXI_J16GE ? $db->loadColumn() : $db->loadResultArray(); if ($db->getErrorNum()) { echo $db->getErrorMsg(); } // if ($ntype=='notify_new_pending') { echo "<pre>"; print_r($user_emails_ulist); exit; } } $user_emails_ugrps = array(); if (count($nConf->{$ugrps[$ntype]})) { // emails for user groups if (!FLEXI_J16GE) { $query = "SELECT DISTINCT email FROM #__users WHERE gid IN (" . implode(",", $nConf->{$ugrps[$ntype]}) . ")"; } else { $query = "SELECT DISTINCT email FROM #__users as u" . " JOIN #__user_usergroup_map ugm ON u.id=ugm.user_id AND ugm.group_id IN (" . implode(",", $nConf->{$ugrps[$ntype]}) . ")"; } $db->setQuery($query); $user_emails_ugrps = FLEXI_J16GE ? $db->loadColumn() : $db->loadResultArray(); if ($db->getErrorNum()) { echo $db->getErrorMsg(); } // if ($ntype=='notify_new_pending') { print_r($user_emails_ugrps); exit; } } $user_emails_ugrps_fa = array(); if (FLEXI_ACCESS && count($nConf->{$ugrps_fa[$ntype]})) { $final_groups = array(); foreach ($nConf->{$ugrps_fa[$ntype]} as $fagrpid) { $curr_groups = FAccess::mgenfant($fagrpid); $final_groups = array_unique(array_merge($final_groups, $curr_groups)); } //print_r($final_groups); exit; // emails for flexiaccess user groups $query = "SELECT DISTINCT email FROM #__users as u" . " JOIN #__flexiaccess_groups ugm ON u.username=ugm.name AND ugm.type=2 AND ugm.id IN (" . implode(",", $final_groups) . ")"; $db->setQuery($query); $user_emails_ugrps_fa_individual = FLEXI_J16GE ? $db->loadColumn() : $db->loadResultArray(); if ($db->getErrorNum()) { echo $db->getErrorMsg(); } // emails for flexiaccess user groups $query = "SELECT DISTINCT email FROM #__users as u" . " JOIN #__flexiaccess_members ugm ON u.id=ugm.member_id AND ugm.group_id IN (" . implode(",", $final_groups) . ")"; $db->setQuery($query); $user_emails_ugrps_fa_collective = FLEXI_J16GE ? $db->loadColumn() : $db->loadResultArray(); if ($db->getErrorNum()) { echo $db->getErrorMsg(); } $user_emails_ugrps_fa = array_unique(array_merge($user_emails_ugrps_fa_individual, $user_emails_ugrps_fa_collective)); // if ($ntype=='notify_new_pending') { print_r($user_emails_ugrps_fa); exit; } } // merge them $user_emails = array_unique(array_merge($user_emails_ulist, $user_emails_ugrps, $user_emails_ugrps_fa)); $nConf_emails->{$ntype} = $user_emails; } $nConf->emails = $nConf_emails; //echo "<pre>"; print_r($nConf); exit; return $nConf; }