# acymailing/11.1.0/back/Controllers/CampaignsController.php

AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress, version 11.1.0. 229 lines.

- Page: https://pluginprobe.com/plugins/acymailing/11.1.0/code/back/Controllers/CampaignsController.php
- Raw: https://pluginprobe.com/plugins/acymailing/11.1.0/raw/back/Controllers/CampaignsController.php
- Modified: 2026-08-05T09:47:50+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/acymailing/11.1.0/code/back/Controllers/CampaignsController.php#L10-L20`.

```php
<?php

namespace AcyMailing\Controllers;

use AcyMailing\Classes\CampaignClass;
use AcyMailing\Classes\HistoryClass;
use AcyMailing\Classes\MailClass;
use AcyMailing\Classes\ListClass;
use AcyMailing\Classes\UserClass;
use AcyMailing\Helpers\MailerHelper;
use AcyMailing\Core\AcymController;
use AcyMailing\Controllers\Campaigns\Actions;
use AcyMailing\Controllers\Campaigns\AutoCampaigns;
use AcyMailing\Controllers\Campaigns\Edition;
use AcyMailing\Controllers\Campaigns\Followup;
use AcyMailing\Controllers\Campaigns\ListEmails;
use AcyMailing\Controllers\Campaigns\Listing;
use AcyMailing\Controllers\Campaigns\Tests;

class CampaignsController extends AcymController
{
    use Listing;
    use Followup;
    use ListEmails;
    use AutoCampaigns;
    use Edition;
    use Actions;
    use Tests;

    const TASK_TYPE_CAMPAIGN = 'campaigns';
    const TASK_TYPE_CAMPAIGN_AUTO = 'campaigns_auto';
    const TASK_TYPE_WELCOME = 'welcome';
    const TASK_TYPE_UNSUBSCRIBE = 'unsubscribe';
    const TASK_TYPE_FOLLOWUP = 'followup';
    const TASK_TYPE_SPECIFIC_LISTING = 'specificListing';
    const TASK_TYPE_MAILBOX_ACTION = 'mailbox_action';

    const TASKS_TO_REMEMBER_FOR_LISTING = [
        '',
        self::TASK_TYPE_CAMPAIGN,
        self::TASK_TYPE_CAMPAIGN_AUTO,
        self::TASK_TYPE_WELCOME,
        self::TASK_TYPE_UNSUBSCRIBE,
        self::TASK_TYPE_FOLLOWUP,
        self::TASK_TYPE_SPECIFIC_LISTING,
        self::TASK_TYPE_MAILBOX_ACTION,
    ];

    const CAMPAIGN_TYPE_TO_TASK = [
        'now' => self::TASK_TYPE_CAMPAIGN,
        'scheduled' => self::TASK_TYPE_CAMPAIGN,
        'auto' => self::TASK_TYPE_CAMPAIGN_AUTO,
        'followup' => self::TASK_TYPE_FOLLOWUP,
        'welcome' => self::TASK_TYPE_WELCOME,
        'unsubscribe' => self::TASK_TYPE_UNSUBSCRIBE,
        'birthday' => self::TASK_TYPE_SPECIFIC_LISTING,
        'woocommerce_cart' => self::TASK_TYPE_SPECIFIC_LISTING,
    ];

    private string $stepContainerClass = '';

    public function __construct()
    {
        parent::__construct();

        $this->defaulttask = 'campaigns';
        $this->breadcrumb[acym_translation('ACYM_EMAILS')] = acym_completeLink('campaigns');
        $this->loadScripts = [
            'recipients' => ['vue-applications' => ['entity_select']],
            'segment' => ['datepicker', 'vue-applications' => ['modal_users_summary']],
            'send_settings' => ['datepicker'],
            'summary' => ['vue-applications' => ['modal_users_summary']],
        ];

        if (acym_isAdmin()) {
            $this->stepContainerClass = 'xxlarge-9';
        }

        acym_setVar('edition', '1');
        acym_header('X-XSS-Protection:0');
        $this->storeRedirectListing();
    }

    public function ajaxCountNumberOfRecipients(): void
    {
        $listsSelected = acym_getVar('array', 'listsSelected', []);
        if (empty($listsSelected)) {
            acym_sendAjaxResponse('', ['recipients' => 0]);
        }

        $listClass = new ListClass();
        acym_sendAjaxResponse('', ['recipients' => $listClass->getTotalSubCount($listsSelected)]);
    }

    public function deleteAttachmentAjax(): void
    {
        wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');

        $mailId = acym_getVar('int', 'mail', 0);
        $attachmentId = acym_getVar('int', 'id', 0);

        if (!empty($mailId) && $attachmentId >= 0) {
            $mailClass = new MailClass();

            if (!$mailClass->hasUserAccess($mailId, true)) {
                acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
            }

            if ($mailClass->deleteOneAttachment($mailId, $attachmentId)) {
                acym_sendAjaxResponse(acym_translation('ACYM_ATTACHMENT_WELL_DELETED'));
            }
        }

        acym_sendAjaxResponse(acym_translation('ACYM_COULD_NOT_DELETE_ATTACHMENT'), [], false);
    }

    public function test(): void
    {
        wp_verify_nonce(acym_getVar('cmd', '_wpnonce'), 'acymnonce') || die('Invalid Token');

        $campaignId = acym_getVar('int', 'campaignId', 0);
        $specificMailId = acym_getVar('int', 'mailId', 0);

        $campaignClass = new CampaignClass();
        $campaign = $campaignClass->getOneById($campaignId);

        if (empty($campaign)) {
            acym_sendAjaxResponse(acym_translation('ACYM_CAMPAIGN_NOT_FOUND'), [], false);
        }

        if (!$campaignClass->hasUserAccess($campaignId)) {
            acym_sendAjaxResponse(acym_translation('ACYM_ACCESS_DENIED'), [], false);
        }

        $mailClassAccess = new MailClass();
        if (!empty($specificMailId) && $mailClassAccess->getMainMailId($specificMailId) !== (int)$campaign->mail_id) {
            acym_sendAjaxResponse(acym_translation('ACYM_ACCESS_DENIED'), [], false);
        }

        $mailerHelper = new MailerHelper();
        $mailerHelper->report = false;
        if (!empty($specificMailId)) {
            $mailerHelper->isAbTest = $campaignClass->isAbTestMail($specificMailId);
        }

        $report = [];
        $success = true;
        $testNote = acym_getVar('string', 'test_note', '');

        $userClass = new UserClass();
        $mailClass = new mailClass();
        $translatedMails = [];
        if (acym_isMultilingual()) {
            $translatedMails = $mailClass->getTranslationsById($campaign->mail_id, true, true);
        }

        $rawTestEmails = explode(',', acym_getVar('string', 'test_emails'));
        $testEmails = [];
        foreach ($rawTestEmails as $email) {
            $email = trim($email);
            if (acym_isValidEmail($email) || is_numeric($email)) {
                $testEmails[] = $email;
            }
        }

        if (empty($testEmails)) {
            acym_sendAjaxResponse(acym_translation('ACYM_NO_VALID_TEST_EMAILS'), [], false);

            return;
        }

        $historyClass = new HistoryClass();

        foreach ($testEmails as $oneAddress) {
            if (is_numeric($oneAddress)) {
                $receiver = $userClass->getOneById($oneAddress);
            } else {
                $receiver = $userClass->getOneByEmail($oneAddress, true);
            }

            $mailId = $specificMailId;
            if (empty($mailId)) {
                if (acym_isMultilingual()) {
                    $mailId = empty($receiver) || empty($translatedMails[$receiver->language]) ? $campaign->mail_id : $translatedMails[$receiver->language]->id;
                } else {
                    $mailId = $campaign->mail_id;
                }
            }

            $options = [
                'isTest' => true,
                'testNote' => $testNote,
            ];
            if ($mailerHelper->sendOne($mailId, $receiver, $options)) {
                $historyClass->insert($receiver->id, 'test_sent', [], $mailId);
            } else {
                $success = false;
            }

            if (!empty($mailerHelper->reportMessage)) {
                $report[] = $mailerHelper->reportMessage;
            }
        }

        acym_sendAjaxResponse(implode('<br/>', $report), [], $success);
    }

    public function saveAjax(): void
    {
        $result = $this->saveEditEmail(true);
        if (!empty($result)) {
            acym_sendAjaxResponse('', ['result' => $result]);
        } else {
            acym_sendAjaxResponse(acym_translation('ACYM_ERROR_SAVING'), [], false);
        }
    }

    public function saveAsTmplAjax(): void
    {
        if (!acym_isAdmin() || (!acym_isAllowed('campaigns') && !acym_isAllowed('mails'))) {
            die('Access denied');
        }

        $mailController = new MailsController();
        $mailId = $mailController->store(true);
        acym_sendAjaxResponse(!empty($mailId) ? '' : acym_translation('ACYM_ERROR_SAVING'), ['result' => $mailId], !empty($mailId));
    }
}

```
