FlagSubscriber.php in Open Social 10.3.x
Same filename and directory in other branches
- 8.9 modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 8.5 modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 8.6 modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 8.7 modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 8.8 modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 10.0.x modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 10.1.x modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 - 10.2.x modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.php
 
File
modules/social_features/social_content_report/src/EventSubscriber/FlagSubscriber.phpView source
<?php
namespace Drupal\social_content_report\EventSubscriber;
use Drupal\Core\Cache\CacheTagsInvalidatorInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityStorageException;
use Drupal\Core\Logger\LoggerChannelTrait;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\flag\Event\FlagEvents;
use Drupal\flag\Event\FlaggingEvent;
use Drupal\social_content_report\ContentReportServiceInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
 * Class FlagSubscriber.
 */
class FlagSubscriber implements EventSubscriberInterface {
  use StringTranslationTrait, LoggerChannelTrait;
  /**
   * Whether to unpublish the entity immediately on reporting or not.
   *
   * @var bool
   */
  protected $unpublishImmediately;
  /**
   * The Messenger service.
   *
   * @var \Drupal\Core\Messenger\MessengerInterface
   */
  protected $messenger;
  /**
   * The Cache tags invalidator service.
   *
   * @var \Drupal\Core\Cache\CacheTagsInvalidatorInterface
   */
  protected $cacheInvalidator;
  /**
   * The content report service.
   *
   * @var \Drupal\social_content_report\ContentReportServiceInterface
   */
  protected $socialContentReport;
  /**
   * Creates a DiffFormatter to render diffs in a table.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The config factory.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger service.
   * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_invalidator
   *   The cache tags invalidator service.
   * @param \Drupal\social_content_report\ContentReportServiceInterface $social_content_report
   *   The content report service.
   */
  public function __construct(ConfigFactoryInterface $config_factory, MessengerInterface $messenger, CacheTagsInvalidatorInterface $cache_invalidator, ContentReportServiceInterface $social_content_report) {
    $this->unpublishImmediately = $config_factory
      ->get('social_content_report.settings')
      ->get('unpublish_threshold');
    $this->messenger = $messenger;
    $this->cacheInvalidator = $cache_invalidator;
    $this->socialContentReport = $social_content_report;
  }
  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events = [];
    $events[FlagEvents::ENTITY_FLAGGED][] = [
      'onFlag',
    ];
    return $events;
  }
  /**
   * Listener for flagging events.
   *
   * @param \Drupal\flag\Event\FlaggingEvent $event
   *   The event when something is flagged.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function onFlag(FlaggingEvent $event) {
    $flagging = $event
      ->getFlagging();
    if (!in_array($flagging
      ->getFlagId(), $this->socialContentReport
      ->getReportFlagTypes())) {
      return;
    }
    // Retrieve the entity.
    $entity = $flagging
      ->getFlaggable();
    $entity_type = $entity
      ->getEntityTypeId();
    $entity_id = $entity
      ->id();
    $invalidated = FALSE;
    // Do nothing unless we need to unpublish the entity immediately.
    if ($this->unpublishImmediately) {
      try {
        $entity
          ->setPublished(FALSE);
        $entity
          ->save();
        $invalidated = TRUE;
      } catch (EntityStorageException $exception) {
        $this
          ->getLogger('social_content_report')
          ->error(t('@entity_type @entity_id could not be unpublished after a user reported it.', [
          '@entity_type' => $entity_type,
          '@entity_id' => $entity_id,
        ]));
      }
    }
    // In any case log that the report was submitted.
    $this->messenger
      ->addMessage($this
      ->t('Your report has been submitted.'));
    // Clear cache tags for entity to remove the Report link.
    if (!$invalidated) {
      $this->cacheInvalidator
        ->invalidateTags([
        $entity_type . ':' . $entity_id,
      ]);
    }
  }
}Classes
| 
            Name | 
                  Description | 
|---|---|
| FlagSubscriber | Class FlagSubscriber. |