configHandler = $configHandler; $this->apiHandler = $apiHandler; } /** * Listen to events */ public function listen() { add_action('wpcf7_mail_sent', [$this, 'onMailSentSucceeded']); add_action('wpcf7_mail_failed', [$this, 'onMailSentFailed']); } /** * @param \WPCF7_ContactForm $contactForm */ public function onMailSentSucceeded(\WPCF7_ContactForm $contactForm) { $contactFormOptions = $this->configHandler->getOptions($contactForm->id()); if (!$contactFormOptions['enabled']) { return; } $groupId = $contactFormOptions['group_id'] ?? 0; if (0 === $groupId) { return; } $group = $this->apiHandler->getGroupById($groupId); if (!$group->getId()) { return; } $formId = $contactFormOptions['form_id'] ?? 0; if (0 === $formId) { return; } $form = $this->apiHandler->getFormByFormId($formId); if (!$form->getId()) { return; } $submittedData = $this->getSubmittedFormData(); if (empty($submittedData) || !isset($submittedData['email'])) { return; } $attributeSet = $this->apiHandler->getAttributes($group->getId()); if (!is_array($attributeSet)) { $attributeSet = []; } $indexedAttributeSet = []; foreach ($attributeSet as $attribute) { $indexedAttributeSet[$attribute->getId()] = $attribute; } $fieldMappings = $contactFormOptions['field_mappings']; $globalAttributes = []; $groupAttributes = []; foreach ($fieldMappings as $key => $attributeId) { /** @var Attribute $attribute */ $attribute = $indexedAttributeSet[$attributeId]; if (!$attribute) { continue; } $value = $submittedData[$key]; if ($attribute->isGlobal()) { $globalAttributes[$key] = $value; continue; } $groupAttributes[$key] = $value; } $timestamp = time(); $receiver = new Receiver(); $receiver->setEmail($submittedData['email']); $receiver->setRegistered($timestamp); $receiver->setActivated(0); $receiver->setDeactivated($timestamp); $receiver->setSource($submittedData['subject'] ?? __('All.In Data - Contact Form 7 CleverReach Integration')); $receiver->setAttributes($groupAttributes); $receiver->setGlobalAttributes($globalAttributes); $this->apiHandler->addReceiverToGroup($group, $form, $receiver); } /** * @param \WPCF7_ContactForm $contactForm */ public function onMailSentFailed(\WPCF7_ContactForm $contactForm) { // } /** * @return array|mixed|null */ private function getSubmittedFormData() { $submittedContactForm = \WPCF7_Submission::get_instance(); if (!$submittedContactForm) { return []; } return $submittedContactForm->get_posted_data(); } }