<?php add_action('wpcf7_submit', 'wpcf7_flamingo_submit', 10, 2); function wpcf7_flamingo_submit($contact_form, $result) { if (!class_exists('Flamingo_Contact') or !class_exists('Flamingo_Inbound_Message')) { return; } if ($contact_form->in_demo_mode()) { return; } $cases = (array) apply_filters('wpcf7_flamingo_submit_if', array('spam', 'mail_sent', 'mail_failed')); if (empty($result['status']) or !in_array($result['status'], $cases)) { return; } $submission = WPCF7_Submission::get_instance(); if (!$submission or !($posted_data = $submission->get_posted_data())) { return; } if ($submission->get_meta('do_not_store')) { return; } $email = wpcf7_flamingo_get_value('email', $contact_form); $name = wpcf7_flamingo_get_value('name', $contact_form); $subject = wpcf7_flamingo_get_value('subject', $contact_form); $meta = array(); $special_mail_tags = array('serial_number', 'remote_ip', 'user_agent', 'url', 'date', 'time', 'post_id', 'post_name', 'post_title', 'post_url', 'post_author', 'post_author_email', 'site_title', 'site_description', 'site_url', 'site_admin_email', 'user_login', 'user_email', 'user_display_name'); foreach ($special_mail_tags as $smt) { $tagname = sprintf('_%s', $smt); $mail_tag = new WPCF7_MailTag(sprintf('[%s]', $tagname), $tagname, ''); $meta[$smt] = apply_filters('wpcf7_special_mail_tags', null, $tagname, false, $mail_tag); } $akismet = isset($submission->akismet) ? (array) $submission->akismet : null; $timestamp = $submission->get_meta('timestamp'); if ($timestamp and $datetime = date_create('@' . $timestamp)) { $datetime->setTimezone(wp_timezone()); $last_contacted = $datetime->format('Y-m-d H:i:s'); } else { $last_contacted = '0000-00-00 00:00:00'; } if ('mail_sent' == $result['status']) { $flamingo_contact = Flamingo_Contact::add(array('email' => $email, 'name' => $name, 'last_contacted' => $last_contacted)); } $post_meta = get_post_meta($contact_form->id(), '_flamingo', true); $channel_id = isset($post_meta['channel']) ? (int) $post_meta['channel'] : wpcf7_flamingo_add_channel($contact_form->name(), $contact_form->title()); if ($channel_id) { if (!isset($post_meta['channel']) or $post_meta['channel'] !== $channel_id) { $post_meta = empty($post_meta) ? array() : (array) $post_meta; $post_meta = array_merge($post_meta, array('channel' => $channel_id)); update_post_meta($contact_form->id(), '_flamingo', $post_meta); } $channel = get_term($channel_id, Flamingo_Inbound_Message::channel_taxonomy); if (!$channel or is_wp_error($channel)) { $channel = 'contact-form-7'; } else { $channel = $channel->slug; } } else { $channel = 'contact-form-7'; } $args = array('channel' => $channel, 'status' => $submission->get_status(), 'subject' => $subject, 'from' => trim(sprintf('%s <%s>', $name, $email)), 'from_name' => $name, 'from_email' => $email, 'fields' => $posted_data, 'meta' => $meta, 'akismet' => $akismet, 'spam' => 'spam' == $result['status'], 'consent' => $submission->collect_consent(), 'timestamp' => $timestamp, 'posted_data_hash' => $submission->get_posted_data_hash()); if ($args['spam']) { $args['spam_log'] = $submission->get_spam_log(); } if (isset($submission->recaptcha)) { $args['recaptcha'] = $submission->recaptcha; } $args = apply_filters('wpcf7_flamingo_inbound_message_parameters', $args); $flamingo_inbound = Flamingo_Inbound_Message::add($args); if (empty($flamingo_contact)) { $flamingo_contact_id = 0; } elseif (method_exists($flamingo_contact, 'id')) { $flamingo_contact_id = $flamingo_contact->id(); } else { $flamingo_contact_id = $flamingo_contact->id; } if (empty($flamingo_inbound)) { $flamingo_inbound_id = 0; } elseif (method_exists($flamingo_inbound, 'id')) { $flamingo_inbound_id = $flamingo_inbound->id(); } else { $flamingo_inbound_id = $flamingo_inbound->id; } $result += array('flamingo_contact_id' => absint($flamingo_contact_id), 'flamingo_inbound_id' => absint($flamingo_inbound_id)); do_action('wpcf7_after_flamingo', $result); } function wpcf7_flamingo_get_value($field, $contact_form) { if (empty($field) or empty($contact_form)) { return false; } $value = ''; if (in_array($field, array('email', 'name', 'subject'))) { $template = $contact_form->pref('flamingo_' . $field); if (null === $template) { $template = sprintf('[your-%s]', $field); } else { $template = trim(wpcf7_strip_quote($template)); } $value = wpcf7_mail_replace_tags($template); } $value = apply_filters('wpcf7_flamingo_get_value', $value, $field, $contact_form); return $value; } function wpcf7_flamingo_add_channel($slug, $name = '') { if (!class_exists('Flamingo_Inbound_Message')) { return false; } $parent = term_exists('contact-form-7', Flamingo_Inbound_Message::channel_taxonomy); if (!$parent) { $parent = wp_insert_term(__('Contact Form 7', 'contact-form-7'), Flamingo_Inbound_Message::channel_taxonomy, array('slug' => 'contact-form-7')); if (is_wp_error($parent)) { return false; } } $parent = (int) $parent['term_id']; if (!is_taxonomy_hierarchical(Flamingo_Inbound_Message::channel_taxonomy)) { return $parent; } if (empty($name)) { $name = $slug; } $channel = term_exists($slug, Flamingo_Inbound_Message::channel_taxonomy, $parent); if (!$channel) { $channel = wp_insert_term($name, Flamingo_Inbound_Message::channel_taxonomy, array('slug' => $slug, 'parent' => $parent)); if (is_wp_error($channel)) { return false; } } return (int) $channel['term_id']; } add_action('wpcf7_after_update', 'wpcf7_flamingo_update_channel', 10, 1); function wpcf7_flamingo_update_channel($contact_form) { if (!class_exists('Flamingo_Inbound_Message')) { return false; } $post_meta = get_post_meta($contact_form->id(), '_flamingo', true); $channel = isset($post_meta['channel']) ? get_term($post_meta['channel'], Flamingo_Inbound_Message::channel_taxonomy) : get_term_by('slug', $contact_form->name(), Flamingo_Inbound_Message::channel_taxonomy); if (!$channel or is_wp_error($channel)) { return; } if ($channel->name !== wp_unslash($contact_form->title())) { wp_update_term($channel->term_id, Flamingo_Inbound_Message::channel_taxonomy, array('name' => $contact_form->title(), 'slug' => $contact_form->name(), 'parent' => $channel->parent)); } } add_filter('wpcf7_special_mail_tags', 'wpcf7_flamingo_serial_number', 10, 4); function wpcf7_flamingo_serial_number($output, $name, $html, $mail_tag = null) { if (!$mail_tag instanceof WPCF7_MailTag) { wpcf7_doing_it_wrong(sprintf('%s()', __FUNCTION__), __('The fourth parameter ($mail_tag) must be an instance of the WPCF7_MailTag class.', 'contact-form-7'), '5.2.2'); } if ('_serial_number' != $name) { return $output; } if (!class_exists('Flamingo_Inbound_Message') or !method_exists('Flamingo_Inbound_Message', 'count')) { return $output; } if (!($contact_form = WPCF7_ContactForm::get_current())) { return $output; } $post_meta = get_post_meta($contact_form->id(), '_flamingo', true); $channel_id = isset($post_meta['channel']) ? (int) $post_meta['channel'] : wpcf7_flamingo_add_channel($contact_form->name(), $contact_form->title()); if ($channel_id) { return 1 + (int) Flamingo_Inbound_Message::count(array('channel_id' => $channel_id)); } return 0; }