/** * 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; }
function test_get_regions_array() { $country = new WPSC_Country(self::COUNTRY_ID_WITH_REGIONS); $regions = $country->get_regions(true); $this->assertInternalType('array', $regions); $this->assertEquals(self::NUM_REGIONS, count($regions)); $country = new WPSC_Country(self::COUNTRY_ID_WITHOUT_REGIONS); $regions = $country->get_regions(true); $this->assertInternalType('array', $regions); $this->assertEquals(0, count($regions)); }
function wpsc_shipping_region_list($selected_country, $selected_region, $deprecated = false, $id = 'region') { $output = ''; if (false !== $deprecated) { _wpsc_deprecated_argument(__FUNCTION, '3.8.14'); } $country = new WPSC_Country($selected_country); $regions = $country->get_regions(); $output .= "<select class=\"wpsc-visitor-meta\" data-wpsc-meta-key=\"shippingregion\" name=\"region\" id=\"{$id}\" >\n\r"; if (count($regions) > 0) { foreach ($regions as $region_id => $region) { $selected = ''; if ($selected_region == $region_id) { $selected = "selected='selected'"; } $output .= "<option {$selected} value='{$region_id}'>" . esc_attr(htmlspecialchars($region->get_name())) . "</option>\n\r"; } $output .= ''; } $output .= '</select>'; return $output; }