CronHook.php
Namespace
Drupal\file\HookFile
-
core/
modules/ file/ src/ Hook/ CronHook.php
View source
<?php
declare (strict_types=1);
namespace Drupal\file\Hook;
use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
use Drupal\file\FileInterface;
use Drupal\file\FileUsage\FileUsageInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\Attribute\Autowire;
/**
* Implements hook_cron().
*/
class CronHook {
public function __construct(EntityTypeManagerInterface $entityTypeManager, StreamWrapperManagerInterface $streamWrapperManager, ConfigFactoryInterface $configFactory, FileUsageInterface $fileUsage, TimeInterface $time, LoggerInterface $logger) {
}
/**
* Implements hook_cron().
*/
public function __invoke() : void {
$age = $this->configFactory
->get('system.file')
->get('temporary_maximum_age');
$fileStorage = $this->entityTypeManager
->getStorage('file');
// Only delete temporary files if older than $age. Note that automatic cleanup
// is disabled if $age set to 0.
if ($age) {
$fids = $fileStorage->getQuery()
->accessCheck(FALSE)
->condition('status', FileInterface::STATUS_PERMANENT, '<>')
->condition('changed', $this->time
->getRequestTime() - $age, '<')
->range(0, 100)
->execute();
/** @var \Drupal\file\FileInterface[] $files */
$files = $fileStorage->loadMultiple($fids);
foreach ($files as $file) {
$references = $this->fileUsage
->listUsage($file);
if (empty($references)) {
if (!file_exists($file->getFileUri())) {
if (!$this->streamWrapperManager
->isValidUri($file->getFileUri())) {
$this->logger
->warning('Temporary file "%path" that was deleted during garbage collection did not exist on the filesystem. This could be caused by a missing stream wrapper.', [
'%path' => $file->getFileUri(),
]);
}
else {
$this->logger
->warning('Temporary file "%path" that was deleted during garbage collection did not exist on the filesystem.', [
'%path' => $file->getFileUri(),
]);
}
}
// Delete the file entity. If the file does not exist, this will
// generate a second notice in the watchdog.
$file->delete();
}
else {
$this->logger
->info('Did not delete temporary file "%path" during garbage collection because it is in use by the following modules: %modules.', [
'%path' => $file->getFileUri(),
'%modules' => implode(', ', array_keys($references)),
]);
}
}
}
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
CronHook | Implements hook_cron(). |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.