/**
  * Prepares a mirror of public package resources that is accessible through
  * the web server directly.
  *
  * @param array $activePackages
  * @return void
  * @author Karsten Dambekalns <*****@*****.**>
  */
 public function publishPublicPackageResources(array $activePackages)
 {
     if ($this->settings['resource']['publishing']['detectPackageResourceChanges'] === FALSE && $this->statusCache->has('packageResourcesPublished')) {
         return;
     }
     foreach ($activePackages as $packageKey => $package) {
         $this->resourcePublisher->publishStaticResources($package->getResourcesPath() . 'Public/', 'Packages/' . $packageKey . '/');
     }
     if (!$this->statusCache->has('packageResourcesPublished')) {
         $this->statusCache->set('packageResourcesPublished', 'y', array(\F3\FLOW3\Cache\Frontend\FrontendInterface::TAG_PACKAGE));
     }
 }
 /**
  * Around advice
  *
  * @around method(F3\FLOW3\MVC\Web\Routing\Router->resolve())
  * @param F3\FLOW3\AOP\JoinPointInterface $joinPoint The current join point
  * @return string Result of the target method
  * @author Bastian Waidelich <*****@*****.**>
  * @author Karsten Dambekalns <*****@*****.**>
  */
 public function cacheResolveCall(\F3\FLOW3\AOP\JoinPointInterface $joinPoint)
 {
     $routeValues = $joinPoint->getMethodArgument('routeValues');
     $routeValues = $this->convertObjectsToHashes($routeValues);
     \F3\FLOW3\Utility\Arrays::sortKeysRecursively($routeValues);
     $cacheIdentifier = md5(http_build_query($routeValues));
     if ($this->resolveCache->has($cacheIdentifier)) {
         return $this->resolveCache->get($cacheIdentifier);
     }
     $matchingUri = $joinPoint->getAdviceChain()->proceed($joinPoint);
     if ($matchingUri !== '') {
         $this->resolveCache->set($cacheIdentifier, $matchingUri);
     }
     return $matchingUri;
 }
 /**
  * Exports the internal reflection data into the ReflectionData cache
  *
  * @return void
  * @throws \F3\FLOW3\Reflection\Exception if no cache has been injected
  * @author Robert Lemke <*****@*****.**>
  */
 protected function saveToCache()
 {
     if (!is_object($this->dataCache)) {
         throw new \F3\FLOW3\Reflection\Exception('A cache must be injected before initializing the Reflection Service.', 1232044697);
     }
     $nonCachedClassNames = array_diff_assoc($this->reflectedClassNames, $this->cachedClassNames);
     $this->log('Found ' . count($nonCachedClassNames) . ' classes whose reflection data was not cached previously.', LOG_DEBUG);
     foreach (array_keys($nonCachedClassNames) as $className) {
         $this->statusCache->set(str_replace('\\', '_', $className), '', array($this->statusCache->getClassTag($className)));
     }
     $data = array();
     $propertyNames = array('reflectedClassNames', 'abstractClasses', 'classConstructorMethodNames', 'classPropertyNames', 'classSchemata', 'classTagsValues', 'subClasses', 'finalClasses', 'finalMethods', 'staticMethods', 'interfaceImplementations', 'methodTagsValues', 'methodParameters', 'methodVisibilities', 'propertyTagsValues', 'taggedClasses');
     foreach ($propertyNames as $propertyName) {
         $data[$propertyName] = $this->{$propertyName};
     }
     $this->dataCache->set('ReflectionData', $data);
     $this->cachedClassNames = $this->reflectedClassNames;
 }
 /**
  * Constructs the cache
  *
  * @param string $identifier A identifier which describes this cache
  * @param \F3\FLOW3\Cache\Backend\PhpCapableBackendInterface $backend Backend to be used for this cache
  * @author Robert Lemke <*****@*****.**>
  */
 public function __construct($identifier, \F3\FLOW3\Cache\Backend\PhpCapableBackendInterface $backend)
 {
     parent::__construct($identifier, $backend);
 }