public function writeAsset(AssetInterface $asset) { foreach ($this->getCombinations($asset->getVars()) as $combination) { $asset->setValues($combination); static::write($this->dir . '/' . PathUtils::resolvePath($asset->getTargetPath(), $asset->getVars(), $asset->getValues()), $asset->dump()); } }
public function process(AssetInterface $asset) { $hash = hash_init('sha1'); switch ($this->strategy) { case self::STRATEGY_MODIFICATION: hash_update($hash, $asset->getLastModified()); break; case self::STRATEGY_CONTENT: hash_update($hash, $asset->dump()); break; } foreach ($asset as $i => $leaf) { if ($sourcePath = $leaf->getSourcePath()) { hash_update($hash, $sourcePath); } else { hash_update($hash, $i); } } $hash = substr(hash_final($hash), 0, 7); $url = $asset->getTargetPath(); $oldExt = pathinfo($url, PATHINFO_EXTENSION); $newExt = '-' . $hash . '.' . $oldExt; if (!$oldExt || 0 < preg_match('/' . preg_quote($newExt, '/') . '$/', $url)) { return; } $asset->setTargetPath(substr($url, 0, (strlen($oldExt) + 1) * -1) . $newExt); }
/** * {@inheritdoc} */ public function dump(FilterInterface $additionalFilter = null) { if (!$this->innerAsset) { $this->createInnerAsset(); } return $this->innerAsset->dump($additionalFilter); }
/** * Performs the asset dump. * * @param AssetInterface $asset An asset * @param OutputInterface $stdout The command output * * @throws RuntimeException If there is a problem writing the asset */ private function doDump(AssetInterface $asset, OutputInterface $stdout) { $combinations = VarUtils::getCombinations($asset->getVars(), $this->getContainer()->getParameter('assetic.variables')); foreach ($combinations as $combination) { $asset->setValues($combination); // resolve the target path $target = rtrim($this->basePath, '/') . '/' . $asset->getTargetPath(); $target = str_replace('_controller/', '', $target); $target = VarUtils::resolve($target, $asset->getVars(), $asset->getValues()); if (!is_dir($dir = dirname($target))) { $stdout->writeln(sprintf('<comment>%s</comment> <info>[dir+]</info> %s', date('H:i:s'), $dir)); // if (false === @mkdir($dir, 0777, true)) { // throw new \RuntimeException('Unable to create directory '.$dir); // } } $stdout->writeln(sprintf('<comment>%s</comment> <info>[file+]</info> %s', date('H:i:s'), $target)); if (OutputInterface::VERBOSITY_VERBOSE <= $stdout->getVerbosity()) { if ($asset instanceof AssetCollectionInterface) { foreach ($asset as $leaf) { $root = $leaf->getSourceRoot(); $path = $leaf->getSourcePath(); $stdout->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } else { $root = $asset->getSourceRoot(); $path = $asset->getSourcePath(); $stdout->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file ' . $target); } } }
public function writeAsset(AssetInterface $asset) { foreach (VarUtils::getCombinations($asset->getVars(), $this->values) as $combination) { $asset->setValues($combination); $path = $this->dir . '/' . VarUtils::resolve($asset->getTargetPath(), $asset->getVars(), $asset->getValues()); if (!is_dir($path) && (!file_exists($path) || filemtime($path) <= $asset->getLastModified())) { static::write($path, $asset->dump()); } } }
/** * Applies dump filters and returns the asset as a string. * * @param FilterInterface|null $additionalFilter * @return string */ public function dump(FilterInterface $additionalFilter = null) { $cacheKey = $this->getCacheKey($this->asset, $additionalFilter, 'dump'); if ($this->cache->has($cacheKey)) { return $this->cache->get($cacheKey); } $content = $this->asset->dump($additionalFilter); $this->cache->set($cacheKey, $content); return $content; }
private function dumpAsset(AssetInterface $asset) { // HTTP caching $mtime = gmdate('D, d M y H:i:s', $asset->getLastModified()) . 'GMT'; if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && ($mtime = $_SERVER['HTTP_IF_MODIFIED_SINCE'])) { header('HTTP/1.1 304 Not Modified'); exit; } // set headers & dump asset $extension = pathinfo($asset->getTargetPath(), PATHINFO_EXTENSION); if (array_key_exists($extension, self::$extensionsToMimeTypes)) { $mimeType = self::$extensionsToMimeTypes[$extension]; header("Content-Type: {$mimeType}"); header("Last-Modified: {$mtime}"); header('Cache-Control: public'); } echo $asset->dump(); exit; }
private function doDump(AssetInterface $asset, $documentRoot) { $writer = new AssetWriter(sys_get_temp_dir(), $this->container->getParameter('assetic.variables')); $ref = new \ReflectionMethod($writer, 'getCombinations'); $ref->setAccessible(true); $combinations = $ref->invoke($writer, $asset->getVars()); foreach ($combinations as $combination) { $asset->setValues($combination); $target = rtrim($documentRoot, '/') . '/' . str_replace('_controller/', '', PathUtils::resolvePath($asset->getTargetPath(), $asset->getVars(), $asset->getValues())); if (!is_dir($dir = dirname($target))) { if (false === @mkdir($dir, 0777, true)) { throw new \RuntimeException('Unable to create directory ' . $dir); } } if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file ' . $target); } } }
/** * Performs the asset dump. * * @param AssetInterface $asset An asset * @param OutputInterface $output The command output * * @throws RuntimeException If there is a problem writing the asset */ private function doDump(AssetInterface $asset, OutputInterface $output) { $writer = new AssetWriter(sys_get_temp_dir(), $this->getContainer()->getParameter('assetic.variables')); $ref = new \ReflectionMethod($writer, 'getCombinations'); $ref->setAccessible(true); $combinations = $ref->invoke($writer, $asset->getVars()); foreach ($combinations as $combination) { $asset->setValues($combination); $target = rtrim($this->basePath, '/') . '/' . str_replace('_controller/', '', PathUtils::resolvePath($asset->getTargetPath(), $asset->getVars(), $asset->getValues())); if (!is_dir($dir = dirname($target))) { $output->writeln(sprintf('<comment>%s</comment> <info>[dir+]</info> %s', date('H:i:s'), $dir)); if (false === @mkdir($dir, 0777, true)) { throw new \RuntimeException('Unable to create directory ' . $dir); } } $output->writeln(sprintf('<comment>%s</comment> <info>[file+]</info> %s', date('H:i:s'), $target)); if ($this->verbose) { if ($asset instanceof \Traversable) { foreach ($asset as $leaf) { $root = $leaf->getSourceRoot(); $path = $leaf->getSourcePath(); $output->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } else { $root = $asset->getSourceRoot(); $path = $asset->getSourcePath(); $output->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file ' . $target); } } }
public function writeAsset(AssetInterface $asset) { static::write($this->dir . '/' . $asset->getTargetUrl(), $asset->dump()); }
/** * @param AssetInterface $asset * @return string */ private function getHash(AssetInterface $asset) { return substr(hash($this->algorithm, $asset->dump()), 0, $this->hashLength); }
/** * Performs the asset dump. * * @param AssetInterface $asset An asset * @param OutputInterface $output The command output * * @throws RuntimeException If there is a problem writing the asset */ private function doDump(AssetInterface $asset, OutputInterface $output) { $target = rtrim($this->basePath, '/') . '/' . str_replace('_controller/', '', $asset->getTargetPath()); if (!is_dir($dir = dirname($target))) { $output->writeln('<info>[dir+]</info> ' . $dir); if (false === @mkdir($dir, 0777, true)) { throw new \RuntimeException('Unable to create directory ' . $dir); } } $output->writeln('<info>[file+]</info> ' . $target); if ($this->verbose) { if ($asset instanceof \Traversable) { foreach ($asset as $leaf) { $root = $leaf->getSourceRoot(); $path = $leaf->getSourcePath(); $output->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } else { $root = $asset->getSourceRoot(); $path = $asset->getSourcePath(); $output->writeln(sprintf(' <comment>%s/%s</comment>', $root ?: '[unknown root]', $path ?: '[unknown path]')); } } if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file ' . $target); } }
/** * Performs the asset dump. * * @param AssetInterface $asset An asset * @param OutputInterface $output The command output * * @throws RuntimeException If there is a problem writing the asset */ private function doDump(AssetInterface $asset, OutputInterface $output) { $target = rtrim($this->basePath, '/') . '/' . str_replace('_controller/', '', $asset->getTargetPath()); if (!is_dir($dir = dirname($target))) { $output->writeln('<info>[dir+]</info> ' . $dir); if (false === @mkdir($dir, 0777, true)) { throw new \RuntimeException('Unable to create directory ' . $dir); } } $output->writeln('<info>[file+]</info> ' . $target); if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file ' . $target); } }
/** * Writes an asset. * * @param AssetInterface $asset An asset * @param string $basePath The base directory to write to * @param OutputInterface $output The command output * * @throws RuntimeException If there is a problem writing the asset */ protected function dumpAsset(AssetInterface $asset, $basePath, OutputInterface $output) { $target = rtrim($basePath, '/') . '/' . $asset->getTargetUrl(); if (!is_dir($dir = dirname($target))) { $output->writeln('<info>[dir+]</info> '.$dir); if (false === @mkdir($dir, 0777, true)) { throw new \RuntimeException('Unable to create directory '.$dir); } } $output->writeln('<info>[file+]</info> '.$target); if (false === @file_put_contents($target, $asset->dump())) { throw new \RuntimeException('Unable to write file '.$target); } }
/** * {@inheritdoc} */ public function dump(FilterInterface $additionalFilter = null) { return $this->asset->dump($additionalFilter); }