public function modificationsAction()
 {
     $id = $this->_request->getParam('id');
     $select = $this->_subproductsModelMapper->getDbTable()->select()->where('deleted != ?', 1)->order('order ASC');
     $jsonData = array('parentId' => $id, 'columns' => array(), 'rows' => array());
     $modifications = $this->_modelMapper->findSubproductsRel($id, $select, true);
     if (!empty($modifications)) {
         $selectSubproductParams = $this->_subproductsParamsMapper->getDbTable()->select()->order('order ASC');
         $subproductProperty = $this->_modelMapper->findSubproductParams($id, $selectSubproductParams, true);
         $jsonData['columns'] = $subproductProperty;
         $modificationsTableValues = array();
         foreach ($modifications as $modification) {
             $modificationPropertyValues = $this->_subproductsModelMapper->findSubProductParamValue($modification['id']);
             $values['item'] = $modification;
             $values['values'] = array();
             foreach ($modificationPropertyValues as $modificationPropertyValue) {
                 $values['values'][] = $modificationPropertyValue->getOptions();
             }
             $modificationsTableValues[] = $values;
         }
         $jsonData['rows'] = $modificationsTableValues;
         //Zend_Debug::dump($jsonData);
     }
     $this->_helper->json->sendJson($jsonData);
 }
 /**
  * @param $subproductProperty
  * @return Catalog_Model_SubproductParams
  */
 public function newSubproductProperty(&$subproductProperty)
 {
     $subproductParams = new Catalog_Model_SubproductParams();
     $subproductParamsOrder = $subproductProperty['order'] && $subproductProperty['order'] != '' ? $subproductProperty['order'] : 0;
     $subproductParams->setProductId($subproductProperty['productId'])->setName($subproductProperty['name'])->setOrder($subproductParamsOrder);
     $this->_subproductsParamsMapper->save($subproductParams);
     $id = $this->_subproductsParamsMapper->getDbTable()->getAdapter()->lastInsertId();
     $subproductParams->setId($id);
     $modifications = $this->_subproductsModelMapper->fetchAll($this->_subproductsModelMapper->getDbTable()->select()->where('parent_id = ?', $subproductProperty['productId']));
     if (!empty($modifications)) {
         foreach ($modifications as $modification) {
             $subproductParamsValue = new Catalog_Model_SubproductParamsValues();
             $subproductParamsValue->setParamId($id)->setSubproductId($modification->getId())->setValue('-');
             $this->_subproductParamsValuesMapper->save($subproductParamsValue);
         }
     }
     return $subproductParams;
 }
 /**
  * @param SimpleXMLElement $element
  * @param Catalog_Model_Products $product
  */
 public function addModificationTableXml(SimpleXMLElement $element, Catalog_Model_Products $product)
 {
     $selectModification = $this->_subproductsModelMapper->getDbTable()->select()->order('order ASC');
     $cache = Zend_Cache::factory('Core', 'File', array('lifetime' => 3600 * 24 * 2, 'automatic_serialization' => true), array('cache_dir' => '../cache/modifications/'));
     if (!($modifications = $cache->load('modifications' . $product->getId()))) {
         $modifications = $this->_productsModelMapper->findSubproductsRel($product->getId(), $selectModification);
         $cache->save($modifications, 'modifications' . $product->getId(), array('modificationsTable'));
     }
     if ($modifications && !empty($modifications)) {
         $selectSubproductParams = $this->_subproductsParamsMapper->getDbTable()->select()->order('order ASC');
         $subproductProperty = $this->_productsModelMapper->findSubproductParams($product->getId(), $selectSubproductParams);
         foreach ($modifications as $modification) {
             /* @var $modification Catalog_Model_Subproducts */
             $row = $element->addChild('tr');
             $row->addAttribute('id', $modification->getId());
             $row->addChild('td', $modification->getSku())->addAttribute('title', 'Наименование');
             foreach ($subproductProperty as $property) {
                 /* @var $property Catalog_Model_SubproductParams */
                 $row->addChild('td', $this->_getModificationParamValue($modification->getId(), $property->getId()))->addAttribute('title', $property->getName());
             }
         }
     }
 }
 /**
  * @param Catalog_Model_Products $product
  * @param bool $toWin
  * @return array
  */
 public function productModificationTableValues(Catalog_Model_Products $product, $toWin = false)
 {
     $productMapper = new Catalog_Model_Mapper_Products();
     $subproducts = new Catalog_Model_Mapper_Subproducts();
     $select = $subproducts->getDbTable()->select()->order('order ASC');
     $modifications = $productMapper->findSubproductsRel($product->getId(), $select);
     $modificationsTableValues = array();
     if (!empty($modifications)) {
         $modificationsTableValues['headTable'] = $this->productModificationTableTitle($product, $toWin);
         foreach ($modifications as $modification) {
             $modificationPropertyValues = $subproducts->findSubProductParamValue($modification->getId());
             $values = array();
             $values[] = $modification->getSku();
             foreach ($modificationPropertyValues as $modificationPropertyValue) {
                 $values[] = !$toWin ? $modificationPropertyValue->getValue() : $this->_toWindow($modificationPropertyValue->getValue());
             }
             $modificationsTableValues[] = $values;
         }
     }
     return $modificationsTableValues;
 }
 /**
  * @param $id
  * @param Zend_Db_Table_Select|null $select
  * @return Catalog_Model_Subproducts[]|null
  * @throws Zend_Db_Table_Exception
  * @throws Zend_Db_Table_Row_Exception
  */
 public function findSubproductsRel($id, Zend_Db_Table_Select $select = null, $isArray = false)
 {
     $result = $this->getDbTable()->find($id);
     if (0 == count($result)) {
         return null;
     }
     $product = $result->current();
     $resultSet = $product->findDependentRowset('Catalog_Model_DbTable_Subproducts', 'SubproductsRel', $select);
     $entries = array();
     $modelMapper = new Catalog_Model_Mapper_Subproducts();
     foreach ($resultSet as $row) {
         $entry = new Catalog_Model_Subproducts();
         $entry = $modelMapper->_setDbData($row, $entry);
         $entries[] = !$isArray ? $entry : $entry->getOptions();
     }
     return $entries;
 }
 /**
  * @param array $modifications
  * @return array
  */
 public function modificationsTableValues($modifications)
 {
     $subproducts = new Catalog_Model_Mapper_Subproducts();
     $modificationsTableValues = array();
     if (!empty($modifications)) {
         foreach ($modifications as $modification) {
             $modificationPropertyValues = $subproducts->findSubProductParamValue($modification->getId());
             $values = array();
             $values[] = $this->transformSku($modification->getSku());
             foreach ($modificationPropertyValues as $modificationPropertyValue) {
                 $values[] = $modificationPropertyValue->getValue();
             }
             $modificationsTableValues[] = $values;
         }
     }
     return $modificationsTableValues;
 }