%PDF- %PDF-
| Direktori : /home/lightco1/luminero.com.au/plugins/system/ecom360virtuemart/ |
| Current File : /home/lightco1/luminero.com.au/plugins/system/ecom360virtuemart/ecom360virtuemart.php |
<?php
/**
* @package CMC
* @author Compojoom <contact-us@compojoom.com>
* @date 2016-04-15
*
* @copyright Copyright (C) 2008 - 2016 compojoom.com - Daniel Dimitrov, Yves Hoppe. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
*/
// No direct access
defined('_JEXEC') or die('Restricted access');
JLoader::discover('CmcHelper', JPATH_ADMINISTRATOR . '/components/com_cmc/helpers/');
JLoader::discover('CmcMailChimp', JPATH_ADMINISTRATOR . '/components/com_cmc/libraries/shopsync/items/');
require_once JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/config.php';
require_once JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/vmmodel.php';
/**administrator/components/com_cmc/libraries/shopsync/shops/virtuemart.php
* Class plgSystemECom360Virtuemart
*
* @since 1.3
*/
class plgSystemECom360Virtuemart extends JPlugin
{
/**
* The shop object
*
* @var object
*
* @since __DEPLOY_VERSION__
*/
private $shop;
/**
* Chimp API
*
* @var CmcHelperChimp
*
* @since __DEPLOY_VERSION__
*/
private $chimp;
/**
* plgSystemECom360Virtuemart constructor.
*
* @param object $subject Subject
* @param array $config Config
*
* @since __DEPLOY_VERSION__
*/
public function __construct($subject, array $config = array())
{
parent::__construct($subject, $config);
}
/**
* Load the shop
*
* @return void
*
* @since __DEPLOY_VERSION__
*/
protected function loadShop()
{
$shopId = $this->params->get('store_id', 1);
$this->shop = CmcHelperShop::getShop($shopId);
$this->chimp = new CmcHelperChimp;
}
/**
* Add Order to MailChimp
*
* @param object $cart The cart object
* @param object $order The order
*
* @return bool
*
* @since __DEPLOY_VERSION__
*/
public function plgVmConfirmedOrder($cart, $order)
{
$this->loadShop();
$session = JFactory::getSession();
$customerId = $cart->BT['email'];
if (!empty($order->virtuemart_user_id))
{
$customerId = $order->virtuemart_user_id;
}
$customer = CmcHelperShop::getCustomerObject(
$cart->BT['email'],
$customerId,
$cart->BT['company'],
$cart->BT['email'],
$cart->BT['last_name']
);
$lines = array();
foreach ($order['items'] as $item)
{
$line = new CmcMailChimpLine;
$line->id = CmcHelperShop::PREFIX_ORDER . $item->virtuemart_order_item_id;
$line->title = $item->order_item_name;
$parentProductId = CmcHelperShop::getVmParentProductId($item->virtuemart_product_id);
$line->product_id = CmcHelperShop::PREFIX_PRODUCT . $parentProductId;
$line->product_variant_id = CmcHelperShop::PREFIX_PRODUCT . $item->virtuemart_product_id;
$line->product_variant_title = $item->order_item_name;
$line->quantity = (int) $item->product_quantity;
$line->price = (double) $item->product_final_price;
$lines[] = $line;
}
// The order data
$mOrder = new CmcMailChimpOrder;
$mOrder->id = CmcHelperShop::PREFIX_ORDER . $order["details"]["BT"]->virtuemart_order_id;
$mOrder->customer = $customer;
// Currency
/** @var VirtueMartModelCurrency $curModel */
$curModel = VmModel::getModel('currency');
$currency = $curModel->getCurrency($order["details"]["BT"]->order_currency);
$currencyCode = !empty($currency->currency_code_2) ? $currency->currency_code_2 : $currency->currency_code_3;
$mOrder->currency_code = $currencyCode;
$mOrder->payment_tax = (double) $order["details"]["BT"]->order_tax;
$mOrder->order_total = (double) $order["details"]["BT"]->order_total;
$mOrder->processed_at_foreign = JFactory::getDate($order["details"]["BT"]->order_created)->toSql();
$mOrder->lines = $lines;
$mOrder->campaign_id = $session->get('mc_cid', '');
if (empty($session->get('mc_cid', '')))
{
// MailChimp does not accept empty|null value here
unset($mOrder->campaign_id);
}
return $this->chimp->addOrder($this->shop->shop_id, $mOrder);
}
/**
* Delete a product
*
* @param object $id Id of the product
*
* @return array|false
*
* @since __DEPLOY_VERSION__
*/
public function plgVmOnDeleteProduct($id, $ok)
{
$this->loadShop();
return $this->chimp->deleteProduct($this->shop->shop_id, CmcHelperShop::PREFIX_PRODUCT . $id);
}
/**
* Add or update a product to MailChimp
*
* @param object $data Data for the product
*
* @return array|false
*
* @since __DEPLOY_VERSION__
*/
public function plgVmAfterStoreProduct($data, $productData)
{
$this->loadShop();
/** @var VirtueMartModelProduct $model */
$model = VmModel::getModel('product');
$product = new CmcMailChimpProduct;
$id = CmcHelperShop::PREFIX_PRODUCT . $data['virtuemart_product_id'];
$product->id = $id;
$product->title = $data['product_name'];
$product->description = $data['product_s_desc'];
$product->image_url = '';
$variants = array();
$model->setId($data['virtuemart_product_id']);
$uncatChildren = $model->getUncategorizedChildren(false);
$variants[] = array(
'id' => $id,
'title' => $data['product_name'],
'price' => number_format((float) $data['mprices']['product_price'][0],2)
);
foreach ($uncatChildren as $child)
{
$vmChild = $model->getProduct($child);
$variants[] = array(
'id' => CmcHelperShop::PREFIX_PRODUCT . $vmChild->virtuemart_product_id,
'title' => $vmChild->product_name,
'price' => number_format((float) $vmChild->allPrices[0]['product_price'], 2)
);
}
$product->variants = $variants;
return $this->chimp->addProduct($this->shop->shop_id, $product);
}
/**
* Save or Update a user
*
* @param object $user User
*
* @return array|false
*
* @since __DEPLOY_VERSION__
*/
public function plgVmOnUserStore($user)
{
$this->loadShop();
$customer = CmcHelperShop::getCustomerObject(
$user['email'],
$user['virtuemart_user_id'],
$user['company'],
$user['first_name'],
$user['last_name']
);
return $this->chimp->addCustomer($this->shop->shop_id, $customer);;
}
/**
* Sent the cart to MailChimp
*
* @param array $data Crap
*
* @return boolean
*
* @since __DEPLOY_VERSION__
*/
public function plgVmOnUpdateCart($data)
{
$this->loadShop();
$vmCart = VirtueMartCart::getCart();
if (empty($vmCart->user->virtuemart_user_id))
{
// We can't send a card to MailChimp without a user email
return true;
}
$session = JFactory::getSession();
/** @var VirtueMartModelCurrency $curModel */
$curModel = VmModel::getModel('currency');
/** @var VirtueMartModelProduct $model */
$prodModel = VmModel::getModel('product');
/** @var VirtueMartModelUser $model */
$userModel = VmModel::getModel('user');
$cart = new CmcMailChimpCart;
$cart->id = CmcHelperShop::PREFIX_CART . $vmCart->virtuemart_cart_id;
// Customer
$userAddress = $userModel->getUserAddressList($vmCart->user->virtuemart_user_id, 'BT');
$userModel->setId($vmCart->user->virtuemart_user_id);
$user = $userModel->getUser($userAddress[0]->virtuemart_userinfo_id);
$customer = CmcHelperShop::getCustomerObject(
$user->JUser->email,
$vmCart->user->virtuemart_user_id,
$userAddress[0]->company,
$userAddress[0]->first_name,
$userAddress[0]->last_name
);
// Cart information
$cart->customer = $customer;
$currency = $curModel->getCurrency($vmCart->pricesCurrency);
$currencyCode = !empty($currency->currency_code_2) ?: $currency->currency_code_3;
$cart->currency_code = $currencyCode;
$lines = array();
$total = 0;
$totalTax = 0;
foreach ($vmCart->cartProductsData as $i => $item)
{
$product = $prodModel->getProduct($item['virtuemart_product_id']);
$line = new CmcMailChimpLine;
$line->id = CmcHelperShop::PREFIX_ORDER_LINE . $vmCart->virtuemart_cart_id . '_' . $i;
$parentProductId = CmcHelperShop::getVmParentProductId($item['virtuemart_product_id']);
$line->product_id = CmcHelperShop::PREFIX_PRODUCT . $parentProductId;
$line->product_variant_id = CmcHelperShop::PREFIX_PRODUCT . $item['virtuemart_product_id'];
$line->quantity = $item['quantity'];
$itemPrice = empty($product->allPrices[0]['salesPrice']) ? $product->allPrices[0]['product_price'] : $product->allPrices[0]['salesPrice'];
$taxAmount = empty($product->allPrices[0]['taxAmount']) ? 0 : $product->allPrices[0]['taxAmount'];
$price = $itemPrice * $item['quantity'];
$tax = $taxAmount * $item['quantity'];
$total += $price;
$totalTax += $tax;
$line->price = $price;
$lines[] = $line;
}
$cart->lines = $lines;
$cart->order_total = $total;
$cart->tax_total = $totalTax;
$cart->campaign_id = $session->get('mc_cid', '');
if (empty($session->get('mc_cid', '')))
{
// MailChimp does not accept empty|null value here
unset($cart->campaign_id);
}
// Send result to MailChimp
$result = $this->chimp->addCart($this->shop->shop_id, $cart);
return true;
}
}