You are here

function advagg_load_css_stylesheet in Advanced CSS/JS Aggregation 7.2

Loads the stylesheet and resolves all @import commands.

Loads a stylesheet and replaces @import commands with the contents of the imported file. Use this instead of file_get_contents when processing stylesheets.

The returned contents are compressed removing white space and comments only when CSS aggregation is enabled. This optimization will not apply for color.module enabled themes with CSS aggregation turned off.

Parameters

string $file: Name of the stylesheet to be processed.

bool $optimize: Defines if CSS contents should be compressed or not.

array $aggregate_settings: Array of settings.

Return value

string Contents of the stylesheet, including any resolved @import commands.

5 calls to advagg_load_css_stylesheet()
AdvAggCascadingStylesheetsTestCase::testRenderFile in tests/advagg.test
Tests rendering the stylesheets.
advagg_advagg_get_info_on_files_alter in ./advagg.advagg.inc
Implements hook_advagg_get_info_on_files_alter().
advagg_get_css_aggregate_contents in ./advagg.missing.inc
Given a list of files, grab their contents and glue it into one big string.
advagg_mod_inline_css in advagg_mod/advagg_mod.module
Transforms all CSS files into inline CSS.
advagg_relocate_admin_list_files_with_import in advagg_relocate/advagg_relocate.admin.inc
Check all CSS files, see if any contains an @import that is external.

File

./advagg.inc, line 1633
Advanced CSS/JS aggregation module.

Code

function advagg_load_css_stylesheet($file, $optimize = TRUE, array $aggregate_settings = array(), $contents = '') {
  $old_base_path = $GLOBALS['base_path'];

  // Change context to that of when this aggregate was created.
  advagg_context_switch($aggregate_settings, 0);

  // Get the stylesheets contents.
  $contents = advagg_load_stylesheet($file, $optimize, TRUE, $contents);

  // Resolve public:// if needed.
  if (!advagg_is_external($file) && file_uri_scheme($file)) {
    $file = advagg_get_relative_path($file);
  }

  // Get the parent directory of this file, relative to the Drupal root.
  $css_base_url = substr($file, 0, strrpos($file, '/'));

  // Handle split css files.
  list($css_path) = advagg_get_root_files_dir();
  $parts_path = (advagg_s3fs_evaluate_no_rewrite_cssjs(FALSE) ? $css_path[0] : $css_path[1]) . '/parts/';
  $url_parts = strpos($css_base_url, $parts_path);

  // If this CSS file is actually a part of a previously split larger CSS file,
  // don't use it to construct relative paths within the CSS file for
  // 'url(...)' bits.
  if ($url_parts !== FALSE) {
    $css_base_url = substr($css_base_url, $url_parts + strlen($parts_path));
  }

  // Replace the old base path with the one that was passed in.
  if (advagg_is_external($css_base_url) || variable_get('advagg_skip_file_create_url_inside_css', ADVAGG_SKIP_FILE_CREATE_URL_INSIDE_CSS)) {
    $pos = strpos($css_base_url, $old_base_path);
    if ($pos !== FALSE) {
      $parsed_url = parse_url($css_base_url);
      if (!empty($parsed_url['path'])) {

        // Remove any double slash in path.
        $parsed_url['path'] = str_replace('//', '/', $parsed_url['path']);

        // Get newly recalculated position.
        $pos = strpos($parsed_url['path'], $old_base_path);

        // Replace.
        if (strpos($parsed_url['path'], '/') !== 0 && $old_base_path === '/') {

          // Special case if going to a subdir.
          $parsed_url['path'] = $GLOBALS['base_path'] . $parsed_url['path'];
        }
        else {
          $parsed_url['path'] = substr_replace($parsed_url['path'], $GLOBALS['base_path'], $pos, strlen($old_base_path));
        }
        $css_base_url = advagg_glue_url($parsed_url);
      }
    }
  }
  _advagg_build_css_path(array(), $css_base_url . '/', $aggregate_settings);

  // Anchor all paths in the CSS with its base URL, ignoring external,
  // absolute paths, and urls that start with # or %23 (SVG).
  $contents = preg_replace_callback('%url\\(\\s*+[\'"]?+(?![a-z]++:|/|\\#|\\%23+)([^\'"\\)]++)[\'"]?+\\s*+\\)%i', '_advagg_build_css_path', $contents);

  // Change context back.
  advagg_context_switch($aggregate_settings, 1);

  // Return the stylesheets contents.
  return $contents;
}