diff --git a/Dockerfile b/Dockerfile
index 5b317cd003..418e8e812d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -36,7 +36,11 @@ RUN apt-get update \
xpdf \
&& update-locale "LANG=fr_FR.UTF-8 UTF-8" \
&& dpkg-reconfigure --frontend noninteractive locales \
- && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
+ && docker-php-source extract \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install zip exif iconv mbstring pcntl sockets xsl intl pdo_mysql gettext bcmath mcrypt \
&& pecl install redis amqp-1.9.3 zmq-beta imagick-beta \
@@ -126,6 +130,12 @@ RUN mkdir -p /var/alchemy/Phraseanet/logs \
FROM phraseanet-system as phraseanet-fpm
+RUN docker-php-source extract \
+ && pecl install xdebug-2.9.0 \
+ && docker-php-ext-enable xdebug \
+ #&& pecl clear-cache \
+ && docker-php-source delete
+
COPY --from=builder --chown=app /var/alchemy /var/alchemy/Phraseanet
ADD ./docker/phraseanet/ /
WORKDIR /var/alchemy/Phraseanet
diff --git a/bin/console b/bin/console
index 552cb672d0..c973195ff6 100755
--- a/bin/console
+++ b/bin/console
@@ -23,7 +23,9 @@ 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\ListCollectionCommand;
use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand;
+use Alchemy\Phrasea\Command\Databox\ListDataboxCommand;
use Alchemy\Phrasea\Command\MailTest;
use Alchemy\Phrasea\Command\Compile\Configuration;
use Alchemy\Phrasea\Command\RecordAdd;
@@ -46,6 +48,9 @@ use Alchemy\Phrasea\Command\Task\TaskRun;
use Alchemy\Phrasea\Command\Task\TaskStart;
use Alchemy\Phrasea\Command\Task\TaskState;
use Alchemy\Phrasea\Command\Task\TaskStop;
+use Alchemy\Phrasea\Command\User\UserCreateCommand;
+use Alchemy\Phrasea\Command\User\UserSetPasswordCommand;
+use Alchemy\Phrasea\Command\User\UserListCommand;
use Alchemy\Phrasea\Command\UpgradeDBDatas;
require_once __DIR__ . '/../lib/autoload.php';
@@ -108,8 +113,18 @@ $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 ListCollectionCommand('collection:list'));
+
+$cli->command(new ListDataboxCommand('databox:list'));
$cli->command(new CreateDataboxCommand('databox:create'));
+$cli->command(new UserCreateCommand('user:create'));
+
+$cli->command(new UserSetPasswordCommand('user:set-password'));
+
+$cli->command(new UserListCommand('user:list'));
+
+
$cli->command(new RecordAdd('records:add'));
$cli->command(new RescanTechnicalDatas('records:rescan-technical-datas'));
$cli->command(new BuildMissingSubdefs('records:build-missing-subdefs'));
diff --git a/composer.lock b/composer.lock
index e257b750f2..41a8b05beb 100644
--- a/composer.lock
+++ b/composer.lock
@@ -131,16 +131,16 @@
},
{
"name": "alchemy/embed-bundle",
- "version": "2.0.8",
+ "version": "2.0.9",
"source": {
"type": "git",
"url": "https://github.com/alchemy-fr/embed-bundle.git",
- "reference": "cbaa5e34b7b6ccbe128f8c804649c8a3ecd1e621"
+ "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/cbaa5e34b7b6ccbe128f8c804649c8a3ecd1e621",
- "reference": "cbaa5e34b7b6ccbe128f8c804649c8a3ecd1e621",
+ "url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/8cdb9612a9e3edd998b68f0803eacca8e0f50775",
+ "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775",
"shasum": ""
},
"require-dev": {
@@ -177,7 +177,11 @@
}
],
"description": "Embed resources bundle",
- "time": "2019-10-09T14:34:23+00:00"
+ "support": {
+ "source": "https://github.com/alchemy-fr/embed-bundle/tree/2.0.9",
+ "issues": "https://github.com/alchemy-fr/embed-bundle/issues"
+ },
+ "time": "2020-02-04T14:53:00+00:00"
},
{
"name": "alchemy/geonames-api-consumer",
@@ -271,16 +275,16 @@
},
{
"name": "alchemy/mediavorus",
- "version": "0.4.9",
+ "version": "0.4.10",
"source": {
"type": "git",
"url": "https://github.com/alchemy-fr/MediaVorus.git",
- "reference": "1a96dc4142ff8474c11285cab9eab11df9683255"
+ "reference": "3e235eb1efb528aea2973c946f4bf47630b98985"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/alchemy-fr/MediaVorus/zipball/1a96dc4142ff8474c11285cab9eab11df9683255",
- "reference": "1a96dc4142ff8474c11285cab9eab11df9683255",
+ "url": "https://api.github.com/repos/alchemy-fr/MediaVorus/zipball/3e235eb1efb528aea2973c946f4bf47630b98985",
+ "reference": "3e235eb1efb528aea2973c946f4bf47630b98985",
"shasum": ""
},
"require": {
@@ -296,6 +300,7 @@
},
"require-dev": {
"jms/serializer": "~0.12.0",
+ "phpunit/phpunit": "^4.0|^5.0",
"silex/silex": "~1.0",
"symfony/yaml": "~2.0"
},
@@ -329,7 +334,7 @@
"keywords": [
"metadata"
],
- "time": "2019-01-22T11:23:34+00:00"
+ "time": "2020-02-18T13:37:45+00:00"
},
{
"name": "alchemy/oauth2php",
@@ -2856,6 +2861,7 @@
}
],
"description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
+ "abandoned": true,
"time": "2015-05-20T03:37:09+00:00"
},
{
@@ -2906,6 +2912,7 @@
"Guzzle",
"stream"
],
+ "abandoned": true,
"time": "2014-10-12T19:18:40+00:00"
},
{
@@ -6162,7 +6169,7 @@
],
"description": "A WebProfiler for Silex",
"homepage": "http://silex.sensiolabs.org/",
- "abandoned": true,
+ "abandoned": "symfony/web-profiler-bundle",
"time": "2016-01-10T11:39:13+00:00"
},
{
@@ -6412,6 +6419,7 @@
"profiler",
"silex"
],
+ "abandoned": true,
"time": "2016-10-26T11:08:02+00:00"
},
{
@@ -6454,6 +6462,7 @@
"plugin",
"silex"
],
+ "abandoned": true,
"time": "2015-11-11T07:16:28+00:00"
},
{
diff --git a/config/configuration.sample.yml b/config/configuration.sample.yml
index fbaa368ed9..9bbea0d4bc 100644
--- a/config/configuration.sample.yml
+++ b/config/configuration.sample.yml
@@ -22,13 +22,54 @@ main:
path: '/tmp/db.sqlite'
charset: UTF8
cache:
- type: MemcacheCache
+ type: redis
options:
host: localhost
- port: 11211
+ port: 6379
search-engine:
- type: phrasea
- options: []
+ type: elasticsearch
+ options:
+ host: elasticsearch
+ port: 9200
+ index: ''
+ shards: 3
+ replicas: 0
+ minScore: 2
+ highlight: true
+ populate_order: RECORD_ID
+ populate_direction: DESC
+ activeTab: ''
+ facets:
+ _base:
+ limit: 10
+ _collection:
+ limit: 10
+ _doctype:
+ limit: 10
+ _camera_model:
+ limit: 0
+ _iso:
+ limit: 0
+ _aperture:
+ limit: 0
+ _shutterspeed:
+ limit: 0
+ _flashfired:
+ limit: 0
+ _framerate:
+ limit: 0
+ _audiosamplerate:
+ limit: 0
+ _videocodec:
+ limit: 0
+ _audiocodec:
+ limit: 0
+ _orientation:
+ limit: 0
+ _colorspace:
+ limit: 0
+ _mimetype:
+ limit: 0
task-manager:
status: started
enabled: true
@@ -62,12 +103,7 @@ main:
mp4box_timeout: 60
swftools_timeout: 60
unoconv_timeout: 60
- task-manager:
- status: started
- listener:
- protocol: tcp
- host: 127.0.0.1
- port: 6700
+ exiftool_timeout: 60
storage:
subdefs: null
cache: null
@@ -75,20 +111,7 @@ main:
download: null
lazaret: null
caption: null
- bridge:
- youtube:
- enabled: false
- client_id: null
- client_secret: null
- developer_key: null
- flickr:
- enabled: false
- client_id: null
- client_secret: null
- dailymotion:
- enabled: false
- client_id: null
- client_secret: null
+ tmp_files: null
border-manager:
enabled: true
extension-mapping:
@@ -98,12 +121,17 @@ border-manager:
-
type: Checker\Sha256
enabled: true
+ collections: []
+ compare-ignore-collections: []
-
type: Checker\UUID
enabled: true
+ collections: []
+ compare-ignore-collections: []
-
type: Checker\Colorspace
enabled: false
+ collections: []
options:
colorspaces: [cmyk, grayscale, rgb]
media_types: [Image]
@@ -123,6 +151,8 @@ border-manager:
enabled: false
options:
sensitive: true
+ collections: []
+ compare-ignore-collections: []
-
type: Checker\MediaType
enabled: false
@@ -244,6 +274,14 @@ embed_bundle:
document:
player: flexpaper
enable_pdfjs: true
+video-editor:
+ ChapterVttFieldName: VideoTextTrackChapters
+ seekBackwardStep: 500 # in ms
+ seekForwardStep: 500 # in ms
+ playbackRates:
+ - 1
+ - '1.5'
+ - 3
geocoding-providers:
-
map-provider: mapboxWebGL
diff --git a/docker/phraseanet/auto-install.sh b/docker/phraseanet/auto-install.sh
index b69490fd03..00e8601edb 100755
--- a/docker/phraseanet/auto-install.sh
+++ b/docker/phraseanet/auto-install.sh
@@ -27,9 +27,10 @@ fi
/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.host elasticsearch
/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.minScore 2
-/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.base_aggregate_limit 10
-/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.collection_aggregate_limit 10
-/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.doctype_aggregate_limit 10
+/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.minScore 2
+/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._base.limit 10
+/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._collection.limit 10
+/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._doctype.limit 10
## Redis
/var/alchemy/Phraseanet/bin/setup system:config set main.cache.options.host redis
diff --git a/docker/phraseanet/boot.sh b/docker/phraseanet/boot.sh
index 444b63a64c..578da3a8da 100755
--- a/docker/phraseanet/boot.sh
+++ b/docker/phraseanet/boot.sh
@@ -14,4 +14,4 @@ else
runuser app -c '/auto-install.sh'
fi
-php-fpm
+php-fpm -F
diff --git a/docker/phraseanet/phraseanet-entrypoint.sh b/docker/phraseanet/phraseanet-entrypoint.sh
index 225b56a672..3040718c11 100755
--- a/docker/phraseanet/phraseanet-entrypoint.sh
+++ b/docker/phraseanet/phraseanet-entrypoint.sh
@@ -4,5 +4,16 @@ set -e
envsubst < /php.ini.sample > /usr/local/etc/php/php.ini
envsubst < /php-fpm.conf.sample > /usr/local/etc/php-fpm.conf
+echo "XDEBUG=$XDEBUG"
+if [ $XDEBUG = "ON" ]; then
+ echo "XDEBUG IS ENABLED. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION."
+ echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ echo "xdebug.remote_host=$XDEBUG_SERVER" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ echo "xdebug.remote_port=$XDEBUG_REMOTE_PORT" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ #echo "xdebug.idekey=11896" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+fi
bash -e docker-php-entrypoint $@
diff --git a/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php
new file mode 100644
index 0000000000..7cf2d91ced
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php
@@ -0,0 +1,86 @@
+setDescription('List all collection in Phraseanet')
+ ->addOption('databox_id', 'd', InputOption::VALUE_REQUIRED, 'The id of the databox to list collection')
+ ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
+ ->setHelp('');
+ return $this;
+ }
+ protected function doExecute(InputInterface $input, OutputInterface $output)
+ {
+ try {
+ $jsonformat = $input->getOption('jsonformat');
+ $databox = $this->container->findDataboxById($input->getOption('databox_id'));
+ $collections = $this->listDataboxCollections($databox);
+
+ if ($jsonformat) {
+ foreach ($collections as $collection) {
+ $collectionList[] = array_combine(['id local for API', 'id distant', 'name','label','status','total records'], $collection);
+ }
+ echo json_encode($collectionList);
+ } else {
+ $table = $this->getHelperSet()->get('table');
+ $table
+ ->setHeaders(['id local for API', 'id distant', 'name','label','status','total records'])
+ ->setRows($collections)
+ ->render($output);
+ }
+
+ } catch (\Exception $e) {
+ $output->writeln("{$e->getMessage()}");
+ }
+ return 0;
+ }
+
+ private function listDataboxCollections(\databox $databox)
+ {
+ return array_map(function (\collection $collection) {
+ return $this->listCollection($collection);
+ }, array_merge($databox->get_collections(),$this->getUnabledCollection($databox->get_activable_colls())));
+ }
+
+ private function getUnabledCollection($collections)
+ {
+ return array_map(function ($colId){
+ return \collection::getByBaseId($this->container, $colId);
+ },$collections);
+
+ }
+
+ private function listCollection(\collection $collection)
+ {
+ return [
+ $collection->get_base_id(),
+ $collection->get_coll_id(),
+ $collection->get_name(),
+ 'en: ' . $collection->get_label('en') .
+ ', de: ' . $collection->get_label('de') .
+ ', fr: ' . $collection->get_label('fr') .
+ ', nl: ' . $collection->get_label('nl'),
+ ($collection->is_active()) ? 'enabled' : 'disabled',
+ $collection->get_record_amount()
+ ];
+ }
+}
\ No newline at end of file
diff --git a/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php
new file mode 100644
index 0000000000..92a30435fe
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php
@@ -0,0 +1,72 @@
+setDescription('List all databox in Phraseanet')
+ ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
+ ->setHelp('');
+
+ return $this;
+ }
+
+ protected function doExecute(InputInterface $input, OutputInterface $output)
+ {
+ try {
+ $jsonformat = $input->getOption('jsonformat');
+ $databoxes = array_map(function (\databox $databox) {
+ return $this->listDatabox($databox);
+ }, $this->container->getApplicationBox()->get_databoxes());
+
+ if ($jsonformat) {
+ foreach ($databoxes as $databox) {
+ $databoxList[] = array_combine(['id', 'name', 'alias'], $databox);
+ }
+ echo json_encode($databoxList);
+ } else {
+ $table = $this->getHelperSet()->get('table');
+ $table
+ ->setHeaders(['id', 'name', 'alias'])
+ ->setRows($databoxes)
+ ->render($output);
+ }
+
+ } catch (\Exception $e) {
+ $output->writeln('Listing databox failed : '.$e->getMessage().'');
+ }
+
+ return 0;
+ }
+
+ private function listDatabox(\databox $databox)
+ {
+ return [
+ $databox->get_sbas_id(),
+ $databox->get_dbname(),
+ $databox->get_viewname()
+ ];
+ }
+
+}
diff --git a/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php b/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php
index 890fed9e6d..112914d088 100644
--- a/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php
+++ b/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php
@@ -15,6 +15,7 @@ use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Command\Command;
use Alchemy\Phrasea\Exception\RuntimeException;
use Alchemy\Phrasea\Model\Entities\User;
+use Alchemy\Phrasea\Plugin\Plugin;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\HttpKernel\Client;
@@ -30,6 +31,15 @@ class JsFixtures extends Command
protected function doExecute(InputInterface $input, OutputInterface $output)
{
+ /** @var Plugin $plugin */
+ $msg = [];
+ foreach($this->container['plugins.manager']->listPlugins() as $plugin) {
+ $msg[] = sprintf(" bin/setup plugins:remove \"%s\"", $plugin->getName());
+ }
+ if(count($msg) !== 0) {
+ throw new RuntimeException("You must remove plugins first:\n" . join("\n", $msg));
+ }
+
if (!file_exists($this->container['db.fixture.info']['path'])) {
throw new RuntimeException('You must generate sqlite db first, run "bin/developer phraseanet:regenerate-sqlite" command.');
}
@@ -104,6 +114,7 @@ class JsFixtures extends Command
private function writeResponse(OutputInterface $output, $method, $path, $to, $authenticateUser = false)
{
$environment = Application::ENV_TEST;
+ /** @var Application $app */
$app = require __DIR__ . '/../../Application/Root.php';
$app['orm.em'] = $app->extend('orm.em', function($em, $app) {
return $app['orm.ems'][$app['db.fixture.hash.key']];
diff --git a/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php b/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php
new file mode 100644
index 0000000000..66a33f1916
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php
@@ -0,0 +1,211 @@
+setDescription('Create user in Phraseanet')
+ ->addOption('user_login', null, InputOption::VALUE_REQUIRED, 'The desired login for created user.')
+ ->addOption('user_mail', null, InputOption::VALUE_OPTIONAL, 'The desired mail for created user.')
+ ->addOption('user_password', null, InputOption::VALUE_OPTIONAL, 'The desired password')
+ ->addOption('send_mail_confirm', null, InputOption::VALUE_NONE, 'Send an email to user, for validate email.')
+ ->addOption('send_mail_password', null, InputOption::VALUE_NONE, 'Send an email to user, for password definition, work only if user_password is not define')
+ ->addOption('model_number', null, InputOption::VALUE_OPTIONAL, 'Id of model')
+ ->addOption('user_gender', null, InputOption::VALUE_OPTIONAL, 'The gender for created user.')
+ ->addOption('user_firstname', null, InputOption::VALUE_OPTIONAL, 'The first name for created user.')
+ ->addOption('user_lastname', null, InputOption::VALUE_OPTIONAL, 'The last name for created user.')
+ ->addOption('user_compagny', null, InputOption::VALUE_OPTIONAL, 'The compagny for created user.')
+ ->addOption('user_job', null, InputOption::VALUE_OPTIONAL, 'The job for created user.')
+ ->addOption('user_activitie', null, InputOption::VALUE_OPTIONAL, 'The activitie for created user.')
+ ->addOption('user_phone', null, InputOption::VALUE_OPTIONAL, 'The phone number for created user.')
+ ->setHelp('');
+
+ return $this;
+ }
+
+ protected function doExecute(InputInterface $input, OutputInterface $output)
+ {
+
+ $userLogin = $input->getOption('user_login');
+ $userMail = $input->getOption('user_mail');
+ $userPassword = $input->getOption('user_password');
+ $sendMailConfirm = $input->getOption('send_mail_confirm');
+ $sendMailPassword = $input->getOption('send_mail_password');
+ $modelNumber = $input->getOption('model_number');
+ $userGender = $input->getOption('user_gender');
+ $userFirstName = $input->getOption('user_firstname');
+ $userLastName = $input->getOption('user_lastname');
+ $userCompagny = $input->getOption('user_compagny');
+ $userJob = $input->getOption('user_job');
+ $userActivity = $input->getOption('user_activitie');
+ $userPhone = $input->getOption('user_phone');
+
+ $userRepository = $this->container['repo.users'];
+
+ if ($userMail) {
+ if (!\Swift_Validate::email($userMail)) {
+ $output->writeln('Invalid mail address');
+ return 0;
+ }
+
+ if (null !== $userRepository->findByEmail($userMail)) {
+ $output->writeln('An user exist with this email.');
+ return 0;
+ }
+
+ }
+
+ $password = (!is_null($userPassword)) ? $userPassword : $this->container['random.medium']->generateString(128);
+ $userManipulator = $this->container['manipulator.user'];
+ $user = $userManipulator->createUser($userLogin, $password, $userMail);
+
+ if ($userGender) {
+ if (null === $gender = $this->verifyGender($userGender)) {
+ $output->writeln('Gender '.$userGender.' not exists.>');
+ }
+ $user->setGender($gender);
+ }
+
+ if($userFirstName) $user->setFirstName($userFirstName);
+ if($userLastName) $user->setLastName($userLastName);
+ if($userCompagny) $user->setCompany($userCompagny);
+ if($userJob) $user->setJob($userJob);
+ if($userActivity) $user->setActivity($userActivity);
+ if($userPhone) $user->setPhone($userPhone);
+
+ if ($sendMailPassword and $userMail and is_null($userPassword)) {
+ $this->sendPasswordSetupMail($user);
+ }
+
+ if ($sendMailConfirm and $userMail) {
+ $user->setMailLocked(true);
+ $this->sendAccountUnlockEmail($user);
+ }
+
+ if ($modelNumber) {
+ $template = $userRepository->find($modelNumber);
+ if (!$template) {
+ $output->writeln('Model '.$modelNumber.' not found.>');
+ } else {
+ $base_ids = [];
+ foreach ($this->container->getApplicationBox()->get_databoxes() as $databox) {
+ foreach ($databox->get_collections() as $collection) {
+ $base_ids[] = $collection->get_base_id();
+ }
+ }
+ $this->container->getAclForUser($user)->apply_model($template, $base_ids);
+ }
+ }
+
+ $this->container['orm.em']->flush();
+
+ $output->writeln("Create new user successful !");
+
+ return 0;
+ }
+
+ /**
+ * Get gender for user
+ * @param $type
+ * @return int|null
+ */
+ private function verifyGender($type)
+ {
+ switch (strtolower($type)) {
+ case "mlle.":
+ case "mlle":
+ case "miss":
+ case "mademoiselle":
+ case "0":
+ $gender = User::GENDER_MISS;
+ break;
+ case "mme":
+ case "madame":
+ case "ms":
+ case "ms.":
+ case "1":
+ $gender = User::GENDER_MRS;
+ break;
+ case "m":
+ case "m.":
+ case "mr":
+ case "mr.":
+ case "monsieur":
+ case "mister":
+ case "2":
+ $gender = User::GENDER_MR;
+ break;
+ default:
+ $gender = null;
+ }
+ return $gender;
+ }
+
+ /**
+ * Send mail for renew password
+ * @param User $user
+ */
+ public function sendPasswordSetupMail(User $user)
+ {
+ $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer'));
+ $receiver = Receiver::fromUser($user);
+
+ $token = $this->container['manipulator.token']->createResetPasswordToken($user);
+
+ $mail = MailRequestPasswordSetup::create($this->container, $receiver);
+ $servername = $this->container['conf']->get('servername');
+ $mail->setButtonUrl('http://'.$servername.'/login/renew-password/?token='.$token->getValue());
+ $mail->setLogin($user->getLogin());
+
+ $this->deliver($mail);
+ }
+
+ /**
+ * @param User $user
+ */
+ public function sendAccountUnlockEmail(User $user)
+ {
+ $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer'));
+ $receiver = Receiver::fromUser($user);
+
+ $token = $this->container['manipulator.token']->createAccountUnlockToken($user);
+
+ $mail = MailRequestEmailConfirmation::create($this->container, $receiver);
+ $servername = $this->container['conf']->get('servername');
+ $mail->setButtonUrl('http://'.$servername.'/login/register-confirm/?code='.$token->getValue());
+ $mail->setExpiration($token->getExpiration());
+
+ $this->deliver($mail);
+ }
+
+}
diff --git a/lib/Alchemy/Phrasea/Command/User/UserListCommand.php b/lib/Alchemy/Phrasea/Command/User/UserListCommand.php
new file mode 100644
index 0000000000..bf3f87e478
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Command/User/UserListCommand.php
@@ -0,0 +1,287 @@
+setDescription('List of all user (experimental)')
+ ->addOption('user_id', null, InputOption::VALUE_OPTIONAL, ' The id of user export only info this user ')
+ ->addOption('user_email', null, InputOption::VALUE_OPTIONAL, 'The mail of user export only info this user .')
+ ->addOption('database_id', null, InputOption::VALUE_OPTIONAL, 'Id of database.')
+ ->addOption('collection_id', null, InputOption::VALUE_OPTIONAL, 'Id of the collection.')
+ ->addOption('mail_lock_status', null, InputOption::VALUE_NONE, 'Status by mail locked')
+ ->addOption('guest', null, InputOption::VALUE_NONE, 'Only guest user')
+ ->addOption('created', null, InputOption::VALUE_OPTIONAL, 'Created at with operator,aaaa-mm-jj hh:mm:ss.')
+ ->addOption('updated', null, InputOption::VALUE_OPTIONAL, 'Update at with operator,aaaa-mm-jj hh:mm:ss.')
+ ->addOption('application', null, InputOption::VALUE_NONE, 'List application of user work only if --user_id is set')
+ ->addOption('right', null, InputOption::VALUE_NONE, 'Show right information')
+ ->addOption('adress', null, InputOption::VALUE_NONE, 'Show adress information')
+ ->addOption('models', null, InputOption::VALUE_NONE, "Show only defined models, if --user_id is set with --models it's the template owner")
+ ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format')
+ ->setHelp('');
+
+ return $this;
+ }
+
+ protected function doExecute(InputInterface $input, OutputInterface $output)
+ {
+
+ $userId = $input->getOption('user_id');
+ $userEmail = $input->getOption('user_email');
+ $databaseId = $input->getOption('database_id');
+ $collectionId = $input->getOption('collection_id');
+ $lockStatus = $input->getOption('mail_lock_status');
+ $guest = $input->getOption('guest');
+ $application = $input->getOption('application');
+ $withAdress = $input->getOption('adress');
+ $created = $input->getOption('created');
+ $updated = $input->getOption('updated');
+ $withRight = $input->getOption('right');
+ $models = $input->getOption('models');
+ $jsonformat = $input->getOption('jsonformat');
+
+ $query = $this->container['phraseanet.user-query'];
+
+ if($databaseId) $query->on_base_ids([$databaseId]);
+ if($collectionId) $query->on_sbas_ids([$collectionId]);
+ if($created) $this->addFilterDate($created,'created',$query);
+ if($updated) $this->addFilterDate($updated,'updated',$query);
+ if($userId && !$models) $query->addSqlFilter('Users.id = ?' ,[$userId]);
+ if($userEmail && !$models) $query->addSqlFilter('Users.email = ?' ,[$userEmail]);
+ if($lockStatus && !$models) $query->addSqlFilter('Users.mail_locked = 1');
+ if($guest && !$models) $query->include_invite(true)->addSqlFilter('Users.guest = 1');
+
+ if ($application and !$userId) {
+ $output->writeln('You must provide --user_id when using --application option');
+ return 0;
+ }
+
+ /** @var UserRepository $userRepository */
+ $userRepository = $this->container['repo.users'];
+
+ if ($models && $userId) {
+ $users = $userRepository->findBy(['templateOwner' => $userId]);
+ } elseif ($models) {
+ $users = $userRepository->findTemplate();
+ } else {
+ $users = $query->execute()->get_results();
+ }
+
+ $userList = [];
+ $showApplication = false;
+ foreach ($users as $key => $user) {
+ if ($userId and $application) {
+ $showApplication = true;
+ }
+ $userList[] = $this->listUser($user, $withAdress, $withRight);
+
+ $userListRaw[] = array_combine($this->headerTable($withAdress, $withRight), $this->listUser($user, $withAdress, $withRight));
+ }
+
+ if ($jsonformat) {
+ echo json_encode($userListRaw);
+ } else {
+ $table = $this->getHelperSet()->get('table');
+ $table
+ ->setHeaders($this->headerTable($withAdress, $withRight))
+ ->setRows($userList)
+ ->render($output);
+ ;
+
+
+ if ($showApplication) {
+ $applicationTable = $this->getHelperSet()->get('table');
+ $applicationTable->setHeaders(array(
+ array(new TableCell('Applications', array('colspan' => 5))),
+ ['name','callback','client_secret','client_id','token'],
+ ))->setRows($this->getApplicationOfUser($users[0]))->render($output);
+ }
+
+ }
+
+
+ return 0;
+ }
+
+ /**
+ * @param $withAdress
+ * @param $withRight
+ * @return array
+ */
+ private function headerTable($withAdress,$withRight)
+ {
+ $defaultHeader = ['id', 'login', 'email','last_model','first_name','last_name','gender','created','updated','status','locale'];
+ $adressHeader = [ 'address', 'zip_code', 'city', 'country', 'phone', 'fax', 'job','position', 'company', 'geoname_id'];
+ $rightHeader = [ 'admin', 'guest', 'mail_notification', 'ldap_created', 'mail_locked'];
+
+ return $this->createInformation($withAdress,$withRight,$defaultHeader,['adress' => $adressHeader,'right' =>$rightHeader]);
+ }
+
+ /**
+ * @param User $user
+ * @param $withAdress
+ * @param $withRight
+ * @return array
+ */
+ private function listUser(User $user,$withAdress,$withRight)
+ {
+ switch ($user->getGender()) {
+ case User::GENDER_MRS:
+ $gender = 'Mrs';
+ break;
+ case User::GENDER_MISS:
+ $gender = 'Miss';
+ break;
+ case User::GENDER_MR:
+ default:
+ $gender = 'Mr';
+ }
+
+ $defaultInfo = [
+ $user->getId(),
+ $user->getLogin() ?: '-',
+ $user->getEmail() ?: '-',
+ $user->getLastAppliedTemplate() ? $user->getLastAppliedTemplate()->getLogin() : '-',
+ $user->getFirstName() ?: '-',
+ $user->getLastName() ?: '-',
+ $gender,
+ NullableDateTime::format($user->getCreated(),'Y-m-d H:i:s'),
+ NullableDateTime::format($user->getUpdated(),'Y-m-d H:i:s'),
+ 'status',
+ $user->getLocale() ?: '-',
+ ];
+
+ return $this->createInformation($withAdress,$withRight,$defaultInfo,['adress' => $this->userAdress($user),'right' => $this->userRight($user)]);
+ }
+
+ /**
+ * @param User $user
+ * @return array
+ */
+ private function userAdress(User $user)
+ {
+ return [
+ $user->getAddress() ?: '-',
+ $user->getZipCode() ?: '-',
+ $user->getCity() ?: '-',
+ $user->getCountry() ?: '-',
+ $user->getPhone() ?: '-',
+ $user->getFax() ?: '-',
+ $user->getJob() ?: '-',
+ $user->getActivity() ?: '-',
+ $user->getCompany() ?: '-',
+ $user->getGeonameId() ?: '-',
+ ];
+ }
+
+ /**
+ * @param User $user
+ * @return array
+ */
+ private function userRight(User $user)
+ {
+ return [
+ $user->isAdmin() ?: false,
+ $user->isGuest() ?: false,
+ $user->hasMailNotificationsActivated() ?: false,
+ $user->hasLdapCreated() ?: false,
+ $user->isMailLocked() ?: false,
+ ];
+ }
+
+ /**
+ * @param User $user
+ * @return array
+ */
+ private function getApplicationOfUser(User $user)
+ {
+ $apiRepository = $this->container['repo.api-applications'];
+ $applications = $apiRepository->findByUser($user);
+
+ if (empty($applications)) {
+ return [];
+ }
+
+ $accountRepository = $this->container['repo.api-accounts'];
+ $apiOauthRepository = $this->container['repo.api-oauth-tokens'];
+ $usersApplication = [];
+ foreach ($applications as $application) {
+ $account = $accountRepository->findByUserAndApplication($user, $application);
+ $token = $account ? $apiOauthRepository->findDeveloperToken($account) : null;
+ $usersApplication[] = [
+ $application->getName(),
+ $application->getRedirectUri(),
+ $application->getClientSecret(),
+ $application->getClientId(),
+ ($token) ? $token->getOauthToken() : '-'
+ ];
+ }
+
+ return $usersApplication;
+ }
+
+ /**
+ * @param $withAdress
+ * @param $withRight
+ * @param $default
+ * @param $infoToMerge
+ * @return array
+ */
+ private function createInformation($withAdress,$withRight,$default,$infoToMerge)
+ {
+ if ($withAdress && $withRight) {
+ $information = array_merge($default, $infoToMerge['adress'],$infoToMerge['right']);
+ } elseif ($withAdress && !$withRight) {
+ $information = array_merge($default, $infoToMerge['adress']);
+ } elseif(!$withAdress && $withRight) {
+ $information = array_merge($default, $infoToMerge['right']);
+ } else {
+ $information = $default;
+ }
+
+ return $information;
+ }
+
+ /**
+ * @param $date
+ * @param $type
+ * @param $query
+ */
+ private function addFilterDate($date,$type,$query){
+
+ list($operator,$dateAt) = explode(',', $date);
+
+ if (!in_array($operator,['=','>=','<=','>','<'])) {
+ throw new \InvalidArgumentException(" '=' or '<=' or '>=' or '>' or '<'");
+ }
+
+ $query->addSqlFilter($type.$operator.' ?' ,[$dateAt]);
+ }
+
+}
diff --git a/lib/Alchemy/Phrasea/Command/User/UserSetPasswordCommand.php b/lib/Alchemy/Phrasea/Command/User/UserSetPasswordCommand.php
new file mode 100644
index 0000000000..963910db02
--- /dev/null
+++ b/lib/Alchemy/Phrasea/Command/User/UserSetPasswordCommand.php
@@ -0,0 +1,79 @@
+setDescription('Set user password in Phraseanet')
+ ->addOption('user_id', null, InputOption::VALUE_REQUIRED, 'The id of user.')
+ ->addOption('generate', null, InputOption::VALUE_NONE, 'Generate the password')
+ ->addOption('password', null, InputOption::VALUE_OPTIONAL, 'The password')
+ ->setHelp('');
+
+ return $this;
+ }
+
+ protected function doExecute(InputInterface $input, OutputInterface $output)
+ {
+
+ $dialog = $this->getHelperSet()->get('dialog');
+ $userRepository = $this->container['repo.users'];
+ $userManipulator = $this->container['manipulator.user'];
+ $user = $userRepository->find($input->getOption('user_id'));
+ $password = $input->getOption('password');
+ $generate = $input->getOption('generate');
+
+ if ($user === null) {
+ $output->writeln('Not found User.');
+ return 0;
+ }
+
+ if ($generate) {
+ $password = $this->container['random.medium']->generateString(64);
+ } else {
+ if (!$password) {
+ $output->writeln('--password option not specified');
+ return 0;
+ }
+ }
+
+ do {
+ $continue = mb_strtolower($dialog->ask($output, 'Do you want really set password to this user? (y/N)', 'N'));
+ } while (!in_array($continue, ['y', 'n']));
+
+ if ($continue !== 'y') {
+ $output->writeln('Aborting !');
+
+ return;
+ }
+
+ $userManipulator->setPassword($user,$password);
+ $output->writeln('New password: ' . $password . '');
+
+ return 0;
+ }
+
+}
diff --git a/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php b/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php
index 8cf04e7839..04762b3aef 100644
--- a/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php
+++ b/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php
@@ -13,9 +13,11 @@ namespace Alchemy\Phrasea\Controller\Admin;
use Alchemy\Phrasea\Controller\Controller;
use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchSettingsFormType;
use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions;
+use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
+use databox_descriptionStructure;
class SearchEngineController extends Controller
{
@@ -31,7 +33,19 @@ class SearchEngineController extends Controller
$form->handleRequest($request);
if ($form->isValid()) {
- $this->saveElasticSearchOptions($form->getData());
+ /** @var ElasticsearchOptions $data */
+ $data = $form->getData();
+ // $q = $request->request->get('elasticsearch_settings');
+ $facetNames = []; // rebuild the data "_customValues/facets" list following the form order
+ foreach($request->request->get('elasticsearch_settings') as $name=>$value) {
+ $matches = null;
+ if(preg_match('/^facets:(.+):limit$/', $name, $matches) === 1) {
+ $facetNames[] = $matches[1];
+ }
+ }
+ $data->reorderAggregableFields($facetNames);
+
+ $this->saveElasticSearchOptions($data);
return $this->app->redirectPath('admin_searchengine_form');
}
@@ -76,6 +90,16 @@ class SearchEngineController extends Controller
*/
private function saveElasticSearchOptions(ElasticsearchOptions $configuration)
{
+ // save to databoxes fields for backward compatibility (useless ?)
+ foreach($configuration->getAggregableFields() as $fname=>$aggregableField) {
+ foreach ($this->app->getDataboxes() as $databox) {
+ if(!is_null($f = $databox->get_meta_structure()->get_element_by_name($fname, databox_descriptionStructure::STRICT_COMPARE))) {
+ $f->set_aggregable($aggregableField['limit'])->save();
+ }
+ }
+ }
+
+ // save to conf
$this->getConf()->set(['main', 'search-engine', 'options'], $configuration->toArray());
}
@@ -85,7 +109,10 @@ class SearchEngineController extends Controller
*/
private function getConfigurationForm(ElasticsearchOptions $options)
{
- return $this->app->form(new ElasticsearchSettingsFormType(), $options, [
+ /** @var GlobalStructure $g */
+ $g = $this->app['search_engine.structure'];
+
+ return $this->app->form(new ElasticsearchSettingsFormType($g, $options), $options, [
'action' => $this->app->url('admin_searchengine_form'),
]);
}
diff --git a/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php b/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php
index 2bc333f45c..39a0a8f48d 100644
--- a/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php
+++ b/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php
@@ -19,8 +19,10 @@ use Alchemy\Phrasea\Core\PhraseaEvents;
use Alchemy\Phrasea\Feed\Aggregate;
use Alchemy\Phrasea\Feed\Link\AggregateLinkGenerator;
use Alchemy\Phrasea\Feed\Link\FeedLinkGenerator;
+use Alchemy\Phrasea\Model\Entities\Feed;
use Alchemy\Phrasea\Model\Entities\FeedEntry;
use Alchemy\Phrasea\Model\Entities\FeedItem;
+use Alchemy\Phrasea\Model\Entities\FeedPublisher;
use Alchemy\Phrasea\Model\Repositories\FeedEntryRepository;
use Alchemy\Phrasea\Model\Repositories\FeedItemRepository;
use Alchemy\Phrasea\Model\Repositories\FeedPublisherRepository;
@@ -46,6 +48,7 @@ class FeedController extends Controller
}
public function createFeedEntryAction(Request $request) {
+ /** @var Feed $feed */
$feed = $this->getFeedRepository()->find($request->request->get('feed_id'));
if (null === $feed) {
@@ -53,6 +56,8 @@ class FeedController extends Controller
}
$user = $this->getAuthenticatedUser();
+
+ /** @var FeedPublisher $publisher */
$publisher = $this->getFeedPublisherRepository()->findOneBy([
'feed' => $feed,
'user' => $user,
diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php
index d327e860c5..8afd22d2b3 100644
--- a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php
+++ b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php
@@ -433,24 +433,15 @@ class QueryController extends Controller
// populates facets (aggregates)
$facets = [];
- // $facetClauses = [];
foreach ($result->getFacets() as $facet) {
$facetName = $facet['name'];
if(array_key_exists($facetName, $fieldsInfosByName)) {
-
$f = $fieldsInfosByName[$facetName];
-
$facet['label'] = $f['trans_label'];
$facet['labels'] = $f['labels'];
$facet['type'] = strtoupper($f['type']) . "-AGGREGATE";
$facets[] = $facet;
-
- // $facetClauses[] = [
- // 'type' => strtoupper($f['type']) . "-AGGREGATE",
- // 'field' => $f['field'],
- // 'facet' => $facet
- // ];
}
}
diff --git a/lib/Alchemy/Phrasea/Controller/Root/AccountController.php b/lib/Alchemy/Phrasea/Controller/Root/AccountController.php
index b4053a6ce1..6bf2d11f17 100644
--- a/lib/Alchemy/Phrasea/Controller/Root/AccountController.php
+++ b/lib/Alchemy/Phrasea/Controller/Root/AccountController.php
@@ -458,9 +458,9 @@ class AccountController extends Controller
->setZipCode($request->request->get("form_zip"))
->setPhone($request->request->get("form_phone"))
->setFax($request->request->get("form_fax"))
- ->setJob($request->request->get("form_activity"))
+ ->setJob($request->request->get("form_function"))
->setCompany($request->request->get("form_company"))
- ->setPosition($request->request->get("form_function"))
+ ->setPosition($request->request->get("form_activity"))
->setNotifications((Boolean) $request->request->get("mail_notifications"));
$service->updateAccount($command);
diff --git a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php
index 104230411d..24fcff9b2c 100644
--- a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php
+++ b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php
@@ -20,6 +20,7 @@ class DisplaySettingService
const ORDER_BY_ADMIN = "ORDER_BY_ADMIN";
const ORDER_BY_BCT = "ORDER_BY_BCT";
const ORDER_BY_HITS = "ORDER_BY_HITS";
+ const ORDER_BY_HITS_ASC = "ORDER_BY_HITS_ASC";
/**
* The default user settings.
@@ -31,7 +32,7 @@ class DisplaySettingService
'images_per_page' => '20',
'images_size' => '120',
'editing_images_size' => '134',
- 'editing_top_box' => '180px',
+ 'editing_top_box' => '120px',
'editing_right_box' => '400px',
'editing_left_box' => '710px',
'basket_sort_field' => 'name',
diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php
index 03a72a95b4..8bc7cb2b52 100644
--- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php
+++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php
@@ -13,7 +13,9 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber;
use Alchemy\Phrasea\Core\Event\FeedEntryEvent;
use Alchemy\Phrasea\Core\PhraseaEvents;
+use Alchemy\Phrasea\Model\Entities\User;
use Alchemy\Phrasea\Model\Entities\WebhookEvent;
+use Alchemy\Phrasea\Model\Manipulator\TokenManipulator;
use Alchemy\Phrasea\Notification\Receiver;
use Alchemy\Phrasea\Notification\Mail\MailInfoNewPublication;
@@ -53,36 +55,43 @@ class FeedEntrySubscriber extends AbstractNotificationSubscriber
do {
$results = $Query->limit($start, $perLoop)->execute()->get_results();
- foreach ($results as $user_to_notif) {
- $mailed = false;
+ $users_emailed = []; // for all users
+ $users_to_email = []; // list only users who must be emailed (=create tokens)
- if ($params['notify_email'] && $this->shouldSendNotificationFor($user_to_notif, 'eventsmanager_notify_feed')) {
- $readyToSend = false;
- try {
- $token = $this->app['manipulator.token']->createFeedEntryToken($user_to_notif, $entry);
- $url = $this->app->url('lightbox', ['LOG' => $token->getValue()]);
-
- $receiver = Receiver::fromUser($user_to_notif);
- $readyToSend = true;
- } catch (\Exception $e) {
-
- }
-
- if ($readyToSend) {
- $mail = MailInfoNewPublication::create($this->app, $receiver);
- $mail->setButtonUrl($url);
- $mail->setAuthor($entry->getAuthorName());
- $mail->setTitle($entry->getTitle());
-
- $this->deliver($mail);
- $mailed = true;
- }
+ /** @var User $user */
+ foreach ($results as $user) {
+ $users_emailed[$user->getId()] = false;
+ if ($params['notify_email'] && $this->shouldSendNotificationFor($user, 'eventsmanager_notify_feed')) {
+ $users_to_email[$user->getId()] = $user;
}
-
- $this->app['events-manager']->notify($user_to_notif->getId(), 'eventsmanager_notify_feed', $datas, $mailed);
}
+
+ // get many tokens in one shot
+ $tokens = $this->getTokenManipulator()->createFeedEntryTokens($users_to_email, $entry);
+ foreach($tokens as $token) {
+ try {
+ $url = $this->app->url('lightbox', ['LOG' => $token->getValue()]);
+ $receiver = Receiver::fromUser($token->getUser());
+
+ $mail = MailInfoNewPublication::create($this->app, $receiver);
+ $mail->setButtonUrl($url);
+ $mail->setAuthor($entry->getAuthorName());
+ $mail->setTitle($entry->getTitle());
+
+ $this->deliver($mail);
+ $users_emailed[$token->getUser()->getId()] = true;
+ }
+ catch (\Exception $e) {
+ // no-op
+ }
+ }
+ foreach($users_emailed as $id => $emailed) {
+ $this->app['events-manager']->notify($id, 'eventsmanager_notify_feed', $datas, $emailed);
+ }
+
$start += $perLoop;
- } while (count($results) > 0);
+ }
+ while (count($results) > 0);
}
public static function getSubscribedEvents()
@@ -91,4 +100,12 @@ class FeedEntrySubscriber extends AbstractNotificationSubscriber
PhraseaEvents::FEED_ENTRY_CREATE => 'onCreate',
];
}
+
+ /**
+ * @return TokenManipulator
+ */
+ private function getTokenManipulator()
+ {
+ return $this->app['manipulator.token'];
+ }
}
diff --git a/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php b/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php
index 5092c6c77f..cc55894313 100644
--- a/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php
+++ b/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php
@@ -9,6 +9,8 @@ use MediaVorus\MediaVorusServiceProvider;
use MP4Box\MP4BoxServiceProvider;
use Neutron\Silex\Provider\ImagineServiceProvider;
use PHPExiftool\PHPExiftoolServiceProvider;
+use PHPExiftool\Reader;
+use PHPExiftool\Writer;
use Silex\Application;
use Silex\ServiceProviderInterface;
@@ -48,6 +50,21 @@ class MediaUtilitiesMetaServiceProvider implements ServiceProviderInterface
public function boot(Application $app)
{
- // no-op
+ if(isset($app['exiftool.reader']) && isset($app['conf'])) {
+ try {
+ $timeout = $app['conf']->get(['main', 'binaries', 'exiftool_timeout'], 60);
+
+ /** @var Reader $exiftoolReader */
+ $exiftoolReader = $app['exiftool.reader'];
+ $exiftoolReader->setTimeout($timeout);
+
+ /** @var Writer $exiftoolWriter */
+ $exiftoolWriter = $app['exiftool.writer'];
+ $exiftoolWriter->setTimeout($timeout);
+ }
+ catch(\Exception $e) {
+ // no-nop
+ }
+ }
}
}
diff --git a/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php
index 58f77475a1..e342bf8380 100644
--- a/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php
+++ b/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php
@@ -97,7 +97,7 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
});
$app['elasticsearch.facets_response.factory'] = $app->protect(function (array $response) use ($app) {
- return new FacetsResponse(new Escaper(), $response, $app['search_engine.structure']);
+ return new FacetsResponse($app['elasticsearch.options'], new Escaper(), $response, $app['search_engine.structure']);
});
return $app;
@@ -228,7 +228,8 @@ class SearchEngineServiceProvider implements ServiceProviderInterface
});
$app['elasticsearch.options'] = $app->share(function ($app) {
- $options = ElasticsearchOptions::fromArray($app['conf']->get(['main', 'search-engine', 'options'], []));
+ $conf = $app['conf']->get(['main', 'search-engine', 'options'], []);
+ $options = ElasticsearchOptions::fromArray($conf);
if (empty($options->getIndexName())) {
$options->setIndexName(strtolower(sprintf('phraseanet_%s', str_replace(
diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php
index c209691c0b..c029f2be01 100644
--- a/lib/Alchemy/Phrasea/Core/Version.php
+++ b/lib/Alchemy/Phrasea/Core/Version.php
@@ -16,7 +16,8 @@ class Version
/**
* @var string
*/
- private $number = '4.1.0-alpha.19a';
+
+ private $number = '4.1.0-alpha.23a';
/**
* @var string
diff --git a/lib/Alchemy/Phrasea/Helper/User/Edit.php b/lib/Alchemy/Phrasea/Helper/User/Edit.php
index 5c760a55de..2c7513fb3f 100644
--- a/lib/Alchemy/Phrasea/Helper/User/Edit.php
+++ b/lib/Alchemy/Phrasea/Helper/User/Edit.php
@@ -657,8 +657,8 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper
->setEmail($parm['email'])
->setAddress($parm['address'])
->setZipCode($parm['zip'])
- ->setActivity($parm['function'])
- ->setJob($parm['activite'])
+ ->setActivity($parm['activite'])
+ ->setJob($parm['function'])
->setCompany($parm['company'])
->setPhone($parm['telephone'])
->setFax($parm['fax']);
diff --git a/lib/Alchemy/Phrasea/Model/Entities/Token.php b/lib/Alchemy/Phrasea/Model/Entities/Token.php
index 576cf05d36..81c632f97d 100644
--- a/lib/Alchemy/Phrasea/Model/Entities/Token.php
+++ b/lib/Alchemy/Phrasea/Model/Entities/Token.php
@@ -15,7 +15,14 @@ use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
- * @ORM\Table(name="Tokens")
+ * @ORM\Table(name="Tokens",
+ * indexes={
+ * @ORM\index(name="type", columns={"type"}),
+ * @ORM\index(name="created", columns={"created"}),
+ * @ORM\index(name="updated", columns={"updated"}),
+ * @ORM\index(name="expiration", columns={"expiration"})
+ * }
+ * )
* @ORM\Entity(repositoryClass="Alchemy\Phrasea\Model\Repositories\TokenRepository")
*/
class Token
diff --git a/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php b/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php
index 1befac1843..141d415e22 100644
--- a/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php
+++ b/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php
@@ -30,7 +30,7 @@ class WebhookEventPayload
private $id;
/**
- * @ORM\OneToOne(targetEntity="WebhookEventDelivery")
+ * @ORM\OneToOne(targetEntity="WebhookEventDelivery", inversedBy="payload")
* @ORM\JoinColumn(name="delivery_id", referencedColumnName="id")
*/
private $delivery;
diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php
index 2a43363693..56c4e9fc36 100644
--- a/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php
+++ b/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php
@@ -22,7 +22,6 @@ use RandomLib\Generator;
class TokenManipulator implements ManipulatorInterface
{
const LETTERS_AND_NUMBERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
const TYPE_FEED_ENTRY = 'FEED_ENTRY';
const TYPE_PASSWORD = 'password';
const TYPE_ACCOUNT_UNLOCK = 'account-unlock';
@@ -126,6 +125,38 @@ class TokenManipulator implements ManipulatorInterface
return $this->create($user, self::TYPE_FEED_ENTRY, null, $entry->getId());
}
+ /**
+ * Create feedEntryTokens for many users in one shot
+ *
+ * @param User[] $users
+ * @param FeedEntry $entry
+ * @return Token[]
+ * @throws \Doctrine\DBAL\DBALException
+ */
+ public function createFeedEntryTokens($users, FeedEntry $entry)
+ {
+ // $this->removeExpiredTokens();
+
+ $tokens = [];
+ foreach ($users as $user) {
+ $value = $this->random->generateString(32, self::LETTERS_AND_NUMBERS) . $user->getId();
+
+ $token = new Token();
+ $token->setUser($user)
+ ->setType(self::TYPE_FEED_ENTRY)
+ ->setValue($value)
+ ->setExpiration(null)
+ ->setData($entry->getId());
+ $tokens[] = $token;
+
+ $this->om->persist($token);
+ }
+ $this->om->flush();
+ $this->om->clear();
+
+ return $tokens;
+ }
+
/**
* @param User $user
* @param $data
diff --git a/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php
index ad45425f7c..8e40f9ebd8 100644
--- a/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php
+++ b/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php
@@ -72,4 +72,9 @@ class TokenRepository extends EntityRepository
return $query->getResult();
}
+
+ public function getEntityManager()
+ {
+ return parent::getEntityManager();
+ }
}
diff --git a/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php
index d122922091..e428f8554b 100644
--- a/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php
+++ b/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php
@@ -122,4 +122,15 @@ class UserRepository extends EntityRepository
{
return $this->findBy(['templateOwner' => $user->getId()]);
}
+
+ /**
+ * Finds all templates
+ */
+ public function findTemplate()
+ {
+ $qb = $this->createQueryBuilder('u');
+ $qb->where('u.templateOwner is NOT NULL');
+
+ return $qb->getQuery()->getResult();
+ }
}
diff --git a/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php b/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php
index 3c72b25e20..8dd5dd4492 100644
--- a/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php
+++ b/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php
@@ -396,25 +396,25 @@ class PDFRecords extends PDF
$this->pdf->SetY($this->pdf->GetY()+10);
$this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12);
- $this->pdf->Write(5, $this->app->trans("print_feedback:: Document generated on : " . " "));
+ $this->pdf->Write(5, $this->app->trans("print_feedback:: Document generated on : ") . " ");
$this->pdf->SetFont(PhraseaPDF::FONT, '', 12);
$this->pdf->Write(5, $this->formatDate(new \DateTime('now')));
$this->pdf->Write(12, "\n");
$this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12);
- $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated by : " . " "));
+ $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated by : ") . " ");
$this->pdf->SetFont(PhraseaPDF::FONT, '', 12);
$this->pdf->Write(5, $this->getDisplayName($validation->getInitiator()));
$this->pdf->Write(6, "\n");
$this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12);
- $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated on : " . " "));
+ $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated on : ") . " ");
$this->pdf->SetFont(PhraseaPDF::FONT, '', 12);
$this->pdf->Write(5, $this->formatDate($validation->getCreated()));
$this->pdf->Write(6, "\n");
$this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12);
- $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expiring on : " . " "));
+ $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expiring on : ") . " ");
$this->pdf->SetFont(PhraseaPDF::FONT, '', 12);
$this->pdf->Write(5, $this->formatDate($validation->getExpires()));
$this->pdf->Write(12, "\n");
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php
index 63d9ec108e..2424330031 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php
@@ -668,17 +668,20 @@ class ElasticSearchEngine implements SearchEngineInterface
}
// fields aggregates
$structure = $this->context_factory->getLimitedStructure($options);
- foreach ($structure->getFacetFields() as $name => $field) {
- // 2015-05-26 (mdarse) Removed databox filtering.
- // It was already done by the ACL filter in the query scope, so no
- // document that shouldn't be displayed can go this far.
- $agg = [
- 'terms' => [
- 'field' => $field->getIndexField(true),
- 'size' => $field->getFacetValuesLimit()
- ]
- ];
- $aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg);
+ foreach($structure->getAllFields() as $name => $field) {
+ $size = $this->options->getAggregableFieldLimit($name);
+ if ($size !== databox_field::FACET_DISABLED) {
+ if ($size === databox_field::FACET_NO_LIMIT) {
+ $size = ESField::FACET_NO_LIMIT;
+ }
+ $agg = [
+ 'terms' => [
+ 'field' => $field->getIndexField(true),
+ 'size' => $size
+ ]
+ ];
+ $aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg);
+ }
}
return $aggs;
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php
index 0532f85c30..07e54449eb 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php
@@ -9,6 +9,10 @@
*/
namespace Alchemy\Phrasea\SearchEngine\Elastic;
+use databox_field;
+use igorw;
+
+
class ElasticsearchOptions
{
const POPULATE_ORDER_RID = "RECORD_ID";
@@ -35,7 +39,7 @@ class ElasticsearchOptions
private $populateDirection;
/** @var int[] */
- private $_customValues;
+ private $_customValues = [];
private $activeTab;
/**
@@ -57,14 +61,10 @@ class ElasticsearchOptions
'populate_order' => self::POPULATE_ORDER_RID,
'populate_direction' => self::POPULATE_DIRECTION_DESC,
'activeTab' => null,
+ 'facets' => []
];
-
- foreach(self::getAggregableTechnicalFields() as $k => $f) {
- $defaultOptions[$k.'_limit'] = 0;
- }
$options = array_replace($defaultOptions, $options);
-
$self = new self();
$self->setHost($options['host']);
$self->setPort($options['port']);
@@ -76,11 +76,10 @@ class ElasticsearchOptions
$self->setPopulateOrder($options['populate_order']);
$self->setPopulateDirection($options['populate_direction']);
$self->setActiveTab($options['activeTab']);
- foreach(self::getAggregableTechnicalFields() as $k => $f) {
- $self->setAggregableFieldLimit($k, $options[$k.'_limit']);
+ foreach($options['facets'] as $fieldname=>$attributes) {
+ $self->setAggregableField($fieldname, $attributes);
}
-
return $self;
}
@@ -99,10 +98,11 @@ class ElasticsearchOptions
'highlight' => $this->highlight,
'populate_order' => $this->populateOrder,
'populate_direction' => $this->populateDirection,
- 'activeTab' => $this->activeTab
+ 'activeTab' => $this->activeTab,
+ 'facets' => []
];
- foreach(self::getAggregableTechnicalFields() as $k => $f) {
- $ret[$k.'_limit'] = $this->getAggregableFieldLimit($k);
+ foreach($this->getAggregableFields() as $fieldname=>$attributes) {
+ $ret['facets'][$fieldname] = $attributes;
}
return $ret;
@@ -222,12 +222,51 @@ class ElasticsearchOptions
public function setAggregableFieldLimit($key, $value)
{
- $this->_customValues[$key.'_limit'] = $value;
+ if(is_null($this->getAggregableField($key))) {
+ $this->_customValues['facets'][$key] = [];
+ }
+ $this->_customValues['facets'][$key]['limit'] = $value;
+ }
+
+ public function setAggregableField($key, $attributes)
+ {
+ $this->getAggregableFields(); // ensure facets exists
+ $this->_customValues['facets'][$key] = $attributes;
}
public function getAggregableFieldLimit($key)
{
- return $this->_customValues[$key.'_limit'];
+ $facet = $this->getAggregableField($key);
+ return (is_array($facet) && array_key_exists('limit', $facet)) ? $facet['limit'] : databox_field::FACET_DISABLED;
+ }
+
+ public function getAggregableField($key)
+ {
+ $facets = $this->getAggregableFields();
+ return array_key_exists($key, $facets) ? $facets[$key] : null;
+ }
+
+ /**
+ * @return array
+ */
+ public function getAggregableFields()
+ {
+ if(!array_key_exists('facets', $this->_customValues) || !is_array($this->_customValues['facets'])) {
+ $this->_customValues['facets'] = [];
+ }
+ return $this->_customValues['facets'];
+ }
+
+ // set to change the facets order during admin/form save
+ public function reorderAggregableFields($facetNames)
+ {
+ $newFacets = [];
+ foreach ($facetNames as $name) {
+ if(($facet = $this->getAggregableField($name)) !== null) {
+ $newFacets[$name] = $facet;
+ }
+ }
+ $this->_customValues['facets'] = $newFacets;
}
public function getActiveTab()
@@ -241,56 +280,56 @@ class ElasticsearchOptions
public function __get($key)
{
- if(!array_key_exists($key, $this->_customValues)) {
- $this->_customValues[$key] = 0;
- }
- return $this->_customValues[$key];
+ $keys = explode(':', $key);
+
+ return igorw\get_in($this->_customValues, $keys);
}
public function __set($key, $value)
{
- $this->_customValues[$key] = $value;
+ $keys = explode(':', $key);
+ $this->_customValues = igorw\assoc_in($this->_customValues, $keys, $value);
}
public static function getAggregableTechnicalFields()
{
return [
- 'base_aggregate' => [
+ '_base' => [
'type' => 'string',
'label' => 'prod::facet:base_label',
'field' => "database",
'esfield' => 'databox_name',
'query' => 'database:%s',
],
- 'collection_aggregate' => [
+ '_collection' => [
'type' => 'string',
'label' => 'prod::facet:collection_label',
'field' => "collection",
'esfield' => 'collection_name',
'query' => 'collection:%s',
],
- 'doctype_aggregate' => [
+ '_doctype' => [
'type' => 'string',
'label' => 'prod::facet:doctype_label',
'field' => "type",
'esfield' => 'type',
'query' => 'type:%s',
],
- 'camera_model_aggregate' => [
+ '_camera_model' => [
'type' => 'string',
'label' => 'Camera Model',
'field' => "meta.CameraModel",
'esfield' => 'metadata_tags.CameraModel',
'query' => 'meta.CameraModel:%s',
],
- 'iso_aggregate' => [
+ '_iso' => [
'type' => 'number',
'label' => 'ISO',
'field' => "meta.ISO",
'esfield' => 'metadata_tags.ISO',
'query' => 'meta.ISO=%s',
],
- 'aperture_aggregate' => [
+ '_aperture' => [
'type' => 'number',
'label' => 'Aperture',
'field' => "meta.Aperture",
@@ -300,7 +339,7 @@ class ElasticsearchOptions
return round($value, 1);
},
],
- 'shutterspeed_aggregate' => [
+ '_shutterspeed' => [
'type' => 'number',
'label' => 'Shutter speed',
'field' => "meta.ShutterSpeed",
@@ -313,7 +352,7 @@ class ElasticsearchOptions
return $value . ' s.';
},
],
- 'flashfired_aggregate' => [
+ '_flashfired' => [
'type' => 'boolean',
'label' => 'FlashFired',
'field' => "meta.FlashFired",
@@ -327,49 +366,49 @@ class ElasticsearchOptions
return array_key_exists($value, $map) ? $map[$value] : $value;
},
],
- 'framerate_aggregate' => [
+ '_framerate' => [
'type' => 'number',
'label' => 'FrameRate',
'field' => "meta.FrameRate",
'esfield' => 'metadata_tags.FrameRate',
'query' => 'meta.FrameRate=%s',
],
- 'audiosamplerate_aggregate' => [
+ '_audiosamplerate' => [
'type' => 'number',
'label' => 'Audio Samplerate',
'field' => "meta.AudioSamplerate",
'esfield' => 'metadata_tags.AudioSamplerate',
'query' => 'meta.AudioSamplerate=%s',
],
- 'videocodec_aggregate' => [
+ '_videocodec' => [
'type' => 'string',
'label' => 'Video codec',
'field' => "meta.VideoCodec",
'esfield' => 'metadata_tags.VideoCodec',
'query' => 'meta.VideoCodec:%s',
],
- 'audiocodec_aggregate' => [
+ '_audiocodec' => [
'type' => 'string',
'label' => 'Audio codec',
'field' => "meta.AudioCodec",
'esfield' => 'metadata_tags.AudioCodec',
'query' => 'meta.AudioCodec:%s',
],
- 'orientation_aggregate' => [
+ '_orientation' => [
'type' => 'string',
'label' => 'Orientation',
'field' => "meta.Orientation",
'esfield' => 'metadata_tags.Orientation',
'query' => 'meta.Orientation=%s',
],
- 'colorspace_aggregate' => [
+ '_colorspace' => [
'type' => 'string',
'label' => 'Colorspace',
'field' => "meta.ColorSpace",
'esfield' => 'metadata_tags.ColorSpace',
'query' => 'meta.ColorSpace:%s',
],
- 'mimetype_aggregate' => [
+ '_mimetype' => [
'type' => 'string',
'label' => 'MimeType',
'field' => "meta.MimeType",
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php
index e1aaa3e378..1f2fa3d1e2 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php
@@ -9,6 +9,7 @@
*/
namespace Alchemy\Phrasea\SearchEngine\Elastic;
+use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
@@ -17,6 +18,18 @@ use Symfony\Component\Validator\Constraints\Range;
class ElasticsearchSettingsFormType extends AbstractType
{
+ /** @var GlobalStructure */
+ private $globalStructure;
+
+ /** @var ElasticsearchOptions */
+ private $esSettings;
+
+ public function __construct(GlobalStructure $g, ElasticsearchOptions $settings)
+ {
+ $this->globalStructure = $g;
+ $this->esSettings = $settings;
+ }
+
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
@@ -56,59 +69,89 @@ class ElasticsearchSettingsFormType extends AbstractType
->add('minScore', 'integer', [
'label' => 'Thesaurus Min score',
'constraints' => new Range(['min' => 0]),
- ]);
+ ])
+ ->add('highlight', 'checkbox', [
+ 'label' => 'Activate highlight',
+ 'required' => false
+ ])
+ // ->add('save', 'submit', [
+ // 'attr' => ['class' => 'btn btn-primary']
+ // ])
+ ->add('esSettingFromIndex', 'button', [
+ 'label' => 'Get setting form index',
+ 'attr' => [
+ 'onClick' => 'esSettingFromIndex()',
+ 'class' => 'btn'
+ ]
+ ])
+ ->add('dumpField', 'textarea', [
+ 'label' => false,
+ 'required' => false,
+ 'mapped' => false,
+ 'attr' => ['class' => 'dumpfield hide']
+ ])
+ ->add('activeTab', 'hidden');
- foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) {
- if(array_key_exists('choices', $f)) {
- // choices[] : choice_key => choice_value
- $choices = $f['choices'];
- }
- else {
- $choices = [
- "10 values" => 10,
- "20 values" => 20,
- "50 values" => 50,
- "100 values" => 100,
- "all values" => -1
- ];
- }
- // array_unshift($choices, "not aggregated"); // always as first choice
- $choices = array_merge(["not aggregated" => 0], $choices);
- $builder
- ->add($k.'_limit', ChoiceType::class, [
- // 'label' => $f['label'],// . ' ' . 'aggregate limit',
- 'choices_as_values' => true,
- 'choices' => $choices,
- 'attr' => [
- 'class' => 'aggregate'
- ]
- ]);
+ // keep aggregates in configuration order with this intermediate array
+ $aggs = [];
+
+ // helper fct to add aggregate to a tmp list
+ $addAgg = function($k, $label, $help, $disabled=false, $choices=null) use (&$aggs) {
+ if(!$choices) {
+ $choices = [
+ "10 values" => 10,
+ "50 values" => 50,
+ "100 values" => 100,
+ "all values" => -1
+ ];
}
+ $choices = array_merge(["not aggregated" => 0], $choices); // add this option always as first choice
+ $aggs[$k] = [ // default value will be replaced by hardcoded tech fields & all databoxes fields
+ 'label' => $label,
+ 'choices_as_values' => true,
+ 'choices' => $choices,
+ 'attr' => [
+ 'class' => 'aggregate'
+ ],
+ 'disabled' => $disabled,
+ 'help_message' => $help // todo : not displayed ?
+ ];
+ };
- $builder
- ->add('highlight', 'checkbox', [
- 'label' => 'Activate highlight',
- 'required' => false
- ])
-// ->add('save', 'submit', [
-// 'attr' => ['class' => 'btn btn-primary']
-// ])
- ->add('esSettingFromIndex', 'button', [
- 'label' => 'Get setting form index',
- 'attr' => [
- 'onClick' => 'esSettingFromIndex()',
- 'class' => 'btn'
- ]
- ])
- ->add('dumpField', 'textarea', [
- 'label' => false,
- 'required' => false,
- 'mapped' => false,
- 'attr' => ['class' => 'dumpfield hide']
- ])
- ->add('activeTab', 'hidden');
+ // all fields fron conf
+ foreach($this->esSettings->getAggregableFields() as $k=>$f) {
+ // default value will be replaced by hardcoded tech fields & all databoxes fields
+ $addAgg($k, "/?\\ " . $k, "This field does not exists in current databoxes.", true);
+ }
+
+ // add or replace hardcoded tech fields
+ foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) {
+ $choices = array_key_exists('choices', $f) ? $f['choices'] : null; // a tech-field can publish it's own choices
+ $help = null;
+ $label = '#' . $k;
+ if(!array_key_exists($k, $aggs)) {
+ $label = "/!\\ " . $label;
+ $help = "New field, please confirm setting.";
+ }
+ $addAgg($k, $label, $help, false, $choices);
+ }
+
+ // add or replace all databoxes fields (nb: new db field - unknown in conf - will be a the end)
+ foreach($this->globalStructure->getAllFields() as $field) {
+ $k = $label = $field->getName();
+ $help = null;
+ if(!array_key_exists($field->getName(), $aggs)) {
+ $label = "/!\\ " . $label;
+ $help = "New field, please confirm setting.";
+ }
+ $addAgg($k, $label, $help); // default choices
+ }
+
+ // populate aggs to form
+ foreach($aggs as $k=>$agg) {
+ $builder->add('facets:' . $k . ':limit', ChoiceType::class, $agg);
+ }
- ;
}
public function getName()
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php
index 2f2d966c51..efcc6d1c76 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php
@@ -15,7 +15,7 @@ class FacetsResponse
private $escaper;
private $facets = array();
- public function __construct(Escaper $escaper, array $response, GlobalStructure $structure)
+ public function __construct(ElasticsearchOptions $options, Escaper $escaper, array $response, GlobalStructure $structure)
{
$this->escaper = $escaper;
@@ -25,7 +25,13 @@ class FacetsResponse
$atf = ElasticsearchOptions::getAggregableTechnicalFields();
- foreach ($response['aggregations'] as $name => $aggregation) {
+ // sort facets respecting the order defined in options
+ foreach($options->getAggregableFields() as $name=>$foptions) {
+ if(!array_key_exists($name, $response['aggregations'])) {
+ continue;
+ }
+ $aggregation = $response['aggregations'][$name];
+
$tf = null;
$valueFormatter = function($v){ return $v; }; // default equality formatter
@@ -78,6 +84,7 @@ class FacetsResponse
];
}
}
+
}
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php
index ea4022dffb..0793c91c7b 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php
@@ -35,11 +35,6 @@ final class GlobalStructure implements Structure
*/
private $private = array();
- /**
- * @var Field[]
- */
- private $facets = array();
-
/**
* @var Flag[]
*/
@@ -145,9 +140,11 @@ final class GlobalStructure implements Structure
$this->private[$name] = $field;
}
+ /*
if ($field->isFacet() && $field->isSearchable()) {
$this->facets[$name] = $field;
}
+ */
if ($field->hasConceptInference()) {
$this->thesaurus_fields[$name] = $field;
@@ -183,14 +180,6 @@ final class GlobalStructure implements Structure
return $this->private;
}
- /**
- * @return Field[]
- */
- public function getFacetFields()
- {
- return $this->facets;
- }
-
/**
* @return Field[]
*/
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php
index 671bf87c93..053ca6b0e0 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php
@@ -47,14 +47,6 @@ final class LimitedStructure implements Structure
return $this->limit($this->structure->getPrivateFields());
}
- /**
- * @return Field[]
- */
- public function getFacetFields()
- {
- return $this->limit($this->structure->getFacetFields());
- }
-
public function getThesaurusEnabledFields()
{
return $this->limit($this->structure->getThesaurusEnabledFields());
diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php
index 3c2be701e1..44d58e9d5f 100644
--- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php
+++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php
@@ -33,11 +33,6 @@ interface Structure
*/
public function getPrivateFields();
- /**
- * @return Field[]
- */
- public function getFacetFields();
-
/**
* @return Field[]
*/
diff --git a/lib/classes/eventsmanager/broker.php b/lib/classes/eventsmanager/broker.php
index 62244756ce..468a0bc621 100644
--- a/lib/classes/eventsmanager/broker.php
+++ b/lib/classes/eventsmanager/broker.php
@@ -39,7 +39,6 @@ class eventsmanager_broker
],
'notify' => [
'eventsmanager_notify_autoregister',
- 'eventsmanager_notify_bridgeuploadfail',
'eventsmanager_notify_downloadmailfail',
'eventsmanager_notify_feed',
'eventsmanager_notify_order',
diff --git a/lib/classes/eventsmanager/notify/order.php b/lib/classes/eventsmanager/notify/order.php
index d5aca30998..bba2c686f0 100644
--- a/lib/classes/eventsmanager/notify/order.php
+++ b/lib/classes/eventsmanager/notify/order.php
@@ -42,7 +42,7 @@ class eventsmanager_notify_order extends eventsmanager_notifyAbstract
$ret = [
'text' => $this->app->trans('%user% a passe une %opening_link% commande %end_link%', [
'%user%' => $sender,
- '%opening_link%' => '',
+ '%opening_link%' => '',
'%end_link%' => '',])
, 'class' => ''
];
diff --git a/lib/classes/patch/410alpha17a.php b/lib/classes/patch/410alpha17a.php
index ff682b1ef9..a719c2b62b 100644
--- a/lib/classes/patch/410alpha17a.php
+++ b/lib/classes/patch/410alpha17a.php
@@ -62,6 +62,16 @@ class patch_410alpha17a implements patchInterface
// $sql = "ALTER TABLE `metadatas_structure` ADD `gui_editable` INT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `readonly`";
// $databox->get_connection()->executeQuery($sql);
+ foreach ($databox->get_meta_structure() as $databox_field) {
+ if ($databox_field->get_tbranch() != '') {
+ $databox_field->set_generate_cterms(true);
+ } else {
+ $databox_field->set_generate_cterms(false);
+ }
+
+ $databox_field->save();
+ }
+
return true;
}
}
diff --git a/lib/classes/patch/410alpha21a.php b/lib/classes/patch/410alpha21a.php
new file mode 100644
index 0000000000..58091e62f2
--- /dev/null
+++ b/lib/classes/patch/410alpha21a.php
@@ -0,0 +1,111 @@
+release;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function concern()
+ {
+ return $this->concern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function require_all_upgrades()
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDoctrineMigrations()
+ {
+ return [];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply(base $databox, Application $app)
+ {
+ // fix the Longitude value
+
+ $sql = 'SELECT id, record_id, name, value FROM technical_datas WHERE trim(name) = "LongitudeRef" ';
+ $stmt = $databox->get_connection()->prepare($sql);
+ $stmt->execute();
+ $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ $stmt->closeCursor();
+
+ foreach ($rs as $row) {
+ if (trim($row['value']) === 'W' ) {
+ $sql = 'UPDATE technical_datas SET value = CONCAT("-", value) WHERE trim(name) = "Longitude" AND record_id =:record_id';
+ $stmt = $databox->get_connection()->prepare($sql);
+ $stmt->execute([':record_id' => $row['record_id']]);
+ }
+
+ $sqlDelete = 'DELETE FROM technical_datas WHERE id =:id';
+
+ $stmt1 = $databox->get_connection()->prepare($sqlDelete);
+ $stmt1->execute([':id' => $row['id']]);
+ $stmt1->closeCursor();
+ }
+
+ $stmt->closeCursor();
+
+ // fix the Latitude value
+
+ $sql = 'SELECT id, record_id, name, value FROM technical_datas WHERE trim(name) = "LatitudeRef" ';
+ $stmt = $databox->get_connection()->prepare($sql);
+ $stmt->execute();
+ $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
+ $stmt->closeCursor();
+
+ foreach ($rs as $row) {
+ if (trim($row['value']) === 'S' ) {
+ $sql = 'UPDATE technical_datas SET value = CONCAT("-", value) WHERE trim(name) = "Latitude" AND record_id =:record_id';
+ $stmt = $databox->get_connection()->prepare($sql);
+ $stmt->execute([':record_id' => $row['record_id']]);
+ }
+
+ $sqlDelete = 'DELETE FROM technical_datas WHERE id =:id';
+
+ $stmt1 = $databox->get_connection()->prepare($sqlDelete);
+ $stmt1->execute([':id' => $row['id']]);
+ $stmt1->closeCursor();
+ }
+
+ $stmt->closeCursor();
+
+ return true;
+ }
+}
diff --git a/lib/classes/patch/410alpha22a.php b/lib/classes/patch/410alpha22a.php
new file mode 100644
index 0000000000..6a80bd058e
--- /dev/null
+++ b/lib/classes/patch/410alpha22a.php
@@ -0,0 +1,75 @@
+release;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function concern()
+ {
+ return $this->concern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function require_all_upgrades()
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDoctrineMigrations()
+ {
+ return [];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply(base $appbox, Application $app)
+ {
+ foreach(['type', 'created', 'updated', 'expiration'] as $t) {
+ $sql = "ALTER TABLE `Tokens` ADD INDEX `".$t."` (`".$t."`);";
+ try {
+ $stmt = $appbox->get_connection()->prepare($sql);
+ $stmt->execute();
+ $stmt->closeCursor();
+ }
+ catch (\Exception $e) {
+ // the inex already exists ?
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/lib/classes/patch/410alpha23a.php b/lib/classes/patch/410alpha23a.php
new file mode 100644
index 0000000000..eae272bc8e
--- /dev/null
+++ b/lib/classes/patch/410alpha23a.php
@@ -0,0 +1,111 @@
+release;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function concern()
+ {
+ return $this->concern;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function require_all_upgrades()
+ {
+ return false;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getDoctrineMigrations()
+ {
+ return [];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function apply(base $appbox, Application $app)
+ {
+ // fix embed-bundle keys
+ if ($app['conf']->has(['embed_bundle', 'video', 'available-speeds'])) {
+ $availableSpeed = $app['conf']->get(['embed_bundle', 'video', 'available-speeds']);
+ $app['conf']->remove(['embed_bundle', 'video', 'available-speeds']);
+ $app['conf']->set(['embed_bundle', 'video', 'available_speeds'], $availableSpeed);
+ }
+
+ if ($app['conf']->has(['embed_bundle', 'audio', 'available-speeds'])) {
+ $availableSpeed = $app['conf']->get(['embed_bundle', 'audio', 'available-speeds']);
+ $app['conf']->remove(['embed_bundle', 'audio', 'available-speeds']);
+ $app['conf']->set(['embed_bundle', 'audio', 'available_speeds'], $availableSpeed);
+ }
+
+ if ($app['conf']->has(['embed_bundle', 'document', 'enable-pdfjs'])) {
+ $enablePdfjs = $app['conf']->get(['embed_bundle', 'document', 'enable-pdfjs']);
+ $app['conf']->remove(['embed_bundle', 'document', 'enable-pdfjs']);
+ $app['conf']->set(['embed_bundle', 'document', 'enable_pdfjs'], $enablePdfjs);
+ }
+
+ // geoloc section change replace 'name' to 'map-provider'
+ if ($app['conf']->has(['geocoding-providers', 0, 'name'])) {
+ $geocodingName = $app['conf']->get(['geocoding-providers', 0, 'name']);
+ $app['conf']->remove(['geocoding-providers', 0, 'name']);
+ $app['conf']->set(['geocoding-providers', 0, 'map-provider'], $geocodingName);
+ }
+
+ // video-editor section change, replace 'vttFieldName' to 'ChapterVttFieldName'
+ if ($app['conf']->has(['video-editor', 'vttFieldName'])) {
+ $chapterVttFieldName = $app['conf']->get(['video-editor', 'vttFieldName']);
+ $app['conf']->remove(['video-editor', 'vttFieldName']);
+ $app['conf']->set(['video-editor', 'ChapterVttFieldName'], $chapterVttFieldName);
+ }
+
+ // remove registry classic section if exist
+ if ($app['conf']->has(['registry', 'classic'])) {
+ $app['conf']->remove(['registry', 'classic']);
+ }
+
+ // remove bridge section if exist
+ if ($app['conf']->has(['main', 'bridge'])) {
+ $app['conf']->remove(['main', 'bridge']);
+ }
+
+ // insert RGPD bloc if not exist
+ if (!$app['conf']->has(['user_account', 'deleting_policies', 'email_confirmation'])) {
+ $app['conf']->set(['user_account', 'deleting_policies', 'email_confirmation'], true);
+ }
+
+ return true;
+ }
+}
diff --git a/lib/conf.d/configuration.yml b/lib/conf.d/configuration.yml
index 0e13eba50c..f237b8318f 100644
--- a/lib/conf.d/configuration.yml
+++ b/lib/conf.d/configuration.yml
@@ -39,21 +39,37 @@ main:
populate_order: RECORD_ID
populate_direction: DESC
activeTab: '#elastic-search'
- base_aggregate_limit: 10
- collection_aggregate_limit: 10
- doctype_aggregate_limit: 0
- camera_model_aggregate_limit: 0
- iso_aggregate_limit: 0
- aperture_aggregate_limit: 0
- shutterspeed_aggregate_limit: 0
- flashfired_aggregate_limit: 0
- framerate_aggregate_limit: 0
- audiosamplerate_aggregate_limit: 0
- videocodec_aggregate_limit: 0
- audiocodec_aggregate_limit: 0
- orientation_aggregate_limit: 0
- colorspace_aggregate_limit: 0
- mimetype_aggregate_limit: 0
+ facets:
+ _base:
+ limit: 10
+ _collection:
+ limit: 10
+ _doctype:
+ limit: 10
+ _camera_model:
+ limit: 0
+ _iso:
+ limit: 0
+ _aperture:
+ limit: 0
+ _shutterspeed:
+ limit: 0
+ _flashfired:
+ limit: 0
+ _framerate:
+ limit: 0
+ _audiosamplerate:
+ limit: 0
+ _videocodec:
+ limit: 0
+ _audiocodec:
+ limit: 0
+ _orientation:
+ limit: 0
+ _colorspace:
+ limit: 0
+ _mimetype:
+ limit: 0
task-manager:
status: started
enabled: true
@@ -87,6 +103,7 @@ main:
mp4box_timeout: 60
swftools_timeout: 60
unoconv_timeout: 60
+ exiftool_timeout: 60
storage:
subdefs: null
cache: null
@@ -94,6 +111,7 @@ main:
download: null
lazaret: null
caption: null
+ tmp_files: null
trusted-proxies: []
debugger:
@@ -241,7 +259,7 @@ embed_bundle:
geocoding-providers:
-
map-provider: 'mapboxWebGL'
- enabled: true
+ enabled: false
public-key: ''
map-layers:
-
@@ -284,7 +302,7 @@ geocoding-providers:
provincefields: Province
countryfields: 'Country, Pays'
video-editor:
- vttFieldName: VideoTextTrackChapters
+ ChapterVttFieldName: VideoTextTrackChapters
seekBackwardStep: 500 # in ms
seekForwardStep: 500 # in ms
playbackRates:
diff --git a/package.json b/package.json
index 57ae3e628f..8ac01be75a 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.116-d",
+ "phraseanet-production-client": "0.34.139-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 78fc1ee82e..cb9c16cbbd 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.
@@ -118,8 +118,8 @@
%basket_length% documents
%basket_length% Dokument(e)
mobile/lightbox/validate.html.twig
- web/lightbox/index.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
%countable% documents can not be modified.
@@ -278,7 +278,7 @@
%record_count% records match the unique identifier :
%record_count% Datensätze entsprechen dem eindeutigen Bezeichner:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
%s field has been created with success.
@@ -383,17 +383,17 @@
(validation) a envoyer
zu senden
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) envoyee
gesendet
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) session terminee
Sitzung beendet
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
*Phraseanet Navigator* is a smartphone application that allow user to connect on this instance
@@ -489,7 +489,7 @@
A record matches the unique identifier :
Ein Datensatz entspricht dem eindeutigen Bezeichner :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
A required field is missing or has an empty value
@@ -627,7 +627,7 @@
Action Forbidden : You are not the publisher
Aktion verboten: Sie sind nicht der Veröffentlicher
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
Actions
@@ -642,7 +642,7 @@
Activate highlight
Highlight aktivieren
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -676,8 +676,8 @@
Add
Hinzufügen
prod/actions/Push.html.twig
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
prod/User/Add.html.twig
@@ -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,42 @@
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
+ Aggregated
+ admin/search-engine/general-aggregation.html.twig
Aggregation
@@ -816,7 +821,7 @@
Aide
Hilfe
- web/prod/index.html.twig
+ web/prod/index.html.twig
Aide sur les expressions regulieres
@@ -868,12 +873,7 @@
All these conditions
Alle Bedingungen
- web/prod/index.html.twig
-
-
- All values
- Alle Werte
- admin/fields/templates.html.twig
+ web/prod/index.html.twig
Aller a
@@ -938,14 +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
Also delete records that rely on groupings.
@@ -1032,7 +1033,7 @@
Ein Fehler ist aufgetreten
Order/Controller/ProdOrderController.php
Controller/Admin/DataboxController.php
- Controller/Admin/SearchEngineController.php
+ Controller/Admin/SearchEngineController.php
Controller/Admin/CollectionController.php
Controller/Prod/BasketController.php
Controller/Api/V3Controller.php
@@ -1068,7 +1069,7 @@
Aperture
Blende
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1265,7 +1266,7 @@
Audio
Audio
- web/prod/index.html.twig
+ web/prod/index.html.twig
Audio Birate
@@ -1281,7 +1282,7 @@
Audio Samplerate
Audio Samplerate
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Audio channel
@@ -1291,7 +1292,7 @@
Audio codec
Audio-Codec
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
AudioSamplerate
@@ -1524,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
+ web/prod/index.html.twig
Browser
@@ -1554,7 +1555,7 @@
By field
Nach Feld
- web/prod/index.html.twig
+ web/prod/index.html.twig
CHAMPS
@@ -1564,7 +1565,7 @@
Camera Model
Kameramodell
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1822,7 +1823,7 @@
Collection
Kollektion
prod/Story/Create.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/databox/details.html.twig
@@ -1839,7 +1840,7 @@
Collection order
Kollektionen Ordnung
- web/prod/index.html.twig
+ web/prod/index.html.twig
Color Depth
@@ -1854,7 +1855,7 @@
Colorspace
Colorspace
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Commande
@@ -1910,7 +1911,7 @@
Configuration
Konfiguration
- web/prod/index.html.twig
+ web/prod/index.html.twig
Confirm new email address
@@ -1966,7 +1967,7 @@
Contains
enthält
- web/prod/index.html.twig
+ web/prod/index.html.twig
Continuer ?
@@ -2021,7 +2022,7 @@
Couleur de selection
Farbauswahl
- web/prod/index.html.twig
+ web/prod/index.html.twig
Country
@@ -2042,7 +2043,7 @@
Create index
Index erstellen
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Creation date
@@ -2131,7 +2132,7 @@
Current configuration contains some
errors
Die aktuelle Konfiguration enthält einige Fehler
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Current operations cannot be executed because the site is temporarily in maintenance mode. Wait a few minutes and try your request again
@@ -2229,12 +2230,12 @@
Date
Datum
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Date Added
Hinzufügungsdatum
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date Creation
@@ -2244,7 +2245,7 @@
Date Updated
Aktualisierungsdatum
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date de connexion
@@ -2273,7 +2274,7 @@
Date(s) from field(s)
Datum vom Feld
- web/prod/index.html.twig
+ web/prod/index.html.twig
De
@@ -2351,7 +2352,7 @@
Defined by admin
Von Administrator festgelegt
- web/prod/index.html.twig
+ web/prod/index.html.twig
Defined in Apache configuration
@@ -2371,8 +2372,8 @@
Delete
Löschen
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/task-manager/templates.html.twig
@@ -2529,7 +2530,7 @@
Display technical data
Technische Informationen anzeigen
- web/prod/index.html.twig
+ web/prod/index.html.twig
Display thumbnails
@@ -2539,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
@@ -2571,7 +2572,7 @@
Document
Dokument
- web/prod/index.html.twig
+ web/prod/index.html.twig
Document Type Sharing
@@ -2639,7 +2640,7 @@
Drop index
Drop index
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Duree
@@ -2747,19 +2748,19 @@
ElasticSearch index name
ElasticSearch Index Name
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
ElasticSearch server host
ElasticSearch Server Host
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
ElasticSearch service port
ElasticSearch Service Schnittstelle
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -3010,7 +3011,7 @@
Equals
gleicht
- web/prod/index.html.twig
+ web/prod/index.html.twig
Erreur
@@ -3153,7 +3154,7 @@
Ex : Paris, bleu, montagne
Ex : Berlin, blau, Gebirge
- web/prod/index.html.twig
+ web/prod/index.html.twig
Executables externes
@@ -3303,7 +3304,7 @@
Filename
Dateiname
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Fils disponibles
@@ -3336,13 +3337,13 @@
Flash
Flash
- web/prod/index.html.twig
+ web/prod/index.html.twig
web/common/technical_datas.html.twig
FlashFired
FlashFired
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Flatten layers
@@ -3401,7 +3402,7 @@
FrameRate
Framerate
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Frequence d'echantillonage
@@ -3472,7 +3473,7 @@
Geo Search
Lokalisierung
- web/prod/index.html.twig
+ web/prod/index.html.twig
Geonames server address
@@ -3487,7 +3488,7 @@
Get setting form index
Index Daten erhalten
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side.
@@ -3547,7 +3548,7 @@
Graphiste (preview au rollover)
Grafiker (Voransicht mit Rollover)
- web/prod/index.html.twig
+ web/prod/index.html.twig
Great
@@ -3646,7 +3647,7 @@
ISO
ISO
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
ISO sensibility
@@ -3656,7 +3657,7 @@
Iconographe (description au rollover)
Bildredakteur (Beschreibung mit Rollover)
- web/prod/index.html.twig
+ web/prod/index.html.twig
Id
@@ -3701,7 +3702,7 @@
Image
Bild
- web/prod/index.html.twig
+ web/prod/index.html.twig
ImageMagick
@@ -3727,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
@@ -3951,7 +3952,7 @@
Language
Sprache
- web/prod/index.html.twig
+ web/prod/index.html.twig
Last Name
@@ -3981,7 +3982,7 @@
Last uploaded version
zuletzte geladene Version
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Le bridge Dailymotion ne prend en charge que les videos
@@ -4088,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
@@ -4218,7 +4219,7 @@
Ma derniere question
meine letzte Suchabfrage
- web/prod/index.html.twig
+ web/prod/index.html.twig
Mail line %line% is empty
@@ -4324,7 +4325,7 @@
MimeType
MimeType
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Minimum number of letters before truncation
@@ -4375,7 +4376,7 @@
Mode de presentation
Anzeigemodus
- web/prod/index.html.twig
+ web/prod/index.html.twig
Modele de donnees
@@ -4688,7 +4689,8 @@
Not aggregated
Nicht aggregiert
- admin/fields/templates.html.twig
+ admin/search-engine/general-aggregation.html.twig
+ admin/fields/templates.html.twig
Notification par email
@@ -4754,13 +4756,13 @@
Number of replicas
Anzahl von Nachbauten
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
Number of shards
Anzahl von Scherben
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -4798,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.
@@ -4861,7 +4863,7 @@
Orientation
Ausrichtung
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Original name
@@ -4901,7 +4903,7 @@
mobile/lightbox/index.html.twig
mobile/lightbox/index.html.twig
web/account/account.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
lightbox/IE6/validate.html.twig
web/lightbox/validate.html.twig
@@ -5141,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
+ web/prod/index.html.twig
Prefix for notification emails
@@ -5159,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
@@ -5217,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
@@ -5330,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%
@@ -5425,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
@@ -5528,7 +5530,7 @@
Rechercher dans un champ date
im Feld "Datum" suchen
- web/prod/index.html.twig
+ web/prod/index.html.twig
Recommendations
@@ -5619,7 +5621,7 @@
Relevance
Relevanz
- web/prod/index.html.twig
+ web/prod/index.html.twig
Remember me
@@ -5898,7 +5900,7 @@
Speichern
actions/Feedback/list.html.twig
web/account/change-password.html.twig
- admin/search-engine/general-aggregation.html.twig
+ admin/search-engine/general-aggregation.html.twig
admin/search-engine/elastic-search.html.twig
task-manager/task-editor/task.html.twig
web/developers/application.html.twig
@@ -5997,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 !
@@ -6032,7 +6034,7 @@
Selected base(s)
Ausgewählte Datenbank(en) :
- web/prod/index.html.twig
+ web/prod/index.html.twig
Selected files
@@ -6166,7 +6168,7 @@
Shutter speed
Verschlusszeit
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -6309,7 +6311,7 @@
Status des documents a rechercher
Zustand der Dokumente
- web/prod/index.html.twig
+ web/prod/index.html.twig
Status edition
@@ -6404,8 +6406,8 @@
Substitute
Ersatz
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Substitution is not possible for this kind of record
@@ -6729,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
@@ -6749,13 +6751,13 @@
Thesaurus Min score
Thesaurus Hits (minimal)
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
Thesaurus branch
Thesaurus Sprung
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Thesaurus ou CTerms invalide
@@ -6906,7 +6908,7 @@
Tout type
Bildschirmtyp
- web/prod/index.html.twig
+ web/prod/index.html.twig
Toutes les publications
@@ -6932,7 +6934,7 @@
Trier par
Sortieren nach
- web/prod/index.html.twig
+ web/prod/index.html.twig
Try to extract embedded thumbnails
@@ -6957,7 +6959,7 @@
Type de documents
Dokumenttyp
- web/prod/index.html.twig
+ web/prod/index.html.twig
Type nombre
@@ -7080,7 +7082,7 @@
Une question personnelle
eine persönliche Frage
- web/prod/index.html.twig
+ web/prod/index.html.twig
Une selection
@@ -7172,7 +7174,7 @@
Uploaded by : %username%
von: %username% hochgeladen
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Use Google Chart API
@@ -7192,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
@@ -7370,7 +7372,7 @@
Video
Video
- web/prod/index.html.twig
+ web/prod/index.html.twig
Video Codec
@@ -7380,7 +7382,7 @@
Video codec
Video-Codec
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Videos
@@ -7401,13 +7403,13 @@
Vocabulary type
Wortschatz Typ
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Voici vos paniers
Ihre Sammelkörbe
mobile/lightbox/index.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
Voici vos validations en cours
@@ -7567,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 !
@@ -7668,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
@@ -7990,7 +7992,7 @@
action : bridge
Bridge
- web/prod/index.html.twig
+ web/prod/index.html.twig
action : collection
@@ -8017,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
@@ -8047,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
@@ -8073,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
+ 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
+ web/prod/index.html.twig
action::Valider
@@ -9152,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
@@ -9327,7 +9329,7 @@
boutton::rechercher
suchen
Controller/Prod/LanguageController.php
- web/prod/index.html.twig
+ web/prod/index.html.twig
boutton::refresh
@@ -9370,7 +9372,7 @@
admin/collection/details.html.twig
user/import/file.html.twig
admin/statusbit/edit.html.twig
- web/developers/application_form.html.twig
+ web/developers/application_form.html.twig
web/developers/application.html.twig
@@ -9462,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
@@ -9490,7 +9492,7 @@
user/import/view.html.twig
admin/user/registrations.html.twig
admin/statusbit/edit.html.twig
- web/developers/application_form.html.twig
+ web/developers/application_form.html.twig
web/report/all_content.html.twig
@@ -9588,7 +9590,7 @@
choisir
wählen
- web/prod/index.html.twig
+ web/prod/index.html.twig
admin/databox/databox.html.twig
admin/collection/create.html.twig
@@ -9670,7 +9672,7 @@
created_on
erstellt am
- web/prod/index.html.twig
+ web/prod/index.html.twig
dans %category%
@@ -9941,6 +9943,17 @@
Änderungen wurden hergestellt
admin/databox/databox.html.twig
+
+ help::help-search: OR
+ help::help-search: OR
+ prod/results/help.html.twig
+
+
+ help::help-search: relaunch search without filter
+ help::help-search: relaunch search without filter
+ prod/results/help.html.twig
+ web/prod/index.html.twig
+
help::help-section-bullet: check-spelling
Vergewissern Sie sich, dass kein Schreibfehler oder Tippfehler vorliegt
@@ -10016,42 +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
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
@@ -10083,6 +10101,16 @@
Die Dienstleistung wird in einige Minuten wieder verfügbar sein.
actions/Bridge/deactivated.html.twig
+
+ lightbox::See_less_feedback
+ lightbox::See_less_feedback
+ web/lightbox/index.html.twig
+
+
+ lightbox::See_more_feedback
+ lightbox::See_more_feedback
+ web/lightbox/index.html.twig
+
lightbox::list
lightbox::list
@@ -10095,6 +10123,16 @@
web/lightbox/agreement_box.html.twig
web/lightbox/validate.html.twig
+
+ lightbox::see_less_basket
+ lightbox::see_less_basket
+ web/lightbox/index.html.twig
+
+
+ lightbox::see_more_basket
+ lightbox::see_more_basket
+ web/lightbox/index.html.twig
+
login:: Changer mon adresse email
meine E-Mail Adresse ändern
@@ -10664,7 +10702,7 @@
phraseanet:: Preferences
Einstellungen
- web/prod/index.html.twig
+ web/prod/index.html.twig
phraseanet:: Un email vient de vous etre envoye
@@ -10813,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/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
+ web/prod/index.html.twig
phraseanet:: user
@@ -11008,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
@@ -11024,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
@@ -11034,7 +11072,7 @@
phraseanet::type:: reportages
Berichte
- web/prod/index.html.twig
+ web/prod/index.html.twig
phraseanet::type:: videos
@@ -11059,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
@@ -11171,6 +11209,11 @@
Mosaikansicht
prod/actions/printer_default.html.twig
+
+ print_feedback:: Document generated on :
+ print_feedback:: Document generated on :
+ Out/Module/PDFRecords.php
+
print_feedback:: Feedback active
Feedback ist aktiviert
@@ -11181,6 +11224,21 @@
Feedback ist abgelaufen
Out/Module/PDFRecords.php
+
+ print_feedback:: Feedback expiring on :
+ print_feedback:: Feedback expiring on :
+ Out/Module/PDFRecords.php
+
+
+ print_feedback:: Feedback initiated by :
+ print_feedback:: Feedback initiated by :
+ Out/Module/PDFRecords.php
+
+
+ print_feedback:: Feedback initiated on :
+ print_feedback:: Feedback initiated on :
+ Out/Module/PDFRecords.php
+
print_feedback:: Feedback on basket %name%
Feedback auf Sammelkorb %name%
@@ -11268,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)
@@ -11293,12 +11351,12 @@
prod::editing: %not_actionable% documents ne peuvent etre edites car vos droits sont induffisants
%not_actionable% Dokumente können nicht bearbeitet werden, da Sie keine Rechte darauf haben
- prod/actions/edit_default.html.twig
+ prod/actions/edit_default.html.twig
prod::editing: 1 document ne peut etre edite car vos droits sont induffisants
Keine Bearbeitung möglich. Sie haben keinen Zugriff auf die Dokumente
- prod/actions/edit_default.html.twig
+ prod/actions/edit_default.html.twig
prod::editing: aucun documents ne peuvent etre edites car vos droits sont induffisants
@@ -11393,17 +11451,17 @@
prod::facet:base_label
Datenbanken
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
prod::facet:collection_label
Kollektionen
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
prod::facet:doctype_label
Dokumenttyp
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
prod::feedback:feedback_set_title
@@ -11616,6 +11674,11 @@
Auswahl entfernen
prod/actions/Push.html.twig
+
+ prod:workzone:facetstab:search_and_facets_sort_options
+ prod:workzone:facetstab:search_and_facets_sort_options
+ web/prod/index.html.twig
+
public
öffentlich
@@ -11651,8 +11714,8 @@
publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications.
Hier finden Sie Ihr eigenes RSS Feed. Dank des RSS werden Sie über neue Veröffentlichungen automatisch informiert
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
publications:: s'abonner aux publications
@@ -11663,14 +11726,14 @@
publications::Ne le partagez pas, il est strictement confidentiel
Dieses RSS nicht weiterleiten - es ist vertraulich
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
publications::votre rss personnel
Ihr eigenes RSS
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
push::mail:: Rapport de validation de %user% pour %title%
@@ -11690,12 +11753,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
@@ -11764,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
@@ -11796,7 +11859,7 @@
reponses:: taille des images :
Miniaturansichtengrösse
- web/prod/index.html.twig
+ web/prod/index.html.twig
reponses::document sans titre
@@ -13180,7 +13243,7 @@
updated_on
aktualisiert am
- web/prod/index.html.twig
+ web/prod/index.html.twig
upload:: Destination (collection) :
@@ -13193,7 +13256,7 @@
Status
prod/upload/upload.html.twig
prod/upload/upload-flash.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
users rights have been reseted
diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf
index 18bf3237ba..014648af36 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
@@ -118,8 +118,8 @@
%basket_length% documents
%basket_length% document(s)
mobile/lightbox/validate.html.twig
- web/lightbox/index.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
%countable% documents can not be modified.
@@ -278,7 +278,7 @@
%record_count% records match the unique identifier :
%record_count% records match the unique identifier:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
%s field has been created with success.
@@ -383,17 +383,17 @@
(validation) a envoyer
Feedback request to send
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) envoyee
Feedback request sent.
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) session terminee
Feedback session ended.
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
*Phraseanet Navigator* is a smartphone application that allow user to connect on this instance
@@ -489,7 +489,7 @@
A record matches the unique identifier :
A record matches the unique identifier:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
A required field is missing or has an empty value
@@ -627,7 +627,7 @@
Action Forbidden : You are not the publisher
Forbidden: You are not the publisher
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
Actions
@@ -642,7 +642,7 @@
Activate highlight
Activate highlight on full text (experimental). Impact the time performance of search.
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -676,8 +676,8 @@
Add
Add
prod/actions/Push.html.twig
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
prod/User/Add.html.twig
@@ -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,42 @@
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
+ Aggregated
+ admin/search-engine/general-aggregation.html.twig
Aggregation
@@ -817,7 +822,7 @@
Aide
Help
- web/prod/index.html.twig
+ web/prod/index.html.twig
Aide sur les expressions regulieres
@@ -869,12 +874,7 @@
All these conditions
All these conditions
- web/prod/index.html.twig
-
-
- All values
- All values
- admin/fields/templates.html.twig
+ web/prod/index.html.twig
Aller a
@@ -939,14 +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
Also delete records that rely on groupings.
@@ -1033,7 +1034,7 @@
An error occurred
Order/Controller/ProdOrderController.php
Controller/Admin/DataboxController.php
- Controller/Admin/SearchEngineController.php
+ Controller/Admin/SearchEngineController.php
Controller/Admin/CollectionController.php
Controller/Prod/BasketController.php
Controller/Api/V3Controller.php
@@ -1069,7 +1070,7 @@
Aperture
Aperture
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1266,7 +1267,7 @@
Audio
Audio
- web/prod/index.html.twig
+ web/prod/index.html.twig
Audio Birate
@@ -1282,7 +1283,7 @@
Audio Samplerate
Audio Samplerate
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Audio channel
@@ -1292,7 +1293,7 @@
Audio codec
Audio codec
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
AudioSamplerate
@@ -1452,9 +1453,9 @@
Dabase succesfully emptied
Controller/Admin/DataboxController.php
-
+
Basket
- Basket
+ Basket
prod/WorkZone/Macros.html.twig
@@ -1525,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
+ web/prod/index.html.twig
Browser
@@ -1555,7 +1556,7 @@
By field
By field
- web/prod/index.html.twig
+ web/prod/index.html.twig
CHAMPS
@@ -1565,7 +1566,7 @@
Camera Model
Camera model
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1824,7 +1825,7 @@
Collection
Collection
prod/Story/Create.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/databox/details.html.twig
@@ -1841,7 +1842,7 @@
Collection order
Collection order
- web/prod/index.html.twig
+ web/prod/index.html.twig
Color Depth
@@ -1856,7 +1857,7 @@
Colorspace
Colorspace
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Commande
@@ -1912,7 +1913,7 @@
Configuration
Configuration
- web/prod/index.html.twig
+ web/prod/index.html.twig
Confirm new email address
@@ -1968,7 +1969,7 @@
Contains
Contains
- web/prod/index.html.twig
+ web/prod/index.html.twig
Continuer ?
@@ -2023,7 +2024,7 @@
Couleur de selection
Selection color
- web/prod/index.html.twig
+ web/prod/index.html.twig
Country
@@ -2044,7 +2045,7 @@
Create index
Create index
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Creation date
@@ -2134,7 +2135,7 @@
errors
Current configuration contains some
errors
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Current operations cannot be executed because the site is temporarily in maintenance mode. Wait a few minutes and try your request again
@@ -2232,12 +2233,12 @@
Date
Date
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Date Added
Date added
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date Creation
@@ -2247,7 +2248,7 @@
Date Updated
Date Updated
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date de connexion
@@ -2276,7 +2277,7 @@
Date(s) from field(s)
Date(s) from field(s)
- web/prod/index.html.twig
+ web/prod/index.html.twig
De
@@ -2354,7 +2355,7 @@
Defined by admin
Defined by admin
- web/prod/index.html.twig
+ web/prod/index.html.twig
Defined in Apache configuration
@@ -2374,8 +2375,8 @@
Delete
Delete
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/task-manager/templates.html.twig
@@ -2532,7 +2533,7 @@
Display technical data
Display technical data
- web/prod/index.html.twig
+ web/prod/index.html.twig
Display thumbnails
@@ -2542,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
@@ -2574,7 +2575,7 @@
Document
Document
- web/prod/index.html.twig
+ web/prod/index.html.twig
Document Type Sharing
@@ -2642,7 +2643,7 @@
Drop index
Drop index
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Duree
@@ -2750,19 +2751,19 @@
ElasticSearch index name
ElasticSearch index name
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
ElasticSearch server host
ElasticSearch server host
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
ElasticSearch service port
ElasticSearch service port
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -3013,7 +3014,7 @@
Equals
Equals
- web/prod/index.html.twig
+ web/prod/index.html.twig
Erreur
@@ -3156,7 +3157,7 @@
Ex : Paris, bleu, montagne
Ex : Paris, blue, mountain
- web/prod/index.html.twig
+ web/prod/index.html.twig
Executables externes
@@ -3306,7 +3307,7 @@
Filename
File Name
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Fils disponibles
@@ -3339,13 +3340,13 @@
Flash
Flash
- web/prod/index.html.twig
+ web/prod/index.html.twig
web/common/technical_datas.html.twig
FlashFired
FlashFired
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Flatten layers
@@ -3404,7 +3405,7 @@
FrameRate
FrameRate
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Frequence d'echantillonage
@@ -3475,7 +3476,7 @@
Geo Search
Geo Search
- web/prod/index.html.twig
+ web/prod/index.html.twig
Geonames server address
@@ -3490,7 +3491,7 @@
Get setting form index
Get setting form index
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side.
@@ -3550,7 +3551,7 @@
Graphiste (preview au rollover)
Graphist (preview on thumbnail rollover)
- web/prod/index.html.twig
+ web/prod/index.html.twig
Great
@@ -3649,7 +3650,7 @@
ISO
ISO
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
ISO sensibility
@@ -3659,7 +3660,7 @@
Iconographe (description au rollover)
Iconograph (caption on thumbnail rollover)
- web/prod/index.html.twig
+ web/prod/index.html.twig
Id
@@ -3704,7 +3705,7 @@
Image
Image
- web/prod/index.html.twig
+ web/prod/index.html.twig
ImageMagick
@@ -3730,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
@@ -3954,7 +3955,7 @@
Language
Language
- web/prod/index.html.twig
+ web/prod/index.html.twig
Last Name
@@ -3984,7 +3985,7 @@
Last uploaded version
Last uploaded version
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Le bridge Dailymotion ne prend en charge que les videos
@@ -4091,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
@@ -4221,7 +4222,7 @@
Ma derniere question
My last query
- web/prod/index.html.twig
+ web/prod/index.html.twig
Mail line %line% is empty
@@ -4327,7 +4328,7 @@
MimeType
MimeType
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Minimum number of letters before truncation
@@ -4378,7 +4379,7 @@
Mode de presentation
Display mode
- web/prod/index.html.twig
+ web/prod/index.html.twig
Modele de donnees
@@ -4691,7 +4692,8 @@
Not aggregated
Not aggregated
- admin/fields/templates.html.twig
+ admin/search-engine/general-aggregation.html.twig
+ admin/fields/templates.html.twig
Notification par email
@@ -4757,13 +4759,13 @@
Number of replicas
Number of replicas
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
Number of shards
Number of shards
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -4801,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.
@@ -4864,7 +4866,7 @@
Orientation
Orientation
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Original name
@@ -4904,7 +4906,7 @@
mobile/lightbox/index.html.twig
mobile/lightbox/index.html.twig
web/account/account.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
lightbox/IE6/validate.html.twig
web/lightbox/validate.html.twig
@@ -5144,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
+ web/prod/index.html.twig
Prefix for notification emails
@@ -5162,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
@@ -5220,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
@@ -5333,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%
@@ -5428,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
@@ -5531,7 +5533,7 @@
Rechercher dans un champ date
In a date field
- web/prod/index.html.twig
+ web/prod/index.html.twig
Recommendations
@@ -5622,7 +5624,7 @@
Relevance
Relevance
- web/prod/index.html.twig
+ web/prod/index.html.twig
Remember me
@@ -5901,7 +5903,7 @@
Save
actions/Feedback/list.html.twig
web/account/change-password.html.twig
- admin/search-engine/general-aggregation.html.twig
+ admin/search-engine/general-aggregation.html.twig
admin/search-engine/elastic-search.html.twig
task-manager/task-editor/task.html.twig
web/developers/application.html.twig
@@ -6000,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 !
@@ -6035,7 +6037,7 @@
Selected base(s)
Selected database(s) :
- web/prod/index.html.twig
+ web/prod/index.html.twig
Selected files
@@ -6169,7 +6171,7 @@
Shutter speed
Shutter speed
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -6312,7 +6314,7 @@
Status des documents a rechercher
Document status
- web/prod/index.html.twig
+ web/prod/index.html.twig
Status edition
@@ -6407,8 +6409,8 @@
Substitute
Substitute
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Substitution is not possible for this kind of record
@@ -6467,9 +6469,9 @@
Suggested values
admin/collection/suggested_value.html.twig
-
+
Suppr
- Suppr
+ Suppr
Controller/Prod/LanguageController.php
@@ -6732,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
@@ -6752,13 +6754,13 @@
Thesaurus Min score
Thesaurus Min score
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
Thesaurus branch
Thesaurus branch
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Thesaurus ou CTerms invalide
@@ -6909,7 +6911,7 @@
Tout type
All types
- web/prod/index.html.twig
+ web/prod/index.html.twig
Toutes les publications
@@ -6935,7 +6937,7 @@
Trier par
Sort by
- web/prod/index.html.twig
+ web/prod/index.html.twig
Try to extract embedded thumbnails
@@ -6960,7 +6962,7 @@
Type de documents
Document Type
- web/prod/index.html.twig
+ web/prod/index.html.twig
Type nombre
@@ -7083,7 +7085,7 @@
Une question personnelle
The query
- web/prod/index.html.twig
+ web/prod/index.html.twig
Une selection
@@ -7175,7 +7177,7 @@
Uploaded by : %username%
Uploaded by: %username%
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Use Google Chart API
@@ -7195,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
@@ -7373,7 +7375,7 @@
Video
Video
- web/prod/index.html.twig
+ web/prod/index.html.twig
Video Codec
@@ -7383,7 +7385,7 @@
Video codec
Video codec
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Videos
@@ -7404,13 +7406,13 @@
Vocabulary type
Vocabulary type
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Voici vos paniers
Your Basket(s)
mobile/lightbox/index.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
Voici vos validations en cours
@@ -7570,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 !
@@ -7671,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
@@ -7993,7 +7995,7 @@
action : bridge
Bridge
- web/prod/index.html.twig
+ web/prod/index.html.twig
action : collection
@@ -8020,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
@@ -8050,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
@@ -8076,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
+ 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
+ web/prod/index.html.twig
action::Valider
@@ -9155,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
@@ -9330,7 +9332,7 @@
boutton::rechercher
Search
Controller/Prod/LanguageController.php
- web/prod/index.html.twig
+ web/prod/index.html.twig
boutton::refresh
@@ -9373,7 +9375,7 @@
admin/collection/details.html.twig
user/import/file.html.twig
admin/statusbit/edit.html.twig
- web/developers/application_form.html.twig
+ web/developers/application_form.html.twig
web/developers/application.html.twig
@@ -9465,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
@@ -9493,7 +9495,7 @@
user/import/view.html.twig
admin/user/registrations.html.twig
admin/statusbit/edit.html.twig
- web/developers/application_form.html.twig
+ web/developers/application_form.html.twig
web/report/all_content.html.twig
@@ -9591,7 +9593,7 @@
choisir
Select
- web/prod/index.html.twig
+ web/prod/index.html.twig
admin/databox/databox.html.twig
admin/collection/create.html.twig
@@ -9655,9 +9657,9 @@
Presets
web/admin/subdefs.html.twig
-
+
create_subdef_modal_preview_mediatype
- Preview Media Type (mime type) :
+ Preview Media Type (mime type) :
web/admin/subdefs.html.twig
@@ -9673,7 +9675,7 @@
created_on
created on
- web/prod/index.html.twig
+ web/prod/index.html.twig
dans %category%
@@ -9944,6 +9946,17 @@
Modifications done
admin/databox/databox.html.twig
+
+ help::help-search: OR
+ Or
+ prod/results/help.html.twig
+
+
+ help::help-search: relaunch search without filter
+ Remove all filters and relaunch search
+ prod/results/help.html.twig
+ web/prod/index.html.twig
+
help::help-section-bullet: check-spelling
Check that there are no misspellings or typing errors.
@@ -10019,42 +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
- Order by hits
- web/prod/index.html.twig
+ By Hits
+ web/prod/index.html.twig
+
+
+ index::advance_search: order-by-hits-asc
+ By Hits asc
+ 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
@@ -10076,9 +10094,9 @@
June
classes/module/report.php
-
+
language
- Language
+ Current Language
login/include/language-block.html.twig
@@ -10086,6 +10104,16 @@
Service will be available again in a few minutes
actions/Bridge/deactivated.html.twig
+
+ lightbox::See_less_feedback
+ See less feedback
+ web/lightbox/index.html.twig
+
+
+ lightbox::See_more_feedback
+ See more feedback
+ web/lightbox/index.html.twig
+
lightbox::list
Summary
@@ -10098,6 +10126,16 @@
web/lightbox/agreement_box.html.twig
web/lightbox/validate.html.twig
+
+ lightbox::see_less_basket
+ See less baskets
+ web/lightbox/index.html.twig
+
+
+ lightbox::see_more_basket
+ See more baskets
+ web/lightbox/index.html.twig
+
login:: Changer mon adresse email
Change my e-mail
@@ -10667,7 +10705,7 @@
phraseanet:: Preferences
Preferences
- web/prod/index.html.twig
+ web/prod/index.html.twig
phraseanet:: Un email vient de vous etre envoye
@@ -10700,9 +10738,9 @@
Feedback report with caption
prod/actions/printer_default.html.twig
-
+
phraseanet:: baskets
- phraseanet:: baskets
+ Workzone tab
web/prod/tab_headers.html.twig
@@ -10816,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/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
+ web/prod/index.html.twig
phraseanet:: user
@@ -11011,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
@@ -11027,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
@@ -11037,7 +11075,7 @@
phraseanet::type:: reportages
Stories
- web/prod/index.html.twig
+ web/prod/index.html.twig
phraseanet::type:: videos
@@ -11062,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
@@ -11134,9 +11172,9 @@
Feedback report with caption
prod/actions/printer_default.html.twig
-
+
print:: basket feedback only
- Feedback report
+ Feedback report
prod/actions/printer_default.html.twig
@@ -11174,19 +11212,39 @@
Thumbnails
prod/actions/printer_default.html.twig
-
+
+ print_feedback:: Document generated on :
+ Generated on :
+ Out/Module/PDFRecords.php
+
+
print_feedback:: Feedback active
- Feedback session open
+ Feedback session still opened
Out/Module/PDFRecords.php
-
+
print_feedback:: Feedback expired
- Feedback session close
+ Feedback session closed
Out/Module/PDFRecords.php
+
+ print_feedback:: Feedback expiring on :
+ Feedback expiring on :
+ Out/Module/PDFRecords.php
+
+
+ print_feedback:: Feedback initiated by :
+ Feedback initiated by :
+ Out/Module/PDFRecords.php
+
+
+ print_feedback:: Feedback initiated on :
+ Feedback initiated on :
+ Out/Module/PDFRecords.php
+
print_feedback:: Feedback on basket %name%
- Feedback report on basket %name%
+ Feedback report on basket : %name%
Out/Module/PDFRecords.php
@@ -11209,14 +11267,14 @@
Approvals :
Out/Module/PDFRecords.php
-
+
print_feedback:: base name:
- print_feedback:: base name:
+ Base Name :
Out/Module/PDFRecords.php
-
+
print_feedback:: document Uuid:
- Document Unique Id :
+ Document Unique Id :
Out/Module/PDFRecords.php
@@ -11226,7 +11284,7 @@
print_feedback:: originale filename:
- Originale filename :
+ Original file name :
Out/Module/PDFRecords.php
@@ -11234,9 +11292,9 @@
Record Id :
Out/Module/PDFRecords.php
-
+
print_feedback:: record title:
- Record title :
+ Record Title :
Out/Module/PDFRecords.php
@@ -11271,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)
@@ -11296,12 +11354,12 @@
prod::editing: %not_actionable% documents ne peuvent etre edites car vos droits sont induffisants
Your user rights do not allow you to edit %not_actionable% documents from selection
- prod/actions/edit_default.html.twig
+ prod/actions/edit_default.html.twig
prod::editing: 1 document ne peut etre edite car vos droits sont induffisants
You do not have the required permissions to edit 1 document
- prod/actions/edit_default.html.twig
+ prod/actions/edit_default.html.twig
prod::editing: aucun documents ne peuvent etre edites car vos droits sont induffisants
@@ -11396,26 +11454,26 @@
prod::facet:base_label
Base
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
prod::facet:collection_label
Collection
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
prod::facet:doctype_label
Document type
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
-
+
prod::feedback:feedback_set_title
- prod::feedback:feedback_set_title
+ Feedback Title :
prod/templates/push.html.twig
-
+
prod::push:push_set_title
- prod::push:push_set_title
+ Name of Push Basket
prod/templates/push.html.twig
@@ -11579,9 +11637,9 @@
No overlap for chapters
Controller/Prod/LanguageController.php
-
+
prod:edit: only a media of type video can be edited
- Only video type record can be edited
+ Only video type record can be edited
Controller/Prod/LanguageController.php
@@ -11602,26 +11660,31 @@ Use grip for resize or move the area.
It is possible to place several search areas
Controller/Prod/LanguageController.php
-
+
prod:mapboxgl: title map dialog
- Geoloc Search
+ Geoloc Search
Controller/Prod/LanguageController.php
-
+
prod:mapboxgl: title notice
- Geoloc Search
+ Help
Controller/Prod/LanguageController.php
-
+
prod:push: create new user
- Create new user
+ Create new user
Controller/Prod/LanguageController.php
-
+
prod:push: delete selection
- Delete selection
+ Delete Selection
prod/actions/Push.html.twig
+
+ prod:workzone:facetstab:search_and_facets_sort_options
+ Option
+ web/prod/index.html.twig
+
public
Public
@@ -11657,8 +11720,8 @@ It is possible to place several search areas
publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications.
This is your personnal rss flow, it will inform you about publications
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
publications:: s'abonner aux publications
@@ -11669,14 +11732,14 @@ It is possible to place several search areas
publications::Ne le partagez pas, il est strictement confidentiel
Don't share it, it's yours only
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
publications::votre rss personnel
Your own rss
- Controller/Prod/FeedController.php
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
push::mail:: Rapport de validation de %user% pour %title%
@@ -11696,12 +11759,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
@@ -11770,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
@@ -11802,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
@@ -12351,14 +12414,14 @@ It is possible to place several search areas
Show in language
web/admin/setup.html.twig
-
+
setup::custom-link:link-url
- Destination URL
+ Destination URL
web/admin/setup.html.twig
-
+
setup::custom-link:location
- Select a position
+ Select a position
Form/Configuration/CustomLinkFormType.php
@@ -13186,7 +13249,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) :
@@ -13199,7 +13262,7 @@ It is possible to place several search areas
Apply status
prod/upload/upload.html.twig
prod/upload/upload-flash.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
users rights have been reseted
@@ -13271,9 +13334,9 @@ It is possible to place several search areas
Video Chapter Editing
actions/Tools/videoEditor.html.twig
-
+
video tool
- Thumbnail definition
+ Thumbnail Tools
actions/Tools/videoEditor.html.twig
diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf
index 349789d5e8..b26706cfd7 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
@@ -118,8 +118,8 @@
%basket_length% documents
%basket_length% documents
mobile/lightbox/validate.html.twig
- web/lightbox/index.html.twig
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
%countable% documents can not be modified.
@@ -278,7 +278,7 @@
%record_count% records match the unique identifier :
%record_count% enregistrements correspondent à des identifiants uniques existants:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
%s field has been created with success.
@@ -383,17 +383,17 @@
(validation) a envoyer
Rapport de validation à envoyer
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) envoyee
Rapport de validation envoyé
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
(validation) session terminee
Session terminée
- web/lightbox/index.html.twig
+ web/lightbox/index.html.twig
*Phraseanet Navigator* is a smartphone application that allow user to connect on this instance
@@ -489,7 +489,7 @@
A record matches the unique identifier :
Un enregistrement correspond à un identifiant unique existant :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
A required field is missing or has an empty value
@@ -627,7 +627,7 @@
Action Forbidden : You are not the publisher
Action non autorisée: Vous n'êtes pas la personne qui a publié
- Controller/Prod/FeedController.php
+ Controller/Prod/FeedController.php
Actions
@@ -642,7 +642,7 @@
Activate highlight
Activer le surlignage (beta). Impacte les performances de recherche
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
web/setup/step2.html.twig
@@ -676,8 +676,8 @@
Add
Ajouter
prod/actions/Push.html.twig
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
prod/User/Add.html.twig
@@ -696,9 +696,9 @@
Ajouter un nouveau champ
admin/fields/templates.html.twig
-
+
Add a position
- Ajouter une position
+ Ajouter une position
Controller/Prod/LanguageController.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,42 @@
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
+ Agrégé
+ admin/search-engine/general-aggregation.html.twig
Aggregation
@@ -816,7 +821,7 @@
Aide
Aide
- web/prod/index.html.twig
+ web/prod/index.html.twig
Aide sur les expressions regulieres
@@ -868,12 +873,7 @@
All these conditions
Toutes les conditions
- web/prod/index.html.twig
-
-
- All values
- Toutes les valeurs
- admin/fields/templates.html.twig
+ web/prod/index.html.twig
Aller a
@@ -938,14 +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
Also delete records that rely on groupings.
@@ -1032,7 +1033,7 @@
Une erreur est survenue
Order/Controller/ProdOrderController.php
Controller/Admin/DataboxController.php
- Controller/Admin/SearchEngineController.php
+ Controller/Admin/SearchEngineController.php
Controller/Admin/CollectionController.php
Controller/Prod/BasketController.php
Controller/Api/V3Controller.php
@@ -1068,7 +1069,7 @@
Aperture
Ouverture
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1265,7 +1266,7 @@
Audio
Audio
- web/prod/index.html.twig
+ web/prod/index.html.twig
Audio Birate
@@ -1281,7 +1282,7 @@
Audio Samplerate
Fréquence d'échantillonnage
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Audio channel
@@ -1291,7 +1292,7 @@
Audio codec
Encodeur Audio
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
AudioSamplerate
@@ -1451,9 +1452,9 @@
Base vidée avec succès
Controller/Admin/DataboxController.php
-
+
Basket
- Basket
+ Basket
prod/WorkZone/Macros.html.twig
@@ -1524,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
+ web/prod/index.html.twig
Browser
@@ -1554,7 +1555,7 @@
By field
Par champ
- web/prod/index.html.twig
+ web/prod/index.html.twig
CHAMPS
@@ -1564,7 +1565,7 @@
Camera Model
Type d'appareil numérique
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
web/common/technical_datas.html.twig
@@ -1822,7 +1823,7 @@
Collection
Collection
prod/Story/Create.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/databox/details.html.twig
@@ -1839,7 +1840,7 @@
Collection order
Ordre des collections
- web/prod/index.html.twig
+ web/prod/index.html.twig
Color Depth
@@ -1854,7 +1855,7 @@
Colorspace
Espace colorimétrique
- SearchEngine/Elastic/ElasticsearchOptions.php
+ SearchEngine/Elastic/ElasticsearchOptions.php
Commande
@@ -1910,7 +1911,7 @@
Configuration
Configuration
- web/prod/index.html.twig
+ web/prod/index.html.twig
Confirm new email address
@@ -1966,7 +1967,7 @@
Contains
Contient
- web/prod/index.html.twig
+ web/prod/index.html.twig
Continuer ?
@@ -2021,7 +2022,7 @@
Couleur de selection
Couleur de sélection
- web/prod/index.html.twig
+ web/prod/index.html.twig
Country
@@ -2042,7 +2043,7 @@
Create index
Créer les index
- SearchEngine/Elastic/ElasticsearchSettingsFormType.php
+ SearchEngine/Elastic/ElasticsearchSettingsFormType.php
Creation date
@@ -2131,7 +2132,7 @@
Current configuration contains some
errors
La configuration contient des erreurs
- admin/fields/templates.html.twig
+ admin/fields/templates.html.twig
Current operations cannot be executed because the site is temporarily in maintenance mode. Wait a few minutes and try your request again
@@ -2229,12 +2230,12 @@
Date
Date
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Date Added
Date d'ajout
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date Creation
@@ -2244,7 +2245,7 @@
Date Updated
Date de modification
- web/prod/index.html.twig
+ web/prod/index.html.twig
Date de connexion
@@ -2273,7 +2274,7 @@
Date(s) from field(s)
Date(s)
- web/prod/index.html.twig
+ web/prod/index.html.twig
De
@@ -2351,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
@@ -2371,8 +2372,8 @@
Delete
Supprimer
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
admin/task-manager/templates.html.twig
@@ -2473,9 +2474,9 @@
web/report/report_layout_child.html.twig
web/report/form_date_and_base.html.twig
-
+