Spade
Mini Shell
| Directory:~$ /proc/self/root/home/lmsyaran/public_html/j3/components/com_phocacart/controllers/ |
| [Home] [System Details] [Kill Me] |
<?php
/* @package Joomla
* @copyright Copyright (C) Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* @extension Phoca Extension
* @copyright Copyright (C) Jan Pavelka www.phoca.cz
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
defined('_JEXEC') or die();
class PhocaCartControllerCheckout extends JControllerForm
{
/*
* Add product to cart
*/
public function add() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['id'] =
$this->input->get('id', 0, 'int');
$item['catid'] =
$this->input->get('catid', 0, 'int');
$item['quantity'] =
$this->input->get('quantity', 0, 'int');
$item['return'] =
$this->input->get('return', '',
'string');
$item['attribute'] =
$this->input->get('attribute', array(), 'array');
if ((int)$item['id'] > 0) {
$itemP =
PhocacartProduct::getProduct((int)$item['id'],
$item['catid']);
if (!empty($itemP)) {
// Price (don't display add to cart when price is
zero)
$price = new PhocacartPrice();
$priceP = $price->getPriceItems($itemP->price,
$itemP->taxid, $itemP->taxrate, $itemP->taxcalculationtype,
$itemP->taxtitle, 0, '', 1, 1, $itemP->group_price);
$aA =
PhocacartAttribute::sanitizeAttributeArray($item['attribute']);
$price->getPriceItemsChangedByAttributes($priceP, $aA,
$price, $itemP, 1);
$price->correctMinusPrice($priceP);
$priceA = isset($priceP['brutto']) ?
$priceP['brutto'] : 0;
// Stock (don't display add to cart when stock is
zero)
$stockStatus = array();
$stock =
PhocacartStock::getStockItemsChangedByAttributes($stockStatus, $aA, $itemP,
1);
$rights = new
PhocacartAccessRights();
$this->t['can_display_addtocart'] =
$rights->canDisplayAddtocartAdvanced($itemP);
$this->t['can_display_addtocart_price'] =
$rights->canDisplayAddtocartPrice($itemP, $priceA);
$this->t['can_display_addtocart_stock'] =
$rights->canDisplayAddtocartStock($itemP, $stock);
if (!$this->t['can_display_addtocart']) {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NOT_ALLOWED_TO_ADD_PRODUCTS_TO_SHOPPING_CART'),
'error');
$app->redirect(base64_decode($item['return']));
}
if (!$this->t['can_display_addtocart_price'])
{
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NOT_ALLOWED_TO_ADD_PRODUCTS_TO_SHOPPING_CART'),
'error');
$app->enqueueMessage(JText::_('COM_PHOCACART_PRICE_IS_ZERO'),
'error');
$app->redirect(base64_decode($item['return']));
}
if (!$this->t['can_display_addtocart_stock'])
{
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NOT_ALLOWED_TO_ADD_PRODUCTS_TO_SHOPPING_CART'),
'error');
$app->enqueueMessage(JText::_('COM_PHOCACART_STOCK_IS_EMPTY'),
'error');
$app->redirect(base64_decode($item['return']));
}
$cart = new PhocacartCart();
$added = $cart->addItems((int)$item['id'],
(int)$item['catid'], (int)$item['quantity'],
$item['attribute']);
if ($added) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_ADDED_TO_SHOPPING_CART'),
'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_ADDED_TO_SHOPPING_CART'),
'error');
}
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_ADDED_TO_SHOPPING_CART'),
'error');
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_FOUND'),
'error');
}
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_ADDED_TO_SHOPPING_CART'),
'error');
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_SELECTED'),
'error');
}
//$app->redirect(JRoute::_('index.php?option=com_phocacart&view=checkout'));
$app->redirect(base64_decode($item['return']));
}
/*
* Change currency
*/
public function currency() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['id'] = $this->input->get('id',
0, 'int');
$item['return'] =
$this->input->get('return', '',
'string');
//$currency = new PhocacartCurrency();
//$currency->setCurrentCurrency((int)$item['id']);
PhocacartCurrency::setCurrentCurrency((int)$item['id']);
$app->redirect(base64_decode($item['return']));
}
/*
* Save billing and shipping address
*/
public function saveaddress() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['jform'] =
$this->input->get('jform', array(), 'array');
$item['phcheckoutbsas'] =
$this->input->get('phcheckoutbsas', false,
'string');
$paramsC =
PhocacartUtils::getComponentParameters();
$delivery_billing_same_enabled =
$paramsC->get('delivery_billing_same_enabled', 0);
if ((int)$delivery_billing_same_enabled == -1) {
// if some shipping rule is based on shipping address and
"delivery_billing_same_enabled" parameter is completery removed
// the check all the shipping rules completely
$item['phcheckoutbsas'] = false;
}
$guest = PhocacartUserGuestuser::getGuestUser();
$error = 0;
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
if (!empty($item['jform'])) {
// Form Data
$billing = array();
$shipping = array();
$shippingPhs = array();// shipping including postfix
$bas =
PhocacartUser::convertAddressTwo($item['jform']);
$billing = $bas[0];
$shipping = $bas[1];
$shippingPhs = $bas[2];
// Form Items
$fI = new PhocacartFormItems();
$items = $fI->getFormItems(1, 1, 0);
$model = $this->getModel('checkout');
$form = $model->getForm();
if (empty($form)) {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NO_FORM_LOADED')
. $msgSuffix, 'error');
$app->redirect(base64_decode($item['return']));
return false;
}
// Which filds will be validated or required
// Reqiuired and Validate is handled differently because if
shipping address is d
if (!empty($form->getFieldset('user'))) {
foreach ($form->getFieldset('user') as $field)
{
$name = $field->fieldname;
if ($field->fieldname == 'email' ||
$field->fieldname == 'email_phs') {
// This is not a registration: Checkout or Account
(first form without option to change email)
// Email is not stored by registered users
// Email by guests can be the same like stored in
database (e.g. guest orders without login)
$form->setFieldAttribute($field->fieldname,
'unique', 'false');
}
if (isset($billing[$name])) {
// such field exists in billing, require it if set
in rules, validate
} else if (isset($shippingPhs[$name])) {
// such field exists in shipping, require it if set
in rules, validate
// Don't check the shipping as it is not
required
if ($item['phcheckoutbsas']) {
// CHECKBOX IS ON
$billing['ba_sa'] = 1;
$shipping['ba_sa'] = 1;
$form->setFieldAttribute($field->fieldname, 'required',
'false');
$form->setFieldAttribute($field->fieldname, 'validate',
'');
} else {
// CHECKBOX IS OFF
$billing['ba_sa'] = 0;
$shipping['ba_sa'] = 0;
}
} else {
// such field does not exist, don't require
it, don't validate
$form->setFieldAttribute($field->fieldname,
'required', 'false');
$form->setFieldAttribute($field->fieldname,
'validate', '');
}
}
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NO_FORM_LOADED')
. $msgSuffix, 'error');
$app->redirect(base64_decode($item['return']));
return false;
}
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_NO_DATA_STORED')
. $msgSuffix, 'error');// Not used:
COM_PHOCACART_ERROR_NO_DATA_STORED
$app->redirect(base64_decode($item['return']));
return false;
// as in fact this can be possible
}
// that admin does not require any data
$data = $item['jform'];
$data = $model->validate($form, $data);
if ($data === false) {
$errors = $model->getErrors();
for ($i = 0, $n = count($errors); $i < $n && $i <
20; $i++) {
if ($errors[$i] instanceof Exception) {
$app->enqueueMessage($errors[$i]->getMessage(),
'warning');
} else {
$app->enqueueMessage($errors[$i],
'warning');
}
}
$this->setRedirect(base64_decode($item['return']));
return false;
}
if ($guest) {
if ($item['phcheckoutbsas']) {
$item['jform']['ba_sa'] = 1;
foreach ($item['jform'] as $k => $v) {
$pos = strpos($k, '_phs');
if ($pos === false) {
} else {
unset($item['jform'][$k]);
}
}
}
if (!$model->saveAddressGuest($item['jform'])) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
$error = 1;
}
} else {
if (!empty($billing)) {
if (!$model->saveAddress($billing)) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
$error = 1;
} else {
//$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
//$app->enqueueMessage($msg, 'message');
// Waiting for shipping
}
//$app->redirect(base64_decode($item['return']));
}
// Don't store shipping address when delivery and billing
address is the same
if (!empty($shipping) &&
!$item['phcheckoutbsas']) {
if (!$model->saveAddress($shipping, 1)) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
$error = 1;
} else {
//$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
//$app->enqueueMessage($msg, 'message');
// Waiting for shipping
}
//$app->redirect(base64_decode($item['return']));
}
}
// Remove shipping because shipping methods can change while
chaning address
$cart = new PhocacartCartRendercheckout();
$cart->setType(array(0, 1));
$cart->setFullItems();
$cart->updateShipping();// will be decided if shipping or
payment will be removed
$cart->updatePayment();
$msg = JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
if ($error != 1) {
$app->enqueueMessage($msg, 'message');
}
$app->redirect(base64_decode($item['return']));
}
/*
* Save shipping method
*/
public function saveshipping() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['phshippingopt'] =
$this->input->get('phshippingopt', array(),
'array');
$guest = PhocacartUserGuestuser::getGuestUser();
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
$checkPayment = 0;
if (!empty($item['phshippingopt']) &&
isset($item['phshippingopt'][0]) &&
(int)$item['phshippingopt'][0] > 0) {
$model = $this->getModel('checkout');
if ($guest) {
if
(!$model->saveShippingGuest((int)$item['phshippingopt'][0])) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
$checkPayment = 1;
}
} else {
if
(!$model->saveShipping((int)$item['phshippingopt'][0])) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
$checkPayment = 1;
}
}
} else {
$msg =
JText::_('COM_PHOCACART_NO_SHIPPING_METHOD_SELECTED');
$app->enqueueMessage($msg . $msgSuffix, 'error');
}
// CHECK PAYMENT
if ($checkPayment == 1) {
//PhocacartPayment::removePayment($guest, 0);// Don't
remove coupon by guests
$cart = new PhocacartCartRendercheckout();
$cart->setInstance(2);//checkout
$cart->setType(array(0, 1));
$cart->setFullItems();
$cart->updatePayment((int)$item['phshippingopt'][0]);// check
payment in cart if it is valid
}
$app->redirect(base64_decode($item['return']));
}
/*
* Save payment method and coupons
*/
public function savepayment() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['phpaymentopt'] =
$this->input->get('phpaymentopt', array(),
'array');
$item['phcoupon'] =
$this->input->get('phcoupon', -1, 'string');// -1
... no form data, '' ... form data yes but empty (e.g. when
removing coupon)
$item['phreward'] =
$this->input->get('phreward', -1, 'int'); // -1
... no form data, 0 ... form data yes but it is set to not use points (0)
$guest = PhocacartUserGuestuser::getGuestUser();
$user = PhocacartUser::getUser();
$params = $app->getParams();
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
$guest_checkout = $params->get('guest_checkout',
0);
$enable_coupons = $params->get('enable_coupons',
2);
// Coupon
// 1) we save payment without coupon form --> phcoupon = -1
==> $couponId = -1 (in model the coupon will be ignored when saving to
not change current value
// 2) we save payment with coupon form and ask the coupon class for
$couponId
// 2a) $couponId == -2 ... empty string was set which means to
remove coupon ==> $couponId = 0
// 2b) $couponId == 0 ... coupon is not valid ==> $couponId = 0
// 2c) $couponId > 0 ... coupon is valid ==> $couponId > 0
//
// What is the difference between 2a) and 2b) - in database there
is no difference but we need to differentiate messages for the customers
(coupon empty vs. coupon not valid)
// IMPORTANT:
// $item['phcoupon'] = -1 ... coupon is not included in
sent payment form
// $couponId = -1 ... coupon will be ignored in model when saving
to database because to not change the current value
// $coupoiId = -2 ... coupon was included in sent payment form but
it was empty (empty means that user just want to remove it), we need -2 for
message only, in database we set it to 0
if (!empty($item['phpaymentopt']) &&
isset($item['phpaymentopt'][0]) &&
(int)$item['phpaymentopt'][0] > 0) {
// Coupon
if ($item['phcoupon'] === -1) {
$couponId = -1;// coupon data was not sent in the form,
don't touch its data in db
} else {
$msgExists = 0;
$couponId =
$this->getCouponIdByCouponCode($item['phcoupon']);
// Coupons disabled
if ($enable_coupons == 0 &&
$item['phcoupon'] != '' &&
$item['phcoupon'] !== -1) {
$app->enqueueMessage(JText::_('COM_PHOCACART_APPLYING_COUPONS_IS_DISABLED')
. $msgSuffix, 'error');
$couponId = 0;// Remove coupon
$msgExists = 1;//
}
// Cupon only allowed for logged in users or guest checkout
// Guest Checkout is still not enabled so we have message
for a) not logged in users or b) not started guest checkout users
if ($enable_coupons == 2) {
if (!$guest) {
if ((int)$user->id < 1) {
if ($guest_checkout == 1) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PLEASE_LOG_IN_OR_ENABLE_GUEST_CHECKOUT_TO_APPLY_COUPON_FIRST')
. $msgSuffix, 'error');
$msgExists = 1;
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PLEASE_LOG_IN_TO_APPLY_COUPON_FIRST')
. $msgSuffix, 'error');
$msgExists = 1;
}
$couponId = 0;
}
}
}
if ($couponId === -2) {
// Coupon code is empty which means we remove the
coupon code
$msg =
JText::_('COM_PHOCACART_COUPON_NOT_SET');
$app->enqueueMessage($msg, 'message');
$couponId = 0;// Remove coupon
} else if (!$couponId) {
// Coupon code just not valid
if ($msgExists == 1) {
// error message set so don't add another
message
} else {
$msg =
JText::_('COM_PHOCACART_COUPON_INVALID_EXPIRED_REACHED_USAGE_LIMIT');
$app->enqueueMessage($msg . $msgSuffix,
'error');
}
$couponId = 0;// Possible feature request - couponId
can be set to -1 to be ignored when saving. E.g. not valied coupon will not
remove previously added valid coupon
} else {
// Coupon code successfuly tested
$msg =
JText::_('COM_PHOCACART_COUPON_ADDED');
$app->enqueueMessage($msg, 'message');
}
}
// Reward Points
if ($item['phreward'] === -1) {
$rewards['used'] = -1;// reward points not sent
in the form, don't touch its data in db
} else {
$rewards =
$this->getRewardPointsByRewardPointsCode($item['phreward']);
if ($rewards['used'] === false) {
$msg =
JText::_('COM_PHOCACART_REWARD_POINTS_NOT_ADDED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_REWARD_POINTS_ADDED');
$app->enqueueMessage($msg, 'message');
}
}
$model = $this->getModel('checkout');
if ($guest) {
// 1) GUEST
// Guest enabled
if
(!$model->savePaymentAndCouponGuest((int)$item['phpaymentopt'][0],
$couponId)) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
} else if ((int)$user->id < 1) {
// 2) PRE-GUEST/PRE-LOGIN - NOT LOGGED IN OR STILL NOT
ENABLED GUEST CHECKOUT
// Guest not enabled yet MOVECOUPON
if
(!$model->savePaymentAndCouponGuest((int)$item['phpaymentopt'][0],
$couponId)) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
} else {
// 3) LOGGED IN USER
if
(!$model->savePaymentAndCouponAndReward((int)$item['phpaymentopt'][0],
$couponId, $rewards['used'])) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
}
} else {
$msg =
JText::_('COM_PHOCACART_NO_PAYMENT_METHOD_SELECTED');
$app->enqueueMessage($msg . $msgSuffix, 'error');
}
$app->redirect(base64_decode($item['return']));
}
/*
* Save coupon only
*/
public function savecoupon() {
/* There are following situations:
a) user is not logged in and will log in - regarding coupon user is
taken as guest checkout (internally in session - so even guest checkout is
disabled)
b) user is not logged in and will enable guest checkout - regarding
coupon user is taken as guestcheckou (internally in session - so even guest
checkout is disabled)
c) user is logged in
d) user enabled guest checkout
*/
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['phcoupon'] =
$this->input->get('phcoupon', '',
'string');
$guest = PhocacartUserGuestuser::getGuestUser();
$user = PhocacartUser::getUser();
$params = $app->getParams();
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
$guest_checkout = $params->get('guest_checkout', 0);
$enable_coupons = $params->get('enable_coupons', 2);
// Coupons disabled
if ($enable_coupons == 0) {
$app->enqueueMessage(JText::_('COM_PHOCACART_APPLYING_COUPONS_IS_DISABLED'),
'error');
$app->redirect(base64_decode($item['return']));
}
// Cupon only allowed for logged in users or guest checkout
// Guest Checkout is still not enabled so we have message for a)
not logged in users or b) not started guest checkout users
if ($enable_coupons == 2) {
if (!$guest) {
if ((int)$user->id < 1) {
if ($guest_checkout == 1) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PLEASE_LOG_IN_OR_ENABLE_GUEST_CHECKOUT_TO_APPLY_COUPON_FIRST'),
'error');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PLEASE_LOG_IN_TO_APPLY_COUPON_FIRST'),
'error');
}
$app->redirect(base64_decode($item['return']));
}
}
}
$couponId =
$this->getCouponIdByCouponCode($item['phcoupon']);
$msgError = 0;
if ($couponId === -2) {
// Coupon code is empty which means we remove the coupon code
$couponMessage =
JText::_('COM_PHOCACART_COUPON_NOT_SET');
$couponId = 0;
} else if (!$couponId) {
// Coupon code just not valid
$couponMessage =
JText::_('COM_PHOCACART_COUPON_INVALID_EXPIRED_REACHED_USAGE_LIMIT');
$couponId = 0;
$msgError = 1;
} else {
// Coupon code successfuly tested
$couponMessage =
JText::_('COM_PHOCACART_COUPON_ADDED');
}
$model = $this->getModel('checkout');
if ($guest) {
// 1) GUEST
// Guest enabled
if (!$model->saveCouponGuest($couponId)) {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
} else if ((int)$user->id < 1) {
// 2) PRE-GUEST/PRE-LOGIN - NOT LOGGED IN OR STILL NOT ENABLED
GUEST CHECKOUT
// Guest not enabled yet MOVECOUPON
if (!$model->saveCouponGuest($couponId)) {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
if ($msgError == 1) {
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$app->enqueueMessage($msg, 'message');
}
}
} else {
// 3) LOGGED IN USER
if (!$model->saveCoupon($couponId)) {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg = $couponMessage != '' ? $couponMessage :
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
if ($msgError == 1) {
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$app->enqueueMessage($msg, 'message');
}
}
}
$app->redirect(base64_decode($item['return']));
}
/*
* return:
* couponId = -2 (couponId = '') ... coupon code is empty,
e.g. when removing it (we use not dynamic variable)
* couponId = 0 ... coupon code is not valid
* couponId > 0 ... coupon code is valid
*/
public function getCouponIdByCouponCode($code) {
$app = JFactory::getApplication();
$params = $app->getParams();
$enable_coupons = $params->get('enable_coupons', 2);
$couponId = -2;
$couponTrue = false;
if (isset($code) && $code != '' &&
$enable_coupons > 0) {
$coupon = new PhocacartCoupon();
$coupon->setType(array(0, 1));
$coupon->setCoupon(0, $code);
//$couponTrue = $coupon->checkCoupon(1);// Basic Check -
Coupon True does not mean it is valid - only basic check done, whole check
happens in order
//$couponTrue = $coupon->checkCoupon();// Complete Check -
mostly coupon is added at the end so do complete check - can be changed to
basic - no items, no categories can be checked
$cart = new PhocacartCartRendercheckout();
$cart->setInstance(2);//checkout
$cart->setType(array(0, 1));
$cart->setFullItems();
$fullItems = $cart->getFullItems();
$total = $cart->getTotal();
//$couponTrue = $cart->getCouponValid();// cart itself
cannot say us if the coupon is valid, because this coupon was still not
added to the cart
if (!empty($fullItems[4]) && !empty($total[4])) {
foreach ($fullItems[4] as $k => $v) {
$validCoupon = $coupon->checkCoupon(0,
$v['id'], $v['catid'], $total[4]['quantity'],
$total[4]['netto']);
// !!! VALID COUPON
// In case the coupon is valid at least for one product
or one category it is then valid
// and will be divided into valid products/categories
// As global we mark it as valid - so change the valid
coupon variable only in case it is valid
if ($validCoupon == 1) {
$couponTrue = $validCoupon;
break;
}
}
}
$couponId = 0;
if ($couponTrue) {
$couponData = $coupon->getCoupon();
if (isset($couponData['id']) &&
$couponData['id'] > 0) {
$couponId = $couponData['id'];
}
}
}
return $couponId;
}
public function saverewardpoints() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['phreward'] =
$this->input->get('phreward', '',
'int');
$guest = PhocacartUserGuestuser::getGuestUser();
//$user = PhocacartUser::getUser();
//$params = $app->getParams();
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
// Reward Points
$rewards =
$this->getRewardPointsByRewardPointsCode($item['phreward']);
if ($rewards['used'] === false) {
$rewardMessage =
JText::_('COM_PHOCACART_REWARD_POINTS_NOT_ADDED');
} else {
if ($rewards['used'] === 0) {
$rewardMessage =
JText::_('COM_PHOCACART_REWARD_POINTS_REMOVED');
} else {
$rewardMessage =
JText::_('COM_PHOCACART_REWARD_POINTS_ADDED');
}
}
$model = $this->getModel('checkout');
if ($guest) {
} else {
if (!$model->saveRewardPoints($rewards['used'])) {
$msg = $rewardMessage != '' ? $rewardMessage :
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg . $msgSuffix,
'error');
} else {
$msg = $rewardMessage != '' ? $rewardMessage :
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
}
$app->redirect(base64_decode($item['return']));
}
public function getRewardPointsByRewardPointsCode($points) {
$app = JFactory::getApplication();
$params = $app->getParams();
$enable_rewards = $params->get('enable_rewards', 1);
$rewards = array();
$rewards['used'] = 0;
if (isset($points) && $points != '' &&
$enable_rewards) {
$reward = new PhocacartReward();
$rewards['used'] =
$reward->checkReward((int)$points, 1);
}
return $rewards;
}
/*
* Update or delete from cart
*/
public function update() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['id'] =
$this->input->get('id', 0, 'int');
$item['catid'] =
$this->input->get('catid', 0, 'int');
$item['idkey'] =
$this->input->get('idkey', '',
'string');
$item['quantity'] =
$this->input->get('quantity', 0, 'int');
$item['return'] =
$this->input->get('return', '',
'string');
$item['action'] =
$this->input->get('action', '',
'string');
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
$rights = new PhocacartAccessRights();
$itemProduct =
PhocacartProduct::getProduct($item['id'],
$item['catid']);
$this->t['can_display_addtocart'] =
$rights->canDisplayAddtocartAdvanced($itemProduct);
if (!$this->t['can_display_addtocart']) {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_NOT_ALLOWED_TO_ADD_PRODUCTS_TO_SHOPPING_CART'),
'error');
$app->redirect(base64_decode($item['return']));
}
if ((int)$item['idkey'] != '' &&
$item['action'] != '') {
$cart = new PhocacartCart();
if ($item['action'] == 'delete') {
$updated =
$cart->updateItemsFromCheckout($item['idkey'], 0);
if ($updated) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_REMOVED_FROM_SHOPPING_CART')
. $msgSuffix, 'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_PRODUCT_NOT_REMOVED_FROM_SHOPPING_CART')
. $msgSuffix, 'error');
}
} else {// update
$updated =
$cart->updateItemsFromCheckout($item['idkey'],
(int)$item['quantity']);
if ($updated) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_QUANTITY_UPDATED')
. $msgSuffix, 'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_PRODUCT_QUANTITY_NOT_UPDATED')
. $msgSuffix, 'error');
}
}
}
//$app->redirect(JRoute::_('index.php?option=com_phocacart&view=checkout'));
$app->redirect(base64_decode($item['return']));
}
/*
public function saveshipping() {
JSession::checkToken() or jexit( 'Invalid Token' );
$app = JFactory::getApplication();
$item = array();
$item['return'] = $this->input->get(
'return', '', 'string' );
$item['phshippingopt'] = $this->input->get(
'phshippingopt', array(), 'array' );
if(!empty($item['phshippingopt']) &&
isset($item['phshippingopt'][0]) &&
(int)$item['phshippingopt'][0] > 0) {
$model = $this->getModel('checkout');
if(!$model->saveShipping((int)$item['phshippingopt'][0])) {
$msg =
JText::_('COM_PHOCACART_ERROR_DATA_NOT_STORED');
$app->enqueueMessage($msg, 'error');
} else {
$msg =
JText::_('COM_PHOCACART_SUCCESS_DATA_STORED');
$app->enqueueMessage($msg, 'message');
}
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_NO_SHIPPING_METHOD_SELECTED'),
'error');
}
$app->redirect(base64_decode($item['return']));
}
*/
/*
* Make an order
*/
public function order() {
JSession::checkToken() or jexit('Invalid Token');
$pC =
PhocacartUtils::getComponentParameters();
$display_checkout_privacy_checkbox =
$pC->get('display_checkout_privacy_checkbox', 0);
$display_checkout_toc_checkbox =
$pC->get('display_checkout_toc_checkbox', 2);
$app = JFactory::getApplication();
$item = array();
$item['return'] =
$this->input->get('return', '',
'string');
$item['phcheckouttac'] =
$this->input->get('phcheckouttac', false,
'string');
$item['privacy'] =
$this->input->get('privacy', false, 'string');
$item['newsletter'] =
$this->input->get('newsletter', false, 'string');
$item['phcomment'] =
$this->input->get('phcomment', '',
'string');
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
$item['privacy'] = $item['privacy'] ? 1 :
0;
$item['phcheckouttac'] = $item['phcheckouttac']
? 1 : 0;
$item['newsletter'] = $item['newsletter'] ?
1 : 0;
if ($display_checkout_privacy_checkbox == 2 &&
$item['privacy'] == 0) {
$msg =
JText::_('COM_PHOCACART_ERROR_YOU_NEED_TO_AGREE_TO_PRIVACY_TERMS_AND_CONDITIONS');
$app->enqueueMessage($msg . $msgSuffix, 'error');
$app->redirect(base64_decode($item['return']));
return false;
}
if ($display_checkout_toc_checkbox == 2 &&
$item['phcheckouttac'] == 0) {
$msg =
JText::_('COM_PHOCACART_ERROR_YOU_NEED_TO_AGREE_TO_TERMS_AND_CONDITIONS');
$app->enqueueMessage($msg . $msgSuffix, 'error');
$app->redirect(base64_decode($item['return']));
return false;
}
$order = new PhocacartOrder();
$orderMade = $order->saveOrderMain($item);
if (!$orderMade) {
$msg = '';
if (!PhocacartUtils::issetMessage()) {
$msg =
JText::_('COM_PHOCACART_ORDER_ERROR_PROCESSING');
}
$app->enqueueMessage($msg . $msgSuffix, 'error');
$app->redirect(base64_decode($item['return']));
return true;
} else {
// Lets decide Payment plugin if the cart will be emptied or
not
$cart = new PhocacartCart();
$paymentMethod = $cart->getPaymentMethod();
$pluginData = array();
$pluginData['emptycart'] = true;
if (isset($paymentMethod['id']) &&
(int)$paymentMethod['id'] > 0) {
$payment = new PhocacartPayment();
$paymentO =
$payment->getPaymentMethod((int)$paymentMethod['id']);
if (isset($paymentO->method)) {
JPluginHelper::importPlugin('pcp',
htmlspecialchars(strip_tags($paymentO->method)));
$eventData = array();
$proceed = '';
$eventData['pluginname'] =
htmlspecialchars(strip_tags($paymentO->method));
JFactory::getApplication()->triggerEvent('PCPbeforeEmptyCartAfterOrder',
array(&$proceed, &$pluginData, $pC, $paymentO->params, $order,
$eventData));
}
}
if ($pluginData['emptycart'] === true) {
$cart->emptyCart();
PhocacartUserGuestuser::cancelGuestUser();
}
$action = $order->getActionAfterOrder(); // Which action
should be done
$message = $order->getMessageAfterOrder();// Custom
message by payment plugin Payment/Download, Payment/No Download ...
$dataOrder = $order->getDataAfterOrder();// Order ID,
Token, payment ID, shipping ID ... different data for info view
$session = JFactory::getSession();
if ($action == 4 || $action == 3) {
// Ordered OK, but now we proceed to payment
$session->set('infoaction', $action,
'phocaCart');
$session->set('infomessage', $message,
'phocaCart');
$session->set('infodata', $dataOrder,
'phocaCart');
$app->redirect(JRoute::_(PhocacartRoute::getPaymentRoute(), false));
return true;
// This message should stay
// when order - the message is created
// when payment - the message stays unchanged
// after payment - it will be redirected to info view and
there the message will be displayed and then deleted
} else {
// Ordered OK, but the payment method does not have any
instruction to proceed to payment (e.g. cash on delivery)
//$msg =
JText::_('COM_PHOCACART_ORDER_SUCCESSFULLY_PROCESSED');
// We produce not message but we redirect to specific view
with message and additional instructions
//$app->enqueueMessage($msg, 'message');
$session->set('infoaction', $action,
'phocaCart');
$session->set('infomessage', $message,
'phocaCart');
$session->set('infodata', $dataOrder,
'phocaCart');
$app->redirect(JRoute::_(PhocacartRoute::getInfoRoute(),
false));
return true;
}
}
}
public function setguest() {
JSession::checkToken() or jexit('Invalid Token');
$app = JFactory::getApplication();
$item = array();
$item['id'] = $this->input->get('id',
0, 'int');
$item['return'] =
$this->input->get('return', '',
'string');
$msgSuffix = '<span id="ph-msg-ns"
class="ph-hidden"></span>';
//$guest = new PhocacartUserGuestuser();
//$set = $guest->setGuestUser((int)$item['id']);
$set =
PhocacartUserGuestuser::setGuestUser((int)$item['id']);
if ((int)$item['id'] == 1) {
if ($set) {
$app->enqueueMessage(JText::_('COM_PHOCACART_YOU_PROCEEDING_GUEST_CHECKOUT')
. $msgSuffix, 'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_DURING_PROCEEDING_GUESTBOOK_CHECKOUT')
. $msgSuffix, 'error');
}
} else {
if ($set) {
$app->enqueueMessage(JText::_('COM_PHOCACART_GUEST_CHECKOUT_CANCELED')
. $msgSuffix, 'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_ERROR_DURING_CANCELING_GUESTBOOK_CHECKOUT')
. $msgSuffix, 'error');
}
}
//$app->redirect(JRoute::_('index.php?option=com_phocacart&view=checkout'));
$app->redirect(base64_decode($item['return']));
}
/*
public function compareadd() {
JSession::checkToken() or jexit( 'Invalid Token' );
$app = JFactory::getApplication();
$item = array();
$item['id'] = $this->input->get( 'id',
0, 'int' );
$item['return'] = $this->input->get(
'return', '', 'string' );
$compare = new PhocacartCompare();
$added = $compare->addItem((int)$item['id']);
if ($added) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_ADDED_TO_COMPARISON_LIST'),
'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_ADDED_TO_COMPARISON_LIST'),
'error');
}
//$app->redirect(JRoute::_('index.php?option=com_phocacart&view=checkout'));
$app->redirect(base64_decode($item['return']));
}
public function compareremove() {
JSession::checkToken() or jexit( 'Invalid Token' );
$app = JFactory::getApplication();
$item = array();
$item['id'] = $this->input->get( 'id',
0, 'int' );
$item['return'] = $this->input->get(
'return', '', 'string' );
$compare = new PhocacartCompare();
$added = $compare->removeItem((int)$item['id']);
if ($added) {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_REMOVED_FROM_COMPARISON_LIST'),
'message');
} else {
$app->enqueueMessage(JText::_('COM_PHOCACART_PRODUCT_NOT_REMOVED_FROM_COMPARISON_LIST'),
'error');
}
//$app->redirect(JRoute::_('index.php?option=com_phocacart&view=checkout'));
$app->redirect(base64_decode($item['return']));
}*/
}
?>