| Current Path : /home/bateauecpx/www/administrator/components/com_j2store/models/behavior/ |
| Current File : /home/bateauecpx/www/administrator/components/com_j2store/models/behavior/cartdownloadable.php |
<?php
/**
* @package J2Store
* @copyright Copyright (c)2014-17 Ramesh Elamathi / J2Store.org
* @license GNU GPL v3 or later
*/
// No direct access to this file
defined('_JEXEC') or die;
class J2StoreModelCartsBehaviorCartDownloadable extends F0FModelBehavior {
public function onBeforeAddCartItem(&$model, $product, &$json) {
$app = JFactory::getApplication();
$product_helper = J2Store::product();
$values = $app->input->getArray($_REQUEST);
$errors = array();
//run quantity check
$quantity = $app->input->get('product_qty');
if (isset($quantity )) {
$quantity = $quantity;
} else {
$quantity = 1;
}
//get options
//get the product options
$options = $app->input->get('product_option', array(0), 'ARRAY');
if (isset($options )) {
$options = array_filter($options );
} else {
$options = array();
}
//iterate through stored options for this product and validate
foreach($product->product_options as $product_option) {
//check option type should not be file
if ($product_option->required && empty($options[$product_option->j2store_productoption_id])) {
$errors['error']['option'][$product_option->j2store_productoption_id] = JText::sprintf('J2STORE_ADDTOCART_PRODUCT_OPTION_REQUIRED', JText::_($product_option->option_name));
}
if(!empty($options[$product_option->j2store_productoption_id])) {
F0FModel::getTmpInstance('Options', 'J2StoreModel')->validateOptionRules($options[$product_option->j2store_productoption_id], $product_option, $errors);
}
}
$cart = $model->getCart();
if(!$errors && $cart->cart_type != 'wishlist') {
//before validating, get the total quantity of this variant in the cart
$cart_total_qty = $product_helper->getTotalCartQuantity($product->variants->j2store_variant_id);
//validate minimum / maximum quantity
$error = $product_helper->validateQuantityRestriction($product->variants, $cart_total_qty, $quantity);
if(!empty($error)) {
$errors['error']['stock'] = $error;
}
//validate inventory
if($product_helper->check_stock_status($product->variants, $cart_total_qty+$quantity) === false) {
if ( $product->variants->quantity > 0 ) {
$errors['error']['stock'] = JText::sprintf ( 'J2STORE_LOW_STOCK_WITH_QUANTITY', $product->variants->quantity );
}else{
$errors['error']['stock'] = JText::_('J2STORE_OUT_OF_STOCK');
}
}
}
if(!$errors) {
//all good. Add the product to cart
// create cart object out of item properties
$item = new JObject;
$item->user_id = JFactory::getUser()->id;
$item->product_id = (int) $product->j2store_product_id;
$item->variant_id = (int) $product->variants->j2store_variant_id;
$item->product_qty = J2Store::utilities()->stock_qty($quantity);
$item->product_options = base64_encode(serialize($options));
$item->product_type = $product->product_type;
$item->vendor_id = isset($product->vendor_id) ? $product->vendor_id : '0';
// onAfterCreateItemForAddToCart: plugin can add values to the item before it is being validated /added
// once the extra field(s) have been set, they will get automatically saved
$results = J2Store::plugin()->event("AfterCreateItemForAddToCart", array( $item, $values ) );
foreach ($results as $result)
{
foreach($result as $key=>$value)
{
$item->set($key,$value);
}
}
// no matter what, fire this validation plugin event for plugins that extend the checkout workflow
$results = array();
$results = J2Store::plugin()->event( "BeforeAddToCart", array( $item, $values, $product, $product->product_options) );
foreach($results as $result) {
if (! empty ( $result['error'] )) {
$errors['error']['general'] = $result['error'];
}
}
// when there is some error from the plugin then the cart item should not be added
if(!$errors){
//add item to cart
$cartTable = $model->addItem($item);
if($cartTable === false) {
//adding to cart is failed
$errors['success'] = 0;
} else {
//adding cart is successful
$errors['success'] = 1;
$errors['cart_id'] = $cartTable->j2store_cart_id;
}
}
}
$json->result = $errors;
}
public function onGetCartItems(&$model, &$item) {
//sanity check
if($item->product_type != 'downloadable') return;
$product_helper = J2Store::product();
//Options
//print_r(base64_decode($item->product_options));
if (isset($item->product_options)) {
$options = unserialize(base64_decode($item->product_options));
} else {
$options = array();
}
$product = $product_helper->setId($item->product_id)->getProduct();
$product_option_data = $product_helper->getOptionPrice($options, $product->j2store_product_id);
//print_r($product_option_data);
$item->product_name = $product->product_name;
$item->product_view_url = $product->product_view_url;
$item->options = $product_option_data['option_data'];
$item->option_price = $product_option_data['option_price'];
$item->weight = $item->weight + $product_option_data['option_weight'];
$item->weight_total = ($item->weight ) * $item->product_qty;
$group_id = '';
if(isset($item->group_id) && !empty($item->group_id)){
$group_id = $item->group_id;
}
$item->pricing = $product_helper->getPrice($item, $item->product_qty,$group_id);
}
public function onValidateCart(&$model, $cartitem, $quantity) {
//sanity check
if($cartitem->product_type != 'downloadable') return;
$product_helper = J2Store::product();
$product = $product_helper->setId($cartitem->product_id)->getProduct();
$variant = F0FModel::getTmpInstance('Variants', 'J2StoreModel')->getItem($cartitem->variant_id);
$errors = array();
//before validating, get the total quantity of this variant in the cart
$cart_total_qty = $product_helper->getTotalCartQuantity($variant->j2store_variant_id);
//get the quantity difference. Because we are going to check the total quantity
$difference_qty = $quantity - $cartitem->product_qty;
//validate minimum / maximum quantity
$error = $product_helper->validateQuantityRestriction($variant , $cart_total_qty, $difference_qty);
if(!empty($error)) {
$errors[] = $error;
}
//validate inventory
if($product_helper->check_stock_status($variant, $cart_total_qty+$difference_qty) === false) {
$errors[] = JText::_('J2STORE_OUT_OF_STOCK');
}
if(count($errors)) {
throw new Exception(implode('/n', $errors));
return false;
}
return true;
}
}