コード例 #1
0
ファイル: Dmail.php プロジェクト: kartolo/direct_mail
 /**
  * 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;
 }
コード例 #2
0
ファイル: RecipientList.php プロジェクト: kartolo/direct_mail
 /**
  * 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));
 }