Source of file NewsletterForm.php
Size: 5,721 Bytes - Last Modified: 2021-12-23T10:02:29+00:00
/var/www/docs.ssmods.com/process/src/code/form/NewsletterForm.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 | <?php class NewsletterForm extends Form { /** * ProspectForm constructor. * * @param \Page_Controller $controller * @param string $name */ public function __construct(\Page_Controller $controller, $name, $location = null) { parent::__construct($controller, $name, FieldList::create(), FieldList::create(), null); $this->fields = $this->getFieldList($location); $this->actions = $this->getActionList($location); $this->validator = $this->getRequiredFieldList(); // setup form errors (re-init after parent::__construct call) parent::setupFormErrors(); // trigger foundation abide validation $this->setAttribute('data-abide', 'abide'); } /** * Retrieve the field list for this form * * @return \FieldList */ protected function getFieldList($location = null) { return FieldList::create( CompositeField::create( CompositeField::create( $this->getBareFieldList($location) ) ) ->addExtraClass('row') ) ->setForm($this); } /** * Retrieve the actions for this form * * @return \FieldList */ protected function getActionList($location = null) { return FieldList::create( $this->getBareActionList($location) ) ->setForm($this); } /** * Retrieve the validator for this form * * @return RequiredFields */ protected function getRequiredFieldList() { return RequiredFields::create( $this->getBareRequiredFieldList() ) ->setForm($this); } /** * Retrieve the bare field list for this form * * @return array */ protected function getBareFieldList($location = null) { $fields = [ TextField::create( 'Name', _t('NewsletterSubscription.db_Name', 'Name') ), EmailField::create( 'Email', _t('NewsletterSubscription.db_Email', 'Email') ), ]; if ($location == 'Footer') { /** @var FormField $field */ foreach ($fields as $field) { $field->setFieldHolderTemplate('FormField_Half_holder'); } } $this->extend('updateBareFieldList', $fields); return $fields; } /** * Retrieve the bare action list for this form * * @return \FieldList */ protected function getBareActionList($location = null) { $actions = [ FormAction::create( 'process', _t('Newsletter.Form.Submit', 'Submit') ) ->addExtraClass('medium secondary right') ->setUseButtonTag(true), ]; $this->extend('updateBareActionList', $actions); return $actions; } /** * Retrieve the validator fields for this form * * @return static */ protected function getBareRequiredFieldList() { $requiredFields = array_keys(singleton('NewsletterSubscription')->stat('db')); $this->extend('updateBareRequiredFieldList', $requiredFields); return $requiredFields; } /** * Process the request * * @param $data * @param $form * * @return bool|\SS_HTTPResponse */ public function process($data, $form) { $jsend = new JSendResponse(); $siteConfig = (method_exists($this->controller->data(), 'alternateSiteConfig')) ? $this->controller->data()->alternateSiteConfig() : SiteConfig::current_site_config(); // prevent duplicate key errors if (!($sub = NewsletterSubscription::get() ->filter(['Email' => $data['Email']]) ->First()) ) { $sub = NewsletterSubscription::create(); $this->saveInto($sub); if ($sub->write()) { switch ($siteConfig->NewsletterSubscriptionService) { case NewsletterSiteConfigExtension::SERVICE_MAILCHIMP: if ($identifier = NewsletterMailChimp::subscribe($data)) { $sub->Identifier = $identifier; $sub->write(); } else { $jsend->setStatus(JSendResponse::STATUS_FAIL); } break; case NewsletterSiteConfigExtension::SERVICE_GETRESPONSE: if (NewsletterGetResponse::subscribe($data) && ($identifier = NewsletterGetResponse::search($data['Email']))) { $sub->Identifier = $identifier; $sub->write(); } else { $jsend->setStatus(JSendResponse::STATUS_FAIL); } break; } } else { $jsend->setStatus(JSendResponse::STATUS_ERROR); $jsend->setCode(500); } } if ($this->controller->getRequest() ->isAjax() ) { $jsend->setData([ 'response' => $jsend->isSuccess() ? $siteConfig->NewsletterThanksContent : $siteConfig->NewsletterErrorMessage, ]); $response = new SS_HTTPResponse($jsend->getJson()); return $response; } Session::set('SubscriptionSaved', true); return $this->controller->redirect($this->controller->Link('thanks')); } } |