/** * Handle * * @param Subscription $subscription */ public function handle(Subscription $subscription) { // Init variables $mergeFields = array(); $interests = array(); try { // We must overwrite existing interests if ($this->modulesSettings->get('Mailmotor', 'overwrite_interests', true)) { $possibleInterests = $this->subscriber->getInterests(); // Loop interests foreach ($possibleInterests as $categoryId => $categoryInterest) { foreach ($categoryInterest['children'] as $categoryChildId => $categoryChildTitle) { // Add interest $interests[$categoryChildId] = in_array($categoryChildId, $subscription->interests); } } } elseif (!empty($subscription->interests)) { // Loop checked interests foreach ($subscription->interests as $checkedInterestId) { // Add interest $interests[$checkedInterestId] = true; } } // Fallback for when no mail-engine is chosen in the Backend } catch (NotImplementedException $e) { } // Subscribing the user, will dispatch an event $this->subscriber->subscribe($subscription->email, $subscription->language, $mergeFields, $interests); }
/** * On FormBuilderSubmittedEvent * * @param FormBuilderSubmittedEvent $event */ public function onFormBuilderSubmittedEvent(FormBuilderSubmittedEvent $event) { if ($this->modulesSettings->get('Mailmotor', 'automatically_subscribe_from_form_builder_submitted_form', false)) { $form = $event->getForm(); $data = $event->getData(); $email = null; // Check if we have a replyTo email set foreach ($form['fields'] as $field) { if (array_key_exists('reply_to', $field['settings']) && $field['settings']['reply_to'] === true) { $email = unserialize($data[$field['id']]['value']); } } // Define language $language = array_key_exists('language', $form) ? $form['language'] : $this->modulesSettings->get('Core', 'default_language', 'en'); // We subscribe the replyTo email try { // Does email exists or not in our mailing list $exists = (bool) $this->subscriber->exists($email); // We only need to subscribe when not exists if (!$exists) { $this->subscriber->subscribe($email, $language, array(), array(), false); } } catch (NotImplementedException $e) { // We do nothing as fallback when no mail-engine is chosen in the Backend } } }
/** * @param mixed $value * @param Constraint $constraint */ public function validate($value, Constraint $constraint) { try { // The email is already in our mailing list if ($this->subscriber->isSubscribed($value)) { $this->context->buildViolation($constraint->alreadySubscribedMessage)->addViolation(); } // fallback for when no mail-engine is chosen in the Backend } catch (NotImplementedException $e) { // do nothing } }
/** * @return array */ public function getInterests() { $interests = array(); try { $mailMotorInterests = $this->subscriber->getInterests(); // Has interests if (!empty($mailMotorInterests)) { // Loop interests foreach ($mailMotorInterests as $categoryId => $categoryInterest) { foreach ($categoryInterest['children'] as $categoryChildId => $categoryChildTitle) { // Add interest value for checkbox $interests[$categoryChildId] = $categoryChildTitle; } } } // Fallback for when no mail-engine is chosen in the Backend } catch (NotImplementedException $e) { } return $interests; }
/** * Handle * * @param Unsubscription $unsubscription */ public function handle(Unsubscription $unsubscription) { // Unsubscribing the user, will dispatch an event $this->subscriber->unsubscribe($unsubscription->email); }