getAllForSelect(false); $listsWithAny = ['' => acym_translation('ACYM_ANY_LIST')] + $allLists; $list = [ 'type' => [ 'sub' => acym_translation('ACYM_SUBSCRIBED'), 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'), 'notsub' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'), 'notcurrentsub' => acym_translation('ACYM_NOT_CURRENTLY_SUBSCRIBED'), ], 'lists' => $listsWithAny, 'date' => [ 'subscription_date' => acym_translation('ACYM_SUBSCRIPTION_DATE'), 'unsubscribe_date' => acym_translation('ACYM_UNSUBSCRIPTION_DATE'), ], ]; $conditions['user']['acy_list'] = new stdClass(); $conditions['user']['acy_list']->name = acym_translation('ACYM_ACYMAILING_LIST'); $conditions['user']['acy_list']->option = '
'; $conditions['user']['acy_list']->option .= acym_select( $list['type'], 'acym_condition[conditions][__numor__][__numand__][acy_list][action]', null, ['class' => 'intext_select_automation acym__select'] ); $conditions['user']['acy_list']->option .= '
'; $conditions['user']['acy_list']->option .= '
'; $conditions['user']['acy_list']->option .= acym_select( $list['lists'], 'acym_condition[conditions][__numor__][__numand__][acy_list][list]', null, ['class' => 'intext_select_automation acym__select'] ); $conditions['user']['acy_list']->option .= '

'; $conditions['user']['acy_list']->option .= '
'; $conditions['user']['acy_list']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list][date-min]'); $conditions['user']['acy_list']->option .= '<'; $conditions['user']['acy_list']->option .= '
'; $conditions['user']['acy_list']->option .= acym_select( $list['date'], 'acym_condition[conditions][__numor__][__numand__][acy_list][date-type]', null, ['class' => 'intext_select_automation acym__select cell'] ); $conditions['user']['acy_list']->option .= '
'; $conditions['user']['acy_list']->option .= '<'; $conditions['user']['acy_list']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list][date-max]'); $conditions['user']['acy_list']->option .= '
'; $conditions['classic']['acy_list_all'] = new stdClass(); $conditions['classic']['acy_list_all']->name = acym_translation('ACYM_NUMBER_USERS_LIST'); $conditions['classic']['acy_list_all']->option = '
'.acym_translation('ACYM_THERE_IS').'
'; $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= acym_select( ['>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN'), '=' => acym_translation('ACYM_EXACTLY')], 'acym_condition[conditions][__numor__][__numand__][acy_list_all][operator]', null, ['class' => 'intext_select_automation acym__select'] ); $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= ''; $conditions['classic']['acy_list_all']->option .= '
'.acym_translation('ACYM_ACYMAILING_USERS').'
'; $listTypeAll = [ 'sub' => acym_translation('ACYM_SUBSCRIBED'), 'unsub' => acym_translation('ACYM_UNSUBSCRIBED'), 'notsub' => acym_translation('ACYM_NO_SUBSCRIPTION_STATUS'), ]; $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= acym_select( $listTypeAll, 'acym_condition[conditions][__numor__][__numand__][acy_list_all][action]', null, ['class' => 'intext_select_automation acym__select'] ); $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= acym_select( $list['lists'], 'acym_condition[conditions][__numor__][__numand__][acy_list_all][list]', null, ['class' => 'intext_select_automation acym__select'] ); $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list_all][date-min]'); $conditions['classic']['acy_list_all']->option .= '<'; $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= acym_select( $list['date'], 'acym_condition[conditions][__numor__][__numand__][acy_list_all][date-type]', null, ['class' => 'intext_select_automation acym__select cell'] ); $conditions['classic']['acy_list_all']->option .= '
'; $conditions['classic']['acy_list_all']->option .= '<'; $conditions['classic']['acy_list_all']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][acy_list_all][date-max]'); } public function onAcymDeclareConditionsScenario(array &$conditions): void { $this->onAcymDeclareConditions($conditions); } private function processConditionAcyLists(&$query, &$options, $num) { $isAnyList = empty($options['list']); $otherConditions = ''; if (!empty($options['date-min'])) { $options['date-min'] = acym_replaceDate($options['date-min']); if (!is_numeric($options['date-min'])) { $options['date-min'] = strtotime($options['date-min']); } if (!empty($options['date-min'])) { $otherConditions .= ' AND userlist'.$num.'.'.acym_secureDBColumn($options['date-type']).' > '.acym_escapeDB(acym_date($options['date-min'], 'Y-m-d H:i:s', false)); } } if (!empty($options['date-max'])) { $options['date-max'] = acym_replaceDate($options['date-max']); if (!is_numeric($options['date-max'])) { $options['date-max'] = strtotime($options['date-max']); } if (!empty($options['date-max'])) { $otherConditions .= ' AND userlist'.$num.'.'.acym_secureDBColumn($options['date-type']).' < '.acym_escapeDB(acym_date($options['date-max'], 'Y-m-d H:i:s', false)); } } if ($isAnyList) { $standardListType = acym_escapeDB(ListClass::LIST_TYPE_STANDARD); if (in_array($options['action'], ['notsub', 'notcurrentsub'])) { $statusCondition = $options['action'] == 'notcurrentsub' ? 'userlist.status = 1 AND ' : ''; $subquery = 'SELECT userlist.user_id FROM #__acym_user_has_list AS userlist INNER JOIN #__acym_list AS list ON userlist.list_id = list.id WHERE '.$statusCondition.'list.type = '.$standardListType; $query->where[] = 'user.id NOT IN ('.$subquery.')'; } else { $status = $options['action'] === 'sub' ? '1' : '0'; $query->join['list'.$num] = '#__acym_user_has_list AS userlist'.$num.' ON user.id = userlist'.$num.'.user_id AND userlist'.$num.'.status = '.$status.$otherConditions; $query->join['listtype'.$num] = '#__acym_list AS list'.$num.' ON userlist'.$num.'.list_id = list'.$num.'.id AND list'.$num.'.type = '.$standardListType; } } else { // specific list $query->leftjoin['list'.$num] = '#__acym_user_has_list AS userlist'.$num.' ON user.id = userlist'.$num.'.user_id AND userlist'.$num.'.list_id = '.intval( $options['list'] ).$otherConditions; if ($options['action'] == 'notsub') { $query->where[] = 'userlist'.$num.'.user_id IS NULL'; } elseif ($options['action'] === 'notcurrentsub') { $query->where[] = '(userlist'.$num.'.user_id IS NULL OR userlist'.$num.'.status = 0)'; } else { $status = $options['action'] == 'sub' ? '1' : '0'; $query->where[] = 'userlist'.$num.'.status = '.intval($status); } } return $query->count(); } public function onAcymProcessCondition_acy_list(&$query, &$options, $num, &$conditionNotValid) { $affectedRows = $this->processConditionAcyLists($query, $options, $num); if (empty($affectedRows)) $conditionNotValid++; } public function onAcymProcessCondition_acy_list_all(&$query, &$options, $num, &$conditionNotValid) { $affectedRows = $this->processConditionAcyLists($query, $options, $num); $res = false; switch ($options['operator']) { case '=': $res = $affectedRows == $options['number']; break; case '>': $res = $affectedRows > $options['number']; break; case '<': $res = $affectedRows < $options['number']; break; } if (!$res) { $conditionNotValid++; } } public function onAcymDeclareSummary_conditions(&$automation) { if (!empty($automation['acy_list_all'])) { $operators = ['=' => acym_translation('ACYM_EXACTLY'), '>' => acym_translation('ACYM_MORE_THAN'), '<' => acym_translation('ACYM_LESS_THAN')]; $finalText = acym_translation('ACYM_THERE_IS').' '.acym_strtolower( $operators[$automation['acy_list_all']['operator']] ).' '.$automation['acy_list_all']['number'].' '.acym_translation('ACYM_ACYMAILING_USERS').' '; $listClass = new ListClass(); $automation['acy_list_all']['list'] = $listClass->getOneById($automation['acy_list_all']['list'] ? : 0); if (empty($automation['acy_list_all']['list'])) { $automation = ''.acym_translation('ACYM_SELECT_A_LIST').''; return; } if ($automation['acy_list_all']['action'] == 'sub') $automation['acy_list_all']['action'] = 'ACYM_SUBSCRIBED'; if ($automation['acy_list_all']['action'] == 'unsub') $automation['acy_list_all']['action'] = 'ACYM_UNSUBSCRIBED'; if ($automation['acy_list_all']['action'] == 'notsub') $automation['acy_list_all']['action'] = 'ACYM__NOT_SUBSCRIBED'; $finalText .= acym_translationSprintf( 'ACYM_CONDITION_ACY_LIST_SUMMARY', acym_translation($automation['acy_list_all']['action']), $automation['acy_list_all']['list']->name ).' '; $automation = $this->summaryDate($automation['acy_list_all'], $finalText); } $this->onAcymDeclareSummary_conditionsFilters( $automation, 'ACYM_CONDITION_ACY_LIST_SUMMARY', 'ACYM_IS_SUBSCRIBED', 'ACYM_IS_UNSUBSCRIBED', 'ACYM_IS_NOT_SUBSCRIBED', 'ACYM_IS_NOT_CURRENTLY_SUBSCRIBED' ); } private function onAcymDeclareSummary_conditionsFilters( &$automation, string $key, string $keySub, string $keyUnsub, string $keyNotSub, string $keyNotCurrentSub ): void { if (!empty($automation['acy_list'])) { $finalText = ''; $listClass = new ListClass(); $automation['acy_list']['list'] = $listClass->getOneById($automation['acy_list']['list'] ? : 0); $listName = empty($automation['acy_list']['list']) ? acym_translation('ACYM_ANY_LIST') : $automation['acy_list']['list']->name; if ($automation['acy_list']['action'] === 'sub') $automation['acy_list']['action'] = $keySub; if ($automation['acy_list']['action'] === 'unsub') $automation['acy_list']['action'] = $keyUnsub; if ($automation['acy_list']['action'] === 'notsub') $automation['acy_list']['action'] = $keyNotSub; if ($automation['acy_list']['action'] === 'notcurrentsub') $automation['acy_list']['action'] = $keyNotCurrentSub; $finalText .= acym_translationSprintf( $key, acym_translation($automation['acy_list']['action']), $listName ).' '; $automation = $this->summaryDate($automation['acy_list'], $finalText); } if (!empty($automation['unconfirmed'])) { $automation = acym_translation('ACYM_ACTION_UNCONFIRM'); } } private function summaryDate($automation, $finalText) { if (!empty($automation['date-min']) || !empty($automation['date-max'])) { $finalText .= acym_translationSprintf('ACYM_WHERE_DATE_ACY_LIST_SUMMARY', acym_strtolower(acym_translation('ACYM_'.strtoupper($automation['date-type'])))); $dates = []; if (!empty($automation['date-min'])) { $automation['date-min'] = acym_replaceDate($automation['date-min']); $dates[] = acym_translationSprintf('ACYM_WHERE_DATE_MIN_ACY_LIST_SUMMARY', acym_date($automation['date-min'], 'd M Y H:i')); } if (!empty($automation['date-max'])) { $automation['date-max'] = acym_replaceDate($automation['date-max']); $dates[] = acym_translationSprintf('ACYM_WHERE_DATE_MAX_ACY_LIST_SUMMARY', acym_date($automation['date-max'], 'd M Y H:i')); } $finalText .= ' '.implode(' '.acym_strtolower(acym_translation('ACYM_AND')).' ', $dates); } return $finalText; } }