filebrowser-8.x-2.x-dev/modules/src/EventSubscriber/MetadataEventSubscriber.php

modules/src/EventSubscriber/MetadataEventSubscriber.php
<?php

namespace Drupal\filebrowser_extra\EventSubscriber;

use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\File\FileSystem;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\filebrowser\Entity\FilebrowserMetadataEntity;
use Drupal\filebrowser\Events\MetadataEvent;
use Drupal\filebrowser\File\DisplayFile;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class MetadataEventSubscriber implements EventSubscriberInterface {
  use StringTranslationTrait;

  /**
   * @var integer
   */
  protected $nid;

  /**
   * The file system service.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;
  protected $dateFormatter;
  protected $storage;

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  public function __construct(FileSystem $fileSystem, DateFormatterInterface $dateFormatter, EntityTypeManagerInterface $entityTypeManager) {
      $this->fileSystem = $fileSystem;
      $this->dateFormatter = $dateFormatter;
      $this->entityTypeManager = $entityTypeManager;
      $this->storage = $this->entityTypeManager->getStorage('filebrowser_metadata_entity');
    }

  public static function getSubscribedEvents(): array {
    $events['filebrowser.metadata_event'][] = ['createModified', 0];
    return $events;
  }

  // fixme: "go up" folder table cell for modified not shown
  public function createModified(MetadataEvent $event) {
    $this->nid = $event->nid;
    $fid = $event->getFid();
    /** @var DisplayFile $file */
    $file = $event->file;
    $columns = $event->columns;

    // Only calculate modified time if this column is selected
    if (!empty($columns['modified'])) {
      if (isset($file->fileData->uri)) {
        $file_real_path = $this->fileSystem->realpath($file->fileData->uri);
        $m_time = filemtime($file_real_path);
        $m_time = empty($m_time) ? 0 : $m_time;
        $content = serialize($this->dateFormatter->format($m_time, 'short'));
        $theme = "";
        $query = $this->storage->getQuery()
          ->accessCheck(FALSE)
          ->condition('fid', $fid)
          ->condition('module', 'filebrowser_extra')
          ->condition('name', 'modified');
        $entity_id = $query->execute();

        if ($entity_id) {
          // entity exists, so we just update the contents
          /** @var FilebrowserMetadataEntity $metadata */
          $metadata = $this->storage->load(reset($entity_id));
          $metadata->setContent($content);
          $metadata->save();
        }
        else {
          $value = [
            'fid' => $fid,
            'nid' => $this->nid,
            'name' => 'modified',
            'title' => t('Modified'),
            'module' => 'filebrowser_extra',
            'theme' => $theme,
            'content' => $content,
          ];
          $entity = FilebrowserMetadataEntity::create($value);
          $entity->save();
        }
      }
    }
  }

}

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

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