/** * Fetches recipient IDs from a given group ID * Most of the functionality from cmd_compileMailGroup in order to use multiple recipient lists when sending * * @param int $groupUid Recipient group ID * * @return array List of recipient IDs */ protected function getSingleMailGroup($groupUid) { $idLists = array(); if ($groupUid) { $mailGroup = BackendUtility::getRecord('sys_dmail_group', $groupUid); if (is_array($mailGroup)) { switch ($mailGroup['type']) { case 0: // From pages // use current page if no else $thePages = $mailGroup['pages'] ? $mailGroup['pages'] : $this->id; // Explode the pages $pages = GeneralUtility::intExplode(',', $thePages); $pageIdArray = array(); foreach ($pages as $pageUid) { if ($pageUid > 0) { $pageinfo = BackendUtility::readPageAccess($pageUid, $this->perms_clause); if (is_array($pageinfo)) { $info['fromPages'][] = $pageinfo; $pageIdArray[] = $pageUid; if ($mailGroup['recursive']) { $pageIdArray = array_merge($pageIdArray, DirectMailUtility::getRecursiveSelect($pageUid, $this->perms_clause)); } } } } // Remove any duplicates $pageIdArray = array_unique($pageIdArray); $pidList = implode(',', $pageIdArray); $info['recursive'] = $mailGroup['recursive']; // Make queries if ($pidList) { $whichTables = intval($mailGroup['whichtables']); if ($whichTables & 1) { // tt_address $idLists['tt_address'] = DirectMailUtility::getIdList('tt_address', $pidList, $groupUid, $mailGroup['select_categories']); } if ($whichTables & 2) { // fe_users $idLists['fe_users'] = DirectMailUtility::getIdList('fe_users', $pidList, $groupUid, $mailGroup['select_categories']); } if ($this->userTable && $whichTables & 4) { // user table $idLists[$this->userTable] = DirectMailUtility::getIdList($this->userTable, $pidList, $groupUid, $mailGroup['select_categories']); } if ($whichTables & 8) { // fe_groups if (!is_array($idLists['fe_users'])) { $idLists['fe_users'] = array(); } $idLists['fe_users'] = array_unique(array_merge($idLists['fe_users'], DirectMailUtility::getIdList('fe_groups', $pidList, $groupUid, $mailGroup['select_categories']))); } } break; case 1: // List of mails if ($mailGroup['csv'] == 1) { $recipients = DirectMailUtility::rearrangeCsvValues(DirectMailUtility::getCsvValues($mailGroup['list']), $this->fieldList); } else { $recipients = DirectMailUtility::rearrangePlainMails(array_unique(preg_split('|[[:space:],;]+|', $mailGroup['list']))); } $idLists['PLAINLIST'] = DirectMailUtility::cleanPlainList($recipients); break; case 2: // Static MM list $idLists['tt_address'] = DirectMailUtility::getStaticIdList('tt_address', $groupUid); $idLists['fe_users'] = DirectMailUtility::getStaticIdList('fe_users', $groupUid); $idLists['fe_users'] = array_unique(array_merge($idLists['fe_users'], DirectMailUtility::getStaticIdList('fe_groups', $groupUid))); if ($this->userTable) { $idLists[$this->userTable] = DirectMailUtility::getStaticIdList($this->userTable, $groupUid); } break; case 3: // Special query list $mailGroup = $this->update_SpecialQuery($mailGroup); $whichTables = intval($mailGroup['whichtables']); $table = ''; if ($whichTables & 1) { $table = 'tt_address'; } elseif ($whichTables & 2) { $table = 'fe_users'; } elseif ($this->userTable && $whichTables & 4) { $table = $this->userTable; } if ($table) { // initialize the query generator $queryGenerator = GeneralUtility::makeInstance('DirectMailTeam\\DirectMail\\MailSelect'); $idLists[$table] = DirectMailUtility::getSpecialQueryIdList($queryGenerator, $table, $mailGroup); } break; case 4: $groups = array_unique(DirectMailUtility::getMailGroups($mailGroup['mail_groups'], array($mailGroup['uid']), $this->perms_clause)); foreach ($groups as $v) { $collect = $this->getSingleMailGroup($v); if (is_array($collect)) { $idLists = array_merge_recursive($idLists, $collect); } } break; default: } } } return $idLists; }
/** * Put all recipients uid from all table into an array * * @param int $groupUid Uid of the group * * @return array List of the uid in an array */ public function cmd_compileMailGroup($groupUid) { $idLists = array(); if ($groupUid) { $mailGroup = BackendUtility::getRecord('sys_dmail_group', $groupUid); if (is_array($mailGroup) && $mailGroup['pid'] == $this->id) { switch ($mailGroup['type']) { case 0: // From pages // use current page if no else $thePages = $mailGroup['pages'] ? $mailGroup['pages'] : $this->id; // Explode the pages $pages = GeneralUtility::intExplode(',', $thePages); $pageIdArray = array(); foreach ($pages as $pageUid) { if ($pageUid > 0) { $pageinfo = BackendUtility::readPageAccess($pageUid, $this->perms_clause); if (is_array($pageinfo)) { $info['fromPages'][] = $pageinfo; $pageIdArray[] = $pageUid; if ($mailGroup['recursive']) { $pageIdArray = array_merge($pageIdArray, DirectMailUtility::getRecursiveSelect($pageUid, $this->perms_clause)); } } } } // Remove any duplicates $pageIdArray = array_unique($pageIdArray); $pidList = implode(',', $pageIdArray); $info['recursive'] = $mailGroup['recursive']; // Make queries if ($pidList) { $whichTables = intval($mailGroup['whichtables']); // tt_address if ($whichTables & 1) { $idLists['tt_address'] = DirectMailUtility::getIdList('tt_address', $pidList, $groupUid, $mailGroup['select_categories']); } // fe_users if ($whichTables & 2) { $idLists['fe_users'] = DirectMailUtility::getIdList('fe_users', $pidList, $groupUid, $mailGroup['select_categories']); } // user table if ($this->userTable && $whichTables & 4) { $idLists[$this->userTable] = DirectMailUtility::getIdList($this->userTable, $pidList, $groupUid, $mailGroup['select_categories']); } // fe_groups if ($whichTables & 8) { if (!is_array($idLists['fe_users'])) { $idLists['fe_users'] = array(); } $idLists['fe_users'] = array_unique(array_merge($idLists['fe_users'], DirectMailUtility::getIdList('fe_groups', $pidList, $groupUid, $mailGroup['select_categories']))); } } break; case 1: // List of mails if ($mailGroup['csv'] == 1) { $recipients = DirectMailUtility::rearrangeCsvValues(DirectMailUtility::getCsvValues($mailGroup['list']), $this->fieldList); } else { $recipients = DirectMailUtility::rearrangePlainMails(array_unique(preg_split('|[[:space:],;]+|', $mailGroup['list']))); } $idLists['PLAINLIST'] = DirectMailUtility::cleanPlainList($recipients); break; case 2: // Static MM list $idLists['tt_address'] = DirectMailUtility::getStaticIdList('tt_address', $groupUid); $idLists['fe_users'] = DirectMailUtility::getStaticIdList('fe_users', $groupUid); $idLists['fe_users'] = array_unique(array_merge($idLists['fe_users'], DirectMailUtility::getStaticIdList('fe_groups', $groupUid))); if ($this->userTable) { $idLists[$this->userTable] = DirectMailUtility::getStaticIdList($this->userTable, $groupUid); } break; case 3: // Special query list $mailGroup = $this->update_SpecialQuery($mailGroup); $whichTables = intval($mailGroup['whichtables']); $table = ''; if ($whichTables & 1) { $table = 'tt_address'; } elseif ($whichTables & 2) { $table = 'fe_users'; } elseif ($this->userTable && $whichTables & 4) { $table = $this->userTable; } if ($table) { $idLists[$table] = DirectMailUtility::getSpecialQueryIdList($this->queryGenerator, $table, $mailGroup); } break; case 4: $groups = array_unique(DirectMailUtility::getMailGroups($mailGroup['mail_groups'], array($mailGroup['uid']), $this->perms_clause)); foreach ($groups as $group) { $collect = $this->cmd_compileMailGroup($group); if (is_array($collect['queryInfo']['id_lists'])) { $idLists = array_merge_recursive($idLists, $collect['queryInfo']['id_lists']); } } // Make unique entries if (is_array($idLists['tt_address'])) { $idLists['tt_address'] = array_unique($idLists['tt_address']); } if (is_array($idLists['fe_users'])) { $idLists['fe_users'] = array_unique($idLists['fe_users']); } if (is_array($idLists[$this->userTable]) && $this->userTable) { $idLists[$this->userTable] = array_unique($idLists[$this->userTable]); } if (is_array($idLists['PLAINLIST'])) { $idLists['PLAINLIST'] = DirectMailUtility::cleanPlainList($idLists['PLAINLIST']); } break; default: } } } /** * Hook for cmd_compileMailGroup * manipulate the generated id_lists */ if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['direct_mail']['mod3']['cmd_compileMailGroup'])) { $hookObjectsArr = array(); foreach ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['direct_mail']['mod3']['cmd_compileMailGroup'] as $classRef) { $hookObjectsArr[] =& GeneralUtility::getUserObj($classRef); } foreach ($hookObjectsArr as $hookObj) { if (method_exists($hookObj, 'cmd_compileMailGroup_postProcess')) { $temporaryList = $hookObj->cmd_compileMailGroup_postProcess($idLists, $this, $mailGroup); } } unset($idLists); $idLists = $temporaryList; } return array('queryInfo' => array('id_lists' => $idLists)); }