rtecInstalled && !$this->eventTicketsInstalled) return;
$conditions['user']['eventscalendar'] = new stdClass();
$conditions['user']['eventscalendar']->name = 'The Events Calendar - Registration';
$conditions['user']['eventscalendar']->option = '
';
$conditions['user']['eventscalendar']->option .= '
';
$selectOptions = [
'class' => 'acym__select acym_select2_ajax',
'data-placeholder' => acym_translation('ACYM_ANY_EVENT'),
'data-params' => [
'plugin' => __CLASS__,
'trigger' => 'searchEvent',
],
];
// If Events tickets installed, add the ticket option
if ($this->eventTicketsInstalled) {
$selectOptions['acym-automation-reload'] = [
'plugin' => __CLASS__,
'trigger' => 'getTicketsSelection',
'change' => '#ettec_tochange___numor_____numand__',
'name' => 'acym_condition[conditions][__numor__][__numand__][eventscalendar][ticket]',
'paramFields' => [
'event' => 'acym_condition[conditions][__numor__][__numand__][eventscalendar][event]',
],
];
}
$conditions['user']['eventscalendar']->option .= acym_select(
[],
'acym_condition[conditions][__numor__][__numand__][eventscalendar][event]',
null,
$selectOptions
);
$conditions['user']['eventscalendar']->option .= '
';
$conditions['user']['eventscalendar']->option .= '
';
$conditions['user']['eventscalendar']->option .= '';
$conditions['user']['eventscalendar']->option .= '
';
$conditions['user']['eventscalendar']->option .= '
';
$conditions['user']['eventscalendar']->option .= '';
$conditions['user']['eventscalendar']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][eventscalendar][datemin]', '', 'cell shrink');
$conditions['user']['eventscalendar']->option .= '<';
$conditions['user']['eventscalendar']->option .= ''.acym_translation('ACYM_REGISTRATION_DATE').'';
$conditions['user']['eventscalendar']->option .= '<';
$conditions['user']['eventscalendar']->option .= acym_dateField('acym_condition[conditions][__numor__][__numand__][eventscalendar][datemax]', '', 'cell shrink');
$conditions['user']['eventscalendar']->option .= '
';
}
public function onAcymDeclareConditionsScenario(array &$conditions): void
{
$this->onAcymDeclareConditions($conditions);
}
public function getTicketsSelection()
{
$id = acym_getVar('int', 'event', 0);
if (empty($id)) exit;
$elements = acym_loadObjectList(
'SELECT ticket.`ID`, ticket.`post_title`
FROM `#__posts` AS ticket
JOIN #__postmeta AS meta
ON meta.post_id = ticket.ID
WHERE meta.meta_key LIKE "_tribe_%_for_event"
AND meta.`meta_value` = '.intval($id).'
ORDER BY ticket.`post_title` ASC'
);
$options = [];
$options[0] = acym_translation('ACYM_ANY');
foreach ($elements as $oneElement) {
$options[$oneElement->ID] = $oneElement->post_title;
}
echo wp_kses(
acym_select(
$options,
acym_getVar('string', 'name', ''),
acym_getVar('int', 'value', 0),
[
'class' => 'acym__select',
]
),
[
'select' => ['class' => [], 'name' => [], 'id' => []],
'option' => ['value' => [], 'selected' => [], 'disabled' => []],
'optgroup' => ['label' => []],
]
);
exit;
}
/**
* Function called with ajax to search in events
*/
public function searchEvent()
{
$id = acym_getVar('int', 'id');
if (!empty($id)) {
$subject = acym_loadResult(
'SELECT post_title
FROM #__posts
WHERE ID = '.intval($id)
);
if (empty($subject)) $subject = '';
echo json_encode(
[
[
'value' => $id,
'text' => $id.' - '.$subject,
],
]
);
exit;
}
$return = [];
$search = acym_getVar('string', 'search', '');
$elements = acym_loadObjectList(
'SELECT ID, post_title
FROM #__posts
WHERE post_title LIKE '.acym_escapeDB('%'.$search.'%').' AND post_type = "tribe_events"
ORDER BY post_title ASC'
);
foreach ($elements as $oneElement) {
$return[] = [$oneElement->ID, $oneElement->ID.' - '.$oneElement->post_title];
}
echo json_encode($return);
exit;
}
public function onAcymProcessCondition_eventscalendar(&$query, $options, $num, &$conditionNotValid)
{
$this->processConditionFilter_eventscalendar($query, $options, $num);
$affectedRows = $query->count();
if (empty($affectedRows)) $conditionNotValid++;
}
private function processConditionFilter_eventscalendar(&$query, $options, $num)
{
if ($this->eventTicketsInstalled) {
// Event tickets integration, since the ticket field exists
$userT = 'eventTicketsUser'.$num;
$entryT = 'eventTickets'.$num;
$elemT = 'eventTicketsElement'.$num;
$dateField = $entryT.'.post_date_gmt';
$query->join[$userT] = '#__postmeta AS '.$userT.' ON '.$userT.'.meta_value = user.email AND '.$userT.'.meta_key = "_tribe_tickets_email"';
$query->join[$entryT] = '#__posts AS '.$entryT.' ON '.$entryT.'.ID = '.$userT.'.post_id';
if (!empty($options['ticket'])) {
$type = '_tribe_%_product';
$value = 'ticket';
} elseif (!empty($options['event'])) {
$type = '_tribe_%_event';
$value = 'event';
}
if (!empty($type) && !empty($value)) {
$query->join[$elemT] = '#__postmeta AS '.$elemT.'
ON '.$entryT.'.ID = '.$elemT.'.post_id
AND '.$elemT.'.meta_key LIKE '.acym_escapeDB($type).'
AND '.$elemT.'.meta_value = '.intval($options[$value]);
}
} elseif ($this->rtecInstalled) {
// Registration the events calendar, since the ticket field doesn't exist
$dateField = 'rtec'.$num.'.registration_date';
$query->join['eventscalendar'.$num] = '#__rtec_registrations AS rtec'.$num.' ON rtec'.$num.'.email = user.email OR (user.cms_id != 0 AND rtec'.$num.'.user_id = user.cms_id)';
if (!empty($options['event'])) $query->where[] = 'rtec'.$num.'.event_id = '.intval($options['event']);
} else {
return;
}
if (!empty($options['datemin'])) {
$options['datemin'] = acym_replaceDate($options['datemin']);
if (!is_numeric($options['datemin'])) $options['datemin'] = strtotime($options['datemin']);
if (!empty($options['datemin'])) {
$query->where[] = $dateField.' > '.acym_escapeDB(gmdate('Y-m-d H:i:s', $options['datemin']));
}
}
if (!empty($options['datemax'])) {
$options['datemax'] = acym_replaceDate($options['datemax']);
if (!is_numeric($options['datemax'])) $options['datemax'] = strtotime($options['datemax']);
if (!empty($options['datemax'])) {
$query->where[] = $dateField.' < '.acym_escapeDB(gmdate('Y-m-d H:i:s', $options['datemax']));
}
}
}
public function onAcymDeclareSummary_conditions(&$automationCondition)
{
$this->summaryConditionFilters($automationCondition);
}
private function summaryConditionFilters(&$automation)
{
if (empty($automation['eventscalendar'])) return;
if (empty($automation['eventscalendar']['ticket'])) {
if (empty($automation['eventscalendar']['event'])) {
$event = acym_translation('ACYM_ANY_EVENT');
} else {
$event = acym_loadResult(
'SELECT post_title
FROM #__posts
WHERE ID = '.intval($automation['eventscalendar']['event'])
);
}
} else {
$ticket = acym_loadResult(
'SELECT post_title
FROM #__posts
WHERE ID = '.intval($automation['eventscalendar']['ticket'])
);
$event = acym_loadResult(
'SELECT event.post_title
FROM #__postmeta AS meta
JOIN #__posts AS event ON event.ID = meta.meta_value
WHERE meta.meta_key = "_tribe_rsvp_for_event" AND meta.post_id = '.intval($automation['eventscalendar']['ticket'])
);
$event .= ' - '.$ticket;
}
$finalText = acym_translationSprintf('ACYM_REGISTERED_TO', $event);
$dates = [];
if (!empty($automation['eventscalendar']['datemin'])) {
$dates[] = acym_translation('ACYM_AFTER').' '.acym_replaceDate($automation['eventscalendar']['datemin'], true);
}
if (!empty($automation['eventscalendar']['datemax'])) {
$dates[] = acym_translation('ACYM_BEFORE').' '.acym_replaceDate($automation['eventscalendar']['datemax'], true);
}
if (!empty($dates)) {
$finalText .= ' '.implode(' '.acym_translation('ACYM_AND').' ', $dates);
}
$automation = $finalText;
}
}