コード例 #1
0
 /**
  * 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);
     }
 }
コード例 #2
0
 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);
 }
コード例 #3
0
 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;
 }
コード例 #4
0
 /**
  * Called when duplication of a number of components finished
  */
 public function afterDuplicate($rootSource, $rootTarget)
 {
     parent::afterDuplicate($rootSource, $rootTarget);
 }
コード例 #5
0
 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;
 }
コード例 #6
0
ファイル: Settings.php プロジェクト: nsams/koala-framework
 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;
 }
コード例 #7
0
 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;
 }
コード例 #8
0
ファイル: Components.php プロジェクト: nsams/koala-framework
 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;
 }