See if any of the subfiles has changed.

Paramètres

string $filename: Name of the file that is related to the subfiles.

array $subfiles: An array of files to check for changes.

string $keyname: Under what key to save the info on the files.

bool $save_changes: If TRUE then the changes will be updated in the cache.

Return value

bool TRUE if one of the subfiles has changed.

1 call to advagg_detect_subfile_changes()
advagg_advagg_scan_for_changes dans ./advagg.advagg.inc
Implements hook_advagg_scan_for_changes().

Fichier

./advagg.cache.inc, line 896

Code

function advagg_detect_subfile_changes($filename, array $subfiles, $keyname, $save_changes = FALSE) {
    // Get the info on this file from the cache.
    module_load_include('inc', 'advagg', 'advagg');
    $info = advagg_get_info_on_file($filename);
    $hash_id = 'advagg:subfiles:' . $keyname . ':' . $info['filename_hash'];
    if (!isset($info[$keyname])) {
        // Pull up the info from the database if missing from the cache.
        $info[$keyname] = advagg_get_hash_settings($hash_id);
    }
    $subfile_changed = array();
    // Check every subfile seeing if they have changed.
    foreach ($subfiles as $subfile) {
        $current_file_info = $defaults = array(
            'hash' => '',
            'size' => 0,
            'mtime' => 0,
        );
        // Get the currently saved info on this file.
        $saved_file_info = isset($info[$keyname][$subfile]) ? $info[$keyname][$subfile] : array();
        $saved_file_info += $defaults;
        // Get the current info on the file.
        if (file_exists($subfile)) {
            $current_file_info = array(
                'hash' => drupal_hash_base64((string) @advagg_file_get_contents($subfile)),
                'size' => filesize($subfile),
                'mtime' => filemtime($subfile),
            );
        }
        // Set the info in case a save happens.
        $info[$keyname][$subfile] = $current_file_info;
        // Check for any differences.
        $diff = array_diff_assoc($saved_file_info, $current_file_info);
        if (!empty($diff)) {
            $subfile_changed[$subfile] = $diff;
        }
    }
    if (!empty($subfile_changed) && $save_changes) {
        $cache_id = 'advagg:file:' . $info['filename_hash'];
        // Set static cache.
        $filename_hashes =& drupal_static('advagg_get_info_on_file');
        $filename_hashes[$cache_id] = $info;
        // Set drupal cache.
        cache_set($cache_id, $info, 'cache_advagg_info', CACHE_PERMANENT);
        // Save to database.
        advagg_set_hash_settings($hash_id, $info[$keyname]);
    }
    return $subfile_changed;
}