public static function validate_settings($settings, $defaults) { if (isset($settings["shipping_settings"]["weight_ids"]) && is_array($settings["shipping_settings"]["weight_ids"])) { $w = $settings["shipping_settings"]["weight"]; foreach (array_unique($settings["shipping_settings"]["weight_ids"]) as $weight_id) { $to_val = $w["to_weight_" . $weight_id]; if (isset($to_val) && intval($to_val) > 0) { $regions = parent::get_shipping_regions(); $region_prices = array(); foreach ($regions as $region_code => $region_data) { $input = "shipping_weight_" . $region_code . "_" . $weight_id; if (isset($w[$input]) && trim($w[$input]) != "") { $region_prices[$region_code] = intval($w[$input]); } } if (count($region_prices) == count($regions)) { $weights[] = array("to_weight" => $weight["to_weight_" . $weight_id], "regions" => $region_prices); } } } } else { $weights = $defaults["shipping_settings"]["weights"]; } usort($weights, array(__CLASS__, 'put_in_order')); $settings["shipping_settings"]["weights"] = $weights; unset($settings["shipping_settings"]["weight_ids"]); unset($settings["shipping_settings"]["weight"]); return $settings; }
/** * get_shopping_basket * used to return HTML for the shopping basket page */ public static function get_shopping_basket() { //print('<pre>' . print_r($_REQUEST, true) . '</pre>');exit; /* make sure we have all the required paypal options */ $options = SimplePayPalPluginAdmin::get_paypal_options(); if ($options["cart_url"] == false) { return ""; } /* see if we are returning here from paypal */ if (isset($_REQUEST["merchant_return_link"])) { return $options["thanks_msg"]; } /* fields for item delivery address */ $address_fields = array('name' => array('label' => __('Name', 'sppp'), 'required' => true), 'address1' => array('label' => __('Address', 'sppp'), 'required' => true), 'address2' => array('label' => '', 'required' => false), 'address3' => array('label' => '', 'required' => false), 'address4' => array('label' => '', 'required' => false), 'country' => array('label' => __('Country', 'sppp'), 'required' => true), 'postcode' => array('label' => __('Postcode/Zip', 'sppp'), 'required' => true)); /* shipping regions */ $regions = SimplePayPalPluginShipping::get_shipping_regions(); /** * shipping data is set in the session, including the (non-pickup) * delivery address. */ if (!isset($_SESSION["shipping_data"])) { $_SESSION["shipping_data"] = array("errors" => array(), "delivery_method" => "post", "address" => array(), "show_errors" => true); } /* see if we are coming from the delivery address form */ if (isset($_REQUEST['submit_address']) || isset($_REQUEST["submit_post"])) { /* delivery address - validate form values */ foreach ($address_fields as $name => $details) { /* clear any existing errors */ if (isset($_SESSION["shipping_data"]["errors"][$name])) { unset($_SESSION["shipping_data"]["errors"][$name]); } /* set values if adress has been submitted */ if (isset($_REQUEST['submit_address'])) { /* set data in Session */ $_SESSION["shipping_data"]["address"][$name] = trim($_REQUEST["delivery_" . $name]); } else { if (!isset($_SESSION["shipping_data"]["address"][$name])) { $_SESSION["shipping_data"]["address"][$name] = ''; } } /* don't shjow errors if this is a change in shipping method */ if (isset($_REQUEST["submit_post"])) { $_SESSION["shipping_data"]["show_errors"] = false; } /* validate address fields */ if ($name === "country") { /* validate country field */ if (!SimplePayPalPluginShipping::is_valid_country_code($_SESSION["shipping_data"]["address"][$name])) { $_SESSION["shipping_data"]["errors"][$name] = __('Please select a country', 'sppp'); } } elseif ($details["required"]) { /* ensure required fields are non-empty */ if (trim($_SESSION["shipping_data"]["address"][$name]) == "") { $_SESSION["shipping_data"]["errors"][$name] = __('This field is required', 'sppp'); } } } } elseif (isset($_REQUEST["submit_pickup"])) { $_SESSION["shipping_data"]["delivery_method"] = "pickup"; } /* see if the customer pays VAT */ $customer_pays_vat = self::customer_pays_vat(); /* initialise variables to store output and track totals */ $out = ""; $total_items = 0; $masterForm = ''; $total_vat = 0; $total_price_ex_vat = 0; $total_price_inc_vat = 0; if (isset($_SESSION['sppp-cart']) && is_array($_SESSION['sppp-cart']) && count($_SESSION['sppp-cart'])) { $out .= '<table class="cart">'; $out .= sprintf('<thead><tr><th class="deletecolumn"></th><th class="itemcolumn">%s</th><th class="quantitycolumn">%s</th><th class="moneycolumn">%s</th></tr></thead>', __('item', 'sppp'), __('quantity', 'sppp'), __('price', 'sppp')); $item_price_inc_vat = array(); $item_price_ex_vat = array(); $item_has_more_stock = array(); foreach ($_SESSION['sppp-cart'] as $item) { $paypal = SimplePaypalPluginAdmin::get_paypal_meta($item["product_page_id"]); /* make sure we have stock of this item */ if ($paypal["stock_no"] < $item["quantity"]) { if ($paypal["stock_no"] == 0) { self::remove_from_cart_by_page_id($item["product_page_id"]); continue; } else { $item["quantity"] = $paypal["stock_no"]; } } $item_has_more_stock["p" . $item["product_page_id"]] = $item["quantity"] < $paypal["stock_no"]; /* get all totals */ $total_items += $item['quantity']; $item_price_inc_vat["p" . $item["product_page_id"]] = floatval($item['price_inc_vat']); $item_price_ex_vat["p" . $item["product_page_id"]] = floatval($item['price_ex_vat']); $total_price_inc_vat += floatval($item['price_inc_vat']) * intval($item['quantity']); $total_price_ex_vat += floatval($item['price_ex_vat']) * intval($item['quantity']); $total_vat += floatval($item['vat_amount']) * intval($item['quantity']); } /* if the cart has been emptied due to a decrease in stock level... */ if (!count($_SESSION['sppp-cart'])) { return apply_filters('sppp_empty_basket_msg', sprintf('<p>%s.</p>', __('Your basket is empty', 'sppp'))); } $count = 1; /* oputput the basket table and build the paypal form */ foreach ($_SESSION['sppp-cart'] as $item) { $rowclass = $count % 2 === 0 ? ' even' : ' odd'; $out .= sprintf('<tr class="itemrow%s">', $rowclass); /* remove button */ $out .= sprintf('<td class="deletecolumn"><form method="post" action="%s"><input type="hidden" name="sppp-delcart" value="1" /><input type="hidden" name="sppp-product_page_id" value="%s" /><button type="submit" class="sppp-small-button sppp-remove-button" title="%s">%s</button></form></td>', $options["cart_url"], $item['product_page_id'], __('Remove item', 'sppp'), __('Remove item', 'sppp')); /* item name linking to product page */ $out .= sprintf('<td class="itemcolumn"><a href="%s">%s</a></td>', get_permalink($item["product_page_id"]), $item["name"]); /* quantity indicator and change quantities button */ $out .= sprintf('<td class="quantitycolumn"><form method="post" action="%s" name="cquantity"><input type="hidden" name="sppp-cquantity" value="1" /><input type="hidden" name="sppp-product_page_id" value="%s" /><input type="hidden" name="sppp-quantity" value="%s" />', $options["cart_url"], $item["product_page_id"], $item["quantity"]); if ($item_has_more_stock["p" . $item["product_page_id"]]) { $plusbutton = sprintf('<button type="submit" class="sppp-small-button sppp-increase-button" name="plus" title="%1$s">%1$s</button>', __('Add one', 'sppp')); } else { $plusbutton = sprintf('<button class="sppp-small-button sppp-increase-button disabled" title="%1$s">%1$s</button>', __('No more stock available', 'sppp')); } $out .= sprintf('<button type="submit" class="sppp-small-button sppp-decrease-button" name="minus" title="%1$s">%1$s</button><span class="quantityval">%2$s</span>%3$s</form></td>', __('Remove one', 'sppp'), $item["quantity"], $plusbutton); $out .= sprintf('<td class="moneycolumn">£%.2f</td></tr>', $item_price_ex_vat["p" . $item["product_page_id"]]); $masterForm .= sprintf('<input type="hidden" name="item_name_%s" value="%s" /><input type="hidden" name="item_number_%s" value="%s" /><input type="hidden" name="amount_%s" value="%s" /><input type="hidden" name="quantity_%s" value="%s" /><input type="hidden" name="code_%s" value="%s" />', $count, $item["name"], $count, $item["product_page_id"], $count, $item["price"], $count, $item["quantity"], $count, $item["code"]); $count++; } $out .= sprintf('<tr class="subtotal"><td colspan="2">%s:</td><td class="moneycolumn" colspan="2">£%.2f</td></tr>', __('Subtotal', 'sppp'), $total_price_ex_vat); if ($total_vat > 0 && $customer_pays_vat) { $out .= sprintf('<tr class="subtotal"><td colspan="2">%s:</td><td class="moneycolumn" colspan="2">£%.2f</td></tr>', __('VAT', 'sppp'), $total_vat); } /* flag to determine whether the paypal form can be submitted*/ $order_complete = false; /* output a form to allow changes in shipping information */ $shipping_form = sprintf('<h3>%s</h3><form method="post" class="sppp-shipping-address-form" action="%s" method="post">', __('Shipping', 'sppp'), $options["cart_url"]); /* the delivery method is set once the cart page has been submitted */ $shipping_form .= sprintf('<input type="hidden" name="delivery_method" value="%s" />', $_SESSION["shipping_data"]["delivery_method"]); if ($options["allow_pickup"] && $_SESSION["shipping_data"]["delivery_method"] == "pickup") { $shipping_form .= sprintf('<p>%s</p><h4>%s</h4>%s<input type="submit" name="submit_post" value="%s" class="sppp-button" />', __('You are picking these items up in person', 'sppp'), __('Pickup address', 'sppp'), $options["pickup_address"], __('Have them posted instead', 'sppp')); /* clear any errors */ $_SESSION["shipping_data"]["errors"] = array(); /* order can be completed */ $order_complete = true; } else { if (count($_SESSION["shipping_data"]["address"]) && !count($_SESSION["shipping_data"]["errors"])) { /* address has been input, with no errors */ $shipping_form .= sprintf('<p>%s:</p>', __('Delivery address', 'sppp')); $address = array(); foreach (array_keys($address_fields) as $field) { if (isset($_SESSION["shipping_data"]["address"][$field]) && trim($_SESSION["shipping_data"]["address"][$field]) != "") { if ($field == "country") { $address[] = SimplePayPalPluginShipping::get_country_name($_SESSION["shipping_data"]["address"]["country"]); } else { $address[] = trim($_SESSION["shipping_data"]["address"][$field]); } } } /* add paypal address input hidden fields here */ for ($i = 1; $i <= count($address); $i++) { $masterForm .= sprintf('<input type="hidden" name="shipping_address_%d" value="%s" />', $i, $address[$i - 1]); } $shipping_form .= '<p>' . implode(",<br />", $address) . '</p>'; $pickup_button = $options["allow_pickup"] ? sprintf('<input type="submit" name="submit_pickup" value="%s" class="sppp-button sppp-change-button" />', __('Pick these items up in person', 'sppp')) : ''; $shipping_form .= sprintf('<p><input type="submit" name="submit_post" value="%s" class="sppp-button sppp-change-button" /></p>', __('Change this address', 'sppp'), $pickup_button); /* order can be completed */ $order_complete = true; } else { /* address not input, or input with errors */ $shipping_form .= sprintf('<p>%s:</p>', __('Please enter your name and delivery address', 'sppp')); foreach ($address_fields as $name => $details) { $value = isset($_SESSION["shipping_data"]["address"][$name]) ? trim($_SESSION["shipping_data"]["address"][$name]) : ''; $required = $details["required"] ? ' <span class="required">*</span>' : ''; if ($name == 'country') { $shipping_form .= sprintf('<p><label for="delivery_country">%s%s</label>%s</p>', $details["label"], $required, SimplePayPalPluginShipping::get_countries_dropdown('delivery_country', $value, array("GB", "FR"))); } else { if (!empty($details["label"])) { $shipping_form .= sprintf('<p><label for="delivery_%s">%s%s</label><input type="text" name="delivery_%s" class="pp-input" id="delivery_%s" value="%s" /></p>', $name, $details["label"], $required, $name, $name, $value); } else { $shipping_form .= sprintf('<p class="nolabel"><input type="text" name="delivery_%s" class="pp-input" id="delivery_%s" value="%s" /></p>', $name, $name, $value); } } if ($_SESSION["shipping_data"]["show_errors"] && isset($_SESSION["shipping_data"]["errors"][$name])) { $shipping_form .= sprintf('<p class="error">%s</p>', $_SESSION["shipping_data"]["errors"][$name]); } } $shipping_form .= sprintf('<p class="nolabel"><input type="submit" class="sppp-button sppp-save-button" name="submit_address" value="%s" /></p>', __('Save this address', 'sppp')); } } /* calculate shipping cost */ if ($_SESSION["shipping_data"]["delivery_method"] === "pickup") { $shipping_total = 0; } else { $shipping_method = SimplePayPalPluginAdmin::get_selected_shipping_method(); $shipping_cost = call_user_func_array($shipping_method["calculate_callback"], array($_SESSION['sppp-cart'], $options, $_SESSION["shipping_data"]["address"]["country"])); $shipping_total = $shipping_cost["total"]; } /* add shipping to basket and paypal data */ if ($shipping_total > 0) { $out .= sprintf('<tr class="subtotal"><td colspan="2">%s:</td><td colspan="2">£%.02f</td></tr>', __('Shipping', 'sppp'), $shipping_total); $masterForm .= sprintf('<input type="hidden" name="shipping_1" value="%.02f" />', $shipping_total); } else { $masterForm .= '<input type="hidden" name="shipping_1" value="0" />'; } /* get paypal button */ $formaction = $options["paypal_sandbox"] ? $options["paypal_sandbox_url"] : $options["paypal_url"]; $paypal_button = sprintf('<form action="%s" id="pp-form" method="post">', $formaction); $paypal_button .= $masterForm; $business = $options["paypal_sandbox"] ? $options["paypal_sandbox_email"] : $options["paypal_email"]; $paypal_button .= sprintf('<input type="hidden" name="business" value="%s" />', $business); $paypal_button .= sprintf('<input type="hidden" name="currency_code" value="%s" />', $options["paypal_currency"]); $paypal_button .= sprintf('<input type="hidden" name="return" value="%s" />', $options["cart_url"]); $paypal_button .= sprintf('<input type="hidden" name="notify_url" value="%s" />', $options["cart_url"]); $paypal_button .= '<input type="hidden" name="cmd" value="_cart" />'; $paypal_button .= '<input type="hidden" name="upload" value="1" />'; $paypal_button .= '<input type="submit" class="sppp-button sppp-checkout-button" name="submit" title="Make payments with PayPal - fast, free and secure!" /></form>'; /* print total */ $total = $customer_pays_vat ? $total_price_inc_vat : $total_price_ex_vat; $total += $shipping_total; $out .= sprintf(' <tr class="total"><td colspan="2">%s:</td><td colspan="2">£%.02f</td></tr>', __('Total', 'sppp'), $total); $out .= '</tbody></table>'; /* print checkout button (if complete) and shipping information */ if ($order_complete) { $out .= $paypal_button . $shipping_form . $paypal_button; } else { $out .= $shipping_form; } } else { return apply_filters('sppp_empty_basket_msg', sprintf('<p>%s.</p>', __('Your basket is empty', 'sppp'))); } return $out; }