Skip to content

Commit

Permalink
Handle view events directly without a queue, because cron can't handl…
Browse files Browse the repository at this point in the history
…e it.
  • Loading branch information
LOBsTerr committed Sep 11, 2023
1 parent 6b9b726 commit 3efe84f
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 10 deletions.
2 changes: 1 addition & 1 deletion entity_activity_tracker.services.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
services:
entity_activity_tracker.activity_subscriber:
class: Drupal\entity_activity_tracker\EventSubscriber\ActivitySubscriber
arguments: ['@queue', '@entity_activity_tracker.activity_record_storage']
arguments: ['@queue', '@entity_activity_tracker.activity_record_storage', '@entity_activity_tracker.tracker_loader']
tags:
- { name: event_subscriber }

Expand Down
2 changes: 1 addition & 1 deletion src/EntityActivityTrackerViewsOperations.php
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ protected function getImplicitRelations() {
$joins[$entity_type->get('data_table')] = [
'left_field' => $entity_type->getKey('id'),
'field' => 'entity_id',
'type' => 'INNER',
'type' => 'LEFT',
'extra' => [
[
'field' => 'entity_type',
Expand Down
59 changes: 52 additions & 7 deletions src/EventSubscriber/ActivitySubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
use Drupal\core_event_dispatcher\EntityHookEvents;
use Drupal\core_event_dispatcher\Event\Core\CronEvent;
use Drupal\core_event_dispatcher\Event\Entity\AbstractEntityEvent;
use Drupal\entity_activity_tracker\ActivityRecordStorageInterface;
use Drupal\entity_activity_tracker\Entity\EntityActivityTrackerInterface;
use Drupal\entity_activity_tracker\QueueActivityItem;
use Drupal\entity_activity_tracker\TrackerLoader;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
Expand All @@ -30,20 +32,31 @@ class ActivitySubscriber implements EventSubscriberInterface {
*/
protected $activityRecordStorage;

/**
* Tracker loader.
*
* @var \Drupal\entity_activity_tracker\TrackerLoader
*/
protected $trackerLoader;

/**
* Constructs a new ActivitySubscriber object.
*
* @param \Drupal\Core\Queue\QueueFactory $queue
* Queue manager.
* @param \Drupal\entity_activity_tracker\ActivityRecordStorageInterface $activity_record_storage
* Activity record storage.
* @param \Drupal\entity_activity_tracker\TrackerLoader $tracker_loader
* Tracker loader.
*/
public function __construct(
QueueFactory $queue,
$activity_record_storage
ActivityRecordStorageInterface $activity_record_storage,
TrackerLoader $tracker_loader
) {
$this->queue = $queue;
$this->activityRecordStorage = $activity_record_storage;
$this->trackerLoader = $tracker_loader;
}

/**
Expand All @@ -53,7 +66,7 @@ public static function getSubscribedEvents() {
// Replace with constants later.
return [
'hook_event_dispatcher.cron' => 'scheduleDecay',
'hook_event_dispatcher.entity.view' => 'createActivityEvent',
'hook_event_dispatcher.entity.view' => 'processView',
'hook_event_dispatcher.entity.insert' => 'createActivityEvent',
'hook_event_dispatcher.entity.update' => 'createActivityEvent',
'hook_event_dispatcher.entity.delete' => 'deleteEntity',
Expand All @@ -71,6 +84,41 @@ public function scheduleDecay(CronEvent $event) {
$this->queueEvent($queue_activity_item);
}

/**
* Process view event.
*
* @param \Drupal\core_event_dispatcher\Event\Entity\AbstractEntityEvent $event
* The original event from which we dispatch activity event.
*/
public function processView(AbstractEntityEvent $event) {
$queue_activity_item = $this->createQueueActivityItem($event);

$trackers = $this->trackerLoader->getAll();
foreach ($trackers as $tracker) {
$plugins = $tracker->getEnabledProcessorsPlugins();
foreach ($plugins as $plugin) {
if ($plugin->canProcess($queue_activity_item)) {
$plugin->processActivity($queue_activity_item);
}
}
}
}

/**
* Create queue activity item.
*
* @param \Drupal\hook_event_dispatcher\Event\EventInterface $event
* The original event from which we dispatch activity event.
*
* @return \Drupal\entity_activity_tracker\QueueActivityItem
* Queue activity item.
*/
protected function createQueueActivityItem(AbstractEntityEvent $event) {
$queue_activity_item = new QueueActivityItem($event->getDispatcherType());
$queue_activity_item->setEntity($event->getEntity());
return $queue_activity_item;
}

/**
* Dispatch activity event based on an event.
*
Expand All @@ -79,22 +127,19 @@ public function scheduleDecay(CronEvent $event) {
*/
public function createActivityEvent(AbstractEntityEvent $event) {
$entity = $event->getEntity();
$queue_activity_item = new QueueActivityItem($event->getDispatcherType());
$queue_activity_item->setEntity($entity);

$entity_type_id = $entity->getEntityTypeId();

// Add tracker handling to a queue.
if ($entity_type_id == 'entity_activity_tracker' && $event->getDispatcherType() == EntityHookEvents::ENTITY_INSERT) {
$this->queueTrackerEvent($queue_activity_item);
$this->queueTrackerEvent($this->createQueueActivityItem($event));
}

// @todo IMPROVE THIS FIRST CONDITION!!
// Syncing entities should not count.
// @see: GroupContent::postSave()
// @todo Move allowed entities to settings
if (!$entity->isSyncing() && in_array($entity_type_id, EntityActivityTrackerInterface::ALLOWED_ENTITY_TYPES)) {
$this->queueEvent($queue_activity_item);
$this->queueEvent($this->createQueueActivityItem($event));
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Plugin/QueueWorker/CreditItemProcessorQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public static function create(ContainerInterface $container, array $configuratio
* {@inheritdoc}
*/
public function processItem($items) {
$count = 20;
$count = 50;
$i = 0;

// We get data for existing entities data from 'tracker_processor_queue'
Expand Down

0 comments on commit 3efe84f

Please sign in to comment.