You are here

function advagg_bundler_analysis in Advanced CSS/JS Aggregation 7

Same name and namespace in other branches
  1. 6 advagg_bundler/advagg_bundler.module \advagg_bundler_analysis()
  2. 7.2 advagg_bundler/advagg_bundler.module \advagg_bundler_analysis()

Given a filename return a bundle key.

Parameters

$filename: filename

$force: bypass the cache and get a fresh version of the analysis.

Return value

string to be used for the grouping key.

2 calls to advagg_bundler_analysis()
advagg_bundler_admin_settings_form in advagg_bundler/advagg_bundler.admin.inc
Form builder; Configure advagg settings.
advagg_bundler_advagg_filenames_alter in advagg_bundler/advagg_bundler.module
Implements hook_advagg_filenames_alter().

File

advagg_bundler/advagg_bundler.module, line 172
Advanced aggregation bundler module.

Code

function advagg_bundler_analysis($filename = '', $force = FALSE) {

  // Cache query in a static.
  static $analysis = array();
  if (empty($analysis)) {

    // See if we have a cached version of this.
    $count = db_query("SELECT COUNT(*) FROM {advagg_bundles} WHERE root = :root", array(
      ':root' => 1,
    ))
      ->fetchField();
    $cache = cache_get('advagg_bundler_analysis:' . $count);
    if (empty($cache->data) || $force) {

      // "Magic Query"; only needs to run once.
      // Return a count of how many root bundles all files are used in. Count is
      // padded with eight zeros so the count can be key sorted as a string
      // without worrying about it getting put in the wrong order.
      // Return the bundle_md5's value; we need something more unique than count
      // when grouping together.
      // Return the filename. Used for lookup.
      // We join the advagg bundles and files together making sure to only use
      // root bundles that have been used in the last 2 weeks. This prevents an
      // old site structure from influencing new bundles.
      // Grouping by the filename gives us the count and makes it so we don't
      // return a lot of rows;
      $result = db_query("\n        SELECT\n          count,\n          bundle_md5,\n          filename\n        FROM (\n          SELECT\n            LPAD(CAST(COUNT(*) AS char(8)), 8, '0') AS count,\n            bundle_md5,\n            filename_md5\n          FROM\n            {advagg_bundles}\n          WHERE\n            root = 1\n            AND\n            timestamp > %d\n          GROUP BY\n            filename_md5) AS ab\n        INNER JOIN {advagg_files} AS af USING ( filename_md5 )\n      ", REQUEST_TIME - variable_get('advagg_bundler_outdated', ADVAGG_BUNDLER_OUTDATED));

      // Save query into a static array with the filename as the key.
      while ($row = db_fetch_array($result)) {
        $analysis[$row['filename']] = $row['count'] . ' ' . $row['bundle_md5'];
      }

      // Invoke hook_advagg_bundler_analysis_alter() to give installed modules a
      // chance to alter the analysis array.
      drupal_alter('advagg_bundler_analysis', $analysis);

      // Save results to the cache.
      cache_set('advagg_bundler_analysis:' . $count, $analysis, 'cache', CACHE_TEMPORARY);
    }
    else {
      $analysis = $cache->data;
    }
  }

  // If no filename is given pass back then entire query results.
  if (empty($filename)) {
    return $analysis;
  }

  // Return a key to be used in groupings.
  if (!empty($analysis[$filename])) {
    return $analysis[$filename];
  }

  // We need to return a value that can be used as an array key if the query
  // didn't give us anything.
  return 0;
}