$shipping = str_replace(",", "", $_REQUEST['shipping']); $shipping = preg_replace('/[^\\d.]/', '', $shipping); echo COM_refresh($_PAY_CONF['site_url'] . '/confirmation.php?pay_by=check&shipping=' . $shipping . '&msg=' . $msg); } else { $msg = urlencode($LANG_PAYPAL_1['details_save_success']); echo COM_refresh($_PAY_CONF['site_url'] . '/purchase_history.php?msg=' . $msg); } exit; break; } } default: // Get my details to edit and display the form if (!COM_isAnonUser()) { $sql = "SELECT * FROM {$_TABLES['paypal_users']} WHERE user_id = {$_USER['uid']}"; $res = DB_query($sql); $A = DB_fetchArray($res); if ($A['user_id'] == '' && SEC_hasRights('paypal.admin')) { $A['user_id'] = $_REQUEST['uid']; } if ($A['user_id'] == '') { $A['user_id'] = $_USER['uid']; } $validation_url = $_PAY_CONF['site_url'] . '/details.php?mode=save'; $display .= PAYPAL_getDetailsForm($A, $validation_url, $LANG_PAYPAL_1['save_button']); } else { echo COM_refresh($_CONF['site_url']); } } $display = COM_siteHeader() . $display . COM_siteFooter(); COM_output($display);
function display_cart($jcart, $block = 0) { global $_CONF, $_PAY_CONF, $LANG_PAYPAL_1, $LANG_PAYPAL_CART, $_USER, $_TABLES, $LANG_PAYPAL_ADMIN, $_SCRIPTS; // JCART ARRAY HOLDS USER CONFIG SETTINGS extract($jcart); // ASSIGN USER CONFIG VALUES AS POST VAR LITERAL INDICES // INDICES ARE THE HTML NAME ATTRIBUTES FROM THE USERS ADD-TO-CART FORM $item_id = $_POST[$item_id]; $item_qty = $_POST[$item_qty]; $item_price = $_POST[$item_price]; //Todo if block==1 shorten name $item_name = $_POST[$item_name]; $item_weight = $_POST[$item_weight]; // ADD AN ITEM if ($_POST[$item_add]) { $item_added = $this->add_item($item_id, $item_qty, $item_price, $item_name, $item_weight); // IF NOT TRUE THE ADD ITEM FUNCTION RETURNS THE ERROR TYPE if ($item_added !== true) { $error_type = $item_added; switch ($error_type) { case 'qty': $error_message = $text['quantity_error']; break; case 'price': $error_message = $text['price_error']; break; } } } // UPDATE A SINGLE ITEM // CHECKING POST VALUE AGAINST $text ARRAY FAILS?? HAVE TO CHECK AGAINST $jcart ARRAY if ($_POST['jcart_update_item'] == $jcart['text']['update_button']) { $item_updated = $this->update_item($_POST['item_id'], $_POST['item_qty']); if ($item_updated !== true) { $error_message = $text['quantity_error']; } } // UPDATE ALL ITEMS IN THE CART if ($_POST['jcart_update_cart'] || $_POST['jcart_checkout']) { $cart_updated = $this->update_cart(); if ($cart_updated !== true) { $error_message = $text['quantity_error']; } } // REMOVE AN ITEM if ($_GET['jcart_remove'] && !$_POST[$item_add] && !$_POST['jcart_update_cart'] && !$_POST['jcart_check_out']) { $this->del_item($_GET['jcart_remove']); } // EMPTY THE CART if ($_POST['jcart_empty']) { $this->empty_cart(); } // DETERMINE WHICH TEXT TO USE FOR THE NUMBER OF ITEMS IN THE CART if ($this->itemcount > 1) { $text['items_in_cart'] = $text['multiple_items']; } if ($this->itemcount <= 1) { $text['items_in_cart'] = $text['single_item']; } // DETERMINE IF THIS IS THE CHECKOUT PAGE // WE FIRST CHECK THE REQUEST URI AGAINST THE USER CONFIG CHECKOUT (SET WHEN THE VISITOR FIRST CLICKS CHECKOUT) // WE ALSO CHECK FOR THE REQUEST VAR SENT FROM HIDDEN INPUT SENT BY AJAX REQUEST (SET WHEN VISITOR HAS JAVASCRIPT ENABLED AND UPDATES AN ITEM QTY) $is_checkout = strpos($_SERVER['REQUEST_URI'], $form_action); if ($is_checkout !== false || $_REQUEST['jcart_is_checkout'] == 'true') { $is_checkout = true; } else { $is_checkout = false; } $retval = ''; // OVERWRITE THE CONFIG FORM ACTION TO POST TO jcart-gateway.php INSTEAD OF POSTING BACK TO CHECKOUT PAGE // THIS ALSO ALLOWS US TO VALIDATE PRICES BEFORE SENDING CART CONTENTS TO PAYPAL if ($is_checkout == true) { $form_action = $_PAY_CONF['site_url'] . '/jcart/jcart-gateway.php'; } else { $form_action = $_PAY_CONF['site_url'] . '/checkout.php'; } // DEFAULT INPUT TYPE // CAN BE OVERRIDDEN IF USER SETS PATHS FOR BUTTON IMAGES $input_type = 'submit'; // IF THIS ERROR IS TRUE THE VISITOR UPDATED THE CART FROM THE CHECKOUT PAGE USING AN INVALID PRICE FORMAT // PASSED AS A SESSION VAR SINCE THE CHECKOUT PAGE USES A HEADER REDIRECT // IF PASSED VIA GET THE QUERY STRING STAYS SET EVEN AFTER SUBSEQUENT POST REQUESTS if ($_SESSION['quantity_error'] == true) { $error_message = $text['quantity_error']; unset($_SESSION['quantity_error']); } // OUTPUT THE CART if ($is_checkout == true && $block == 1) { return $LANG_PAYPAL_CART['checkout'] . '...'; } // DISPLAY THE CART HEADER $cart = COM_newTemplate($_CONF['path'] . 'plugins/paypal/templates'); if ($_REQUEST['pay_by'] == 'check' && $block == 0) { $cart->set_file(array('cart_start' => 'cart_start_check.thtml', 'cart_item' => 'cart_item_check.thtml', 'cart_empty' => 'cart_empty.thtml', 'cart_end' => 'cart_end_check.thtml')); } else { if ($block == 0) { $cart->set_file(array('cart_start' => 'cart_start.thtml', 'cart_item' => 'cart_item.thtml', 'cart_empty' => 'cart_empty.thtml', 'cart_end' => 'cart_end.thtml')); } else { $cart->set_file(array('cart_start' => 'cart_block_start.thtml', 'cart_item' => 'cart_block_item.thtml', 'cart_empty' => 'cart_empty.thtml', 'cart_end' => 'cart_block_end.thtml')); } } if ($is_checkout == true) { $steps = '<ul id="ULcheckoutProcedure"> <li id="LIactiveStep">' . $LANG_PAYPAL_1['checkout_step_1'] . '</li> <li>' . $LANG_PAYPAL_1['checkout_step_2'] . '</li> <li>' . $LANG_PAYPAL_1['checkout_step_3'] . '</li> </ul>'; $cart->set_var('steps', $steps); } else { if ($_REQUEST['pay_by'] == 'check' || PAYBYCHECK == true) { PAYBYCHECK == true; $steps = '<ul id="ULcheckoutProcedure"> <li>' . $LANG_PAYPAL_1['checkout_step_1'] . '</li> <li id="LIactiveStep">' . $LANG_PAYPAL_1['checkout_step_2'] . '</li> <li>' . $LANG_PAYPAL_1['checkout_step_3'] . '</li> </ul>'; $cart->set_var('steps', $steps); } else { $cart->set_var('steps', ''); } } if ($_REQUEST['pay_by'] == 'check' && $block == 0) { // Get details to edit and display the form on informations.php page if (!COM_isAnonUser()) { $sql = "SELECT * FROM {$_TABLES['paypal_users']} WHERE user_id = {$_USER['uid']}"; $res = DB_query($sql); $A = DB_fetchArray($res); if ($A['user_id'] == '' && SEC_hasRights('paypal.admin')) { $A['user_id'] = $_REQUEST['uid']; } if ($A['user_id'] == '') { $A['user_id'] = $_USER['uid']; } $informations = '<h2>' . $LANG_PAYPAL_1['review_details'] . '</h2>'; $informations .= '<p>' . $LANG_PAYPAL_1['confirm_order_check'] . '</p>'; $informations .= '<div style="margin:25px;">' . PAYPAL_getDetailsForm($A, $_PAY_CONF['site_url'] . '/details.php?mode=save', $LANG_PAYPAL_1['confirm_order_button'], $_GET['shipping']) . '</div>'; $cart->set_var('informations', $informations); } } // IF THERE'S AN ERROR MESSAGE WRAP IT IN SOME HTML if ($error_message) { $error_message = "<p class='jcart-error'>{$error_message}</p>"; $cart->set_var('error_message', $error_message); } else { $cart->set_var('error_message', ''); } $cart->set_var('xhtml', XHTML); $cart->set_var('form_action', $form_action); $cart->set_var('cart_title', $text['cart_title']); $cart->set_var('itemcount', $this->itemcount . " " . $text['items_in_cart']); $cart->set_var('description', $text['description']); $cart->set_var('unit_price', $text['unit_price']); $cart->set_var('quantity', $text['quantity']); $cart->set_var('item_price', $text['item_price']); $retval .= $cart->parse('', 'cart_start'); // IF ANY ITEMS IN THE CART if ($this->itemcount > 0) { define("CART_EMPTY", false); $categories = array(); // DISPLAY LINE ITEMS foreach ($this->get_contents() as $item) { // ADD THE ITEM ID AS THE INPUT ID ATTRIBUTE // THIS ALLOWS US TO ACCESS THE ITEM ID VIA JAVASCRIPT ON QTY CHANGE, AND THEREFORE UPDATE THE CORRECT ITEM // NOTE THAT THE ITEM ID IS ALSO PASSED AS A SEPARATE FIELD FOR PROCESSING VIA PHP $cart->set_var('name', $item['name']); $cart->set_var('id', $item['id']); //GET ALL PRODUCTS CATEGORIES $cat = DB_getItem($_TABLES['paypal_products'], 'cat_id', 'id=' . PAYPAL_realId($item['id'])); if ($cat != 0) { $categories[] .= $cat; } $cart->set_var('price', number_format($item['price'], $_CONF['decimal_count'], $_CONF['decimal_separator'], $_CONF['thousand_separator'])); $cart->set_var('currency_symbol', $text['currency_symbol']); $cart->set_var('qty', $item['qty']); $cart->set_var('subtotal', number_format($item['subtotal'], $_CONF['decimal_count'], $_CONF['decimal_separator'], $_CONF['thousand_separator'])); $cart->set_var('remove_png', $_PAY_CONF['site_url'] . '/images/remove.png'); $cart->set_var('remove', $LANG_PAYPAL_CART['remove']); $retval .= $cart->parse('', 'cart_item'); } } else { define("CART_EMPTY", true); $cart->set_var('empty', '<strong>' . $text['empty_message'] . '</strong>'); $retval .= $cart->parse('', 'cart_empty'); } // DISPLAY THE CART FOOTER //Subtotal $block == 0 ? $cart->set_var('subtotal', $text['subtotal'] . ' <strong>' . number_format($this->total, $_CONF['decimal_count'], $_CONF['decimal_separator'], $_CONF['thousand_separator']) . ' ' . $text['currency_symbol'] . '</strong>') : $cart->set_var('subtotal', '<strong>' . number_format($this->total, $_CONF['decimal_count'], $_CONF['decimal_separator'], $_CONF['thousand_separator']) . ' ' . $text['currency_symbol'] . '</strong>'); // IF THIS IS THE CHECKOUT HIDE THE CART CHECKOUT BUTTON if ($is_checkout !== true && $_REQUEST['pay_by'] != 'check') { if ($button['checkout']) { $input_type = 'image'; $src = ' src="' . $button['checkout'] . '" alt="' . $text['checkout_button'] . '" title="" '; } $cart->set_var('checkout', '<input type="' . $input_type . '" ' . $src . 'id="jcart-checkout" name="jcart_checkout" class="jcart-button" value="' . $text['checkout_button'] . '" />'); } else { $cart->set_var('checkout', ''); } $retval .= $cart->parse('', 'cart_end'); //Update and empty button if ($block == 0) { $retval .= "\t\t\t<div class='jcart-hide'>\n"; if ($button['update']) { $input_type = 'image'; $src = ' src="' . $button['update'] . '" alt="' . $text['update_button'] . '" title="" '; } $retval .= "\t\t\t\t<input type='" . $input_type . "' " . $src . "name='jcart_update_cart' value='" . $text['update_button'] . "' class='jcart-button' />\n"; if ($button['empty']) { $input_type = 'image'; $src = ' src="' . $button['empty'] . '" alt="' . $text['empty_button'] . '" title="" '; } $retval .= "\t\t\t\t<input type='" . $input_type . "' " . $src . "name='jcart_empty' value='" . $text['empty_button'] . "' class='jcart-button' />\n"; $retval .= "\t\t\t</div>\n"; } $retval .= "\t\t\t\t\t</td>\n"; $retval .= "\t\t\t\t</tr>\n"; $retval .= "\t\t\t</table>\n\n"; // IF THIS IS THE CHECKOUT DISPLAY THE PAYPAL CHECKOUT BUTTON AND SHIPPING RATE if ($is_checkout == true && $block == 0 && $this->itemcount > 0 || $_REQUEST['pay_by'] == 'check' && $block == 0) { // HIDDEN INPUT ALLOWS US TO DETERMINE IF WE'RE ON THE CHECKOUT PAGE // WE NORMALLY CHECK AGAINST REQUEST URI BUT AJAX UPDATE SETS VALUE TO jcart-relay.php $retval .= "\t\t\t<input type='hidden' id='jcart-is-checkout' name='jcart_is_checkout' value='true' />\n"; $weight = $this->totalweight; $weight = str_replace(",", ".", $weight); $weight = preg_replace('/[^\\d.]/', '', $weight); //WEIGHT $retval .= "\t\t\t<input type='hidden' id='weight' name='weight' value='{$weight}' />\n"; //SHIPPING RATE $shipping = COM_newTemplate($_CONF['path'] . 'plugins/paypal/templates'); $shipping->set_file(array('cart_shipping' => 'cart_shipping.thtml')); $shipping->set_var('choose_shipping', $LANG_PAYPAL_CART['choose_shipping']); if ($weight > 0) { //SHIPPER SERVICE $sql = "SELECT\n\t\t\t\t\t\t*\n\t\t\t\t\tFROM {$_TABLES['paypal_shipping_cost']} AS sc\n\t\t\t\t\tLEFT JOIN {$_TABLES['paypal_shipper_service']} AS ss\n\t\t\t\t\tON sc.shipping_shipper_id = ss.shipper_service_id\n\t\t\t\t\tLEFT JOIN {$_TABLES['paypal_shipping_to']} AS st\n\t\t\t\t\tON sc.shipping_destination_id = st.shipping_to_id\n\t\t\t\t\tWHERE '{$weight}' > sc.shipping_min AND '{$weight}' < sc.shipping_max\n\t\t\t\t\tORDER by st.shipping_to_order, sc.shipping_amt ASC\n\t\t\t\t\t"; $res = DB_query($sql); if (DB_numRows($res) > 0) { $i = 0; while ($A = DB_fetchArray($res)) { if ($_GET['shipping'] != '' && $_GET['shipping'] == $A['shipping_amt']) { $checked = ' checked'; $skip = 0; } else { if ($_GET['shipping'] != '') { $checked = ''; $skip = 1; } else { if ($i == 0) { $checked = ' checked'; } else { $checked = ''; } } } if ((count($categories) == 1 && in_array($A['shipper_service_exclude_cat'], $categories) || $A['shipper_service_exclude_cat'] == 0 || count($categories) == 0) && $skip == 0) { $shippers_radio .= '<p><input type="radio" name="shipping" value="' . $A['shipping_amt'] . '"' . $checked . ' /> ' . $A['shipping_to_name'] . ' | ' . $A['shipper_service_name'] . ' - ' . $A['shipper_service_service'] . '<span style="text-align:right; font-weight:bold; display:block; float:right;">+ ' . $A['shipping_amt'] . ' ' . $_PAY_CONF['currency'] . '</span></p>' . LB; $i++; } } } else { $shippers_radio = '<p><input type="radio" name="shipping" value="0.00" checked /> ' . $LANG_PAYPAL_CART['free_shipping'] . '<span style="text-align:right; font-weight:bold; display:block; float:right;">+ 0.00 ' . $_PAY_CONF['currency'] . '</span></p>'; } } else { $shippers_radio = '<p><input type="radio" name="shipping" value="0.00" checked /> ' . $LANG_PAYPAL_CART['free_shipping'] . '<span style="text-align:right; font-weight:bold; display:block; float:right;">+ 0.00 ' . $_PAY_CONF['currency'] . '</span></p>'; } $shipping->set_var('shipping_radio_buttons', $shippers_radio); $retval .= $shipping->parse('', 'cart_shipping'); // SEND THE URL OF THE CHECKOUT PAGE TO jcart-gateway.php // WHEN JAVASCRIPT IS DISABLED WE USE A HEADER REDIRECT AFTER THE UPDATE OR EMPTY BUTTONS ARE CLICKED $protocol = 'http://'; if (!empty($_SERVER['HTTPS'])) { $protocol = 'https://'; } $retval .= "\t\t\t<input type='hidden' id='jcart-checkout-page' name='jcart_checkout_page' value='" . $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . "' />\n"; // PAYPAL CHECKOUT BUTTON if ($button['paypal_checkout']) { $input_type = 'image'; $src = ' src="' . $button['paypal_checkout'] . '" alt="' . $text['checkout_paypal_button'] . '" title="" '; } if ($_REQUEST['pay_by'] != 'check') { $retval .= '<h2 align="center">' . $LANG_PAYPAL_1['payment_method'] . '</h2>'; if ($_PAY_CONF['enable_pay_by_paypal']) { $retval .= "\t\t\t<p><input type='" . $input_type . "' " . $src . "id='jcart-paypal-checkout' name='jcart_paypal_checkout' value='" . $text['checkout_paypal_button'] . "'" . $disable_paypal_checkout . " /></p>\n"; } if ($is_checkout == true && $block == 0 && $this->itemcount > 0 && $_PAY_CONF['enable_pay_by_ckeck'] == 1) { if (!COM_isAnonUser()) { $js = 'function payby ( selectedtype )'; $js .= '{'; $js .= ' document.jcart.pay_by.value = selectedtype ;'; $js .= ' document.jcart.submit() ;'; $js .= '}'; $_SCRIPTS->setJavaScript($js, true); $retval .= '<input type="hidden" name="pay_by" />'; $retval .= '<p> </p><p align="center"><a class="jcart_footer" href="javascript:payby(\'check\')">' . $LANG_PAYPAL_CART['payment_check'] . '</a></p><p> </p>'; } } } } $retval .= "\t</form>\n"; // IF UPDATING AN ITEM, FOCUS ON ITS QTY INPUT AFTER THE CART IS LOADED (DOESN'T SEEM TO WORK IN IE7) if ($_POST['jcart_update_item']) { $retval .= "\t" . '<script type="text/javascript">jQuery(function(){jQuery("#jcart-item-id-' . $_POST['item_id'] . '").focus()});</script>' . "\n"; } $retval .= "\t<div class=\"jcart_footer\">\n"; //CONTINUE SHOPPING if ($is_checkout == true && $block == 0) { $retval .= '<hr style="margin-top:20px;"><p style="margin-top:10px;"><< <a class="jcart_footer" href="' . $_PAY_CONF['site_url'] . '/index.php">' . $LANG_PAYPAL_CART['continue_shopping'] . '</a></p>'; } $retval .= "\t</div></div>\n"; return $retval; }