/** * Update global Piwik settings * * @param array $piwik * @return void */ public function updateAction(array $piwik) { $configurationPath = $this->packageManager->getPackage('Portachtzig.Neos.Piwik')->getConfigurationPath(); $settings = $this->configurationSource->load($configurationPath . ConfigurationManager::CONFIGURATION_TYPE_SETTINGS); $piwik['host'] = preg_replace("(^https?://)", "", $piwik['host']); $settings = Arrays::setValueByPath($settings, 'Portachtzig.Neos.Piwik.host', $piwik['host']); $settings = Arrays::setValueByPath($settings, 'Portachtzig.Neos.Piwik.protocol', $piwik['protocol']); $settings = Arrays::setValueByPath($settings, 'Portachtzig.Neos.Piwik.token_auth', $piwik['token_auth']); if (array_key_exists('idSite', $piwik)) { $settings = Arrays::setValueByPath($settings, 'Portachtzig.Neos.Piwik.idSite', $piwik['idSite']); } $this->configurationSource->save($configurationPath . ConfigurationManager::CONFIGURATION_TYPE_SETTINGS, $settings); $this->configurationManager->flushConfigurationCache(); $this->redirect('index'); }
/** * Flushes caches as needed if settings, routes or policies have changed * * @param array $changedFiles A list of full paths to changed files * @return void * @see flushSystemCachesByChangedFiles() */ protected function flushConfigurationCachesByChangedFiles(array $changedFiles) { $aopProxyClassRebuildIsNeeded = FALSE; $aopProxyClassInfluencers = '/(?:Policy|Objects|Settings)(?:\\..*)*\\.yaml/'; $objectClassesCache = $this->getCache('Flow_Object_Classes'); $objectConfigurationCache = $this->getCache('Flow_Object_Configuration'); $caches = array('/Policy\\.yaml/' => array('Flow_Security_Authorization_Privilege_Method', 'Flow_Persistence_Doctrine', 'Flow_Persistence_Doctrine_Results', 'Flow_Aop_RuntimeExpressions'), '/Routes([^\\/]*)\\.yaml/' => array('Flow_Mvc_Routing_Route', 'Flow_Mvc_Routing_Resolve'), '/Views\\.yaml/' => array('Flow_Mvc_ViewConfigurations')); $cachesToFlush = array(); foreach (array_keys($changedFiles) as $pathAndFilename) { foreach ($caches as $cacheFilePattern => $cacheNames) { if (preg_match($aopProxyClassInfluencers, $pathAndFilename) === 1) { $aopProxyClassRebuildIsNeeded = TRUE; } if (preg_match($cacheFilePattern, $pathAndFilename) !== 1) { continue; } foreach ($caches[$cacheFilePattern] as $cacheName) { $cachesToFlush[$cacheName] = $cacheFilePattern; } } } foreach ($cachesToFlush as $cacheName => $cacheFilePattern) { $this->systemLogger->log(sprintf('A configuration file matching the pattern "%s" has been changed, flushing related cache "%s"', $cacheFilePattern, $cacheName), LOG_INFO); $this->getCache($cacheName)->flush(); } $this->systemLogger->log('A configuration file has been changed, flushing compiled configuration cache', LOG_INFO); $this->configurationManager->flushConfigurationCache(); if ($aopProxyClassRebuildIsNeeded) { $this->systemLogger->log('The configuration has changed, triggering an AOP proxy class rebuild.', LOG_INFO); $objectConfigurationCache->remove('allAspectClassesUpToDate'); $objectConfigurationCache->remove('allCompiledCodeUpToDate'); $objectClassesCache->flush(); } }
/** * Flushes all registered caches * * @return void * @api */ public function flushCaches() { $this->createAllCaches(); foreach ($this->caches as $cache) { $cache->flush(); } $this->configurationManager->flushConfigurationCache(); }