Exemple #1
0
 /**
  * Store a product
  *
  * @author Max Milbers
  * @param $product given as reference
  * @param bool $isChild Means not that the product is child or not. It means if the product should be threated as child
  * @return bool
  */
 public function store(&$product, $isChild = FALSE)
 {
     JRequest::checkToken() or jexit('Invalid Token');
     if ($product) {
         $data = (array) $product;
     }
     if (!class_exists('Permissions')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php';
     }
     $perm = Permissions::getInstance();
     $superVendor = $perm->isSuperVendor();
     if (empty($superVendor)) {
         vmError('You are not a vendor or administrator, storing of product cancelled');
         return FALSE;
     }
     if (isset($data['intnotes'])) {
         $data['intnotes'] = trim($data['intnotes']);
     }
     // Setup some place holders
     $product_data = $this->getTable('products');
     if (!empty($data['virtuemart_product_id'])) {
         $product_data->load($data['virtuemart_product_id']);
     }
     //Set the decimals like product packaging
     //$decimals = array('product_length','product_width','product_height','product_weight','product_packaging');
     foreach ($this->decimals as $decimal) {
         if (array_key_exists($decimal, $data)) {
             if (!empty($data[$decimal])) {
                 $data[$decimal] = str_replace(',', '.', $data[$decimal]);
             } else {
                 $data[$decimal] = null;
                 $product_data->{$decimal} = null;
                 //vmdebug('Store product, set $decimal '.$decimal.' = null');
             }
         }
     }
     //with the true, we do preloading and preserve so old values note by Max Milbers
     //	$product_data->bindChecknStore ($data, $isChild);
     //We prevent with this line, that someone is storing a product as its own parent
     if (!empty($product_data->product_parent_id) and $product_data->product_parent_id == $data['virtuemart_product_id']) {
         $product_data->product_parent_id = 0;
     }
     $stored = $product_data->bindChecknStore($data, false);
     $errors = $product_data->getErrors();
     if (!$stored or count($errors) > 0) {
         foreach ($errors as $error) {
             vmError('Product store ' . $error);
         }
         if (!$stored) {
             vmError('You are not an administrator or the correct vendor, storing of product cancelled');
         }
         return FALSE;
     }
     $this->_id = $data['virtuemart_product_id'] = (int) $product_data->virtuemart_product_id;
     if (empty($this->_id)) {
         vmError('Product not stored, no id');
         return FALSE;
     }
     //We may need to change this, the reason it is not in the other list of commands for parents
     if (!$isChild) {
         if (!empty($data['save_customfields'])) {
             if (!class_exists('VirtueMartModelCustomfields')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php';
             }
             VirtueMartModelCustomfields::storeProductCustomfields('product', $data, $product_data->virtuemart_product_id);
         }
     }
     // Get old IDS
     $old_price_ids = $this->loadProductPrices($this->_id, 0, 0, false);
     //vmdebug('$old_price_ids ',$old_price_ids);
     if (isset($data['mprices']['product_price']) and count($data['mprices']['product_price']) > 0) {
         foreach ($data['mprices']['product_price'] as $k => $product_price) {
             $pricesToStore = array();
             $pricesToStore['virtuemart_product_id'] = $this->_id;
             $pricesToStore['virtuemart_product_price_id'] = (int) $data['mprices']['virtuemart_product_price_id'][$k];
             if (!$isChild) {
                 //$pricesToStore['basePrice'] = $data['mprices']['basePrice'][$k];
                 $pricesToStore['product_override_price'] = $data['mprices']['product_override_price'][$k];
                 $pricesToStore['override'] = (int) $data['mprices']['override'][$k];
                 $pricesToStore['virtuemart_shoppergroup_id'] = (int) $data['mprices']['virtuemart_shoppergroup_id'][$k];
                 $pricesToStore['product_tax_id'] = (int) $data['mprices']['product_tax_id'][$k];
                 $pricesToStore['product_discount_id'] = (int) $data['mprices']['product_discount_id'][$k];
                 $pricesToStore['product_currency'] = (int) $data['mprices']['product_currency'][$k];
                 $pricesToStore['product_price_publish_up'] = $data['mprices']['product_price_publish_up'][$k];
                 $pricesToStore['product_price_publish_down'] = $data['mprices']['product_price_publish_down'][$k];
                 $pricesToStore['price_quantity_start'] = (int) $data['mprices']['price_quantity_start'][$k];
                 $pricesToStore['price_quantity_end'] = (int) $data['mprices']['price_quantity_end'][$k];
             }
             if (!$isChild and isset($data['mprices']['use_desired_price'][$k]) and $data['mprices']['use_desired_price'][$k] == "1") {
                 if (!class_exists('calculationHelper')) {
                     require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php';
                 }
                 $calculator = calculationHelper::getInstance();
                 $pricesToStore['salesPrice'] = $data['mprices']['salesPrice'][$k];
                 $pricesToStore['product_price'] = $data['mprices']['product_price'][$k] = $calculator->calculateCostprice($this->_id, $pricesToStore);
                 unset($data['mprices']['use_desired_price'][$k]);
             } else {
                 if (isset($data['mprices']['product_price'][$k])) {
                     $pricesToStore['product_price'] = $data['mprices']['product_price'][$k];
                 }
             }
             if ($isChild) {
                 $childPrices = $this->loadProductPrices($this->_id, 0, 0, false);
             }
             if ((isset($pricesToStore['product_price']) and $pricesToStore['product_price'] != '') || (isset($childPrices) and count($childPrices) > 1)) {
                 if ($isChild) {
                     //$childPrices = $this->loadProductPrices($pricesToStore['virtuemart_product_price_id'],0,0,false);
                     if (is_array($old_price_ids) and count($old_price_ids) > 1) {
                         //We do not touch multiple child prices. Because in the parent list, we see no price, the gui is
                         //missing to reflect the information properly.
                         $pricesToStore = false;
                         $old_price_ids = array();
                     } else {
                         unset($data['mprices']['product_override_price'][$k]);
                         unset($pricesToStore['product_override_price']);
                         unset($data['mprices']['override'][$k]);
                         unset($pricesToStore['override']);
                     }
                 }
                 //$data['mprices'][$k] = $data['virtuemart_product_id'];
                 if ($pricesToStore) {
                     $toUnset = array();
                     foreach ($old_price_ids as $key => $oldprice) {
                         if (array_search($pricesToStore['virtuemart_product_price_id'], $oldprice)) {
                             $pricesToStore = array_merge($oldprice, $pricesToStore);
                             $toUnset[] = $key;
                         }
                     }
                     $this->updateXrefAndChildTables($pricesToStore, 'product_prices', $isChild);
                     foreach ($toUnset as $key) {
                         unset($old_price_ids[$key]);
                     }
                 }
             }
         }
     }
     if (count($old_price_ids)) {
         $oldPriceIdsSql = array();
         foreach ($old_price_ids as $oldPride) {
             $oldPriceIdsSql[] = $oldPride['virtuemart_product_price_id'];
         }
         // delete old unused Prices
         $this->_db->setQuery('DELETE FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_price_id` in ("' . implode('","', $oldPriceIdsSql) . '") ');
         $this->_db->query();
         $err = $this->_db->getErrorMsg();
         if (!empty($err)) {
             vmWarn('In store prodcut, deleting old price error', $err);
         }
     }
     if (!empty($data['childs'])) {
         foreach ($data['childs'] as $productId => $child) {
             $child['product_parent_id'] = $data['virtuemart_product_id'];
             $child['virtuemart_product_id'] = $productId;
             $this->store($child, TRUE);
         }
     }
     if (!$isChild) {
         $data = $this->updateXrefAndChildTables($data, 'product_shoppergroups');
         $data = $this->updateXrefAndChildTables($data, 'product_manufacturers');
         if (!empty($data['categories']) && count($data['categories']) > 0) {
             $data['virtuemart_category_id'] = $data['categories'];
         } else {
             $data['virtuemart_category_id'] = array();
         }
         $data = $this->updateXrefAndChildTables($data, 'product_categories');
         // Update waiting list
         //TODO what is this doing?
         if (!empty($data['notify_users'])) {
             if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') {
                 $waitinglist = VmModel::getModel('Waitinglist');
                 $waitinglist->notifyList($data['virtuemart_product_id']);
             }
         }
         // Process the images
         $mediaModel = VmModel::getModel('Media');
         $mediaModel->storeMedia($data, 'product');
         $errors = $mediaModel->getErrors();
         foreach ($errors as $error) {
             vmError($error);
         }
     }
     return $product_data->virtuemart_product_id;
 }
Exemple #2
0
 /**
  * Store a product
  *
  * @author RolandD
  * @author Max Milbers
  * @access public
  */
 public function store(&$product, $isChild = FALSE)
 {
     JRequest::checkToken() or jexit('Invalid Token');
     if ($product) {
         $data = (array) $product;
     }
     if (!class_exists('Permissions')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php';
     }
     $perm = Permissions::getInstance();
     $superVendor = $perm->isSuperVendor();
     if (empty($superVendor)) {
         vmError('You are not a vendor or administrator, storing of product cancelled');
         return FALSE;
     }
     if (isset($data['intnotes'])) {
         $data['intnotes'] = trim($data['intnotes']);
     }
     // Setup some place holders
     $product_data = $this->getTable('products');
     //Set the product packaging
     if (array_key_exists('product_packaging', $data)) {
         $data['product_packaging'] = str_replace(',', '.', $data['product_packaging']);
     }
     //with the true, we do preloading and preserve so old values note by Max Milbers
     //	$product_data->bindChecknStore ($data, $isChild);
     $stored = $product_data->bindChecknStore($data, TRUE);
     $errors = $product_data->getErrors();
     if (!$stored or count($errors) > 0) {
         foreach ($errors as $error) {
             vmError('Product store ' . $error);
         }
         if (!$stored) {
             vmError('You are not an administrator or the correct vendor, storing of product cancelled');
         }
         return FALSE;
     }
     $this->_id = $data['virtuemart_product_id'] = $product_data->virtuemart_product_id;
     if (empty($this->_id)) {
         vmError('Product not stored, no id');
         return FALSE;
     }
     //We may need to change this, the reason it is not in the other list of commands for parents
     if (!$isChild) {
         if (!empty($data['save_customfields'])) {
             if (!class_exists('VirtueMartModelCustomfields')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php';
             }
             VirtueMartModelCustomfields::storeProductCustomfields('product', $data, $product_data->virtuemart_product_id);
         }
     }
     //vmdebug('use_desired_price '.$this->_id.' '.$data['use_desired_price']);
     if (!$isChild and isset($data['use_desired_price']) and $data['use_desired_price'] == "1") {
         if (!class_exists('calculationHelper')) {
             require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php';
         }
         $calculator = calculationHelper::getInstance();
         $data['product_price'] = $calculator->calculateCostprice($this->_id, $data);
         unset($data['use_desired_price']);
         // 			vmdebug('product_price '.$data['product_price']);
     }
     if (isset($data['product_price'])) {
         if ($isChild) {
             unset($data['product_override_price']);
             unset($data['override']);
         }
         $data = $this->updateXrefAndChildTables($data, 'product_prices');
     }
     if (!empty($data['childs'])) {
         foreach ($data['childs'] as $productId => $child) {
             $child['product_parent_id'] = $data['virtuemart_product_id'];
             $child['virtuemart_product_id'] = $productId;
             $this->store($child, TRUE);
         }
     }
     if (!$isChild) {
         $data = $this->updateXrefAndChildTables($data, 'product_shoppergroups');
         $data = $this->updateXrefAndChildTables($data, 'product_manufacturers');
         if (!empty($data['categories']) && count($data['categories']) > 0) {
             $data['virtuemart_category_id'] = $data['categories'];
         } else {
             $data['virtuemart_category_id'] = array();
         }
         $data = $this->updateXrefAndChildTables($data, 'product_categories', TRUE);
         // Update waiting list
         //TODO what is this doing?
         if (!empty($data['notify_users'])) {
             if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') {
                 $waitinglist = VmModel::getModel('Waitinglist');
                 $waitinglist->notifyList($data['virtuemart_product_id']);
             }
         }
         // Process the images
         $mediaModel = VmModel::getModel('Media');
         $mediaModel->storeMedia($data, 'product');
         $errors = $mediaModel->getErrors();
         foreach ($errors as $error) {
             vmError($error);
         }
     }
     return $product_data->virtuemart_product_id;
 }
 /**
  * Store a product
  *
  * @author RolandD
  * @author Max Milbers
  * @access public
  */
 public function store(&$product, $isChild = FALSE)
 {
     if ($product) {
         $data = (array) $product;
     }
     //vmdebug('my data in product store ',$data);
     if (isset($data['intnotes'])) {
         $data['intnotes'] = trim($data['intnotes']);
     }
     // Setup some place holders
     $product_data = $this->getTable('products');
     //Set the product packaging
     if (array_key_exists('product_box', $data)) {
         $data['product_packaging'] = $data['product_box'] << 16 | $data['product_packaging'] & 0xffff;
     }
     // 		if(VmConfig::get('productlayout') == $data['layout']){
     // 			$data['layout'] = 0;
     // 		}
     //with the true, we do preloading and preserve so old values note by Max Milbers
     //	$product_data->bindChecknStore ($data, $isChild);
     $product_data->bindChecknStore($data, TRUE);
     $errors = $product_data->getErrors();
     foreach ($errors as $error) {
         vmError($error);
         return FALSE;
     }
     $this->_id = $data['virtuemart_product_id'] = $product_data->virtuemart_product_id;
     if (empty($this->_id)) {
         return FALSE;
     }
     // 	 	JPluginHelper::importPlugin('vmcustom');
     // 	 	$dispatcher = JDispatcher::getInstance();
     // 	 	$error = $dispatcher->trigger('plgVmOnStoreProduct', array('product',$data,$product_data->virtuemart_product_id));
     //We may need to change this, the reason it is not in the other list of commands for parents
     if (!$isChild) {
         if (isset($data['save_customfields'])) {
             if (!class_exists('VirtueMartModelCustomfields')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php';
             }
             VirtueMartModelCustomfields::storeProductCustomfields('product', $data, $product_data->virtuemart_product_id);
         }
     }
     // 		vmdebug('use_desired_price '.$this->_id.' '.$data['use_desired_price']);
     if (!$isChild and isset($data['use_desired_price']) and $data['use_desired_price'] == "1") {
         if (!class_exists('calculationHelper')) {
             require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php';
         }
         $calculator = calculationHelper::getInstance();
         $data['product_price'] = $calculator->calculateCostprice($this->_id, $data);
         unset($data['use_desired_price']);
         // 			vmdebug('product_price '.$data['product_price']);
     }
     if (isset($data['product_price'])) {
         if ($isChild) {
             unset($data['product_override_price']);
             unset($data['override']);
         }
         $data = $this->updateXrefAndChildTables($data, 'product_prices');
     }
     if (!empty($data['childs'])) {
         foreach ($data['childs'] as $productId => $child) {
             $child['product_parent_id'] = $data['virtuemart_product_id'];
             $child['virtuemart_product_id'] = $productId;
             $this->store($child, TRUE);
         }
     }
     if (!$isChild) {
         $data = $this->updateXrefAndChildTables($data, 'product_shoppergroups');
         $data = $this->updateXrefAndChildTables($data, 'product_manufacturers');
         if (!empty($data['categories']) && count($data['categories']) > 0) {
             $data['virtuemart_category_id'] = $data['categories'];
         } else {
             $data['virtuemart_category_id'] = array();
         }
         $data = $this->updateXrefAndChildTables($data, 'product_categories', TRUE);
         // Update waiting list
         //TODO what is this doing?
         if (!empty($data['notify_users'])) {
             if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') {
                 $waitinglist = VmModel::getModel('Waitinglist');
                 $waitinglist->notifyList($data['virtuemart_product_id']);
             }
         }
         // Process the images
         $mediaModel = VmModel::getModel('Media');
         $mediaModel->storeMedia($data, 'product');
         $errors = $mediaModel->getErrors();
         foreach ($errors as $error) {
             vmError($error);
         }
     }
     return $product_data->virtuemart_product_id;
 }
Exemple #4
0
 /**
  * Store a product
  *
  * @author RolandD
  * @author Max Milbers
  * @access public
  */
 public function store(&$product, $isChild = FALSE)
 {
     JRequest::checkToken() or jexit('Invalid Token');
     if ($product) {
         $data = (array) $product;
     }
     if (!class_exists('Permissions')) {
         require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'permissions.php';
     }
     $perm = Permissions::getInstance();
     $superVendor = $perm->isSuperVendor();
     if (empty($superVendor)) {
         vmError('You are not a vendor or administrator, storing of product cancelled');
         return FALSE;
     }
     if (isset($data['intnotes'])) {
         $data['intnotes'] = trim($data['intnotes']);
     }
     // Setup some place holders
     $product_data = $this->getTable('products');
     //Set the product packaging
     if (array_key_exists('product_packaging', $data)) {
         $data['product_packaging'] = str_replace(',', '.', $data['product_packaging']);
     }
     //with the true, we do preloading and preserve so old values note by Max Milbers
     //	$product_data->bindChecknStore ($data, $isChild);
     $stored = $product_data->bindChecknStore($data, TRUE);
     $errors = $product_data->getErrors();
     if (!$stored or count($errors) > 0) {
         foreach ($errors as $error) {
             vmError('Product store ' . $error);
         }
         if (!$stored) {
             vmError('You are not an administrator or the correct vendor, storing of product cancelled');
         }
         return FALSE;
     }
     $this->_id = $data['virtuemart_product_id'] = (int) $product_data->virtuemart_product_id;
     if (empty($this->_id)) {
         vmError('Product not stored, no id');
         return FALSE;
     }
     //We may need to change this, the reason it is not in the other list of commands for parents
     if (!$isChild) {
         if (!empty($data['save_customfields'])) {
             if (!class_exists('VirtueMartModelCustomfields')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'models' . DS . 'customfields.php';
             }
             VirtueMartModelCustomfields::storeProductCustomfields('product', $data, $product_data->virtuemart_product_id);
         }
     }
     // Get old IDS
     $this->_db->setQuery('SELECT `virtuemart_product_price_id` FROM `#__virtuemart_product_prices` WHERE virtuemart_product_id =' . $this->_id);
     $old_price_ids = $this->_db->loadResultArray();
     foreach ($data['mprices']['product_price'] as $k => $product_price) {
         $pricesToStore = array();
         $pricesToStore['virtuemart_product_id'] = $this->_id;
         $pricesToStore['virtuemart_product_price_id'] = (int) $data['mprices']['virtuemart_product_price_id'][$k];
         if (!$isChild) {
             //$pricesToStore['basePrice'] = $data['mprices']['basePrice'][$k];
             $pricesToStore['product_override_price'] = $data['mprices']['product_override_price'][$k];
             $pricesToStore['override'] = (int) $data['mprices']['override'][$k];
             $pricesToStore['virtuemart_shoppergroup_id'] = (int) $data['mprices']['virtuemart_shoppergroup_id'][$k];
             $pricesToStore['product_tax_id'] = (int) $data['mprices']['product_tax_id'][$k];
             $pricesToStore['product_discount_id'] = (int) $data['mprices']['product_discount_id'][$k];
             $pricesToStore['product_currency'] = (int) $data['mprices']['product_currency'][$k];
             $pricesToStore['product_price_publish_up'] = $data['mprices']['product_price_publish_up'][$k];
             $pricesToStore['product_price_publish_down'] = $data['mprices']['product_price_publish_down'][$k];
             $pricesToStore['price_quantity_start'] = (int) $data['mprices']['price_quantity_start'][$k];
             $pricesToStore['price_quantity_end'] = (int) $data['mprices']['price_quantity_end'][$k];
         }
         if (!$isChild and isset($data['mprices']['use_desired_price'][$k]) and $data['mprices']['use_desired_price'][$k] == "1") {
             if (!class_exists('calculationHelper')) {
                 require JPATH_VM_ADMINISTRATOR . DS . 'helpers' . DS . 'calculationh.php';
             }
             $calculator = calculationHelper::getInstance();
             $pricesToStore['salesPrice'] = $data['mprices']['salesPrice'][$k];
             $pricesToStore['product_price'] = $data['mprices']['product_price'][$k] = $calculator->calculateCostprice($this->_id, $pricesToStore);
             unset($data['mprices']['use_desired_price'][$k]);
         } else {
             $pricesToStore['product_price'] = $data['mprices']['product_price'][$k];
         }
         if (isset($data['mprices']['product_price'][$k])) {
             if ($isChild) {
                 unset($data['mprices']['product_override_price'][$k]);
                 unset($pricesToStore['product_override_price']);
                 unset($data['mprices']['override'][$k]);
                 unset($pricesToStore['override']);
             }
             //$data['mprices'][$k] = $data['virtuemart_product_id'];
             $this->updateXrefAndChildTables($pricesToStore, 'product_prices', $isChild);
             $key = array_search($pricesToStore['virtuemart_product_price_id'], $old_price_ids);
             if ($key !== false) {
                 unset($old_price_ids[$key]);
             }
         }
     }
     if (count($old_price_ids)) {
         // delete old unused Customfields
         $this->_db->setQuery('DELETE FROM `#__virtuemart_product_prices` WHERE `virtuemart_product_price_id` in ("' . implode('","', $old_price_ids) . '") ');
         $this->_db->query();
     }
     if (!empty($data['childs'])) {
         foreach ($data['childs'] as $productId => $child) {
             $child['product_parent_id'] = $data['virtuemart_product_id'];
             $child['virtuemart_product_id'] = $productId;
             $this->store($child, TRUE);
         }
     }
     if (!$isChild) {
         $data = $this->updateXrefAndChildTables($data, 'product_shoppergroups');
         $data = $this->updateXrefAndChildTables($data, 'product_manufacturers');
         if (!empty($data['categories']) && count($data['categories']) > 0) {
             $data['virtuemart_category_id'] = $data['categories'];
         } else {
             $data['virtuemart_category_id'] = array();
         }
         $data = $this->updateXrefAndChildTables($data, 'product_categories', TRUE);
         // Update waiting list
         //TODO what is this doing?
         if (!empty($data['notify_users'])) {
             if ($data['product_in_stock'] > 0 && $data['notify_users'] == '1') {
                 $waitinglist = VmModel::getModel('Waitinglist');
                 $waitinglist->notifyList($data['virtuemart_product_id']);
             }
         }
         // Process the images
         $mediaModel = VmModel::getModel('Media');
         $mediaModel->storeMedia($data, 'product');
         $errors = $mediaModel->getErrors();
         foreach ($errors as $error) {
             vmError($error);
         }
     }
     return $product_data->virtuemart_product_id;
 }