%PDF- %PDF-
Direktori : /home/lightco1/public_html/plugins/vmpayment/klikandpay/klikandpay/helpers/ |
Current File : /home/lightco1/public_html/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; } }