/** * Check product options and type options and save them, too * * @return void */ protected function _beforeSave() { $this->cleanCache(); $this->setTypeHasOptions(false); $this->setTypeHasRequiredOptions(false); $this->getTypeInstance()->beforeSave($this); $hasOptions = false; $hasRequiredOptions = false; /** * $this->_canAffectOptions - set by type instance only * $this->getCanSaveCustomOptions() - set either in controller when "Custom Options" ajax tab is loaded, * or in type instance as well */ $this->canAffectOptions($this->_canAffectOptions && $this->getCanSaveCustomOptions()); if ($this->getCanSaveCustomOptions()) { $options = $this->getProductOptions(); if (is_array($options)) { $this->setIsCustomOptionChanged(true); foreach ($this->getProductOptions() as $option) { $this->getOptionInstance()->addOption($option); if (!isset($option['is_delete']) || $option['is_delete'] != '1') { $hasOptions = true; } } foreach ($this->getOptionInstance()->getOptions() as $option) { if ($option['is_require'] == '1') { $hasRequiredOptions = true; break; } } } } /** * Set true, if any * Set false, ONLY if options have been affected by Options tab and Type instance tab */ if ($hasOptions || (bool) $this->getTypeHasOptions()) { $this->setHasOptions(true); if ($hasRequiredOptions || (bool) $this->getTypeHasRequiredOptions()) { $this->setRequiredOptions(true); } elseif ($this->canAffectOptions()) { $this->setRequiredOptions(false); } } elseif ($this->canAffectOptions()) { $this->setHasOptions(false); $this->setRequiredOptions(false); } if (!$this->getOrigData('website_ids')) { $websiteIds = $this->_getResource()->getWebsiteIds($this); $this->setOrigData('website_ids', $websiteIds); } parent::_beforeSave(); }