PHRAS-3277 create event recordsWitemeta

This commit is contained in:
aina esokia
2020-11-20 17:10:58 +03:00
parent c43f7672e4
commit e23b9dd294
22 changed files with 201 additions and 47 deletions

View File

@@ -12,6 +12,8 @@
namespace Alchemy\Phrasea\Command\Upgrade; namespace Alchemy\Phrasea\Command\Upgrade;
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
@@ -187,6 +189,10 @@ class Step35 implements DatasUpgraderInterface
} }
$record->set_metadatas($metadatas, true); $record->set_metadatas($metadatas, true);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} }
/** /**

View File

@@ -88,6 +88,7 @@ use Alchemy\Phrasea\Status\StatusStructure;
use Alchemy\Phrasea\TaskManager\LiveInformation; use Alchemy\Phrasea\TaskManager\LiveInformation;
use Alchemy\Phrasea\Utilities\NullableDateTime; use Alchemy\Phrasea\Utilities\NullableDateTime;
use Alchemy\Phrasea\WorkerManager\Event\AssetsCreateEvent; use Alchemy\Phrasea\WorkerManager\Event\AssetsCreateEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents; use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Guzzle\Http\Client as Guzzle; use Guzzle\Http\Client as Guzzle;
@@ -1991,6 +1992,10 @@ class V1Controller extends Controller
$record->set_metadatas($metadata); $record->set_metadatas($metadata);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $databox_id));
return Result::create($request, [ return Result::create($request, [
"record_metadatas" => $this->listRecordMetadata($record), "record_metadatas" => $this->listRecordMetadata($record),
])->createResponse(); ])->createResponse();
@@ -2599,6 +2604,10 @@ class V1Controller extends Controller
if(count($metadatas) > 0) { if(count($metadatas) > 0) {
$story->set_metadatas($metadatas); $story->set_metadatas($metadatas);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$story->getRecordId()], $story->getDataboxId()));
} }
if (isset($data->{'story_records'})) { if (isset($data->{'story_records'})) {

View File

@@ -17,6 +17,8 @@ use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Model\Entities\LazaretAttribute; use Alchemy\Phrasea\Model\Entities\LazaretAttribute;
use Alchemy\Phrasea\Model\Entities\LazaretFile; use Alchemy\Phrasea\Model\Entities\LazaretFile;
use Alchemy\Phrasea\Model\Entities\LazaretSession; use Alchemy\Phrasea\Model\Entities\LazaretSession;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use caption_field; use caption_field;
use databox_field; use databox_field;
use Doctrine\DBAL\DBALException; use Doctrine\DBAL\DBALException;
@@ -412,6 +414,10 @@ class V3RecordController extends Controller
$record->set_metadatas($metadatas_ops, true); $record->set_metadatas($metadatas_ops, true);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
return $metadatas_ops; return $metadatas_ops;
} }

View File

@@ -19,6 +19,8 @@ use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent;
use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\Event\RecordEdit;
use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Model\Entities\StoryWZ; use Alchemy\Phrasea\Model\Entities\StoryWZ;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@@ -71,6 +73,10 @@ class StoryController extends Controller
} }
$recordAdapter = $story->set_metadatas($metadatas); $recordAdapter = $story->set_metadatas($metadatas);
// order to write meta in file
$this->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$story->getRecordId()], $story->getDataboxId()));
// tell phraseanet to rebuild subdef // tell phraseanet to rebuild subdef
$this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($recordAdapter)); $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($recordAdapter));

View File

@@ -23,6 +23,8 @@ use Alchemy\Phrasea\Exception\RuntimeException;
use Alchemy\Phrasea\Metadata\PhraseanetMetadataReader; use Alchemy\Phrasea\Metadata\PhraseanetMetadataReader;
use Alchemy\Phrasea\Metadata\PhraseanetMetadataSetter; use Alchemy\Phrasea\Metadata\PhraseanetMetadataSetter;
use Alchemy\Phrasea\Record\RecordWasRotated; use Alchemy\Phrasea\Record\RecordWasRotated;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use DataURI\Parser; use DataURI\Parser;
use MediaAlchemyst\Alchemyst; use MediaAlchemyst\Alchemyst;
use MediaVorus\MediaVorus; use MediaVorus\MediaVorus;
@@ -441,6 +443,11 @@ class ToolsController extends Controller
]; ];
try { try {
$record->set_metadatas($metadatas); $record->set_metadatas($metadatas);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} }
catch (\Exception $e) { catch (\Exception $e) {
return $this->app->json(['success' => false, 'errorMessage' => $e->getMessage()]); return $this->app->json(['success' => false, 'errorMessage' => $e->getMessage()]);

View File

@@ -12,6 +12,8 @@ namespace Alchemy\Phrasea\Controller\Thesaurus;
use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\Controller;
use Alchemy\Phrasea\Model\Entities\Preset; use Alchemy\Phrasea\Model\Entities\Preset;
use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Model\Entities\User;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use caption_field; use caption_field;
use caption_Field_Value; use caption_Field_Value;
use databox; use databox;
@@ -1403,6 +1405,11 @@ class ThesaurusXmlHttpController extends Controller
} }
} }
// order to write metas for those records
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent($sbas['trids'], $sbas['sbas_id'])
);
foreach ($sbas['tvals'] as $tval) { foreach ($sbas['tvals'] as $tval) {
foreach ($tval as $sy) { foreach ($tval as $sy) {
// remove candidate from cterms // remove candidate from cterms

View File

@@ -164,6 +164,7 @@ class RecordEditSubscriber implements EventSubscriberInterface
'value' => $date->format('Y-m-d H:i:s'), 'value' => $date->format('Y-m-d H:i:s'),
) )
), true); ), true);
// when edit record write meta also are dispatched
} }
$record->clearStampCache(); $record->clearStampCache();

View File

@@ -70,7 +70,7 @@ class PhraseanetServiceProvider implements ServiceProviderInterface
}); });
$app['phraseanet.metadata-setter'] = $app->share(function (Application $app) { $app['phraseanet.metadata-setter'] = $app->share(function (Application $app) {
return new PhraseanetMetadataSetter($app['repo.databoxes']); return new PhraseanetMetadataSetter($app['repo.databoxes'], $app['dispatcher']);
}); });
$app['phraseanet.user-query'] = function (SilexApplication $app) { $app['phraseanet.user-query'] = function (SilexApplication $app) {

View File

@@ -14,8 +14,11 @@ namespace Alchemy\Phrasea\Metadata;
use Alchemy\Phrasea\Border\File; use Alchemy\Phrasea\Border\File;
use Alchemy\Phrasea\Databox\DataboxRepository; use Alchemy\Phrasea\Databox\DataboxRepository;
use Alchemy\Phrasea\Metadata\Tag\NoSource; use Alchemy\Phrasea\Metadata\Tag\NoSource;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use DateTime; use DateTime;
use PHPExiftool\Driver\Metadata\Metadata; use PHPExiftool\Driver\Metadata\Metadata;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class PhraseanetMetadataSetter class PhraseanetMetadataSetter
{ {
@@ -24,9 +27,12 @@ class PhraseanetMetadataSetter
*/ */
private $repository; private $repository;
public function __construct(DataboxRepository $repository) private $dispatcher;
public function __construct(DataboxRepository $repository, EventDispatcherInterface $dispatcher)
{ {
$this->repository = $repository; $this->repository = $repository;
$this->dispatcher = $dispatcher;
} }
/** /**
@@ -83,6 +89,10 @@ class PhraseanetMetadataSetter
if (! empty($metadataInRecordFormat)) { if (! empty($metadataInRecordFormat)) {
$record->set_metadatas($metadataInRecordFormat, true); $record->set_metadatas($metadataInRecordFormat, true);
// order to write meta in file
$this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} }
} }

View File

@@ -14,6 +14,8 @@ use Alchemy\Phrasea\Border;
use Alchemy\Phrasea\Border\Attribute\AttributeInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface;
use Alchemy\Phrasea\Border\Attribute\MetaField; use Alchemy\Phrasea\Border\Attribute\MetaField;
use Alchemy\Phrasea\Model\Entities\LazaretFile; use Alchemy\Phrasea\Model\Entities\LazaretFile;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use PHPExiftool\Driver\Metadata\Metadata; use PHPExiftool\Driver\Metadata\Metadata;
@@ -220,6 +222,10 @@ class LazaretManipulator
$fields = $metaFields->toMetadataArray($record->getDatabox()->get_meta_structure()); $fields = $metaFields->toMetadataArray($record->getDatabox()->get_meta_structure());
$record->set_metadatas($fields); $record->set_metadatas($fields);
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} }
//Delete lazaret file //Delete lazaret file

View File

@@ -23,6 +23,8 @@ use Alchemy\Phrasea\Border\Attribute as BorderAttribute;
use Alchemy\Phrasea\Border\MetadataBag; use Alchemy\Phrasea\Border\MetadataBag;
use Alchemy\Phrasea\Border\MetaFieldsBag; use Alchemy\Phrasea\Border\MetaFieldsBag;
use Alchemy\Phrasea\Model\Entities\LazaretSession; use Alchemy\Phrasea\Model\Entities\LazaretSession;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use PHPExiftool\Driver\Metadata\MetadataBag as ExiftoolMetadataBag; use PHPExiftool\Driver\Metadata\MetadataBag as ExiftoolMetadataBag;
use PHPExiftool\Driver\Metadata\Metadata; use PHPExiftool\Driver\Metadata\Metadata;
use PHPExiftool\Driver\Value\Mono as MonoValue; use PHPExiftool\Driver\Value\Mono as MonoValue;
@@ -1066,6 +1068,10 @@ class ArchiveJob extends AbstractJob
$story->set_metadatas($metaFields->toMetadataArray($metadatasStructure), true); $story->set_metadatas($metaFields->toMetadataArray($metadatasStructure), true);
} }
// order to write meta in file
$this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$story->getRecordId()], $story->getDataboxId()));
$story->setStatus(\databox_status::operation_or($stat0, $stat1)); $story->setStatus(\databox_status::operation_or($stat0, $stat1));
$app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($story)); $app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($story));

View File

@@ -0,0 +1,27 @@
<?php
namespace Alchemy\Phrasea\WorkerManager\Event;
use Symfony\Component\EventDispatcher\Event as SfEvent;
class RecordsWriteMetaEvent extends SfEvent
{
private $recordIds;
private $databoxId;
public function __construct(array $recordIds, $databoxId)
{
$this->databoxId = $databoxId;
$this->recordIds = $recordIds;
}
public function getRecordIds()
{
return $this->recordIds;
}
public function getDataboxId()
{
return $this->databoxId;
}
}

View File

@@ -25,4 +25,6 @@ final class WorkerEvents
const EXPOSE_UPLOAD_ASSETS = 'expose.upload_assets'; const EXPOSE_UPLOAD_ASSETS = 'expose.upload_assets';
const RECORD_EDIT_IN_WORKER = 'record.edit_in_worker'; const RECORD_EDIT_IN_WORKER = 'record.edit_in_worker';
const RECORDS_WRITE_META = 'records.write_meta';
} }

View File

@@ -141,7 +141,7 @@ class AlchemyWorkerServiceProvider implements PluginProviderInterface
})); }));
$app['alchemy_worker.type_based_worker_resolver']->addFactory(MessagePublisher::SUBTITLE_TYPE, new CallableWorkerFactory(function () use ($app) { $app['alchemy_worker.type_based_worker_resolver']->addFactory(MessagePublisher::SUBTITLE_TYPE, new CallableWorkerFactory(function () use ($app) {
return (new SubtitleWorker($app['repo.worker-job'], $app['conf'], new LazyLocator($app, 'phraseanet.appbox'), $app['alchemy_worker.logger'])) return (new SubtitleWorker($app['repo.worker-job'], $app['conf'], new LazyLocator($app, 'phraseanet.appbox'), $app['alchemy_worker.logger'], $app['dispatcher']))
->setFileSystemLocator(new LazyLocator($app, 'filesystem')) ->setFileSystemLocator(new LazyLocator($app, 'filesystem'))
->setTemporaryFileSystemLocator(new LazyLocator($app, 'temporary-filesystem')); ->setTemporaryFileSystemLocator(new LazyLocator($app, 'temporary-filesystem'));
})); }));

View File

@@ -13,6 +13,7 @@ use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository;
use Alchemy\Phrasea\Model\Entities\WorkerRunningJob; use Alchemy\Phrasea\Model\Entities\WorkerRunningJob;
use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository; use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\RecordEditInWorkerEvent; use Alchemy\Phrasea\WorkerManager\Event\RecordEditInWorkerEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\StoryCreateCoverEvent; use Alchemy\Phrasea\WorkerManager\Event\StoryCreateCoverEvent;
use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionCreationFailureEvent; use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionCreationFailureEvent;
use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionWritemetaEvent; use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionWritemetaEvent;
@@ -143,59 +144,60 @@ class RecordSubscriber implements EventSubscriberInterface
)); ));
} }
public function onMetadataChanged(MetadataChangedEvent $event) public function onRecordsWriteMeta(RecordsWriteMetaEvent $event)
{ {
$databoxId = $event->getRecord()->getDataboxId(); $databoxId = $event->getDataboxId();
$recordId = $event->getRecord()->getRecordId(); $recordIds = $event->getRecordIds();
$mediaSubdefRepository = $this->getMediaSubdefRepository($databoxId); foreach ($recordIds as $recordId) {
$mediaSubdefs = $mediaSubdefRepository->findByRecordIdsAndNames([$recordId]); $mediaSubdefRepository = $this->getMediaSubdefRepository($databoxId);
$mediaSubdefs = $mediaSubdefRepository->findByRecordIdsAndNames([$recordId]);
$databox = $this->getApplicationBox()->get_databox($databoxId); $databox = $this->getApplicationBox()->get_databox($databoxId);
$record = $databox->get_record($recordId); $record = $databox->get_record($recordId);
$type = $record->getType(); $type = $record->getType();
foreach ($mediaSubdefs as $subdef) { foreach ($mediaSubdefs as $subdef) {
// check subdefmetadatarequired from the subview setup in admin // check subdefmetadatarequired from the subview setup in admin
if ( $subdef->get_name() == 'document' || $this->isSubdefMetadataUpdateRequired($databox, $type, $subdef->get_name())) { if ( $subdef->get_name() == 'document' || $this->isSubdefMetadataUpdateRequired($databox, $type, $subdef->get_name())) {
if ($subdef->is_physically_present()) { if ($subdef->is_physically_present()) {
$payload = [ $payload = [
'message_type' => MessagePublisher::WRITE_METADATAS_TYPE, 'message_type' => MessagePublisher::WRITE_METADATAS_TYPE,
'payload' => [ 'payload' => [
'recordId' => $recordId, 'recordId' => $recordId,
'databoxId' => $databoxId, 'databoxId' => $databoxId,
'subdefName' => $subdef->get_name() 'subdefName' => $subdef->get_name()
] ]
]; ];
$this->messagePublisher->publishMessage($payload, MessagePublisher::METADATAS_QUEUE); $this->messagePublisher->publishMessage($payload, MessagePublisher::METADATAS_QUEUE);
} else { } else {
$payload = [ $payload = [
'message_type' => MessagePublisher::WRITE_METADATAS_TYPE, 'message_type' => MessagePublisher::WRITE_METADATAS_TYPE,
'payload' => [ 'payload' => [
'recordId' => $recordId, 'recordId' => $recordId,
'databoxId' => $databoxId, 'databoxId' => $databoxId,
'subdefName' => $subdef->get_name() 'subdefName' => $subdef->get_name()
] ]
]; ];
$logMessage = sprintf("Subdef %s is not physically present! to be passed in the %s ! payload >>> %s", $logMessage = sprintf("Subdef %s is not physically present! to be passed in the %s ! payload >>> %s",
$subdef->get_name(), $subdef->get_name(),
MessagePublisher::RETRY_METADATAS_QUEUE, MessagePublisher::RETRY_METADATAS_QUEUE,
json_encode($payload) json_encode($payload)
); );
$this->messagePublisher->pushLog($logMessage); $this->messagePublisher->pushLog($logMessage);
$this->messagePublisher->publishMessage( $this->messagePublisher->publishMessage(
$payload, $payload,
MessagePublisher::RETRY_METADATAS_QUEUE, MessagePublisher::RETRY_METADATAS_QUEUE,
2, 2,
'Subdef is not physically present!' 'Subdef is not physically present!'
); );
}
} }
} }
} }
} }
public function onStoryCreateCover(StoryCreateCoverEvent $event) public function onStoryCreateCover(StoryCreateCoverEvent $event)
@@ -311,7 +313,7 @@ class RecordSubscriber implements EventSubscriberInterface
RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate', RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate',
RecordEvents::DELETE => 'onDelete', RecordEvents::DELETE => 'onDelete',
WorkerEvents::SUBDEFINITION_CREATION_FAILURE => 'onSubdefinitionCreationFailure', WorkerEvents::SUBDEFINITION_CREATION_FAILURE => 'onSubdefinitionCreationFailure',
RecordEvents::METADATA_CHANGED => 'onMetadataChanged', WorkerEvents::RECORDS_WRITE_META => 'onRecordsWriteMeta',
WorkerEvents::STORY_CREATE_COVER => 'onStoryCreateCover', WorkerEvents::STORY_CREATE_COVER => 'onStoryCreateCover',
WorkerEvents::SUBDEFINITION_WRITE_META => 'onSubdefinitionWritemeta', WorkerEvents::SUBDEFINITION_WRITE_META => 'onSubdefinitionWritemeta',
WorkerEvents::RECORD_EDIT_IN_WORKER => 'onRecordEditInWorker' WorkerEvents::RECORD_EDIT_IN_WORKER => 'onRecordEditInWorker'

View File

@@ -23,6 +23,7 @@ use Alchemy\Phrasea\Model\Entities\WorkerRunningJob;
use Alchemy\Phrasea\Model\Repositories\UserRepository; use Alchemy\Phrasea\Model\Repositories\UserRepository;
use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository; use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\AssetsCreationRecordFailureEvent; use Alchemy\Phrasea\WorkerManager\Event\AssetsCreationRecordFailureEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents; use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher; use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher;
use GuzzleHttp\Client; use GuzzleHttp\Client;
@@ -305,6 +306,10 @@ class CreateRecordWorker implements WorkerInterface
} }
$story->set_metadatas($metadatas)->rebuild_subdefs(); $story->set_metadatas($metadatas)->rebuild_subdefs();
// order to write meta in file
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$story->getRecordId()], $story->getDataboxId()));
} }
$this->messagePublisher->pushLog(sprintf('The record record_id= %d was successfully added in the story record_id= %d', $elementCreated->getRecordId(), $story->getRecordId())); $this->messagePublisher->pushLog(sprintf('The record record_id= %d was successfully added in the story record_id= %d', $elementCreated->getRecordId(), $story->getRecordId()));

View File

@@ -8,6 +8,8 @@ use Alchemy\Phrasea\Core\Event\RecordEdit;
use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Model\Entities\WorkerRunningJob; use Alchemy\Phrasea\Model\Entities\WorkerRunningJob;
use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository; use Alchemy\Phrasea\Model\Repositories\WorkerRunningJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher; use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -127,6 +129,11 @@ class RecordEditWorker implements WorkerInterface
} }
} }
// order to write metas for those records
$this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent(array_column($payload['mdsParams'], 'record_id'), $payload['databoxId'])
);
// tell that we have finished to work on edit // tell that we have finished to work on edit
$this->repoWorker->reconnect(); $this->repoWorker->reconnect();
$em->getConnection()->beginTransaction(); $em->getConnection()->beginTransaction();

View File

@@ -6,8 +6,11 @@ use Alchemy\Phrasea\Application\Helper\FilesystemAware;
use Alchemy\Phrasea\Core\Configuration\PropertyAccess; use Alchemy\Phrasea\Core\Configuration\PropertyAccess;
use Alchemy\Phrasea\Model\Entities\WorkerJob; use Alchemy\Phrasea\Model\Entities\WorkerJob;
use Alchemy\Phrasea\Model\Repositories\WorkerJobRepository; use Alchemy\Phrasea\Model\Repositories\WorkerJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class SubtitleWorker implements WorkerInterface class SubtitleWorker implements WorkerInterface
{ {
@@ -24,12 +27,15 @@ class SubtitleWorker implements WorkerInterface
/** @var WorkerJobRepository $repoWorkerJob*/ /** @var WorkerJobRepository $repoWorkerJob*/
private $repoWorkerJob; private $repoWorkerJob;
public function __construct(WorkerJobRepository $repoWorkerJob, PropertyAccess $conf, callable $appboxLocator, LoggerInterface $logger) private $dispatcher;
public function __construct(WorkerJobRepository $repoWorkerJob, PropertyAccess $conf, callable $appboxLocator, LoggerInterface $logger, EventDispatcherInterface $dispatcher)
{ {
$this->repoWorkerJob = $repoWorkerJob; $this->repoWorkerJob = $repoWorkerJob;
$this->conf = $conf; $this->conf = $conf;
$this->appboxLocator = $appboxLocator; $this->appboxLocator = $appboxLocator;
$this->logger = $logger; $this->logger = $logger;
$this->dispatcher = $dispatcher;
} }
public function process(array $payload) public function process(array $payload)
@@ -188,6 +194,10 @@ class SubtitleWorker implements WorkerInterface
try { try {
$record->set_metadatas($metadatas); $record->set_metadatas($metadatas);
// order to write meta in file
$this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} catch (\Exception $e) { } catch (\Exception $e) {
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
$this->jobFinished($workerJob); $this->jobFinished($workerJob);
@@ -258,6 +268,10 @@ class SubtitleWorker implements WorkerInterface
try { try {
$record->set_metadatas($metadatas); $record->set_metadatas($metadatas);
// order to write meta in file
$this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId()));
} catch (\Exception $e) { } catch (\Exception $e) {
$this->logger->error($e->getMessage()); $this->logger->error($e->getMessage());
$this->jobFinished($workerJob); $this->jobFinished($workerJob);

View File

@@ -10,6 +10,8 @@
*/ */
use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Doctrine\DBAL\Driver\Statement; use Doctrine\DBAL\Driver\Statement;
class caption_field implements cache_cacheableInterface class caption_field implements cache_cacheableInterface
@@ -313,6 +315,11 @@ class caption_field implements cache_cacheableInterface
} }
} }
// order to write metas for those records
$app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent(array_column($rs, 'record_id'), $databox_field->get_databox()->get_sbas_id())
);
$n += $increment; $n += $increment;
} }
} }
@@ -361,6 +368,11 @@ class caption_field implements cache_cacheableInterface
} }
} }
// order to write metas for those records
$app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent(array_column($rs, 'record_id'), $databox_field->get_databox()->get_sbas_id())
);
$n += $increment; $n += $increment;
} }

View File

@@ -9,6 +9,8 @@
* file that was distributed with this source code. * file that was distributed with this source code.
*/ */
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
@@ -205,6 +207,11 @@ class module_console_fieldsMerge extends Command
unset($record); unset($record);
} }
// order to write metas for those records
$this->container['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent(array_column($results, 'record_id'), $input->getArgument('sbas_id'))
);
$start += $quantity; $start += $quantity;
} while (count($results) > 0); } while (count($results) > 0);

View File

@@ -13,6 +13,8 @@ use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Alchemy\Phrasea\Command\Command; use Alchemy\Phrasea\Command\Command;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
class module_console_fieldsRename extends Command class module_console_fieldsRename extends Command
{ {
@@ -106,6 +108,11 @@ class module_console_fieldsRename extends Command
unset($record); unset($record);
} }
// order to write metas for those records
$this->container['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent(array_column($results, 'record_id'), $input->getArgument('sbas_id'))
);
$start += $quantity; $start += $quantity;
} while (count($results) > 0); } while (count($results) > 0);

View File

@@ -35,6 +35,8 @@ use Alchemy\Phrasea\Record\RecordReference;
use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator\GpsPosition; use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator\GpsPosition;
use Alchemy\Phrasea\SearchEngine\SearchEngineInterface; use Alchemy\Phrasea\SearchEngine\SearchEngineInterface;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Doctrine\DBAL\Connection; use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DBALException; use Doctrine\DBAL\DBALException;
use Doctrine\ORM\EntityManager; use Doctrine\ORM\EntityManager;
@@ -876,6 +878,11 @@ class record_adapter implements RecordInterface, cache_cacheableInterface
} }
} }
// order to write metas
$this->app['dispatcher']->dispatch(WorkerEvents::RECORDS_WRITE_META,
new RecordsWriteMetaEvent([$this->getRecordId()], $this->getDataboxId())
);
$this->getDataboxConnection()->executeUpdate( $this->getDataboxConnection()->executeUpdate(
'UPDATE record SET moddate = NOW(), originalname = :originalname WHERE record_id = :record_id', 'UPDATE record SET moddate = NOW(), originalname = :originalname WHERE record_id = :record_id',
['originalname' => $original_name, 'record_id' => $this->getRecordId()] ['originalname' => $original_name, 'record_id' => $this->getRecordId()]