You are here

function advagg_js_compress_advagg_get_info_on_files_alter in Advanced CSS/JS Aggregation 7.2

Implements hook_advagg_get_info_on_files_alter().

Used to make sure the info is up to date in the cache.

Related topics

File

advagg_js_compress/advagg_js_compress.advagg.inc, line 23

Code

function advagg_js_compress_advagg_get_info_on_files_alter(&$return, $cached_data, $bypass_cache) {
  $compressor_list = advagg_js_compress_get_enabled_compressors(array(), -1);

  // Get cache ids.
  $cache_ids = array();
  foreach ($return as $filename => &$info) {
    if (empty($info['fileext']) || $info['fileext'] !== 'js') {
      continue;
    }

    // Check the cache.
    $cache_id = 'advagg:js_compress:info:' . $info['filename_hash'];
    $cache_id .= !empty($info['content_hash']) ? ':' . $info['content_hash'] : '';
    $cache_ids[$filename] = $cache_id;

    // Verify current data.
    $advagg_js_compress = array();
    if (!empty($info['advagg_js_compress'])) {
      foreach ($info['advagg_js_compress'] as $values) {
        $array_key = array_search($values['name'], $compressor_list);
        if ($array_key !== FALSE) {
          $cache_hits_data[$array_key] = $values;
        }
      }
    }
    ksort($advagg_js_compress);
    $info['advagg_js_compress'] = $advagg_js_compress;
  }
  unset($info);

  // If no cache ids are found bail out.
  if (empty($cache_ids)) {
    return;
  }

  // Get cached values.
  $values = array_values($cache_ids);
  $cache_hits = cache_get_multiple($values, 'cache_advagg_info');
  $compressors = advagg_js_compress_get_enabled_compressors();
  $advagg_get_info_on_file_cached_data = drupal_static('advagg_get_info_on_file');

  // Add cached values into $return.
  $filenames_info = array();
  foreach ($cache_ids as $filename => $cache_id) {
    $info =& $return[$filename];

    // Add in cached values.
    if (!empty($cache_hits[$cache_id]) && isset($cache_hits[$cache_id]->data)) {

      // Verify cache data.
      $cache_hits_data = array();
      foreach ($cache_hits[$cache_id]->data as $values) {
        $array_key = array_search($values['name'], $compressor_list);
        if ($array_key !== FALSE) {
          $cache_hits_data[$array_key] = $values;
        }
      }
      ksort($cache_hits_data);
      $info['advagg_js_compress'] = array_replace($info['advagg_js_compress'], $cache_hits_data);
    }

    // Generate missing values if needed.
    foreach ($compressors as $id => $name) {
      if (empty($info['advagg_js_compress'][$id])) {
        $filenames_info[$filename] = $info;
        break;
      }

      // Generate values if bypass cache is set and hashes do not match.
      if ($bypass_cache && (empty($advagg_get_info_on_file_cached_data[$info['cache_id']]['content_hash']) || $info['content_hash'] !== $advagg_get_info_on_file_cached_data[$info['cache_id']]['content_hash'])) {
        $filenames_info[$filename] = $info;
        break;
      }
    }
  }

  // Do nothing if compressors are disabled or cache level does not equal 0.
  if (empty($compressors) || variable_get('advagg_cache_level', ADVAGG_CACHE_LEVEL) != 0) {
    return;
  }
  if (!empty($filenames_info)) {
    $results = advagg_js_compress_run_mutiple_tests($filenames_info, $compressors);
    foreach ($results as $filename => $data) {
      $info =& $return[$filename];
      if (!empty($info['advagg_js_compress'])) {
        $data += $info['advagg_js_compress'];
      }
      $info['advagg_js_compress'] = $data;
    }
  }
}