is_confirmed()) { do_action('f12_cf7_doubleoptin_already_confirmed', $hash, $OptIn); return 0; } do_action('f12_cf7_doubleoptin_before_confirm', $hash, $OptIn); $OptIn->set_doubleoptin($value); $OptIn->set_updatetime(time()); $OptIn->set_ipaddr_confirmation(CF7DoubleOptIn::getInstance()->getIPAdress()); $result = $OptIn->save(); if ($result) { do_action('f12_cf7_doubleoptin_after_confirm', $hash, $OptIn); } return $result; } /** * Add Stylesheets */ public function validateOptIn() { if (!isset($_GET['optin'])) { return; } $hash = sanitize_text_field($_GET['optin']); $OptIn = OptIn::get_by_hash($hash); if (null != $OptIn) { if ($OptIn->isType('avada')) { if($this->updateOptInByHash($hash, 1) > 0) { // Setup the contact form 7 which will fire the form send after loading the page) $formData = maybe_unserialize($OptIn->get_content()); if (!isset($formData['fields']) || !isset($formData['sendmail_args'])) { return; } $formData = CF7DoubleOptIn::getInstance()->sanitize_array($formData); $_POST = array('formData' => implode('&', $formData['fields'])); $_POST['field_labels'] = ''; $_POST['form_id'] = $OptIn->get_cf_form_id(); $_POST['hidden_field_names'] = ''; require_once('AvadaFormSubmit.class.php'); $AvadaFormSubmit = new AvadaFormSubmit(); $AvadaFormSubmit->submit($OptIn->get_cf_form_id(), $formData['sendmail_args']); } } } } /** * Add the double opt in link to the body * * @param string $body * @param OptIn $OptIn * @param int $page - The Page ID * * @return string */ private function addDoubleOptInLink($body, $OptIn) { $link = $OptIn->get_link_optin(); return str_replace('[doubleoptinlink]', $link, $body); } /** * Add additional placeholder like time, date, subject * @param $form \WPCF7_ContactForm * @param $submission \WPCF7_Submission * @param $body * @param $OptIn * @param $parameter */ private function addAdditionalPlaceholder($form_data, $body, $OptIn, $parameter) { # set the default timezone date_default_timezone_set(get_option('timezone_string')); $placeholder = array( 'doubleoptin_form_url' => $form_data['submission']['source_url]'], 'doubleoptin_form_subject' => $parameter['subject'], 'doubleoptin_form_date' => date(get_option('date_format')), 'doubleoptin_form_time' => date(get_option('time_format')), 'doubleoptin_form_email' => get_option('admin_email') ); foreach ($placeholder as $key => $value) { $body = str_replace('[' . $key . ']', $value, $body); } return $body; } /** * Add formular informaition to the database * * @param \WPCF7_ContactForm * @param array * * @return OptIn|null */ private function addRequest($post_id, $parameter, $sendmail_args, $files = array()) { global $wpdb; if (null == $wpdb) { return 0; } $copiedFiles = array(); if (!empty($files)) { foreach ($files as $key => $subfiles) { foreach ($subfiles as $file) { $newFile = explode('/', $file); $name = $newFile[count($newFile) - 1]; $name = time() . '_' . $name; $newFile[count($newFile) - 1] = $name; $newFile = implode("/", $newFile); if (copy($file, $newFile)) { $copiedFiles[] = $newFile; } } } } $parameter = \apply_filters('f12_cf7_doubleoptin_add_request_parameter', $parameter); $formParameter = CF7DoubleOptIn::getInstance()->getParameter($post_id); $form = get_post($post_id); $data = array( 'cf_form_id' => $post_id, 'doubleoptin' => 0, 'createtime' => time(), 'content' => maybe_serialize(array('fields' => $parameter, 'sendmail_args' => $sendmail_args)), 'files' => maybe_serialize($copiedFiles), 'ipaddr_register' => CF7DoubleOptIn::getInstance()->getIPAdress(), 'category' => (int)$formParameter['category'], 'form' => do_shortcode($form->post_content), 'email' => $parameter[$formParameter['recipient']], ); $OptIn = new OptIn($data); if ($OptIn->save()) { return $OptIn; } return null; } /** * Validate if the optin is enabled. */ private function isOptinEnabled($post_id) { // Disable optin sending if the optin flag is set. if (isset($_GET['optin'])) { return false; } $parameter = CF7DoubleOptIn::getInstance()->getParameter($post_id); if ((int)$parameter['enable'] != 1) { return false; } return true; } private function get_results_from_message($type, $info){ return [ 'status' => $type, 'info' => $info, ]; } /** * On Form Submit add the double optin if enabled * @param array $parameter * @param int $post_id * @param array $data */ public function onSubmit($form_parameter, $submission_id, $form_data) { $post_id = isset($_POST['form_id']) ? absint(sanitize_text_field(wp_unslash($_POST['form_id']))) : 0; // phpcs:ignore WordPress.Security.NonceVerification if (!$post_id) { return; } $parameter = CF7DoubleOptIn::getInstance()->getParameter($post_id); if ($this->isOptinEnabled($post_id)) { // Remove Contact Form 7 DB hook to ensure the optin mail is not saved $OptIn = $this->addRequest($post_id, $form_data['data'], $form_parameter, $form_parameter['attachments']); $body = $this->addDoubleOptInLink($parameter['body'], $OptIn); $body = $this->addAdditionalPlaceholder($form_data, $body, $OptIn, $parameter); // Update the opt in after setting the opt-in content. $OptIn->set_mail_optin($body); $OptIn->save(); // Prepare the Opt-In Mail $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=UTF8' . "\r\n"; $headers .= 'From: ' . $parameter['sender'] . "\r\n"; // $recipient = $parameter[$formParameter['recipient']]; \wp_mail( $form_data['data'][$parameter['recipient']], $parameter['subject'], $body, $headers ); do_action('f12_cf7_doubleoptin_sent', $form_data, $post_id); die( wp_json_encode( $this->get_results_from_message( 'success', 'opt-in send' ) ) ); //$abort = true; } else if (isset($_GET['optin'])) { $OptIn = OptIn::get_by_hash(esc_sql($_GET['optin'])); } } } }