private static function _filterGenerators(array $generators, $component, $componentClass, Kwf_Component_Select $select) { $selectParts = $select->getParts(); $ret = array(); foreach ($generators as $g) { //performance: page generator nur zurückgeben wenn: component eine aus pages-tabelle ist oder eine category if ($component && $g instanceof Kwc_Root_Category_Generator && !is_numeric($component->componentId)) { $hasPageGenerator = false; foreach (Kwc_Abstract::getSetting($component->componentClass, 'generators') as $i) { static $isPageGenerator = array(); if (!isset($isPageGenerator[$i['class']])) { $isPageGenerator[$i['class']] = is_instance_of($i['class'], 'Kwc_Root_Category_Generator'); } if ($isPageGenerator[$i['class']]) { $hasPageGenerator = true; break; } } if (!$hasPageGenerator) { continue; } } if (isset($selectParts[Kwf_Component_Select::WHERE_GENERATOR_CLASS])) { $value = $selectParts[Kwf_Component_Select::WHERE_GENERATOR_CLASS]; if (!$g instanceof $value) { continue; } } if (isset($selectParts[Kwf_Component_Select::WHERE_GENERATOR])) { $value = $selectParts[Kwf_Component_Select::WHERE_GENERATOR]; if ($g->_class != $componentClass || $value != $g->_settings['generator']) { continue; } } if (isset($selectParts[Kwf_Component_Select::WHERE_FILENAME])) { if (!isset($selectParts[Kwf_Component_Select::WHERE_PSEUDO_PAGE])) { $selectParts[Kwf_Component_Select::WHERE_PSEUDO_PAGE] = true; } } $flags = array(Kwf_Component_Select::WHERE_PAGE_GENERATOR => 'pageGenerator', Kwf_Component_Select::WHERE_PAGE => 'page', Kwf_Component_Select::WHERE_PSEUDO_PAGE => 'pseudoPage', Kwf_Component_Select::WHERE_BOX => 'box', Kwf_Component_Select::WHERE_MULTI_BOX => 'multiBox'); foreach ($flags as $part => $flag) { if (isset($selectParts[$part])) { $value = $selectParts[$part]; $flags = $g->getGeneratorFlags(); if (isset($flags[$flag]) && $flags[$flag]) { if (!$value) { continue 2; } } else { if ($value) { continue 2; } } } } if (isset($selectParts[Kwf_Component_Select::WHERE_GENERATOR_FLAGS])) { $flags = $g->getGeneratorFlags(); foreach ($selectParts[Kwf_Component_Select::WHERE_GENERATOR_FLAGS] as $flag => $value) { if (!isset($flags[$flag])) { $flags[$flag] = null; } if ($flags[$flag] != $value) { continue 2; } } } if (isset($selectParts[Kwf_Component_Select::WHERE_UNIQUE])) { $value = $selectParts[Kwf_Component_Select::WHERE_UNIQUE]; if (isset($g->_settings['unique']) && $g->_settings['unique']) { if (!$value) { continue; } } else { if ($value) { continue; } } } if (isset($selectParts[Kwf_Component_Select::WHERE_INHERIT])) { $value = $selectParts[Kwf_Component_Select::WHERE_INHERIT]; if (isset($g->_settings['inherit']) && $g->_settings['inherit']) { if (!$value) { continue; } } else { if ($value) { continue; } } } if (isset($selectParts[Kwf_Component_Select::WHERE_SHOW_IN_MENU])) { $value = $selectParts[Kwf_Component_Select::WHERE_SHOW_IN_MENU]; if (isset($g->_settings['showInMenu']) && $g->_settings['showInMenu']) { if (!$value) { continue; } } else { if ($value) { continue; } } } if (isset($selectParts[Kwf_Component_Select::WHERE_HAS_EDIT_COMPONENTS]) && $selectParts[Kwf_Component_Select::WHERE_HAS_EDIT_COMPONENTS]) { if (!Kwc_Abstract::hasSetting($g->_class, 'editComponents')) { continue; } $editComponents = Kwc_Abstract::getSetting($g->_class, 'editComponents'); if ($g->getGeneratorFlag('table')) { //es kann entweder ein table generator angegeben werden //da kommen dann alle unterkomponenten daher if (!in_array($g->_settings['generator'], $editComponents)) { continue; } } else { if ($g->getGeneratorFlag('staticSelect')) { if (!in_array($g->getGeneratorKey(), $editComponents)) { //oder ein static generator (wenn er nur eine unter komponente hat) continue; } } else { //oder eine komponente eines static generators $continue = true; foreach (array_keys($g->_settings['component']) as $componentKey) { if (in_array($componentKey, $editComponents)) { $continue = false; break; } } if ($continue) { continue; } } if (isset($g->_settings['unique']) && $g->_settings['unique']) { //vererbte, unique nur bei eigener komponente zurückgeben if ($g->_class != $componentClass) { continue; } } } } if (isset($selectParts[Kwf_Component_Select::WHERE_COMPONENT_CLASSES])) { $componentClasses = $selectParts[Kwf_Component_Select::WHERE_COMPONENT_CLASSES]; $generatorComponentClasses = $g->getChildComponentClasses(); $continue = true; foreach ($generatorComponentClasses as $cc) { if (in_array($cc, $componentClasses)) { $continue = false; break; } } if ($continue) { continue; } } if (isset($selectParts[Kwf_Component_Select::WHERE_HOME]) && $selectParts[Kwf_Component_Select::WHERE_HOME]) { if (!$g->getGeneratorFlag('hasHome')) { continue; } } if (!$g->getChildComponentClasses($select)) { continue; } $ret[] = $g; } return $ret; }