safedelete-1.0.0/modules/safedelete_menu_report/src/Service/CronGenerator.php
modules/safedelete_menu_report/src/Service/CronGenerator.php
<?php
namespace Drupal\safedelete_menu_report\Service;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Link;
use Drupal\Core\Lock\LockBackendInterface;
use Drupal\Core\Render\RendererInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Core\Url;
use Drupal\safedelete_menu_report\Service\ReportHelper;
class CronGenerator {
use StringTranslationTrait;
protected ReportHelper $helper;
protected RendererInterface $renderer;
protected FileSystemInterface $fs;
protected ConfigFactoryInterface $configFactory;
protected LanguageManagerInterface $languageManager;
protected LockBackendInterface $lock;
public function __construct(ReportHelper $helper, RendererInterface $renderer, FileSystemInterface $fs, ConfigFactoryInterface $configFactory, LanguageManagerInterface $languageManager, LockBackendInterface $lock, TranslationInterface $string_translation) {
$this->helper = $helper;
$this->renderer = $renderer;
$this->fs = $fs;
$this->configFactory = $configFactory;
$this->languageManager = $languageManager;
$this->lock = $lock;
$this->setStringTranslation($string_translation);
}
public function generateReportFile(): void {
$lock_id = 'safedelete_menu_report.generate';
if (!$this->lock->acquire($lock_id)) {
return;
}
try {
$config = $this->configFactory->get('safedelete_menu_report.settings');
$menus = (array) ($config->get('menus') ?? []);
if (empty($menus)) {
$link = Link::fromTextAndUrl($this->t('Safedelete settings'), Url::fromRoute('safedelete.settings'))->toString();
\Drupal::logger('safedelete_menu_report')->warning(
'No menus configured. Please configure menus in @link.',
['@link' => $link]);
}
$rows_exist = FALSE;
foreach ($menus as $menu_name) {
if (!$menu_name) continue;
$rows = $this->helper->buildReportRows($menu_name);
if (!empty($rows)) { $rows_exist = TRUE; break; }
}
$uri = 'public://safedelete_menu_report.txt';
$dir = 'public://';
$this->fs->prepareDirectory($dir, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
if ($rows_exist) {
$date = \Drupal::service('date.formatter')->format(\Drupal::time()->getCurrentTime(), 'custom', 'Y-m-d H:i T');
$this->fs->saveData('true: ' . $date, $uri, FileSystemInterface::EXISTS_REPLACE);
}
else {
$this->fs->saveData('', $uri, FileSystemInterface::EXISTS_REPLACE);
}
}
finally {
$this->lock->release($lock_id);
}
}
}
