PATH:
home
/
sparklp6
/
public_html
/
sparklerfilters-org
/
administrator
/
components
/
com_j2store
/
models
/
behavior
<?php /** * @package J2Store * @copyright Copyright (c)2014-17 Ramesh Elamathi / J2Store.org * @license GNU GPL v3 or later */ // No direct access to this file use Joomla\Registry\Registry; defined('_JEXEC') or die; class J2StoreModelProductsBehaviorDownloadable extends F0FModelBehavior { private $_rawData = array(); public function onAfterGetItem(&$model, &$record) { //sanity check if($record->product_type != 'downloadable') return; //we just have the products. Get the variants if($record->j2store_product_id) { $variantModel = F0FModel::getTmpInstance('Variants', 'J2StoreModel'); $variantModel->clearState()->setState('product_type', $record->product_type); //Its a simple product. So we will have only one variant record try { $variants = $variantModel->product_id($record->j2store_product_id)->getList(); $record->variants = $variants[0]; }catch(Exception $e) { echo $e->getMessage(); $record->variants = F0FTable::getInstance('Variants', 'J2StoreTable'); } try { //lets load product options as well $record->product_options = F0FModel::getTmpInstance('ProductOptions', 'J2StoreModel') ->product_id($record->j2store_product_id) ->limit(0) ->parent_id(null) ->limitstart(0) ->getList(); }catch (Exception $e) { echo $e->getMessage(); } $registry = new JRegistry(); $registry->loadString($record->params, 'JSON'); $record->params = $registry; } } public function onBeforeSave(&$model, &$data) { if(!isset($data['product_type']) || $data['product_type'] != 'downloadable') return; $utility_helper = J2Store::utilities(); if(!isset( $data['visibility'] )){ $data['visibility'] = 1; } if(isset($data['cross_sells'])) { $data['cross_sells'] = $utility_helper->to_csv($data['cross_sells']); }else{ $data['cross_sells'] =''; } if(isset($data['up_sells'])) { $data['up_sells'] = $utility_helper->to_csv($data['up_sells']); }else{ $data['up_sells'] =''; } if(isset($data['shippingmethods']) && !empty($data['shippingmethods'])){ $data['shippingmethods'] = implode(',',$data['shippingmethods']); } if(isset($data['item_options']) && count($data['item_options']) > 0){ $data['has_options'] = 1; } //bind existing params if($data['j2store_product_id'] ){ $product = F0FTable::getAnInstance('Product', 'J2StoreTable')->getClone(); $product->load($data['j2store_product_id']); if(isset($product->params)){ $product->params = json_decode($product->params); if(!isset($data['params']) || empty($data['params'])) { $data['params'] = new JRegistry('{}'); }else { $data['params'] = array_merge((array)$product->params,(array)$data['params']); } //$data['params'] = array_merge((array)$product->params,(array)$data['params']); } } if(isset($data['params']) && !empty($data['params'])){ $data['params'] = json_encode($data['params']); } $this->_rawData = $data; } public function onAfterSave(&$model) { if($this->_rawData) { $table = $model->getTable(); if($table->product_type != 'downloadable') return; //since post has too much of information, this could do the job $variant = F0FTable::getInstance('Variant', 'J2StoreTable'); $variant->bind($this->_rawData); //by default it is treated as master product. $variant->is_master = 1; $variant->product_id = $table->j2store_product_id; $variant->store(); //get the item options if(isset($this->_rawData['item_options'])) { foreach($this->_rawData['item_options'] as $item){ $poption = F0FTable::getInstance('Productoption', 'J2StoreTable')->getClone(); $item->product_id = $table->j2store_product_id; try { $poption->save($item); }catch (Exception $e) { throw new Exception($e->getMessage()); } } } if(isset($this->_rawData['quantity'] )) { $inventory = $this->_rawData['quantity']; $productQuantity = F0FTable::getInstance('Productquantity', 'J2StoreTable'); $productQuantity->load(array('variant_id'=>$variant->j2store_variant_id)); $productQuantity->variant_id = $variant->j2store_variant_id; try { $productQuantity->save($inventory); }catch (Exception $e) { throw new Exception($e->getMessage()); } } //save product images $images = F0FTable::getInstance('ProductImage', 'J2StoreTable'); if(isset($this->_rawData['additional_images']) && !empty($this->_rawData['additional_images'] )){ if(is_object($this->_rawData['additional_images'])){ $this->_rawData['additional_images'] = json_encode(JArrayHelper::fromObject($this->_rawData['additional_images'])); }else{ $this->_rawData['additional_images'] = json_encode($this->_rawData['additional_images']); } } $this->_rawData['product_id'] = $table->j2store_product_id; //just make sure that we do not have a double entry there $images->load(array('product_id'=>$table->j2store_product_id)); $images->save($this->_rawData); if(isset($this->_rawData ['productfilter_ids'])){ //save product filters F0FTable::getAnInstance('ProductFilter', 'J2StoreTable' )->addFilterToProduct ( $this->_rawData ['productfilter_ids'], $table->j2store_product_id ); } } } public function onBeforeDelete(&$model) { $id = $model->getId(); if(!$id) return; $product = F0FTable::getAnInstance('Product', 'J2StoreTable')->getClone(); if($product->load($id)) { if($product->product_type != 'downloadable') return; $variantModel = F0FModel::getTmpInstance('Variants', 'J2StoreModel'); //get variants $variants = $variantModel->limit(0)->limitstart(0)->product_id($id)->getItemList(); foreach($variants as $variant) { $variantModel->setIds(array($variant->j2store_variant_id))->delete(); } } } public function onAfterGetProduct(&$model, &$product) { //sanity check if(!in_array($product->product_type, array('downloadable'))) return; $j2config = J2Store::config (); $product_helper = J2Store::product (); // links $product_helper->getAddtocartAction ( $product ); $product_helper->getCheckoutLink ( $product ); $product_helper->getProductLink( $product ); $variantModel = F0FModel::getTmpInstance ( 'Variants', 'J2StoreModel' ); $variantModel->clearState ()->setState ( 'product_type', $product->product_type ); // Its a simple product. So we will have only one variant record try { $variants = $variantModel->product_id ( $product->j2store_product_id )->getList (); $product->variants = $variants [0]; } catch ( Exception $e ) { $model->setError ( $e->getMessage () ); $product->variants = F0FTable::getInstance ( 'Variants', 'J2StoreTable' ); } $registry = new JRegistry (); $registry->loadString ( $product->params, 'JSON' ); $product->params = $registry; // process variant $product->variant = $product->variants; // get quantity restrictions $product_helper->getQuantityRestriction ( $product->variant ); // now process the quantity if ($product->variant->quantity_restriction && $product->variant->min_sale_qty > 0) { $product->quantity = $product->variant->min_sale_qty; } else { $product->quantity = 1; } // check stock status if ($product_helper->check_stock_status ( $product->variant, $product->quantity )) { // reset the availability $product->variant->availability = 1; } else { $product->variant->availability = 0; } // process pricing. returns an object $product->pricing = $product_helper->getPrice ( $product->variant, $product->quantity ); $product->options = array (); if ($product->has_options) { // load product options try { // lets load product options as well $product->product_options = F0FModel::getTmpInstance ( 'ProductOptions', 'J2StoreModel' )->product_id ( $product->j2store_product_id )->limit ( 0 )->parent_id ( null )->limitstart ( 0 )->getList (); } catch ( Exception $e ) { $model->setError ( $e->getMessage () ); } try { $product->options = $product_helper->getProductOptions ( $product ); $default_selected_options = $product_helper->getDefaultProductOptions ( $product->options ); // now get the price $product_option_data = $product_helper->getOptionPrice ( $default_selected_options, $product->j2store_product_id ); $product->pricing->base_price = $product->pricing->base_price + $product_option_data ['option_price']; $product->pricing->price = $product->pricing->price + $product_option_data ['option_price']; } catch ( Exception $e ) { // do nothing } } } public function onUpdateProduct(&$model, &$product) { if($product->product_type != 'downloadable') return; $app = JFactory::getApplication (); $params = J2Store::config (); $product_helper = J2Store::product (); $product_id = $app->input->getInt ( 'product_id', 0 ); if (! $product_id) return false; // get variant $variants = F0FModel::getTmpInstance ( 'Variants', 'J2StoreModel' )->product_id ( $product->j2store_product_id )->is_master ( 1 )->getList (); $product->variants = $variants [0]; // process variant $product->variant = $product->variants; // get quantity restrictions $product_helper->getQuantityRestriction ( $product->variant ); // now process the quantity $product->quantity = $app->input->getFloat ( 'product_qty', 1 ); if ($product->variant->quantity_restriction && $product->variant->min_sale_qty > 0) { $product->quantity = $product->variant->min_sale_qty; } // process pricing. returns an object $pricing = $product_helper->getPrice ( $product->variant, $product->quantity ); $selected_product_options = $app->input->get ( 'product_option', array (), 'ARRAY' ); // get the selected option price if (count ( $selected_product_options )) { $product_option_data = $product_helper->getOptionPrice ($selected_product_options, $product->j2store_product_id ); $base_price = $pricing->base_price + $product_option_data ['option_price']; $price = $pricing->price + $product_option_data ['option_price']; } else { $base_price = $pricing->base_price; $price = $pricing->price; } $return = array (); $return ['pricing'] = array (); $return ['pricing'] ['base_price'] = $product_helper->displayPrice ( $base_price, $product, $params ); $return ['pricing'] ['price'] = $product_helper->displayPrice ( $price, $product, $params ); $return ['pricing'] ['orginal'] = array(); $return ['pricing'] ['orginal']['base_price'] = $base_price; $return ['pricing'] ['orginal']['price'] = $price; return $return; } }
[-] variable.php
[edit]
[-] cartconfigurable.php
[edit]
[-] configurable.php
[edit]
[-] autoload.php
[edit]
[-] cartvariable.php
[edit]
[-] stock.php
[edit]
[-] default.php
[edit]
[-] downloadable.php
[edit]
[-] cartdefault.php
[edit]
[-] cartsimple.php
[edit]
[-] cartdownloadable.php
[edit]
[+]
..
[-] simple.php
[edit]