You are here

function _cdn_html_alter_file_url in CDN 6.2

Same name and namespace in other branches
  1. 7.2 cdn.fallback.inc \_cdn_html_alter_file_url()

Alter the file URLs in a piece of HTML given a regexp pattern and some additional parameters.

Parameters

&$html: The HTML in which file URLs will be altered.

$pattern: A regular expression pattern to apply to the subject.

$search_index: The index of the search string in the array of regexp matches.

$path_index: The index of the file path in the array of regexp matches.

$querystring_index: The index of (an optional) query string in the array of regexp matches.

$prefix: $search_index will be replaced by $prefix, plus the altered file URL, plus the @suffix. If numeric, then it is assumed to be the index of the prefix in the array of regexp matches.

$suffix: See $prefix.

$comparison_index: The index of a comparison path whose file extension should match the file extension of the path located at $path_index.

3 calls to _cdn_html_alter_file_url()
cdn_html_alter_css_urls in ./cdn.fallback.inc
Alter CSS file URLs in a piece of HTML.
cdn_html_alter_image_urls in ./cdn.fallback.inc
Alter image file URLs in a piece of HTML.
cdn_html_alter_js_urls in ./cdn.fallback.inc
Alter JS file URLs in a piece of HTML.

File

./cdn.fallback.inc, line 152
Fallback when hook_file_url_alter() is not available (i.e. when the core patch is not installed or when not using a patched Drupal distribution): use the Parallel module's logic (with some adaptations to be able to use the CDN module's logic…

Code

function _cdn_html_alter_file_url(&$html, $pattern, $search_index, $path_index, $querystring_index, $prefix, $suffix, $comparison_index = FALSE) {

  // Find a match against the given pattern.
  preg_match_all($pattern, $html, $matches);

  // Generate replacements to alter file URLs.
  $searches = array();
  $replacements = array();
  for ($i = 0; $i < count($matches[0]); $i++) {
    $search = $matches[$search_index][$i];
    $path = $matches[$path_index][$i];
    $prefix_string = is_numeric($prefix) ? $matches[$prefix][$i] : $prefix;
    $suffix_string = is_numeric($suffix) ? $matches[$suffix][$i] : $suffix;

    // Compare the filename in the path with that of another index. The file
    // URL only is rewritten if it matches.
    if ($comparison_index) {
      $comparison = $matches[$comparison_index][$i];

      // Calculate length of extension.
      $path_ext_pos = strrpos($path, '.');
      $ext_length = -1 * (strlen($path) - $path_ext_pos);
      if (substr($path, $ext_length) !== substr($comparison, $ext_length)) {
        continue;
      }
    }

    // Store the current path as the old path, then let cdn_file_url_alter()
    // do its magic by invoking all file_url_alter hooks. When the path hasn't
    // changed and is not already root-relative or protocol-relative, then
    // generate a file URL as Drupal core would: prepend the base path.
    $old_path = $path;
    drupal_alter('file_url', $path);
    if ($path == $old_path && drupal_substr($path, 0, 1) != '/' && drupal_substr($path, 0, 2) != '//') {
      $path = base_path() . $path;
    }
    $searches[] = $search;
    $replacements[] = $prefix_string . $path . $matches[$querystring_index][$i] . $suffix_string;
  }

  // Apply the generated replacements ton the subject.
  $html = str_replace($searches, $replacements, $html);
}