/** * Retrieves the base supercache directory (absolute or relative) * * @param boolean $absolute -- if true, gives the filesystem path. If false, * gives the web path. * @return string */ public static function getSuperCacheDir($absolute = false) { if ($absolute) { return sfConfig::get('sf_web_dir') . DIRECTORY_SEPARATOR . sfDynamicsConfig::getSuperCacheDir(); } else { return '/' . sfDynamicsConfig::getSuperCacheDir(); } }
public function getFilteredContent(sfDynamicsAssetCollectionDefinition $package) { $code = parent::getFilteredContent($package); // @todo move isSomethingEnabled to $package->isSomethingEnabled() if (sfDynamicsConfig::isStylesheetImportResolutionEnabled($package)) { $callback = create_function('$v', sprintf('return file_get_contents(%s.\'/\'.$v[2]);', var_export(dirname($this->path), true))); $code = preg_replace_callback('/@import\\s+url\\((["\']?)([a-z\\/\\._-]+)(\\1)\\);/i', $callback, $code); } $findUrlRegexp = '/url\\((\'|")?([^\\/][^\'"]+)(\'|")?\\)/iU'; if (isset($this->options['image_path_prefix'])) { $callback = create_function('$v', sprintf('return %s::addImagePrefixPathCallback($v, \'%s\');', __CLASS__, $this->options['image_path_prefix'])); $code = preg_replace_callback($findUrlRegexp, $callback, $code); } if (sfDynamicsConfig::isStylesheetRelativePathsResolutionEnabled($package)) { $callback = create_function('$v', sprintf('return %s::resolveRelativePathsCallback($v, \'%s\');', __CLASS__, $this->path)); $code = preg_replace_callback($findUrlRegexp, $callback, $code); } return sprintf('%s /* */', $code); // this avoid CSS hacks to break next stylesheet }
<html> <head> <link rel="stylesheet" type="text/css" media="screen" href="/bar.css" /> <script type="text/javascript" src="/bar.js"></script> <link rel="stylesheet" type="text/css" media="screen" href="/dynamics/foo.css" /> <script type="text/javascript" src="/dynamics/foo.js"></script> </head> <body> <p>Lorem ipsum</p> </body> </html> END; $t->is($manager->filterContent(new sfEvent('lorem', 'event.name'), $content), $waited, '->addSfDynamicsTags() inserts tags at the bottom of <head> if position "append" and placeholder not found "(default)"'); } sfConfig::set('app_sfDynamicsPlugin_assets_position_in_head', 'prepend'); if ('prepend' !== sfDynamicsConfig::getAssetsPositionInHead()) { $t->error('We can’t test prepend inclusion'); $t->skip('skip 1 tests', 1); } else { $content = <<<END <html> <head> <link rel="stylesheet" type="text/css" media="screen" href="/bar.css" /> <script type="text/javascript" src="/bar.js"></script> </head> <body> <p>Lorem ipsum</p> </body> </html> END; $waited = <<<END
public function filterContent(sfEvent $event, $content) { $prepend = sfDynamicsConfig::getAssetsPositionInHead() == 'prepend'; $response = $event->getSubject(); $pos = $prepend ? strpos($content, '<head>') + 6 : strpos($content, '</head>'); if (false !== $pos) { $html = $this->generateAssetsHtml(); if ($html) { $content = substr($content, 0, $pos) . "\n" . $html . substr($content, $pos); } } return $content; }
/** * Add sfDynamics css and js tags to the content */ protected function addSfDynamicsTags($content, $ext) { if (!in_array($ext, array('css', 'js'))) { throw new sfDynamicsException(sprintf('"%s" is an unknown file extension', $type)); } // Retrieve placeholders dedicated to this extension $placeholder = call_user_func(array('sfDynamicsConfig', 'get' . ucfirst($ext) . 'Placeholder')); // Retrieve the tags to insert if (!($sfDynamicTags = $this->{'generate' . ucfirst($ext) . 'Html'}())) { // Nothing to add, same content whithout placeholder return str_ireplace($placeholder, '', $content); } if (false !== stripos($content, $placeholder)) { return str_ireplace($placeholder, $sfDynamicTags, $content); } // Placeholder not found, insertion in the <head> section if ('prepend' === sfDynamicsConfig::getAssetsPositionInHead()) { return str_ireplace('<head>', '<head>' . "\n" . $sfDynamicTags, $content); } return str_ireplace('</head>', $sfDynamicTags . "\n" . '</head>', $content); }
/** * generateSupercache - creates supercache file for given packages * * @param mixed $url * @param mixed $packages * @param mixed $assets * @param mixed $type * @return void */ public function generateSupercache($url, $packages, $assets, $type) { if (!sfDynamicsConfig::isSupercacheEnabled()) { throw new BadMethodCallException('Supercache is disabled.'); } if (!file_exists($filename = sfConfig::get('sf_web_dir') . '/' . $url)) { $src = ''; foreach ($packages as $name => $package) { if ($renderedSrc = trim($this->getAsset($name, $package, $type))) { $src .= '/* ' . $name . ' */ ' . $renderedSrc . "\n"; } } @file_put_contents($filename, $src); if (!file_exists($filename)) { throw new sfException('Supercache could not be written: ' . $filename); } } }