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;
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\Output\OutputInterface;
@@ -187,6 +189,10 @@ class Step35 implements DatasUpgraderInterface
}
$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\Utilities\NullableDateTime;
use Alchemy\Phrasea\WorkerManager\Event\AssetsCreateEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Doctrine\ORM\EntityManager;
use Guzzle\Http\Client as Guzzle;
@@ -1991,6 +1992,10 @@ class V1Controller extends Controller
$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, [
"record_metadatas" => $this->listRecordMetadata($record),
])->createResponse();
@@ -2599,6 +2604,10 @@ class V1Controller extends Controller
if(count($metadatas) > 0) {
$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'})) {

View File

@@ -17,6 +17,8 @@ use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Model\Entities\LazaretAttribute;
use Alchemy\Phrasea\Model\Entities\LazaretFile;
use Alchemy\Phrasea\Model\Entities\LazaretSession;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use caption_field;
use databox_field;
use Doctrine\DBAL\DBALException;
@@ -412,6 +414,10 @@ class V3RecordController extends Controller
$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;
}

View File

@@ -19,6 +19,8 @@ use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent;
use Alchemy\Phrasea\Core\Event\RecordEdit;
use Alchemy\Phrasea\Core\PhraseaEvents;
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\Response;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
@@ -71,6 +73,10 @@ class StoryController extends Controller
}
$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
$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\PhraseanetMetadataSetter;
use Alchemy\Phrasea\Record\RecordWasRotated;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use DataURI\Parser;
use MediaAlchemyst\Alchemyst;
use MediaVorus\MediaVorus;
@@ -441,6 +443,11 @@ class ToolsController extends Controller
];
try {
$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) {
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\Model\Entities\Preset;
use Alchemy\Phrasea\Model\Entities\User;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use caption_field;
use caption_Field_Value;
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 ($tval as $sy) {
// remove candidate from cterms

View File

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

View File

@@ -70,7 +70,7 @@ class PhraseanetServiceProvider implements ServiceProviderInterface
});
$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) {

View File

@@ -14,8 +14,11 @@ namespace Alchemy\Phrasea\Metadata;
use Alchemy\Phrasea\Border\File;
use Alchemy\Phrasea\Databox\DataboxRepository;
use Alchemy\Phrasea\Metadata\Tag\NoSource;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use DateTime;
use PHPExiftool\Driver\Metadata\Metadata;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class PhraseanetMetadataSetter
{
@@ -24,9 +27,12 @@ class PhraseanetMetadataSetter
*/
private $repository;
public function __construct(DataboxRepository $repository)
private $dispatcher;
public function __construct(DataboxRepository $repository, EventDispatcherInterface $dispatcher)
{
$this->repository = $repository;
$this->dispatcher = $dispatcher;
}
/**
@@ -83,6 +89,10 @@ class PhraseanetMetadataSetter
if (! empty($metadataInRecordFormat)) {
$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\MetaField;
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\EntityRepository;
use PHPExiftool\Driver\Metadata\Metadata;
@@ -220,6 +222,10 @@ class LazaretManipulator
$fields = $metaFields->toMetadataArray($record->getDatabox()->get_meta_structure());
$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

View File

@@ -23,6 +23,8 @@ use Alchemy\Phrasea\Border\Attribute as BorderAttribute;
use Alchemy\Phrasea\Border\MetadataBag;
use Alchemy\Phrasea\Border\MetaFieldsBag;
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\Metadata;
use PHPExiftool\Driver\Value\Mono as MonoValue;
@@ -1066,6 +1068,10 @@ class ArchiveJob extends AbstractJob
$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));
$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 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) {
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'))
->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\Repositories\WorkerRunningJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\RecordEditInWorkerEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\StoryCreateCoverEvent;
use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionCreationFailureEvent;
use Alchemy\Phrasea\WorkerManager\Event\SubdefinitionWritemetaEvent;
@@ -143,11 +144,12 @@ class RecordSubscriber implements EventSubscriberInterface
));
}
public function onMetadataChanged(MetadataChangedEvent $event)
public function onRecordsWriteMeta(RecordsWriteMetaEvent $event)
{
$databoxId = $event->getRecord()->getDataboxId();
$recordId = $event->getRecord()->getRecordId();
$databoxId = $event->getDataboxId();
$recordIds = $event->getRecordIds();
foreach ($recordIds as $recordId) {
$mediaSubdefRepository = $this->getMediaSubdefRepository($databoxId);
$mediaSubdefs = $mediaSubdefRepository->findByRecordIdsAndNames([$recordId]);
@@ -195,7 +197,7 @@ class RecordSubscriber implements EventSubscriberInterface
}
}
}
}
}
public function onStoryCreateCover(StoryCreateCoverEvent $event)
@@ -311,7 +313,7 @@ class RecordSubscriber implements EventSubscriberInterface
RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate',
RecordEvents::DELETE => 'onDelete',
WorkerEvents::SUBDEFINITION_CREATION_FAILURE => 'onSubdefinitionCreationFailure',
RecordEvents::METADATA_CHANGED => 'onMetadataChanged',
WorkerEvents::RECORDS_WRITE_META => 'onRecordsWriteMeta',
WorkerEvents::STORY_CREATE_COVER => 'onStoryCreateCover',
WorkerEvents::SUBDEFINITION_WRITE_META => 'onSubdefinitionWritemeta',
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\WorkerRunningJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\AssetsCreationRecordFailureEvent;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Queue\MessagePublisher;
use GuzzleHttp\Client;
@@ -305,6 +306,10 @@ class CreateRecordWorker implements WorkerInterface
}
$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()));

View File

@@ -8,6 +8,8 @@ use Alchemy\Phrasea\Core\Event\RecordEdit;
use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Model\Entities\WorkerRunningJob;
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 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
$this->repoWorker->reconnect();
$em->getConnection()->beginTransaction();

View File

@@ -6,8 +6,11 @@ use Alchemy\Phrasea\Application\Helper\FilesystemAware;
use Alchemy\Phrasea\Core\Configuration\PropertyAccess;
use Alchemy\Phrasea\Model\Entities\WorkerJob;
use Alchemy\Phrasea\Model\Repositories\WorkerJobRepository;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use GuzzleHttp\Client;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
class SubtitleWorker implements WorkerInterface
{
@@ -24,12 +27,15 @@ class SubtitleWorker implements WorkerInterface
/** @var WorkerJobRepository $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->conf = $conf;
$this->appboxLocator = $appboxLocator;
$this->logger = $logger;
$this->dispatcher = $dispatcher;
}
public function process(array $payload)
@@ -188,6 +194,10 @@ class SubtitleWorker implements WorkerInterface
try {
$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) {
$this->logger->error($e->getMessage());
$this->jobFinished($workerJob);
@@ -258,6 +268,10 @@ class SubtitleWorker implements WorkerInterface
try {
$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) {
$this->logger->error($e->getMessage());
$this->jobFinished($workerJob);

View File

@@ -10,6 +10,8 @@
*/
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Doctrine\DBAL\Driver\Statement;
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;
}
}
@@ -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;
}

View File

@@ -9,6 +9,8 @@
* 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\InputInterface;
use Symfony\Component\Console\Input\InputOption;
@@ -205,6 +207,11 @@ class module_console_fieldsMerge extends Command
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;
} 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\Output\OutputInterface;
use Alchemy\Phrasea\Command\Command;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
class module_console_fieldsRename extends Command
{
@@ -106,6 +108,11 @@ class module_console_fieldsRename extends Command
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;
} 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\SearchEngineInterface;
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
use Alchemy\Phrasea\WorkerManager\Event\WorkerEvents;
use Alchemy\Phrasea\WorkerManager\Event\RecordsWriteMetaEvent;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\DBALException;
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(
'UPDATE record SET moddate = NOW(), originalname = :originalname WHERE record_id = :record_id',
['originalname' => $original_name, 'record_id' => $this->getRecordId()]