Source of file CampaignMonitorAPIConnectorTestController.php
Size: 11,553 Bytes - Last Modified: 2021-12-23T10:39:01+00:00
/var/www/docs.ssmods.com/process/src/src/Control/CampaignMonitorAPIConnectorTestController.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 | <?php namespace Sunnysideup\CampaignMonitor\Control; use SilverStripe\Control\Controller; use SilverStripe\Control\Director; use SilverStripe\Core\Config\Config; use SilverStripe\Security\Member; use Sunnysideup\CampaignMonitor\Api\CampaignMonitorAPIConnector; use Sunnysideup\CampaignMonitor\Model\CampaignMonitorCampaign; use Sunnysideup\CampaignMonitor\Traits\CampaignMonitorApiTrait; /** * simple class to see that everything is working ... */ class CampaignMonitorAPIConnectorTestController extends Controller { use CampaignMonitorApiTrait; /** * example data. * * @var array */ protected $egData = [ 'limit' => 10, 'listID' => '', 'listIDtoDelete' => '', 'campaignID' => '', 'templateID' => '', 'listTitle' => 'Test List 9', 'unsubscribePage' => 'http://unsub', 'confirmedOptIn' => false, 'confirmationSuccessPage' => 'http://confirmed', 'unsubscribeSetting' => '', 'addUnsubscribesToSuppList' => true, 'scrubActiveWithSuppList' => true, 'oldEmailAddress' => 'oldemail@test.nowhere', 'newEmailAddress' => 'newemail@test.nowhere', ]; /** * contains API once started. * * @var CampaignMonitorAPIConnector */ protected $api; /** * should we show as much as possible? * * @var bool */ protected $showAll = false; private static $url_segment = 'create-send-test'; private static $allowed_actions = [ 'testall' => 'CMS_ACCESS_CMSMain', 'testlists' => 'CMS_ACCESS_CMSMain', 'testcampaigns' => 'CMS_ACCESS_CMSMain', 'testsubscribers' => 'CMS_ACCESS_CMSMain', ]; /** * link for controller * we add baseURL to make it work for all set ups. * * @var string * * @param null|mixed $action */ public function Link($action = null) { $link = Director::baseURL() . $this->Config()->get('url_segment') . '/'; if ($action) { $link .= $action . '/'; } return $link; } /** * run all tests. */ public function testall() { $this->testlists(); $this->testcampaigns(); $this->testsubscribers(); $this->index(); die('<h1>THE END</h1>'); } public function index() { echo ' <hr /><hr /><hr /><hr /><hr /> <ul> <li><a href="' . $this->Link('testlists') . '">test lists</a></li> <li><a href="' . $this->Link('testcampaigns') . '">test campaigns</a></li> <li><a href="' . $this->Link('testsubscribers') . '">test subscribers</a></li> <li><a href="' . $this->Link('testall') . '">test all</a></li> </ul> <hr /><hr /><hr /><hr /><hr /> '; } public function testlists() { $this->setupTests(); //create list $result = $this->api->createList( $this->egData['listTitle'], $this->egData['unsubscribePage'], $this->egData['confirmationSuccessPage'], $this->egData['confirmedOptIn'], $this->egData['unsubscribeSetting'] ); $this->egData['listIDtoDelete'] = $result; //update list $this->api->updateList( $this->egData['listIDtoDelete'], $this->egData['listTitle'] . 'updated_22', $this->egData['unsubscribePage'] . 'updated', $this->egData['confirmationSuccessPage'] . 'updated', $this->egData['unsubscribeSetting'], $this->egData['confirmedOptIn'], $addUnsubscribesToSuppList = true, $scrubActiveWithSuppList = true ); //delete list if ($this->egData['listIDtoDelete']) { $this->api->deleteList($this->egData['listIDtoDelete']); } //getList $this->api->getList($this->egData['listID']); $this->api->getActiveSubscribers( $this->egData['listID'], $daysAgo = 3650, $page = 1, $pageSize = $this->egData['limit'], $sortByField = 'DATE', $sortDirection = 'DESC' ); $this->api->getUnconfirmedSubscribers( $this->egData['listID'], $daysAgo = 3650, $page = 1, $pageSize = $this->egData['limit'], $sortByField = 'DATE', $sortDirection = 'DESC' ); $this->api->getBouncedSubscribers( $this->egData['listID'], $daysAgo = 3650, $page = 1, $pageSize = $this->egData['limit'], $sortByField = 'DATE', $sortDirection = 'DESC' ); $this->api->getUnsubscribedSubscribers( $this->egData['listID'], $daysAgo = 3650, $page = 1, $pageSize = $this->egData['limit'], $sortByField = 'DATE', $sortDirection = 'DESC' ); $this->api->getSegments($this->egData['listID']); $this->api->getListStats($this->egData['listID']); $this->api->getListCustomFields($this->egData['listID']); echo '<h2>end of list tests</h2>'; $this->index(); } public function testcampaigns() { $this->setupTests(); $this->api->getTemplates(); flush(); ob_flush(); //campaign summary $this->api->getCampaigns(); $this->api->getDrafts(); $this->api->getSummary($this->egData['campaignID']); $this->api->getEmailClientUsage($this->egData['campaignID']); $this->api->getUnsubscribes( $this->egData['campaignID'], $daysAgo = 3650, $page = 1, $pageSize = $this->egData['limit'], $sortByField = 'EMAIL', $sortDirection = 'ASC' ); echo '<h3>creating a campaign without template</h3>'; $obj = CampaignMonitorCampaign::create(); $randNumber = rand(0, 9999999); $obj->Name = 'test only ' . $randNumber; $obj->Subject = 'test only ' . $randNumber; $obj->CreateAsTemplate = false; $obj->CreateFromWebsite = true; $obj->write(); $this->api->getSummary($obj->CampaignID); echo '<h3>deleting campaign without template</h3>'; $obj->delete(); echo '<h3>creating a campaign with template</h3>'; $obj = CampaignMonitorCampaign::create(); $randNumber = rand(0, 9999999); $obj->Name = 'test only ' . $randNumber; $obj->Subject = 'test only ' . $randNumber; $obj->CreateAsTemplate = true; $obj->CreateFromWebsite = true; $obj->write(); $this->api->getSummary($obj->TemplateID); echo '<h3>deleting campaign with template</h3>'; $obj->delete(); echo '<h2>end of campaign tests</h2>'; $this->index(); } public function testsubscribers() { $this->setupTests(); //create list $result = $this->api->createList( $this->egData['listTitle'], $this->egData['unsubscribePage'], $this->egData['confirmationSuccessPage'], $this->egData['confirmedOptIn'], $this->egData['unsubscribeSetting'] ); $this->egData['tempListID'] = $result; $customFieldKey = $this->api->createCustomField( $this->egData['tempListID'], $visible = true, $type = 'multi_select_one', $title = 'are you happy?', $options = ['YES', 'NO'] ); $member = []; for ($i = 0; $i < 5; ++$i) { $member[$i] = new Member(); $email = 'test_' . $i . '_' . $this->egData['oldEmailAddress']; $member[$i] = Member::get()->filter(['Email' => $email])->First(); if (! $member[$i]) { $member[$i] = new Member(); $member[$i]->Email = $email; $member[$i]->FirstName = "First Name {$i}"; $member[$i]->Surname = "Surname {$i}"; $member[$i]->write(); } $this->api->addSubscriber( $this->egData['tempListID'], $member[$i], $customFields = [$customFieldKey => 'NO'], $resubscribe = true, $restartSubscriptionBasedAutoResponders = false ); $this->api->updateSubscriber( $this->egData['tempListID'], $member[$i], $email, $customFields = [$customFieldKey => 'YES'], $resubscribe = true, $restartSubscriptionBasedAutoResponders = false ); sleep(1); } /* $result = $this->api->addSubscribers( $this->egData["tempListID"], $membersSet, $resubscribe, $customFields = array(), $queueSubscriptionBasedAutoResponders = false, $restartSubscriptionBasedAutoResponders = false ); */ $this->api->deleteSubscriber( $this->egData['tempListID'], $member[2] ); $this->api->unsubscribeSubscriber( $this->egData['tempListID'], $member[3] ); for ($i = 0; $i < 5; ++$i) { $this->api->getSubscriberExistsForThisList( $this->egData['tempListID'], $member[$i] ); $this->api->getListsForEmail($member[$i]); $this->api->getSubscriberCanReceiveEmailsForThisList( $this->egData['tempListID'], $member[$i] ); $this->api->getSubscriberCanNoLongerReceiveEmailsForThisList( $this->egData['tempListID'], $member[$i] ); $this->api->getSubscriber( $this->egData['tempListID'], $member[$i] ); $this->api->getHistory( $this->egData['tempListID'], $member[$i] ); $this->api->deleteSubscriber( $this->egData['tempListID'], $member[$i] ); $member[$i]->delete(); sleep(1); } //delete list if ($this->egData['tempListID']) { $this->api->deleteCustomField($this->egData['tempListID'], $customFieldKey); $this->api->deleteList($this->egData['tempListID']); } echo '<h2>end of subscriber tests</h2>'; $this->index(); } protected function init() { parent::init(); if (! Config::inst()->get(CampaignMonitorAPIConnector::class, 'client_id')) { user_error('To use the campaign monitor module you must set the basic authentication credentials such as CampaignMonitorAPIConnector.client_id'); } $this->egData['listTitle'] .= rand(0, 999999999999); } protected function setupTests() { $this->api = $this->getCMAPI(); if ($this->showAll) { $this->egData['limit'] = 100; } //getLists $result = $this->api->getLists(); $this->egData['listID'] = $result[0]->ListID; //getCampaigns $result = $this->api->getCampaigns(); if (isset($result[0])) { $this->egData['campaignID'] = $result[0]->CampaignID; } $this->api->setDebug(true); } } |