You are here

function advagg_scan_for_changes in Advanced CSS/JS Aggregation 7.2

Uses the database to scan CSS/JS files for changes.

Return value

array Array of files that have changed.

1 call to advagg_scan_for_changes()
advagg_push_new_changes in ./advagg.cache.inc
Flush the correct caches so CSS/JS changes go live.
1 string reference to 'advagg_scan_for_changes'
advagg_hook_info in ./advagg.module
Implements hook_hook_info().

File

./advagg.cache.inc, line 16
Advanced CSS/JS aggregation module.

Code

function advagg_scan_for_changes() {

  // Get all files stored in the database and filesystem.
  $files_that_have_changed = array();
  $result = db_select('advagg_files', 'af')
    ->fields('af')
    ->execute();
  if (!empty($result)) {
    module_load_include('inc', 'advagg', 'advagg');
    $filenames = array();
    $data = array();
    foreach ($result as $row) {
      $filenames[] = $row->filename;
      $data[$row->filename] = (array) $row;
    }

    // Get filesystem data.
    $files_info = advagg_get_info_on_files($filenames, TRUE);
    foreach ($files_info as $info) {
      if (!isset($data[$info['data']])) {
        continue;
      }
      $row = $data[$info['data']];

      // Select the keys to compare.
      $keys_to_compare = array(
        'filesize',
        'content_hash',
        'linecount',
      );
      $changed = array();
      foreach ($keys_to_compare as $key) {
        if ($row[$key] != $info[$key]) {
          $changed[] = $key . ' db:' . $row[$key] . ' file:' . $info[$key];
          break;
        }
      }

      // Compare mtime if it is not zero.
      if (empty($info['split']) && !empty($info['mtime'])) {
        if (variable_get('advagg_strict_mtime_check', ADVAGG_STRICT_MTIME_CHECK) && $row['mtime'] != $info['mtime']) {
          $changed[] = 'mtime db:' . $row['mtime'] . ' file:' . $info['mtime'];
        }
        elseif ($row['mtime'] < $info['mtime']) {
          $changed[] = 'mtime db:' . $row['mtime'] . ' file:' . $info['mtime'];
        }
      }
      if (empty($changed)) {

        // Call hook_advagg_scan_for_changes().
        $changes_array = module_invoke_all('advagg_scan_for_changes', $row['filename']);
        if (is_array($changes_array)) {
          foreach ($changes_array as $value) {
            if (!empty($value)) {
              $changed[] = $value;
              break;
            }
          }
        }
      }

      // If file has changed, add it to the array.
      if (!empty($changed)) {
        $info['changes'] = $changed;
        $files_that_have_changed[$row['filename']] = $info;
      }
    }
  }
  return $files_that_have_changed;
}