| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- <?php
- /**
- ** Module for Flamingo plugin.
- ** http://wordpress.org/extend/plugins/flamingo/
- **/
- 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;
- }
- $fields_senseless =
- $contact_form->scan_form_tags( array( 'feature' => 'do-not-store' ) );
- $exclude_names = array();
- foreach ( $fields_senseless as $tag ) {
- $exclude_names[] = $tag['name'];
- }
- $exclude_names[] = 'g-recaptcha-response';
- foreach ( $posted_data as $key => $value ) {
- if ( '_' == substr( $key, 0, 1 )
- or in_array( $key, $exclude_names ) ) {
- unset( $posted_data[$key] );
- }
- }
- $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 ) {
- $meta[$smt] = apply_filters( 'wpcf7_special_mail_tags', '',
- sprintf( '_%s', $smt ), false );
- }
- $akismet = isset( $submission->akismet )
- ? (array) $submission->akismet : null;
- if ( 'mail_sent' == $result['status'] ) {
- $flamingo_contact = Flamingo_Contact::add( array(
- 'email' => $email,
- 'name' => $name,
- ) );
- }
- $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,
- '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(),
- );
- if ( $args['spam'] ) {
- $args['spam_log'] = $submission->get_spam_log();
- }
- if ( isset( $submission->recaptcha ) ) {
- $args['recaptcha'] = $submission->recaptcha;
- }
- $flamingo_inbound = Flamingo_Inbound_Message::add( $args );
- $result += array(
- 'flamingo_contact_id' =>
- empty( $flamingo_contact ) ? 0 : absint( $flamingo_contact->id ),
- 'flamingo_inbound_id' =>
- empty( $flamingo_inbound ) ? 0 : 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' ) ) ) {
- $templates = $contact_form->additional_setting( 'flamingo_' . $field );
- if ( empty( $templates[0] ) ) {
- $template = sprintf( '[your-%s]', $field );
- } else {
- $template = trim( wpcf7_strip_quote( $templates[0] ) );
- }
- $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 ) ) {
- // backward compat for Flamingo 1.0.4 and lower
- 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, 3 );
- function wpcf7_flamingo_serial_number( $output, $name, $html ) {
- 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;
- }
|