%PDF- %PDF-
| Direktori : /proc/self/root/home1/lightco1/www/plugins/vmpayment/klikandpay/klikandpay/helpers/ |
| Current File : //proc/self/root/home1/lightco1/www/plugins/vmpayment/klikandpay/klikandpay/helpers/subscribe.php |
<?php
/**
*
* Klikandpay payment plugin
*
* @author Valérie Isaksen
* @version $Id$
* @package VirtueMart
* @subpackage payment
* Copyright (C) 2004-2015 Virtuemart 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
*/
defined('_JEXEC') or die('Restricted access');
class KlikandpayHelperKlikandpaySubscribe extends KlikandpayHelperKlikandpay {
function __construct($method, $paypalPlugin) {
parent::__construct($method, $paypalPlugin);
}
/**
* @param $klikandpay_data
* @param $order
* @param $payments
* @return mixed
*/
function getOrderHistory($klikandpay_data, $order, $payments) {
$subscribe_comment = '';
$amountInCurrency = vmPSPlugin::getAmountInCurrency($order['details']['BT']->order_total, $order['details']['BT']->order_currency);
$order_history['comments'] = vmText::sprintf('VMPAYMENT_KLIKANDPAY_PAYMENT_STATUS_CONFIRMED', $amountInCurrency['display'], $order['details']['BT']->order_number);
$amountInCurrency = vmPSPlugin::getAmountInCurrency($klikandpay_data['MONTANTXKP'], $order['details']['BT']->order_currency);
if (isset($klikandpay_data['PROCHAINE'])) {
$subscribe_comment = vmText::_('VMPAYMENT_KLIKANDPAY_RESPONSE_PROCHAINE') . ' ' . $klikandpay_data['PROCHAINE'];
}
$order_history['customer_notified'] = true;
$order_history['comments'] .= $subscribe_comment;
// At the moment, KP only sends a notification on a successful transaction
// it does not send notification , if a payment is not done, or if a subscription is stopped from KP BO
$order_history['order_status'] = $this->_method->status_success_subscribe;
return $order_history;
}
/**
* if ORNUMXKP = Original NUMXKP (from 1rst transaction)
* @param $klikandpay_data
* @param $order
* @param $payments
* @return bool
*/
function isResponseValid($klikandpay_data, $order, $payments) {
if ($klikandpay_data['RESPONSE'] == self::RESPONSE_SUCCESS) {
if (isset($klikandpay_data['ORNUMXKP'])) {
foreach ($payments as $payment) {
if ($payment->klikandpay_response_NUMXKP == $klikandpay_data['ORNUMXKP']) {
return true;
}
}
$this->plugin->debugLog(var_export($klikandpay_data, true), 'Notification received not valid', 'error', false);
return false;
}
return true;
} else {
return false;
}
}
/**
* check if mixed products incart
* */
function checkConditions($cart) {
$subscribe = $this->getSubscribeProducts($cart);
if ($subscribe === false) {
return false;
} else {
return true;
}
}
function onCheckoutCheckDataPayment(VirtueMartCart $cart) {
static $displayInfoMsg = true;
$return = true;
if (!$this->getSubscribeProducts($cart)) {
$return = false;
}
if ($cart->BT) {
if (empty($cart->BT['phone_1']) and empty($cart->BT['phone_2']) and $displayInfoMsg) {
//vmInfo(vmText::sprintf('VMPAYMENT_KLIKANDPAY_SUBSCRIBE_TEL_REQUIRED',JRoute::_('index.php?option=com_virtuemart&view=cart')) );
vmInfo(vmText::sprintf('VMPAYMENT_KLIKANDPAY_SUBSCRIBE_TEL_REQUIRED', JRoute::_('index.php?option=com_virtuemart&view=user&task=editaddresscheckout&addrtype=BT')));
$return = false;
}
}
$displayInfoMsg = false;
return $return;
}
function onSelectCheck(VirtueMartCart $cart) {
$this->onCheckoutCheckDataPayment($cart);
}
function getExtraPluginNameInfo() {
if (!class_exists('VirtueMartCart')) {
require(VMPATH_SITE . DS . 'helpers' . DS . 'cart.php');
}
$cart = VirtueMartCart::getCart();
if (!isset($cart->cartPrices)) {
$cart->getCartPrices();
}
$extraInfo['subscribe'] = $this->getSubscribeProducts($cart, false);
return $extraInfo;
}
function getSubscribeId($cart) {
$subscribe = $this->getSubscribeProducts($cart);
if ($subscribe) {
return $subscribe['subscribe_id'];
}
return false;
}
/**
* Subscription products:
* 1. create a custom field type 'cart Variant', Cart Attribute= Yes
* 2. Add the custom field to the product
* 3. There must be a correspondence between custom in products / payment
* -- first item of custom field => subscribe_1
* -- second item of custom field => subscribe_2
* -- third item of custom field => subscribe_3
*
* @param VirtueMartCart $cart
* @return array or boolean
*/
function getSubscribeProducts(VirtueMartCart $cart) {
static $displayErrorMsg = true;
$subscribe = array();
if ($this->_method->subscribe_customfield == 0) {
return false;
}
JPluginHelper::importPlugin('vmcustom');
$app = JFactory::getApplication();
$productSubscribe = 0;
$products = $cart->products;
$previousSubscribeOptionSelected = 0;
$first = true;
foreach ($products as $priceKey => $product) {
// TODO check it is the correct Abonnement id
$product_custom_fields = $this->getProdCustomFields($product->virtuemart_product_id);
if (!empty($product_custom_fields)) {
foreach ($product_custom_fields as $product_custom_field) {
if ($product_custom_field->virtuemart_custom_id == $this->_method->subscribe_customfield) {
$subscribeOptionSelected = $this->getSubscribeOptionSelected($product_custom_field, $priceKey);
if ($subscribeOptionSelected) {
if (!$first and $previousSubscribeOptionSelected != $subscribeOptionSelected) {
break;
}
$productSubscribe++;
$subscribe_due_date_amount = 'subscribe_due_date_amount_' . $subscribeOptionSelected;
$subscribe_frequency = 'subscribe_frequency_' . $subscribeOptionSelected;
$subscribe_test_amount = 'subscribe_test_amount_' . $subscribeOptionSelected;
$subscribe_test_period = 'subscribe_test_period_' . $subscribeOptionSelected;
$subscribe_id = 'subscribe_id_' . $subscribeOptionSelected;
$amountInCurrency = vmPSPlugin::getAmountInCurrency($this->_method->$subscribe_due_date_amount, $cart->pricesCurrency);
$subscribe['subscribe_due_date_amount'] = $amountInCurrency['display'];
$subscribe['subscribe_frequency'] = $this->_method->$subscribe_frequency;
if ($this->_method->$subscribe_test_amount) {
$amountInCurrency = vmPSPlugin::getAmountInCurrency($this->_method->$subscribe_test_amount, $cart->pricesCurrency);
$subscribe['subscribe_test_amount'] = $amountInCurrency['display'];
}
$subscribe['subscribe_test_period'] = $this->_method->$subscribe_test_period;
$subscribe['subscribe_id'] = $this->_method->$subscribe_id;
$previousSubscribeOptionSelected = $subscribeOptionSelected;
$first = false;
$currencyDisplay = CurrencyDisplay::getInstance($cart->pricesCurrency);
}
}
}
}
}
$nbProducts = count($products);
if ($productSubscribe AND $nbProducts != $productSubscribe) {
if ($displayErrorMsg) {
$displayErrorMsg = false;
vmError('VMPAYMENT_KLIKANDPAY_SUBSCRIBE_MIXED_PRODUCTS', 'VMPAYMENT_KLIKANDPAY_SUBSCRIBE_MIXED_PRODUCTS');
}
return false;
} else {
return $subscribe;
}
}
function getSubscribeOptionSelected($product_custom_field, $priceKey) {
$variants = $this->parseModifier($priceKey);
$i = 1;
foreach ($product_custom_field->options as $key => $option) {
if ($key == $variants[$product_custom_field->virtuemart_custom_id]) {
return $i;
}
$i++;
}
return false;
}
/**
* parse Modifier is NOT a clone of the function in calculationh.php
* @param $priceKey
* @return array
*/
public function parseModifier($priceKey) {
$variants = array();
if ($index = strpos($priceKey, '::')) {
$virtuemart_product_id = substr($priceKey, 0, $index);
$allItems = substr($priceKey, $index + 2);
$items = explode(';', $allItems);
foreach ($items as $item) {
if (!empty($item)) {
//vmdebug('parseModifier $item',$item);
$index2 = strpos($item, ':');
if ($index2 != false) {
$selected = substr($item, 0, $index2);
$variant = substr($item, $index2 + 1);
// echo 'My selected '.$selected;
// echo ' My $variant '.$variant.' ';
//TODO productCartId
//MarkerVarMods
//$variants[$selected] = $variant; //this works atm not for the cart
$variants[$variant] = $selected; //but then the orders are broken
}
}
}
}
//vmdebug('parseModifier $variants',$variants);
return $variants;
}
function getProdCustomFields($virtuemart_product_id) {
$product = new stdClass();
$product->virtuemart_product_id = $virtuemart_product_id;
$customfields = VmModel::getModel('Customfields');
$product_customfields = $customfields->getProductCustomsFieldCart($product);
return $product_customfields;
}
function getProductAmount($productPricesUnformatted) {
if ($productPricesUnformatted['salesPriceWithDiscount']) {
return $productPricesUnformatted['salesPriceWithDiscount'];
} else {
return $productPricesUnformatted['salesPrice'];
}
}
function getKlikandpayServerUrl($subscribe_id) {
if ($subscribe_id) {
if ($this->_method->shop_mode == 'test') {
$url = 'https://www.klikandpay.com/paiementtest/checkabon.pl';
} else {
$url = 'https://www.klikandpay.com/paiement/checkabon.pl';
}
} else {
$url = parent::getKlikandpayServerUrl(NULL);
}
return $url;
}
}