/** * Generate all combination of product attributes * @param object * @return string */ public function generate($dc) { $table = Product::getTable(); $objProduct = Product::findByPk($dc->id); $doNotSubmit = false; $strBuffer = ''; $arrOptions = array(); foreach ($objProduct->getRelated('type')->getVariantAttributes() as $attribute) { if ($GLOBALS['TL_DCA'][$table]['fields'][$attribute]['attributes']['variant_option']) { $GLOBALS['TL_DCA'][$table]['fields'][$attribute]['eval']['mandatory'] = true; $GLOBALS['TL_DCA'][$table]['fields'][$attribute]['eval']['multiple'] = true; $arrField = \CheckBox::getAttributesFromDca($GLOBALS['TL_DCA'][$table]['fields'][$attribute], $attribute); foreach ($arrField['options'] as $k => $option) { if ($option['value'] == '') { unset($arrField['options'][$k]); } } $objWidget = new \CheckBox($arrField); if (\Input::post('FORM_SUBMIT') == $table . '_generate') { $objWidget->validate(); if ($objWidget->hasErrors()) { $doNotSubmit = true; } else { $arrOptions[$attribute] = $objWidget->value; } } $strBuffer .= $objWidget->parse(); } } if (\Input::post('FORM_SUBMIT') == $table . '_generate' && !$doNotSubmit) { $time = time(); $arrCombinations = array(); foreach ($arrOptions as $name => $options) { $arrTemp = $arrCombinations; $arrCombinations = array(); foreach ($options as $option) { if (empty($arrTemp)) { $arrCombinations[][$name] = $option; continue; } foreach ($arrTemp as $temp) { $temp[$name] = $option; $arrCombinations[] = $temp; } } } foreach ($arrCombinations as $combination) { $objVariant = \Database::getInstance()->prepare("\n SELECT * FROM {$table} WHERE pid=? AND " . implode('=? AND ', array_keys($combination)) . "=?")->execute(array_merge(array($objProduct->id), $combination)); if (!$objVariant->numRows) { $arrInherit = array_diff($objProduct->getRelated('type')->getVariantAttributes(), Attribute::getVariantOptionFields(), Attribute::getCustomerDefinedFields(), Attribute::getSystemColumnsFields()); $arrSet = array_merge($combination, array('tstamp' => $time, 'pid' => $objProduct->id, 'inherit' => $arrInherit ?: null)); \Database::getInstance()->prepare("INSERT INTO {$table} %s")->set($arrSet)->execute(); } } \Controller::redirect(str_replace('&key=generate', '', \Environment::get('request'))); } // Return form return ' <div id="tl_buttons"> <a href="' . ampersand(str_replace('&key=generate', '', \Environment::get('request'))) . '" class="header_back" title="' . specialchars($GLOBALS['TL_LANG']['MSC']['backBT']) . '">' . $GLOBALS['TL_LANG']['MSC']['backBT'] . '</a> </div> <h2 class="sub_headline">' . sprintf($GLOBALS['TL_LANG'][$table]['generate'][1], $dc->id) . '</h2>' . \Message::generate() . ' <form action="' . ampersand(\Environment::get('request'), true) . '" id="' . $table . '_generate" class="tl_form" method="post"> <div class="tl_formbody_edit"> <input type="hidden" name="FORM_SUBMIT" value="' . $table . '_generate"> <input type="hidden" name="REQUEST_TOKEN" value="' . REQUEST_TOKEN . '"> <div class="tl_tbox block"> ' . $strBuffer . ' </div> </div> <div class="tl_formbody_submit"> <div class="tl_submit_container"> <input type="submit" name="save" id="save" class="tl_submit" accesskey="s" value="' . specialchars($GLOBALS['TL_LANG']['tl_iso_product']['generate'][0]) . '"> </div> </div> </form>'; }
/** * In a variant, only variant and non-inherited fields can be marked as modified * * @param string $strKey */ public function markModified($strKey) { if ($this->isVariant()) { $arrAttributes = array_diff($this->getVariantAttributes(), $this->getInheritedFields(), Attribute::getCustomerDefinedFields()); } else { $arrAttributes = array_diff($this->getAttributes(), Attribute::getCustomerDefinedFields()); } if (!in_array($strKey, $arrAttributes) && $GLOBALS['TL_DCA'][static::$strTable]['fields'][$strKey]['attributes']['legend'] != '') { return; } parent::markModified($strKey); }
/** * Get a list of default options based on filter attributes * @return array */ protected function getDefaultProductOptions() { $arrFields = array_merge(Attribute::getVariantOptionFields(), Attribute::getCustomerDefinedFields()); if (empty($arrFields)) { return array(); } $arrOptions = array(); $arrFilters = Isotope::getRequestCache()->getFiltersForModules($this->iso_filterModules); foreach ($arrFilters as $arrConfig) { if (in_array($arrConfig['attribute'], $arrFields) && ($arrConfig['operator'] == '=' || $arrConfig['operator'] == '==' || $arrConfig['operator'] == 'eq')) { $arrOptions[$arrConfig['attribute']] = $arrConfig['value']; } } return $arrOptions; }