예제 #1
0
/**
 * Do something to loading of forms
 *
 * @since 0.2.0
 *
 * @uses "caldera_forms_ajax_return"
 *
 * @param string $out
 * @param array $form The form configuration
 *
 * @return mixed
 */
function cf_form_connector_control_form_load($out, $form)
{
    if ($out['type'] !== 'complete') {
        return $out;
    }
    if (!empty($form['stage_form'])) {
        $stage_form = Caldera_Forms_Forms::get_form($form['stage_form']);
        $process_record = cf_form_connector_get_current_position();
        $process_record[$form['stage_form']]['fields'] = array_merge((array) $process_record[$form['stage_form']]['fields'], $form['fields']);
        $process_record[$form['stage_form']]['field_values'] = array_merge((array) $process_record[$form['stage_form']]['field_values'], Caldera_Forms::get_submission_data($form));
        if (!empty($form['form_connection'])) {
            $process_record[$form['stage_form']][$form['ID']] = array('id' => $form['form_connection']['entry_id']);
            if (empty($form['form_connection']['back_button'])) {
                $process_record[$form['stage_form']][$form['ID']]['no_back'] = true;
            }
            if (!empty($process_record[$form['stage_form']]['previous_form'])) {
                $process_record[$form['stage_form']][$form['ID']]['back'] = $process_record[$form['stage_form']]['previous_form'];
            }
            $process_record[$form['stage_form']]['previous_form'] = $form['ID'];
            $process_record[$form['stage_form']]['current_form'] = $form['form_connection']['next_form_id'];
            cf_form_connector_set_current_position($process_record);
            // handler proper redirects
            if (!empty($out['url'])) {
                wp_send_json($out);
            }
            wp_send_json(array('target' => $form['stage_form'] . '_' . (int) $_POST['_cf_frm_ct'], 'form' => Caldera_Forms::render_form($stage_form)));
        } else {
            // is current = stage ? yup last form last process.
            if (empty($form['form_connection']) || !empty($process_record[$form['stage_form']]['current_form']) && $process_record[$form['stage_form']]['current_form'] === $form['stage_form']) {
                $connected_form = Caldera_Forms_Forms::get_form($form['stage_form']);
                if (is_array($connected_form) && (!empty($connected_form['mailer']['enable_mailer']) || $connected_form['mailer']['on_insert'])) {
                    $entry_id = $process_record[$connected_form['ID']]['entry_id'];
                    $data = $process_record[$form['stage_form']]['field_values'];
                    $process_record[$form['stage_form']] = array();
                    cf_form_connector_set_current_position($process_record);
                    if (class_exists('Caldera_Forms_Magic_Summary')) {
                        $message_setting = $connected_form['mailer']['email_message'];
                        if (false !== strpos($message_setting, '{summary}')) {
                            $magic_parser = new Caldera_Forms_Magic_Summary($connected_form, $data);
                            if (!isset($connected_form['mailer']['email_type']) || $connected_form['mailer']['email_type'] == 'html') {
                                $magic_parser->set_html_mode(true);
                            } else {
                                $magic_parser->set_html_mode(false);
                            }
                            $magic_parser->set_fields(cf_conn_form_get_all_fields($connected_form));
                            $message_setting = str_replace('{summary}', $magic_parser->get_tag(), $message_setting);
                            $connected_form['mailer']['email_message'] = $message_setting;
                        }
                    }
                    Caldera_Forms_Save_Final::do_mailer($connected_form, $entry_id, $data);
                }
                return $out;
            }
            $process_record[$form['stage_form']][$form['ID']] = array('id' => (int) Caldera_Forms::do_magic_tags('{entry_id}'));
            if (!empty($process_record[$form['stage_form']]['previous_form'])) {
                $process_record[$form['stage_form']][$form['ID']]['back'] = $process_record[$form['stage_form']]['previous_form'];
            }
            $process_record[$form['stage_form']]['previous_form'] = $form['ID'];
            $process_record[$form['stage_form']]['current_form'] = $form['stage_form'];
            $process_record[$form['stage_form']]['fields'] = array_merge((array) $process_record[$form['stage_form']]['fields'], $form['fields']);
            $process_record[$form['stage_form']]['field_values'] = array_merge((array) $process_record[$form['stage_form']]['field_values'], Caldera_Forms::get_submission_data($form));
            cf_form_connector_set_current_position($process_record);
            Caldera_Forms::process_submission();
            exit;
        }
    }
    return $out;
}
예제 #2
0
파일: save.php 프로젝트: joecooper3/2015
 /**
  * Process mailer
  *
  * @since 1.2.3
  *
  * @param array $form Form config
  * @param int|null $entryid Optional. ID of entry to send. If not provided, will be deteremined based on global $transdata
  * @param array|null $data Optional. Data to use for sending. If not provided, will be retrieved by form ID.
  */
 public static function do_mailer($form, $entryid = null, $data = null)
 {
     global $transdata;
     if (!$data) {
         $data = Caldera_Forms::get_submission_data($form);
     }
     // add entry ID to transient data
     if (!isset($entryid)) {
         $entryid = null;
     }
     $transdata['entry_id'] = $entryid;
     // do mailer!
     $sendername = __('Caldera Forms Notification', 'caldera-forms');
     if (!empty($form['mailer']['sender_name'])) {
         $sendername = $form['mailer']['sender_name'];
         if (false !== strpos($sendername, '%')) {
             $isname = Caldera_Forms::get_slug_data(trim($sendername, '%'), $form);
             if (!empty($isname)) {
                 $sendername = $isname;
             }
         }
     }
     if (empty($form['mailer']['sender_email'])) {
         $sendermail = get_option('admin_email');
     } else {
         $sendermail = $form['mailer']['sender_email'];
         if (false !== strpos($sendermail, '%')) {
             $ismail = Caldera_Forms::get_slug_data(trim($sendermail, '%'), $form);
             if (is_email($ismail)) {
                 $sendermail = $ismail;
             }
         }
     }
     // use summary
     if (empty($form['mailer']['email_message'])) {
         $form['mailer']['email_message'] = "{summary}";
     }
     $mail = array('recipients' => array(), 'subject' => Caldera_Forms::do_magic_tags($form['mailer']['email_subject']), 'message' => stripslashes($form['mailer']['email_message']) . "\r\n", 'headers' => array(Caldera_Forms::do_magic_tags('From: ' . $sendername . ' <' . $sendermail . '>')), 'attachments' => array());
     // if added a bcc
     if (isset($form['mailer']['bcc_to'])) {
         $mail['headers'][] = Caldera_Forms::do_magic_tags('Bcc: ' . $form['mailer']['bcc_to']);
     }
     // if added a replyto
     $reply_to = trim($form['mailer']['reply_to']);
     if (!empty($reply_to)) {
         $mail['headers'][] = Caldera_Forms::do_magic_tags('Reply-To: <' . $reply_to . '>');
     }
     // Filter Mailer first as not to have user input be filtered
     $mail['message'] = Caldera_Forms::do_magic_tags($mail['message']);
     if ($form['mailer']['email_type'] == 'html') {
         $mail['headers'][] = "Content-type: text/html";
         $mail['message'] = wpautop($mail['message']);
     }
     // get tags
     preg_match_all("/%(.+?)%/", $mail['message'], $hastags);
     if (!empty($hastags[1])) {
         foreach ($hastags[1] as $tag_key => $tag) {
             $tagval = Caldera_Forms::get_slug_data($tag, $form);
             if (is_array($tagval)) {
                 $tagval = implode(', ', $tagval);
             }
             $mail['message'] = str_replace($hastags[0][$tag_key], $tagval, $mail['message']);
         }
     }
     //$mail['message']
     // ifs
     preg_match_all("/\\[if (.+?)?\\](?:(.+?)?\\[\\/if\\])?/", $mail['message'], $hasifs);
     if (!empty($hasifs[1])) {
         // process ifs
         foreach ($hasifs[0] as $if_key => $if_tag) {
             $content = explode('[else]', $hasifs[2][$if_key]);
             if (empty($content[1])) {
                 $content[1] = '';
             }
             $vars = shortcode_parse_atts($hasifs[1][$if_key]);
             foreach ($vars as $varkey => $varval) {
                 if (is_string($varkey)) {
                     $var = Caldera_Forms::get_slug_data($varkey, $form);
                     if (in_array($varval, (array) $var)) {
                         // yes show code
                         $mail['message'] = str_replace($hasifs[0][$if_key], $content[0], $mail['message']);
                     } else {
                         // nope- no code
                         $mail['message'] = str_replace($hasifs[0][$if_key], $content[1], $mail['message']);
                     }
                 } else {
                     $var = Caldera_Forms::get_slug_data($varval, $form);
                     if (!empty($var)) {
                         // show code
                         $mail['message'] = str_replace($hasifs[0][$if_key], $content[0], $mail['message']);
                     } else {
                         // no code
                         $mail['message'] = str_replace($hasifs[0][$if_key], $content[1], $mail['message']);
                     }
                 }
             }
         }
     }
     if (!empty($form['mailer']['recipients'])) {
         $mail['recipients'] = explode(',', Caldera_Forms::do_magic_tags($form['mailer']['recipients']));
     } else {
         $mail['recipients'][] = get_option('admin_email');
     }
     $submission = array();
     foreach ($data as $field_id => $row) {
         if ($row === null || !isset($form['fields'][$field_id])) {
             continue;
         }
         $key = $form['fields'][$field_id]['slug'];
         if (is_array($row)) {
             if (!empty($row)) {
                 $keys = array_keys($row);
                 if (is_int($keys[0])) {
                     $row = implode(', ', $row);
                 } else {
                     $tmp = array();
                     foreach ($row as $linekey => $item) {
                         if (is_array($item)) {
                             $item = '( ' . implode(', ', $item) . ' )';
                         }
                         $tmp[] = $linekey . ': ' . $item;
                     }
                     $row = implode(', ', $tmp);
                 }
             } else {
                 $row = null;
             }
         }
         $mail['message'] = str_replace('%' . $key . '%', $row, $mail['message']);
         $mail['subject'] = str_replace('%' . $key . '%', $row, $mail['subject']);
         $submission[] = $row;
         $labels[] = $form['fields'][$field_id]['label'];
     }
     // final magic
     $mail['message'] = Caldera_Forms::do_magic_tags($mail['message']);
     $mail['subject'] = Caldera_Forms::do_magic_tags($mail['subject']);
     // CSV
     if (!empty($form['mailer']['csv_data'])) {
         ob_start();
         $df = fopen("php://output", 'w');
         fputcsv($df, $labels);
         fputcsv($df, $submission);
         fclose($df);
         $csv = ob_get_clean();
         $csvfile = wp_upload_bits(uniqid() . '.csv', null, $csv);
         if (isset($csvfile['file']) && false == $csvfile['error'] && file_exists($csvfile['file'])) {
             $mail['attachments'][] = $csvfile['file'];
         }
     }
     if (empty($mail)) {
         return;
     }
     /**
      * Filter email data before sending
      *
      * @since 1.2.3 in this location.
      * @since unknown in original location (Caldera_Forms::save_final_form)
      *
      * @param array $mail Email data
      * @param array $data Form entry data
      * @param array $form The form config
      */
     $mail = apply_filters('caldera_forms_mailer', $mail, $data, $form);
     $headers = implode("\r\n", $mail['headers']);
     /**
      * Runs before mail is sent, but after data is prepared
      *
      * @since 1.2.3 in this location.
      * @since unknown in original location (Caldera_Forms::save_final_form)
      * 
      * @param array $mail Email data
      * @param array $data Form entry data
      * @param array $form The form config
      */
     do_action('caldera_forms_do_mailer', $mail, $data, $form);
     // force message to string.
     if (is_array($mail['message'])) {
         $mail['message'] = implode("\n", $mail['message']);
     }
     if (!empty($mail)) {
         // is send debug enabled?
         if (!empty($form['debug_mailer'])) {
             add_action('phpmailer_init', array('Caldera_Forms', 'debug_mail_send'), 1000);
         }
         if (wp_mail((array) $mail['recipients'], $mail['subject'], stripslashes($mail['message']), $headers, $mail['attachments'])) {
             // kill attachment.
             if (!empty($csvfile['file'])) {
                 if (file_exists($csvfile['file'])) {
                     unlink($csvfile['file']);
                 }
             }
             /**
              * Fires main mailer completes
              *
              * @since 1.3.1
              *
              * @param array $mail Email data
              * @param array $data Form entry data
              * @param array $form The form config
              */
             do_action('caldera_forms_mailer_complete', $mail, $data, $form);
         } else {
             /**
              * Fires main mailer fails
              *
              * @since 1.2.3
              *
              * @param array $mail Email data
              * @param array $data Form entry data
              * @param array $form The form config
              */
             do_action('caldera_forms_mailer_failed', $mail, $data, $form);
         }
     } else {
         if (!empty($csvfile['file'])) {
             if (file_exists($csvfile['file'])) {
                 unlink($csvfile['file']);
             }
         }
     }
 }
예제 #3
0
파일: ajax.php 프로젝트: joecooper3/2015
function cf_ajax_redirect($type, $url, $form)
{
    if (empty($form['form_ajax'])) {
        return;
    }
    if (empty($_POST['cfajax'])) {
        return;
    }
    $data = Caldera_Forms::get_submission_data($form);
    // setup notcies
    $urlparts = parse_url($url);
    $query = array();
    if (!empty($urlparts['query'])) {
        parse_str($urlparts['query'], $query);
    }
    $notices = array();
    $note_general_classes = array('alert');
    $note_general_classes = apply_filters('caldera_forms_render_note_general_classes', $note_general_classes, $form);
    // base id
    $form_id = 'caldera_form_1';
    if ($type == 'complete') {
        if (isset($query['cf_su'])) {
            $notices['success']['note'] = $form['success'];
            $form_id = 'caldera_form_' . $query['cf_su'];
        } else {
            $out['url'] = $url;
            $notices['success']['note'] = __('Redirecting', 'caldera-forms');
        }
    } elseif ($type == 'preprocess') {
        if (isset($query['cf_er'])) {
            $data = get_transient($query['cf_er']);
            if (!empty($data['note'])) {
                $notices[$data['type']]['note'] = $data['note'];
            }
        } else {
            $out['url'] = $url;
            $notices['success']['note'] = __('Redirecting', 'caldera-forms');
        }
    } elseif ($type == 'error') {
        $data = get_transient($query['cf_er']);
        if (!empty($data['note'])) {
            $notices['error']['note'] = $data['note'];
        }
    }
    // check for field erors
    if (!empty($data['fields'])) {
        foreach ($form['fields'] as $fieldid => $field) {
            if (isset($data['fields'][$fieldid])) {
                if ($urlparts['path'] == 'api') {
                    $out['fields'][$field['slug']] = $data['fields'][$fieldid];
                } else {
                    $out['fields'][$fieldid] = $data['fields'][$fieldid];
                }
            }
        }
    }
    $notices = apply_filters('caldera_forms_render_notices', $notices, $form);
    $note_classes = array('success' => array_merge($note_general_classes, array('alert-success')), 'error' => array_merge($note_general_classes, array('alert-error')), 'info' => array_merge($note_general_classes, array('alert-info')), 'warning' => array_merge($note_general_classes, array('alert-warning')), 'danger' => array_merge($note_general_classes, array('alert-danger')));
    $note_classes = apply_filters('caldera_forms_render_note_classes', $note_classes, $form);
    $html = '';
    if (!empty($notices)) {
        // do notices
        foreach ($notices as $note_type => $notice) {
            if (!empty($notice['note'])) {
                $result = Caldera_Forms::do_magic_tags($notice['note']);
                $html .= '<div class=" ' . implode(' ', $note_classes[$note_type]) . '">' . $result . '</div>';
            }
        }
    }
    if (!empty($result)) {
        $out['result'] = $result;
    }
    if (!empty($query)) {
        if (!empty($query['cf_su'])) {
            unset($query['cf_su']);
        }
        if (!empty($query['cf_ee'])) {
            $out['entry'] = $query['cf_ee'];
        }
        $out['data'] = $query;
    }
    $out['html'] = $html;
    $out['type'] = isset($data['type']) ? $data['type'] : $type;
    $out['form_id'] = $form['ID'];
    $out['form_name'] = $form['name'];
    $out['status'] = $type;
    $out = apply_filters('caldera_forms_ajax_return', $out, $form);
    wp_send_json($out);
    exit;
}
/**
 * Process entry and save as post/ post meta.
 *
 * @since 1.1.0
 *
 * @param array $config Processor config.
 * @param array $form From config.
 *
 * @return array
 */
function cf_custom_fields_capture_entry($config, $form)
{
    $user_id = get_current_user_id();
    if (!empty($config['post_author'])) {
        $user_id = Caldera_Forms::do_magic_tags($config['post_author']);
    }
    $entry = array('post_title' => Caldera_Forms::get_field_data($config['post_title'], $form), 'post_status' => Caldera_Forms::do_magic_tags($config['post_status']), 'post_type' => $config['post_type'], 'post_content' => Caldera_Forms::get_field_data($config['post_content'], $form), 'post_parent' => Caldera_Forms::do_magic_tags($config['post_parent']), 'to_ping' => Caldera_Forms::do_magic_tags($config['to_ping']), 'post_password' => Caldera_Forms::do_magic_tags($config['post_password']), 'post_excerpt' => Caldera_Forms::do_magic_tags($config['post_excerpt']), 'comment_status' => $config['comment_status']);
    if (empty($entry['post_content'])) {
        $entry['post_content'] = '';
    }
    // set the ID
    if (!empty($config['ID'])) {
        $is_post_id = Caldera_Forms::do_magic_tags($config['ID']);
        $post = get_post($is_post_id);
        if (!empty($post) && $post->post_type == $entry['post_type']) {
            $entry['ID'] = $is_post_id;
        }
    }
    // set author
    if (!empty($user_id)) {
        $entry['post_author'] = $user_id;
    }
    //is edit?
    if (!empty($_POST['_cf_frm_edt'])) {
        // need to work on this still. SIGH!
    } else {
        // Insert the post into the database
        $entry_id = wp_insert_post($entry);
        if (empty($entry_id)) {
            return;
        }
    }
    // do upload + attach
    if (!empty($config['featured_image'])) {
        $featured_image = Caldera_Forms::get_field_data($config['featured_image'], $form);
        foreach ((array) $featured_image as $filename) {
            $featured_image = cf_custom_fields_attach_file($filename, $entry_id);
            update_post_meta($entry_id, '_thumbnail_id', $featured_image);
        }
    }
    //handle taxonomies
    $terms_saved = false;
    $tax_fields = cf_custom_fields_get_taxonomy_fields($config);
    if (!empty($tax_fields)) {
        $terms_saved = cf_custom_fields_save_terms($tax_fields, $entry_id);
        if ($terms_saved) {
            $term_values = wp_list_pluck($tax_fields, 'terms');
        }
    }
    //get post fields into an array of fields not to save as meta.
    $post_fields = array_keys($entry);
    // get all submission data
    $data = Caldera_Forms::get_submission_data($form);
    update_post_meta($entry_id, '_cf_form_id', $form['ID']);
    foreach ($data as $field => $value) {
        if ('_entry_token' != $field && '_entry_id' != $field) {
            if (in_array($field, $post_fields) || in_array($form['fields'][$field]['ID'], $post_fields)) {
                continue;
            }
        }
        if ($terms_saved) {
            if (is_array($value)) {
                $_value = implode(', ', $value);
            } else {
                $_value = $value;
            }
            if (in_array($_value, $term_values)) {
                continue;
            }
        }
        if (empty($form['fields'][$field])) {
            continue;
        }
        if (in_array($form['fields'][$field]['type'], array('button', 'html'))) {
            continue;
        }
        if ($form['fields'][$field]['type'] == 'file') {
            if ($field == $config['featured_image']) {
                continue;
                // dont attache twice.
            }
            foreach ((array) $value as $file) {
                cf_custom_fields_attach_file($file, $entry_id);
            }
        }
        $slug = $form['fields'][$field]['slug'];
        /**
         * Filter value before saving using to post type processor
         *
         * @since 2.0.3
         *
         * @param mixed $value The value to be saved
         * @param string $slug Slug of field
         * @param int $entry ID of post
         */
        $value = apply_filters('cf_custom_fields_pre_save_meta_key_to_post_type', $value, $slug, $entry_id);
        update_post_meta($entry_id, $slug, $value);
    }
    return array('Post ID' => $entry_id, 'ID' => $entry_id, 'permalink' => get_permalink($entry_id));
}
예제 #5
0
/**
 * Save meta data from form.
 *
 * @since 1.?.?
 *
 * @param array $config Processor config.
 * @param array $form Form config.
 */
function cf_custom_fields_save_meta_data($config, $form)
{
    global $post;
    if (!is_admin()) {
        return;
    }
    $data = Caldera_Forms::get_submission_data($form);
    $field_toremove = array();
    foreach ($data as $key => $value) {
        foreach ($form['fields'] as $field) {
            $field_toremove[$field['slug']] = $field['slug'];
        }
    }
    foreach ($data as $key => $value) {
        if (empty($form['fields'][$key])) {
            continue;
        }
        update_post_meta($post->ID, $form['fields'][$key]['slug'], $value);
        if (isset($field_toremove[$form['fields'][$key]['slug']])) {
            unset($field_toremove[$form['fields'][$key]['slug']]);
        }
    }
    if (!empty($field_toremove)) {
        foreach ($field_toremove as $key) {
            delete_post_meta($post->ID, $key);
        }
    }
    return $data;
}
예제 #6
0
/**
 * Do something to loading of forms
 *
 * @since 0.2.0
 *
 * @uses "caldera_forms_ajax_return"
 *
 * @param string $out
 * @param array $form The form configuration
 *
 * @return mixed
 */
function cf_form_connector_control_form_load($out, $form)
{
    if ($out['type'] !== 'complete') {
        return $out;
    }
    if (!empty($form['stage_form'])) {
        $stage_form = Caldera_Forms::get_form($form['stage_form']);
        $process_record = cf_form_connector_get_current_position();
        if (!empty($form['form_connection'])) {
            $process_record[$form['stage_form']][$form['ID']] = array('id' => $form['form_connection']['entry_id']);
            if (empty($form['form_connection']['back_button'])) {
                $process_record[$form['stage_form']][$form['ID']]['no_back'] = true;
            }
            if (!empty($process_record[$form['stage_form']]['previous_form'])) {
                $process_record[$form['stage_form']][$form['ID']]['back'] = $process_record[$form['stage_form']]['previous_form'];
            }
            $process_record[$form['stage_form']]['previous_form'] = $form['ID'];
            $process_record[$form['stage_form']]['current_form'] = $form['form_connection']['next_form_id'];
            $process_record[$form['stage_form']]['fields'] = array_merge((array) $process_record[$form['stage_form']]['fields'], $form['fields']);
            $process_record[$form['stage_form']]['field_values'] = array_merge((array) $process_record[$form['stage_form']]['field_values'], Caldera_Forms::get_submission_data($form));
            cf_form_connector_set_current_position($process_record);
            // handler proper redirects
            if (!empty($out['url'])) {
                wp_send_json($out);
            }
            wp_send_json(array('target' => $form['stage_form'] . '_' . (int) $_POST['_cf_frm_ct'], 'form' => Caldera_Forms::render_form($stage_form)));
        } else {
            // is current = stage ? yup last form last process.
            if (!empty($process_record[$form['stage_form']]['current_form']) && $process_record[$form['stage_form']]['current_form'] === $form['stage_form']) {
                $process_record[$form['stage_form']] = array();
                cf_form_connector_set_current_position($process_record);
                return $out;
            }
            $process_record[$form['stage_form']][$form['ID']] = array('id' => (int) Caldera_Forms::do_magic_tags('{entry_id}'));
            if (!empty($process_record[$form['stage_form']]['previous_form'])) {
                $process_record[$form['stage_form']][$form['ID']]['back'] = $process_record[$form['stage_form']]['previous_form'];
            }
            $process_record[$form['stage_form']]['previous_form'] = $form['ID'];
            $process_record[$form['stage_form']]['current_form'] = $form['stage_form'];
            $process_record[$form['stage_form']]['fields'] = array_merge((array) $process_record[$form['stage_form']]['fields'], $form['fields']);
            $process_record[$form['stage_form']]['field_values'] = array_merge((array) $process_record[$form['stage_form']]['field_values'], Caldera_Forms::get_submission_data($form));
            cf_form_connector_set_current_position($process_record);
            Caldera_Forms::process_submission();
            exit;
        }
    }
    return $out;
}
예제 #7
0
/**
 * Save meta data from form.
 *
 * @since 1.?.?
 *
 * @param array $config Processor config.
 * @param array $form Form config.
 */
function cf_custom_fields_save_meta_data($config, $form)
{
    global $post;
    if (!is_admin()) {
        return;
    }
    $data = Caldera_Forms::get_submission_data($form);
    $field_toremove = array();
    foreach ($form['fields'] as $field) {
        // remove old data
        delete_post_meta($post->ID, $field['slug']);
    }
    foreach ($data as $key => $value) {
        if (empty($form['fields'][$key])) {
            continue;
        }
        $slug = $form['fields'][$key]['slug'];
        /**
         * Filter value before saving using to metabox processor
         * @since 2.0.3
         *
         * @param mixed $value The value to be saved
         * @param string $slug Slug of field
         * @param int $post_id ID of post
         */
        $value = apply_filters('cf_custom_fields_pre_save_meta_key_metabox', $value, $slug, $post->ID);
        if (is_array($value)) {
            delete_post_meta($post->ID, $slug);
            foreach ($value as $single_value) {
                add_post_meta($post->ID, $slug, $single_value);
            }
        } else {
            update_post_meta($post->ID, $slug, $value);
        }
        if (isset($field_toremove[$form['fields'][$key]['slug']])) {
            unset($field_toremove[$form['fields'][$key]['slug']]);
        }
    }
    return $data;
}
예제 #8
0
/**
 * Process entry and save as post/ post meta.
 *
 * @since 1.1.0
 *
 * @param array $config Processor config.
 * @param array $form From config.
 *
 * @return array
 */
function cf_custom_fields_capture_entry($config, $form)
{
    $user_id = get_current_user_id();
    if (!empty($config['post_author'])) {
        $user_id = Caldera_Forms::do_magic_tags($config['post_author']);
    }
    $entry = array('post_title' => Caldera_Forms::get_field_data($config['post_title'], $form), 'post_status' => Caldera_Forms::do_magic_tags($config['post_status']), 'post_type' => $config['post_type'], 'post_content' => Caldera_Forms::get_field_data($config['post_content'], $form), 'post_parent' => Caldera_Forms::do_magic_tags($config['post_parent']), 'to_ping' => Caldera_Forms::do_magic_tags($config['to_ping']), 'post_password' => Caldera_Forms::do_magic_tags($config['post_password']), 'post_excerpt' => Caldera_Forms::do_magic_tags($config['post_excerpt']), 'comment_status' => $config['comment_status']);
    // set the ID
    if (!empty($config['ID'])) {
        $is_post_id = Caldera_Forms::do_magic_tags($config['ID']);
        $post = get_post($is_post_id);
        if (!empty($post) && $post->post_type == $entry['post_type']) {
            $entry['ID'] = $is_post_id;
        }
    }
    // set author
    if (!empty($user_id)) {
        $entry['post_author'] = $user_id;
    }
    //is edit?
    if (!empty($_POST['_cf_frm_edt'])) {
        // need to work on this still. SIGH!
    } else {
        // Insert the post into the database
        $entry_id = wp_insert_post($entry);
        if (empty($entry_id)) {
            return;
        }
    }
    // do upload + attach
    if (!empty($config['featured_image'])) {
        $featured_image = Caldera_Forms::get_field_data($config['featured_image'], $form);
        foreach ((array) $featured_image as $filename) {
            $featured_image = cf_custom_fields_attach_file($filename, $entry_id);
            update_post_meta($entry_id, '_thumbnail_id', $featured_image);
        }
    }
    //get post fields into an array of fields not to save as meta.
    $post_fields = array_keys($entry);
    // get all submission data
    $data = Caldera_Forms::get_submission_data($form);
    update_post_meta($entry_id, '_cf_form_id', $form['ID']);
    foreach ($data as $field => $value) {
        if ('_entry_token' != $field && '_entry_id' != $field) {
            if (in_array($field, $post_fields) || in_array($form['fields'][$field]['ID'], $post_fields)) {
                continue;
            }
        }
        if (empty($form['fields'][$field])) {
            continue;
        }
        if (in_array($form['fields'][$field]['type'], array('button', 'html'))) {
            continue;
        }
        if ($form['fields'][$field]['type'] == 'file') {
            if ($field == $config['featured_image']) {
                continue;
                // dont attache twice.
            }
            foreach ((array) $value as $file) {
                cf_custom_fields_attach_file($file, $entry_id);
            }
        }
        update_post_meta($entry_id, $form['fields'][$field]['slug'], $value);
    }
    return array('Post ID' => $entry_id, 'ID' => $entry_id, 'permalink' => get_permalink($entry_id));
}