<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
*
* @version $Id: checkout.index.php 2529 2010-09-05 15:48:16Z zanardi $
* @package VirtueMart
* @subpackage html
* @copyright Copyright (C) 2004-2010 VirtueMart Dev Team - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
mm_showMyFileName( __FILE__ );
require_once( CLASSPATH . "ps_checkout.php" );
global $mainframe, $vmLogger, $vars;
// PayPal API / Express
if( file_exists(CLASSPATH . 'payment/ps_paypal_api.php'))
{
$lang = jfactory::getLanguage();
$name= $lang->getBackwardLang();
if( file_exists(CLASSPATH ."payment/paypal_api/languages/lang.".$name.".php"))
include(CLASSPATH ."payment/paypal_api/languages/lang.".$name.".php");
else
include(CLASSPATH ."payment/paypal_api/languages/lang.english.php");
if( file_exists(CLASSPATH . "payment/ps_paypal_api.cfg.php"))
{
include_once( CLASSPATH . "payment/ps_paypal_api.cfg.php");
}
require_once( CLASSPATH . 'payment/ps_paypal_api.php');
$paypalActive = ps_paypal_api::isActive();
$ppex_checkout_details=ps_paypal_api::ppex_getCheckoutDetails();
}
else
{
$paypalActive = false;
}
$paypal_express_checkout = vmGet($_REQUEST, 'ppex',null);
$paypal_express_checkout_payment = vmGet($_REQUEST, 'payment_method_ppex', null);
$paypal_express_checkout_cancel = vmGet($_REQUEST, 'ppex_cancel',null);
if($paypal_express_checkout_cancel) {
//$GLOBALS['vmLogger']->warning( 'PayPal Zahlung abgebrochen!' );
require_once( CLASSPATH . 'payment/ps_paypal_api.php');
ps_paypal_api::destroyPaypalSession();
$payment_method_id= $_GET['payment_method_id'] = $_REQUEST['payment_method_id'] = 0;
if( !empty($_GET['ship_to_info_id']) && !empty( $_GET['shipping_rate_id'] ) ) {
$_POST['checkout_this_step'][] = 'CHECK_OUT_GET_SHIPPING_ADDR';
$_REQUEST['checkout_last_step'] = 2;
}
}
if($paypal_express_checkout) {
// Check for token and redirect to PayPal to get one, if not available yet
$_SESSION['ppex_token'] = $ppex_token=ps_paypal_api::gettoken(1);
}
else if($paypal_express_checkout_payment === "2")
{
// Check for token at payment select screen and redirect to PayPal to get one, if not available yet
$_SESSION['ppex_token'] = $ppex_token=ps_paypal_api::gettoken(2);
}
$paypal_express_checkout = vmGet($_REQUEST, 'ppex_gecd',null);
if(isset($_SESSION['ppex_userdata']) && is_array($_SESSION['ppex_userdata']) && isset($_SESSION['ppex_token']) && $paypalActive) {
if(!isset($auth['user_id']) || $auth['user_id'] <= 0)
{
ps_paypal_api::ppex_userLogin($auth);
}
ps_paypal_api::checkAddress($auth);
$ship_to_info_id = vmGet( $_REQUEST, 'ship_to_info_id');
$shipping_rate_id = urldecode(vmGet( $_REQUEST, "shipping_rate_id", null ));
$paypal_api_payment_method_id = $payment_method_id = ps_paypal_api::getPaymentMethodId();
$_REQUEST['payment_method_id'] = $payment_method_id;
$Itemid = $sess->getShopItemid();
if( $auth['user_id'] > 0 ) {
$show_basket = true;
} else {
$show_basket = false;
}
$current_stage = ps_checkout::get_current_stage();
$checkout_steps = ps_checkout::get_checkout_steps();
/*if ($shipping_rate_id && $ship_to_info_id && $payment_method_id && !isset($_GET['checkout_stage'])) {
$current_stage=count($checkout_steps);
} elseif( $ship_to_info_id && $payment_method_id && empty($shipping_rate_id) && isset( $_GET['checkout_last_step'] ) && !isset($_GET['checkout_stage'])) {
$_POST['checkout_this_step'] = $checkout_steps[$current_stage];
$current_stage++;
}*/
if(isset($_SESSION['ppex_userdata']['payer_id']))
{
ps_paypal_api::checkOutStatus($auth, $checkout_steps, $current_stage, $ship_to_info_id, $paypal_express_checkout);
}
} else {
$ship_to_info_id = vmGet( $_REQUEST, 'ship_to_info_id');
$shipping_rate_id = urldecode(vmGet( $_REQUEST, "shipping_rate_id", null ));
$payment_method_id = vmGet( $_REQUEST, 'payment_method_id');
if( file_exists(CLASSPATH . "payment/ps_paypal_api.cfg.php")) {
include_once( CLASSPATH . "payment/ps_paypal_api.cfg.php");
require_once( CLASSPATH . 'payment/ps_paypal_api.php');
$paypal_api_payment_method_id = ps_paypal_api::getPaymentMethodId('ps_paypal_api');
}
$Itemid = $sess->getShopItemid();
/* Decide, which Checkout Step is the next one
* $checkout_this_step controls the step thru the checkout process
* we have the following steps
* -CHECK_OUT_GET_SHIPPING_ADDR
* let the user choose a shipto address
* -CHECK_OUT_GET_SHIPPING_METHOD
* let the user choose a shipto metho for the ship to address
* -CHECK_OUT_GET_PAYMENT_METHOD
* let the user choose a payment method
* -CHECK_OUT_GET_FINAL_CONFIRMATION
* shows a total summary including all payments, taxes, fees etc. and let the user confirm
*/
if( $auth['user_id'] > 0 ) {
$show_basket = true;
} else {
$show_basket = false;
}
$current_stage = ps_checkout::get_current_stage();
$checkout_steps = ps_checkout::get_checkout_steps();
}
echo '<pre>'.print_r($checkout_steps[$current_stage],1).'</pre>';
if( in_array('CHECK_OUT_GET_PAYMENT_METHOD', $checkout_steps[$current_stage]) ) {
/* Input Field for the Coupon Code */
if( PSHOP_COUPONS_ENABLE=='1'
&& !@$_SESSION['coupon_redeemed']
//&& ($page == "shop.cart" )
) {
$basket_html .= $theme->fetch( 'common/couponField.tpl.php' );
}
if($paypalActive)
{
// Paypal API / Express
echo '<script type="text/javascript">window.addEvent("domready", function() {
$$(\'label\').each( function(el) { if(el.htmlFor == "'.ps_paypal_api::getPaymentMethodName().'") { el.innerHTML = "Credit Card";} });
});</script>';
}
}
if( in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]) ) {
$next_page = 'checkout.thankyou';
if( sizeof($checkout_steps[$current_stage]) > 1 ) {
include_once( PAGEPATH . 'basket.php' );
} else {
include_once( PAGEPATH . 'ro_basket.php' );
}
} else {
$next_page = 'checkout.index';
include_once( PAGEPATH . 'basket.php' );
}
// Get the zone quantity after it has been calculated in the basket
$zone_qty = vmGet( $vars, 'zone_qty');
//Check for express checkout from paypal
if(isset($_SESSION['ppex_userdata']) && is_array($_SESSION['ppex_userdata']) && isset($_SESSION['ppex_token']) && $paypalActive)
{
//If the $paypal_express_checkout is equal to 2
//Then we just came from paypal express which originated from
//The payment selection screen
if((int)$paypal_express_checkout == 2)
{
if(in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]))
{
if($perm->is_registered_customer($auth['user_id']))
{
//Create our array like the form
//Just in case so we don't mess anything up when
//doing ps_checkout->process()
$checkoutData = Array('option' => 'com_virtuemart',
'Itemid' => $Itemid,
'user_id' => (int)$auth['user_id'],
'page' => 'checkout.thankyou',
'func' => 'checkoutProcess',
'zone_qty' => $zone_qty,
'ship_to_info_id' => $ship_to_info_id,
'shipping_rate_id' => urlencode($shipping_rate_id),
'ship_method_id' => $shipping_rate_id,
'payment_method_id' => $payment_method_id,
'checkout_last_step' => '4',
'checkout_this_step' => array('CHECK_OUT_GET_FINAL_CONFIRMATION'));
//Make sure to set the request variables before creating a new ps_checkout();
//Just in case
$_REQUEST['shipping_rate_id'] = urlencode($shipping_rate_id);
$_REQUEST['ship_method_id'] = $shipping_rate_id;
$_REQUEST['user_id'] = (int)$auth['user_id'];
$_REQUEST['zone_qty'] = $zone_qty;
$_REQUEST['ship_to_info_id'] = $ship_to_info_id;
$_REQUEST['payment_method_id'] = $payment_method_id;
//Set our $_SESSION variable for DoExpressCheckout
//So we know which way we came from
$_SESSION['ppex_cart_ecm'] = '1';
$checkout = new ps_checkout();
//Try to process the order
//On Success redirect to checkout.thankyou
if($checkout->process($checkoutData))
{
vmRedirect( $sess->url( 'index.php?page=checkout.thankyou&order_id='.$checkoutData['order_id'], false, false ) );
}
}
else
{
$vmLogger->err(@$nvp_common_015);
}
}
}
}
$theme = new $GLOBALS['VM_THEMECLASS']();
$theme->set_vars( // Import these values into the template files
array( 'zone_qty' => $zone_qty,
'ship_to_info_id' => $ship_to_info_id,
'shipping_rate_id' => $shipping_rate_id,
'current_stage' => $current_stage,
'payment_method_id' => $payment_method_id,
'weight_total' => $weight_total,
'Itemid' => $Itemid
)
);
if ($cart["idx"] > 0) {
echo '<h3>'. $VM_LANG->_('PHPSHOP_CHECKOUT_TITLE') .'</h3>';
if (!defined('_MIN_POV_REACHED')) {
echo $basket_html;
?>
<div align="center">
<script type="text/javascript">alert('<?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_MIN_POV',false) ?>');</script>
<strong><?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_MIN_POV') ?></strong>
<strong><?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_MIN_POV2') . " ".$CURRENCY_DISPLAY->getFullValue($_SESSION['minimum_pov']) ?></strong>
</div><?php
return;
}
// We have something in the Card so move on
if ($perm->is_registered_customer($auth['user_id'])) { // user is logged in and a registered customer
$basket_html .= '<form action="'. $sess->url( SECUREURL."index.php?page=".$next_page."&checkout_last_step=".$current_stage) .'" method="post" name="adminForm">
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="Itemid" value="'. $Itemid .'" />
<input type="hidden" name="user_id" value="'. $auth['user_id'] .'" />
<input type="hidden" name="page" value="'. $next_page .'" />
<input type="hidden" name="func" value="checkoutProcess" />
<input type="hidden" name="zone_qty" value="'. $zone_qty .'" />
<input type="hidden" name="ship_to_info_id" value="'. $ship_to_info_id .'" />
<input type="hidden" name="shipping_rate_id" value="'. urlencode($shipping_rate_id) .'" />
<input type="hidden" name="payment_method_id" value="'. $payment_method_id .'" />
<input type="hidden" name="checkout_last_step" value="'. $current_stage .'" />';
$theme->set( 'basket_html', $basket_html );
// CHECK_OUT_GET_SHIPPING_ADDR
// Lets the user pick or add an alternative Shipping Address
if( in_array('CHECK_OUT_GET_SHIPPING_ADDR', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_SHIPPING_ADDR"></a>';
echo $theme->fetch( 'checkout/get_shipping_address.tpl.php');
$theme->set('basket_html', '');
}
// CHECK_OUT_GET_SHIPPING_METHOD
// Let the user pick a shipping method
if( in_array('CHECK_OUT_GET_SHIPPING_METHOD', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_SHIPPING_METHOD"></a>';
echo $theme->fetch( 'checkout/get_shipping_method.tpl.php');
$theme->set('basket_html', '');
}
// -CHECK_OUT_GET_PAYMENT_METHOD
// let the user choose a payment method
if( in_array('CHECK_OUT_GET_PAYMENT_METHOD', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_PAYMENT_METHOD"></a>';
if(!empty( $paypal_api_payment_method_id ) && $paypalActive)
{
echo $theme->fetch('checkout/get_payment_method_paypal_ex.tpl.php');
}
else
{
echo $theme->fetch( 'checkout/get_payment_method.tpl.php');
}
$theme->set('basket_html', '');
}
// -CHECK_OUT_GET_FINAL_CONFIRMATION
// shows a total summary including all payments, taxes, fees etc.
if( in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_FINAL_CONFIRMATION"></a>';
// Now let the user confirm
echo $theme->fetch( 'checkout/get_final_confirmation.tpl.php');
$theme->set('basket_html', '');
}
?>
<?php
foreach( $checkout_steps[$current_stage] as $this_step ) {
echo '<input type="hidden" name="checkout_this_step[]" value="'.$this_step.'" />';
}
// Set Dynamic Page Title: "Checkout: Step x of x"
$ii = 0;
for( $i = 1; $i < 5; $i++ ) {
if( isset( $checkout_steps[$i] ) ) {
$ii += 1;
if( in_array($this_step, $checkout_steps[$i] ) ) {
$mainframe->setPageTitle( sprintf( $VM_LANG->_('VM_CHECKOUT_TITLE_TAG'), $ii, count($checkout_steps) ));
break;
}
}
}
if( !in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]) ) {
?>
<div align="center">
<input type="submit" class="button" name="formSubmit" value="<?php echo $VM_LANG->_('PHPSHOP_CHECKOUT_NEXT');?> >>" />
</div>
<?php
}
// Close the Checkout Form, which was opened in the first checkout template using the variable $basket_html
echo '</form>';
if( !in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]) ) {
echo "<script type=\"text/javascript\"><!--
function submit_order( form ) { return true; }
--></script>";
}
}
else {
if (!empty($auth['user_id'])) {
// USER IS LOGGED IN, BUT NO REGISTERED CUSTOMER
// WE NEED SOME ADDITIONAL INFORMATION HERE,
// SO REDIRECT HIM TO shop/shopper_add
$vmLogger->info( $VM_LANG->_('PHPSHOP_NO_CUSTOMER',false) );
include(PAGEPATH. 'checkout_register_form.php');
}
else {
// user is not logged in
echo $theme->fetch( 'checkout/login_registration.tpl.php' );
}
}
}
else {
vmRedirect( $sess->url( 'index.php?page=shop.cart', false, false ) );
}