/** * Handle parsing multidimensional arrays of args. * * @author Jeremy Pry * * @param array $args The arguments to parse. * @param array $defaults The defaults to combine with the regular arguments. * * @return array The parsed arguments. */ function yikes_deep_parse_args($args, $defaults) { foreach ($args as $key => $value) { // If we don't have a corresponding default, just continue. if (!isset($defaults[$key])) { continue; } // For arrays, do another round of parsing args. if (is_array($value)) { $args[$key] = yikes_deep_parse_args($value, $defaults[$key]); } } // Now we're ready for the regular wp_parse_args() function return wp_parse_args($args, $defaults); }
/** * Export our forms. * * @param string $file_name * @param array $form_ids */ public static function yikes_mailchimp_form_export($file_name, $form_ids) { $interface = yikes_easy_mailchimp_extender_get_form_interface(); $form_ids = empty($form_ids) ? $interface->get_form_ids() : (array) $form_ids; $results = array(); foreach ($form_ids as $form_id) { $results[$form_id] = $interface->get_form($form_id); } // Process report request $output_filename = $file_name . '-' . date('m-d-Y') . '.csv'; $output_handle = @fopen('php://output', 'w'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Content-Description: File Transfer'); header('Content-type: text/csv'); header('Content-Disposition: attachment; filename=' . $output_filename); header('Expires: 0'); header('Pragma: public'); // Export the titles using form defaults $defaults = $interface->get_form_defaults(); ksort($defaults); $titles = array_keys($defaults); fputcsv($output_handle, $titles); // Parse results to csv format foreach ($results as $row) { // Ensure that we have all the data we're supposed to have. $row = array_intersect_key($row, $interface->get_form_defaults()); $row = yikes_deep_parse_args($row, $interface->get_form_defaults()); ksort($row); // Possibly convert arrays to JSON. foreach ($row as $key => &$value) { if (!is_array($value)) { continue; } $value = json_encode($value); } // Add row to file fputcsv($output_handle, $row); } // Close output file stream fclose($output_handle); die; }
/** * Create a new form. * * @author Jeremy Pry * * @param array $form_data Data to apply to the new form. * * @return int|bool The new form ID, or false on failure. */ public function create_form($form_data) { // Include default form data $form_data = yikes_deep_parse_args($form_data, $this->get_form_defaults()); // Grab our existing IDs and determine what the next one should be. $all_ids = $this->get_form_ids(); $last_id = end($all_ids); $new_id = false === $last_id ? 1 : $last_id + 1; $form_data['id'] = $new_id; // Ensure our data is consistently sorted ksort($form_data); // Store the new form in our array of forms. $all_forms = $this->get_all_forms(); $all_forms[$new_id] = $form_data; // Update our option with the new form. $result = update_option($this->option, $all_forms); if (false === $result) { return $result; } return $new_id; }
/** * Create a new form. * * @author Jeremy Pry * * @param array $form_data Data to apply to the new form. * * @return int|bool The new form ID, or false on failure. */ public function create_form($form_data) { // Include default form data $form_data = yikes_deep_parse_args($form_data, $this->get_form_defaults()); // If there is an ID set, remove it unset($form_data['id']); // Prepare the data for the database $save_data = $this->prepare_data_for_db($form_data); $formats = $this->get_format_array($save_data); $result = $this->wpdb->insert($this->prefixed_table_name, $save_data, $formats); if (false === $result) { return $result; } return $this->wpdb->insert_id; }
public function yikes_easy_mailchimp_update_form() { // grab & store our variables ( associated list & form name ) $nonce = $_REQUEST['nonce']; $form_id = $_REQUEST['id']; // verify our nonce if (!wp_verify_nonce($nonce, 'update-mailchimp-form-' . $form_id)) { wp_die(__("We've run into an error. The security check didn't pass. Please try again.", 'yikes-inc-easy-mailchimp-extender'), __("Failed nonce validation", 'yikes-inc-easy-mailchimp-extender'), array('response' => 500, 'back_link' => true)); } // store our values! $list_id = $_POST['associated-list']; $form_name = stripslashes($_POST['form-name']); $form_description = sanitize_text_field(stripslashes($_POST['form-description'])); $send_welcome_email = $_POST['send-welcome-email']; $redirect_user_on_submit = $_POST['redirect-user-on-submission']; $redirect_page = $_POST['redirect-user-to-selection']; // stripslashes_deep on save, to prevent foreign languages from added excessive backslashes $assigned_fields = isset($_POST['field']) ? stripslashes_deep($_POST['field']) : array(); // setup our submission settings serialized array $submission_settings = array('ajax' => $_POST['form-ajax-submission'], 'redirect_on_submission' => $_POST['redirect-user-on-submission'], 'redirect_page' => $_POST['redirect-user-to-selection'], 'custom_redirect_url' => esc_url($_POST['custom-redirect-url']), 'hide_form_post_signup' => $_POST['hide-form-post-signup'], 'replace_interests' => $_POST['replace-interest-groups']); // setup our opt-in settings serialized array $optin_settings = array('optin' => $_POST['single-double-optin'], 'update_existing_user' => $_POST['update-existing-user'], 'send_update_email' => $_POST['update-existing-email'], 'send_welcome_email' => $_POST['send-welcome-email']); // setup our error settings serialized array $error_settings = array('success' => trim($_POST['yikes-easy-mc-success-message']) ? trim(stripslashes($_POST['yikes-easy-mc-success-message'])) : '', 'general-error' => trim($_POST['yikes-easy-mc-general-error-message']) ? trim(stripslashes($_POST['yikes-easy-mc-general-error-message'])) : '', 'invalid-email' => trim($_POST['yikes-easy-mc-invalid-email-message']) ? trim(stripslashes($_POST['yikes-easy-mc-invalid-email-message'])) : '', 'already-subscribed' => trim($_POST['yikes-easy-mc-user-subscribed-message']) ? trim(stripslashes($_POST['yikes-easy-mc-user-subscribed-message'])) : '', 'update-link' => trim($_POST['yikes-easy-mc-user-update-link']) ? trim(stripslashes($_POST['yikes-easy-mc-user-update-link'])) : ''); // Setup the new form settings array // @since 6.0.3.8 // To Do: Combine date & time so it's a single unix timestamp $form_settings = array('yikes-easy-mc-form-class-names' => trim($_POST['yikes-easy-mc-form-class-names']), 'yikes-easy-mc-inline-form' => $_POST['yikes-easy-mc-inline-form'][0], 'yikes-easy-mc-submit-button-type' => $_POST['yikes-easy-mc-submit-button-type'][0], 'yikes-easy-mc-submit-button-text' => trim($_POST['yikes-easy-mc-submit-button-text']), 'yikes-easy-mc-submit-button-image' => esc_url(trim($_POST['yikes-easy-mc-submit-button-image'])), 'yikes-easy-mc-submit-button-classes' => trim($_POST['yikes-easy-mc-submit-button-classes']), 'yikes-easy-mc-form-schedule' => isset($_POST['yikes-easy-mc-form-schedule']) ? '1' : '0', 'yikes-easy-mc-form-restriction-start' => strtotime($_POST['yikes-easy-mc-form-restriction-start-date'] . ' ' . $_POST['yikes-easy-mc-form-restriction-start-time']), 'yikes-easy-mc-form-restriction-end' => strtotime($_POST['yikes-easy-mc-form-restriction-end-date'] . ' ' . $_POST['yikes-easy-mc-form-restriction-end-time']), 'yikes-easy-mc-form-restriction-pending-message' => trim($_POST['yikes-easy-mc-form-restriction-pending-message']), 'yikes-easy-mc-form-restriction-expired-message' => trim($_POST['yikes-easy-mc-form-restriction-expired-message']), 'yikes-easy-mc-form-login-required' => isset($_POST['yikes-easy-mc-form-login-required']) ? '1' : '0', 'yikes-easy-mc-form-restriction-login-message' => trim($_POST['yikes-easy-mc-form-restriction-login-message'])); // additional custom fields (extensions / user defined fields) $custom_fields = array(); if (isset($_POST['custom-field'])) { foreach ($_POST['custom-field'] as $custom_field => $custom_value) { if (is_array($custom_value)) { $custom_fields[$custom_field] = array_filter(stripslashes_deep($custom_value)); // array_filters to remove empty items (don't save them!) } else { $custom_fields[$custom_field] = stripslashes($custom_value); } } } $form_updates = yikes_deep_parse_args(array('list_id' => $list_id, 'form_name' => $form_name, 'form_description' => $form_description, 'fields' => $assigned_fields, 'custom_template' => 0, 'send_welcome_email' => $send_welcome_email, 'redirect_user_on_submit' => $redirect_user_on_submit, 'redirect_page' => $redirect_page, 'submission_settings' => $submission_settings, 'optin_settings' => $optin_settings, 'error_messages' => $error_settings, 'form_settings' => $form_settings, 'custom_fields' => $custom_fields), $this->form_interface->get_form_defaults()); $this->form_interface->update_form($form_id, $form_updates); /* Custom action hook which allows users to update specific options when a form is updated - used in add ons */ do_action('yikes-mailchimp-save-form', $form_id, $custom_fields); // redirect the user to the manage forms page, display confirmation wp_redirect(esc_url_raw(admin_url('admin.php?page=yikes-mailchimp-edit-form&id=' . $form_id . '&updated-form=true'))); exit; }