You are here

function advagg_multi_update_atime in Advanced CSS/JS Aggregation 7.2

Update atime inside advagg_aggregates_versions and cache_advagg_info.

Parameters

array $files: List of files in the aggregate as well as the aggregate name.

Return value

bool Return TRUE if anything was written to the database.

2 calls to advagg_multi_update_atime()
advagg_build_aggregate_plans in ./advagg.inc
Replacement for drupal_build_css_cache() and drupal_build_js_cache().
advagg_missing_create_file in ./advagg.missing.inc
Given a filename create that file.

File

./advagg.module, line 3897
Advanced CSS/JS aggregation module.

Code

function advagg_multi_update_atime(array $files) {
  $write_done = FALSE;
  $records = array();
  foreach ($files as $values) {

    // Create the cache id.
    $cid = 'advagg:db:' . $values['aggregate_filenames_hash'] . ADVAGG_SPACE . $values['aggregate_contents_hash'];

    // Create the db record.
    $records[$cid] = array(
      'aggregate_filenames_hash' => $values['aggregate_filenames_hash'],
      'aggregate_contents_hash' => $values['aggregate_contents_hash'],
      'atime' => REQUEST_TIME,
    );
  }

  // Use the cache.
  $cids = array_keys($records);
  $caches = cache_get_multiple($cids, 'cache_advagg_info');
  if (!empty($caches)) {
    foreach ($caches as $cache) {

      // See if the atime value needs to be updated.
      if (!empty($cache->data['atime']) && $cache->data['atime'] > REQUEST_TIME - 12 * 60 * 60) {

        // If atime is less than 12 hours old, do nothing.
        unset($records[$cache->cid]);
      }
    }
  }
  if (empty($records)) {
    return $write_done;
  }
  foreach ($records as $cid => $record) {

    // Update atime in DB.
    $result = db_merge('advagg_aggregates_versions')
      ->key(array(
      'aggregate_filenames_hash' => $record['aggregate_filenames_hash'],
      'aggregate_contents_hash' => $record['aggregate_contents_hash'],
    ))
      ->fields(array(
      'atime' => $record['atime'],
    ))
      ->execute();
    if (!$write_done && $result) {
      $write_done = TRUE;
    }

    // Update the atime in the cache.
    // Get fresh copy of the cache.
    $cache = cache_get($cid, 'cache_advagg_info');

    // Set the atime.
    if (empty($cache->data)) {
      $cache = new stdClass();
    }
    $cache->data['atime'] = REQUEST_TIME;

    // Write to the cache.
    // CACHE_PERMANENT isn't good here. Use 2 weeks from now + 0-45 days.
    // The random 0 to 45 day addition is to prevent a cache stampede.
    cache_set($cid, $cache->data, 'cache_advagg_info', round(REQUEST_TIME + 1209600 + mt_rand(0, 3888000), -3));
  }
  return $write_done;
}