You are here

function css_emimage_advagg_build_aggregate_plans_alter in CSS Embedded Images 7

Implements hook_advagg_build_aggregate_plans_alter().

File

./css_emimage.advagg.inc, line 35
CSS Embedded Images module.

Code

function css_emimage_advagg_build_aggregate_plans_alter(&$files, &$modified, $type) {
  if ($type != 'css') {
    return;
  }
  if (!variable_get('css_emimage_files', CSS_EMIMAGE_FILES)) {
    return;
  }

  // Save all 3 operating modes into hooks hash.
  $modes = array(
    'base' => '',
    'emimage' => '',
    'orginal' => '',
  );
  foreach ($modes as $mode => &$value) {
    $GLOBALS['conf']['css_emimage_mode'] = $mode;
    drupal_static_reset('advagg_get_current_hooks_hash');
    drupal_static_reset('advagg_current_hooks_hash_array');
    $value = advagg_get_current_hooks_hash();
  }
  $filename_hashes =& drupal_static('advagg_get_info_on_file');
  $new_files = array();
  foreach ($files as $filename => $data) {
    $total_base64_size = 0;
    foreach ($data['files'] as $fileinfo) {

      // Only run if css is not browser specific.
      if (!empty($fileinfo['browsers']) && ($fileinfo['browsers']['!IE'] !== TRUE || $fileinfo['browsers']['IE'] !== TRUE)) {
        continue;
      }
      if (!isset($fileinfo['css_emimage']) || !is_array($fileinfo['css_emimage'])) {
        css_emimage_advagg_scan_for_changes($fileinfo['data'], TRUE);

        // Cache info.
        $cache_id = 'advagg:file:' . $fileinfo['filename_hash'];
        $fileinfo = isset($filename_hashes[$cache_id]) ? $filename_hashes[$cache_id] : NULL;
      }

      // Skip if no css images are in here.
      if (empty($fileinfo['css_emimage'])) {
        continue;
      }
      foreach ($fileinfo['css_emimage'] as $image_name => $image_info) {
        $total_base64_size += $image_info['base64_size'];
      }
    }

    // No css images; skip.
    if (empty($total_base64_size)) {
      $new_files[$filename] = $data;
      continue;
    }

    // Create new files to handle the extra data.
    // Add in the base file.
    if ($total_base64_size > variable_get('css_emimage_inline_datauri_limit', CSS_EMIMAGE_INLINE_DATAURI_LIMIT)) {
      $base_filename = css_emimage_replace_filename($filename, $modes['base']);
      $new_files[$base_filename] = $data;
      foreach ($new_files[$base_filename]['files'] as $key => $fileinfo) {
        $new_files[$base_filename]['files'][$key]['browsers'] = array(
          'IE' => 'gte IE 8',
        );
      }
    }

    // Add in the css embedded file.
    $emimage_filename = css_emimage_replace_filename($filename, $modes['emimage']);
    $new_files[$emimage_filename] = $data;
    foreach ($new_files[$emimage_filename]['files'] as $key => $fileinfo) {
      $new_files[$emimage_filename]['files'][$key]['browsers'] = array(
        'IE' => 'gte IE 8',
      );
    }

    // Add in the IE fallback file (orginal file).
    $new_files[$filename] = $data;
    foreach ($new_files[$filename]['files'] as $key => $fileinfo) {
      $new_files[$filename]['files'][$key]['browsers'] = array(
        '!IE' => FALSE,
        'IE' => 'lte IE 7',
      );
    }
  }
  $files = $new_files;
}