public function saveDealerGallery(Zefir_Dealers_Model_Dealer $dealer) { $galleryPost = $dealer->getGallery(); if (array_key_exists('block_id', $galleryPost)) { $prefix = $galleryPost['block_id']; $images = $dealer->getData($prefix . '_save'); $data = json_decode($images['images'], true); foreach ($data as $image) { if ($image['removed']) { $this->removeImage($image); continue; } elseif (!array_key_exists('image_id', $image)) { $image['file'] = $this->copyImage($image); } try { $image['dealer_id'] = $dealer->getId(); $imageObject = Mage::getModel(get_class($this)); $imageObject->setData($image); $imageObject->save(); } catch (Exception $e) { Mage::logException($e); } } } }
/** * Links should be a serialized by grid serializer array with the following structure * array( * [product_id] => array( [is_in_stock] => 1|0|null ), * ... * ) * * @param Zefir_Dealers_Model_Dealer $dealer * @return Zefir_Dealers_Model_Product_Link $this */ public function saveDealerProducts(Zefir_Dealers_Model_Dealer $dealer) { $links = $dealer->getLinks(); if (null !== $links) { $links = Mage::helper('adminhtml/js')->decodeGridSerializedInput($links['products']); $this->getResource()->saveDealerProducts($dealer, $links); } return $this; }
/** * Check if we should request webservice for new coordinates * * @param Zefir_Dealers_Model_Dealer $dealer * @return boolean */ protected function _shouldCheckGeoData(Zefir_Dealers_Model_Dealer $dealer) { //auto_coordinates checkbox was checked $force = $dealer->getAutoCoordinates() || Mage::app()->getRequest()->getPost('auto_coordinates'); if ($force != null) { return true; } else { return $dealer->dataHasChangedFor('street') || $dealer->dataHasChangedFor('city') || $dealer->dataHasChangedFor('zipcode') || $dealer->dataHasChangedFor('region_id') || $dealer->dataHasChangedFor('region') || $dealer->dataHasChangedFor('country'); } }
/** * Save dealer-product association * * @param Zefir_Dealers_Model_Dealer $dealer * @param array $links * @return Zefir_Dealers_Model_Resource_Product_Link $this */ public function saveDealerProducts($dealer, $links) { $adapter = $this->_getWriteAdapter(); $select = $adapter->select()->from($this->getMainTable(), array('product_id', 'link_id'))->where('dealer_id = :dealer_id'); //currently existing products $existing = $adapter->fetchPairs($select, array('dealer_id' => $dealer->getId())); $current_selection = array_keys($links); $existing_selection = array_keys($existing); //products removed from dealer $deleted = array_diff($existing_selection, $current_selection); foreach ($deleted as $product_id) { if (array_key_exists($product_id, $existing)) { $linkId = $existing[$product_id]; $adapter->delete($this->getMainTable(), array('link_id = ?' => $linkId)); } unset($links[$product_id]); //remove product from links to process } //new products to add $new = array_diff($current_selection, $existing_selection); foreach ($new as $product_id) { $values = array('dealer_id' => $dealer->getId(), 'product_id' => $product_id, 'in_stock' => $links[$product_id]['is_in_stock'] != '' ? $links[$product_id]['is_in_stock'] : null); $link = Mage::getModel('zefir_dealers/product_link')->setData($values)->save(); unset($link); //free memory; there might be many products here unset($links[$product_id]); //remove product from links to process } //remain products should be only those that already are save and we only need to update stock status foreach ($links as $product_id => $stock) { if (array_key_exists($product_id, $existing)) { $update = Mage::getModel('zefir_dealers/product_link')->load($existing[$product_id]); $stockStatus = $stock['is_in_stock'] != '' ? $stock['is_in_stock'] : null; $update->setInStock($stockStatus)->save(); unset($update); } } return $this; }