/**
     * Process a form submission
     *
     * @return array
     */
    function process_submission()
    {
        if (!empty($_POST['my_information'])) {
            // Honeypot
            return array('error' => 'honeypot', 'success' => false);
        }
        if (empty($_POST['form_nonce']) || !wp_verify_nonce($_POST['form_nonce'], 'ccf_form')) {
            return array('error' => 'nonce', 'success' => false);
        }
        $form_id = (int) $_POST['form_id'];
        $form = get_post($form_id);
        if (empty($form)) {
            return array('error' => 'missing_form', 'success' => false);
        }
        $fields = get_post_meta($form->ID, 'ccf_attached_fields', true);
        $field_slug_to_id = array();
        $errors = array();
        $submission = array();
        $skip_fields = apply_filters('ccf_skip_fields', array('html', 'section-header'), $form->ID);
        $save_skip_fields = apply_filters('ccf_save_skip_fields', array('recaptcha'), $form->ID);
        $file_ids = array();
        $all_form_fields = array();
        foreach ($fields as $field_id) {
            $field_id = (int) $field_id;
            $type = get_post_meta($field_id, 'ccf_field_type', true);
            if (in_array($type, $skip_fields)) {
                continue;
            }
            $slug = null;
            $field_metas = get_post_meta($field_id);
            $new_field = array();
            foreach ($field_metas as $meta_key => $meta_value) {
                if (0 === stripos($meta_key, 'ccf_field_')) {
                    if ('ccf_field_slug' === $meta_key) {
                        $slug = $meta_value[0];
                    }
                    $new_field[$meta_key] = wp_kses_post($meta_value[0]);
                }
            }
            $all_form_fields[$slug] = $new_field;
            // We save this to reference later
            $field_slug_to_id[$slug] = array('id' => $field_id, 'type' => sanitize_text_field($type));
            $custom_value_mapping = array('recaptcha' => 'g-recaptcha-response');
            if (in_array($type, array_keys($custom_value_mapping))) {
                $value = isset($_POST[$custom_value_mapping[$type]]) ? $_POST[$custom_value_mapping[$type]] : '';
            } else {
                $value = isset($_POST['ccf_field_' . $slug]) ? $_POST['ccf_field_' . $slug] : '';
            }
            $validation = $this->process_field($field_id, $value);
            if ($validation['error'] !== null) {
                $errors[$slug] = $validation['error'];
            } else {
                if (!in_array($type, $save_skip_fields)) {
                    $submission[$slug] = $validation['sanitized_value'];
                    if ('file' === $type) {
                        $file_ids[] = $submission[$slug]['id'];
                    }
                }
            }
        }
        if (!empty($errors)) {
            $this->errors_by_form[$form_id] = $errors;
            return array('error' => 'invalid_fields', 'field_errors' => $errors, 'success' => false);
        } else {
            $submission_id = wp_insert_post(array('post_status' => 'publish', 'post_type' => 'ccf_submission', 'post_parent' => $form_id, 'post_title' => 'Form Submission ' . $form_id));
            if (!is_wp_error($submission_id)) {
                update_post_meta($submission_id, 'ccf_submission_data', $submission);
                /**
                 * @since 6.6
                 */
                update_post_meta($submission_id, 'ccf_submission_data_map', $field_slug_to_id);
                /**
                 * @since 7.4.4
                 */
                update_post_meta($submission_id, 'ccf_submission_form_fields', $all_form_fields);
                update_post_meta($submission_id, 'ccf_submission_ip', sanitize_text_field($_SERVER['REMOTE_ADDR']));
                foreach ($file_ids as $file_id) {
                    wp_update_post(array('ID' => $file_id, 'post_parent' => $submission_id));
                }
                do_action('ccf_successful_submission', $submission_id, $form_id);
            } else {
                do_action('ccf_unsuccessful_submission', $form_id);
                return array('error' => 'could_not_create_submission', 'success' => false);
            }
            // Post creation
            $post_creation = get_post_meta($form_id, 'ccf_form_post_creation', true);
            if (!empty($post_creation)) {
                $post_creation_type = get_post_meta($form_id, 'ccf_form_post_creation_type', true);
                $post_creation_status = get_post_meta($form_id, 'ccf_form_post_creation_status', true);
                $mappings = get_post_meta($form_id, 'ccf_form_post_field_mappings', true);
                if (!empty($mappings)) {
                    $args = array('post_status' => !empty($post_creation_status) ? $post_creation_status : 'draft', 'post_type' => !empty($post_creation_type) ? $post_creation_type : 'post');
                    $tags = array();
                    $custom_fields = array();
                    foreach ($mappings as $mapping) {
                        if (!empty($mapping['formField']) && isset($submission[$mapping['formField']])) {
                            $field_id = $field_slug_to_id[$mapping['formField']]['id'];
                            $field_type = get_post_meta($field_id, 'ccf_field_type', true);
                            $submission_value = $submission[$mapping['formField']];
                            if (is_array($submission_value) && isset($submission_value['email'])) {
                                $submission_value = $submission_value['email'];
                            }
                            if ('post_title' === $mapping['postField']) {
                                $args['post_title'] = $this->_flatten_and_concat($submission_value);
                            } elseif ('post_content' === $mapping['postField']) {
                                $args['post_content'] = $this->_flatten_and_concat($submission_value);
                            } elseif ('post_date' === $mapping['postField']) {
                                $args['post_date'] = $this->_flatten_and_concat($submission_value);
                            } elseif ('post_excerpt' === $mapping['postField']) {
                                $args['post_excerpt'] = $this->_flatten_and_concat($submission_value);
                            } elseif ('post_tag' === $mapping['postField']) {
                                if ('checkboxes' === $field_type) {
                                    $tags = array_merge($tags, $submission_value);
                                } elseif ('dropdown' == $field_type && is_array($submission_value)) {
                                    $tags = array_merge($tags, $submission_value);
                                } else {
                                    $tags[] = $this->_flatten_and_concat($submission[$mapping['formField']]);
                                }
                            } elseif ('custom_field' === $mapping['postField'] && !empty($mapping['customFieldKey'])) {
                                $custom_fields[] = array('key' => $mapping['customFieldKey'], 'value' => $this->_flatten_and_concat($submission_value));
                            }
                        }
                    }
                    if (empty($args['post_title'])) {
                        $args['post_title'] = apply_filters('ccf_default_post_creation_title', esc_html__('Post created by form', 'custom-contact-forms'), $args, $form_id, $submission_id, $submission);
                    }
                    $post_creation_id = wp_insert_post(apply_filters('ccf_post_creation_args', $args, $form_id, $submission_id, $submission));
                    if (!is_wp_error($post_creation_id)) {
                        update_post_meta($post_creation_id, 'ccf_created_by_form', (int) $form_id);
                        if (!empty($tags)) {
                            wp_set_object_terms($post_creation_id, $tags, 'post_tag', true);
                        }
                        if (!empty($custom_fields)) {
                            foreach ($custom_fields as $custom_field) {
                                // Todo: sanitization?
                                add_post_meta($post_creation_id, $custom_field['key'], $custom_field['value']);
                            }
                        }
                    }
                    do_action('ccf_post_creation', $post_creation_id, $form_id, $submission_id, $submission);
                }
            }
            $output = array('success' => true, 'action_type' => get_post_meta($form_id, 'ccf_form_completion_action_type', true));
            $notifications = get_post_meta($form_id, 'ccf_form_notifications', true);
            $form_page = !empty($_POST['form_page']) ? $_POST['form_page'] : null;
            if (!empty($notifications)) {
                foreach ($notifications as $notification) {
                    if (!empty($notification['active']) && !empty($notification['addresses'])) {
                        $message = $notification['content'];
                        // Variables
                        if (false !== stripos($message, '[all_fields]')) {
                            $all_fields = '';
                            ob_start();
                            foreach ($submission as $slug => $field) {
                                $field_id = $field_slug_to_id[$slug]['id'];
                                $label = get_post_meta($field_id, 'ccf_field_label', true);
                                $type = get_post_meta($field_id, 'ccf_field_type', true);
                                if ('hidden' === $type) {
                                    $label = esc_html__('*Hidden Field*', 'custom-contact-forms');
                                }
                                ?>

								<div>
									<?php 
                                if (!empty($label)) {
                                    ?>
										<b><?php 
                                    echo esc_html($label);
                                    ?>
 <?php 
                                    if (apply_filters('ccf_show_slug_in_submission_email', false, $submission_id, $form_id)) {
                                        ?>
(<?php 
                                        echo esc_html($slug);
                                        ?>
)<?php 
                                    }
                                    ?>
:</b>
									<?php 
                                } else {
                                    ?>
										<b><?php 
                                    echo esc_html($slug);
                                    ?>
:</b>
									<?php 
                                }
                                ?>
								</div>
								<div style="margin-bottom: 10px;">
									<?php 
                                if (!empty($field)) {
                                    ?>

										<?php 
                                    if ('date' === $type) {
                                        ?>

											<?php 
                                        echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_date($field, $field_id)));
                                        ?>

										<?php 
                                    } elseif ('name' === $type) {
                                        ?>

											<?php 
                                        echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_name($field)));
                                        ?>

										<?php 
                                    } elseif ('file' === $type) {
                                        ?>

											<a href="<?php 
                                        echo esc_url($field['url']);
                                        ?>
"><?php 
                                        echo esc_html(stripslashes($field['file_name']));
                                        ?>
</a>

										<?php 
                                    } elseif ('address' === $type) {
                                        ?>

											<?php 
                                        echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_address($field)));
                                        ?>

										<?php 
                                    } elseif ('email' === $type) {
                                        ?>

											<?php 
                                        if (is_array($field)) {
                                            ?>
												<?php 
                                            echo esc_html(stripslashes($field['email']));
                                            ?>
											<?php 
                                        } else {
                                            ?>
												<?php 
                                            echo esc_html(stripslashes($field));
                                            ?>
											<?php 
                                        }
                                        ?>

										<?php 
                                    } elseif ('dropdown' === $type || 'radio' === $type || 'checkboxes' === $type) {
                                        ?>

											<?php 
                                        if (is_array($field)) {
                                            ?>

												<?php 
                                            $i = 0;
                                            foreach ($field as $value) {
                                                ?>
													<?php 
                                                if (!empty($value)) {
                                                    ?>
														<?php 
                                                    if ($i !== 0) {
                                                        ?>
<br><?php 
                                                    }
                                                    ?>
														<?php 
                                                    echo esc_html(stripslashes($value));
                                                    ?>
														<?php 
                                                    $i++;
                                                    ?>
													<?php 
                                                }
                                                ?>
												<?php 
                                            }
                                            ?>

												<?php 
                                            if (0 === $i) {
                                                ?>
													<span>-</span>
												<?php 
                                            }
                                            ?>

											<?php 
                                        } else {
                                            ?>
												<?php 
                                            echo esc_html(stripslashes($field));
                                            ?>
											<?php 
                                        }
                                        ?>

										<?php 
                                    } else {
                                        ?>
											<?php 
                                        echo esc_html(stripslashes($field));
                                        ?>
										<?php 
                                    }
                                    ?>
									<?php 
                                } else {
                                    ?>
										<span>-</span>
									<?php 
                                }
                                ?>
								</div>

							<?php 
                            }
                            if (!empty($form_page)) {
                                ?>
								<div>
									<?php 
                                esc_html_e('Form submitted from', 'custom-contact-forms');
                                ?>
:
									<?php 
                                echo esc_url($form_page);
                                ?>
								</div>
							<?php 
                            }
                            if (apply_filters('ccf_show_ip_in_submission_email', true, $submission_id, $form_id)) {
                                ?>
								<div>
									<?php 
                                esc_html_e('Form submitter IP', 'custom-contact-forms');
                                ?>
:
									<?php 
                                echo esc_html($_SERVER['REMOTE_ADDR']);
                                ?>
								</div>
								<?php 
                            }
                            $all_fields .= ob_get_clean();
                            $message = str_ireplace('[all_fields]', $all_fields, $message);
                        }
                        if (false !== stripos($message, '[ip_address]')) {
                            $message = str_ireplace('[ip_address]', $_SERVER['REMOTE_ADDR'], $message);
                        }
                        foreach ($fields as $field_id) {
                            $field_slug = get_post_meta($field_id, 'ccf_field_slug', true);
                            if (!empty($field_slug) && isset($submission[$field_slug])) {
                                $value = $submission[$field_slug];
                                if (is_array($value) && isset($value['email'])) {
                                    $value = $value['email'];
                                }
                                $message = str_ireplace('[' . $field_slug . ']', wp_kses_post($this->_flatten_and_concat($value)), $message);
                            }
                        }
                        $headers = array('MIME-Version: 1.0', 'Content-type: text/html; charset=utf-8');
                        $name = null;
                        $email = null;
                        $sitename = strtolower($_SERVER['SERVER_NAME']);
                        if (substr($sitename, 0, 4) === 'www.') {
                            $sitename = substr($sitename, 4);
                        }
                        $default_from_email = 'wordpress@' . $sitename;
                        if ('custom' === $notification['fromNameType']) {
                            $name = $notification['fromName'];
                        } else {
                            $name_field = $notification['fromNameField'];
                            if (!empty($name_field) && !empty($submission[$name_field]) && is_array($submission[$name_field])) {
                                if (!empty($submission[$name_field]['first']) || !empty($submission[$name_field]['last'])) {
                                    $name = $submission[$name_field]['first'] . ' ' . $submission[$name_field]['last'];
                                }
                            }
                        }
                        if ('custom' === $notification['fromType']) {
                            $email = $notification['fromAddress'];
                        } elseif ('field' === $notification['fromType']) {
                            $email_field = $notification['fromField'];
                            if (!empty($email_field) && !empty($submission[$email_field])) {
                                if (is_array($submission[$email_field]) && !empty($submission[$email_field]['confirm'])) {
                                    $email = $submission[$email_field]['confirm'];
                                } else {
                                    $email = $submission[$email_field];
                                }
                            }
                        }
                        if (!empty($name) && !empty($email)) {
                            $headers[] = 'From: ' . sanitize_text_field($name) . ' <' . sanitize_email($email) . '>';
                            $headers[] = 'Reply-To: ' . sanitize_email($email);
                        } elseif (!empty($name) && empty($email)) {
                            $headers[] = 'From: ' . sanitize_text_field($name) . '<' . sanitize_email($default_from_email) . '>';
                        } elseif (empty($name) && !empty($email)) {
                            // @Todo: investigate how wp_mail handles From: email
                            $headers[] = 'From: ' . sanitize_email($email);
                            $headers[] = 'Reply-To: ' . sanitize_email($email);
                        }
                        $email_notification_subject_type = $notification['subjectType'];
                        $subject = sprintf(__('%s: Form Submission', 'custom-contact-forms'), wp_specialchars_decode(get_bloginfo('name')));
                        if (!empty($form->post_title)) {
                            $subject .= sprintf(__(' to "%s"', 'custom-contact-forms'), wp_specialchars_decode($form->post_title));
                        }
                        if ('custom' === $email_notification_subject_type) {
                            $subject = $notification['subject'];
                        } elseif ('field' === $email_notification_subject_type) {
                            $subject_field = $notification['subjectField'];
                            if (!empty($subject_field) && !empty($submission[$subject_field])) {
                                $subject = $submission[$subject_field];
                            }
                        }
                        foreach ($notification['addresses'] as $address) {
                            if (!empty($address['email']) || !empty($address['field'])) {
                                $email = '';
                                if ('custom' === $address['type']) {
                                    $email = $address['email'];
                                } else {
                                    $email_field = $address['field'];
                                    if (!empty($email_field) && !empty($submission[$email_field])) {
                                        if (is_array($submission[$email_field]) && !empty($submission[$email_field]['confirm'])) {
                                            $email = $submission[$email_field]['confirm'];
                                        } else {
                                            $email = $submission[$email_field];
                                        }
                                    }
                                }
                                if (!empty($email)) {
                                    if (empty($notification_content)) {
                                        $notification_content = ' ';
                                        // Hack to send email with empty body via PHPMailer
                                    }
                                    $subject = apply_filters('ccf_email_subject', $subject, $form_id, $email, $form_page, $notification);
                                    $notification_content = apply_filters('ccf_email_content', $message, $form_id, $email, $form_page, $notification);
                                    $notification_headers = apply_filters('ccf_email_headers', $headers, $form_id, $email, $form_page, $notification);
                                    do_action('ccf_send_notification', $email, $subject, $notification_content, $notification_headers, $notification);
                                    wp_mail($email, $subject, $notification_content, $notification_headers);
                                }
                            }
                        }
                    }
                }
            }
            if ('redirect' === $output['action_type']) {
                $output['completion_redirect_url'] = get_post_meta($form_id, 'ccf_form_completion_redirect_url', true);
            } else {
                $output['completion_message'] = get_post_meta($form_id, 'ccf_form_completion_message', true);
                if (empty($output['completion_message'])) {
                    $output['completion_message'] = esc_html__('Thank you for your submission.', 'custom-contact-forms');
                }
            }
            return $output;
        }
    }
    /**
     * Process a form submission
     *
     * @return array
     */
    function process_submission()
    {
        if (!empty($_POST['my_information'])) {
            // Honeypot
            return array('error' => 'honeypot', 'success' => false);
        }
        if (empty($_POST['form_nonce']) || !wp_verify_nonce($_POST['form_nonce'], 'ccf_form')) {
            return array('error' => 'nonce', 'success' => false);
        }
        $form_id = (int) $_POST['form_id'];
        $form = get_post($form_id);
        if (empty($form)) {
            return array('error' => 'missing_form', 'success' => false);
        }
        $fields = get_post_meta($form->ID, 'ccf_attached_fields', true);
        $field_slug_to_id = array();
        $errors = array();
        $submission = array();
        $skip_fields = apply_filters('ccf_skip_fields', array('html', 'section-header'), $form->ID);
        $save_skip_fields = apply_filters('ccf_save_skip_fields', array('recaptcha'), $form->ID);
        $file_ids = array();
        foreach ($fields as $field_id) {
            $field_id = (int) $field_id;
            $type = get_post_meta($field_id, 'ccf_field_type', true);
            if (in_array($type, $skip_fields)) {
                continue;
            }
            $slug = get_post_meta($field_id, 'ccf_field_slug', true);
            // We save this to reference later
            $field_slug_to_id[$slug] = array('id' => $field_id, 'type' => sanitize_text_field($type));
            $custom_value_mapping = array('recaptcha' => 'g-recaptcha-response');
            if (in_array($type, array_keys($custom_value_mapping))) {
                $value = isset($_POST[$custom_value_mapping[$type]]) ? $_POST[$custom_value_mapping[$type]] : '';
            } else {
                $value = isset($_POST['ccf_field_' . $slug]) ? $_POST['ccf_field_' . $slug] : '';
            }
            $validation = $this->process_field($field_id, $value);
            if ($validation['error'] !== null) {
                $errors[$slug] = $validation['error'];
            } else {
                if (!in_array($type, $save_skip_fields)) {
                    $submission[$slug] = $validation['sanitized_value'];
                    if ('file' === $type) {
                        $file_ids[] = $submission[$slug]['id'];
                    }
                }
            }
        }
        if (!empty($errors)) {
            $this->errors_by_form[$form_id] = $errors;
            return array('error' => 'invalid_fields', 'field_errors' => $errors, 'success' => false);
        } else {
            $submission_id = wp_insert_post(array('post_status' => 'publish', 'post_type' => 'ccf_submission', 'post_parent' => $form_id, 'post_title' => 'Form Submission ' . $form_id));
            if (!is_wp_error($submission_id)) {
                update_post_meta($submission_id, 'ccf_submission_data', $submission);
                /**
                 * @since 6.6
                 */
                update_post_meta($submission_id, 'ccf_submission_data_map', $field_slug_to_id);
                update_post_meta($submission_id, 'ccf_submission_ip', sanitize_text_field($_SERVER['REMOTE_ADDR']));
                foreach ($file_ids as $file_id) {
                    wp_update_post(array('ID' => $file_id, 'post_parent' => $submission_id));
                }
                do_action('ccf_successful_submission', $submission_id, $form_id);
            } else {
                do_action('ccf_unsuccessful_submission', $form_id);
                return array('error' => 'could_not_create_submission', 'success' => false);
            }
            $output = array('success' => true, 'action_type' => get_post_meta($form_id, 'ccf_form_completion_action_type', true));
            $send_email_notifications = get_post_meta($form_id, 'ccf_form_send_email_notifications', true);
            $email_addresses_field = get_post_meta($form_id, 'ccf_form_email_notification_addresses', true);
            if (!empty($send_email_notifications) && !empty($email_addresses_field)) {
                $email_addresses_field = str_replace(';', ',', $email_addresses_field);
                $email_addresses = explode(',', $email_addresses_field);
                $email_addresses = array_map('trim', $email_addresses);
                if (!empty($email_addresses)) {
                    $message = '';
                    ob_start();
                    foreach ($submission as $slug => $field) {
                        $field_id = $field_slug_to_id[$slug]['id'];
                        $label = get_post_meta($field_id, 'ccf_field_label', true);
                        $type = get_post_meta($field_id, 'ccf_field_type', true);
                        if ('hidden' === $type) {
                            $label = esc_html__('*Hidden Field*', 'custom-contact-forms');
                        }
                        ?>

						<div>
							<?php 
                        if (!empty($label)) {
                            ?>
								<b><?php 
                            echo esc_html($label);
                            ?>
 <?php 
                            if (apply_filters('ccf_show_slug_in_submission_email', false, $submission_id, $form_id)) {
                                ?>
(<?php 
                                echo esc_html($slug);
                                ?>
)<?php 
                            }
                            ?>
:</b>
							<?php 
                        } else {
                            ?>
								<b><?php 
                            echo esc_html($slug);
                            ?>
:</b>
							<?php 
                        }
                        ?>
						</div>
						<div style="margin-bottom: 10px;">
							<?php 
                        if (!empty($field)) {
                            ?>

								<?php 
                            if ('date' === $type) {
                                ?>

									<?php 
                                echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_date($field)));
                                ?>

								<?php 
                            } elseif ('name' === $type) {
                                ?>

									<?php 
                                echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_name($field)));
                                ?>

								<?php 
                            } elseif ('file' === $type) {
                                ?>

									<a href="<?php 
                                echo esc_url($field['url']);
                                ?>
"><?php 
                                echo esc_html(stripslashes($field['file_name']));
                                ?>
</a>

								<?php 
                            } elseif ('address' === $type) {
                                ?>

									<?php 
                                echo esc_html(stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_address($field)));
                                ?>

								<?php 
                            } elseif ('email' === $type) {
                                ?>

									<?php 
                                if (is_array($field)) {
                                    ?>
										<?php 
                                    echo esc_html(stripslashes($field['email']));
                                    ?>
									<?php 
                                } else {
                                    ?>
										<?php 
                                    echo esc_html(stripslashes($field));
                                    ?>
									<?php 
                                }
                                ?>

								<?php 
                            } elseif ('dropdown' === $type || 'radio' === $type || 'checkboxes' === $type) {
                                ?>

									<?php 
                                if (is_array($field)) {
                                    ?>

										<?php 
                                    $i = 0;
                                    foreach ($field as $value) {
                                        ?>
											<?php 
                                        if (!empty($value)) {
                                            ?>
												<?php 
                                            if ($i !== 0) {
                                                ?>
<br><?php 
                                            }
                                            ?>
												<?php 
                                            echo esc_html(stripslashes($value));
                                            ?>
												<?php 
                                            $i++;
                                            ?>
											<?php 
                                        }
                                        ?>
										<?php 
                                    }
                                    ?>

										<?php 
                                    if (0 === $i) {
                                        ?>
											<span>-</span>
										<?php 
                                    }
                                    ?>

									<?php 
                                } else {
                                    ?>
										<?php 
                                    echo esc_html(stripslashes($field));
                                    ?>
									<?php 
                                }
                                ?>

								<?php 
                            } else {
                                ?>
									<?php 
                                echo esc_html(stripslashes($field));
                                ?>
								<?php 
                            }
                            ?>
							<?php 
                        } else {
                            ?>
								<span>-</span>
							<?php 
                        }
                        ?>
						</div>

					<?php 
                    }
                    $form_page = null;
                    if (!empty($_POST['form_page'])) {
                        $form_page = $_POST['form_page'];
                        ?>
						<div>
							<?php 
                        esc_html_e('Form submitted from', 'custom-contact-forms');
                        ?>
:
							<?php 
                        echo esc_url($_POST['form_page']);
                        ?>
						</div>
					<?php 
                    }
                    if (apply_filters('ccf_show_ip_in_submission_email', true, $submission_id, $form_id)) {
                        ?>
						<div>
							<?php 
                        esc_html_e('Form submitter IP', 'custom-contact-forms');
                        ?>
:
							<?php 
                        echo esc_html($_SERVER['REMOTE_ADDR']);
                        ?>
						</div>
						<?php 
                    }
                    $message .= ob_get_clean();
                    $headers = array('MIME-Version: 1.0', 'Content-type: text/html; charset=utf-8');
                    $email_notification_from_type = get_post_meta($form_id, 'ccf_form_email_notification_from_type', true);
                    $email_notification_from_name_type = get_post_meta($form_id, 'ccf_form_email_notification_from_name_type', true);
                    $email_notification_from_name = get_post_meta($form_id, 'ccf_form_email_notification_from_name', true);
                    $name = null;
                    $email = null;
                    if ('custom' === $email_notification_from_type) {
                        $name = $email_notification_from_name;
                    } else {
                        $name_field = get_post_meta($form_id, 'ccf_form_email_notification_from_name_field', true);
                        if (!empty($name_field) && !empty($submission[$name_field]) && is_array($submission[$name_field])) {
                            if (!empty($submission[$name_field]['first']) || !empty($submission[$name_field]['last'])) {
                                $name = $submission[$name_field]['first'] . ' ' . $submission[$name_field]['last'];
                            }
                        }
                    }
                    if ('custom' === $email_notification_from_type) {
                        $email = get_post_meta($form_id, 'ccf_form_email_notification_from_address', true);
                    } elseif ('field' === $email_notification_from_type) {
                        $email_field = get_post_meta($form_id, 'ccf_form_email_notification_from_field', true);
                        if (!empty($email_field) && !empty($submission[$email_field])) {
                            if (is_array($submission[$email_field]) && !empty($submission[$email_field]['confirm'])) {
                                $email = $submission[$email_field]['confirm'];
                            } else {
                                $email = $submission[$email_field];
                            }
                        }
                    }
                    if (!empty($name) && !empty($email)) {
                        $headers[] = 'From: ' . sanitize_text_field($name) . ' <' . sanitize_email($email) . '>';
                        $headers[] = 'Reply-To: ' . sanitize_email($email);
                    } elseif (!empty($name) && empty($email)) {
                        $headers[] = 'From: ' . sanitize_text_field($name);
                    } elseif (empty($name) && !empty($email)) {
                        $headers[] = 'From: ' . sanitize_email($email);
                        $headers[] = 'Reply-To: ' . sanitize_email($email);
                    }
                    $email_notification_subject_type = get_post_meta($form_id, 'ccf_form_email_notification_subject_type', true);
                    $subject = sprintf(__('%s: Form Submission', 'custom-contact-forms'), wp_specialchars_decode(get_bloginfo('name')));
                    if (!empty($form->post_title)) {
                        $subject .= sprintf(__(' to "%s"', 'custom-contact-forms'), wp_specialchars_decode($form->post_title));
                    }
                    if ('custom' === $email_notification_subject_type) {
                        $subject = get_post_meta($form_id, 'ccf_form_email_notification_subject', true);
                    } elseif ('field' === $email_notification_subject_type) {
                        $subject_field = get_post_meta($form_id, 'ccf_form_email_notification_subject_field', true);
                        if (!empty($subject_field) && !empty($submission[$subject_field])) {
                            $subject = $submission[$subject_field];
                        }
                    }
                    foreach ($email_addresses as $email) {
                        $subject = apply_filters('ccf_email_subject', $subject, $form_id, $email, $form_page);
                        wp_mail($email, $subject, apply_filters('ccf_email_content', $message, $form_id, $email, $form_page), apply_filters('ccf_email_headers', $headers, $form_id, $email, $form_page));
                    }
                }
            }
            if ('redirect' === $output['action_type']) {
                $output['completion_redirect_url'] = get_post_meta($form_id, 'ccf_form_completion_redirect_url', true);
            } else {
                $output['completion_message'] = get_post_meta($form_id, 'ccf_form_completion_message', true);
                if (empty($output['completion_message'])) {
                    $output['completion_message'] = esc_html__('Thank you for your submission.', 'custom-contact-forms');
                }
            }
            return $output;
        }
    }
示例#3
0
 /**
  * Handle submissions csv download
  *
  * @since 6.6
  */
 public function action_parse_request()
 {
     if (empty($_GET['download_submissions'])) {
         return;
     }
     if (!current_user_can('manage_options')) {
         return;
     }
     if (empty($_GET['post']) || 'ccf_form' !== get_post_type($_GET['post'])) {
         return;
     }
     if (empty($_GET['download_submissions_nonce']) || !wp_verify_nonce($_GET['download_submissions_nonce'], 'ccf_download_submissions_nonce')) {
         return;
     }
     $post_id = (int) $_GET['post'];
     $submissions = new WP_Query(array('post_type' => 'ccf_submission', 'posts_per_page' => apply_filters('ccf_max_submissions', 5000, $post_id), 'no_found_rows' => true, 'cache_results' => false, 'fields' => 'ids', 'order' => 'DESC', 'orderby' => 'date', 'post_parent' => $post_id));
     // Todo: Unit tests
     header('Content-Type: text/csv');
     header('Content-Disposition: attachment; filename=form-' . $post_id . '-submission-' . date('Y-m-d') . '.csv');
     header('Cache-Control: no-cache, no-store, must-revalidate');
     header('Pragma: no-cache');
     header('Expires: 0');
     $output = fopen('php://output', 'w');
     if ($submissions->have_posts()) {
         $last_submission_id = $submissions->posts[0];
         $fields = get_post_meta($last_submission_id, 'ccf_submission_data_map', true);
         if (empty($fields)) {
             $slugs = array_keys(get_post_meta($last_submission_id, 'ccf_submission_data', true));
             $fields = array();
             $attached_fields = get_post_meta($post_id, 'ccf_attached_fields', true);
             $attached_field_slugs = array();
             foreach ($attached_fields as $field_id) {
                 $slug = get_post_meta($field_id, 'ccf_field_slug', true);
                 if (!empty($slug)) {
                     $attached_field_slugs[$slug] = $field_id;
                 }
             }
             foreach ($slugs as $slug) {
                 if (!empty($attached_field_slugs[$slug])) {
                     $fields[$slug] = array('id' => $attached_field_slugs[$slug], 'type' => get_post_meta($attached_field_slugs[$slug], 'ccf_field_type', true));
                 }
             }
         }
         $headers = array_merge(array('date', 'ip'), array_keys($fields));
         fputcsv($output, $headers);
         foreach ($submissions->posts as $submission_id) {
             $submission_data = get_post_meta($submission_id, 'ccf_submission_data', true);
             $submission_ip = get_post_meta($submission_id, 'ccf_submission_ip', true);
             $row = array(get_the_time('Y-m-d H:i:s', $submission_id), sanitize_text_field($submission_ip));
             foreach ($fields as $slug => $field_array) {
                 $type = $field_array['type'];
                 if (!empty($submission_data[$slug])) {
                     $field = $submission_data[$slug];
                     if ('date' === $type) {
                         $row[] = stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_date($field));
                     } elseif ('name' === $type) {
                         $row[] = stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_name($field));
                     } elseif ('file' === $type) {
                         $row[] = $field['url'];
                     } elseif ('address' === $type) {
                         $row[] = stripslashes(CCF_Submission_CPT::factory()->get_pretty_field_address($field));
                     } elseif ('email' === $type) {
                         if (is_array($field)) {
                             $row[] = stripslashes($field['email']);
                         } else {
                             $row[] = stripslashes($field);
                         }
                     } elseif ('dropdown' === $type || 'radio' === $type || 'checkboxes' === $type) {
                         if (is_array($field)) {
                             $i = 0;
                             $outputval = '';
                             foreach ($field as $value) {
                                 if (!empty($value)) {
                                     if ($i !== 0) {
                                         $outputval .= ', ';
                                     }
                                     $outputval .= stripslashes($value);
                                     $i++;
                                 }
                             }
                             if (0 === $i) {
                                 $row[] = '';
                             } else {
                                 $row[] = $outputval;
                             }
                         } else {
                             $row[] = stripslashes($field);
                         }
                     } else {
                         $row[] = stripslashes($field);
                     }
                 } else {
                     $row[] = '';
                 }
             }
             fputcsv($output, $row);
         }
         fclose($output);
     }
     exit;
 }
require_once dirname(__FILE__) . '/classes/class-ccf-form-mail.php';
require_once dirname(__FILE__) . '/classes/class-ccf-field-cpt.php';
require_once dirname(__FILE__) . '/classes/class-ccf-choice-cpt.php';
require_once dirname(__FILE__) . '/classes/class-ccf-form-manager.php';
require_once dirname(__FILE__) . '/classes/class-ccf-field-renderer.php';
require_once dirname(__FILE__) . '/classes/class-ccf-form-renderer.php';
require_once dirname(__FILE__) . '/classes/class-ccf-form-handler.php';
require_once dirname(__FILE__) . '/classes/class-ccf-upgrader.php';
require_once dirname(__FILE__) . '/classes/class-ccf-widget.php';
require_once dirname(__FILE__) . '/classes/class-ccf-export.php';
require_once dirname(__FILE__) . '/classes/class-ccf-ads.php';
require_once dirname(__FILE__) . '/classes/class-ccf-settings.php';
CCF_Custom_Contact_Forms::factory();
CCF_Constants::factory();
CCF_Form_CPT::factory();
CCF_Submission_CPT::factory();
CCF_Field_CPT::factory();
CCF_Choice_CPT::factory();
CCF_Form_Manager::factory();
CCF_Form_Renderer::factory();
CCF_Field_Renderer::factory();
CCF_Form_Handler::factory();
CCF_Upgrader::factory();
CCF_Export::factory();
CCF_Ads::factory();
CCF_Settings::factory();
/**
 * Setup the widget
 *
 * @since 6.4
 */