Scan for missing files and remove the associated entries in the database.
Return value
array Array of what files were cleared out of the database.
2 calls to advagg_remove_missing_files_from_db()
- advagg_admin_remove_missing_files_from_db_button dans ./
advagg.admin.inc - Scan for missing files and remove the associated entries in the database.
- advagg_cron dans ./
advagg.module - Implements hook_cron().
Fichier
-
./
advagg.cache.inc, line 429
Code
function advagg_remove_missing_files_from_db() {
$missing_files = array();
$deleted = array();
// Get all files stored in the database.
$result = db_select('advagg_files', 'af')->fields('af')
->execute();
if (empty($result)) {
return $deleted;
}
// Find missing files.
module_load_include('inc', 'advagg', 'advagg');
foreach ($result as $row) {
$row = (array) $row;
$info = advagg_get_info_on_file($row['filename'], TRUE);
// Make sure file exists.
if (empty($info['content_hash'])) {
$info += advagg_get_aggregates_using_file($info['filename_hash']);
$missing_files[$row['filename']] = $info;
continue;
}
}
if (empty($missing_files)) {
return $deleted;
}
// Remove missing file database entries.
$types = array();
foreach ($missing_files as $filename => $data) {
// Setup this run.
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$advagg_files_del = 0;
$advagg_aggregates_del = 0;
$advagg_aggregates_versions_del = 0;
$clean_sweep = TRUE;
$filename_hash = '';
// Scan the data.
foreach ($data as $key => $values) {
if (!is_numeric($key)) {
$filename_hash = $values;
}
else {
// Remove the entry from the database if this aggregate has not been
// accessed in the last 2 weeks.
$can_delete = db_delete('advagg_aggregates_versions')->condition('aggregate_filenames_hash', $values['aggregate_filenames_hash'])
->condition('atime', REQUEST_TIME - variable_get('advagg_remove_missing_files_from_db_time', ADVAGG_REMOVE_MISSING_FILES_FROM_DB_TIME), '<')
->execute();
if ($can_delete > 0) {
$advagg_aggregates_versions_del += $can_delete;
$advagg_aggregates_del += db_delete('advagg_aggregates')->condition('aggregate_filenames_hash', $values['aggregate_filenames_hash'])
->execute();
}
else {
$clean_sweep = FALSE;
}
// Clear the cache.
cache_clear_all($values['cid'], 'cache_advagg_info', FALSE);
}
}
// Remove the file entry if all aggregates referencing it have been removed.
if ($clean_sweep) {
$advagg_files_del += db_delete('advagg_files')->condition('filename_hash', $filename_hash)
->execute();
// Add info to array.
if (!empty($advagg_files_del) || !empty($advagg_aggregates_versions_del) || !empty($advagg_aggregates_del)) {
$types[$ext] = TRUE;
$deleted[$filename] = array(
'advagg_files' => $advagg_files_del,
'advagg_aggregates_versions' => $advagg_aggregates_versions_del,
'advagg_aggregates' => $advagg_aggregates_del,
);
}
}
}
// If something was deleted, clear the full aggregates cache.
if (!empty($deleted)) {
foreach ($types as $ext => $bool) {
cache_clear_all('advagg:' . $ext . ':', 'cache_advagg_aggregates', TRUE);
}
}
// Return what was deleted.
return $deleted;
}