From 7541885637107aefd58f5cf4611ef6a40fc49adb Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 20 Sep 2019 16:01:48 +0400 Subject: [PATCH 001/104] buildsubdef with worker --- bin/console | 6 ++-- lib/Alchemy/Phrasea/Border/Manager.php | 4 ++- .../Controller/Prod/StoryController.php | 6 +++- .../Controller/Prod/ToolsController.php | 3 +- .../Core/Event/Record/RecordEvents.php | 2 ++ .../Event/Record/SubdefinitionBuildEvent.php | 34 +++++++++++++++++++ .../Event/Subscriber/RecordEditSubscriber.php | 16 ++++++--- lib/Alchemy/Phrasea/Media/SubdefGenerator.php | 18 ++++++++++ .../Phrasea/Media/SubdefSubstituer.php | 3 +- .../Phrasea/TaskManager/Job/ArchiveJob.php | 7 ++-- lib/classes/record/adapter.php | 6 ++-- 11 files changed, 90 insertions(+), 15 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php diff --git a/bin/console b/bin/console index 552cb672d0..02f4ccee61 100755 --- a/bin/console +++ b/bin/console @@ -133,9 +133,9 @@ $cli->command(new QueryParseCommand()); $cli->command(new QuerySampleCommand()); $cli->command(new FindConceptsCommand()); -$cli->command($cli['alchemy_worker.commands.run_dispatcher_command']); -$cli->command($cli['alchemy_worker.commands.run_worker_command']); -$cli->command($cli['alchemy_worker.commands.show_configuration']); +//$cli->command($cli['alchemy_worker.commands.run_dispatcher_command']); +//$cli->command($cli['alchemy_worker.commands.run_worker_command']); +//$cli->command($cli['alchemy_worker.commands.show_configuration']); $cli->loadPlugins(); diff --git a/lib/Alchemy/Phrasea/Border/Manager.php b/lib/Alchemy/Phrasea/Border/Manager.php index d8abc9ac99..55c28d9cbf 100644 --- a/lib/Alchemy/Phrasea/Border/Manager.php +++ b/lib/Alchemy/Phrasea/Border/Manager.php @@ -14,6 +14,8 @@ namespace Alchemy\Phrasea\Border; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Border\Checker\CheckerInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\Tag\TfArchivedate; use Alchemy\Phrasea\Metadata\Tag\TfQuarantine; @@ -333,7 +335,7 @@ class Manager $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element); if(!$nosubdef) { - $element->rebuild_subdefs(); + $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($element, true)); } return $element; diff --git a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php index 9a65ed61fa..19acc22a27 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php @@ -14,6 +14,8 @@ use Alchemy\Phrasea\Application\Helper\EntityManagerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Controller\Exception as ControllerException; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Model\Entities\StoryWZ; @@ -68,7 +70,9 @@ class StoryController extends Controller break; } - $story->set_metadatas($metadatas)->rebuild_subdefs(); + $recordAdapter = $story->set_metadatas($metadatas); + // tell phraseanet to rebuild subdef + $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($recordAdapter)); $storyWZ = new StoryWZ(); $storyWZ->setUser($this->getAuthenticatedUser()); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php index 872f385455..2318cf0638 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php @@ -16,6 +16,7 @@ use Alchemy\Phrasea\Application\Helper\SubDefinitionSubstituerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\PhraseanetMetadataReader; use Alchemy\Phrasea\Metadata\PhraseanetMetadataSetter; @@ -156,7 +157,7 @@ class ToolsController extends Controller } if (!$substituted || $force) { - $record->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($record)); } } diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php index c55245a7ff..ac725833ac 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php @@ -29,6 +29,8 @@ final class RecordEvents const SUB_DEFINITIONS_CREATED = 'record.sub_definitions_created'; const SUB_DEFINITION_CREATION_FAILED = 'record.sub_definition_creation_failed'; + const SUBDEFINITION_BUILD = 'record.subdefinition_build'; + const MEDIA_SUBSTITUTED = 'record.media_substituted'; const STORY_COVER_CHANGED = 'record.story_cover_changed'; diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php new file mode 100644 index 0000000000..701e3a2028 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php @@ -0,0 +1,34 @@ +isNewRecord = $isNewRecord; + } + + /** + * @return bool + */ + public function isNewRecord() + { + return $this->isNewRecord; + } +} diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php index d5c0c69f54..e58e77cdf7 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\Record\CollectionChangedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Metadata\Tag\TfEditdate; @@ -26,10 +27,11 @@ class RecordEditSubscriber implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - PhraseaEvents::RECORD_EDIT => 'onEdit', - PhraseaEvents::RECORD_UPLOAD => 'onEdit', - RecordEvents::ROTATE => 'onRecordChange', - RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', + PhraseaEvents::RECORD_EDIT => 'onEdit', + PhraseaEvents::RECORD_UPLOAD => 'onEdit', + RecordEvents::ROTATE => 'onRecordChange', + RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', + RecordEvents::SUBDEFINITION_BUILD => 'onBuildSubdefs', ); } @@ -49,6 +51,12 @@ class RecordEditSubscriber implements EventSubscriberInterface $recordAdapter->clearStampCache(); } + public function onBuildSubdefs(SubdefinitionBuildEvent $event) + { + $recordAdapter = $this->convertToRecordAdapter($event->getRecord()); + $recordAdapter->rebuild_subdefs(); + } + public function onEdit(RecordEdit $event) { static $into = false; diff --git a/lib/Alchemy/Phrasea/Media/SubdefGenerator.php b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php index 2dede228c5..7710069948 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefGenerator.php +++ b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php @@ -167,6 +167,24 @@ class SubdefGenerator ); } + /** + * set a logger to use + * @param LoggerInterface $logger + */ + public function setLogger(LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * to get the logger + * @return LoggerInterface + */ + public function getLogger() + { + return $this->logger; + } + private function generateSubdef(\record_adapter $record, \databox_subdef $subdef_class, $pathdest) { $start = microtime(true); diff --git a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php index 2259fa572d..1d096cf785 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php +++ b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Media; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Core\Event\Record\MediaSubstitutedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Filesystem\FilesystemService; use MediaAlchemyst\Alchemyst; use MediaAlchemyst\Exception\ExceptionInterface as MediaAlchemystException; @@ -79,7 +80,7 @@ class SubdefSubstituer $record->write_metas(); if ($shouldSubdefsBeRebuilt) { - $record->rebuild_subdefs(); + $this->dispatcher->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($record)); } $this->dispatcher->dispatch(RecordEvents::MEDIA_SUBSTITUTED, new MediaSubstitutedEvent($record)); diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php index 532eb8bbb5..db1f6b083a 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php @@ -12,6 +12,8 @@ namespace Alchemy\Phrasea\TaskManager\Job; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Border\File; use Alchemy\Phrasea\Border\Manager as borderManager; @@ -1001,7 +1003,7 @@ class ArchiveJob extends AbstractJob { // quick fix to reconnect if mysql is lost $app->getApplicationBox()->get_connection(); - $databox->get_connection(); + $collection->get_connection(); $status = \databox_status::operation_or($stat0, $stat1); @@ -1032,7 +1034,8 @@ class ArchiveJob extends AbstractJob } $story->setStatus(\databox_status::operation_or($stat0, $stat1)); - $story->rebuild_subdefs(); + + $app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($story)); unset($media); diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index c4045d9fc5..9d7beb2c1a 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -19,6 +19,7 @@ use Alchemy\Phrasea\Core\Event\Record\OriginalNameChangedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\Record\StatusChangedEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository; use Alchemy\Phrasea\Filesystem\FilesystemService; @@ -284,7 +285,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface $this->getDataboxConnection()->executeUpdate($sql, ['type' => $type, 'record_id' => $this->getRecordId()]); if ($old_type !== $type) { - $this->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($this)); } $this->type = $type; @@ -341,7 +342,8 @@ class record_adapter implements RecordInterface, cache_cacheableInterface array(':mime' => $mime, ':record_id' => $this->getRecordId()) )) { - $this->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($this)); + $this->delete_data_from_cache(); } From c712cb7cc3bba2957a4398105576f95cb777b2fa Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 20 Sep 2019 16:03:54 +0400 Subject: [PATCH 002/104] retrieve rabbitmq configuration from configuration.yml --- .../WorkerConfigurationServiceProvider.php | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php index 1b2e15d4f0..9931d4649f 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php @@ -32,11 +32,12 @@ class WorkerConfigurationServiceProvider implements ServiceProviderInterface $app['alchemy_queues.queues'] = $app->share(function (Application $app) { $defaultConfiguration = [ 'worker-queue' => [ - 'registry' => 'alchemy_worker.queue_registry', - 'host' => 'localhost', - 'port' => 5672, - 'user' => 'guest', - 'vhost' => '/' + 'registry' => 'alchemy_worker.queue_registry', + 'host' => 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'password' => 'guest', + 'vhost' => '/' ] ]; @@ -46,19 +47,22 @@ class WorkerConfigurationServiceProvider implements ServiceProviderInterface $queueConfigurations = $configuration->get(['workers', 'queue'], $defaultConfiguration); - $queueConfiguration = reset($queueConfigurations); - $queueKey = key($queueConfigurations); + $config = []; - if (! isset($queueConfiguration['name'])) { - if (! is_string($queueKey)) { - throw new \RuntimeException('Invalid queue configuration: configuration has no key or name.'); + foreach($queueConfigurations as $name => $queueConfiguration) { + $queueKey = $name; + + if (! isset($queueConfiguration['name'])) { + if (! is_string($queueKey)) { + throw new \RuntimeException('Invalid queue configuration: configuration has no key or name.'); + } + + $queueConfiguration['name'] = $queueKey; } - $queueConfiguration['name'] = $queueKey; + $config[$queueConfiguration['name']] = $queueConfiguration ; } - $config = [ $queueConfiguration['name'] => $queueConfiguration ]; - return $config; } catch (RuntimeException $exception) { From 65d7affcb53619e9ce406d8d2e75d0a4b7206e68 Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 20 Sep 2019 16:15:49 +0400 Subject: [PATCH 003/104] export mail : make it event oriented to facilitate worker treatement --- .../Controller/Prod/ExportController.php | 47 +++++--------- .../Phrasea/Core/Event/ExportMailEvent.php | 53 +++++++++++++++ .../Event/Subscriber/ExportSubscriber.php | 65 ++++++++++++++++++- lib/Alchemy/Phrasea/Core/PhraseaEvents.php | 3 +- .../Phrasea/Controller/Prod/ExportTest.php | 3 +- 5 files changed, 137 insertions(+), 34 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php b/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php index df6f2a9f19..f4692c99ac 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php @@ -15,6 +15,7 @@ use Alchemy\Phrasea\Application\Helper\FilesystemAware; use Alchemy\Phrasea\Application\Helper\NotifierAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Core\Event\ExportFailureEvent; +use Alchemy\Phrasea\Core\Event\ExportMailEvent; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Exception\InvalidArgumentException; use Alchemy\Phrasea\Model\Manipulator\TokenManipulator; @@ -193,42 +194,26 @@ class ExportController extends Controller $token = $this->getTokenManipulator()->createEmailExportToken(serialize($list)); if (count($destMails) > 0) { - //zip documents - \set_export::build_zip( - $this->app, - $token, - $list, - $this->app['tmp.download.path'].'/'. $token->getValue() . '.zip' - ); + $emitterId = $this->getAuthenticatedUser()->getId(); - $remaingEmails = $destMails; + $tokenValue = $token->getValue(); $url = $this->app->url('prepare_download', ['token' => $token->getValue(), 'anonymous' => false, 'type' => \Session_Logger::EVENT_EXPORTMAIL]); - $user = $this->getAuthenticatedUser(); - $emitter = new Emitter($user->getDisplayName(), $user->getEmail()); + $params = [ + 'url' => $url, + 'textmail' => $request->request->get('textmail'), + 'reading_confirm' => !!$request->request->get('reading_confirm', false), + 'ssttid' => $ssttid = $request->request->get('ssttid', ''), + 'lst' => $lst = $request->request->get('lst', ''), + ]; - foreach ($destMails as $key => $mail) { - try { - $receiver = new Receiver(null, trim($mail)); - } catch (InvalidArgumentException $e) { - continue; - } - - $mail = MailRecordsExport::create($this->app, $receiver, $emitter, $request->request->get('textmail')); - $mail->setButtonUrl($url); - $mail->setExpiration($token->getExpiration()); - - $this->deliver($mail, !!$request->request->get('reading_confirm', false)); - unset($remaingEmails[$key]); - } - - //some mails failed - if (count($remaingEmails) > 0) { - foreach ($remaingEmails as $mail) { - $this->dispatch(PhraseaEvents::EXPORT_MAIL_FAILURE, new ExportFailureEvent($this->getAuthenticatedUser(), $ssttid, $lst, \eventsmanager_notify_downloadmailfail::MAIL_FAIL, $mail)); - } - } + $this->dispatch(PhraseaEvents::EXPORT_MAIL_CREATE, new ExportMailEvent( + $emitterId, + $tokenValue, + $destMails, + $params + )); } return $this->app->json([ diff --git a/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php b/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php new file mode 100644 index 0000000000..3acafb4c70 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php @@ -0,0 +1,53 @@ +emitterUserId = $emitterUserId; + $this->tokenValue = $tokenValue; + $this->destinationMails = $destMails; + $this->params = $params; + } + + public function getTokenValue() + { + return $this->tokenValue; + } + + public function getDestinationMails() + { + return $this->destinationMails; + } + + public function getEmitterUserId() + { + return $this->emitterUserId; + } + + public function getParams() + { + return $this->params; + } +} diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php index fca66dab4a..d3c05a64b6 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php @@ -12,7 +12,15 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\ExportFailureEvent; +use Alchemy\Phrasea\Core\Event\ExportMailEvent; use Alchemy\Phrasea\Core\PhraseaEvents; +use Alchemy\Phrasea\Exception\InvalidArgumentException; +use Alchemy\Phrasea\Model\Entities\Token; +use Alchemy\Phrasea\Model\Repositories\TokenRepository; +use Alchemy\Phrasea\Model\Repositories\UserRepository; +use Alchemy\Phrasea\Notification\Emitter; +use Alchemy\Phrasea\Notification\Mail\MailRecordsExport; +use Alchemy\Phrasea\Notification\Receiver; class ExportSubscriber extends AbstractNotificationSubscriber { @@ -39,10 +47,65 @@ class ExportSubscriber extends AbstractNotificationSubscriber $this->app['event-manager']->notify($params['usr_id'], 'eventsmanager_notify_downloadmailfail', $datas, $mailed); } + public function onCreateExportMail(ExportMailEvent $event) + { + $destMails = $event->getDestinationMails(); + + $params = $event->getParams(); + + /** @var UserRepository $userRepository */ + $userRepository = $this->app['repo.users']; + + $user = $userRepository->find($event->getEmitterUserId()); + + /** @var TokenRepository $tokenRepository */ + $tokenRepository = $this->app['repo.tokens']; + + /** @var Token $token */ + $token = $tokenRepository->findValidToken($event->getTokenValue()); + + $list = unserialize($token->getData()); + + //zip documents + \set_export::build_zip( + $this->app, + $token, + $list, + $this->app['tmp.download.path'].'/'. $token->getValue() . '.zip' + ); + + $remaingEmails = $destMails; + + $emitter = new Emitter($user->getDisplayName(), $user->getEmail()); + + foreach ($destMails as $key => $mail) { + try { + $receiver = new Receiver(null, trim($mail)); + } catch (InvalidArgumentException $e) { + continue; + } + + $mail = MailRecordsExport::create($this->app, $receiver, $emitter, $params['textmail']); + $mail->setButtonUrl($params['url']); + $mail->setExpiration($token->getExpiration()); + + $this->deliver($mail, $params['reading_confirm']); + unset($remaingEmails[$key]); + } + + //some mails failed + if (count($remaingEmails) > 0) { + foreach ($remaingEmails as $mail) { + $this->app['dispatcher']->dispatch(PhraseaEvents::EXPORT_MAIL_FAILURE, new ExportFailureEvent($user, $params['ssttid'], $params['lst'], \eventsmanager_notify_downloadmailfail::MAIL_FAIL, $mail)); + } + } + } + public static function getSubscribedEvents() { return [ - PhraseaEvents::EXPORT_MAIL_FAILURE => 'onMailExportFailure' + PhraseaEvents::EXPORT_MAIL_FAILURE => 'onMailExportFailure', + PhraseaEvents::EXPORT_MAIL_CREATE => 'onCreateExportMail', ]; } } diff --git a/lib/Alchemy/Phrasea/Core/PhraseaEvents.php b/lib/Alchemy/Phrasea/Core/PhraseaEvents.php index 97c9c10ba5..90adac69dd 100644 --- a/lib/Alchemy/Phrasea/Core/PhraseaEvents.php +++ b/lib/Alchemy/Phrasea/Core/PhraseaEvents.php @@ -48,7 +48,8 @@ final class PhraseaEvents const BRIDGE_UPLOAD_FAILURE = 'bridge.upload-failure'; const EXPORT_MAIL_FAILURE = 'export.mail-failure'; - const EXPORT_CREATE = 'export.create'; + const EXPORT_CREATE = 'export.create'; + const EXPORT_MAIL_CREATE = 'export.mail-create'; const RECORD_EDIT = 'record.edit'; const RECORD_UPLOAD = 'record.upload'; diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php index da278639c2..925caa9945 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php @@ -165,7 +165,8 @@ class ExportTest extends \PhraseanetAuthenticatedWebTestCase */ public function testExportMail() { - $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailRecordsExport'); + // deliver method removed in the listener +// $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailRecordsExport'); $this->getClient()->request('POST', '/prod/export/mail/', [ 'lst' => $this->getRecord1()->getId(), From 9aaf66dd7c0e14519e56d7991c36200b0f9322f0 Mon Sep 17 00:00:00 2001 From: aynsix Date: Fri, 20 Sep 2019 16:55:03 +0400 Subject: [PATCH 004/104] initialize webhook with worker --- .../Model/Manipulator/WebhookEventManipulator.php | 6 +++--- lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php | 2 +- .../Phrasea/Webhook/WebhookPublisherInterface.php | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php index 40e7f812a7..30d20d1045 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php @@ -12,7 +12,7 @@ namespace Alchemy\Phrasea\Model\Manipulator; use Alchemy\Phrasea\Model\Entities\WebhookEvent; -use Alchemy\Phrasea\Webhook\WebhookPublisher; +use Alchemy\Phrasea\Webhook\WebhookPublisherInterface; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\EntityRepository; @@ -29,11 +29,11 @@ class WebhookEventManipulator implements ManipulatorInterface private $repository; /** - * @var WebhookPublisher + * @var WebhookPublisherInterface */ private $publisher; - public function __construct(ObjectManager $om, EntityRepository $repo, WebhookPublisher $publisher) + public function __construct(ObjectManager $om, EntityRepository $repo, WebhookPublisherInterface $publisher) { $this->om = $om; $this->repository = $repo; diff --git a/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php b/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php index 4304a5319f..2beaec292f 100644 --- a/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php +++ b/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php @@ -19,7 +19,7 @@ use Alchemy\Queue\MessageQueueRegistry; * Class WebhookPublisher publishes webhook event notifications in message queues * @package Alchemy\Phrasea\Webhook */ -class WebhookPublisher +class WebhookPublisher implements WebhookPublisherInterface { /** * @var MessageQueueRegistry diff --git a/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php b/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php new file mode 100644 index 0000000000..f8b4751ef0 --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php @@ -0,0 +1,10 @@ + Date: Tue, 24 Sep 2019 11:28:31 +0400 Subject: [PATCH 005/104] change event name --- lib/Alchemy/Phrasea/Border/Manager.php | 4 ++-- .../Phrasea/Controller/Prod/StoryController.php | 4 ++-- .../Phrasea/Controller/Prod/ToolsController.php | 4 ++-- .../Phrasea/Core/Event/Record/RecordEvents.php | 2 +- ...BuildEvent.php => SubdefinitionCreateEvent.php} | 2 +- .../Core/Event/Subscriber/RecordEditSubscriber.php | 14 +++++++------- lib/Alchemy/Phrasea/Media/SubdefSubstituer.php | 4 ++-- lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php | 4 ++-- lib/classes/record/adapter.php | 6 +++--- 9 files changed, 22 insertions(+), 22 deletions(-) rename lib/Alchemy/Phrasea/Core/Event/Record/{SubdefinitionBuildEvent.php => SubdefinitionCreateEvent.php} (92%) diff --git a/lib/Alchemy/Phrasea/Border/Manager.php b/lib/Alchemy/Phrasea/Border/Manager.php index 55c28d9cbf..d017d206e6 100644 --- a/lib/Alchemy/Phrasea/Border/Manager.php +++ b/lib/Alchemy/Phrasea/Border/Manager.php @@ -15,7 +15,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Border\Checker\CheckerInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\Tag\TfArchivedate; use Alchemy\Phrasea\Metadata\Tag\TfQuarantine; @@ -335,7 +335,7 @@ class Manager $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element); if(!$nosubdef) { - $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($element, true)); + $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($element, true)); } return $element; diff --git a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php index 19acc22a27..a90f0a0ed1 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php @@ -15,7 +15,7 @@ use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Controller\Exception as ControllerException; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Model\Entities\StoryWZ; @@ -72,7 +72,7 @@ class StoryController extends Controller $recordAdapter = $story->set_metadatas($metadatas); // tell phraseanet to rebuild subdef - $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($recordAdapter)); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($recordAdapter)); $storyWZ = new StoryWZ(); $storyWZ->setUser($this->getAuthenticatedUser()); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php index 2318cf0638..65f72a8a36 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php @@ -16,7 +16,7 @@ use Alchemy\Phrasea\Application\Helper\SubDefinitionSubstituerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\PhraseanetMetadataReader; use Alchemy\Phrasea\Metadata\PhraseanetMetadataSetter; @@ -157,7 +157,7 @@ class ToolsController extends Controller } if (!$substituted || $force) { - $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($record)); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record)); } } diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php index ac725833ac..e68f4afa84 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php @@ -29,7 +29,7 @@ final class RecordEvents const SUB_DEFINITIONS_CREATED = 'record.sub_definitions_created'; const SUB_DEFINITION_CREATION_FAILED = 'record.sub_definition_creation_failed'; - const SUBDEFINITION_BUILD = 'record.subdefinition_build'; + const SUBDEFINITION_CREATE = 'record.subdefinition_create'; const MEDIA_SUBSTITUTED = 'record.media_substituted'; diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionCreateEvent.php similarity index 92% rename from lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php rename to lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionCreateEvent.php index 701e3a2028..cbb36f4184 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionBuildEvent.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/SubdefinitionCreateEvent.php @@ -13,7 +13,7 @@ namespace Alchemy\Phrasea\Core\Event\Record; use Alchemy\Phrasea\Model\RecordInterface; -class SubdefinitionBuildEvent extends RecordEvent +class SubdefinitionCreateEvent extends RecordEvent { private $isNewRecord; diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php index e58e77cdf7..6c971002e5 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php @@ -13,7 +13,7 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\Record\CollectionChangedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Metadata\Tag\TfEditdate; @@ -27,11 +27,11 @@ class RecordEditSubscriber implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - PhraseaEvents::RECORD_EDIT => 'onEdit', - PhraseaEvents::RECORD_UPLOAD => 'onEdit', - RecordEvents::ROTATE => 'onRecordChange', - RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', - RecordEvents::SUBDEFINITION_BUILD => 'onBuildSubdefs', + PhraseaEvents::RECORD_EDIT => 'onEdit', + PhraseaEvents::RECORD_UPLOAD => 'onEdit', + RecordEvents::ROTATE => 'onRecordChange', + RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', + RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate', ); } @@ -51,7 +51,7 @@ class RecordEditSubscriber implements EventSubscriberInterface $recordAdapter->clearStampCache(); } - public function onBuildSubdefs(SubdefinitionBuildEvent $event) + public function onSubdefinitionCreate(SubdefinitionCreateEvent $event) { $recordAdapter = $this->convertToRecordAdapter($event->getRecord()); $recordAdapter->rebuild_subdefs(); diff --git a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php index 1d096cf785..8f7aa61e90 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php +++ b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php @@ -13,7 +13,7 @@ namespace Alchemy\Phrasea\Media; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Core\Event\Record\MediaSubstitutedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Filesystem\FilesystemService; use MediaAlchemyst\Alchemyst; use MediaAlchemyst\Exception\ExceptionInterface as MediaAlchemystException; @@ -80,7 +80,7 @@ class SubdefSubstituer $record->write_metas(); if ($shouldSubdefsBeRebuilt) { - $this->dispatcher->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($record)); + $this->dispatcher->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record)); } $this->dispatcher->dispatch(RecordEvents::MEDIA_SUBSTITUTED, new MediaSubstitutedEvent($record)); diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php index db1f6b083a..de418a4e71 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php @@ -13,7 +13,7 @@ namespace Alchemy\Phrasea\TaskManager\Job; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Border\File; use Alchemy\Phrasea\Border\Manager as borderManager; @@ -1035,7 +1035,7 @@ class ArchiveJob extends AbstractJob $story->setStatus(\databox_status::operation_or($stat0, $stat1)); - $app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($story)); + $app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($story)); unset($media); diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index 9d7beb2c1a..7c91e2e135 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -19,7 +19,7 @@ use Alchemy\Phrasea\Core\Event\Record\OriginalNameChangedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\Record\StatusChangedEvent; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionBuildEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository; use Alchemy\Phrasea\Filesystem\FilesystemService; @@ -285,7 +285,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface $this->getDataboxConnection()->executeUpdate($sql, ['type' => $type, 'record_id' => $this->getRecordId()]); if ($old_type !== $type) { - $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($this)); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($this)); } $this->type = $type; @@ -342,7 +342,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface array(':mime' => $mime, ':record_id' => $this->getRecordId()) )) { - $this->dispatch(RecordEvents::SUBDEFINITION_BUILD, new SubdefinitionBuildEvent($this)); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($this)); $this->delete_data_from_cache(); } From 4cac08c48fddd2251c915e3f76cd3aa38d18e324 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 25 Sep 2019 11:29:07 +0400 Subject: [PATCH 006/104] ask to write metadata only if record has subdefs --- lib/classes/record/adapter.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index 7c91e2e135..8475ff1d9c 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -1107,8 +1107,11 @@ class record_adapter implements RecordInterface, cache_cacheableInterface $this->set_xml($xml); unset($xml); - $this->write_metas(); - $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); + // if there is yet subdefs, ask to write metadata + if (count($this->getMediaSubdefRepository()->findByRecordIdsAndNames([$this->getRecordId()])) > 1 ) { + $this->write_metas(); + $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); + } return $this; } From e50b60306c3cd5dec7feff20a9083d5778e7a7f4 Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 25 Sep 2019 14:45:48 +0400 Subject: [PATCH 007/104] revert: 4cac08c48fddd2 do not use this approach --- lib/classes/record/adapter.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index 8475ff1d9c..7c91e2e135 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -1107,11 +1107,8 @@ class record_adapter implements RecordInterface, cache_cacheableInterface $this->set_xml($xml); unset($xml); - // if there is yet subdefs, ask to write metadata - if (count($this->getMediaSubdefRepository()->findByRecordIdsAndNames([$this->getRecordId()])) > 1 ) { - $this->write_metas(); - $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); - } + $this->write_metas(); + $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); return $this; } From 194b0b0f5ce9473934a9c54c352002589030caa0 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 26 Sep 2019 15:04:08 +0400 Subject: [PATCH 008/104] incorporate subdefWebhook into phraseanet --- lib/Alchemy/Phrasea/Application.php | 2 + .../WebhookSubdefEventSubscriber.php | 78 +++++++++++++++++++ .../Phrasea/Webhook/EventProcessorFactory.php | 8 +- .../Processor/SubdefEventProcessor.php | 17 ++++ 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php create mode 100644 lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php diff --git a/lib/Alchemy/Phrasea/Application.php b/lib/Alchemy/Phrasea/Application.php index 13c7728f86..08b96eb888 100644 --- a/lib/Alchemy/Phrasea/Application.php +++ b/lib/Alchemy/Phrasea/Application.php @@ -88,6 +88,7 @@ use Alchemy\Phrasea\Media\PermalinkMediaResolver; use Alchemy\Phrasea\Media\TechnicalDataServiceProvider; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\QueueProvider\QueueServiceProvider; +use Alchemy\Phrasea\Core\Event\Subscriber\WebhookSubdefEventSubscriber; use Alchemy\WorkerProvider\WorkerServiceProvider; use Doctrine\DBAL\Event\ConnectionEventArgs; use MediaVorus\Media\MediaInterface; @@ -742,6 +743,7 @@ class Application extends SilexApplication $dispatcher->addSubscriber(new LazaretSubscriber($app)); $dispatcher->addSubscriber(new ValidationSubscriber($app)); $dispatcher->addSubscriber(new WebhookUserEventSubscriber($app)); + $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app['manipulator.webhook-event'])); return $dispatcher; }) diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php new file mode 100644 index 0000000000..d3c06cdd72 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php @@ -0,0 +1,78 @@ +webhookManipulator = $manipulator; + } + + public function onSubdefCreated(SubDefinitionCreatedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef' => $event->getSubDefinitionName() + ]; + + $this->webhookManipulator->create( + WebhookEvent::RECORD_SUBDEF_CREATED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public function onSubdefCreationFailed(SubDefinitionCreationFailedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef' => $event->getSubDefinitionName() + ]; + + $this->webhookManipulator->create( + WebhookEvent::RECORD_SUBDEF_FAILED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public function onSubdefsCreated(SubDefinitionsCreatedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef_count' => count($event->getMedia()) + ]; + + $this->webhookManipulator->create( + WebhookEvent::RECORD_SUBDEFS_CREATED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public static function getSubscribedEvents() + { + return [ + RecordEvents::SUB_DEFINITION_CREATED => 'onSubdefCreated', + RecordEvents::SUB_DEFINITIONS_CREATED => 'onSubdefsCreated', + RecordEvents::SUB_DEFINITION_CREATION_FAILED => 'onSubdefCreationFailed' + ]; + } +} diff --git a/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php index 90edefc10c..79109a624c 100644 --- a/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php +++ b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php @@ -12,6 +12,7 @@ use Alchemy\Phrasea\Webhook\Processor\ProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\ProcessorInterface; use Alchemy\Phrasea\Webhook\Processor\UserDeletedProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\UserRegistrationProcessorFactory; +use Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor; class EventProcessorFactory { @@ -29,7 +30,10 @@ class EventProcessorFactory $this->registerFactory(WebhookEvent::FEED_ENTRY_TYPE, new FeedEntryProcessorFactory($app)); $this->registerFactory(WebhookEvent::USER_REGISTRATION_TYPE, new UserRegistrationProcessorFactory($app)); $this->registerFactory(WebhookEvent::ORDER_TYPE, new OrderNotificationProcessorFactory($app)); - $this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory($app)); + $this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory()); + $this->registerCallableFactory(WebhookEvent::RECORD_SUBDEF_TYPE, function () { + return new SubdefEventProcessor(); + }); } /** @@ -43,7 +47,7 @@ class EventProcessorFactory /** * @param string $eventType - * @param callback|callable $callable + * @param callback|callable|\Closure $callable */ public function registerCallableFactory($eventType, $callable) { diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php b/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php new file mode 100644 index 0000000000..4a442ed5db --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php @@ -0,0 +1,17 @@ + $event->getName(), + 'data' => $event->getData() + ]; + } +} From 5fc4d85aef4383d343ff7b05f2193496e38eb156 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 26 Sep 2019 15:30:59 +0400 Subject: [PATCH 009/104] fix --- lib/Alchemy/Phrasea/Application.php | 2 -- .../Phrasea/Core/Provider/WebhookServiceProvider.php | 10 +++++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Alchemy/Phrasea/Application.php b/lib/Alchemy/Phrasea/Application.php index 08b96eb888..13c7728f86 100644 --- a/lib/Alchemy/Phrasea/Application.php +++ b/lib/Alchemy/Phrasea/Application.php @@ -88,7 +88,6 @@ use Alchemy\Phrasea\Media\PermalinkMediaResolver; use Alchemy\Phrasea\Media\TechnicalDataServiceProvider; use Alchemy\Phrasea\Model\Entities\User; use Alchemy\QueueProvider\QueueServiceProvider; -use Alchemy\Phrasea\Core\Event\Subscriber\WebhookSubdefEventSubscriber; use Alchemy\WorkerProvider\WorkerServiceProvider; use Doctrine\DBAL\Event\ConnectionEventArgs; use MediaVorus\Media\MediaInterface; @@ -743,7 +742,6 @@ class Application extends SilexApplication $dispatcher->addSubscriber(new LazaretSubscriber($app)); $dispatcher->addSubscriber(new ValidationSubscriber($app)); $dispatcher->addSubscriber(new WebhookUserEventSubscriber($app)); - $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app['manipulator.webhook-event'])); return $dispatcher; }) diff --git a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php index 4b280c92f0..968ec607e1 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php @@ -2,6 +2,7 @@ namespace Alchemy\Phrasea\Core\Provider; +use Alchemy\Phrasea\Core\Event\Subscriber\WebhookSubdefEventSubscriber; use Alchemy\Phrasea\Webhook\EventProcessorFactory; use Alchemy\Phrasea\Webhook\EventProcessorWorker; use Alchemy\Phrasea\Webhook\WebhookInvoker; @@ -10,6 +11,7 @@ use Alchemy\Worker\CallableWorkerFactory; use Alchemy\Worker\TypeBasedWorkerResolver; use Silex\Application; use Silex\ServiceProviderInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class WebhookServiceProvider implements ServiceProviderInterface { @@ -69,6 +71,12 @@ class WebhookServiceProvider implements ServiceProviderInterface public function boot(Application $app) { - // no-op + $app['dispatcher'] = $app->share( + $app->extend('dispatcher', function (EventDispatcherInterface $dispatcher) use ($app) { + $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app['manipulator.webhook-event'])); + + return $dispatcher; + }) + ); } } From 56c44a1b3f7735a3e9539024d1dd4c4d2d581aea Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 26 Sep 2019 18:05:03 +0400 Subject: [PATCH 010/104] fix --- .../Subscriber/WebhookSubdefEventSubscriber.php | 17 +++++++---------- .../Core/Provider/WebhookServiceProvider.php | 16 +++++++++------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php index d3c06cdd72..ca5d88b2ab 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php @@ -7,19 +7,16 @@ use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreatedEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationFailedEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionsCreatedEvent; use Alchemy\Phrasea\Model\Entities\WebhookEvent; -use Alchemy\Phrasea\Model\Manipulator\WebhookEventManipulator; +use Silex\Application; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class WebhookSubdefEventSubscriber implements EventSubscriberInterface { - /** - * @var WebhookEventManipulator - */ - private $webhookManipulator; + private $app; - public function __construct(WebhookEventManipulator $manipulator) + public function __construct(Application $app) { - $this->webhookManipulator = $manipulator; + $this->app = $app; } public function onSubdefCreated(SubDefinitionCreatedEvent $event) @@ -30,7 +27,7 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface 'subdef' => $event->getSubDefinitionName() ]; - $this->webhookManipulator->create( + $this->app['manipulator.webhook-event']->create( WebhookEvent::RECORD_SUBDEF_CREATED, WebhookEvent::RECORD_SUBDEF_TYPE, $eventData @@ -45,7 +42,7 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface 'subdef' => $event->getSubDefinitionName() ]; - $this->webhookManipulator->create( + $this->app['manipulator.webhook-event']->create( WebhookEvent::RECORD_SUBDEF_FAILED, WebhookEvent::RECORD_SUBDEF_TYPE, $eventData @@ -60,7 +57,7 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface 'subdef_count' => count($event->getMedia()) ]; - $this->webhookManipulator->create( + $this->app['manipulator.webhook-event']->create( WebhookEvent::RECORD_SUBDEFS_CREATED, WebhookEvent::RECORD_SUBDEF_TYPE, $eventData diff --git a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php index 968ec607e1..43a5aeafa4 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php @@ -11,7 +11,7 @@ use Alchemy\Worker\CallableWorkerFactory; use Alchemy\Worker\TypeBasedWorkerResolver; use Silex\Application; use Silex\ServiceProviderInterface; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; class WebhookServiceProvider implements ServiceProviderInterface { @@ -60,6 +60,14 @@ class WebhookServiceProvider implements ServiceProviderInterface return $resolver; } ); + + $app['dispatcher'] = $app->share( + $app->extend('dispatcher', function (EventDispatcher $dispatcher, Application $app) { + $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app)); + + return $dispatcher; + }) + ); } private function createAlias(Application $app, $alias, $targetServiceKey) @@ -71,12 +79,6 @@ class WebhookServiceProvider implements ServiceProviderInterface public function boot(Application $app) { - $app['dispatcher'] = $app->share( - $app->extend('dispatcher', function (EventDispatcherInterface $dispatcher) use ($app) { - $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app['manipulator.webhook-event'])); - return $dispatcher; - }) - ); } } From 029cb23863326abc5c221ba98dfebdba541824f9 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 26 Sep 2019 18:15:41 +0400 Subject: [PATCH 011/104] update test --- .../Phrasea/Model/Repositories/WebhookEventRepositoryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Alchemy/Tests/Phrasea/Model/Repositories/WebhookEventRepositoryTest.php b/tests/Alchemy/Tests/Phrasea/Model/Repositories/WebhookEventRepositoryTest.php index 7d21844d66..d27c00738e 100644 --- a/tests/Alchemy/Tests/Phrasea/Model/Repositories/WebhookEventRepositoryTest.php +++ b/tests/Alchemy/Tests/Phrasea/Model/Repositories/WebhookEventRepositoryTest.php @@ -12,6 +12,6 @@ class WebhookEventRepositoryTest extends \PhraseanetTestCase { $events = self::$DI['app']['orm.em']->getRepository('Phraseanet:WebhookEvent')->findUnprocessedEvents(); // I have no clue as to why this magic number is here, probably best to discard test - $this->assertCount(6, $events); + $this->assertCount(41, $events); } } From 2163f0452dc8a3c6ec0c7197769619ceb614ccdc Mon Sep 17 00:00:00 2001 From: aynsix Date: Wed, 30 Oct 2019 14:19:13 +0400 Subject: [PATCH 012/104] PHRAS-2797 retrieve available subdef in event record.sub_definitions_created --- lib/Alchemy/Phrasea/Media/SubdefGenerator.php | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/Alchemy/Phrasea/Media/SubdefGenerator.php b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php index 9ab4d7ebe0..9612e3bc19 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefGenerator.php +++ b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php @@ -18,6 +18,7 @@ use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionsCreationEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationFailedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository; use Alchemy\Phrasea\Filesystem\FilesystemService; use Alchemy\Phrasea\Media\Subdef\Specification\PdfSpecification; use MediaAlchemyst\Alchemyst; @@ -170,13 +171,35 @@ class SubdefGenerator unset($this->tmpFilePath); } - $this->dispatch( - RecordEvents::SUB_DEFINITIONS_CREATED, - new SubDefinitionsCreatedEvent( - $record, - $mediaCreated - ) - ); + // if we created subdef one by one + if (count($wanted_subdefs) == 1) { + $mediaSubdefRepository = $this->getMediaSubdefRepository($record->getDataboxId()); + $mediaSubdefs = $mediaSubdefRepository->findByRecordIdsAndNames([$record->getRecordId()]); + $medias = []; + foreach ($mediaSubdefs as $subdef) { + try { + $medias[$subdef->get_name()] = $this->mediavorus->guess($subdef->getRealPath()); + } catch (MediaVorusFileNotFoundException $e) { + + } + } + + $this->dispatch( + RecordEvents::SUB_DEFINITIONS_CREATED, + new SubDefinitionsCreatedEvent( + $record, + $medias + ) + ); + } else { + $this->dispatch( + RecordEvents::SUB_DEFINITIONS_CREATED, + new SubDefinitionsCreatedEvent( + $record, + $mediaCreated + ) + ); + } } /** @@ -294,4 +317,14 @@ class SubdefGenerator $i = floor(log($bytes, 1024)); return round($bytes / pow(1024, $i), [0,0,2,2,3][$i]).['B','kB','MB','GB'][$i]; } + + /** + * @param $databoxId + * + * @return MediaSubdefRepository|Object + */ + private function getMediaSubdefRepository($databoxId) + { + return $this->app['provider.repo.media_subdef']->getRepositoryForDatabox($databoxId); + } } From 378f67c203d5930a91ee259fffc48cf4fd408d3f Mon Sep 17 00:00:00 2001 From: aynsix Date: Mon, 4 Nov 2019 17:19:18 +0400 Subject: [PATCH 013/104] PHRAS-2769 delete record --- lib/Alchemy/Phrasea/Controller/Prod/RecordController.php | 6 ++++-- lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php | 6 ++++-- .../Core/Event/Subscriber/RecordEditSubscriber.php | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php index 0a948d6d1d..8e9a609811 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php @@ -14,6 +14,8 @@ use Alchemy\Phrasea\Application\Helper\EntityManagerAware; use Alchemy\Phrasea\Application\Helper\SearchEngineAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; +use Alchemy\Phrasea\Core\Event\Record\DeleteEvent; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Model\Entities\BasketElement; @@ -234,7 +236,7 @@ class RecordController extends Controller if($trashCollectionsBySbasId[$sbasId] !== null) { if($record->getCollection()->get_coll_id() == $trashCollectionsBySbasId[$sbasId]->get_coll_id()) { // record is already in trash so delete it - $record->delete(); + $this->getEventDispatcher()->dispatch(RecordEvents::DELETE, new DeleteEvent($record)); } else { // move to trash collection $record->move_to_collection($trashCollectionsBySbasId[$sbasId], $this->getApplicationBox()); @@ -247,7 +249,7 @@ class RecordController extends Controller } } else { // no trash collection, delete - $record->delete(); + $this->getEventDispatcher()->dispatch(RecordEvents::DELETE, new DeleteEvent($record)); } } catch (\Exception $e) { } diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php index e68f4afa84..1399b1c8f5 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/RecordEvents.php @@ -13,8 +13,10 @@ namespace Alchemy\Phrasea\Core\Event\Record; final class RecordEvents { - const CREATED = 'record.created'; - const DELETED = 'record.deleted'; + const CREATED = 'record.created'; + const DELETED = 'record.deleted'; + const DELETE = 'record.delete'; + // Change const COLLECTION_CHANGED = 'record.collection_changed'; const METADATA_CHANGED = 'record.metadata_changed'; diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php index 6c971002e5..8307749eb5 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php @@ -11,6 +11,7 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\Record\CollectionChangedEvent; +use Alchemy\Phrasea\Core\Event\Record\DeleteEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; @@ -32,6 +33,7 @@ class RecordEditSubscriber implements EventSubscriberInterface RecordEvents::ROTATE => 'onRecordChange', RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate', + RecordEvents::DELETE => 'onDelete', ); } @@ -57,6 +59,12 @@ class RecordEditSubscriber implements EventSubscriberInterface $recordAdapter->rebuild_subdefs(); } + public function onDelete(DeleteEvent $event) + { + $recordAdapter = $this->convertToRecordAdapter($event->getRecord()); + $recordAdapter->delete(); + } + public function onEdit(RecordEdit $event) { static $into = false; From 97b579efc3ded6eb70f0d3c70f97a9fe8be5f15a Mon Sep 17 00:00:00 2001 From: aynsix Date: Mon, 4 Nov 2019 17:51:18 +0400 Subject: [PATCH 014/104] PHRAS-2769 add DeleteEvent file --- lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php new file mode 100644 index 0000000000..8d8bfdb379 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php @@ -0,0 +1,7 @@ + Date: Thu, 19 Dec 2019 16:09:35 +0400 Subject: [PATCH 015/104] start subdef creation after first write meta --- lib/Alchemy/Phrasea/Border/Manager.php | 19 +++++++------- .../Event/Record/MetadataChangedEvent.php | 25 +++++++++++++++++++ .../Metadata/PhraseanetMetadataSetter.php | 4 +-- .../TaskManager/Job/WriteMetadataJob.php | 16 +++++++++++- lib/classes/record/adapter.php | 14 +++++++++-- 5 files changed, 64 insertions(+), 14 deletions(-) diff --git a/lib/Alchemy/Phrasea/Border/Manager.php b/lib/Alchemy/Phrasea/Border/Manager.php index d017d206e6..543f97ebd6 100644 --- a/lib/Alchemy/Phrasea/Border/Manager.php +++ b/lib/Alchemy/Phrasea/Border/Manager.php @@ -14,8 +14,6 @@ namespace Alchemy\Phrasea\Border; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Border\Checker\CheckerInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface; -use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\Tag\TfArchivedate; use Alchemy\Phrasea\Metadata\Tag\TfQuarantine; @@ -112,6 +110,9 @@ class Manager if (($visa->isValid() || $forceBehavior === self::FORCE_RECORD) && $forceBehavior !== self::FORCE_LAZARET) { + // Write UUID + $file->getUUID(false, true); + $this->addMediaAttributes($file); $element = $this->createRecord($file, $nosubdef); @@ -119,14 +120,14 @@ class Manager $code = self::RECORD_CREATED; } else { + // Write UUID + $file->getUUID(false, true); + $element = $this->createLazaret($file, $visa, $session, $forceBehavior === self::FORCE_LAZARET); $code = self::LAZARET_CREATED; } - // Write UUID - $file->getUUID(false, true); - if (is_callable($callable)) { $callable($element, $visa, $code); } @@ -332,12 +333,12 @@ class Manager } } - $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element); - - if(!$nosubdef) { - $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($element, true)); + if ($nosubdef) { + $element->setNoSubdef(); } + $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element, true, $nosubdef);// true for $isNewRecord + return $element; } diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php index 65326b894b..5a3ed5c2ef 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php @@ -11,6 +11,31 @@ namespace Alchemy\Phrasea\Core\Event\Record; +use Alchemy\Phrasea\Model\RecordInterface; + class MetadataChangedEvent extends RecordEvent { + private $isNewRecord; + private $nosubdef; + + public function __construct(RecordInterface $record, $isNewRecord = false, $nosubdef = false) + { + parent::__construct($record); + + $this->isNewRecord = $isNewRecord; + $this->nosubdef = $nosubdef; + } + + /** + * @return bool + */ + public function isNewRecord() + { + return $this->isNewRecord; + } + + public function isNosubdef() + { + return $this->nosubdef; + } } diff --git a/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php b/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php index c72c884203..afa459f154 100644 --- a/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php +++ b/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php @@ -34,7 +34,7 @@ class PhraseanetMetadataSetter * @param \record_adapter $record * @throws \Exception_InvalidArgument */ - public function replaceMetadata($metadataCollection, \record_adapter $record) + public function replaceMetadata($metadataCollection, \record_adapter $record, $isNewRecord = false, $nosubdef = false) { $metaStructure = $this->repository->find($record->getDataboxId())->get_meta_structure()->get_elements(); @@ -82,7 +82,7 @@ class PhraseanetMetadataSetter } if (! empty($metadataInRecordFormat)) { - $record->set_metadatas($metadataInRecordFormat, true); + $record->set_metadatas($metadataInRecordFormat, true, $isNewRecord, $nosubdef); } } diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php index 795b0b2a83..7631044cf2 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php @@ -12,6 +12,8 @@ namespace Alchemy\Phrasea\TaskManager\Job; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\Metadata\TagFactory; use Alchemy\Phrasea\TaskManager\Editor\WriteMetadataEditor; @@ -69,7 +71,7 @@ class WriteMetadataJob extends AbstractJob foreach ($jobData->getApplication()->getDataboxes() as $databox) { $connection = $databox->get_connection(); - $statement = $connection->prepare('SELECT record_id, coll_id, jeton FROM record WHERE (jeton & :token > 0)'); + $statement = $connection->prepare('SELECT record_id, coll_id, work, jeton FROM record WHERE (jeton & :token > 0)'); $statement->execute(['token' => PhraseaTokens::WRITE_META]); $rs = $statement->fetchAll(\PDO::FETCH_ASSOC); $statement->closeCursor(); @@ -203,6 +205,13 @@ class WriteMetadataJob extends AbstractJob 'record_id' => $record_id, 'token' => PhraseaTokens::WRITE_META, ]); + + // write meta for the document is finished + // if it's a new record, order to create subdef + if (count($record->get_subdefs()) == 3 && count($subdefs) == 1 && isset($subdefs['document']) && $row['work'] != 1) { + $this->getDispatcher($jobData->getApplication())->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record, true)); + } + $statement->closeCursor(); } } @@ -217,6 +226,11 @@ class WriteMetadataJob extends AbstractJob return $app['exiftool.writer']; } + private function getDispatcher(Application $app) + { + return $app['dispatcher']; + } + /** * @param \databox $databox * @param string $subdefType diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index 7c91e2e135..ebf9c0d4e8 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -1083,7 +1083,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface * * @return record_adapter */ - public function set_metadatas(array $metadatas, $force_readonly = false) + public function set_metadatas(array $metadatas, $force_readonly = false, $isNewRecord = false, $nosubdef = false) { $databox_descriptionStructure = $this->getDatabox()->get_meta_structure(); @@ -1108,7 +1108,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface unset($xml); $this->write_metas(); - $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); + $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this, $isNewRecord, $nosubdef)); return $this; } @@ -1175,6 +1175,16 @@ class record_adapter implements RecordInterface, cache_cacheableInterface return $this; } + public function setNoSubdef() + { + $this->getDataboxConnection()->executeUpdate( + 'UPDATE record SET work = 1 WHERE record_id= :record_id', + ['record_id' => $this->getRecordId()] + ); + + return $this; + } + private function dispatch($eventName, RecordEvent $event) { $this->app['dispatcher']->dispatch($eventName, $event); From a8c19de4d35a0e08dd11566f912f0fdfe794f7cb Mon Sep 17 00:00:00 2001 From: Jean-Yves Gaulier Date: Thu, 13 Feb 2020 18:22:54 +0100 Subject: [PATCH 016/104] PHRAS-2927_optimize-feedback-process_4.1 add route "lightbox/ajax/GET_ELEMENTS/{{basket_id}}/" to get counts of elements validated as "yes", "no" or "nul". Will allow front to display alert before submitting --- .../Phrasea/Controller/LightboxController.php | 45 +++++++++++++++++++ .../Phrasea/ControllerProvider/Lightbox.php | 5 +++ 2 files changed, 50 insertions(+) diff --git a/lib/Alchemy/Phrasea/Controller/LightboxController.php b/lib/Alchemy/Phrasea/Controller/LightboxController.php index 30d7c81f65..19c7378c1f 100644 --- a/lib/Alchemy/Phrasea/Controller/LightboxController.php +++ b/lib/Alchemy/Phrasea/Controller/LightboxController.php @@ -450,6 +450,51 @@ class LightboxController extends Controller return $this->app->json($data); } + /** + * @param Basket $basket + * @return Response + */ + public function ajaxGetElementsAction(Basket $basket) + { + $ret = [ + 'error' => false, + 'datas' => [ + 'counts' => [ + 'yes' => 0, + 'no' => 0, + 'nul' => 0, + 'total' => 0 + ] + ] + ]; + try { + if (!$basket->getValidation()) { + throw new Exception('There is no validation session attached to this basket'); + } + foreach ($basket->getElements() as $element) { + $vd = $element->getUserValidationDatas($this->getAuthenticatedUser()); + if($vd->getAgreement() === true) { + $ret['datas']['counts']['yes']++; + } + elseif($vd->getAgreement() === false) { + $ret['datas']['counts']['no']++; + } + elseif($vd->getAgreement() === null) { + $ret['datas']['counts']['nul']++; + } + $ret['datas']['counts']['total']++; + } + } + catch (Exception $e) { + $ret = [ + 'error' => true, + 'datas' => $e->getMessage() + ]; + } + + return $this->app->json($ret); + } + /** * @param Basket $basket * @throws Exception diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php b/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php index c1485b862c..7e18fff788 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php @@ -105,6 +105,11 @@ class Lightbox implements ControllerProviderInterface, ServiceProviderInterface ->assert('basket', '\d+') ; + $controllers->get('/ajax/GET_ELEMENTS/{basket}/', 'controller.lightbox:ajaxGetElementsAction') + ->bind('lightbox_ajax_get_elements') + ->assert('basket', '\d+') + ; + return $controllers; } From db0489c05e271fff58cd648a09a839a95b4837e7 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 20 Feb 2020 11:11:18 +0300 Subject: [PATCH 017/104] Revert "start subdef creation after first write meta" This reverts commit cfa854f307edb356f8c79a67e84fa16f645a21da. --- lib/Alchemy/Phrasea/Border/Manager.php | 19 +++++++------- .../Event/Record/MetadataChangedEvent.php | 25 ------------------- .../Metadata/PhraseanetMetadataSetter.php | 4 +-- .../TaskManager/Job/WriteMetadataJob.php | 16 +----------- lib/classes/record/adapter.php | 14 ++--------- 5 files changed, 14 insertions(+), 64 deletions(-) diff --git a/lib/Alchemy/Phrasea/Border/Manager.php b/lib/Alchemy/Phrasea/Border/Manager.php index 543f97ebd6..d017d206e6 100644 --- a/lib/Alchemy/Phrasea/Border/Manager.php +++ b/lib/Alchemy/Phrasea/Border/Manager.php @@ -14,6 +14,8 @@ namespace Alchemy\Phrasea\Border; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Border\Checker\CheckerInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\Tag\TfArchivedate; use Alchemy\Phrasea\Metadata\Tag\TfQuarantine; @@ -110,9 +112,6 @@ class Manager if (($visa->isValid() || $forceBehavior === self::FORCE_RECORD) && $forceBehavior !== self::FORCE_LAZARET) { - // Write UUID - $file->getUUID(false, true); - $this->addMediaAttributes($file); $element = $this->createRecord($file, $nosubdef); @@ -120,14 +119,14 @@ class Manager $code = self::RECORD_CREATED; } else { - // Write UUID - $file->getUUID(false, true); - $element = $this->createLazaret($file, $visa, $session, $forceBehavior === self::FORCE_LAZARET); $code = self::LAZARET_CREATED; } + // Write UUID + $file->getUUID(false, true); + if (is_callable($callable)) { $callable($element, $visa, $code); } @@ -333,11 +332,11 @@ class Manager } } - if ($nosubdef) { - $element->setNoSubdef(); - } + $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element); - $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element, true, $nosubdef);// true for $isNewRecord + if(!$nosubdef) { + $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($element, true)); + } return $element; } diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php index 5a3ed5c2ef..65326b894b 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/MetadataChangedEvent.php @@ -11,31 +11,6 @@ namespace Alchemy\Phrasea\Core\Event\Record; -use Alchemy\Phrasea\Model\RecordInterface; - class MetadataChangedEvent extends RecordEvent { - private $isNewRecord; - private $nosubdef; - - public function __construct(RecordInterface $record, $isNewRecord = false, $nosubdef = false) - { - parent::__construct($record); - - $this->isNewRecord = $isNewRecord; - $this->nosubdef = $nosubdef; - } - - /** - * @return bool - */ - public function isNewRecord() - { - return $this->isNewRecord; - } - - public function isNosubdef() - { - return $this->nosubdef; - } } diff --git a/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php b/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php index afa459f154..c72c884203 100644 --- a/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php +++ b/lib/Alchemy/Phrasea/Metadata/PhraseanetMetadataSetter.php @@ -34,7 +34,7 @@ class PhraseanetMetadataSetter * @param \record_adapter $record * @throws \Exception_InvalidArgument */ - public function replaceMetadata($metadataCollection, \record_adapter $record, $isNewRecord = false, $nosubdef = false) + public function replaceMetadata($metadataCollection, \record_adapter $record) { $metaStructure = $this->repository->find($record->getDataboxId())->get_meta_structure()->get_elements(); @@ -82,7 +82,7 @@ class PhraseanetMetadataSetter } if (! empty($metadataInRecordFormat)) { - $record->set_metadatas($metadataInRecordFormat, true, $isNewRecord, $nosubdef); + $record->set_metadatas($metadataInRecordFormat, true); } } diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php index 7631044cf2..795b0b2a83 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/WriteMetadataJob.php @@ -12,8 +12,6 @@ namespace Alchemy\Phrasea\TaskManager\Job; use Alchemy\Phrasea\Application; -use Alchemy\Phrasea\Core\Event\Record\RecordEvents; -use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\Metadata\TagFactory; use Alchemy\Phrasea\TaskManager\Editor\WriteMetadataEditor; @@ -71,7 +69,7 @@ class WriteMetadataJob extends AbstractJob foreach ($jobData->getApplication()->getDataboxes() as $databox) { $connection = $databox->get_connection(); - $statement = $connection->prepare('SELECT record_id, coll_id, work, jeton FROM record WHERE (jeton & :token > 0)'); + $statement = $connection->prepare('SELECT record_id, coll_id, jeton FROM record WHERE (jeton & :token > 0)'); $statement->execute(['token' => PhraseaTokens::WRITE_META]); $rs = $statement->fetchAll(\PDO::FETCH_ASSOC); $statement->closeCursor(); @@ -205,13 +203,6 @@ class WriteMetadataJob extends AbstractJob 'record_id' => $record_id, 'token' => PhraseaTokens::WRITE_META, ]); - - // write meta for the document is finished - // if it's a new record, order to create subdef - if (count($record->get_subdefs()) == 3 && count($subdefs) == 1 && isset($subdefs['document']) && $row['work'] != 1) { - $this->getDispatcher($jobData->getApplication())->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record, true)); - } - $statement->closeCursor(); } } @@ -226,11 +217,6 @@ class WriteMetadataJob extends AbstractJob return $app['exiftool.writer']; } - private function getDispatcher(Application $app) - { - return $app['dispatcher']; - } - /** * @param \databox $databox * @param string $subdefType diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index e8dc587451..f58d54abea 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -1083,7 +1083,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface * * @return record_adapter */ - public function set_metadatas(array $metadatas, $force_readonly = false, $isNewRecord = false, $nosubdef = false) + public function set_metadatas(array $metadatas, $force_readonly = false) { $databox_descriptionStructure = $this->getDatabox()->get_meta_structure(); @@ -1108,7 +1108,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface unset($xml); $this->write_metas(); - $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this, $isNewRecord, $nosubdef)); + $this->dispatch(RecordEvents::METADATA_CHANGED, new MetadataChangedEvent($this)); return $this; } @@ -1175,16 +1175,6 @@ class record_adapter implements RecordInterface, cache_cacheableInterface return $this; } - public function setNoSubdef() - { - $this->getDataboxConnection()->executeUpdate( - 'UPDATE record SET work = 1 WHERE record_id= :record_id', - ['record_id' => $this->getRecordId()] - ); - - return $this; - } - private function dispatch($eventName, RecordEvent $event) { $this->app['dispatcher']->dispatch($eventName, $event); From cfff23082036eef763be50d625487bfd5ba91b7d Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 20 Feb 2020 16:02:50 +0300 Subject: [PATCH 018/104] command databox:mount --- bin/console | 2 + .../Command/Databox/MountDataboxCommand.php | 107 +++++++++++++----- 2 files changed, 81 insertions(+), 28 deletions(-) diff --git a/bin/console b/bin/console index 552cb672d0..fb03725915 100755 --- a/bin/console +++ b/bin/console @@ -24,6 +24,7 @@ use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; +use Alchemy\Phrasea\Command\Databox\MountDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; use Alchemy\Phrasea\Command\RecordAdd; @@ -109,6 +110,7 @@ $cli->command(new \module_console_fieldsMerge('fields:merge')); $cli->command(new CreateCollection('collection:create')); $cli->command(new CreateDataboxCommand('databox:create')); +$cli->command(new MountDataboxCommand('databox:mount')); $cli->command(new RecordAdd('records:add')); $cli->command(new RescanTechnicalDatas('records:rescan-technical-datas')); diff --git a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php index ce77c7dbb2..8b1c9c6f98 100644 --- a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php +++ b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php @@ -1,7 +1,16 @@ setName('databox:mount') - ->addArgument('databox', InputArgument::REQUIRED, 'Database name for the databox', null) - ->addArgument('owner', InputArgument::REQUIRED, 'Email of the databox admin user', null) - ->addOption('connection', 'c', InputOption::VALUE_NONE, 'Flag to set new database settings') - ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host', 'localhost') - ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port', 3306) - ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user', 'phrasea') - ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password', null); + parent::__construct('databox:mount'); + + $this->setDescription('Mount databox') + ->addArgument('databox', InputArgument::REQUIRED, 'Database name in Mysql', null) + ->addArgument('owner', InputArgument::REQUIRED, 'The Phraseanet login of the Phraseanet owner (this account became full admin on this databox)', null) + ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host') + ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port') + ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user') + ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password') + ; + + return $this; } protected function doExecute(InputInterface $input, OutputInterface $output) { - $databoxName = $input->getArgument('databox'); - $connectionSettings = $input->getOption('connection') == false ? null : new DataboxConnectionSettings( - $input->getOption('db-host'), - $input->getOption('db-port'), - $input->getOption('db-user'), - $input->getOption('db-password') - ); + try { - /** @var UserRepository $userRepository */ - $userRepository = $this->container['repo.users']; - /** @var DataboxService $databoxService */ - $databoxService = $this->container['databox.service']; + /** @var UserRepository $userRepository */ + $userRepository = $this->container['repo.users']; - $owner = $userRepository->findByEmail($input->getArgument('owner')); + $owner = $userRepository->findByLogin($input->getArgument('owner')); - $databoxService->mountDatabox( - $databoxName, - $owner, - $connectionSettings - ); + if (empty($owner)) { + $output->writeln('User not found ! '); - $output->writeln('Databox mounted'); + return; + } + + if ($owner->isGuest() || !$this->container->getAclForUser($owner)->is_admin()) { + $output->writeln('Admin role is required for the owner ! '); + + return; + } + + $databoxName = $input->getArgument('databox'); + $dialog = $this->getHelperSet()->get('dialog'); + + $connectionSettings = new DataboxConnectionSettings( + $input->getOption('db-host')?:$this->container['conf']->get(['main', 'database', 'host']), + $input->getOption('db-port')?:$this->container['conf']->get(['main', 'database', 'port']), + $input->getOption('db-user')?:$this->container['conf']->get(['main', 'database', 'user']), + $input->getOption('db-password')?:$this->container['conf']->get(['main', 'database', 'password']) + ); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really mount this databox? (y/N)', 'N')); + } + while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + /** @var DataboxService $databoxService */ + $databoxService = $this->container['databox.service']; + + \phrasea::clear_sbas_params($this->container); + + $databox = $databoxService->mountDatabox( + $databoxName, + $owner, + $connectionSettings + ); + + $output->writeln("\n\tData-Box ID ".$databox->get_sbas_id()." mounted successful !\n"); + } catch (\Exception $e) { + $output->writeln('Mount databox failed :'.$e->getMessage().''); + } + + return 0; } + } From f5adf02c557173611a765edaddcda6672f714d89 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 20 Feb 2020 16:10:15 +0300 Subject: [PATCH 019/104] command databox:unmount --- bin/console | 2 + .../Command/Databox/UnMountDataboxCommand.php | 60 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php diff --git a/bin/console b/bin/console index 552cb672d0..e42afb9a99 100755 --- a/bin/console +++ b/bin/console @@ -24,6 +24,7 @@ use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; +use Alchemy\Phrasea\Command\Databox\UnMountDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; use Alchemy\Phrasea\Command\RecordAdd; @@ -109,6 +110,7 @@ $cli->command(new \module_console_fieldsMerge('fields:merge')); $cli->command(new CreateCollection('collection:create')); $cli->command(new CreateDataboxCommand('databox:create')); +$cli->command(new UnMountDataboxCommand('databox:unmount')); $cli->command(new RecordAdd('records:add')); $cli->command(new RescanTechnicalDatas('records:rescan-technical-datas')); diff --git a/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php new file mode 100644 index 0000000000..42199a519f --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php @@ -0,0 +1,60 @@ +setDescription('Unmount databox') + ->addArgument('databox_id', InputArgument::REQUIRED, 'The id of the databox to unmount', null) + ; + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + $databox = $this->container->findDataboxById($input->getArgument('databox_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really unmount this databox? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $databox->unmount_databox(); + $output->writeln('Unmount databox successful'); + } catch (\Exception $e) { + $output->writeln('Unmount databox failed : '.$e->getMessage().''); + } + + return 0; + } + +} From f4bb9e706fc98f10eafc9708eb142f190c7ead17 Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 20 Feb 2020 16:22:51 +0300 Subject: [PATCH 020/104] command collection:publish --- bin/console | 3 + .../Collection/PublishCollectionCommand.php | 61 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php diff --git a/bin/console b/bin/console index 552cb672d0..d5c3f4ac8a 100755 --- a/bin/console +++ b/bin/console @@ -23,6 +23,7 @@ use Alchemy\Phrasea\Command\SearchEngine\IndexPopulateCommand; use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; +use Alchemy\Phrasea\Command\Collection\PublishCollectionCommand; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; @@ -108,6 +109,8 @@ $cli->command(new \module_console_fieldsRename('fields:rename')); $cli->command(new \module_console_fieldsMerge('fields:merge')); $cli->command(new CreateCollection('collection:create')); +$cli->command(new PublishCollectionCommand('collection:publish')); + $cli->command(new CreateDataboxCommand('databox:create')); $cli->command(new RecordAdd('records:add')); diff --git a/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php new file mode 100644 index 0000000000..6cfac3a388 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Publish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to publish but keep with existing right into present in application box.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really publish this collection? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->enable($this->container->getApplicationBox()); + $output->writeln('Publish collection successful'); + } catch (\Exception $e) { + $output->writeln('Publish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} From 57fdfd432e80d961b6cac2ad40fa58eaafea5eed Mon Sep 17 00:00:00 2001 From: aynsix Date: Thu, 20 Feb 2020 16:32:08 +0300 Subject: [PATCH 021/104] command collection:unpublish --- bin/console | 2 + .../Collection/UnPublishCollectionCommand.php | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php diff --git a/bin/console b/bin/console index 552cb672d0..22811df67a 100755 --- a/bin/console +++ b/bin/console @@ -23,6 +23,7 @@ use Alchemy\Phrasea\Command\SearchEngine\IndexPopulateCommand; use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; +use Alchemy\Phrasea\Command\Collection\UnPublishCollectionCommand; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; @@ -108,6 +109,7 @@ $cli->command(new \module_console_fieldsRename('fields:rename')); $cli->command(new \module_console_fieldsMerge('fields:merge')); $cli->command(new CreateCollection('collection:create')); +$cli->command(new UnPublishCollectionCommand('collection:unpublish')); $cli->command(new CreateDataboxCommand('databox:create')); $cli->command(new RecordAdd('records:add')); diff --git a/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php new file mode 100644 index 0000000000..70d857e5d1 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Unpublish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to unpublish, the base_id is the same id used in API.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really unpublish this collection? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->disable($this->container->getApplicationBox()); + $output->writeln('Unpublish collection successful'); + } catch (\Exception $e) { + $output->writeln('Unpublish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} From 565e7c450b03f14136092380707eaefcb156b63e Mon Sep 17 00:00:00 2001 From: Arthur de Moulins Date: Fri, 21 Feb 2020 10:34:51 +0100 Subject: [PATCH 022/104] add doctrine metadata filesystem cache --- lib/Alchemy/Phrasea/Controller/Api/V1Controller.php | 10 +++++----- .../Phrasea/Core/MetaProvider/DatabaseMetaProvider.php | 8 ++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 9b8f4ed04d..42339169d6 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -1573,9 +1573,9 @@ class V1Controller extends Controller $options->setFirstResult((int)($request->get('offset_start') ?: 0)); $options->setMaxResults((int)$request->get('per_page') ?: 10); - $this->getSearchEngine()->resetCache(); + $searchEngine = $this->getSearchEngine(); - $search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options); + $search_result = $searchEngine->query((string)$request->get('query'), $options); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getQueryText()); @@ -1583,12 +1583,12 @@ class V1Controller extends Controller $collectionsReferencesByDatabox = $options->getCollectionsReferencesByDatabox(); foreach ($collectionsReferencesByDatabox as $sbid => $references) { $databox = $this->findDataboxById($sbid); - $collectionsIds = array_map(function(CollectionReference $ref){return $ref->getCollectionId();}, $references); + $collectionsIds = array_map(function (CollectionReference $ref) { + return $ref->getCollectionId(); + }, $references); $this->getSearchEngineLogger()->log($databox, $search_result->getQueryText(), $search_result->getTotal(), $collectionsIds); } - $this->getSearchEngine()->clearCache(); - return $search_result; } diff --git a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php index 206efee9b2..8a463c2868 100644 --- a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php +++ b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php @@ -84,10 +84,14 @@ class DatabaseMetaProvider implements ServiceProviderInterface $service = $app['phraseanet.cache-service']; $config->setMetadataCacheImpl( - $service->factory('ORM_metadata', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/metadata', + )) ); $config->setQueryCacheImpl( - $service->factory('ORM_query', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/query', + )) ); $config->setResultCacheImpl( $service->factory('ORM_result', $app['orm.cache.driver'], $app['orm.cache.options']) From 63367346b5e13b662a6ffc84af5b1d632117be43 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Wed, 26 Feb 2020 17:57:57 +0400 Subject: [PATCH 023/104] PHRAS-2950 #comment Add: facet tooltips #time 3h --- package.json | 2 +- resources/locales/messages.de.xlf | 279 +++++++++++++------------- resources/locales/messages.en.xlf | 293 +++++++++++++++------------- resources/locales/messages.fr.xlf | 291 ++++++++++++++------------- resources/locales/messages.nl.xlf | 279 +++++++++++++------------- resources/locales/validators.de.xlf | 2 +- resources/locales/validators.en.xlf | 2 +- resources/locales/validators.fr.xlf | 2 +- resources/locales/validators.nl.xlf | 2 +- templates/web/prod/index.html.twig | 3 + yarn.lock | 8 +- 11 files changed, 613 insertions(+), 550 deletions(-) diff --git a/package.json b/package.json index 8ac01be75a..7dbb7edf9b 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.139-d", + "phraseanet-production-client": "0.34.140-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index cb9c16cbbd..104032cafa 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -760,8 +760,8 @@ Advanced Search Erweiterte Suche - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -776,37 +776,37 @@ Affichage Anzeige - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage beim Start anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive das beschriftliche Blatt anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre den Titel anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status die Status anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone eine Ikone anzeigen - web/prod/index.html.twig + web/prod/index.html.twig After metadata Nach Metadaten - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Hilfe - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -873,7 +873,7 @@ All these conditions Alle Bedingungen - web/prod/index.html.twig + web/prod/index.html.twig Aller a @@ -938,15 +938,15 @@ Alphabetic asc aufsteigender alphabetischer Reihenfolge - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc absteigender alphabetischer Reihenfolge - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1266,7 +1266,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1525,9 +1525,9 @@ Browse Baskets Sammelkörbe durchsuchen - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1555,7 +1555,7 @@ By field Nach Feld - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1840,7 +1840,7 @@ Collection order Kollektionen Ordnung - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1911,7 +1911,7 @@ Configuration Konfiguration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1967,7 +1967,7 @@ Contains enthält - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2022,7 +2022,7 @@ Couleur de selection Farbauswahl - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2235,7 +2235,7 @@ Date Added Hinzufügungsdatum - web/prod/index.html.twig + web/prod/index.html.twig Date Creation @@ -2245,7 +2245,7 @@ Date Updated Aktualisierungsdatum - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2274,7 +2274,7 @@ Date(s) from field(s) Datum vom Feld - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2352,7 +2352,7 @@ Defined by admin Von Administrator festgelegt - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Technische Informationen anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Nicht anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2572,7 +2572,7 @@ Document Dokument - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -3011,7 +3011,7 @@ Equals gleicht - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3154,7 +3154,7 @@ Ex : Paris, bleu, montagne Ex : Berlin, blau, Gebirge - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3337,7 +3337,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3473,7 +3473,7 @@ Geo Search Lokalisierung - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Grafiker (Voransicht mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Bildredakteur (Beschreibung mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3702,7 +3702,7 @@ Image Bild - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3728,7 +3728,7 @@ In the answer grid In einem Tooltip - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3952,7 +3952,7 @@ Language Sprache - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -4089,7 +4089,7 @@ Les termes apparaissent dans le(s) champs Die Begriffe befinden sich in Feld(er): - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4219,7 +4219,7 @@ Ma derniere question meine letzte Suchabfrage - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Anzeigemodus - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Allgemeine Benachrichtigungen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4800,7 +4800,7 @@ One of these conditions Eine von diesen Bedingungen - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -5143,10 +5143,10 @@ Preferences Einstellungen - web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5161,12 +5161,12 @@ Presentation de vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Vorstellung der Voransichten des Sammelkorbes - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Veröffentlichungen - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -5332,80 +5332,80 @@ Raccourcis claviers de la zone des paniers : Sammelkörbe und Funktionen Abkürzungen - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Fenster Abkürzungen bearbeiten - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Fenster Abkürzungen, Detailansicht - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Hauptfenster Abkürzungen - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : alles auswählen - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : Auswahl bearbeiten - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : drucken - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama Dia-Schau starten - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical Abwärtspfeil: vertikal scrollen - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante Rechtspfeil: nächste Seite - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere Abwärtspfeil: letztes Dokument - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant Rechtspfeil: nächstes Dokument - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente Linkspfeil: vorherige Seite - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical Pfeil oben: vertikal scrollen - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs tab/shift-tab : Feld ändern - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5427,7 +5427,7 @@ Zurücksetzen prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5530,7 +5530,7 @@ Rechercher dans un champ date im Feld "Datum" suchen - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5621,7 +5621,7 @@ Relevance Relevanz - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5999,7 +5999,7 @@ Select a field Wählen Sie ein Feld aus - web/prod/index.html.twig + web/prod/index.html.twig Select a list on the left and edit it ! @@ -6034,7 +6034,7 @@ Selected base(s) Ausgewählte Datenbank(en) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6311,7 +6311,7 @@ Status des documents a rechercher Zustand der Dokumente - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6731,7 +6731,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6908,7 +6908,7 @@ Tout type Bildschirmtyp - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6934,7 +6934,7 @@ Trier par Sortieren nach - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6959,7 +6959,7 @@ Type de documents Dokumenttyp - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7082,7 +7082,7 @@ Une question personnelle eine persönliche Frage - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7194,7 +7194,7 @@ Use latest search settings on Production loading die letzte gestellte Frage in Prod benutzen - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7372,7 +7372,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7569,7 +7569,7 @@ Vous pouvez quitter la plupart des fenetres survolantes via la touche echap esc : Sie können die meiste Teile der Overlay Fenster schliessen - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7670,8 +7670,8 @@ YYYY/MM/DD YYYY/MM/DD - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Yes @@ -7992,7 +7992,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8019,7 +8019,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8049,7 +8049,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -8075,16 +8075,16 @@ action:: nouveau panier Neuer - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Neuer Bericht - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider @@ -9154,12 +9154,12 @@ boutton:: selectionner aucune base Keine - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases Alle - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter @@ -9329,7 +9329,7 @@ boutton::rechercher suchen Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9464,7 +9464,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9585,12 +9585,12 @@ charger d'avantages de notifications Mehr Benachrichtigungen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir wählen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9672,7 +9672,7 @@ created_on erstellt am - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9952,7 +9952,7 @@ help::help-search: relaunch search without filter help::help-search: relaunch search without filter prod/results/help.html.twig - web/prod/index.html.twig + web/prod/index.html.twig help::help-section-bullet: check-spelling @@ -10029,47 +10029,47 @@ index::advance_search: disable-facet Facetten mit nur einem Ergebnis ausblenden (experimentell) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Einstellungen für Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order Reihenfolge der Facettenanzeige - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order Standard Reihenfolge - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order Reihenfolge der Facettenwerte - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order Versteckte Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits Nach Hits sortieren - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits-asc index::advance_search: order-by-hits-asc - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation Trunkierung aktivieren - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10702,7 +10702,7 @@ phraseanet:: Preferences Einstellungen - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10851,17 +10851,17 @@ phraseanet:: tri par date nach Datum sortieren - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig phraseanet:: tri par nom alphabetische Sortierung - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -11046,12 +11046,12 @@ phraseanet::time:: a zu - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de von - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -11062,7 +11062,7 @@ phraseanet::type:: documents Dokumente web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -11072,7 +11072,7 @@ phraseanet::type:: reportages Berichte - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11097,17 +11097,17 @@ preview:: Description Beschreibung - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Beliebtheit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11326,12 +11326,12 @@ prod::advancesearch:tooltips:datefield_restriction_explanation Suchergebnisse auf Datum beschränken - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation Suchen Sie den Inhalt der Felder - web/prod/index.html.twig + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) @@ -11677,7 +11677,22 @@ prod:workzone:facetstab:search_and_facets_sort_options prod:workzone:facetstab:search_and_facets_sort_options - web/prod/index.html.twig + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + prod:workzone:facetstab:tooltips:facet_and_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + prod:workzone:facetstab:tooltips:facet_except_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + prod:workzone:facetstab:tooltips:remove_facet_filter + web/prod/index.html.twig public @@ -11753,12 +11768,12 @@ raccourci :: a propos des raccourcis claviers Über Abkürzungen - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Diese Hilfe nicht mehr anzeigen - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11827,17 +11842,17 @@ reponses:: images par pages : Suchergebnisse nach Seite - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11859,7 +11874,7 @@ reponses:: taille des images : Miniaturansichtengrösse - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -13243,7 +13258,7 @@ updated_on aktualisiert am - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 014648af36..f79a9852b6 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -761,8 +761,8 @@ Advanced Search Advanced search - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -777,37 +777,37 @@ Affichage Display - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Display On startup - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Show Caption - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Show Title - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Show Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Display an Icon - web/prod/index.html.twig + web/prod/index.html.twig After metadata After captions - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -822,7 +822,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -874,7 +874,7 @@ All these conditions All these conditions - web/prod/index.html.twig + web/prod/index.html.twig Aller a @@ -939,15 +939,15 @@ Alphabetic asc Alphabetic asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1267,7 +1267,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1526,9 +1526,9 @@ Browse Baskets Browse baskets - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1556,7 +1556,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1842,7 +1842,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1913,7 +1913,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1969,7 +1969,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2024,7 +2024,7 @@ Couleur de selection Selection color - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2238,7 +2238,7 @@ Date Added Date added - web/prod/index.html.twig + web/prod/index.html.twig Date Creation @@ -2248,7 +2248,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2277,7 +2277,7 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2355,7 +2355,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2533,7 +2533,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2543,7 +2543,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2575,7 +2575,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -3014,7 +3014,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3157,7 +3157,7 @@ Ex : Paris, bleu, montagne Ex : Paris, blue, mountain - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3340,7 +3340,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3476,7 +3476,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3551,7 +3551,7 @@ Graphiste (preview au rollover) Graphist (preview on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3660,7 +3660,7 @@ Iconographe (description au rollover) Iconograph (caption on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3705,7 +3705,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3731,7 +3731,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3955,7 +3955,7 @@ Language Language - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -4092,7 +4092,7 @@ Les termes apparaissent dans le(s) champs Word(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4222,7 +4222,7 @@ Ma derniere question My last query - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4379,7 +4379,7 @@ Mode de presentation Display mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4709,7 +4709,7 @@ Notifications globales Global notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4803,7 +4803,7 @@ One of these conditions One of these conditions - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -5146,10 +5146,10 @@ Preferences Settings - web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5164,12 +5164,12 @@ Presentation de vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Basket display setup - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5222,7 +5222,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -5335,80 +5335,80 @@ Raccourcis claviers de la zone des paniers : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Edit window shortcuts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Detailed View window shortcut - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Main windows shortcuts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : select all - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : edit selection - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : print selected - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama space : start/stop diaporama - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical down arrow : vertical scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante right arrow : next page - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere left arrow : previous document - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant right arrow : next document - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente left arrow : previous page - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical up arrow : vertical scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs tab/shift-tab : change field - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5430,7 +5430,7 @@ Reset prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5533,7 +5533,7 @@ Rechercher dans un champ date In a date field - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5624,7 +5624,7 @@ Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -6002,7 +6002,7 @@ Select a field Select a field - web/prod/index.html.twig + web/prod/index.html.twig Select a list on the left and edit it ! @@ -6037,7 +6037,7 @@ Selected base(s) Selected database(s) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6314,7 +6314,7 @@ Status des documents a rechercher Document status - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6734,7 +6734,7 @@ Theme Skin - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6911,7 +6911,7 @@ Tout type All types - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6937,7 +6937,7 @@ Trier par Sort by - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6962,7 +6962,7 @@ Type de documents Document Type - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7085,7 +7085,7 @@ Une question personnelle The query - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7197,7 +7197,7 @@ Use latest search settings on Production loading Use latest search settings on Production when loading - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7375,7 +7375,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7572,7 +7572,7 @@ Vous pouvez quitter la plupart des fenetres survolantes via la touche echap esc : close most of overlayed windows - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7673,8 +7673,8 @@ YYYY/MM/DD YYYY/MM/DD - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Yes @@ -7995,7 +7995,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8022,7 +8022,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8052,7 +8052,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -8078,16 +8078,16 @@ action:: nouveau panier New basket - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage New Story - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider @@ -9157,12 +9157,12 @@ boutton:: selectionner aucune base None - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases All - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter @@ -9332,7 +9332,7 @@ boutton::rechercher Search Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9467,7 +9467,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ charger d'avantages de notifications Load more Notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Select - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9675,7 +9675,7 @@ created_on created on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9955,7 +9955,7 @@ help::help-search: relaunch search without filter Remove all filters and relaunch search prod/results/help.html.twig - web/prod/index.html.twig + web/prod/index.html.twig help::help-section-bullet: check-spelling @@ -10032,47 +10032,47 @@ index::advance_search: disable-facet Hide facets with 1 result (experimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Facets Preferences - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order Facets order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order Default order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order Facets values order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order Hidden Facets - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits By Hits - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits-asc By Hits asc - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation use truncation - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10094,7 +10094,7 @@ June classes/module/report.php - + language Current Language login/include/language-block.html.twig @@ -10705,7 +10705,7 @@ phraseanet:: Preferences Preferences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10854,17 +10854,17 @@ phraseanet:: tri par date Sort by date - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig phraseanet:: tri par nom Sort by name - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -11049,12 +11049,12 @@ phraseanet::time:: a To - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de From - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -11065,7 +11065,7 @@ phraseanet::type:: documents Documents web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -11075,7 +11075,7 @@ phraseanet::type:: reportages Stories - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11100,17 +11100,17 @@ preview:: Description Caption - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Timeline - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Statistics - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11329,12 +11329,12 @@ prod::advancesearch:tooltips:datefield_restriction_explanation Narrow the search results to dates - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation prod::advancesearch:tooltips:field_restriction_explanation - web/prod/index.html.twig + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) @@ -11680,10 +11680,25 @@ It is possible to place several search areas Delete Selection prod/actions/Push.html.twig - + prod:workzone:facetstab:search_and_facets_sort_options Option - web/prod/index.html.twig + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + prod:workzone:facetstab:tooltips:facet_and_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + prod:workzone:facetstab:tooltips:facet_except_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + prod:workzone:facetstab:tooltips:remove_facet_filter + web/prod/index.html.twig public @@ -11759,12 +11774,12 @@ It is possible to place several search areas raccourci :: a propos des raccourcis claviers About shortcuts - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Do not display this help anymore - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11833,17 +11848,17 @@ It is possible to place several search areas reponses:: images par pages : Results per page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste List - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11865,7 +11880,7 @@ It is possible to place several search areas reponses:: taille des images : Thumbnails size - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -13249,7 +13264,7 @@ It is possible to place several search areas updated_on updated on - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index b26706cfd7..8d979d83f0 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -760,8 +760,8 @@ Advanced Search Recherche avancée - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -776,37 +776,37 @@ Affichage Affichage - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Afficher au démarrage - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Afficher la notice - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Afficher le titre - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Afficher les Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Afficher une icône - web/prod/index.html.twig + web/prod/index.html.twig After metadata Dans l'infobulle de description, après les métadonnées - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Aide - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -873,7 +873,7 @@ All these conditions Toutes les conditions - web/prod/index.html.twig + web/prod/index.html.twig Aller a @@ -938,15 +938,15 @@ Alphabetic asc Alphabétique asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabétique desc - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1266,7 +1266,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1525,9 +1525,9 @@ Browse Baskets Parcourir les paniers - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1555,7 +1555,7 @@ By field Par champ - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1840,7 +1840,7 @@ Collection order Ordre des collections - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1911,7 +1911,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1967,7 +1967,7 @@ Contains Contient - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2022,7 +2022,7 @@ Couleur de selection Couleur de sélection - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2235,7 +2235,7 @@ Date Added Date d'ajout - web/prod/index.html.twig + web/prod/index.html.twig Date Creation @@ -2245,7 +2245,7 @@ Date Updated Date de modification - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2274,7 +2274,7 @@ Date(s) from field(s) Date(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2352,7 +2352,7 @@ Defined by admin Défini par l'admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Affichage des informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Masquer les informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2572,7 +2572,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -3011,7 +3011,7 @@ Equals Egale - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3154,7 +3154,7 @@ Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3337,7 +3337,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3473,7 +3473,7 @@ Geo Search Recherche géolocalisée - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Graphiste (prévisualisation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Iconographe (fiche d'indexation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3702,7 +3702,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3728,7 +3728,7 @@ In the answer grid Dans une infobulle séparée - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3952,7 +3952,7 @@ Language Langue - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -4089,7 +4089,7 @@ Les termes apparaissent dans le(s) champs Le(s) mot(s) contenu(s) dans le(s) champ(s) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4219,7 +4219,7 @@ Ma derniere question Ma dernière question - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Mode de présentation - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Notifications globales - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4800,7 +4800,7 @@ One of these conditions Une de ces conditions - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -5143,10 +5143,10 @@ Preferences Préférences - web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5161,12 +5161,12 @@ Presentation de vignettes Présentation de vignettes - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Présentation des vignettes de panier - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -5334,80 +5334,80 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Raccourcis claviers de la zone des paniers : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Raccourci de la fenêtre d'édition - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Raccourcis de la fenêtre vue détaillée - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Raccourcis de la fenêtre principale - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : sélectionner tout - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : éditer la sélection - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : imprimer la sélection - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama espace : démarrer/arrêter le diaporama - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical flèche basse : défilement vers le bas - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante flèche droite : page suivante - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere flèche gauche : document précédent - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant flèche droite : document suivant - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente flèche gauche : page précédente - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical flèche haute : défilement vers le haut - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs Tab/shift-tab : Changer de champs - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5429,7 +5429,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Ré-initialiser prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5532,7 +5532,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Rechercher dans un champ date Dans un champ date - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5623,7 +5623,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Relevance Pertinence - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -6001,7 +6001,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Select a field Choisir un champ - web/prod/index.html.twig + web/prod/index.html.twig Select a list on the left and edit it ! @@ -6036,7 +6036,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Selected base(s) Sélectionner les Bases : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6313,7 +6313,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Status des documents a rechercher Status des documents pour la recherche - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6733,7 +6733,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Theme Thème - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6910,7 +6910,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Tout type Tous types - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6936,7 +6936,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Trier par Trier par - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6961,7 +6961,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Type de documents Type de document - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7084,7 +7084,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Une question personnelle La question - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7196,7 +7196,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Use latest search settings on Production loading Utiliser la dernière question posée au lancement de Production - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7374,7 +7374,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Video Vidéo - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7571,7 +7571,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Vous pouvez quitter la plupart des fenetres survolantes via la touche echap Vous pouvez fermer la plupart des fênetres en sur impression avec la touche echap - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7672,8 +7672,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis YYYY/MM/DD YYYY/MM/DD - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Yes @@ -7994,7 +7994,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8021,7 +8021,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8051,7 +8051,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -8077,16 +8077,16 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis action:: nouveau panier Nouveau panier - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Nouveau reportage - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider @@ -9157,12 +9157,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton:: selectionner aucune base Aucune - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases Toutes - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter @@ -9332,7 +9332,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::rechercher Rechercher Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9467,7 +9467,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le charger d'avantages de notifications Charger davantage de notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Choisir - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9675,7 +9675,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le created_on créé le - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9955,7 +9955,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le help::help-search: relaunch search without filter Supprimer tous les filtres et relancer la recherche prod/results/help.html.twig - web/prod/index.html.twig + web/prod/index.html.twig help::help-section-bullet: check-spelling @@ -10032,47 +10032,47 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: disable-facet Ne pas afficher les facettes contenant un seul résultat (expérimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Préférences sur les facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order Ordre d'affichage des facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order Ordre par défaut - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order Ordre des valeurs de facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order Facettes masquées - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits Par occurrences - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits-asc Par occurrences asc - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation Activer la troncature - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10094,7 +10094,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le juin classes/module/report.php - + language Langue actuelle login/include/language-block.html.twig @@ -10705,7 +10705,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: Preferences Préférences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10854,17 +10854,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: tri par date Tri par date - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig phraseanet:: tri par nom Tri alphabétique - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -11049,12 +11049,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::time:: a A - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de De - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -11065,7 +11065,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::type:: documents Documents web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -11075,7 +11075,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::type:: reportages Reportages - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11100,17 +11100,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview:: Description Notice - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historique - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Popularité - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11329,12 +11329,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::advancesearch:tooltips:datefield_restriction_explanation Limiter la recherche des résultats à des dates - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation Effectuer une recherche sur le contenu d'un champ documentaire de type texte - web/prod/index.html.twig + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) @@ -11686,7 +11686,22 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod:workzone:facetstab:search_and_facets_sort_options Options - web/prod/index.html.twig + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + prod:workzone:facetstab:tooltips:facet_and_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + prod:workzone:facetstab:tooltips:facet_except_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + prod:workzone:facetstab:tooltips:remove_facet_filter + web/prod/index.html.twig public @@ -11762,12 +11777,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le raccourci :: a propos des raccourcis claviers A propos des raccourcis clavier - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Ne plus montrer cette aide - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11836,17 +11851,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: images par pages : Résultats par page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11868,7 +11883,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: taille des images : Taille des vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -13252,7 +13267,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le updated_on mis à jour le - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index 54bdcdf01e..01f62494ca 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -765,8 +765,8 @@ Advanced Search Geavanceerd zoeken - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -781,37 +781,37 @@ Affichage Tonen - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Tonen bij opstart - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive De beschrijvingsfiche tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre De titel tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status De statussen tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Pictogram tonen - web/prod/index.html.twig + web/prod/index.html.twig After metadata After metadata - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -826,7 +826,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -878,7 +878,7 @@ All these conditions All these conditions - web/prod/index.html.twig + web/prod/index.html.twig Aller a @@ -943,15 +943,15 @@ Alphabetic asc Alphabetic asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1271,7 +1271,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1530,9 +1530,9 @@ Browse Baskets Mandjes doorbladeren - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1560,7 +1560,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1846,7 +1846,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1917,7 +1917,7 @@ Configuration Configuratie - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1973,7 +1973,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2028,7 +2028,7 @@ Couleur de selection Kleur van de selectie - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2242,7 +2242,7 @@ Date Added Date Added - web/prod/index.html.twig + web/prod/index.html.twig Date Creation @@ -2252,7 +2252,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2281,7 +2281,7 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2359,7 +2359,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2537,7 +2537,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2547,7 +2547,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2579,7 +2579,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -3021,7 +3021,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3164,7 +3164,7 @@ Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3347,7 +3347,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3483,7 +3483,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3558,7 +3558,7 @@ Graphiste (preview au rollover) Graficus (preview au rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3667,7 +3667,7 @@ Iconographe (description au rollover) Iconographe (beschrijving bij de rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3712,7 +3712,7 @@ Image Beeld - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3738,7 +3738,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3962,7 +3962,7 @@ Language Language - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -4099,7 +4099,7 @@ Les termes apparaissent dans le(s) champs De termen verschijnen in de veld(en) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4229,7 +4229,7 @@ Ma derniere question Mijn laatste vraag - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4386,7 +4386,7 @@ Mode de presentation Presentatie mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4716,7 +4716,7 @@ Notifications globales Algemene meldingen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4810,7 +4810,7 @@ One of these conditions One of these conditions - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -5153,10 +5153,10 @@ Preferences Voorkeuren - web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5171,12 +5171,12 @@ Presentation de vignettes Presentatie van de thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Presentatie van de thumbnails in het mandje - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5229,7 +5229,7 @@ Publications Publicaties - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -5342,80 +5342,80 @@ Raccourcis claviers de la zone des paniers : Sneltoetsen in de mandjes zone : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Sneltoetsen tijdens het bewerken : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Sneltoetsen tijdens de voorvertoning : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Sneltoetsen tijdens het zoeken : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : alles selecteren - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : bewerk de selectie - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : print de selectie - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama espace : start/stop de slideshow - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical pijl onder : verticale scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante pijl rechts : volgende pagina - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere pijl links : achterwaarts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant pijl rechts : voorwaarts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente pijl links : vorige pagina - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical pijl boven : verticale scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs tab/shift-tab verspringt tussen de velden - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5437,7 +5437,7 @@ Herinitialiseren prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5540,7 +5540,7 @@ Rechercher dans un champ date Zoeken in een datum veld - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5631,7 +5631,7 @@ Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -6009,7 +6009,7 @@ Select a field Select a field - web/prod/index.html.twig + web/prod/index.html.twig Select a list on the left and edit it ! @@ -6044,7 +6044,7 @@ Selected base(s) Selected base(s) - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6321,7 +6321,7 @@ Status des documents a rechercher Status van de te zoeken documenten - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6741,7 +6741,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6918,7 +6918,7 @@ Tout type Alle type - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6944,7 +6944,7 @@ Trier par Sorteren op - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6969,7 +6969,7 @@ Type de documents Type van de documenten - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7092,7 +7092,7 @@ Une question personnelle Een persoonlijke vraag - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7204,7 +7204,7 @@ Use latest search settings on Production loading Use latest search settings on Production loading - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7382,7 +7382,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7579,7 +7579,7 @@ Vous pouvez quitter la plupart des fenetres survolantes via la touche echap U kunt het grootste deel van de bovenliggende vensters sluiten met de escape toets - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7680,8 +7680,8 @@ YYYY/MM/DD YYYY/MM/DD - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Yes @@ -8002,7 +8002,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8029,7 +8029,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8059,7 +8059,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -8085,16 +8085,16 @@ action:: nouveau panier Nieuw mandje - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Nieuwe reportage - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider @@ -9164,12 +9164,12 @@ boutton:: selectionner aucune base Selecteer geen enkele database - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases Selecteer alle databases - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter @@ -9339,7 +9339,7 @@ boutton::rechercher zoeken Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9474,7 +9474,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9595,12 +9595,12 @@ charger d'avantages de notifications voordelen van meldingen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir kiezen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9682,7 +9682,7 @@ created_on created_on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9962,7 +9962,7 @@ help::help-search: relaunch search without filter help::help-search: relaunch search without filter prod/results/help.html.twig - web/prod/index.html.twig + web/prod/index.html.twig help::help-section-bullet: check-spelling @@ -10039,47 +10039,47 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order index::advance_search: facet-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order index::advance_search: facet-tech-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order index::advance_search: facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order index::advance_search: hidden-facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits index::advance_search: order-by-hits - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits-asc index::advance_search: order-by-hits-asc - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation index:advanced-preferences:: use truncation - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10712,7 +10712,7 @@ phraseanet:: Preferences phraseanet:: Preferences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10861,17 +10861,17 @@ phraseanet:: tri par date Op datum sorteren - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig phraseanet:: tri par nom Op naam sorteren - web/prod/index.html.twig - web/prod/index.html.twig web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -11056,12 +11056,12 @@ phraseanet::time:: a a - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de de - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -11072,7 +11072,7 @@ phraseanet::type:: documents Documenten web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -11082,7 +11082,7 @@ phraseanet::type:: reportages Reportages - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11107,17 +11107,17 @@ preview:: Description Beschrijving - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Populariteit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11336,12 +11336,12 @@ prod::advancesearch:tooltips:datefield_restriction_explanation prod::advancesearch:tooltips:datefield_restriction_explanation - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation prod::advancesearch:tooltips:field_restriction_explanation - web/prod/index.html.twig + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) @@ -11687,7 +11687,22 @@ prod:workzone:facetstab:search_and_facets_sort_options prod:workzone:facetstab:search_and_facets_sort_options - web/prod/index.html.twig + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + prod:workzone:facetstab:tooltips:facet_and_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + prod:workzone:facetstab:tooltips:facet_except_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + prod:workzone:facetstab:tooltips:remove_facet_filter + web/prod/index.html.twig public @@ -11763,12 +11778,12 @@ raccourci :: a propos des raccourcis claviers Over toetsenbord sneltoetsen - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Deze help niet meer tonen - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11837,17 +11852,17 @@ reponses:: images par pages : Beelden per pagina : - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Lijst mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnail mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11869,7 +11884,7 @@ reponses:: taille des images : Grootte van de beelden : - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -13253,7 +13268,7 @@ updated_on updated_on - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index a7c6c7ab7c..04133493ee 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index b514c86069..c3bf714e88 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 52f5b99997..7ddab119b7 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index 218bcf559a..c259ad528a 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index 11a2427908..ecb098c32a 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -183,6 +183,9 @@ {% if GV_thesaurus %}
+ + +
diff --git a/yarn.lock b/yarn.lock index 8eae8692f5..87f5463a24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.139-d: - version "0.34.139-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.139-d.tgz#27edf283275c427ba226ff8b6c9461511dd6c827" - integrity sha512-8lOeLbUpa2qBi08d4Tr3FbtKf4TmSvTWhPtwCm7bZxls14TMXnYl7JRFZoYEMGEB1n1tbYozrl/Oz4qV7Pn6Sg== +phraseanet-production-client@0.34.140-d: + version "0.34.140-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.140-d.tgz#9e9b949db2dcba14d7844dcb7e1399a801027fab" + integrity sha512-vIUpW0pz47ZDpAg8j+9HwppEnBU0ANdy90f1YKspQc3SrLPhZUFcC4RJh7T4Rz952iGDBb2pQb+w2iY9Gdl/+A== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" From e283c9d380a9447f470b985f2d3a28bddca6d9d0 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Thu, 27 Feb 2020 11:32:08 +0400 Subject: [PATCH 024/104] PHRAS-2950 Add format number of facets number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7dbb7edf9b..4a9f380dbe 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.140-d", + "phraseanet-production-client": "0.34.141-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", From 632c1cd5921fc0d9dd5e4a305f4bb63e25ae0ef2 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Thu, 27 Feb 2020 11:36:11 +0400 Subject: [PATCH 025/104] PHRAS-2950 add yarn.lock --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 87f5463a24..bc67e69c04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.140-d: - version "0.34.140-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.140-d.tgz#9e9b949db2dcba14d7844dcb7e1399a801027fab" - integrity sha512-vIUpW0pz47ZDpAg8j+9HwppEnBU0ANdy90f1YKspQc3SrLPhZUFcC4RJh7T4Rz952iGDBb2pQb+w2iY9Gdl/+A== +phraseanet-production-client@0.34.141-d: + version "0.34.141-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.141-d.tgz#25a137975af873c17837eaa0180ffe500c936f7f" + integrity sha512-cYRaVtJPh5poYqOruoBwapM7HMp5Bv9NvW9HkEqPYr5p2nfZMzgEjjpyOQHnNkaEI+6w2kDk8KGNYd37HnOTmw== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" From ce2fee87ead725d1dac66fda3762f6b2531ab63d Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Thu, 27 Feb 2020 16:01:08 +0400 Subject: [PATCH 026/104] PHRAS-2954 #comment Port 4.1 language selection #time 1h --- templates/web/prod/index.html.twig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index 11a2427908..316ca19fb6 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -736,8 +736,12 @@

{{ 'Language' | trans }} : {{ app['locale'] }}

From 2bb7074b1d2102c27cc7f1f4e4057ce67468797d Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Thu, 27 Feb 2020 18:03:14 +0400 Subject: [PATCH 027/104] PHRAS-2954 Add translation --- resources/locales/messages.de.xlf | 92 ++++++++++++------------ resources/locales/messages.en.xlf | 106 ++++++++++++++-------------- resources/locales/messages.fr.xlf | 104 +++++++++++++-------------- resources/locales/messages.nl.xlf | 92 ++++++++++++------------ resources/locales/validators.de.xlf | 2 +- resources/locales/validators.en.xlf | 2 +- resources/locales/validators.fr.xlf | 2 +- resources/locales/validators.nl.xlf | 2 +- templates/web/prod/index.html.twig | 2 +- 9 files changed, 202 insertions(+), 202 deletions(-) diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index cb9c16cbbd..f50e2fbd6d 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -781,32 +781,32 @@ Affichage au demarrage beim Start anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive das beschriftliche Blatt anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre den Titel anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status die Status anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone eine Ikone anzeigen - web/prod/index.html.twig + web/prod/index.html.twig After metadata Nach Metadaten - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Hilfe - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -940,13 +940,13 @@ aufsteigender alphabetischer Reihenfolge web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc absteigender alphabetischer Reihenfolge web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1840,7 +1840,7 @@ Collection order Kollektionen Ordnung - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2022,7 +2022,7 @@ Couleur de selection Farbauswahl - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2352,7 +2352,7 @@ Defined by admin Von Administrator festgelegt - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Technische Informationen anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Nicht anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Grafiker (Voransicht mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Bildredakteur (Beschreibung mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3728,7 +3728,7 @@ In the answer grid In einem Tooltip - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3949,9 +3949,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Sprache + + Language selection + Language selection web/prod/index.html.twig @@ -4219,7 +4219,7 @@ Ma derniere question meine letzte Suchabfrage - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Anzeigemodus - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Allgemeine Benachrichtigungen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5161,12 +5161,12 @@ Presentation de vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Vorstellung der Voransichten des Sammelkorbes - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Veröffentlichungen - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6731,7 +6731,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6959,7 +6959,7 @@ Type de documents Dokumenttyp - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7082,7 +7082,7 @@ Une question personnelle eine persönliche Frage - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7992,7 +7992,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8019,7 +8019,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8049,7 +8049,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9464,7 +9464,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9585,12 +9585,12 @@ charger d'avantages de notifications Mehr Benachrichtigungen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir wählen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10029,12 +10029,12 @@ index::advance_search: disable-facet Facetten mit nur einem Ergebnis ausblenden (experimentell) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Einstellungen für Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10054,7 +10054,7 @@ index::advance_search: hidden-facet-values-order Versteckte Facetten - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits @@ -11097,17 +11097,17 @@ preview:: Description Beschreibung - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Beliebtheit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11827,17 +11827,17 @@ reponses:: images par pages : Suchergebnisse nach Seite - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Miniaturansichten - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11859,7 +11859,7 @@ reponses:: taille des images : Miniaturansichtengrösse - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 014648af36..1b7947bbde 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -782,32 +782,32 @@ Affichage au demarrage Display On startup - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Show Caption - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Show Title - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Show Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Display an Icon - web/prod/index.html.twig + web/prod/index.html.twig After metadata After captions - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -822,7 +822,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -941,13 +941,13 @@ Alphabetic asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1842,7 +1842,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2024,7 +2024,7 @@ Couleur de selection Selection color - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2355,7 +2355,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2533,7 +2533,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2543,7 +2543,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3551,7 +3551,7 @@ Graphiste (preview au rollover) Graphist (preview on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3660,7 +3660,7 @@ Iconographe (description au rollover) Iconograph (caption on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3731,7 +3731,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3952,9 +3952,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language + + Language selection + Language selection web/prod/index.html.twig @@ -4222,7 +4222,7 @@ Ma derniere question My last query - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4379,7 +4379,7 @@ Mode de presentation Display mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4709,7 +4709,7 @@ Notifications globales Global notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5164,12 +5164,12 @@ Presentation de vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Basket display setup - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5222,7 +5222,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6734,7 +6734,7 @@ Theme Skin - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6962,7 +6962,7 @@ Type de documents Document Type - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7085,7 +7085,7 @@ Une question personnelle The query - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7995,7 +7995,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8022,7 +8022,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8052,7 +8052,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9467,7 +9467,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ charger d'avantages de notifications Load more Notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Select - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10032,12 +10032,12 @@ index::advance_search: disable-facet Hide facets with 1 result (experimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Facets Preferences - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10057,14 +10057,14 @@ index::advance_search: hidden-facet-values-order Hidden Facets - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits By Hits web/prod/index.html.twig - + index::advance_search: order-by-hits-asc By Hits asc web/prod/index.html.twig @@ -10094,7 +10094,7 @@ June classes/module/report.php - + language Current Language login/include/language-block.html.twig @@ -11100,17 +11100,17 @@ preview:: Description Caption - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Timeline - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Statistics - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11680,7 +11680,7 @@ It is possible to place several search areas Delete Selection prod/actions/Push.html.twig - + prod:workzone:facetstab:search_and_facets_sort_options Option web/prod/index.html.twig @@ -11833,17 +11833,17 @@ It is possible to place several search areas reponses:: images par pages : Results per page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste List - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnails - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11865,7 +11865,7 @@ It is possible to place several search areas reponses:: taille des images : Thumbnails size - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index b26706cfd7..c9bfa96acf 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -781,32 +781,32 @@ Affichage au demarrage Afficher au démarrage - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Afficher la notice - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Afficher le titre - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Afficher les Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Afficher une icône - web/prod/index.html.twig + web/prod/index.html.twig After metadata Dans l'infobulle de description, après les métadonnées - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -821,7 +821,7 @@ Aide Aide - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -940,13 +940,13 @@ Alphabétique asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabétique desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1840,7 +1840,7 @@ Collection order Ordre des collections - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2022,7 +2022,7 @@ Couleur de selection Couleur de sélection - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2352,7 +2352,7 @@ Defined by admin Défini par l'admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2530,7 +2530,7 @@ Display technical data Affichage des informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2540,7 +2540,7 @@ Do not display Masquer les informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3548,7 +3548,7 @@ Graphiste (preview au rollover) Graphiste (prévisualisation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3657,7 +3657,7 @@ Iconographe (description au rollover) Iconographe (fiche d'indexation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3728,7 +3728,7 @@ In the answer grid Dans une infobulle séparée - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3949,9 +3949,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Langue + + Language selection + Language selection web/prod/index.html.twig @@ -4219,7 +4219,7 @@ Ma derniere question Ma dernière question - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4376,7 +4376,7 @@ Mode de presentation Mode de présentation - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4706,7 +4706,7 @@ Notifications globales Notifications globales - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5161,12 +5161,12 @@ Presentation de vignettes Présentation de vignettes - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Présentation des vignettes de panier - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5219,7 +5219,7 @@ Publications Publications - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6733,7 +6733,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Theme Thème - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6961,7 +6961,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Type de documents Type de document - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7084,7 +7084,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Une question personnelle La question - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7994,7 +7994,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8021,7 +8021,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8051,7 +8051,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9467,7 +9467,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9588,12 +9588,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le charger d'avantages de notifications Charger davantage de notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Choisir - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10032,12 +10032,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: disable-facet Ne pas afficher les facettes contenant un seul résultat (expérimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Préférences sur les facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10057,14 +10057,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: hidden-facet-values-order Facettes masquées - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: order-by-hits Par occurrences web/prod/index.html.twig - + index::advance_search: order-by-hits-asc Par occurrences asc web/prod/index.html.twig @@ -10094,7 +10094,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le juin classes/module/report.php - + language Langue actuelle login/include/language-block.html.twig @@ -11100,17 +11100,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview:: Description Notice - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historique - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Popularité - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11836,17 +11836,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: images par pages : Résultats par page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11868,7 +11868,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: taille des images : Taille des vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index 54bdcdf01e..f9a2abee32 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -786,32 +786,32 @@ Affichage au demarrage Tonen bij opstart - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive De beschrijvingsfiche tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre De titel tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status De statussen tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Pictogram tonen - web/prod/index.html.twig + web/prod/index.html.twig After metadata After metadata - web/prod/index.html.twig + web/prod/index.html.twig Aggregated @@ -826,7 +826,7 @@ Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres @@ -945,13 +945,13 @@ Alphabetic asc web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. @@ -1846,7 +1846,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -2028,7 +2028,7 @@ Couleur de selection Kleur van de selectie - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2359,7 +2359,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2537,7 +2537,7 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails @@ -2547,7 +2547,7 @@ Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -3558,7 +3558,7 @@ Graphiste (preview au rollover) Graficus (preview au rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3667,7 +3667,7 @@ Iconographe (description au rollover) Iconographe (beschrijving bij de rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3738,7 +3738,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3959,9 +3959,9 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language + + Language selection + Language selection web/prod/index.html.twig @@ -4229,7 +4229,7 @@ Ma derniere question Mijn laatste vraag - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4386,7 +4386,7 @@ Mode de presentation Presentatie mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4716,7 +4716,7 @@ Notifications globales Algemene meldingen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -5171,12 +5171,12 @@ Presentation de vignettes Presentatie van de thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Presentatie van de thumbnails in het mandje - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5229,7 +5229,7 @@ Publications Publicaties - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig web/common/menubar.html.twig @@ -6741,7 +6741,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6969,7 +6969,7 @@ Type de documents Type van de documenten - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7092,7 +7092,7 @@ Une question personnelle Een persoonlijke vraag - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -8002,7 +8002,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8029,7 +8029,7 @@ prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8059,7 +8059,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig action : push @@ -9474,7 +9474,7 @@ prod/actions/edit_default.html.twig prod/actions/edit_default.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/import-dialog.html.twig @@ -9595,12 +9595,12 @@ charger d'avantages de notifications voordelen van meldingen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir kiezen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -10039,12 +10039,12 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order @@ -10064,7 +10064,7 @@ index::advance_search: hidden-facet-values-order index::advance_search: hidden-facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits @@ -11107,17 +11107,17 @@ preview:: Description Beschrijving - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Populariteit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11837,17 +11837,17 @@ reponses:: images par pages : Beelden per pagina : - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Lijst mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnail mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11869,7 +11869,7 @@ reponses:: taille des images : Grootte van de beelden : - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index a7c6c7ab7c..c0c3f2c8a1 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index b514c86069..0491c04b0d 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 52f5b99997..1ea17d4b6b 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index 218bcf559a..d1b2484c45 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index 316ca19fb6..8636b09dc8 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -733,7 +733,7 @@
-

{{ 'Language' | trans }} : {{ app['locale'] }}

+

{{ 'Language selection' | trans }}

+ {% endif %}
{% set basket_length = basket.getElements()|length %} @@ -113,4 +122,31 @@
+ + + From 23d757c4d6901c3615accc6a68abc392e107e630 Mon Sep 17 00:00:00 2001 From: Arthur de Moulins Date: Fri, 13 Mar 2020 15:53:15 +0100 Subject: [PATCH 090/104] plugin installation in docker --- .dockerignore | 2 +- Dockerfile | 3 +- docker/phraseanet/entrypoint.sh | 2 + docker/phraseanet/install-plugins | 50 --------------- docker/phraseanet/plugins/InitCommand.php | 29 +++++++++ docker/phraseanet/plugins/InstallCommand.php | 64 +++++++++++++++++++ docker/phraseanet/plugins/SubCommand.php | 26 ++++++++ docker/phraseanet/plugins/console | 17 +++++ .../Command/Plugin/AbstractPluginCommand.php | 36 +++++++---- 9 files changed, 164 insertions(+), 65 deletions(-) delete mode 100755 docker/phraseanet/install-plugins create mode 100644 docker/phraseanet/plugins/InitCommand.php create mode 100644 docker/phraseanet/plugins/InstallCommand.php create mode 100644 docker/phraseanet/plugins/SubCommand.php create mode 100755 docker/phraseanet/plugins/console diff --git a/.dockerignore b/.dockerignore index 9b914fafec..95d7045edf 100644 --- a/.dockerignore +++ b/.dockerignore @@ -23,7 +23,7 @@ /datas /docker-compose.* /logs -/nodes_modules +/node_modules /plugins /tmp /vendor diff --git a/Dockerfile b/Dockerfile index 4b2614a357..3feefd2d3b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -90,6 +90,7 @@ RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ telnet \ autoconf \ libtool \ + python \ pkg-config \ && apt-get clean \ && rm -rf /var/lib/apt/lists \ @@ -126,7 +127,7 @@ RUN ( \ && chmod 600 ~/.ssh/id_rsa \ ) || echo "Skip SSH key" -RUN ./docker/phraseanet/install-plugins +RUN ./docker/phraseanet/plugins/console install ENTRYPOINT ["/bootstrap/entrypoint.sh"] diff --git a/docker/phraseanet/entrypoint.sh b/docker/phraseanet/entrypoint.sh index 1d1fecb989..037fe0aa02 100755 --- a/docker/phraseanet/entrypoint.sh +++ b/docker/phraseanet/entrypoint.sh @@ -26,4 +26,6 @@ if [ ${XDEBUG_ENABLED} == "1" ]; then docker-php-ext-enable xdebug fi +./docker/phraseanet/plugins/console init + bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/install-plugins b/docker/phraseanet/install-plugins deleted file mode 100755 index d4a5cb01c8..0000000000 --- a/docker/phraseanet/install-plugins +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php - $plugin) { - $plugin = trim($plugin); - $repo = $plugin; - $branch = 'master'; - if (1 === preg_match('#^(.+)\(([^)]+)\)$#', $plugin, $matches)) { - $repo = $matches[1]; - $branch = $matches[2]; - } - - $pluginTmpName = 'plugin' . $key; - $pluginPath = './plugin' . $key; - if (is_dir($pluginPath)) { - echo shell_exec(sprintf('rm -rf %s', $pluginPath)); - } - - echo sprintf("Installing %s (branch: %s)\n", $repo, $branch); - runCommand(sprintf('git clone --single-branch --branch %s %s %s', $branch, $repo, $pluginPath)); - - runCommand(sprintf('bin/setup plugins:add %s', $pluginPath)); - - echo shell_exec(sprintf('rm -rf %s', $pluginPath)); -} diff --git a/docker/phraseanet/plugins/InitCommand.php b/docker/phraseanet/plugins/InitCommand.php new file mode 100644 index 0000000000..23b7d644b7 --- /dev/null +++ b/docker/phraseanet/plugins/InitCommand.php @@ -0,0 +1,29 @@ +setName('init') + ->setDescription('Initialize plugins'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + foreach (glob('./plugins/*') as $dir) { + if (is_dir($dir)) { + $output->writeln(sprintf('Init %s plugin', basename($dir))); + SubCommand::run(sprintf('bin/setup plugin:add %s', $dir)); + } + } + + return 0; + } +} diff --git a/docker/phraseanet/plugins/InstallCommand.php b/docker/phraseanet/plugins/InstallCommand.php new file mode 100644 index 0000000000..7b8a28c4cd --- /dev/null +++ b/docker/phraseanet/plugins/InstallCommand.php @@ -0,0 +1,64 @@ +setName('install') + ->setDescription('Install plugins'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $plugins = trim(getenv('PHRASEANET_PLUGINS')); + if (empty($plugins)) { + $output->writeln('No plugin to install... SKIP'); + + return 0; + } + + $pluginsDir = 'plugins'; + if (!is_dir($pluginsDir)) { + mkdir($pluginsDir); + } + + foreach (explode(' ', $plugins) as $key => $plugin) { + $plugin = trim($plugin); + $repo = $plugin; + $branch = 'master'; + if (1 === preg_match('#^(.+)\(([^)]+)\)$#', $plugin, $matches)) { + $repo = $matches[1]; + $branch = $matches[2]; + } + + $pluginPath = './plugin' . $key; + if (is_dir($pluginPath)) { + SubCommand::run(sprintf('rm -rf %s', $pluginPath)); + } + + $output->writeln(sprintf('Installing %s (branch: %s)', $repo, $branch)); + SubCommand::run(sprintf('git clone --single-branch --branch %s %s %s', $branch, $repo, $pluginPath)); + + $manifestSrc = $pluginPath.'/manifest.json'; + if (!file_exists($manifestSrc)) { + throw new \Exception(sprintf('Cannot install plugin %s: no manifest.json file found', $plugin)); + } + $pluginDestName = json_decode(file_get_contents($manifestSrc), true)['name']; + rename($pluginPath, $pluginsDir.'/'.$pluginDestName); + $pluginPath = $pluginsDir.'/'.$pluginDestName; + + if (file_exists($pluginPath.'/composer.json')) { + SubCommand::run(sprintf('cd %s && composer install --no-dev', $pluginPath)); + } + } + + return 0; + } +} diff --git a/docker/phraseanet/plugins/SubCommand.php b/docker/phraseanet/plugins/SubCommand.php new file mode 100644 index 0000000000..fd2dbc68a1 --- /dev/null +++ b/docker/phraseanet/plugins/SubCommand.php @@ -0,0 +1,26 @@ +add(new InstallCommand()); +$application->add(new InitCommand()); + +$application->run(); diff --git a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php index 2d9d211612..f535c2cd39 100644 --- a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php +++ b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php @@ -54,33 +54,43 @@ abstract class AbstractPluginCommand extends Command protected function doInstallPlugin($source, InputInterface $input, OutputInterface $output) { - $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); - - $output->write("Importing $source..."); - $this->container['plugins.importer']->import($source, $temporaryDir); - $output->writeln(" OK"); $output->write("Validating plugin..."); - $manifest = $this->container['plugins.plugins-validator']->validatePlugin($temporaryDir); + $manifest = $this->container['plugins.plugins-validator']->validatePlugin($source); $output->writeln(" OK found ".$manifest->getName().""); $targetDir = $this->container['plugin.path'] . DIRECTORY_SEPARATOR . $manifest->getName(); + if (realpath($targetDir) !== realpath($source)) { + $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); + $output->write("Importing $source..."); + $this->container['plugins.importer']->import($source, $temporaryDir); + $output->writeln(" OK"); + $workingDir = $temporaryDir; + } else { + $workingDir = $targetDir; + } - $output->write("Setting up composer..."); - $this->container['plugins.composer-installer']->install($temporaryDir); - $output->writeln(" OK"); + if (!is_dir($workingDir.'/vendor')) { + $output->write("Setting up composer..."); + $this->container['plugins.composer-installer']->install($workingDir); + $output->writeln(" OK"); + } $output->write("Installing plugin ".$manifest->getName()."..."); - $this->container['filesystem']->mirror($temporaryDir, $targetDir); + if (isset($temporaryDir)) { + $this->container['filesystem']->mirror($temporaryDir, $targetDir); + } $output->writeln(" OK"); $output->write("Copying public files ".$manifest->getName()."..."); $this->container['plugins.assets-manager']->update($manifest); $output->writeln(" OK"); - $output->write("Removing temporary directory..."); - $this->container['filesystem']->remove($temporaryDir); - $output->writeln(" OK"); + if (isset($temporaryDir)) { + $output->write("Removing temporary directory..."); + $this->container['filesystem']->remove($temporaryDir); + $output->writeln(" OK"); + } $output->write("Activating plugin..."); $this->container['conf']->set(['plugins', $manifest->getName(), 'enabled'], true); From 6ed22b53dcac303f58c931f4be292bae48e703da Mon Sep 17 00:00:00 2001 From: Arthur de Moulins Date: Fri, 13 Mar 2020 19:51:10 +0100 Subject: [PATCH 091/104] fix AddPluginTest --- .../Command/Plugin/AbstractPluginCommand.php | 18 ++++++++++++++++-- .../Phrasea/Command/Plugin/AddPluginTest.php | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php index f535c2cd39..53e4ffed39 100644 --- a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php +++ b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php @@ -15,6 +15,21 @@ use Alchemy\Phrasea\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +function normalizePath($path) { + return array_reduce(explode('/', $path), function ($a, $b) { + if($a === 0) + $a = '/'; + + if($b === '' || $b === '.') + return $a; + + if($b === '..') + return dirname($a); + + return preg_replace('/\/+/', '/', "$a/$b"); + }, 0); +} + abstract class AbstractPluginCommand extends Command { protected function validatePlugins(InputInterface $input, OutputInterface $output) @@ -54,13 +69,12 @@ abstract class AbstractPluginCommand extends Command protected function doInstallPlugin($source, InputInterface $input, OutputInterface $output) { - $output->write("Validating plugin..."); $manifest = $this->container['plugins.plugins-validator']->validatePlugin($source); $output->writeln(" OK found ".$manifest->getName().""); $targetDir = $this->container['plugin.path'] . DIRECTORY_SEPARATOR . $manifest->getName(); - if (realpath($targetDir) !== realpath($source)) { + if (normalizePath($targetDir) !== normalizePath($source)) { $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); $output->write("Importing $source..."); $this->container['plugins.importer']->import($source, $temporaryDir); diff --git a/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php b/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php index 523b4c00da..506c4f104a 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php @@ -69,7 +69,7 @@ class AddPluginTest extends PluginCommandTestCase // the plugin is checked when updating config files self::$DI['cli']['plugins.plugins-validator']->expects($this->at(0)) ->method('validatePlugin') - ->with('tempdir') + ->with('TestPlugin') ->will($this->returnValue($manifest)); self::$DI['cli']['plugins.plugins-validator']->expects($this->at(1)) From 1e8de458bd3db7362faf8de50c77f4296744a3d1 Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Sat, 14 Mar 2020 00:46:42 +0100 Subject: [PATCH 092/104] Add default value for SSH_AUTH_SOCK --- .env | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.env b/.env index e89eeec0aa..75c614e5d6 100644 --- a/.env +++ b/.env @@ -72,6 +72,9 @@ PHRASEANET_ELASTICSEARCH_DIR=./volumes/elasticsearch PHRASEANET_THUMBNAILS_DIR=./www/thumbnails PHRASEANET_TMP_DIR=./tmp +# For dev who don't have SSH_AUTH_SOCK (avoid an empty volume name) +SSH_AUTH_SOCK=/dev/null + # Plugin support PHRASEANET_PLUGINS= PHRASEANET_SSH_PRIVATE_KEY= From 56f6eb83e3d52a654287d4214045c31f016026b7 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Mon, 16 Mar 2020 15:46:41 +0400 Subject: [PATCH 093/104] PHRAS-2978-add feedback creation date on workzone feedback --- package.json | 2 +- templates/web/prod/WorkZone/Basket.html.twig | 32 +++++++++++++------- yarn.lock | 8 ++--- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 70d1fbaddb..7ce6d01a66 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.149-d", + "phraseanet-production-client": "0.34.150-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/templates/web/prod/WorkZone/Basket.html.twig b/templates/web/prod/WorkZone/Basket.html.twig index ef0f52f980..fb028812d5 100644 --- a/templates/web/prod/WorkZone/Basket.html.twig +++ b/templates/web/prod/WorkZone/Basket.html.twig @@ -90,18 +90,28 @@ {% endif %} {% if basket.getValidation() %} - {% set dateExpired = app['date-formatter'].getPrettyString(basket.getValidation().getExpires()) %} -
- {{ 'workzone:feedback:expiration' | trans }} : -
- - - - -
-
+ {% set basket_length = basket.getElements()|length %}
{{ 'Certaines donnees du panier ont change' | trans }} {{ 'rafraichir' | trans }}
diff --git a/yarn.lock b/yarn.lock index 98775d43a0..4af2ac395c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.149-d: - version "0.34.149-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.149-d.tgz#e486bbe160861d259b005c7b549d8f1ea08cd82d" - integrity sha512-7aXn1WWcALhuruiz8dkLS67Z6MNkQZoxoehCE7iRdnIDRzKioYQ1wycia4MtxyL+4S5XZZb39HIunvdxGsgDSQ== +phraseanet-production-client@0.34.150-d: + version "0.34.150-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.150-d.tgz#625ea96c045719b405fe9b707b632b1290aca285" + integrity sha512-JrtPq6dCTCBxX6kGViXZj4Sc26PMFIaifT3PVD1WHLUCNd/U3nnHzpzKUgVC0ibqOj4aVwA8JW/oMilGEe3cmg== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" From 7e3b480442aea13ee718782bbf8245e50a221468 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Mon, 16 Mar 2020 16:51:02 +0400 Subject: [PATCH 094/104] PHRAS-2978 fix icon preview --- package.json | 2 +- templates/web/prod/preview/appears_in.html.twig | 8 ++++---- yarn.lock | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 7ce6d01a66..b9d1375021 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.150-d", + "phraseanet-production-client": "0.34.151-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/templates/web/prod/preview/appears_in.html.twig b/templates/web/prod/preview/appears_in.html.twig index e6087d49ab..0b7aa4dfa5 100644 --- a/templates/web/prod/preview/appears_in.html.twig +++ b/templates/web/prod/preview/appears_in.html.twig @@ -27,15 +27,15 @@ {##} {% if basket.getValidation() %} - + {% elseif basket.getPusher() %} {% if not basket.isRead() %} - + {% else %} - + {% endif %} {% else %} - + {% endif %} {{basket.getName()}} diff --git a/yarn.lock b/yarn.lock index 4af2ac395c..f6889a2d62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.150-d: - version "0.34.150-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.150-d.tgz#625ea96c045719b405fe9b707b632b1290aca285" - integrity sha512-JrtPq6dCTCBxX6kGViXZj4Sc26PMFIaifT3PVD1WHLUCNd/U3nnHzpzKUgVC0ibqOj4aVwA8JW/oMilGEe3cmg== +phraseanet-production-client@0.34.151-d: + version "0.34.151-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.151-d.tgz#e004c9990160959028a2fe581b0108074c0b06f4" + integrity sha512-4KcbDpWSqOqIhtUHrZKV/qiAZlcW81d8u7ZuTSJ7Eyq6ft0os1IJZ2ccJ0WZIgbcRU5JCfY6Y1bVvajqfOT9sA== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" From 9c87ba5504e588ea80ed6eaf8358133586159037 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Mon, 16 Mar 2020 17:40:32 +0400 Subject: [PATCH 095/104] PHRAS-2978 remove other change for PHRAS-2989 --- package.json | 2 +- templates/web/prod/preview/appears_in.html.twig | 8 ++++---- yarn.lock | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index b9d1375021..7ce6d01a66 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "normalize-css": "^2.1.0", "npm": "^6.0.0", "npm-modernizr": "^2.8.3", - "phraseanet-production-client": "0.34.151-d", + "phraseanet-production-client": "0.34.150-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/templates/web/prod/preview/appears_in.html.twig b/templates/web/prod/preview/appears_in.html.twig index 0b7aa4dfa5..e6087d49ab 100644 --- a/templates/web/prod/preview/appears_in.html.twig +++ b/templates/web/prod/preview/appears_in.html.twig @@ -27,15 +27,15 @@ {##} {% if basket.getValidation() %} - + {% elseif basket.getPusher() %} {% if not basket.isRead() %} - + {% else %} - + {% endif %} {% else %} - + {% endif %} {{basket.getName()}} diff --git a/yarn.lock b/yarn.lock index f6889a2d62..4af2ac395c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.5-d: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.151-d: - version "0.34.151-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.151-d.tgz#e004c9990160959028a2fe581b0108074c0b06f4" - integrity sha512-4KcbDpWSqOqIhtUHrZKV/qiAZlcW81d8u7ZuTSJ7Eyq6ft0os1IJZ2ccJ0WZIgbcRU5JCfY6Y1bVvajqfOT9sA== +phraseanet-production-client@0.34.150-d: + version "0.34.150-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.150-d.tgz#625ea96c045719b405fe9b707b632b1290aca285" + integrity sha512-JrtPq6dCTCBxX6kGViXZj4Sc26PMFIaifT3PVD1WHLUCNd/U3nnHzpzKUgVC0ibqOj4aVwA8JW/oMilGEe3cmg== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" From c4399fd4ac0910e8e7e5556d864363cd64a177bb Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Mon, 16 Mar 2020 22:43:21 +0000 Subject: [PATCH 096/104] Translated using Weblate (English) Currently translated at 99.1% (2450 of 2471 strings) --- resources/locales/messages.en.xlf | 98 +++++++++++++++---------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 95c032bf88..e1294aa797 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,4 +1,4 @@ - +
@@ -7,8 +7,8 @@
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -11721,9 +11721,9 @@ It is possible to place several search areas Delete Selection prod/actions/Push.html.twig - + prod:workzone:basket:creation-date - prod:workzone:basket:creation-date + Creation Date prod/Tooltip/Basket.html.twig @@ -13400,14 +13400,14 @@ It is possible to place several search areas Thumbnail Tools actions/Tools/videoEditor.html.twig - + workzone:datepicker:april - workzone:datepicker:april + April prod/WorkZone/Basket.html.twig - + workzone:datepicker:august - workzone:datepicker:august + August prod/WorkZone/Basket.html.twig @@ -13420,99 +13420,99 @@ It is possible to place several search areas workzone:datepicker:currentText prod/WorkZone/Basket.html.twig - + workzone:datepicker:december - workzone:datepicker:december + December prod/WorkZone/Basket.html.twig - + workzone:datepicker:february - workzone:datepicker:february + February prod/WorkZone/Basket.html.twig - + workzone:datepicker:friday - workzone:datepicker:friday + Friday prod/WorkZone/Basket.html.twig - + workzone:datepicker:january - workzone:datepicker:january + January prod/WorkZone/Basket.html.twig - + workzone:datepicker:july - workzone:datepicker:july + July prod/WorkZone/Basket.html.twig - + workzone:datepicker:june - workzone:datepicker:june + June prod/WorkZone/Basket.html.twig - + workzone:datepicker:march - workzone:datepicker:march + March prod/WorkZone/Basket.html.twig - + workzone:datepicker:may - workzone:datepicker:may + May prod/WorkZone/Basket.html.twig - + workzone:datepicker:monday - workzone:datepicker:monday + Monday prod/WorkZone/Basket.html.twig - + workzone:datepicker:nextText - workzone:datepicker:nextText + Next prod/WorkZone/Basket.html.twig - + workzone:datepicker:november - workzone:datepicker:november + November prod/WorkZone/Basket.html.twig - + workzone:datepicker:october - workzone:datepicker:october + October prod/WorkZone/Basket.html.twig - + workzone:datepicker:prevText - workzone:datepicker:prevText + Previous prod/WorkZone/Basket.html.twig - + workzone:datepicker:saturday - workzone:datepicker:saturday + Saturday prod/WorkZone/Basket.html.twig - + workzone:datepicker:september - workzone:datepicker:september + September prod/WorkZone/Basket.html.twig - + workzone:datepicker:sunday - workzone:datepicker:sunday + Sunday prod/WorkZone/Basket.html.twig - + workzone:datepicker:thursday - workzone:datepicker:thursday + Thursday prod/WorkZone/Basket.html.twig - + workzone:datepicker:tuesday - workzone:datepicker:tuesday + Tuesday prod/WorkZone/Basket.html.twig - + workzone:datepicker:wednesday - workzone:datepicker:wednesday + Wednesday prod/WorkZone/Basket.html.twig @@ -13521,9 +13521,9 @@ It is possible to place several search areas prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig - + workzone:feedback:update - workzone:feedback:update + Update Date prod/WorkZone/Basket.html.twig From 4881e4c402c038485c74f2c843ceb69dab239c12 Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Mon, 16 Mar 2020 23:08:34 +0000 Subject: [PATCH 097/104] Translated using Weblate (French) Currently translated at 99.1% (2451 of 2471 strings) --- resources/locales/messages.fr.xlf | 114 +++++++++++++++--------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index 1b43accabe..a8166562ca 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,4 +1,4 @@ - +
@@ -7,8 +7,8 @@
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -10058,14 +10058,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Facettes masquées web/prod/index.html.twig
- + index::advance_search: order-by-hits - Par occurrences + Par occurrences web/prod/index.html.twig - + index::advance_search: order-by-hits-asc - Par occurrences asc + Par occurrences asc web/prod/index.html.twig @@ -11724,9 +11724,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Supprimer la selection prod/actions/Push.html.twig - + prod:workzone:basket:creation-date - prod:workzone:basket:creation-date + Date de création prod/Tooltip/Basket.html.twig @@ -13403,119 +13403,119 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Outils vidéos actions/Tools/videoEditor.html.twig - + workzone:datepicker:april - workzone:datepicker:april + Avril prod/WorkZone/Basket.html.twig - + workzone:datepicker:august - workzone:datepicker:august + Aout prod/WorkZone/Basket.html.twig - + workzone:datepicker:closeText - workzone:datepicker:closeText + Clore prod/WorkZone/Basket.html.twig - + workzone:datepicker:currentText - workzone:datepicker:currentText + courant prod/WorkZone/Basket.html.twig - + workzone:datepicker:december - workzone:datepicker:december + Décembre prod/WorkZone/Basket.html.twig - + workzone:datepicker:february - workzone:datepicker:february + Février prod/WorkZone/Basket.html.twig - + workzone:datepicker:friday - workzone:datepicker:friday + Vendredi prod/WorkZone/Basket.html.twig - + workzone:datepicker:january - workzone:datepicker:january + Janvier prod/WorkZone/Basket.html.twig - + workzone:datepicker:july - workzone:datepicker:july + Juillet prod/WorkZone/Basket.html.twig - + workzone:datepicker:june - workzone:datepicker:june + Juin prod/WorkZone/Basket.html.twig - + workzone:datepicker:march - workzone:datepicker:march + Mars prod/WorkZone/Basket.html.twig - + workzone:datepicker:may - workzone:datepicker:may + Mai prod/WorkZone/Basket.html.twig - + workzone:datepicker:monday - workzone:datepicker:monday + Lundi prod/WorkZone/Basket.html.twig - + workzone:datepicker:nextText - workzone:datepicker:nextText + Suivant prod/WorkZone/Basket.html.twig - + workzone:datepicker:november - workzone:datepicker:november + Novembre prod/WorkZone/Basket.html.twig - + workzone:datepicker:october - workzone:datepicker:october + Octobre prod/WorkZone/Basket.html.twig - + workzone:datepicker:prevText - workzone:datepicker:prevText + Précédent prod/WorkZone/Basket.html.twig - + workzone:datepicker:saturday - workzone:datepicker:saturday + Samedi prod/WorkZone/Basket.html.twig - + workzone:datepicker:september - workzone:datepicker:september + Septembre prod/WorkZone/Basket.html.twig - + workzone:datepicker:sunday - workzone:datepicker:sunday + Dimanche prod/WorkZone/Basket.html.twig - + workzone:datepicker:thursday - workzone:datepicker:thursday + Jeudi prod/WorkZone/Basket.html.twig - + workzone:datepicker:tuesday - workzone:datepicker:tuesday + Mardi prod/WorkZone/Basket.html.twig - + workzone:datepicker:wednesday - workzone:datepicker:wednesday + Mercredi prod/WorkZone/Basket.html.twig @@ -13524,9 +13524,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig - + workzone:feedback:update - workzone:feedback:update + Valider prod/WorkZone/Basket.html.twig From 057b690fb6e8062c1b546ed3c0b39b2ae1c716bc Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Mon, 16 Mar 2020 23:25:14 +0000 Subject: [PATCH 098/104] Translated using Weblate (English) Currently translated at 99.1% (2451 of 2471 strings) --- resources/locales/messages.en.xlf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index e1294aa797..301050bb79 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -11723,7 +11723,7 @@ It is possible to place several search areas prod:workzone:basket:creation-date - Creation Date + Creation prod/Tooltip/Basket.html.twig @@ -13420,9 +13420,9 @@ It is possible to place several search areas workzone:datepicker:currentText prod/WorkZone/Basket.html.twig - + workzone:datepicker:december - December + December prod/WorkZone/Basket.html.twig From fbc4e01ef33b0297b40e9d1fffe89b99f343c0fa Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 17 Mar 2020 15:34:24 +0400 Subject: [PATCH 099/104] PHRAS-2978 #comment update feedback expiration date #time 6h --- .../Controller/Prod/PushController.php | 35 +++++++++++++++- .../Phrasea/ControllerProvider/Prod/Push.php | 3 ++ templates/web/prod/Tooltip/Basket.html.twig | 6 ++- templates/web/prod/WorkZone/Basket.html.twig | 40 +++++++++++++++---- 4 files changed, 74 insertions(+), 10 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php index 6e650aefaa..c1fd5d8751 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php @@ -98,7 +98,7 @@ class PushController extends Controller $Basket->setUser($user_receiver); $Basket->setPusher($this->getAuthenticatedUser()); $Basket->markUnread(); - + $manager->persist($Basket); foreach ($pusher->get_elements() as $element) { @@ -600,6 +600,38 @@ class PushController extends Controller ); } + public function updateExpirationAction(Request $request) + { + $ret = [ + 'success' => false, + 'message' => $this->app->trans('Unable to save the expiration date') + ]; + if (is_null($request->request->get('date'))) { + $ret['message'] = $this->app->trans('The provided date is null!'); + return $this->app->json($ret); + } + $repository = $this->app['repo.baskets']; + $manager = $this->getEntityManager(); + $manager->beginTransaction(); + try { + $basket = $repository->findUserBasket($request->request->get('basket_id'), $this->app->getAuthenticatedUser(), true); + $date = new \DateTime($request->request->get('date')); + $validation = $basket->getValidation(); + if (is_null($validation)) { + return $this->app->json($ret); + } + $validation->setExpires($date); + $manager->persist($validation); + $manager->flush(); + $manager->commit(); + $ret['message'] = $this->app->trans('Expiration date successfully updated!'); + } catch (\Exception $e) { + $ret['message'] = $e->getMessage(); + $manager->rollback(); + } + return $this->app->json($ret); + } + private function formatUser(User $user) { $subtitle = array_filter([$user->getJob(), $user->getCompany()]); @@ -734,4 +766,5 @@ class PushController extends Controller { return $this->app['random.medium']; } + } diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php index 48352e1e39..40b93220c0 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php @@ -59,6 +59,9 @@ class Push implements ControllerProviderInterface, ServiceProviderInterface $controllers->post('/validate/', 'controller.prod.push:validateAction') ->bind('prod_push_validate'); + $controllers->post('/update-expiration/', 'controller.prod.push:updateExpirationAction') + ->bind('prod_push_do_update_expiration'); + $controllers->get('/user/{usr_id}/', 'controller.prod.push:getUserAction') ->assert('usr_id', '\d+'); diff --git a/templates/web/prod/Tooltip/Basket.html.twig b/templates/web/prod/Tooltip/Basket.html.twig index 9905cbf49c..49eeec04ba 100644 --- a/templates/web/prod/Tooltip/Basket.html.twig +++ b/templates/web/prod/Tooltip/Basket.html.twig @@ -11,7 +11,11 @@ {% if basket.getValidation() %} {% set dateExpired = app['date-formatter'].getPrettyString(basket.getValidation().getExpires()) %} - {{ 'workzone:feedback:expiration' | trans }} : {{ dateExpired }} + {% if date(dateExpired) < date() %} + {{ 'workzone:feedback:expiration-closed' | trans }} : + {% else %} + {{ 'workzone:feedback:expiration-open' | trans }} : + {% endif %} {{ dateExpired }} {% endif %}
diff --git a/templates/web/prod/WorkZone/Basket.html.twig b/templates/web/prod/WorkZone/Basket.html.twig index fb028812d5..d46d0f2f55 100644 --- a/templates/web/prod/WorkZone/Basket.html.twig +++ b/templates/web/prod/WorkZone/Basket.html.twig @@ -1,4 +1,4 @@ - +
@@ -101,13 +101,19 @@ {% set dateExpired = app['date-formatter'].getPrettyString(basket.getValidation().getExpires()) %}
- {{ 'workzone:feedback:expiration' | trans }} : + {% if date(dateExpired) < date() %} + {{ 'workzone:feedback:expiration-closed' | trans }} : + {% else %} + {{ 'workzone:feedback:expiration-open' | trans }} : + {% endif %} +
- - - + + +
+

{{ 'prod:workzone:basket:updated-message' | trans }}

{% endif %} @@ -135,7 +141,24 @@ From 5e8dda54a503e58a0a125f6a8cfda24fe8c0e5b4 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 17 Mar 2020 15:45:59 +0400 Subject: [PATCH 100/104] Add translation --- resources/locales/messages.de.xlf | 96 ++++++++++++++--------- resources/locales/messages.en.xlf | 110 +++++++++++++++++---------- resources/locales/messages.fr.xlf | 114 +++++++++++++++++----------- resources/locales/messages.nl.xlf | 96 ++++++++++++++--------- resources/locales/validators.de.xlf | 2 +- resources/locales/validators.en.xlf | 2 +- resources/locales/validators.fr.xlf | 2 +- resources/locales/validators.nl.xlf | 2 +- 8 files changed, 268 insertions(+), 156 deletions(-) diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index 9ca23ed2d7..8972dae59c 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -192,8 +192,9 @@ %nb_records% records %nb_records% Datensätze + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -1689,7 +1690,7 @@ Certaines donnees du panier ont change Einige Daten des Sammelkorbs wurden verändert - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -3165,6 +3166,11 @@ Einstellungen von ausführbaren Programme Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Exportieren @@ -6685,6 +6691,11 @@ Die folgende Fehler wurden festgestellt user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped Veröffentlichung wurde gestoppt @@ -7046,6 +7057,11 @@ Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php + Unable to send the documents Es ist nicht möglich Dokumente zu senden @@ -11718,7 +11734,13 @@ prod:workzone:basket:creation-date prod:workzone:basket:creation-date - prod/Tooltip/Basket.html.twig + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + prod:workzone:basket:updated-message + prod/WorkZone/Basket.html.twig prod:workzone:facetstab:search_and_facets_sort_options @@ -11826,7 +11848,7 @@ Aktualisieren prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -13397,128 +13419,134 @@ workzone:datepicker:april workzone:datepicker:april - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:august workzone:datepicker:august - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:closeText workzone:datepicker:closeText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:currentText workzone:datepicker:currentText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:december workzone:datepicker:december - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:february workzone:datepicker:february - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:friday workzone:datepicker:friday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:january workzone:datepicker:january - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:july workzone:datepicker:july - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:june workzone:datepicker:june - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:march workzone:datepicker:march - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:may workzone:datepicker:may - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:monday workzone:datepicker:monday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:nextText workzone:datepicker:nextText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:november workzone:datepicker:november - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:october workzone:datepicker:october - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:prevText workzone:datepicker:prevText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:saturday workzone:datepicker:saturday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:september workzone:datepicker:september - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:sunday workzone:datepicker:sunday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:thursday workzone:datepicker:thursday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:tuesday workzone:datepicker:tuesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:wednesday workzone:datepicker:wednesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - - workzone:feedback:expiration - workzone:feedback:expiration - prod/WorkZone/Basket.html.twig - prod/Tooltip/Basket.html.twig + + workzone:feedback:expiration-closed + workzone:feedback:expiration-closed + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + workzone:feedback:expiration-open + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig workzone:feedback:update workzone:feedback:update - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig yes diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 301050bb79..4c9560d4e9 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -192,8 +192,9 @@ %nb_records% records %nb_records% records + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -1690,7 +1691,7 @@ Certaines donnees du panier ont change This basket has been updated - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -3168,6 +3169,11 @@ Executables setting Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Export @@ -6688,6 +6694,11 @@ The following errors have been detected user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped The publication has been stopped. @@ -7049,6 +7060,11 @@ Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php + Unable to send the documents Unable to send the documents @@ -11721,10 +11737,16 @@ It is possible to place several search areas Delete Selection prod/actions/Push.html.twig - + prod:workzone:basket:creation-date Creation - prod/Tooltip/Basket.html.twig + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + prod:workzone:basket:updated-message + prod/WorkZone/Basket.html.twig prod:workzone:facetstab:search_and_facets_sort_options @@ -11832,7 +11854,7 @@ It is possible to place several search areas Refresh prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -13403,128 +13425,134 @@ It is possible to place several search areas workzone:datepicker:april April - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:august August - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:closeText workzone:datepicker:closeText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:currentText workzone:datepicker:currentText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:december December - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:february February - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:friday Friday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:january January - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:july July - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:june June - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:march March - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:may May - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:monday Monday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:nextText Next - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:november November - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:october October - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:prevText Previous - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:saturday Saturday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:september September - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:sunday Sunday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:thursday Thursday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:tuesday Tuesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:wednesday Wednesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - - workzone:feedback:expiration - Feedback open Until - prod/WorkZone/Basket.html.twig - prod/Tooltip/Basket.html.twig + + workzone:feedback:expiration-closed + workzone:feedback:expiration-closed + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig - + + workzone:feedback:expiration-open + workzone:feedback:expiration-open + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + workzone:feedback:update Update Date - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig yes diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index a8166562ca..be1a6c9a97 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,14 +1,14 @@ - + - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message.
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -192,8 +192,9 @@ %nb_records% records %nb_records% enregistrement(s) + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -1689,7 +1690,7 @@ Certaines donnees du panier ont change Certaines données du panier ont changé - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -3165,6 +3166,11 @@ Paramètres d'exécutables Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Exporter @@ -6687,6 +6693,11 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Les erreurs suivantes ont été détectées. user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped La publication a été suspendue @@ -7048,6 +7059,11 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php + Unable to send the documents Impossible d'envoyer les documents @@ -11724,10 +11740,16 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Supprimer la selection prod/actions/Push.html.twig - + prod:workzone:basket:creation-date Date de création - prod/Tooltip/Basket.html.twig + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + prod:workzone:basket:updated-message + prod/WorkZone/Basket.html.twig prod:workzone:facetstab:search_and_facets_sort_options @@ -11835,7 +11857,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Rafraîchir prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -13406,128 +13428,134 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le workzone:datepicker:april Avril - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:august Aout - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:closeText Clore - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:currentText courant - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:december Décembre - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:february Février - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:friday Vendredi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:january Janvier - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:july Juillet - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:june Juin - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:march Mars - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:may Mai - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:monday Lundi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:nextText Suivant - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:november Novembre - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:october Octobre - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + workzone:datepicker:prevText Précédent - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:saturday Samedi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:september Septembre - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:sunday Dimanche - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:thursday Jeudi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:tuesday Mardi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:wednesday Mercredi - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - - workzone:feedback:expiration - Validation ouverte jusqu'au - prod/WorkZone/Basket.html.twig - prod/Tooltip/Basket.html.twig + + workzone:feedback:expiration-closed + workzone:feedback:expiration-closed + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig - + + workzone:feedback:expiration-open + workzone:feedback:expiration-open + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + workzone:feedback:update Valider - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig yes diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index c61524de6a..d5fff61be3 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -196,8 +196,9 @@ %nb_records% records %nb_records% records + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -1694,7 +1695,7 @@ Certaines donnees du panier ont change Sommige gegevens in het mandje zijn veranderd - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -3175,6 +3176,11 @@ Executables instellingen Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Exporteer @@ -6695,6 +6701,11 @@ De volgende fouten werden opgemerkt user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped Het programma is gestopt @@ -7056,6 +7067,11 @@ Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php + Unable to send the documents Documenten kunnen niet worden verstuurd @@ -11728,7 +11744,13 @@ prod:workzone:basket:creation-date prod:workzone:basket:creation-date - prod/Tooltip/Basket.html.twig + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + prod:workzone:basket:updated-message + prod/WorkZone/Basket.html.twig prod:workzone:facetstab:search_and_facets_sort_options @@ -11836,7 +11858,7 @@ vernieuwen prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -13407,128 +13429,134 @@ workzone:datepicker:april workzone:datepicker:april - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:august workzone:datepicker:august - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:closeText workzone:datepicker:closeText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:currentText workzone:datepicker:currentText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:december workzone:datepicker:december - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:february workzone:datepicker:february - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:friday workzone:datepicker:friday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:january workzone:datepicker:january - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:july workzone:datepicker:july - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:june workzone:datepicker:june - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:march workzone:datepicker:march - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:may workzone:datepicker:may - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:monday workzone:datepicker:monday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:nextText workzone:datepicker:nextText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:november workzone:datepicker:november - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:october workzone:datepicker:october - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:prevText workzone:datepicker:prevText - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:saturday workzone:datepicker:saturday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:september workzone:datepicker:september - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:sunday workzone:datepicker:sunday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:thursday workzone:datepicker:thursday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:tuesday workzone:datepicker:tuesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig workzone:datepicker:wednesday workzone:datepicker:wednesday - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - - workzone:feedback:expiration - workzone:feedback:expiration - prod/WorkZone/Basket.html.twig - prod/Tooltip/Basket.html.twig + + workzone:feedback:expiration-closed + workzone:feedback:expiration-closed + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + workzone:feedback:expiration-open + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig workzone:feedback:update workzone:feedback:update - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig yes diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index b7398ca514..4797cbcafd 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index f8d0a54e1d..398448e7d5 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 6f350ddd76..8d7c716ebd 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index 2218c1ff00..0f8bf37ddc 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. From a1deb3c28ffffefb42c249d5bae9d31735e9ac03 Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 17 Mar 2020 18:35:36 +0400 Subject: [PATCH 101/104] PHRAS-2978 fix date format --- lib/Alchemy/Phrasea/Controller/Prod/PushController.php | 2 +- lib/classes/phraseadate.php | 10 ++++++++++ templates/web/prod/WorkZone/Basket.html.twig | 2 +- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php index c1fd5d8751..c9726d5faf 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php @@ -615,7 +615,7 @@ class PushController extends Controller $manager->beginTransaction(); try { $basket = $repository->findUserBasket($request->request->get('basket_id'), $this->app->getAuthenticatedUser(), true); - $date = new \DateTime($request->request->get('date')); + $date = new \DateTime($request->request->get('date') . " 23:59:59"); $validation = $basket->getValidation(); if (is_null($validation)) { return $this->app->json($ret); diff --git a/lib/classes/phraseadate.php b/lib/classes/phraseadate.php index 6acca8b75f..a9732e7822 100644 --- a/lib/classes/phraseadate.php +++ b/lib/classes/phraseadate.php @@ -120,6 +120,16 @@ class phraseadate } } + public function getTranslatedDate(DateTime $date = null) + { + $fmt = new IntlDateFormatter( + $this->app['locale'] ?: 'en', + NULL, NULL, NULL, NULL, 'dd MMMM yyyy' + ); + + return $fmt->format($date); + } + /** * * @param DateTime $date diff --git a/templates/web/prod/WorkZone/Basket.html.twig b/templates/web/prod/WorkZone/Basket.html.twig index d46d0f2f55..181382e612 100644 --- a/templates/web/prod/WorkZone/Basket.html.twig +++ b/templates/web/prod/WorkZone/Basket.html.twig @@ -99,7 +99,7 @@

{% trans with {'%nb_records%' : nb_records} %}%nb_records% records{% endtrans %}
- {% set dateExpired = app['date-formatter'].getPrettyString(basket.getValidation().getExpires()) %} + {% set dateExpired = app['date-formatter'].getTranslatedDate(basket.getValidation().getExpires()) %}
{% if date(dateExpired) < date() %} {{ 'workzone:feedback:expiration-closed' | trans }} : From 026148c58223bf65532c8687a7cb16c983b8188a Mon Sep 17 00:00:00 2001 From: Harrys Ravalomanana Date: Tue, 17 Mar 2020 18:40:05 +0400 Subject: [PATCH 102/104] PHRAS-2978 fix design --- templates/web/prod/WorkZone/Basket.html.twig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/templates/web/prod/WorkZone/Basket.html.twig b/templates/web/prod/WorkZone/Basket.html.twig index 181382e612..9f9995d634 100644 --- a/templates/web/prod/WorkZone/Basket.html.twig +++ b/templates/web/prod/WorkZone/Basket.html.twig @@ -111,7 +111,7 @@ - +

{{ 'prod:workzone:basket:updated-message' | trans }}

@@ -156,6 +156,7 @@ }, success: function (data) { $('.message').css('opacity',1); + $('.submit-validation').addClass('hidden'); setTimeout(function(){ $('.message').css('opacity',0); }, 2000); }, }); @@ -177,7 +178,10 @@ }; - $( ".feed-datepicker" ).datepicker( $.datepicker.regional[ 'default' ]); + $(".feed-datepicker" ).datepicker( $.datepicker.regional[ 'default' ]); + $(".feed-datepicker" ).change(function() { + $('.submit-validation').removeClass('hidden'); + }) }) From fba38da25cdeb70d06f66cc42c647b73d81496b5 Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Wed, 18 Mar 2020 01:33:39 +0000 Subject: [PATCH 103/104] Translated using Weblate (English) Currently translated at 98.9% (2451 of 2476 strings) --- resources/locales/messages.en.xlf | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 4c9560d4e9..4b5369e3e6 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,4 +1,4 @@ - +
@@ -7,8 +7,8 @@
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -13432,14 +13432,14 @@ It is possible to place several search areas August prod/WorkZone/Basket.html.twig - + workzone:datepicker:closeText - workzone:datepicker:closeText + Close prod/WorkZone/Basket.html.twig - + workzone:datepicker:currentText - workzone:datepicker:currentText + Current prod/WorkZone/Basket.html.twig @@ -13543,9 +13543,9 @@ It is possible to place several search areas prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig - + workzone:feedback:expiration-open - workzone:feedback:expiration-open + Feedback open until prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig From 936c24329b4fc88950fdbee2b866897fe92d431a Mon Sep 17 00:00:00 2001 From: Nicolas Maillat Date: Wed, 18 Mar 2020 00:42:53 +0000 Subject: [PATCH 104/104] Translated using Weblate (French) Currently translated at 98.9% (2451 of 2476 strings) --- resources/locales/messages.fr.xlf | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index be1a6c9a97..d830633044 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,4 +1,4 @@ - +
@@ -7,8 +7,8 @@
- - + + Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php @@ -13540,15 +13540,15 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Mercredi prod/WorkZone/Basket.html.twig
- + workzone:feedback:expiration-closed - workzone:feedback:expiration-closed + Validation close depuis prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig - + workzone:feedback:expiration-open - workzone:feedback:expiration-open + validation ouverte jusqu'au prod/WorkZone/Basket.html.twig prod/Tooltip/Basket.html.twig