cmlapi-8.x-1.2/src/Service/CmlCleaner.php

src/Service/CmlCleaner.php
<?php

namespace Drupal\cmlapi\Service;

use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;

/**
 * Class Cml Cleaner.
 */
class CmlCleaner {

  //phpcs:disable
  protected ConfigFactoryInterface $configFactory;
  protected EntityStorageInterface $cmlStorage;
  //phpcs:enable

  /**
   * Creates a new CmlService manager.
   */
  public function __construct(
    ConfigFactoryInterface $config_factory,
    EntityTypeManagerInterface $entity_type_manager,
  ) {
    $this->configFactory = $config_factory;
    $this->cmlStorage = $entity_type_manager->getStorage('cml');
  }

  /**
   * Get ids.
   */
  public function view() {
    $empty = $this->queryEmpty();
    $expired = $this->queryExpired();
    return array_merge($empty, $expired);
  }

  /**
   * Clean.
   */
  public function clean() {
    $empty = $this->deleteEmpty();
    $expired = $this->deleteExpired();
    return array_merge($empty, $expired);
  }

  /**
   * Empty delete.
   */
  public function deleteEmpty() {
    $ids = $this->queryEmpty();
    if (!empty($ids)) {
      foreach ($this->cmlStorage->loadMultiple($ids) as $id => $cml) {
        $cml->delete(TRUE);
      }
    }
    return $ids;
  }

  /**
   * Expired delete.
   */
  public function deleteExpired() {
    $ids = $this->queryExpired();
    if (!empty($ids)) {
      $config = $this->configFactory->get('cmlapi.mapsettings');
      $force = $config->get('cleaner-force');
      foreach ($this->cmlStorage->loadMultiple($ids) as $id => $cml) {
        foreach ($cml->field_file as $key => $value) {
          $file = $value->entity;
          if (is_object($file)) {
            $file->delete(TRUE);
          }
        }
        if ($force) {
          $dir = $this->cmlDir($cml);
          \Drupal::service('file_system')->deleteRecursive($dir);
        }
        $cml->delete(TRUE);
      }
    }
    return $ids;
  }

  /**
   * Empty cml.
   */
  public function queryEmpty() {
    $config = $this->configFactory->get('cmlapi.mapsettings');
    $expired = $config->get('cleaner-expired');
    $query = $this->cmlStorage->getQuery();
    $query->notExists('field_file')
      ->condition('created', strtotime($expired), '<')
      ->sort('created', 'ASC')
      ->accessCheck(FALSE)
      ->range(0, 25);
    $ids = $query->execute();
    $result = [];
    if (!empty($ids)) {
      foreach ($ids as $id) {
        $result[$id] = $id;
      }
    }
    return $result;
  }

  /**
   * Expired cml.
   */
  public function queryExpired() {
    $config = $this->configFactory->get('cmlapi.mapsettings');
    $skip = $config->get('cleaner-keep');
    $expired = $config->get('cleaner-expired');
    $query = $this->cmlStorage->getQuery();
    $query->condition('field_file', 'NULL', '!=')
      ->condition('state', 'success', '=')
      ->condition('created', strtotime($expired), '<')
      ->sort('created', 'DESC')
      ->accessCheck(FALSE)
      ->range($skip, 25);
    $ids = $query->execute();
    $result = [];
    if (!empty($ids)) {
      foreach ($ids as $id) {
        $result[$id] = $id;
      }
    }
    return $result;
  }

  /**
   * Get cml_id dir.
   */
  public function cmlDir($cml) {
    $config = $this->configFactory->get('cmlexchange.settings');
    $dir = 'cml-files';
    if ($config->get('file-path')) {
      $dir = $config->get('file-path');
    }
    $type = $cml->type->value;
    $time = \Drupal::service('date.formatter')->format($cml->created->value, 'custom', 'Y-m-d--H-i-s');
    $key = substr($cml->uuid->value, 0, 8);
    $cid = $cml->id();
    $dir = "public://{$dir}/{$type}/{$time}-$key-{$cid}";
    return $dir;
  }

}

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

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