MailClass::TYPE_FOLLOWUP,
'element_to_display' => lcfirst(acym_translation('ACYM_FOLLOW_UP')),
];
$this->getAllParamsRequest($data);
$this->prepareEmailsListing($data, $data['campaign_type'], 'followup');
$this->prepareToolbar($data);
$this->prepareListingClasses($data);
$this->prepareFollowupListing($data);
parent::display($data);
}
private function prepareFollowupListing(array &$data): void
{
$followupClass = new FollowupClass();
$triggers = [];
acym_trigger('getFollowupTriggers', [&$triggers]);
$data['allTriggers'] = $triggers;
foreach ($data['allCampaigns'] as $key => $oneFollowup) {
if (!empty($triggers[$oneFollowup->trigger])) {
$oneFollowup->condition = json_decode($oneFollowup->condition, true);
$data['allCampaigns'][$key]->condition = $followupClass->getConditionSummary($oneFollowup);
$data['allCampaigns'][$key]->mail_ids = $followupClass->getEmailsByIds([$oneFollowup->id]);
}
}
}
public function deleteFollowup(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$ids = acym_getVar('array', 'elements_checked', []);
$allChecked = acym_getVar('string', 'checkbox_all');
$currentPage = explode('_', acym_getVar('string', 'page'));
$pageNumber = $this->getVarFiltersListing('int', end($currentPage).'_pagination_page', 1);
if (!empty($ids)) {
$followupClass = new FollowupClass();
$followupClass->delete($ids);
if ($allChecked == 'on') {
$this->setVarFiltersListing(end($currentPage).'_pagination_page', $pageNumber - 1);
}
}
$this->listing();
}
public function followupTrigger(): void
{
acym_setVar('layout', 'followup_trigger');
$id = acym_getVar('int', 'id', 0);
if (!empty($id)) {
$followupClass = new FollowupClass();
$followup = $followupClass->getOneById($id);
} else {
$followup = new stdClass();
}
$this->setTaskListing('followup');
$data = [
'workflowHelper' => new WorkflowHelper(),
'followup' => $followup,
];
$linkId = empty($id) ? '' : '&id='.$id;
$this->breadcrumb[empty($id) ? acym_translation('ACYM_NEW_FOLLOW_UP') : $followup->name] = acym_completeLink('campaigns&task=edit&step=followupTrigger'.$linkId);
parent::display($data);
}
public function followupCondition(): void
{
acym_setVar('layout', 'followup_condition');
$id = acym_getVar('int', 'id', 0);
$trigger = acym_getVar('string', 'trigger', '');
if (!empty($id)) {
$followupClass = new FollowupClass();
$followup = $followupClass->getOneById($id);
} else {
$followup = new stdClass();
}
if (empty($trigger) && empty($followup->trigger)) {
acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_DATA'), 'error');
$this->listing();
return;
}
$listClass = new ListClass();
$lists = $listClass->getAllForSelect(false);
$segmentClass = new SegmentClass();
$segments = $segmentClass->getAllForSelect(false);
$statusArray = [
'is' => acym_strtolower(acym_translation('ACYM_IS')),
'is_not' => acym_strtolower(acym_translation('ACYM_IS_NOT')),
];
$additionalCondition = [];
acym_trigger('getAcymAdditionalConditionFollowup', [&$additionalCondition, empty($trigger) ? $followup->trigger : $trigger, $followup, $statusArray]);
$actualTrigger = empty($trigger) ? $followup->trigger : $trigger;
$data = [
'workflowHelper' => new WorkflowHelper(),
'followup' => $followup,
'additionalCondition' => $additionalCondition,
'trigger' => $actualTrigger,
'lists_multiselect' => ''.acym_selectMultiple(
$lists,
'followup[condition][lists]',
!empty($followup->condition) && !empty($followup->condition['lists']) ? $followup->condition['lists'] : [],
['class' => 'acym__select']
).'',
'segments_multiselect' => ''.acym_selectMultiple(
$segments,
'followup[condition][segments]',
!empty($followup->condition) && !empty($followup->condition['segments']) ? $followup->condition['segments'] : [],
['class' => 'acym__select']
).'',
'select_status_lists' => ''.acym_select(
$statusArray,
'followup[condition][lists_status]',
!empty($followup->condition) && !empty($followup->condition['lists_status']) ? $followup->condition['lists_status'] : '',
['class' => 'acym__select']
).'',
'select_status_segments' => ''.acym_select(
$statusArray,
'followup[condition][segments_status]',
!empty($followup->condition) && !empty($followup->condition['segments_status']) ? $followup->condition['segments_status'] : '',
['class' => 'acym__select']
).'',
'lists_subscribe_translation' => $actualTrigger == 'user_subscribe' ? 'ACYM_FOLLOW_UP_CONDITION_USER_SUBSCRIBING' : 'ACYM_FOLLOW_UP_CONDITION_USER_SUBSCRIBE',
];
$linkId = empty($id) ? '&trigger='.$trigger : '&id='.$id;
$this->breadcrumb[empty($followup->name) ? acym_translation('ACYM_NEW_FOLLOW_UP') : $followup->name] = acym_completeLink(
'campaigns&task=edit&step=followupCondition'.$linkId
);
parent::display($data);
}
public function followupEmail(): void
{
acym_setVar('layout', 'followup_email');
$id = acym_getVar('int', 'id', 0);
if (empty($id)) {
acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_DATA'), 'error');
$this->listing();
return;
}
$followupClass = new FollowupClass();
$followup = $followupClass->getOneByIdWithMails($id);
if (empty($followup)) {
acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_LOAD_DATA'), 'error');
$this->listing();
return;
}
$mailClass = new MailClass();
$favoriteTemplate = $mailClass->getFavoriteTemplateId();
$startFrom = empty($favoriteTemplate) ? '' : '&from='.$favoriteTemplate;
$data = [
'workflowHelper' => new WorkflowHelper(),
'followup' => $followup,
'linkNewEmail' => acym_completeLink(
'mails&task=edit&step=editEmail&type=followup&followup_id='.$id.'&return='.urlencode(
acym_completeLink('campaigns&task=edit&step=followupEmail&id='.$id)
).$startFrom,
false,
true
),
];
$this->breadcrumb[empty($followup->name) ? acym_translation('ACYM_NEW_FOLLOW_UP') : $followup->name] = acym_completeLink(
'campaigns&task=edit&step=followupEmail&id='.$followup->id
);
// Ask the user if he wants to add the new email to the queue for the users that already triggered the followup
if (intval($followup->active) === 1) {
$newlyCreatedEmail = acym_getVar('int', 'newEmailId');
if (!empty($newlyCreatedEmail)) {
$numberOfSubscribers = $followupClass->getNumberSubscribersByListId($followup->list_id, true);
if (!empty($numberOfSubscribers)) {
$message = '';
acym_enqueueMessage($message, 'info', false);
}
}
}
parent::display($data);
}
public function followupDuplicateMail(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$mailId = acym_getVar('int', 'action_mail_id', 0);
$id = acym_getVar('int', 'id', 0);
$followupClass = new FollowupClass();
if (!$followupClass->duplicateMail($mailId, $id)) {
acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_DUPLICATE_MAIL'), 'error');
}
$this->followupEmail();
}
public function followupDeleteMail(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$mailId = acym_getVar('int', 'action_mail_id', 0);
$followupClass = new FollowupClass();
if (!$followupClass->deleteMail($mailId)) {
acym_enqueueMessage(acym_translation('ACYM_COULD_NOT_DELETE_MAIL'), 'error');
}
$step = acym_getVar('cmd', 'step', 'followupEmail');
if (!in_array($step, ['followupEmail', 'followupSummary'], true)) {
$step = 'followupEmail';
}
$this->$step();
}
public function followupDraft(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$this->followupFinalize(0);
}
public function followupActivate(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
$this->followupFinalize(1);
}
public function followupFinalize(int $status): void
{
$followupId = acym_getVar('int', 'id', 0);
$followupClass = new FollowupClass();
$followup = $followupClass->getOneById($followupId);
$followup->active = $status;
$followupClass->save($followup);
$this->followup();
}
public function saveFollowupCondition(): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
if (!acym_isAdmin() || !acym_isAllowed('campaigns')) {
die('Access denied for follow-ups');
}
$id = acym_getVar('int', 'id', 0);
$trigger = acym_getVar('string', 'trigger', '');
$followupData = acym_getVar('array', 'followup', []);
$followupClass = new FollowupClass();
if (!empty($id)) {
$followup = $followupClass->getOneById($id);
$followup->condition = json_encode($followupData['condition']);
} else {
$followup = new stdClass();
$followup->name = '';
$followup->display_name = '';
$followup->creation_date = gmdate('Y-m-d H:i:s', time());
$followup->trigger = $trigger;
$followup->condition = json_encode($followupData['condition']);
$followup->active = 0;
$followup->send_once = 1;
}
$followup->id = $followupClass->save($followup);
if (empty($followup->id)) {
acym_enqueueMessage(acym_translation('ACYM_ERROR_SAVING').': '.acym_getDBError(), 'error');
$this->listing();
return;
}
acym_setVar('id', $followup->id);
$this->edit();
}
public function saveFollowupEmail(bool $redirect = true): void
{
wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');
if (!acym_isAdmin() || !acym_isAllowed('campaigns')) {
die('Access denied for follow-ups');
}
$id = acym_getVar('int', 'id', 0);
$followupData = acym_getVar('array', 'followup', []);
if (empty($id) || empty($followupData)) {
return;
}
$followupClass = new FollowupClass();
$followup = $followupClass->getOneById($id);
if (empty($followup)) {
return;
}
foreach ($followupData as $key => $data) {
if (!isset($followup->$key)) continue;
$followup->$key = $data;
}
$followup->id = $followupClass->save($followup);
acym_setVar('id', $followup->id);
if ($redirect) {
$this->edit();
}
}
public function followupSummary(): void
{
acym_setVar('layout', 'followup_summary');
$id = acym_getVar('int', 'id', 0);
if (empty($id)) {
acym_enqueueMessage(acym_translation('ACYM_FOLLOWUP_NOT_FOUND'), 'error');
$this->listing();
return;
}
$followupClass = new FollowupClass();
$followup = $followupClass->getOneByIdWithMails($id);
$data = [
'workflowHelper' => new WorkflowHelper(),
'followup' => $followup,
'condition' => $followupClass->getConditionSummary($followup),
];
$this->breadcrumb[empty($followup->name) ? acym_translation('ACYM_NEW_FOLLOW_UP') : $followup->name] = acym_completeLink(
'campaigns&task=edit&step=followupCondition'.$followup->id
);
parent::display($data);
}
public function createNewFollowupMail(): void
{
$this->saveFollowupEmail(false);
$linkNewEmail = acym_getVar('string', 'linkNewEmail', '');
if (empty($linkNewEmail)) {
$this->edit();
} else {
acym_redirect($linkNewEmail);
}
}
}