public function preDispatch() { $this->getHelper('viewRenderer')->setNoController(true); $this->getHelper('viewRenderer')->setViewScriptPathNoControllerSpec('user/:action.:suffix'); if (!$this->_getParam('user') && $this->getRequest()->getActionName() != 'error') { $code = $this->_getParam('code'); if (!preg_match('#^(.*)-(\\w*)$#', $code, $m)) { $this->getRequest()->setParam('errorMessage', trlKwf("Activation code is invalid. Maybe the URL wasn't copied completely?")); $this->forward('error'); } else { $userId = $m[1]; $code = $m[2]; $userModel = Kwf_Registry::get('userModel'); $user = $userModel->getRow($userId); $this->getRequest()->setParam('user', $user); if (!$user) { $this->getRequest()->setParam('errorMessage', trlKwf("Activation code is invalid. Maybe the URL wasn't copied completely?")); $this->forward('error'); } else { if (!$user->validateActivationToken($code) && $user->isActivated()) { $this->getRequest()->setParam('errorMessage', trlKwf("This account has already been activated.")); $this->forward('error'); } else { if (!$user->validateActivationToken($code)) { $this->getRequest()->setParam('errorMessage', trlKwf("Activation code is invalid. Maybe your account has already been activated, the URL was not copied completely, or the password has already been set?")); $this->forward('error'); } } } } } $this->view->dep = Kwf_Assets_Package_Default::getAdminMainInstance(); parent::preDispatch(); }
public function getTemplateVars() { $ret = parent::getTemplateVars(); $ret['language'] = $this->getData()->getLanguage(); $ret['assetsPackage'] = Kwf_Assets_Package_Default::getInstance('Frontend'); return $ret; }
public static function getDefaultProviderList() { if (!isset(self::$_defaultProviderList)) { self::$_defaultProviderList = new Kwf_Assets_ProviderList_Default(); } return self::$_defaultProviderList; }
public function getPackageUrls($mimeType, $language) { $ret = parent::getPackageUrls($mimeType, $language); if ($mimeType == 'text/javascript; ie8') { $ret[] = '/assets/es5-shim/es5-shim.js'; } return $ret; }
protected function _build($options) { $package = Kwf_Assets_Package_Default::getInstance('Frontend'); $ret = array(); foreach ($package->getDependency()->getFilteredUniqueDependencies('text/css') as $dep) { $ret = array_merge($ret, Kwc_Basic_Text_StylesModel::parseMasterStyles($dep->getContentsSourceString())); } $fileName = 'build/assets/rte-styles'; file_put_contents($fileName, json_encode($ret)); }
public function preDispatch() { if ($this->getRequest()->getActionName() == 'success') { if (!$this->getRequest()->getParam('row') instanceof Kwf_Model_Row_Interface) { //don't allow call to successAction directly, allow only forward from indexAction throw new Kwf_Exception_AccessDenied(); } } $this->view->dep = Kwf_Assets_Package_Default::getAdminMainInstance(); parent::preDispatch(); }
public function __construct($packageName, $loadedPackage) { if ($packageName == 'Default') { throw new Kwf_Exception("Default component assets package is ment to be included in Frontend package"); } if (!$packageName) { throw new Kwf_Exception("Required packageName"); } $this->_packageName = $packageName; $this->_loadedPackage = $loadedPackage; parent::__construct(Kwf_Assets_Package_Default::getDefaultProviderList(), 'ComponentsPackage' . $packageName); }
public function ext($class, $config = array(), $viewport = null) { //das ist nötig weil wenn $config ein leeres Array ist, kommt sonst [] //raus aber {} wird benötigt (array als config ist ungültig) $config = (object) $config; $vars = get_object_vars($this); foreach ($vars as $key => $value) { if ('_' != substr($key, 0, 1)) { $config->{$key} = $value; } } // View einrichten $ext['class'] = $class; if (!isset($config->id)) { $config->id = 'mainPanel'; } if (!isset($config->region)) { $config->region = 'center'; } if (isset($config->assetsPackage)) { $ext['assetsPackage'] = $config->assetsPackage; unset($config->assetsPackage); } else { $ext['assetsPackage'] = Kwf_Assets_Package_Default::getAdminMainInstance(); } $ext['config'] = $config; if (!$viewport) { if (isset($config->viewport)) { $viewport = $config->viewport; } else { $viewport = Zend_Registry::get('config')->ext->defaultViewport; } } $ext['viewport'] = $viewport; $ext['userRole'] = 'guest'; if (Zend_Registry::get('userModel')) { $ext['userRole'] = Zend_Registry::get('userModel')->getAuthedUserRole(); $user = Zend_Registry::get('userModel')->getAuthedUser(); if ($user) { $ext['user'] = "******"; } } $this->ext = $ext; $this->extTemplate = 'ext.tpl'; if (Kwf_Util_SessionToken::getSessionToken()) { $this->sessionToken = Kwf_Util_SessionToken::getSessionToken(); } $this->applicationName = Zend_Registry::get('config')->application->name; $this->favicon = self::getFavicon(); $this->uniquePrefix = Kwf_Config::getValue('application.uniquePrefix'); }
public static function getMasterStyles() { $cacheId = 'textMasterSyles'; $ret = Kwf_Cache_SimpleStatic::fetch($cacheId); if ($ret !== false) { return $ret; } $package = Kwf_Assets_Package_Default::getInstance('Frontend'); $ret = array(); foreach ($package->getDependency()->getFilteredUniqueDependencies('text/css') as $dep) { $ret = array_merge($ret, self::parseMasterStyles($dep->getContentsSourceString())); } Kwf_Cache_SimpleStatic::add($cacheId, $ret); return $ret; }
protected function _init($componentClass) { Kwf_Component_Data_Root::setComponentClass($componentClass); Zend_Session::$_unitTestEnabled = true; $this->_root = Kwf_Component_Data_Root::getInstance(); $this->_root->setFilename('kwf/kwctest/' . $componentClass); if (function_exists('apc_clear_cache')) { apc_clear_cache('user'); } Kwf_Component_Cache_Memory::getInstance()->_clean(); Kwf_Cache_Simple::resetZendCache(); Kwc_FulltextSearch_MetaModel::setInstance(new Kwf_Model_FnF(array('primaryKey' => 'page_id'))); Kwf_Assets_Package_Default::clearInstances(); Kwf_Component_LogDuplicateModel::setInstance(new Kwf_Model_FnF(array())); Kwf_Media_MemoryCache::getInstance()->clean(); return $this->_root; }
public function showFrontendAssetSizesAction() { $packages = array(Kwf_Assets_Package_Default::getInstance('Frontend')); $mimeTypes = array('text/javascript', 'text/javascript; defer', 'text/css', 'text/css; defer'); foreach ($packages as $p) { foreach ($mimeTypes as $mimeType) { $sizes = array(); echo "\n" . $p->getDependencyName() . " {$mimeType}\n"; foreach ($p->getFilteredUniqueDependencies($mimeType) as $i) { $sizes[(string) $i] = strlen(gzencode($i->getContentsPacked('en')->getFileContents(), 9, FORCE_GZIP)); } arsort($sizes); $sumSize = array_sum($sizes); $topSizes = array_slice($sizes, 0, 10); foreach ($topSizes as $name => $size) { echo "" . str_pad(number_format(round($size / $sumSize * 100, 1), 1) . '%', 5) . ' ' . str_pad(Kwf_View_Helper_FileSize::fileSize($size), 10) . " {$name}\n"; } } } }
protected function _getFilteredUniqueDependencies($mimeType) { $ret = parent::_getFilteredUniqueDependencies($mimeType); $loadedDeps = array(); foreach ($this->_loadedDependencies as $d) { if ($this->_providerList === Kwf_Assets_Package_Default::getDefaultProviderList()) { $pkg = Kwf_Assets_Package_Default::getInstance($d); } else { $pkg = new Kwf_Assets_Package($this->_providerList, $d); } $loadedDeps = array_merge($loadedDeps, $pkg->_getFilteredUniqueDependencies($mimeType)); } foreach ($ret as $k => $i) { if (in_array($i, $loadedDeps, true)) { unset($ret[$k]); } } $ret = array_values($ret); return $ret; }
public function __construct($name, $class, $id = null) { $this->setModel(Kwc_Basic_Text_Component::createOwnModel($class)); parent::__construct($name, $class, $id); $field = new Kwf_Form_Field_HtmlEditor('content', trlKwf('Text')); $field->setData(new Kwf_Data_Kwc_ComponentIds('content')); $field->setHideLabel(true); $ignoreSettings = array('tablename', 'componentName', 'default', 'assets', 'assetsAdmin', 'placeholder', 'plugins'); $c = strpos($class, '.') ? substr($class, 0, strpos($class, '.')) : $class; foreach (call_user_func(array($c, 'getSettings')) as $key => $val) { if (!in_array($key, $ignoreSettings)) { $method = 'set' . ucfirst($key); $field->{$method}($val); } } $generators = Kwc_Abstract::getSetting($this->getClass(), 'generators'); $classes = $generators['child']['component']; if ($classes['link']) { $cfg = new Kwf_Component_Abstract_ExtConfig_Form($classes['link']); $c = $cfg->getConfig(Kwf_Component_Abstract_ExtConfig_Abstract::TYPE_DEFAULT); $field->setLinkComponentConfig($c['form']); } if ($classes['image']) { $c = Kwc_Admin::getInstance($classes['image'])->getExtConfig(); $field->setImageComponentConfig($c['form']); } if ($classes['download']) { $c = Kwc_Admin::getInstance($classes['download'])->getExtConfig(); $field->setDownloadComponentConfig($c['form']); } if (Kwc_Abstract::getSetting($this->getClass(), 'enableStylesEditor')) { $admin = Kwc_Admin::getInstance($class); $field->setStylesEditorConfig(array('xtype' => 'kwc.basic.text.styleseditor', 'blockStyleUrl' => $admin->getControllerUrl('BlockStyle'), 'inlineStyleUrl' => $admin->getControllerUrl('InlineStyle'), 'masterStyleUrl' => $admin->getControllerUrl('MasterStyle'))); } $t = Kwf_Model_Abstract::getInstance(Kwc_Abstract::getSetting($class, 'stylesModel')); $field->setStyles($t->getStyles()); $field->setComponentClass($class); $field->setControllerUrl(Kwc_Admin::getInstance($class)->getControllerUrl()); $this->fields->add($field); $this->setAssetsPackage(Kwf_Assets_Package_Default::getInstance('Frontend')); }
public function errorAction() { $this->getHelper('viewRenderer')->setNoController(true); $this->getHelper('viewRenderer')->setViewScriptPathNoControllerSpec('user/:action.:suffix'); $this->view->dep = Kwf_Assets_Package_Default::getInstance('Admin'); $this->view->contentScript = $this->getHelper('viewRenderer')->getViewScript('login-error'); $this->view->errorMessage = $this->_getParam('errorMessage'); $redirect = $this->_getParam('redirect'); if ($redirect == 'jsCallback') { $redirect = 'javascript:window.close();'; } $this->view->redirect = $redirect; }
public function showAssetPackageSizesAction() { $a = new Kwf_Util_Build_Types_Assets(); $packages = $a->getAllPackages(); $langs = $a->getAllLanguages(); $exts = array('js', 'defer.js', 'css'); foreach ($packages as $p) { $depName = $p->getDependencyName(); $language = $langs[0]; foreach ($exts as $extension) { $cacheId = Kwf_Assets_Dispatcher::getInstance()->getCacheIdByPackage($p, $extension, $language); $cacheContents = Kwf_Assets_BuildCache::getInstance()->load($cacheId); echo "{$depName} "; $h = new Kwf_View_Helper_FileSize(); echo "{$extension} size: " . $h->fileSize(strlen(gzencode($cacheContents['contents'], 9, FORCE_GZIP))); echo "\n"; } } $d = Kwf_Assets_Package_Default::getDefaultProviderList()->findDependency('Frontend'); foreach ($d->getFilteredUniqueDependencies('text/javascript') as $i) { if ($i instanceof Kwf_Assets_Dependency_File && $i->getType() == 'ext2') { echo "\n[WARNING] Frontend text/javascript contains ext2\n"; echo "To improve frontend performance all ext2 dependencies should be moved to defer\n\n"; break; } } exit; }
public static function getInstance() { return Kwf_Assets_Package_Default::getDefaultProviderList(); }
public function includeCode($position) { $data = $this->_getView()->component; $ret = ''; if ($position == 'header') { $helper = new Kwf_View_Helper_DebugData(); $ret .= $helper->debugData(); } $flag = $position == 'header' ? 'hasHeaderIncludeCode' : 'hasFooterIncludeCode'; $cmps = $data->getPage()->getRecursiveChildComponents(array('flags' => array($flag => true))); if (Kwc_Abstract::getFlag($data->componentClass, $flag)) { $cmps[] = $data; } $statisticsBoxUsed = false; $assetsBoxUsed = false; foreach ($cmps as $c) { $includeCode = $c->getComponent()->getIncludeCode($position); if (is_string($includeCode)) { $ret .= $includeCode; } else { if (is_object($includeCode) && $includeCode instanceof Kwf_Component_Data) { $componentHelper = new Kwf_Component_View_Helper_Component(); $componentHelper->setRenderer($this->_getRenderer()); $componentHelper->setView($this->_getView()); $ret .= $componentHelper->component($includeCode); if (is_instance_of($includeCode->componentClass, 'Kwc_Statistics_Analytics_Component') || is_instance_of($includeCode->componentClass, 'Kwc_Statistics_Piwik_Component')) { $statisticsBoxUsed = true; } if (is_instance_of($includeCode->componentClass, 'Kwc_Box_Assets_Component')) { $assetsBoxUsed = true; } } else { if (is_null($includeCode)) { } else { throw new Kwf_Exception("invalid getIncludeCode return type"); } } } } if ($position == 'header') { if ($v = Kwf_Config::getValue('kwc.favicon')) { $ret .= "<link rel=\"shortcut icon\" href=\"{$v}\" />\n"; } if (!$assetsBoxUsed) { //add default assets if there was no box $a = new Kwf_View_Helper_Assets(); $ret .= $a->assets(Kwf_Assets_Package_Default::getInstance('Frontend'), null); } $helper = new Kwf_Component_View_Helper_Dynamic(); $helper->setRenderer($this->_getRenderer()); $helper->setView($this->_getView()); $ret .= $helper->dynamic('SessionToken'); } else { if ($position == 'footer') { if (!$statisticsBoxUsed) { //if there was no statistics box output default code //box is required for eg. multidomains $cfg = Kwf_Config::getValueArray('statistics'); if (isset($cfg['analytics']['code']) && $cfg['analytics']['code']) { throw new Kwf_Exception('To support analytics add Kwc_Statistics_Analytics_Component as a box.'); } if (isset($cfg['piwik']['id']) && $cfg['piwik']['id']) { throw new Kwf_Exception('To support piwik add Kwc_Statistics_Piwik_Component as a box.'); } } //see http://nexxar.wordpress.com/2010/10/07/speeding-up-jquery-ready-on-ie/ $ret .= "\n"; $ret .= "<!--[if lt IE 9]>\n"; $ret .= "<script type=\"text/javascript\">\n"; $ret .= " jQuery.ready();\n"; $ret .= "</script>\n"; $ret .= "<![endif]-->\n"; } } return $ret; }
protected function _build($options) { if (!file_exists('build/assets')) { mkdir('build/assets'); } Kwf_Assets_BuildCache::getInstance()->building = true; Kwf_Assets_BuildCache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->save(time(), 'assetsVersion'); $langs = $this->_getAllLanguages(); $packages = $this->_getAllPackages(); $exts = array('js', 'defer.js', 'css', 'printcss'); echo "\ncalculating dependencies...\n"; $steps = count($packages) * count($exts); $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); $countDependencies = 0; foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($exts as $extension) { $progress->next(1, "{$depName} {$extension}"); $countDependencies += count($p->getFilteredUniqueDependencies(self::$_mimeTypeByExtension[$extension])); $cacheId = $p->getMaxMTimeCacheId(self::$_mimeTypeByExtension[$extension]); if (!$cacheId) { throw new Kwf_Exception("Didn't get cacheId for " . get_class($p)); } $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); Kwf_Assets_BuildCache::getInstance()->save($maxMTime, $cacheId); //save generated caches for clear-cache-watcher $fileName = 'build/assets/package-max-mtime-' . $extension; if (!file_exists($fileName) || strpos(file_get_contents($fileName), $cacheId . "\n") === false) { file_put_contents($fileName, $cacheId . "\n", FILE_APPEND); } } } $progress->finish(); echo "compiling assets...\n"; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $countDependencies); foreach ($packages as $p) { foreach ($exts as $extension) { foreach ($p->getFilteredUniqueDependencies(self::$_mimeTypeByExtension[$extension]) as $dep) { $progress->next(1, "{$dep}"); $dep->warmupCaches(); } } } $progress->finish(); echo "generating packages...\n"; $steps = count($packages) * count($langs) * count($exts) * 4; $c = new Zend_ProgressBar_Adapter_Console(); $c->setElements(array(Zend_ProgressBar_Adapter_Console::ELEMENT_PERCENT, Zend_ProgressBar_Adapter_Console::ELEMENT_BAR, Zend_ProgressBar_Adapter_Console::ELEMENT_TEXT)); $c->setTextWidth(50); $progress = new Zend_ProgressBar($c, 0, $steps); foreach ($packages as $p) { $depName = $p->getDependencyName(); foreach ($langs as $language) { foreach ($exts as $extension) { $packageContents = $p->getPackageContents(self::$_mimeTypeByExtension[$extension], $language); $maxMTime = $p->getMaxMTime(self::$_mimeTypeByExtension[$extension]); $progress->next(1, "{$depName} {$extension} {$language}"); $progress->next(1, "{$depName} {$extension} {$language} source"); $this->_buildPackageContents($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} map"); $this->_buildPackageSourceMap($packageContents, $maxMTime, $p, $extension, $language); $progress->next(1, "{$depName} {$extension} {$language} url"); $urls = $p->getPackageUrls(self::$_mimeTypeByExtension[$extension], $language); if (Kwf_Setup::getBaseUrl()) { foreach ($urls as $k => $i) { $urls[$k] = substr($i, strlen(Kwf_Setup::getBaseUrl())); } } $cacheId = $p->getPackageUrlsCacheId(self::$_mimeTypeByExtension[$extension], $language); Kwf_Assets_BuildCache::getInstance()->save($urls, $cacheId); } } } Kwf_Assets_Cache::getInstance()->clean(); Kwf_Assets_BuildCache::getInstance()->building = false; $exts = array('js', 'defer.js', 'css'); foreach ($packages as $p) { $depName = $p->getDependencyName(); $language = $langs[0]; foreach ($exts as $extension) { $cacheId = Kwf_Assets_Dispatcher::getCacheIdByPackage($p, $extension, $language); $cacheContents = Kwf_Assets_BuildCache::getInstance()->load($cacheId); echo "{$depName} "; $h = new Kwf_View_Helper_FileSize(); echo "{$extension} size: " . $h->fileSize(strlen(gzencode($cacheContents['contents'], 9, FORCE_GZIP))); echo "\n"; } } $d = Kwf_Assets_Package_Default::getDefaultProviderList()->findDependency('Frontend'); foreach ($d->getFilteredUniqueDependencies('text/javascript') as $i) { if ($i instanceof Kwf_Assets_Dependency_File && $i->getType() == 'ext2') { echo "\n[WARNING] Frontend text/javascript contains ext2\n"; echo "To improve frontend performance all ext2 dependencies should be moved to defer\n\n"; break; } } }
public function includeCode($position) { $data = $this->_getView()->component; $ret = ''; if ($position == 'header') { if (Kwf_Config::getValue('application.kwf.name') == 'Koala Framework') { $ret .= "<!--\n"; $ret .= " This website is powered by Koala Web Framework CMS Version " . Kwf_Config::getValue('application.kwf.version') . ".\n"; $ret .= " Koala Framework is a free open source Content Management Framework licensed under BSD.\n"; $ret .= " http://www.koala-framework.org\n"; $ret .= "-->\n"; } $helper = new Kwf_View_Helper_DebugData(); $ret .= $helper->debugData(); } $flag = $position == 'header' ? 'hasHeaderIncludeCode' : 'hasFooterIncludeCode'; $cmps = $data->getPage()->getRecursiveChildComponents(array('flags' => array($flag => true))); if (Kwc_Abstract::getFlag($data->componentClass, $flag)) { $cmps[] = $data; } $statisticsBoxUsed = false; $assetsBoxUsed = false; foreach ($cmps as $c) { $includeCode = $c->getComponent()->getIncludeCode($position); if (is_string($includeCode)) { $ret .= $includeCode; } else { if (is_object($includeCode) && $includeCode instanceof Kwf_Component_Data) { $componentHelper = new Kwf_Component_View_Helper_Component(); $componentHelper->setRenderer($this->_getRenderer()); $componentHelper->setView($this->_getView()); $ret .= $componentHelper->component($includeCode); if (is_instance_of($includeCode->componentClass, 'Kwc_Statistics_Analytics_Component') || is_instance_of($includeCode->componentClass, 'Kwc_Statistics_Piwik_Component')) { $statisticsBoxUsed = true; } if (is_instance_of($includeCode->componentClass, 'Kwc_Box_Assets_Component')) { $assetsBoxUsed = true; } } else { if (is_null($includeCode)) { } else { throw new Kwf_Exception("invalid getIncludeCode return type"); } } } } if ($position == 'header') { if ($v = Kwf_Config::getValue('kwc.favicon')) { $v = Kwf_Setup::getBaseUrl() . $v; $ret .= "<link rel=\"shortcut icon\" href=\"{$v}\" />\n"; } if (!$assetsBoxUsed) { //add default assets if there was no box $a = new Kwf_View_Helper_Assets(); $ret .= $a->assets(Kwf_Assets_Package_Default::getInstance('Frontend'), null); } $helper = new Kwf_Component_View_Helper_Dynamic(); $helper->setRenderer($this->_getRenderer()); $helper->setView($this->_getView()); $ret .= $helper->dynamic('SessionToken'); } else { if ($position == 'footer') { if (!$statisticsBoxUsed) { //if there was no statistics box output default code //box is required for eg. multidomains $cfg = Kwf_Config::getValueArray('statistics'); if (isset($cfg['analytics']['code']) && $cfg['analytics']['code']) { throw new Kwf_Exception('To support analytics add Kwc_Statistics_Analytics_Component as a box.'); } if (isset($cfg['piwik']['id']) && $cfg['piwik']['id']) { throw new Kwf_Exception('To support piwik add Kwc_Statistics_Piwik_Component as a box.'); } } } } return $ret; }
public function getPackageContents($mimeType, $language, $includeSourceMapComment = true) { $ret = parent::getPackageContents($mimeType, $language, $includeSourceMapComment); if ($mimeType == 'text/javascript; defer') { $ret = Kwf_Assets_Package_Filter_LoadDeferred::filter($ret); } return $ret; }