Ejemplo n.º 1
0
 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;
 }