Source of file EcommerceNewsletterCampaignMonitorSignupDecoratorFormFixes.php
Size: 7,455 Bytes - Last Modified: 2021-12-23T10:40:57+00:00
/var/www/docs.ssmods.com/process/src/src/Extensions/EcommerceNewsletterCampaignMonitorSignupDecoratorFormFixes.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | <?php namespace Sunnysideup\EcommerceNewsletterCampaignMonitor\Extensions; use SilverStripe\Control\Email\Email; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Convert; use SilverStripe\Core\Extension; use SilverStripe\Forms\CheckboxField; use SilverStripe\Forms\CompositeField; use SilverStripe\Forms\FieldList; use SilverStripe\Forms\Form; use SilverStripe\Forms\HeaderField; use SilverStripe\Forms\LiteralField; use SilverStripe\Security\Member; use SilverStripe\Security\Security; use SilverStripe\View\Requirements; use Sunnysideup\CampaignMonitor\Api\CampaignMonitorAPIConnector; use Sunnysideup\Ecommerce\Config\EcommerceConfig; use Sunnysideup\Ecommerce\Model\Order; class EcommerceNewsletterCampaignMonitorSignupDecoratorFormFixes extends Extension { private static $fields_to_hide = [ 'FirstName', 'Surname', 'SubscribeChoice', ]; /** * @var CampaignMonitorAPIConnector */ private static $_api; /** * @return CampaignMonitorAPIConnector */ public function getAPI() { if (! self::$_api) { self::$_api = CampaignMonitorAPIConnector::create(); self::$_api->init(); } return self::$_api; } public function updateFields(FieldList $fields) { if ($this->hasCampaignMonitorPage()) { $page = $this->CampaignMonitorPage(); if ($page->ReadyToReceiveSubscribtions()) { // Create fields $member = Security::getCurrentUser(); if (! $member) { $member = new Member(); } $campaignMonitorFieldsHolder = CompositeField::create(); $campaignMonitorFieldsHolder->setName('CampaignMonitorFields'); $signupField = $member->getCampaignMonitorSignupField($page->ListID, 'SubscribeChoice'); $fieldsToHide = Config::inst()->get(EcommerceNewsletterCampaignMonitorSignupDecoratorFormFixes::class, 'fields_to_hide'); foreach ($fieldsToHide as $field) { Requirements::customCSS('#CMCustomField' . $field . ' {display: none;}'); } $config = EcommerceConfig::inst(); if ($config->CampaignMonitorSignupHeader) { $campaignMonitorFieldsHolder->push(new HeaderField('CampaignMonitorNewsletterSignupHeader', $config->CampaignMonitorSignupHeader, 3)); } if ($config->CampaignMonitorSignupIntro) { $campaignMonitorFieldsHolder->push(new LiteralField('CampaignMonitorNewsletterSignupContent', '<p class="campaignMonitorNewsletterSignupContent">' . $config->CampaignMonitorSignupIntro . '</p>')); } $label = $config->CampaignMonitorSignupLabel; if (! $label) { $label = _t('EcommerceNewsletterCampaignMonitorSignupDecoratorFormFixes.JOIN', 'Join'); } $campaignMonitorFieldsHolder->push(new CheckboxField('CampaignMonitorNewsletterSubscribeCheckBox', $label)); $campaignMonitorFieldsHolder->push($signupField); $fields->push($campaignMonitorFieldsHolder); Requirements::customCSS(' #SubscribeChoice {display: none!important;} .CMFieldsCustomFieldsHolder {display: none!important;} '); Requirements::customScript('jQuery("#CampaignMonitorNewsletterSubscribeCheckBox").on("change", function(){jQuery(".CMFieldsCustomFieldsHolder").slideToggle();});'); } } } /** * adds the user to the list ... * * @param array $data * @param Form $form * @param Order $order * @param Member $member */ public function saveAddressExtension($data, $form, ?Order $order = null, ?Member $member = null) { if (isset($data['CampaignMonitorNewsletterSubscribeCheckBox']) && $data['CampaignMonitorNewsletterSubscribeCheckBox']) { if ($this->hasCampaignMonitorPage()) { $page = $this->CampaignMonitorPage(); if ($page->ReadyToReceiveSubscribtions()) { //true until proven otherwise. $newlyCreatedMember = false; $isSubscribe = isset($data['SubscribeChoice']) && 'Subscribe' === $data['SubscribeChoice']; $member = Security::getCurrentUser(); if (! $member) { //$memberAlreadyLoggedIn = false; $existingMember = Member::get()->filter(['Email' => Convert::raw2sql($data[Email::class])])->First(); //if($isSubscribe && $existingMember){ //$form->addErrorMessage('Email', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL_EXISTS", "This email is already in use. Please log in for this email or try another email address."), 'warning'); //$this->redirectBack(); //return; //} $member = $existingMember; if (! $member) { $newlyCreatedMember = true; $member = new Member(); } } //logged in: if the member already as someone else then you can't sign up. //$memberAlreadyLoggedIn = true; //$existingMember = Member::get() // ->filter(array("Email" => Convert::raw2sql($data["CampaignMonitorEmail"]))) // ->exclude(array("ID" => $member->ID)) // ->First(); //if($isSubscribe && $existingMember) { //$form->addErrorMessage('CampaignMonitorEmail', _t("CAMPAIGNMONITORSIGNUPPAGE.EMAIL_EXISTS", "This email is already in use by someone else. Please log in for this email or try another email address."), 'warning'); //$this->redirectBack(); //return; //} //if this is a new member then we save the member if ($isSubscribe) { if ($newlyCreatedMember) { $form->saveInto($member); $member->Email = Convert::raw2sql($data['CampaignMonitorEmail']); //$member->SetPassword = true; //$member->Password = Member::create_new_password(); $member->write(); } } $member->processCampaignMonitorSignupField($page, $data, $form); } } } } /** * returns ID of Mailing List that people are subscribing to. * * @return \Sunnysideup\CampaignMonitor\CampaignMonitorSignupPage */ protected function hasCampaignMonitorPage() { $config = EcommerceConfig::inst(); return (bool) $config->CampaignMonitorSignupPageID; } /** * returns ID of Mailing List that people are subscribing to. * * @return \Sunnysideup\CampaignMonitor\CampaignMonitorSignupPage */ protected function campaignMonitorPage() { $config = EcommerceConfig::inst(); return $config->CampaignMonitorSignupPage(); } } |