/** * Needs to be called after (multiple) duplicate() calls with a common root */ public static function afterDuplicate(Kwf_Component_Data $rootSource, Kwf_Component_Data $rootTarget) { foreach (Kwf_Component_Abstract::getComponentClasses() as $c) { $admin = Kwf_Component_Abstract_Admin::getInstance($c); $admin->afterDuplicate($rootSource, $rootTarget); } }
public function dynamic($class) { $component = $this->_getView()->data; $dynamicClass = Kwf_Component_Abstract_Admin::getComponentClass($component->componentClass, $class); if (!class_exists($dynamicClass)) { $dynamicClass = 'Kwf_Component_Dynamic_' . $class; } if (!class_exists($dynamicClass)) { throw new Kwf_Exception("Dynamic Class not found: {$dynamicClass}"); } $config = array('class' => $dynamicClass, 'arguments' => array_slice(func_get_args(), 1)); return $this->_getRenderPlaceholder($component->componentId, $config); }
public static function getSetting($class, $setting) { if (self::$_rebuildingSettings) { //um endlosschleife in settingsCache zu verhindern self::_verifyComponentClass($class); if ($setting == 'parentClasses') { $p = strpos($class, '.') ? substr($class, 0, strpos($class, '.')) : $class; $ret = array($class); while ($p = get_parent_class($p)) { $ret[] = $p; } } else { if ($setting == 'parentFilePaths') { //value = klasse, key=pfad $ret = array(); $cwd = str_replace(DIRECTORY_SEPARATOR, '/', realpath(getcwd())); foreach (self::getSetting($class, 'parentClasses') as $c) { $c = strpos($c, '.') ? substr($c, 0, strpos($c, '.')) : $c; $path = self::_findComponentFile($c); if (substr($path, -14) == DIRECTORY_SEPARATOR . 'Component.php' || substr($path, -14) == '/Component.php') { $ret[substr($path, 0, -14)] = substr($c, 0, -10); } else { $ret[substr($path, 0, -4)] = $c; //nur .php } } } else { if ($setting == 'componentFiles') { $ret = Kwf_Component_Abstract_Admin::getComponentFiles($class, array('Master.tpl' => array('filename' => 'Master', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Component.tpl' => array('filename' => 'Component', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Partial.tpl' => array('filename' => 'Partial', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Admin' => array('filename' => 'Admin', 'ext' => 'php', 'returnClass' => true), 'Controller' => array('filename' => 'Controller', 'ext' => 'php', 'returnClass' => true), 'FrontendForm' => array('filename' => 'FrontendForm', 'ext' => 'php', 'returnClass' => true), 'Form' => array('filename' => 'Form', 'ext' => 'php', 'returnClass' => true), 'css' => array('filename' => 'Component', 'ext' => array('css', 'scss', 'override.scss'), 'returnClass' => false, 'multiple' => true), 'masterCss' => array('filename' => 'Master', 'ext' => array('css', 'scss'), 'returnClass' => false, 'multiple' => true), 'js' => array('filename' => 'Component', 'ext' => array('js', 'defer.js', 'override.js', 'override.defer.js'), 'returnClass' => false, 'multiple' => true))); $override = false; foreach ($ret['css'] as $k => $i) { if ($override) { unset($ret['css'][$k]); } else { if (substr($i, -14) == '.override.scss') { $override = true; } } } $override = false; foreach ($ret['js'] as $k => $i) { if (substr($i, -9) == '.defer.js') { continue; } if ($override) { unset($ret['js'][$k]); } else { if (substr($i, -12) == '.override.js') { $override = true; } } } $override = false; foreach ($ret['js'] as $k => $i) { if (substr($i, -9) != '.defer.js') { continue; } if ($override) { unset($ret['js'][$k]); } else { if (substr($i, -18) == '.override.defer.js') { $override = true; } } } } else { $settings = self::_loadCacheSettings($class); if (!array_key_exists($setting, $settings)) { throw new Kwf_Exception("Couldn't find required setting '{$setting}' for {$class}."); } $ret = $settings[$setting]; if ($setting == 'generators') { if (isset($settings['childSettings'])) { $processed = array(); foreach ($settings['childSettings'] as $csKeys => $childSettings) { $csKeys = explode('.', $csKeys); $csKey = explode('_', $csKeys[0]); //just the first if (!isset($ret[$csKey[0]])) { throw new Kwf_Exception("invalid childSetting; generator '{$csKey['0']}' does not exist"); } if (is_array($ret[$csKey[0]]['component'])) { if (!isset($csKey[1])) { throw new Kwf_Exception("invalid childSetting; component key required"); } if (!isset($ret[$csKey[0]]['component'][$csKey[1]])) { throw new Kwf_Exception("invalid childSetting; component '{$csKey['1']}' does not exist for generator '{$csKey['0']}'"); } $ret[$csKey[0]]['component'][$csKey[1]] = self::_addChildSettingsParam($ret[$csKey[0]]['component'][$csKey[1]], $class . '>' . $csKey[0] . '_' . $csKey[1]); } else { $ret[$csKey[0]]['component'] = self::_addChildSettingsParam($ret[$csKey[0]]['component'], $class . '>' . $csKey[0]); } } } $param = strpos($class, '.') ? substr($class, strpos($class, '.') + 1) : null; if ($param && substr($param, 0, 2) == 'cs') { $childSettingsComponentClass = substr($param, 2, strpos($param, '>') - 2); $childSettingsKey = str_replace('>', '.', substr($param, strpos($param, '>') + 1)); $allChildSettings = Kwc_Abstract::getSetting($childSettingsComponentClass, 'childSettings'); foreach ($allChildSettings as $csKeys => $childSettings) { if (substr($csKeys, 0, strlen($childSettingsKey)) != $childSettingsKey) { continue; } if ($csKeys == $childSettingsKey) { continue; } $csKeys = explode('.', substr($csKeys, strlen($childSettingsKey) + 1)); $csKey = explode('_', $csKeys[0]); //just the first if (!isset($ret[$csKey[0]])) { throw new Kwf_Exception("invalid childSetting; generator '{$csKey['0']}' does not exist for '{$class}'"); } if (is_array($ret[$csKey[0]]['component'])) { if (!isset($csKey[1])) { throw new Kwf_Exception("invalid childSetting; component key required"); } if (!isset($ret[$csKey[0]]['component'][$csKey[1]])) { throw new Kwf_Exception("invalid childSetting; component '{$csKey['1']}' does not exist for generator '{$csKey['0']}'"); } $ret[$csKey[0]]['component'][$csKey[1]] = self::_addChildSettingsParam($ret[$csKey[0]]['component'][$csKey[1]], substr($param, 2) . '>' . $csKey[0] . '_' . $csKey[1]); } else { $ret[$csKey[0]]['component'] = self::_addChildSettingsParam($ret[$csKey[0]]['component'], substr($param, 2) . '>' . $csKey[0]); } } } //normalize generator component to an array removing false values foreach ($ret as $genKey => $gen) { if (!is_array($gen['component'])) { if (!$gen['component']) { //this generator has no component set, remove it unset($ret[$genKey]); } else { $ret[$genKey]['component'] = array($genKey => $gen['component']); } } else { foreach ($ret[$genKey]['component'] as $k => $i) { if (!$i) { unset($ret[$genKey]['component'][$k]); } } if (!$ret[$genKey]['component']) { //this generator has no component set, remove it unset($ret[$genKey]); } } } } } } } return $ret; } $cacheId = 'cs-' . $class . '-' . $setting; $ret = Kwf_Cache_SimpleStatic::fetch($cacheId, $success); if ($success) { return $ret; } if (!self::$_settings) { self::_getSettingsCached(); } try { $ret = self::$_settings[$class][$setting]; } catch (ErrorException $e) { //diese checks im nachhinein machen damit sie nicht immer gemacht werden (diese fkt wird am meisten von allen aufgerufen) //und hier dann versuchen eine bessere exception msg zu erstellen if (!is_string($class)) { throw new Kwf_Exception("Invalid component '{$class}'"); } else { if (!isset(self::$_settings[$class])) { throw new Kwf_Exception("No Settings for component '{$class}' found; it is probably not in allComponentClasses."); } else { if (!array_key_exists($setting, self::$_settings[$class])) { // man könnte hier isset() machen, nur wenn das setting NULL ist, gibt es false zurück... scheis PHP :) throw new Kwf_Exception("Setting '{$setting}' does not exist for Component '{$class}'"); } else { throw $e; } } } } Kwf_Cache_SimpleStatic::add($cacheId, $ret); return $ret; }
/** * Called when duplication of a number of components finished */ public function afterDuplicate($rootSource, $rootTarget) { parent::afterDuplicate($rootSource, $rootTarget); }
public function getDependency($dependencyName) { if ($dependencyName == 'Components') { $ret = array(); $nonDeferDep = array(); $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true))); foreach ($files as $i) { foreach ($i as $j) { $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd()); if (substr($j, 0, 3) == '../') { $cwd = substr($cwd, 0, strrpos($cwd, '/')); $j = substr($j, 3); } $j = $cwd . '/' . $j; $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, $j); if (!$jj) { throw new Kwf_Exception("Can't find path type for '{$j}'"); } $nonDeferDep[] = $this->_createDependencyForFile($jj, true); } } if ($nonDeferDep) { $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $nonDeferDep, 'Web'); $ret[] = $nonDeferDep; } $componentClassesPackages = $this->_getComponentClassesPackages(); foreach ($componentClassesPackages['Frontend'] as $c) { $packageName = Kwc_Abstract::getFlag($c, 'assetsPackage'); if ($packageName == 'Default') { $packageName = false; } if (!$packageName) { $d = $this->_providerList->findDependency('Component-' . $c); if (!$d) { throw new Kwf_Exception("Didn't get dependency 'Component-{$c}'"); } $ret[] = $d; } } return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName); } else { if (substr($dependencyName, 0, 17) == 'ComponentsPackage') { $ret = array(); $assetsPackageName = substr($dependencyName, 17); $componentClassesPackages = $this->_getComponentClassesPackages(); foreach ($componentClassesPackages[$assetsPackageName] as $c) { $d = $this->_providerList->findDependency('Component-' . $c); if (!$d) { throw new Kwf_Exception("Didn't get dependency 'Component-{$c}'"); } $ret[] = $d; } return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName); } else { if ($dependencyName == 'ComponentsAdmin') { $ret = array(); foreach (Kwc_Abstract::getComponentClasses() as $class) { //dep $ret = array_merge($ret, $this->_getComponentSettingDependenciesDep($class, 'assetsAdmin')); //files $assets = Kwc_Abstract::getSetting($class, 'assetsAdmin'); foreach ($assets['files'] as $file) { if (!isset($this->_fileDependencies[$file])) { $this->_fileDependencies[$file] = Kwf_Assets_Dependency_File::createDependency($file, $this->_providerList); } $ret[] = $this->_fileDependencies[$file]; } } return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName); } else { if ($dependencyName == 'FrontendCore') { $deps = array(); $dep = new Kwf_Assets_Dependency_File_Js($this->_providerList, 'kwf/commonjs/frontend-core.js'); $dep->setIsCommonJsEntry(true); $deps[] = $dep; $dep = new Kwf_Assets_Dependency_File_Js($this->_providerList, 'kwf/commonjs/frontend-core.defer.js'); $dep->setIsCommonJsEntry(true); $dep->setDeferLoad(true); $deps[] = $dep; return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, 'FrontendCore'); } else { if (substr($dependencyName, 0, 10) == 'Component-') { $class = substr($dependencyName, 10); $ret = array(); $deps = $this->_getComponentSettingDependenciesDep($class, 'assetsDefer', true); if ($deps) { $deps = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, $class . '-deps-defer'); $deps->setDeferLoad(true); $ret[] = $deps; } $deps = $this->_getComponentSettingDependenciesDep($class, 'assets', true); if ($deps) { $deps = new Kwf_Assets_Dependency_Dependencies($this->_providerList, $deps, $class . '-deps'); $ret[] = $deps; } $deps = array(); foreach ($this->_getComponentSettingDependenciesFiles($class, 'assets', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) { //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false); } else { //other files are dependencies like dep if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Web(\\.defer)?\\.js+$#', $dep->getFileNameWithType())) { $dep->setIsCommonJsEntry(true); } $ret[] = $dep; } } foreach ($this->_getComponentSettingDependenciesFiles($class, 'assetsDefer', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z\\.]+$#', $dep->getFileNameWithType())) { //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true); } else { //other files are dependencies like dep if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Web(\\.defer)?\\.js+$#', $dep->getFileNameWithType())) { $dep->setIsCommonJsEntry(true); } $dep->setDeferLoad(true); $ret[] = $dep; } } if (Kwc_Abstract::hasSetting($class, 'masterExtends') && Kwc_Abstract::getSetting($class, 'masterExtends')) { //plus masterExtends for inherited styles foreach ($this->_getComponentSettingDependenciesFiles(Kwc_Abstract::getSetting($class, 'masterExtends'), 'assets', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) { //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false); } } foreach ($this->_getComponentSettingDependenciesFiles(Kwc_Abstract::getSetting($class, 'masterExtends'), 'assetsDefer', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) { //Master.css/js needs to be part of Kwf_Assets_Components_Dependency_Abstract for .kwcClass to work correctly $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true); } } // d($deps); } //alle dateien der vererbungshierache includieren $files = Kwc_Abstract::getSetting($class, 'componentFiles'); $componentCssFiles = array(); foreach (array_merge($files['css'], $files['js']) as $f) { $componentCssFiles[] = $f; } //reverse damit css von weiter unten in der vererbungshierachie überschreibt $componentCssFiles = array_reverse($componentCssFiles); foreach ($componentCssFiles as $path) { $pathWithType = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, './' . $path); if (!$pathWithType) { throw new Kwf_Exception("Can't find path type for '{$path}'"); } $dep = $this->_createDependencyForFile($pathWithType, true); if (substr($path, -8) == 'defer.js') { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true); } else { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false); } if ($dep instanceof Kwf_Assets_Dependency_File_Scss) { if ($scssConfig = Kwc_Admin::getInstance($class)->getScssConfig()) { $dep->setConfig($scssConfig, Kwc_Admin::getInstance($class)->getScssConfigMasterFiles()); } } } //reverse damit css von weiter unten in der vererbungshierachie überschreibt $componentCssFiles = array_reverse($files['masterCss']); foreach ($componentCssFiles as $path) { $pathWithType = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($this->_providerList, './' . $path); if (!$pathWithType) { throw new Kwf_Exception("Can't find path type for '{$path}'"); } $dep = $this->_createDependencyForFile($pathWithType, true); if (substr($path, -8) == 'defer.js') { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true); } else { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false); } } //css, not master $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Css($this->_providerList, $class, $matchingDeps, false, $class . '-css'); } //css, master $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Css($this->_providerList, $class, $matchingDeps, true, $class . '-master-css'); } //js, not master, not defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, false, $class . '-js'); } //js, master, not defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, true, $class . '-master-js'); } //js, not master, defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $dep = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, false, $class . '-defer-js'); $dep->setDeferLoad(true); $ret[] = $dep; } //js, master, defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $dep = new Kwf_Assets_Components_Dependency_Js($this->_providerList, $class, $matchingDeps, true, $class . '-master-defer-js'); $dep->setDeferLoad(true); $ret[] = $dep; } return new Kwf_Assets_Dependency_Dependencies($this->_providerList, $ret, $dependencyName); } } } } } return null; }
public static function getSetting($class, $setting) { if (self::$_rebuildingSettings) { //um endlosschleife in settingsCache zu verhindern self::_verifyComponentClass($class); if ($setting == 'parentClasses') { $p = strpos($class, '.') ? substr($class, 0, strpos($class, '.')) : $class; $ret = array($class); while ($p = get_parent_class($p)) { $ret[] = $p; } } else { if ($setting == 'parentFilePaths') { //value = klasse, key=pfad $ret = array(); $cwd = str_replace(DIRECTORY_SEPARATOR, '/', realpath(getcwd())); foreach (self::getSetting($class, 'parentClasses') as $c) { $c = strpos($c, '.') ? substr($c, 0, strpos($c, '.')) : $c; $file = str_replace('_', '/', $c) . '.php'; static $dirs; if (!isset($dirs)) { $dirs = explode(PATH_SEPARATOR, get_include_path()); foreach (include VENDOR_PATH . '/composer/autoload_namespaces.php' as $ns => $i) { $dirs = array_merge($dirs, $i); } foreach ($dirs as $k => $dir) { if ($dir == '.') { $dir = $cwd; } if (!preg_match('#^(/|\\w\\:\\\\)#i', $dir)) { //relative path, make it absolute $dir = $cwd . '/' . $dir; } if (!$dir || !file_exists($dir)) { unset($dirs[$k]); continue; } $dir = realpath($dir); $dir = str_replace(DIRECTORY_SEPARATOR, '/', $dir); if (substr($dir, 0, strlen($cwd)) != $cwd) { if (VENDOR_PATH == '../vendor') { //required to support running kwf tests in tests subfolder $parentCwd = substr($cwd, 0, strrpos($cwd, '/')); if (substr($dir, 0, strlen($parentCwd)) != $parentCwd) { throw new Kwf_Exception("'{$dir}' is not in web directory '{$parentCwd}'"); } if ($dir == $parentCwd) { $dir = '..'; } else { $dir = '../' . substr($dir, strlen($parentCwd) + 1); } } else { throw new Kwf_Exception("'{$dir}' is not in web directory '{$cwd}'"); } } else { $dir = substr($dir, strlen($cwd) + 1); } $dirs[$k] = $dir; } $dirs = array_unique($dirs); } foreach ($dirs as $dir) { $path = $dir . ($dir ? '/' : '') . $file; if (is_file($path)) { if (substr($path, -14) == '/Component.php') { $ret[substr($path, 0, -14)] = substr($c, 0, -10); } else { $ret[substr($path, 0, -4)] = $c; //nur .php } break; } } } } else { if ($setting == 'componentFiles') { $ret = Kwf_Component_Abstract_Admin::getComponentFiles($class, array('Master.tpl' => array('filename' => 'Master', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Component.tpl' => array('filename' => 'Component', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Partial.tpl' => array('filename' => 'Partial', 'ext' => array('tpl', 'twig'), 'returnClass' => false), 'Admin' => array('filename' => 'Admin', 'ext' => 'php', 'returnClass' => true), 'Controller' => array('filename' => 'Controller', 'ext' => 'php', 'returnClass' => true), 'FrontendForm' => array('filename' => 'FrontendForm', 'ext' => 'php', 'returnClass' => true), 'Form' => array('filename' => 'Form', 'ext' => 'php', 'returnClass' => true), 'css' => array('filename' => 'Component', 'ext' => array('css', 'scss'), 'returnClass' => false, 'multiple' => true), 'printcss' => array('filename' => 'Component', 'ext' => 'printcss', 'returnClass' => false, 'multiple' => true), 'masterCss' => array('filename' => 'Master', 'ext' => array('css', 'scss'), 'returnClass' => false, 'multiple' => true), 'js' => array('filename' => 'Component', 'ext' => array('js', 'defer.js'), 'returnClass' => false, 'multiple' => true))); } else { $settings = self::_loadCacheSettings($class); if (!array_key_exists($setting, $settings)) { throw new Kwf_Exception("Couldn't find required setting '{$setting}' for {$class}."); } $ret = $settings[$setting]; if ($setting == 'generators') { if (isset($settings['childSettings'])) { $processed = array(); foreach ($settings['childSettings'] as $csKeys => $childSettings) { $csKeys = explode('.', $csKeys); $csKey = explode('_', $csKeys[0]); //just the first if (!isset($ret[$csKey[0]])) { throw new Kwf_Exception("invalid childSetting; generator '{$csKey['0']}' does not exist"); } if (is_array($ret[$csKey[0]]['component'])) { if (!isset($csKey[1])) { throw new Kwf_Exception("invalid childSetting; component key required"); } if (!isset($ret[$csKey[0]]['component'][$csKey[1]])) { throw new Kwf_Exception("invalid childSetting; component '{$csKey['1']}' does not exist for generator '{$csKey['0']}'"); } $ret[$csKey[0]]['component'][$csKey[1]] = self::_addChildSettingsParam($ret[$csKey[0]]['component'][$csKey[1]], $class . '>' . $csKey[0] . '_' . $csKey[1]); } else { $ret[$csKey[0]]['component'] = self::_addChildSettingsParam($ret[$csKey[0]]['component'], $class . '>' . $csKey[0]); } } } $param = strpos($class, '.') ? substr($class, strpos($class, '.') + 1) : null; if ($param && substr($param, 0, 2) == 'cs') { $childSettingsComponentClass = substr($param, 2, strpos($param, '>') - 2); $childSettingsKey = str_replace('>', '.', substr($param, strpos($param, '>') + 1)); $allChildSettings = Kwc_Abstract::getSetting($childSettingsComponentClass, 'childSettings'); foreach ($allChildSettings as $csKeys => $childSettings) { if (substr($csKeys, 0, strlen($childSettingsKey)) != $childSettingsKey) { continue; } if ($csKeys == $childSettingsKey) { continue; } $csKeys = explode('.', substr($csKeys, strlen($childSettingsKey) + 1)); $csKey = explode('_', $csKeys[0]); //just the first if (!isset($ret[$csKey[0]])) { throw new Kwf_Exception("invalid childSetting; generator '{$csKey['0']}' does not exist for '{$class}'"); } if (is_array($ret[$csKey[0]]['component'])) { if (!isset($csKey[1])) { throw new Kwf_Exception("invalid childSetting; component key required"); } if (!isset($ret[$csKey[0]]['component'][$csKey[1]])) { throw new Kwf_Exception("invalid childSetting; component '{$csKey['1']}' does not exist for generator '{$csKey['0']}'"); } $ret[$csKey[0]]['component'][$csKey[1]] = self::_addChildSettingsParam($ret[$csKey[0]]['component'][$csKey[1]], substr($param, 2) . '>' . $csKey[0] . '_' . $csKey[1]); } else { $ret[$csKey[0]]['component'] = self::_addChildSettingsParam($ret[$csKey[0]]['component'], substr($param, 2) . '>' . $csKey[0]); } } } $retModified = array(); foreach ($ret as $k => $g) { if (is_array($g['component'])) { foreach ($g['component'] as $l => $cc) { if (!$cc) { continue; } $cc = strpos($cc, '.') ? substr($cc, 0, strpos($cc, '.')) : $cc; $vars = get_class_vars($cc); if (isset($vars['needsParentComponentClass']) && $vars['needsParentComponentClass']) { $g['component'][$l] .= '.' . $class; } } } else { if (!$g['component']) { continue; } $cc = $g['component']; $cc = strpos($cc, '.') ? substr($cc, 0, strpos($cc, '.')) : $cc; $vars = get_class_vars($cc); if (isset($vars['needsParentComponentClass']) && $vars['needsParentComponentClass']) { $g['component'] .= '.' . $class; } } $retModified[$k] = $g; } $ret = $retModified; } } } } return $ret; } $cacheId = 'cs-' . $class . '-' . $setting; $ret = Kwf_Cache_SimpleStatic::fetch($cacheId, $success); if ($success) { return $ret; } if (!self::$_settings) { self::_getSettingsCached(); } try { $ret = self::$_settings[$class][$setting]; } catch (ErrorException $e) { //diese checks im nachhinein machen damit sie nicht immer gemacht werden (diese fkt wird am meisten von allen aufgerufen) //und hier dann versuchen eine bessere exception msg zu erstellen if (!is_string($class)) { throw new Kwf_Exception("Invalid component '{$class}'"); } else { if (!isset(self::$_settings[$class])) { throw new Kwf_Exception("No Settings for component '{$class}' found; it is probably not in allComponentClasses."); } else { if (!array_key_exists($setting, self::$_settings[$class])) { // man könnte hier isset() machen, nur wenn das setting NULL ist, gibt es false zurück... scheis PHP :) throw new Kwf_Exception("Setting '{$setting}' does not exist for Component '{$class}'"); } else { throw $e; } } } } Kwf_Cache_SimpleStatic::add($cacheId, $ret); return $ret; }
public function getDependency($dependencyName) { if ($dependencyName == 'Components') { $ret = array(); $nonDeferDep = array(); $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true))); foreach ($files as $i) { foreach ($i as $j) { $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd()); if (substr($j, 0, 3) == '../') { $cwd = substr($cwd, 0, strrpos($cwd, '/')); $j = substr($j, 3); } $j = $cwd . '/' . $j; $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($j); if (!$jj) { throw new Kwf_Exception("Can't find path type for '{$j}'"); } $nonDeferDep[] = $this->_createDependencyForFile($jj, true); } } if ($nonDeferDep) { $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, 'Web'); $ret[] = $nonDeferDep; } $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass); foreach ($componentClasses as $class) { $deps = $this->_getComponentSettingDependenciesDep($class, 'assetsDefer', true); if ($deps) { $deps = new Kwf_Assets_Dependency_Dependencies($deps, $class . '-deps-defer'); $deps->setDeferLoad(true); $ret[] = $deps; } $deps = $this->_getComponentSettingDependenciesDep($class, 'assets', true); if ($deps) { $deps = new Kwf_Assets_Dependency_Dependencies($deps, $class . '-deps'); $ret[] = $deps; } $deps = array(); foreach ($this->_getComponentSettingDependenciesFiles($class, 'assets', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false); } else { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false); } } foreach ($this->_getComponentSettingDependenciesFiles($class, 'assetsDefer', true) as $dep) { if ($dep instanceof Kwf_Assets_Dependency_File && preg_match('#Master\\.[a-z]+$#', $dep->getFileNameWithType())) { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true); } else { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true); } } //alle dateien der vererbungshierache includieren $files = Kwc_Abstract::getSetting($class, 'componentFiles'); $componentCssFiles = array(); foreach (array_merge($files['css'], $files['js']) as $f) { $componentCssFiles[] = $f; } //reverse damit css von weiter unten in der vererbungshierachie überschreibt $componentCssFiles = array_reverse($componentCssFiles); foreach ($componentCssFiles as $i) { $dep = $this->_createDependencyForFile($i, true); if (substr($i, -8) == 'defer.js') { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => true); } else { $deps[] = array('dep' => $dep, 'master' => false, 'defer' => false); } } //reverse damit css von weiter unten in der vererbungshierachie überschreibt $componentCssFiles = array_reverse($files['masterCss']); foreach ($componentCssFiles as $i) { $dep = $this->_createDependencyForFile($i, true); if (substr($i, -8) == 'defer.js') { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => true); } else { $deps[] = array('dep' => $dep, 'master' => true, 'defer' => false); } } //css, not master $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Css($class, $matchingDeps, false); } //css, master $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() == 'text/css' && $i['master'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Css($class, $matchingDeps, true); } //js, not master, not defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, false); } //js, master, not defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == false) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $ret[] = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, true); } //js, not master, defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == false && $i['defer'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $dep = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, false); $dep->setDeferLoad(true); $ret[] = $dep; } //js, master, defer $matchingDeps = array(); foreach ($deps as $i) { if ($i['dep']->getMimeType() != 'text/css' && $i['master'] == true && $i['defer'] == true) { $matchingDeps[] = $i['dep']; } } if ($matchingDeps) { $dep = new Kwf_Assets_Components_Dependency_Js($class, $matchingDeps, true); $dep->setDeferLoad(true); $ret[] = $dep; } } return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName); } else { if ($dependencyName == 'ComponentsAdmin') { $ret = array(); $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass); foreach ($componentClasses as $class) { $ret = array_merge($ret, $this->_getComponentSettingDependencies($class, 'assetsAdmin', false)); } return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName); } else { if ($dependencyName == 'FrontendCore') { $deps = array(); $dep = new Kwf_Assets_Dependency_File_Js('kwf/commonjs/frontend-core.js'); $dep->setIsCommonJsEntry(true); $deps[] = $dep; $dep = new Kwf_Assets_Dependency_File_Js('kwf/commonjs/frontend-core.defer.js'); $dep->setIsCommonJsEntry(true); $dep->setDeferLoad(true); $deps[] = $dep; return new Kwf_Assets_Dependency_Dependencies($deps, 'FrontendCore'); } } } return null; }
public function getDependency($dependencyName) { if ($dependencyName == 'Components') { $ret = array(); $nonDeferDep = array(); $files = Kwf_Component_Abstract_Admin::getComponentFiles($this->_rootComponentClass, array('css' => array('filename' => 'Web', 'ext' => 'css', 'returnClass' => false, 'multiple' => true), 'printcss' => array('filename' => 'Web', 'ext' => 'printcss', 'returnClass' => false, 'multiple' => true), 'scss' => array('filename' => 'Web', 'ext' => 'scss', 'returnClass' => false, 'multiple' => true))); foreach ($files as $i) { foreach ($i as $j) { $cwd = str_replace(DIRECTORY_SEPARATOR, '/', getcwd()); if (substr($j, 0, 3) == '../') { $cwd = substr($cwd, 0, strrpos($cwd, '/')); $j = substr($j, 3); } $j = $cwd . '/' . $j; $jj = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($j); if (!$jj) { throw new Kwf_Exception("Can't find path type for '{$j}'"); } $nonDeferDep[] = $this->_createDependencyForFile($jj); } } if ($nonDeferDep) { $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, 'Web'); $ret[] = $nonDeferDep; } $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass); foreach ($componentClasses as $class) { $nonDeferDep = $this->_getComponentSettingDependencies($class, 'assets'); $deferDep = $this->_getComponentSettingDependencies($class, 'assetsDefer'); //alle dateien der vererbungshierache includieren $files = Kwc_Abstract::getSetting($class, 'componentFiles'); $componentCssFiles = array(); foreach (array_merge($files['css'], $files['printcss'], $files['js'], $files['masterCss']) as $f) { $componentCssFiles[] = $f; } //reverse damit css von weiter unten in der vererbungshierachie überschreibt $componentCssFiles = array_reverse($componentCssFiles); foreach ($componentCssFiles as $i) { $i = getcwd() . '/' . $i; $i = Kwf_Assets_Dependency_File::getPathWithTypeByFileName($i); if (!isset($this->_componentFiles[$i])) { $addedFiles[] = $i; $dep = $this->_createDependencyForFile($i); if (substr($i, -8) == 'defer.js') { $deferDep[] = $dep; } else { $nonDeferDep[] = $dep; } } } if ($deferDep) { $deferDep = new Kwf_Assets_Dependency_Dependencies($deferDep, $class . ' defer'); $deferDep->setDeferLoad(true); $ret[] = $deferDep; } if ($nonDeferDep) { $nonDeferDep = new Kwf_Assets_Dependency_Dependencies($nonDeferDep, $class); $ret[] = $nonDeferDep; } } return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName); } else { if ($dependencyName == 'ComponentsAdmin') { $ret = array(); $componentClasses = $this->_getRecursiveChildClasses($this->_rootComponentClass); foreach ($componentClasses as $class) { $ret = array_merge($ret, $this->_getComponentSettingDependencies($class, 'assetsAdmin')); } return new Kwf_Assets_Dependency_Dependencies($ret, $dependencyName); } } return null; }