Source of file ChimpifyAdmin.php
Size: 4,458 Bytes - Last Modified: 2021-12-23T10:37:50+00:00
/var/www/docs.ssmods.com/process/src/code/admin/ChimpifyAdmin.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | <?php use \DrewM\MailChimp\MailChimp; class ChimpifyAdmin extends ModelAdmin { private static $managed_models = [ 'ChimpifyCampaign', ]; private static $url_segment = 'mailchimp-campaigns'; private static $menu_title = 'MailChimp Campaigns'; public function getEditForm($id = null, $fields = null) { $form = parent::getEditForm($id, $fields); $gridFieldName = $this->sanitiseClassName($this->modelClass); $gridFieldConfig = $form->Fields()->fieldByName($gridFieldName)->getConfig(); $gridFieldConfig->removeComponentsByType('GridFieldPrintButton'); $gridFieldConfig->removeComponentsByType('GridFieldExportButton'); $gridFieldConfig ->getComponentByType('GridFieldAddNewButton') ->setButtonName( _t('Chimpify.ButtonLabelAddMailChimpCampaign', 'Add MailChimp Campaign') ); $gridFieldConfig ->getComponentByType('GridFieldDetailForm') ->setItemRequestClass('ChimpifyRequestHandler'); return $form; } } class ChimpifyRequestHandler extends GridFieldDetailForm_ItemRequest { private static $allowed_actions = [ 'edit', 'view', 'ItemEditForm' ]; public function ItemEditForm() { $form = parent::ItemEditForm(); if (!$this->record->ID) { return $form; } $formActions = $form->Actions(); if ($actions = $this->record->getCMSActions()) { foreach ($actions as $action) { $formActions->push($action); } } return $form; } /** * Handles responses from the MailChimp API. * * @param MailChimp $mailChimp * @return Array */ public function handleMailChimpResponse($mailChimp) { $response = $mailChimp->getLastResponse(); if (!$mailChimp->success()) { $message = $response && array_key_exists($response['errors']) ? $response['errors'][0]['message'] : 'Error connecting to MailChimp API'; user_error($message, E_USER_ERROR); } return Convert::json2array($response['body']); } /** * Creates a MailChimp campaign via the API. * * @param MailChimp $mailChimp * @return Array */ public function createCampaign($mailChimp) { $mailChimp->post('campaigns', [ 'type' => 'regular', 'settings' => [ 'subject_line' => $this->record->Title, 'from_name' => $this->record->FromName, 'reply_to' => $this->record->ReplyTo, ], ]); return $this->handleMailChimpResponse($mailChimp); } /** * Populates a MailChimp Campaign with Blog content via the API. * * @param MailChimp $mailChimp * @param Int $campaignID * @return Array */ public function populateCampaignContent($mailChimp, $campaignID) { $mailChimp->put("campaigns/{$campaignID}/content", [ 'template' => [ 'id' => $this->record->TemplateID, 'sections' => [ 'chimpify' => $this->record->getCampaignContent(), ], ], ]); return $this->handleMailChimpResponse($mailChimp); } /** * Creates and populates a MailChimp Campaign with blog content via the API. * * @param Array $data * @param Form $form */ public function doGenerateCampaign($data, $form) { if (!$api_key = $this->record->config()->get('api_key')) { user_error( 'Add a MailChimp API key to config (ChimpifyCampaign::api_key)', E_USER_ERROR ); } $controller = $this->getToplevelController(); if (!$this->record || !$this->record->canEdit()) { return $controller->httpError(403); } $form->validate(); $mailChimp = new MailChimp($api_key); $response = $this->createCampaign($mailChimp); $response = $this->populateCampaignContent($mailChimp, $response['id']); $form->sessionMessage( _t( 'Chimpify.MessageGenerateCampaignSuccess', 'Successfully created MailChimp Campaign' ), 'good' ); return $controller->redirectBack(); } } |