/** * Returns an instance of the form with a particular ID * * @access public * @static * @since 3.8.10 * * @param int $id Optional. Defaults to 0. The ID of the form * @return WPSC_Checkout_Form */ public static function &get($id = 0) { if (!self::$instances) { self::$instances[$id] = new WPSC_Checkout_Form($id); } self::$form_titles = get_option('wpsc_checkout_form_sets'); return self::$instances[$id]; }
function _wpsc_copy_billing_details() { $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); $fields_to_copy = array('firstname', 'lastname', 'address', 'city', 'state', 'country', 'postcode'); $field_ids = array('shipping' => array(), 'billing' => array()); foreach ($fields as $field) { if (!empty($field->unique_name) && preg_match('/^(billing|shipping)(.+)/', $field->unique_name, $matches) && in_array($matches[2], $fields_to_copy)) { $field_ids[$matches[1]][$matches[2]] = $field->id; } } $post_data =& $_POST['wpsc_checkout_details']; foreach ($field_ids['shipping'] as $name => $id) { $billing_field_id = $field_ids['billing'][$name]; $post_data[$id] = $post_data[$billing_field_id]; } }
/** * get the output used to show a shipping state and region select drop down * * @since 3.8.14 * * @param wpsc_checkout|null $wpsc_checkout checkout object * @return string */ function wpsc_checkout_shipping_state_and_region($wpsc_checkout = null) { // just in case the checkout form was not presented, like when we are doing the shipping calculator if (empty($wpsc_checkout)) { $wpsc_checkout = new wpsc_checkout(); $doing_checkout_form = false; } else { $doing_checkout_form = true; } // if we aren't showing the shipping state on the cor we have no work to do if (!$wpsc_checkout->get_checkout_item('shippingstate')) { return ''; } // save the current checkout item in case we adjust it in the routine, we'll put it back before return $saved_checkout_item = $wpsc_checkout->checkout_item; // check a new checkout form with all fields $checkout_form = new WPSC_Checkout_Form(null, false); // is the shipping country visible on the form, let's find out $shipping_country_form_element = $checkout_form->get_field_by_unique_name('shippingcountry'); $showing_shipping_country = (bool) $shipping_country_form_element->active; // make sure the shipping state is the current checkout element $wpsc_checkout->checkout_item = $wpsc_checkout->get_checkout_item('shippingstate'); // setup the edit field, aka 'shippingstate' $shipping_country = wpsc_get_customer_meta('shippingcountry'); $shipping_region = wpsc_get_customer_meta('shippingregion'); $shipping_state = wpsc_get_customer_meta('shippingstate'); // if we are showing the billing country on the form then we use the value that can be // changed by the user, otherwise we will use the base country as configured in store admin if ($showing_shipping_country) { $wpsc_country = new WPSC_Country($shipping_country); } else { $wpsc_country = new WPSC_Country(wpsc_get_base_country()); } $region_list = $wpsc_country->get_regions(); $placeholder = $wpsc_country->get('region_label'); if (empty($placeholder)) { $placeholder = $wpsc_checkout->checkout_item->name; } $placeholder = apply_filters('wpsc_checkout_field_placeholder', apply_filters('wpsc_checkout_field_name', $placeholder), $wpsc_checkout->checkout_item); $form_element_id = $wpsc_checkout->form_element_id(); if ($doing_checkout_form) { $id_attribute = ' id="' . $form_element_id . '" '; } else { $id_attribute = ''; } // if there are regions for the current country we are going to // create the billing state edit, but hide it $style = ' '; if (!empty($region_list)) { $style = 'style="display: none;"'; } $output = '<input class="shipping_region text wpsc-visitor-meta" ' . ' data-wpsc-meta-key="' . $wpsc_checkout->checkout_item->unique_name . '" ' . ' title="' . $wpsc_checkout->checkout_item->unique_name . '" ' . ' type="text" ' . $id_attribute . ' placeholder="' . esc_attr($placeholder) . '" ' . ' value="' . esc_attr($shipping_state) . '" ' . ' name="collected_data[' . $wpsc_checkout->checkout_item->id . ']" ' . $style . ' />' . "\n\r"; // setup the drop down field, aka 'shippingregion' // move the checkout item pointer to the billing country, so we can generate form element ids, highly lame $wpsc_checkout->checkout_item = $checkout_form->get_field_by_unique_name('shippingcountry'); // if there aren't any regions for the current country we are going to // create the empty region select, but hide it $style = ' '; if (empty($region_list)) { $style = 'style="display: none;"'; } $title = 'shippingregion'; $region_form_id = $wpsc_checkout->form_element_id() . '_region'; $output .= '<select id="' . $region_form_id . '" ' . ' class="current_region wpsc-visitor-meta wpsc-region-dropdown" ' . ' data-wpsc-meta-key="shippingregion" ' . ' title="' . $title . '" ' . 'name="collected_data[' . $wpsc_checkout->checkout_item->id . '][1]" ' . $style . ">\n\r"; $wpsc_current_region = $wpsc_country->get_region($shipping_region); if (!empty($region_list)) { if (count($region_list) > 1) { $label = $wpsc_country->get('region_label'); $please_select_message = sprintf(__('Please select a %s', 'wp-e-commerce'), $label); $output .= "<option value='0'>" . $please_select_message . "</option>\n\r"; } foreach ($region_list as $wpsc_region) { if ((bool) $wpsc_current_region && $wpsc_current_region->get_id() == $wpsc_region->get_id()) { $selected = "selected='selected'"; } else { $selected = ''; } $output .= "<option value='" . $wpsc_region->get_id() . "' {$selected}>" . esc_html($wpsc_region->get_name()) . "</option>\n\r"; } } $output .= "</select>\n\r"; // restore the checkout item in case we messed with it $wpsc_checkout->checkout_item = $saved_checkout_item; return $output; }
/** * Display the payment gateway settings form as seen in WP eCommerce Settings area. * This method must be overridden by subclasses. * * @abstract * @access public * @since 3.9 * * @return void */ public function setup_form() { $checkout_field_types = array('billing' => __('Billing Fields', 'wp-e-commerce'), 'shipping' => __('Shipping Fields', 'wp-e-commerce')); $fields = array('firstname' => __('First Name', 'wp-e-commerce'), 'lastname' => __('Last Name', 'wp-e-commerce'), 'address' => __('Address', 'wp-e-commerce'), 'city' => __('City', 'wp-e-commerce'), 'state' => __('State', 'wp-e-commerce'), 'country' => __('Country', 'wp-e-commerce'), 'postcode' => __('Postal Code', 'wp-e-commerce')); $checkout_form = WPSC_Checkout_Form::get(); foreach ($checkout_field_types as $field_type => $title) { ?> <tr> <td colspan="2"> <h4><?php echo esc_html($title); ?> </h4> </td> </tr> <?php foreach ($fields as $field_name => $field_title) { $unique_name = $field_type . $field_name; $selected_id = $this->setting->get("checkout_field_{$unique_name}", $checkout_form->get_field_id_by_unique_name($unique_name)); ?> <tr> <td> <label for="manual-form-<?php echo esc_attr($unique_name); ?> "><?php echo esc_html($field_title); ?> </label> </td> <td> <select name="<?php echo $this->setting->get_field_name("checkout_field_{$unique_name}"); ?> " id="manual-form-<?php echo esc_attr($unique_name); ?> "> <?php $checkout_form->field_drop_down_options($selected_id); ?> </select> </td> </tr> <?php } } }
/** * Pull and Record PayPal Details * * @return void */ public function pull_paypal_details() { $this->set_purchase_log_for_callbacks(); // Pull the User Details from PayPal $this->paypal_data = $paypal = $this->gateway->get_details_for($_GET['token']); $payer = $paypal->get('payer'); $address = $paypal->get('shipping_address'); // PurchaseLog Update if (isset($address['country_code'])) { $this->purchase_log->set('billing_country', $address['country_code']); $this->purchase_log->set('shipping_country', $address['country_code']); } if (isset($address['state'])) { $this->purchase_log->set('billing_region', $address['state']); $this->purchase_log->set('shipping_region', $address['state']); } // Save Checkout Form Fields $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); $_POST['wpsc_checkout_details'] = array(); foreach ($fields as $field) { $this->set_post_var($field, $payer, $address); } // Save details to the Forms Table WPSC_Checkout_Form_Data::save_form($this->purchase_log, $fields); }
public function save_shipping_and_billing_info() { global $wpsc_cart; $purchase_log = $this->get_purchase_log(); $sessionid = mt_rand(100, 999) . time(); wpsc_update_customer_meta('checkout_session_id', $sessionid); $purchase_log->set(array('user_ID' => get_current_user_id(), 'date' => time(), 'plugin_version' => WPSC_VERSION, 'statusno' => '0', 'sessionid' => $sessionid)); $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); foreach ($fields as $field) { if (!array_key_exists($field->id, $_POST['wpsc_checkout_details'])) { continue; } $value = $_POST['wpsc_checkout_details'][$field->id]; switch ($field->unique_name) { case 'billingstate': wpsc_update_customer_meta('billing_region', $value); $purchase_log->set('billing_region', $value); break; case 'shippingstate': wpsc_update_customer_meta('shipping_region', $value); $purchase_log->set('shipping_region', $value); break; case 'billingcountry': wpsc_update_customer_meta('billing_country', $value); $purchase_log->set('billing_country', $value); break; case 'shippingcountry': wpsc_update_customer_meta('shipping_country', $value); $purchase_log->set('shipping_region', $value); break; case 'shippingpostcode': wpsc_update_customer_meta('shipping_zip', $value); break; } } _wpsc_update_location(); //keep track of tax if taxes are exclusive $wpec_taxes_controller = new wpec_taxes_controller(); if (!$wpec_taxes_controller->wpec_taxes_isincluded()) { $tax = $wpsc_cart->calculate_total_tax(); $tax_percentage = $wpsc_cart->tax_percentage; } else { $tax = 0.0; $tax_percentage = 0.0; } $purchase_log->set(array('wpec_taxes_total' => $tax, 'wpec_taxes_rate' => $tax_percentage)); $purchase_log->save(); //Check to ensure purchase log row was inserted successfully if (is_null($purchase_log->get('id'))) { $this->message_collection->add(__('A database error occured while processing your request.', 'wp-e-commerce'), 'error'); return; } $wpsc_cart->log_id = $purchase_log->get('id'); wpsc_update_customer_meta('current_purchase_log_id', $purchase_log->get('id')); WPSC_Checkout_Form_Data::save_form($purchase_log, $fields); $this->init_shipping_calculator(); if (wpsc_uses_shipping() && !$this->shipping_calculator->has_quotes) { $this->message_collection->add(__('Sorry, but we cannot ship products to your submitted address. Please either provide another shipping address or contact the store administrator about product availability to your location.', 'wp-e-commerce'), 'error'); return; } $this->wizard->completed_step('shipping-and-billing'); $url = add_query_arg($_GET, wpsc_get_checkout_url($this->wizard->pending_step)); wp_redirect($url); exit; }
private function save_shipping_and_billing_info() { global $wpsc_cart; // see if an existing purchase log has been set for this user // otherwise create one $purchase_log_id = (int) wpsc_get_customer_meta('current_purchase_log_id'); if ($purchase_log_id) { $purchase_log = new WPSC_Purchase_Log($purchase_log_id); } else { $purchase_log = new WPSC_Purchase_Log(); } $sessionid = mt_rand(100, 999) . time(); wpsc_update_customer_meta('checkout_session_id', $sessionid); $purchase_log->set(array('user_ID' => wpsc_get_current_customer_id(), 'date' => time(), 'plugin_version' => WPSC_VERSION, 'statusno' => '0', 'sessionid' => $sessionid)); $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); foreach ($fields as $field) { if (!array_key_exists($field->id, $_POST['wpsc_checkout_details'])) { continue; } $value = $_POST['wpsc_checkout_details'][$field->id]; switch ($field->unique_name) { case 'billingstate': wpsc_update_customer_meta('billing_region', $value); $purchase_log->set('billing_region', $value); break; case 'shippingstate': wpsc_update_customer_meta('shipping_region', $value); $purchase_log->set('shipping_region', $value); break; case 'billingcountry': wpsc_update_customer_meta('billing_country', $value); $purchase_log->set('billing_country', $value); break; case 'shippingcountry': wpsc_update_customer_meta('shipping_country', $value); $purchase_log->set('shipping_region', $value); break; case 'shippingpostcode': wpsc_update_customer_meta('shipping_zip', $value); break; } } _wpsc_update_location(); if (wpsc_is_tax_included()) { $tax = $wpsc_cart->calculate_total_tax(); $tax_percentage = $wpsc_cart->tax_percentage; } else { $tax = 0; $tax_percentage = 0; } $purchase_log->set(array('wpec_taxes_total' => $tax, 'wpec_taxes_rate' => $tax_percentage)); $purchase_log->save(); $wpsc_cart->log_id = $purchase_log->get('id'); wpsc_update_customer_meta('current_purchase_log_id', $purchase_log->get('id')); $this->save_form($purchase_log, $fields); $this->init_shipping_calculator(); if (wpsc_uses_shipping() && !$this->shipping_calculator->has_quotes) { $this->message_collection->add(__('Sorry but we cannot ship products to your submitted address. Please either provide another shipping address or contact the store administrator about product availability to your location.', 'wpsc'), 'error'); return; } $this->wizard->completed_step('shipping-and-billing'); wp_redirect(wpsc_get_checkout_url($this->wizard->pending_step)); exit; }
/** * Function that checks how many checkout fields are stored in checkout form fields table */ function get_count_checkout_fields() { $checkout = new WPSC_Checkout_Form(); $count = $checkout->get_field_count(); return $count; }
private function save_customer_settings() { $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); $customer_details = wpsc_get_customer_meta('checkout_details'); if (!is_array($customer_details)) { $customer_details = array(); } foreach ($fields as $field) { if (!array_key_exists($field->id, $_POST['wpsc_checkout_details'])) { continue; } $value = $_POST['wpsc_checkout_details'][$field->id]; $customer_details[$field->id] = $value; switch ($field->unique_name) { case 'billingstate': wpsc_update_customer_meta('billing_region', $value); break; case 'shippingstate': wpsc_update_customer_meta('shipping_region', $value); break; case 'billingcountry': wpsc_update_customer_meta('billing_country', $value); break; case 'shippingcountry': wpsc_update_customer_meta('shipping_country', $value); break; case 'shippingpostcode': wpsc_update_customer_meta('shipping_zip', $value); break; } } _wpsc_update_location(); wpsc_save_customer_details($customer_details); }
/** * Used in conjunction with set() method, saves individual checkout form fields to database. * * @since 4.0 * @return void */ public function save() { $log = new WPSC_Purchase_Log($this->log_id); $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); $original_data = wp_list_pluck($this->get_raw_data(), 'value', 'id'); $this->submitted_data = array_replace($original_data, $this->submitted_data); return self::save_form($log, $fields, $this->submitted_data); }
public function set_customer_details() { $_POST['wpsc_checkout_details'] = array(); $_GET['amazon_reference_id'] = sanitize_text_field($_POST['amazon_reference_id']); try { if (!$this->reference_id) { throw new Exception(__('An Amazon payment method was not chosen.', 'wpsc')); } if (is_null($this->purchase_log)) { $log = _wpsc_get_current_controller()->get_purchase_log(); wpsc_update_customer_meta('current_purchase_log_id', $log->get('id')); $this->set_purchase_log($log); } global $wpsc_cart; // Update order reference with amounts $response = $this->api_request(array('Action' => 'SetOrderReferenceDetails', 'AmazonOrderReferenceId' => $this->reference_id, 'OrderReferenceAttributes.OrderTotal.Amount' => $wpsc_cart->calculate_total_price(), 'OrderReferenceAttributes.OrderTotal.CurrencyCode' => strtoupper($this->get_currency_code()), 'OrderReferenceAttributes.SellerNote' => sprintf(__('Order %s from %s.', 'wpsc'), $this->purchase_log->get('id'), urlencode(remove_accents(wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES)))), 'OrderReferenceAttributes.SellerOrderAttributes.SellerOrderId' => $this->purchase_log->get('id'), 'OrderReferenceAttributes.SellerOrderAttributes.StoreName' => remove_accents(wp_specialchars_decode(get_bloginfo('name'), ENT_QUOTES)), 'OrderReferenceAttributes.PlatformId' => 'A2Z8DY3R4G08IM')); if (is_wp_error($response)) { throw new Exception($response->get_error_message()); } if (isset($response['Error']['Message'])) { throw new Exception($response['Error']['Message']); } $response = $this->api_request(array('Action' => 'GetOrderReferenceDetails', 'AmazonOrderReferenceId' => $this->reference_id)); if (is_wp_error($response)) { throw new Exception($response->get_error_message()); } if (!isset($response['GetOrderReferenceDetailsResult']['OrderReferenceDetails']['Destination']['PhysicalDestination'])) { return; } $address = $response['GetOrderReferenceDetailsResult']['OrderReferenceDetails']['Destination']['PhysicalDestination']; remove_action('wpsc_checkout_get_fields', '__return_empty_array'); add_filter('wpsc_validate_form', '__return_true'); $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); foreach ($fields as $field) { switch ($field->unique_name) { case 'shippingstate': $_POST['wpsc_checkout_details'][$field->id] = WPSC_Countries::get_region_id($address['CountryCode'], $address['StateOrRegion']); break; case 'shippingcountry': $_POST['wpsc_checkout_details'][$field->id] = $address['CountryCode']; break; case 'shippingpostcode': $_POST['wpsc_checkout_details'][$field->id] = $address['PostalCode']; break; case 'shippingcity': $_POST['wpsc_checkout_details'][$field->id] = $address['City']; break; } } } catch (Exception $e) { WPSC_Message_Collection::get_instance()->add($e->getMessage(), 'error', 'main', 'flash'); return; } }
function _wpsc_convert_checkout_form_fields($customer_settings = false) { $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); $args = array(); $purchase_log_exists = false; if (!$customer_settings) { $purchase_log_id = wpsc_get_customer_meta('current_purchase_log_id'); $purchase_log_exists = (bool) $purchase_log_id; if ($purchase_log_exists) { $form_data_obj = new WPSC_Checkout_Form_Data($purchase_log_id); $form_raw_data = $form_data_obj->get_raw_data(); $form_data = array(); foreach ($form_raw_data as $data) { $form_data[$data->id] = $data; } } } $i = 0; $state_country_pairs = array('billing_state' => array(), 'shipping_state' => array()); $customer_details = wpsc_get_customer_meta('checkout_details'); if (!is_array($customer_details)) { $customer_details = array(); } foreach ($fields as $field) { $id = empty($field->unique_name) ? $field->id : $field->unique_name; $default_value = array_key_exists($field->id, $customer_details) ? $customer_details[$field->id] : ''; if ($purchase_log_exists && $field->type != 'heading' && isset($form_data[$field->id])) { $default_value = $form_data[$field->id]->value; } $field_arr = array('type' => $field->type, 'id' => "wpsc-checkout-field-{$id}", 'title' => esc_html($field->name), 'name' => 'wpsc_checkout_details[' . $field->id . ']', 'value' => wpsc_submitted_value($field->id, $default_value, $_POST['wpsc_checkout_details'])); $validation_rules = array('trim'); if ($field->mandatory) { $validation_rules[] = 'required'; } $optional_state_field = false; if (in_array($field->unique_name, array('billingstate', 'shippingstate'))) { $field_arr['type'] = 'select_region'; /* output states for all countries just in case Javascript doesn't work */ $field_arr['country'] = 'all'; if ($field->unique_name == 'billingstate') { $state_country_pairs['billing_state']['key'] = $i; } else { $state_country_pairs['shipping_state']['key'] = $i; } // optional text field in case the country they select do not have states // and JS is disabled either by preferences or on error $optional_state_field = true; // convert state values in text into proper ID $validation_rules[] = '_wpsc_convert_state'; } elseif (in_array($field->unique_name, array('billingcountry', 'shippingcountry')) || $field->type == 'delivery_country') { $field_arr['type'] = 'select_country'; $validation_rules[] = 'country'; if ($field->unique_name == 'billingcountry') { $state_country_pairs['billing_state']['country_field_id'] = $field->id; } else { $state_country_pairs['shipping_state']['country_field_id'] = $field->id; } } elseif ($field->type == 'text') { $field_arr['type'] = 'textfield'; } elseif ($field->type == 'select') { $field_arr['options'] = array_flip(unserialize($field->options)); } elseif ($field->type == 'radio') { $field_arr['type'] = 'radios'; $field_arr['options'] = array_flip(unserialize($field->options)); } elseif ($field->type == 'checkbox') { $field_arr['type'] = 'checkboxes'; $field_arr['options'] = array_flip(unserialize($field->options)); } elseif (in_array($field->type, array('address', 'city', 'email'))) { $field_arr['type'] = 'textfield'; if ($field->type == 'email') { $validation_rules[] = 'email'; } } elseif ($field->type == 'heading' && $field->unique_name == 'delivertoafriend') { $field_arr['shipping_heading'] = true; } $field_arr['rules'] = implode('|', $validation_rules); $args[$i] = $field_arr; $i++; if ($optional_state_field) { $args[$i] = $args[$i - 1]; $args[$i]['type'] = 'textfield'; $args[$i]['id'] = 'wpsc-checkout-field-' . $id . '-text'; $i++; } } if (wpsc_has_tnc() && !$customer_settings) { $args[] = array('type' => 'checkbox', 'id' => 'wpsc-terms-and-conditions', 'title' => sprintf(__("I agree to the <a class='thickbox' target='_blank' href='%s' class='termsandconds'>Terms and Conditions</a>", "wpsc"), esc_url(site_url("?termsandconds=true&width=360&height=400"))), 'value' => 1, 'name' => 'wpsc_terms_conditions', 'rules' => 'required', 'checked' => wpsc_submitted_value('wpsc_terms_conditions', 0) == 1); } foreach ($state_country_pairs as $field) { $args[$field['key']]['rules'] .= '|state_of[' . $field['country_field_id'] . ']'; $args[$field['key']]['rules'] = ltrim($args[$field['key']]['rules'], '|'); } return $args; }
function _wpsc_convert_checkout_form_fields($customer_settings = false) { $form = WPSC_Checkout_Form::get(); $fields = $form->get_fields(); if (empty($fields)) { return array(); } $args = array(); $purchase_log_exists = false; $fieldsets = array('billing' => array('type' => 'fieldset', 'title' => apply_filters('wpsc_checkout_billing_header_label', __('<h2>Billing & Shipping Details</h2>', 'wp-e-commerce')), 'id' => 'wpsc-checkout-form-billing', 'fields' => array()), 'shipping' => array('type' => 'fieldset', 'title' => apply_filters('wpsc_checkout_shipping_header_label', __('<h2>Shipping Details</h2>', 'wp-e-commerce')), 'id' => 'wpsc-checkout-form-shipping', 'fields' => array())); if (!$customer_settings) { $purchase_log_id = wpsc_get_customer_meta('current_purchase_log_id'); $purchase_log_exists = (bool) $purchase_log_id; if ($purchase_log_exists) { $form_data_obj = new WPSC_Checkout_Form_Data($purchase_log_id); $form_raw_data = $form_data_obj->get_raw_data(); $form_data = array(); foreach ($form_raw_data as $data) { $form_data[$data->id] = $data; } } } $i = 0; $state_country_pairs = array('billing_state' => array(), 'shipping_state' => array()); $customer_details = wpsc_get_customer_meta('checkout_details'); if (!is_array($customer_details)) { $customer_details = array(); } foreach ($fields as $field) { $id = empty($field->unique_name) ? $field->id : $field->unique_name; $is_shipping = false !== strpos($field->unique_name, 'shipping'); $is_billing = false !== strpos($field->unique_name, 'billing'); $default_value = array_key_exists($field->id, $customer_details) ? $customer_details[$field->id] : ''; /* Doing our college-best to check for one of the two original headings */ if ('heading' == $field->type && ('delivertoafriend' == $field->unique_name || '1' === $field->id)) { continue; } if ($purchase_log_exists && isset($form_data[$field->id])) { $default_value = $form_data[$field->id]->value; } if (isset($_POST['wpsc_checkout_details'])) { $_POST['wpsc_checkout_details'] = wp_unslash($_POST['wpsc_checkout_details']); } $field_arr = array('type' => $field->type, 'id' => "wpsc-checkout-field-{$id}", 'title' => esc_html($field->name), 'name' => 'wpsc_checkout_details[' . $field->id . ']', 'value' => wpsc_submitted_value($field->id, wp_unslash($default_value), $_POST['wpsc_checkout_details'])); $validation_rules = array('trim'); if ($field->mandatory) { $validation_rules[] = 'required'; } $optional_state_field = false; if (in_array($field->unique_name, array('billingstate', 'shippingstate'))) { $field_arr['type'] = 'select_region'; /* output states for all countries just in case Javascript doesn't work */ $field_arr['country'] = 'all'; if ($field->unique_name == 'billingstate') { $state_country_pairs['billing_state']['key'] = $i; } else { $state_country_pairs['shipping_state']['key'] = $i; } // optional text field in case the country they select do not have states // and JS is disabled either by preferences or on error $optional_state_field = true; // convert state values in text into proper ID $validation_rules[] = '_wpsc_convert_state'; } elseif (in_array($field->unique_name, array('billingcountry', 'shippingcountry')) || $field->type == 'delivery_country') { $field_arr['type'] = 'select_country'; $validation_rules[] = 'country'; if ($field->unique_name == 'billingcountry') { $state_country_pairs['billing_state']['country_field_id'] = $field->id; } else { $state_country_pairs['shipping_state']['country_field_id'] = $field->id; } } elseif ($field->type == 'text') { $field_arr['type'] = 'textfield'; } elseif ($field->type == 'select') { $field_arr['options'] = array_flip(unserialize($field->options)); } elseif ($field->type == 'radio') { $field_arr['type'] = 'radios'; $field_arr['options'] = array_flip(unserialize($field->options)); } elseif ($field->type == 'checkbox') { $field_arr['type'] = 'checkboxes'; $field_arr['options'] = array_flip(unserialize($field->options)); } elseif (in_array($field->type, array('address', 'city', 'email'))) { $field_arr['type'] = 'textfield'; if ($field->type == 'email') { $validation_rules[] = 'email'; } } elseif ($field->type == 'heading' && $field->unique_name == 'delivertoafriend') { $field_arr['shipping_heading'] = true; } $field_arr['rules'] = implode('|', $validation_rules); if ($is_shipping) { $fieldsets['shipping']['fields'][$i] = $field_arr; } else { if ($is_billing) { $fieldsets['billing']['fields'][$i] = $field_arr; } else { $args[$i] = $field_arr; } } $i++; if ($optional_state_field && $is_billing) { $fieldsets['billing']['fields'][$i] = $fieldsets['billing']['fields'][$i - 1]; $fieldsets['billing']['fields'][$i]['type'] = 'textfield'; $fieldsets['billing']['fields'][$i]['id'] = 'wpsc-checkout-field-' . $id . '-text'; $i++; } else { if ($optional_state_field && $is_shipping) { $fieldsets['shipping']['fields'][$i] = $fieldsets['shipping']['fields'][$i - 1]; $fieldsets['shipping']['fields'][$i]['type'] = 'textfield'; $fieldsets['shipping']['fields'][$i]['id'] = 'wpsc-checkout-field-' . $id . '-text'; } } } if (wpsc_has_tnc() && !$customer_settings) { $args[] = array('type' => 'checkbox', 'id' => 'wpsc-terms-and-conditions', 'title' => sprintf(__("I agree to the <a class='thickbox' target='_blank' href='%s' class='termsandconds'>Terms and Conditions</a>", 'wp-e-commerce'), esc_url(add_query_arg(array('termsandconds' => 'true', 'width' => 360, 'height' => 400)))), 'value' => 1, 'name' => 'wpsc_terms_conditions', 'rules' => 'required', 'checked' => wpsc_submitted_value('wpsc_terms_conditions', 0) == 1); } foreach ($state_country_pairs as $state => $field) { $is_shipping = 'shipping_state' == $state; if (isset($field['key']) && $is_shipping) { $fieldsets['shipping']['fields'][$field['key']]['rules'] .= '|state_of[' . $field['country_field_id'] . ']'; $fieldsets['shipping']['fields'][$field['key']]['rules'] = ltrim($fieldsets['shipping']['fields'][$field['key']]['rules'], '|'); } else { if (isset($field['key'])) { $fieldsets['billing']['fields'][$field['key']]['rules'] .= '|state_of[' . $field['country_field_id'] . ']'; $fieldsets['billing']['fields'][$field['key']]['rules'] = ltrim($fieldsets['billing']['fields'][$field['key']]['rules'], '|'); } } } /* Add 'shipping same as billing' box to end of billing, rather than shipping header. */ if (!empty($fieldsets['billing']['fields']) && !empty($fieldsets['shipping']['fields'])) { $checked = wpsc_get_customer_meta('wpsc_copy_billing_details'); $fieldsets['billing']['fields'][$i++] = array('type' => 'checkbox', 'id' => 'wpsc-terms-and-conditions', 'title' => apply_filters('wpsc_shipping_same_as_billing', __('Shipping address is same as billing', 'wp-e-commerce')), 'value' => 1, 'name' => 'wpsc_copy_billing_details', 'checked' => empty($checked) || '1' == $checked); } if (empty($fieldsets['billing']['fields'])) { unset($fieldsets['billing']); } if (empty($fieldsets['shipping']['fields'])) { unset($fieldsets['shipping']); } return $fieldsets + $args; }