From 2c1f20f69e4cb5e2890e1df1ff37b990bbe88445 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 27 May 2021 17:39:04 +0300 Subject: [PATCH] fix log session in edit --- .../Controller/Prod/EditController.php | 7 +++++-- .../Event/RecordEditInWorkerEvent.php | 10 +++++++-- .../Provider/AlchemyWorkerServiceProvider.php | 1 - .../Subscriber/RecordSubscriber.php | 3 ++- .../WorkerManager/Worker/EditRecordWorker.php | 6 +++--- .../WorkerManager/Worker/MainQueueWorker.php | 12 ++++++----- lib/classes/Session/Logger.php | 21 +++++++++++++++++++ 7 files changed, 46 insertions(+), 14 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php index 1d144a896b..f34e1223e9 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php @@ -336,9 +336,10 @@ class EditController extends Controller return $this->app->json(['message' => '', 'error' => false]); } + $sessionLogId = $this->getDataboxLogger($databox)->get_id(); // order the worker to save values in fields $this->dispatch(WorkerEvents::RECORD_EDIT_IN_WORKER, - new RecordEditInWorkerEvent(RecordEditInWorkerEvent::MDS_TYPE, $request->request->get('mds'), $databox->get_sbas_id()) + new RecordEditInWorkerEvent(RecordEditInWorkerEvent::MDS_TYPE, $request->request->get('mds'), $databox->get_sbas_id(), $sessionLogId) ); return $this->app->json(['success' => true]); @@ -362,10 +363,12 @@ class EditController extends Controller } $databoxId = reset($sbasIds); + $databox = $this->findDataboxById($databoxId); + $sessionLogId = $this->getDataboxLogger($databox)->get_id(); // order the worker to save values in fields $this->dispatch(WorkerEvents::RECORD_EDIT_IN_WORKER, - new RecordEditInWorkerEvent(RecordEditInWorkerEvent::JSON_TYPE, $request->getContent(), $databoxId) + new RecordEditInWorkerEvent(RecordEditInWorkerEvent::JSON_TYPE, $request->getContent(), $databoxId, $sessionLogId) ); return $this->app->json(['success' => true]); diff --git a/lib/Alchemy/Phrasea/WorkerManager/Event/RecordEditInWorkerEvent.php b/lib/Alchemy/Phrasea/WorkerManager/Event/RecordEditInWorkerEvent.php index 8b58a21e3b..0d94485d49 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Event/RecordEditInWorkerEvent.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Event/RecordEditInWorkerEvent.php @@ -12,13 +12,14 @@ class RecordEditInWorkerEvent extends SfEvent private $dataType; private $data; private $databoxId; + private $sessionLogId; - - public function __construct($dataType, $data, $databoxId) + public function __construct($dataType, $data, $databoxId, $sessionLogId) { $this->dataType = $dataType; $this->data = $data; $this->databoxId = $databoxId; + $this->sessionLogId = $sessionLogId; } public function getDataType() @@ -34,4 +35,9 @@ class RecordEditInWorkerEvent extends SfEvent { return $this->databoxId; } + + public function getSessionLogId() + { + return $this->sessionLogId; + } } diff --git a/lib/Alchemy/Phrasea/WorkerManager/Provider/AlchemyWorkerServiceProvider.php b/lib/Alchemy/Phrasea/WorkerManager/Provider/AlchemyWorkerServiceProvider.php index 3443020251..c20ca7638c 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Provider/AlchemyWorkerServiceProvider.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Provider/AlchemyWorkerServiceProvider.php @@ -161,7 +161,6 @@ class AlchemyWorkerServiceProvider implements PluginProviderInterface $app['alchemy_worker.type_based_worker_resolver']->addFactory(MessagePublisher::EDIT_RECORD_TYPE, new CallableWorkerFactory(function () use ($app) { return (new EditRecordWorker($app['repo.worker-running-job'], $app['dispatcher'], $app['alchemy_worker.message.publisher'])) ->setApplicationBox($app['phraseanet.appbox']) - ->setDataboxLoggerLocator($app['phraseanet.logger']) ; })); } diff --git a/lib/Alchemy/Phrasea/WorkerManager/Subscriber/RecordSubscriber.php b/lib/Alchemy/Phrasea/WorkerManager/Subscriber/RecordSubscriber.php index ee1bab7223..a7b3793c48 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Subscriber/RecordSubscriber.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Subscriber/RecordSubscriber.php @@ -293,7 +293,8 @@ class RecordSubscriber implements EventSubscriberInterface 'type' => MessagePublisher::EDIT_RECORD_TYPE, // used to specify the final Q to publish message 'dataType' => $event->getDataType(), 'data' => $event->getData(), - 'databoxId' => $event->getDataboxId() + 'databoxId' => $event->getDataboxId(), + 'sessionLogId' => $event->getSessionLogId() ] ]; diff --git a/lib/Alchemy/Phrasea/WorkerManager/Worker/EditRecordWorker.php b/lib/Alchemy/Phrasea/WorkerManager/Worker/EditRecordWorker.php index a5e6257650..eadbab5c0c 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Worker/EditRecordWorker.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Worker/EditRecordWorker.php @@ -17,7 +17,6 @@ use Symfony\Component\EventDispatcher\EventDispatcherInterface; class EditRecordWorker implements WorkerInterface { use ApplicationBoxAware; - use DataboxLoggerAware; private $repoWorker; private $dispatcher; @@ -75,6 +74,7 @@ class EditRecordWorker implements WorkerInterface $workerRunningJob = new WorkerRunningJob(); $workerRunningJob ->setDataboxId($payload['databoxId']) + ->setRecordId($payload['record_id']) ->setWork(MessagePublisher::EDIT_RECORD_TYPE) ->setWorkOn("record") ->setPublished($date->setTimestamp($payload['published'])) @@ -136,11 +136,11 @@ class EditRecordWorker implements WorkerInterface $record->write_metas(); if ($statbits != '') { - $this->getDataboxLogger($databox) + \Session_Logger::loadById($databox, $payload['sessionLogId']) ->log($record, \Session_Logger::EVENT_STATUS, '', ''); } if ($editDirty) { - $this->getDataboxLogger($databox) + \Session_Logger::loadById($databox, $payload['sessionLogId']) ->log($record, \Session_Logger::EVENT_EDIT, '', ''); } } else { diff --git a/lib/Alchemy/Phrasea/WorkerManager/Worker/MainQueueWorker.php b/lib/Alchemy/Phrasea/WorkerManager/Worker/MainQueueWorker.php index 3ee0545eb7..f39ece4a9a 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Worker/MainQueueWorker.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Worker/MainQueueWorker.php @@ -35,8 +35,9 @@ class MainQueueWorker implements WorkerInterface $queue = MessagePublisher::EDIT_RECORD_TYPE; if ($payload['dataType'] == RecordEditInWorkerEvent::MDS_TYPE) { $payloadData = array_map(function($singleMessage) use ($payload) { - $singleMessage['databoxId'] = $payload['databoxId']; - $singleMessage['dataType'] = $payload['dataType']; + $singleMessage['databoxId'] = $payload['databoxId']; + $singleMessage['dataType'] = $payload['dataType']; + $singleMessage['sessionLogId'] = $payload['sessionLogId']; return $singleMessage; }, $payload['data']); @@ -44,9 +45,10 @@ class MainQueueWorker implements WorkerInterface $data = json_decode($payload['data'], true); $payloadData = array_map(function($singleMessage) use ($payload, $data) { - $singleMessage['databoxId'] = $payload['databoxId']; - $singleMessage['dataType'] = $payload['dataType']; - $singleMessage['actions'] = $data['actions']; + $singleMessage['databoxId'] = $payload['databoxId']; + $singleMessage['sessionLogId'] = $payload['sessionLogId']; + $singleMessage['dataType'] = $payload['dataType']; + $singleMessage['actions'] = $data['actions']; unset($singleMessage['sbas_id']); return $singleMessage; diff --git a/lib/classes/Session/Logger.php b/lib/classes/Session/Logger.php index 8676b6de1c..2cefe15bbe 100644 --- a/lib/classes/Session/Logger.php +++ b/lib/classes/Session/Logger.php @@ -170,6 +170,27 @@ class Session_Logger return new self($databox, $row['id']); } + public static function loadById($databox, $logId) + { + $sql = 'SELECT id, site FROM log + WHERE id = :log_id '; + + $params = [ + ':log_id' => $logId + ]; + + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute($params); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + if (!$row) { + throw new Exception_Session_LoggerNotFound('Logger not found'); + } + + return new self($databox, $logId); + } + public static function updateClientInfos(Application $app, $appId) { if (!$app->getAuthenticator()->isAuthenticated()) {