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);
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc