diff --git a/.circleci/config.yml b/.circleci/config.yml index ce2f8c9a5c..8284f38fa7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -107,6 +107,53 @@ jobs: - store_artifacts: path: /tmp/circleci-test-results + + build_phraseanet-fpm: + machine: + image: ubuntu-1604:201903-01 + docker_layer_caching: true + working_directory: ~/alchemy-fr/Phraseanet + steps: + - checkout + - aws-ecr/ecr-login: + region: AWS_DEFAULT_REGION + - run: docker build --target phraseanet-fpm -t ${AWS_ACCOUNT_URL}/phraseanet-fpm:${CIRCLE_BRANCH} . + - aws-ecr/push-image: + account-url: AWS_ACCOUNT_URL + repo: "phraseanet-fpm" + tag: "${CIRCLE_BRANCH}" + + build_phraseanet-worker: + machine: + image: ubuntu-1604:201903-01 + docker_layer_caching: true + working_directory: ~/alchemy-fr/Phraseanet + steps: + - checkout + - aws-ecr/ecr-login: + region: AWS_DEFAULT_REGION + - run: docker build --target phraseanet-worker -t ${AWS_ACCOUNT_URL}/phraseanet-worker:${CIRCLE_BRANCH} . + - aws-ecr/push-image: + account-url: AWS_ACCOUNT_URL + repo: "phraseanet-worker" + tag: "${CIRCLE_BRANCH}" + + build_phraseanet-nginx: + machine: + image: ubuntu-1604:201903-01 + docker_layer_caching: true + working_directory: ~/alchemy-fr/Phraseanet + steps: + - checkout + - aws-ecr/ecr-login: + region: AWS_DEFAULT_REGION + - run: docker build --target phraseanet-nginx -t ${AWS_ACCOUNT_URL}/phraseanet-nginx:${CIRCLE_BRANCH} . + - aws-ecr/push-image: + account-url: AWS_ACCOUNT_URL + repo: "phraseanet-nginx" + tag: "${CIRCLE_BRANCH}" + + workflows: version: 2 oldfashion: @@ -114,36 +161,9 @@ workflows: - build newfashion: jobs: - - aws-ecr/build_and_push_image: - account-url: AWS_ACCOUNT_URL - aws-access-key-id: AWS_ACCESS_KEY_ID - aws-secret-access-key: AWS_SECRET_ACCESS_KEY + - build_phraseanet-fpm: context: "AWS London" - create-repo: true - dockerfile: Dockerfile - extra-build-args: "--target phraseanet-fpm" - region: AWS_DEFAULT_REGION - repo: "${AWS_RESOURCE_NAME_PREFIX}/phraseanet" - tag: "alpha-0.1" - - aws-ecr/build_and_push_image: - account-url: AWS_ACCOUNT_URL - aws-access-key-id: AWS_ACCESS_KEY_ID - aws-secret-access-key: AWS_SECRET_ACCESS_KEY + - build_phraseanet-worker: context: "AWS London" - create-repo: true - dockerfile: Dockerfile - extra-build-args: "--target phraseanet-nginx" - region: AWS_DEFAULT_REGION - repo: "${AWS_RESOURCE_NAME_PREFIX}/phraseanet-nginx" - tag: "alpha-0.1" - - aws-ecr/build_and_push_image: - account-url: AWS_ACCOUNT_URL - aws-access-key-id: AWS_ACCESS_KEY_ID - aws-secret-access-key: AWS_SECRET_ACCESS_KEY + - build_phraseanet-nginx: context: "AWS London" - create-repo: true - dockerfile: Dockerfile - extra-build-args: "--target phraseanet-worker" - region: AWS_DEFAULT_REGION - repo: "${AWS_RESOURCE_NAME_PREFIX}/phraseanet" - tag: "alpha-0.1" diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..9754e0bf0b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +.circleci +.git +.settings +nodes_modules +vendor + + + + + + + diff --git a/Dockerfile b/Dockerfile index 7ff718ab2c..62462f844c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,10 @@ -FROM php:7.0-fpm-stretch as builder +######################################################################### +# This image contains every build tools that will be used by the builder and +# the app images (usefull in dev mode) +######################################################################### + +FROM php:7.0-fpm-stretch as phraseanet-system RUN apt-get update \ && apt-get install -y \ apt-transport-https \ @@ -23,6 +28,7 @@ RUN apt-get update \ libxslt-dev \ libzmq3-dev \ locales \ + gettext \ mcrypt \ swftools \ unoconv \ @@ -40,7 +46,7 @@ RUN apt-get update \ && rm -rf /var/lib/apt/lists/* RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ - && php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ + && php -r "if (hash_file('sha384', 'composer-setup.php') === 'baf1608c33254d00611ac1705c1d9958c817a1a33bce370c0595974b342601bd80b92a3f46067da89e3b06bff421f182') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ && php composer-setup.php --install-dir=/usr/local/bin --filename=composer \ && php -r "unlink('composer-setup.php');" @@ -61,9 +67,19 @@ RUN mkdir /entrypoint /var/alchemy \ && mkdir -p /home/app/.composer \ && chown -R app: /home/app /var/alchemy +######################################################################### +# This image is used to build the apps +######################################################################### + +FROM phraseanet-system as builder + WORKDIR /var/alchemy/ +# Files that are needed at build stage + COPY gulpfile.js /var/alchemy/ +COPY www/include /var/alchemy/www/include +COPY www/scripts/apps /var/alchemy/www/scripts/apps COPY Makefile /var/alchemy/ COPY package.json /var/alchemy/ COPY phpunit.xml.dist /var/alchemy/ @@ -73,11 +89,16 @@ COPY composer.json /var/alchemy/ COPY composer.lock /var/alchemy/ RUN make install_composer COPY resources /var/alchemy/resources -COPY www /var/alchemy/www + +# Application build phase + RUN make clean_assets RUN make install_asset_dependencies RUN make install_assets +# Application code + +COPY www /var/alchemy/www ADD ./docker/phraseanet/ / COPY lib /var/alchemy/lib COPY tmp /var/alchemy/tmp @@ -87,55 +108,8 @@ COPY templates-profiler /var/alchemy/templates-profiler COPY templates /var/alchemy/templates COPY tests /var/alchemy/tests -# Phraseanet -FROM php:7.0-fpm-stretch as phraseanet-fpm -RUN apt-get update \ - && apt-get install -y \ - apt-transport-https \ - ca-certificates \ - gnupg2 \ - && apt-get update \ - && apt-get install -y --no-install-recommends zlib1g-dev \ - gettext \ - git \ - ghostscript \ - gpac \ - imagemagick \ - libav-tools \ - libfreetype6-dev \ - libicu-dev \ - libjpeg62-turbo-dev \ - libmagickwand-dev \ - libmcrypt-dev \ - libpng-dev \ - librabbitmq-dev \ - libssl-dev \ - libxslt-dev \ - libzmq3-dev \ - locales \ - mcrypt \ - swftools \ - unoconv \ - unzip \ - 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/ \ - && 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 \ - && docker-php-ext-enable redis amqp zmq imagick \ - && pecl clear-cache \ - && docker-php-source delete \ - && rm -rf /var/lib/apt/lists/* +# Create needed folders -RUN mkdir /entrypoint /var/alchemy \ - && useradd -u 1000 app \ - && mkdir -p /home/app/.composer \ - && chown -R app: /home/app /var/alchemy - -COPY --from=builder --chown=app /var/alchemy /var/alchemy/Phraseanet -ADD ./docker/phraseanet/ / RUN mkdir -p /var/alchemy/Phraseanet/logs \ && chmod -R 777 /var/alchemy/Phraseanet/logs \ && mkdir -p /var/alchemy/Phraseanet/cache \ @@ -148,15 +122,30 @@ RUN mkdir -p /var/alchemy/Phraseanet/logs \ && chmod -R 777 /var/alchemy/Phraseanet/www/custom \ && mkdir -p /var/alchemy/Phraseanet/config \ && chmod -R 777 /var/alchemy/Phraseanet/config + +######################################################################### +# Phraseanet web application image +######################################################################### + +FROM phraseanet-system as phraseanet-fpm + +COPY --from=builder --chown=app /var/alchemy /var/alchemy/Phraseanet +ADD ./docker/phraseanet/ / WORKDIR /var/alchemy/Phraseanet ENTRYPOINT ["/phraseanet-entrypoint.sh"] CMD ["/boot.sh"] -# phraseanet-worker +######################################################################### +# Phraseanet worker application image +######################################################################### + FROM phraseanet-fpm as phraseanet-worker CMD ["/worker-boot.sh"] +######################################################################### # phraseanet-nginx +######################################################################### + FROM nginx:1.15 as phraseanet-nginx RUN useradd -u 1000 app ADD ./docker/nginx/ / diff --git a/Dockerfile-debug b/Dockerfile-debug deleted file mode 100644 index ac52e11669..0000000000 --- a/Dockerfile-debug +++ /dev/null @@ -1,18 +0,0 @@ -ARG phraseanet -FROM $phraseanet - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - iproute2 \ - && rm -rf /var/lib/apt/lists/* \ - && pecl install xdebug \ - && docker-php-ext-enable xdebug \ - && pecl clear-cache - -ADD ./docker/phraseanet-debug/ / - -RUN chmod +x /entrypoint.sh /usr/local/bin/docker-* - -ENTRYPOINT ["/entrypoint.sh"] - -CMD ["php-fpm"] diff --git a/README.md b/README.md index 9fb4237d25..0105de60fa 100644 --- a/README.md +++ b/README.md @@ -63,14 +63,16 @@ The docker distribution come with 3 differents containers : ## How to build -The three images can be built respectively with these commands : +You can build all the images with the following command at the root directory, choosing an arbirary TAG name : - # nginx server - docker build --target phraseanet-nginx -t local/phraseanet-nginx . + ./build.sh - # php-fpm application - docker build --target phraseanet-fpm -t local/phraseanet-fpm . +It will build and tag the following images : - # worker - docker build --target phraseanet-worker -t local/phraseanet-worker . + local/phraseanet-worker: + local/phraseanet-fpm: + local/phraseanet-nginx: +# Deploy the application + +Once the images are built, you can deploy the entire phraseanet stack using the repository : https://github.com/alchemy-fr/phraseanet-docker and follow the instruction inside its `README.md` file. diff --git a/build.sh b/build.sh new file mode 100755 index 0000000000..60e95a3b7d --- /dev/null +++ b/build.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +set -xe + +# nginx server +docker build --target phraseanet-nginx -t local/phraseanet-nginx:$1 . + +# php-fpm application +docker build --target phraseanet-fpm -t local/phraseanet-fpm:$1 . + +# worker +docker build --target phraseanet-worker -t local/phraseanet-worker:$1 . + diff --git a/cache/.gitkeep b/cache/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/composer.json b/composer.json index 47635b0e47..7497b86823 100644 --- a/composer.json +++ b/composer.json @@ -84,7 +84,7 @@ "league/flysystem": "^1.0", "league/flysystem-aws-s3-v2": "^1.0", "league/fractal": "dev-webgalleries#af1acc0275438571bc8c1d08a05a4b5af92c9f97 as 0.13.0", - "media-alchemyst/media-alchemyst": "^0.5", + "media-alchemyst/media-alchemyst": "^0.5.5", "monolog/monolog": "~1.3", "mrclay/minify": "~2.1.6", "neutron/process-manager": "2.0.x-dev@dev", diff --git a/composer.lock b/composer.lock index 482cce9daf..7c347581f1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "e5bed7b0b8cb8b45ffffc4965a7689db", - "content-hash": "f3b1fc0a30bf14b05e57ce673550d9c0", + "content-hash": "d0c8742d02e8d51c702c26ecb5502b30", "packages": [ { "name": "alchemy-fr/tcpdf-clone", @@ -71,7 +70,7 @@ "source": "https://github.com/alchemy-fr/tcpdf-clone/tree/6.0.039", "issues": "https://github.com/alchemy-fr/tcpdf-clone/issues" }, - "time": "2013-10-13 16:11:17" + "time": "2013-10-13T16:11:17+00:00" }, { "name": "alchemy/binary-driver", @@ -128,7 +127,7 @@ "binary", "driver" ], - "time": "2016-03-02 13:49:15" + "time": "2016-03-02T13:49:15+00:00" }, { "name": "alchemy/embed-bundle", @@ -172,7 +171,7 @@ } ], "description": "Embed resources bundle", - "time": "2019-10-09 14:34:23" + "time": "2019-10-09T14:34:23+00:00" }, { "name": "alchemy/geonames-api-consumer", @@ -210,7 +209,7 @@ "keywords": [ "geonames" ], - "time": "2014-02-05 15:29:39" + "time": "2014-02-05T15:29:39+00:00" }, { "name": "alchemy/ghostscript", @@ -262,7 +261,7 @@ "ghostscript", "pdf" ], - "time": "2013-06-25 09:12:58" + "time": "2013-06-25T09:12:58+00:00" }, { "name": "alchemy/mediavorus", @@ -324,7 +323,7 @@ "keywords": [ "metadata" ], - "time": "2019-01-22 11:23:34" + "time": "2019-01-22T11:23:34+00:00" }, { "name": "alchemy/oauth2php", @@ -347,7 +346,7 @@ ] }, "notification-url": "https://packagist.org/downloads/", - "time": "2019-01-17 14:34:10" + "time": "2019-01-17T14:34:10+00:00" }, { "name": "alchemy/phlickr", @@ -370,7 +369,7 @@ } }, "notification-url": "https://packagist.org/downloads/", - "time": "2014-12-15 14:27:57" + "time": "2014-12-15T14:27:57+00:00" }, { "name": "alchemy/phpexiftool", @@ -443,7 +442,7 @@ "exiftool", "metadata" ], - "time": "2019-02-13 13:06:43" + "time": "2019-02-13T13:06:43+00:00" }, { "name": "alchemy/queue-bundle", @@ -491,7 +490,7 @@ } ], "description": "Symfony bundle for alchemy/queue-component", - "time": "2016-10-04 14:19:39" + "time": "2016-10-04T14:19:39+00:00" }, { "name": "alchemy/queue-component", @@ -536,7 +535,7 @@ "MIT" ], "description": "Message queue component", - "time": "2016-10-05 10:41:36" + "time": "2016-10-05T10:41:36+00:00" }, { "name": "alchemy/rest-bundle", @@ -588,7 +587,7 @@ } ], "description": "Simple REST utility bundle", - "time": "2016-05-16 09:37:34" + "time": "2016-05-16T09:37:34+00:00" }, { "name": "alchemy/symfony-cors", @@ -635,7 +634,7 @@ } ], "description": "A library that adds CORS services to Silex/Symfony Applications", - "time": "2015-12-17 15:34:43" + "time": "2015-12-17T15:34:43+00:00" }, { "name": "alchemy/task-manager", @@ -698,7 +697,7 @@ "parallel", "process" ], - "time": "2016-11-30 13:34:30" + "time": "2016-11-30T13:34:30+00:00" }, { "name": "alchemy/worker-bundle", @@ -747,7 +746,7 @@ } ], "description": "Symfony bundle for alchemy/worker-component", - "time": "2016-12-06 10:39:58" + "time": "2016-12-06T10:39:58+00:00" }, { "name": "alchemy/worker-component", @@ -793,7 +792,7 @@ "MIT" ], "description": "Message queue worker component", - "time": "2016-11-14 16:41:16" + "time": "2016-11-14T16:41:16+00:00" }, { "name": "alchemy/zippy", @@ -855,7 +854,7 @@ "tar", "zip" ], - "time": "2016-02-15 22:46:40" + "time": "2016-02-15T22:46:40+00:00" }, { "name": "aws/aws-sdk-php", @@ -918,7 +917,7 @@ "s3", "sdk" ], - "time": "2016-07-25 18:03:20" + "time": "2016-07-25T18:03:20+00:00" }, { "name": "beberlei/assert", @@ -973,7 +972,7 @@ "assertion", "validation" ], - "time": "2017-01-24 15:14:39" + "time": "2017-01-24T15:14:39+00:00" }, { "name": "behat/transliterator", @@ -1013,7 +1012,7 @@ "slug", "transliterator" ], - "time": "2015-09-28 16:26:35" + "time": "2015-09-28T16:26:35+00:00" }, { "name": "box/spout", @@ -1081,7 +1080,7 @@ "write", "xlsx" ], - "time": "2017-09-25 19:44:35" + "time": "2017-09-25T19:44:35+00:00" }, { "name": "cocur/slugify", @@ -1145,7 +1144,7 @@ "slug", "slugify" ], - "time": "2016-08-09 20:10:17" + "time": "2016-08-09T20:10:17+00:00" }, { "name": "czproject/git-php", @@ -1187,7 +1186,7 @@ "keywords": [ "git" ], - "time": "2019-02-09 13:11:36" + "time": "2019-02-09T13:11:36+00:00" }, { "name": "dailymotion/sdk", @@ -1220,7 +1219,7 @@ "dailymotion", "sdk" ], - "time": "2015-11-20 11:18:32" + "time": "2015-11-20T11:18:32+00:00" }, { "name": "data-uri/data-uri", @@ -1265,7 +1264,7 @@ "data-uri", "uri" ], - "time": "2014-08-22 15:01:57" + "time": "2014-08-22T15:01:57+00:00" }, { "name": "dflydev/doctrine-orm-service-provider", @@ -1327,7 +1326,7 @@ "pimple", "silex" ], - "time": "2015-09-07 12:16:54" + "time": "2015-09-07T12:16:54+00:00" }, { "name": "doctrine/annotations", @@ -1395,7 +1394,7 @@ "docblock", "parser" ], - "time": "2015-08-31 12:32:49" + "time": "2015-08-31T12:32:49+00:00" }, { "name": "doctrine/cache", @@ -1407,7 +1406,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", "shasum": "" }, @@ -1465,7 +1464,7 @@ "cache", "caching" ], - "time": "2016-10-29 11:16:17" + "time": "2016-10-29T11:16:17+00:00" }, { "name": "doctrine/collections", @@ -1531,7 +1530,7 @@ "collections", "iterator" ], - "time": "2015-04-14 22:21:58" + "time": "2015-04-14T22:21:58+00:00" }, { "name": "doctrine/common", @@ -1604,7 +1603,7 @@ "persistence", "spl" ], - "time": "2016-11-30 16:50:46" + "time": "2016-11-30T16:50:46+00:00" }, { "name": "doctrine/dbal", @@ -1675,7 +1674,7 @@ "persistence", "queryobject" ], - "time": "2017-01-23 23:17:10" + "time": "2017-01-23T23:17:10+00:00" }, { "name": "doctrine/inflector", @@ -1742,7 +1741,7 @@ "singularize", "string" ], - "time": "2015-11-06 14:35:42" + "time": "2015-11-06T14:35:42+00:00" }, { "name": "doctrine/instantiator", @@ -1796,7 +1795,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "doctrine/lexer", @@ -1850,7 +1849,7 @@ "lexer", "parser" ], - "time": "2014-09-09 13:34:57" + "time": "2014-09-09T13:34:57+00:00" }, { "name": "doctrine/migrations", @@ -1924,7 +1923,7 @@ "database", "migrations" ], - "time": "2016-12-25 22:54:00" + "time": "2016-12-25T22:54:00+00:00" }, { "name": "doctrine/orm", @@ -2000,7 +1999,7 @@ "database", "orm" ], - "time": "2016-12-18 15:42:34" + "time": "2016-12-18T15:42:34+00:00" }, { "name": "elasticsearch/elasticsearch", @@ -2054,7 +2053,7 @@ "elasticsearch", "search" ], - "time": "2016-11-30 17:15:05" + "time": "2016-11-30T17:15:05+00:00" }, { "name": "evenement/evenement", @@ -2094,7 +2093,7 @@ "keywords": [ "event-dispatcher" ], - "time": "2012-05-30 15:01:08" + "time": "2012-05-30T15:01:08+00:00" }, { "name": "facebook/graph-sdk", @@ -2152,7 +2151,7 @@ "facebook", "sdk" ], - "time": "2017-08-16 17:28:07" + "time": "2017-08-16T17:28:07+00:00" }, { "name": "firebase/php-jwt", @@ -2195,7 +2194,7 @@ ], "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", "homepage": "https://github.com/firebase/php-jwt", - "time": "2015-07-22 18:31:08" + "time": "2015-07-22T18:31:08+00:00" }, { "name": "gedmo/doctrine-extensions", @@ -2273,7 +2272,7 @@ "tree", "uploadable" ], - "time": "2015-02-24 21:41:37" + "time": "2015-02-24T21:41:37+00:00" }, { "name": "goodby/csv", @@ -2330,7 +2329,7 @@ "export", "import" ], - "time": "2015-06-29 10:28:19" + "time": "2015-06-29T10:28:19+00:00" }, { "name": "google/apiclient", @@ -2389,7 +2388,7 @@ "keywords": [ "google" ], - "time": "2017-11-03 01:19:53" + "time": "2017-11-03T01:19:53+00:00" }, { "name": "google/apiclient-services", @@ -2426,7 +2425,7 @@ "keywords": [ "google" ], - "time": "2017-11-25 00:23:12" + "time": "2017-11-25T00:23:12+00:00" }, { "name": "google/auth", @@ -2471,7 +2470,7 @@ "google", "oauth2" ], - "time": "2017-10-10 17:01:45" + "time": "2017-10-10T17:01:45+00:00" }, { "name": "google/recaptcha", @@ -2516,7 +2515,7 @@ "recaptcha", "spam" ], - "time": "2017-03-09 18:44:34" + "time": "2017-03-09T18:44:34+00:00" }, { "name": "guzzle/guzzle", @@ -2612,7 +2611,7 @@ "web service" ], "abandoned": "guzzlehttp/guzzle", - "time": "2015-03-18 18:23:50" + "time": "2015-03-18T18:23:50+00:00" }, { "name": "guzzlehttp/guzzle", @@ -2677,7 +2676,7 @@ "rest", "web service" ], - "time": "2017-06-22 18:50:49" + "time": "2017-06-22T18:50:49+00:00" }, { "name": "guzzlehttp/promises", @@ -2728,7 +2727,7 @@ "keywords": [ "promise" ], - "time": "2016-12-20 10:07:11" + "time": "2016-12-20T10:07:11+00:00" }, { "name": "guzzlehttp/psr7", @@ -2793,7 +2792,7 @@ "uri", "url" ], - "time": "2017-03-20 17:10:46" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "guzzlehttp/ringphp", @@ -2844,7 +2843,7 @@ } ], "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", - "time": "2015-05-20 03:37:09" + "time": "2015-05-20T03:37:09+00:00" }, { "name": "guzzlehttp/streams", @@ -2894,7 +2893,7 @@ "Guzzle", "stream" ], - "time": "2014-10-12 19:18:40" + "time": "2014-10-12T19:18:40+00:00" }, { "name": "hoa/compiler", @@ -2974,7 +2973,7 @@ "trace", "uniform" ], - "time": "2015-10-29 21:35:12" + "time": "2015-10-29T21:35:12+00:00" }, { "name": "hoa/console", @@ -3046,7 +3045,7 @@ "tput", "window" ], - "time": "2015-07-27 07:52:10" + "time": "2015-07-27T07:52:10+00:00" }, { "name": "hoa/core", @@ -3114,7 +3113,7 @@ "protocol" ], "abandoned": "hoa/consistency", - "time": "2015-11-09 06:51:06" + "time": "2015-11-09T06:51:06+00:00" }, { "name": "hoa/dispatcher", @@ -3174,7 +3173,7 @@ "kit", "library" ], - "time": "2015-11-09 06:52:08" + "time": "2015-11-09T06:52:08+00:00" }, { "name": "hoa/file", @@ -3234,7 +3233,7 @@ "link", "temporary" ], - "time": "2015-11-09 06:55:20" + "time": "2015-11-09T06:55:20+00:00" }, { "name": "hoa/iterator", @@ -3287,7 +3286,7 @@ "iterator", "library" ], - "time": "2015-10-29 21:37:16" + "time": "2015-10-29T21:37:16+00:00" }, { "name": "hoa/math", @@ -3349,7 +3348,7 @@ "sampler", "set" ], - "time": "2015-10-26 15:22:52" + "time": "2015-10-26T15:22:52+00:00" }, { "name": "hoa/regex", @@ -3403,7 +3402,7 @@ "library", "regex" ], - "time": "2015-08-13 06:48:47" + "time": "2015-08-13T06:48:47+00:00" }, { "name": "hoa/router", @@ -3455,7 +3454,7 @@ "library", "router" ], - "time": "2015-10-21 14:12:51" + "time": "2015-10-21T14:12:51+00:00" }, { "name": "hoa/stream", @@ -3513,7 +3512,7 @@ "stream", "wrapper" ], - "time": "2015-10-26 12:21:43" + "time": "2015-10-26T12:21:43+00:00" }, { "name": "hoa/ustring", @@ -3572,7 +3571,7 @@ "string", "unicode" ], - "time": "2015-11-09 06:44:33" + "time": "2015-11-09T06:44:33+00:00" }, { "name": "hoa/visitor", @@ -3627,7 +3626,7 @@ "visit", "visitor" ], - "time": "2015-08-17 06:30:58" + "time": "2015-08-17T06:30:58+00:00" }, { "name": "igorw/get-in", @@ -3672,7 +3671,7 @@ "assoc-array", "hash-map" ], - "time": "2014-12-15 23:03:51" + "time": "2014-12-15T23:03:51+00:00" }, { "name": "imagine/imagine", @@ -3731,7 +3730,7 @@ "support": { "source": "https://github.com/alchemy-fr/Imagine/tree/alchemy-0.6.2" }, - "time": "2015-01-13 18:12:26" + "time": "2015-01-13T18:12:26+00:00" }, { "name": "ircmaxell/password-compat", @@ -3773,7 +3772,7 @@ "hashing", "password" ], - "time": "2014-11-20 16:49:30" + "time": "2014-11-20T16:49:30+00:00" }, { "name": "ircmaxell/security-lib", @@ -3819,7 +3818,7 @@ ], "description": "A Base Security Library", "homepage": "https://github.com/ircmaxell/SecurityLib", - "time": "2015-03-20 14:31:23" + "time": "2015-03-20T14:31:23+00:00" }, { "name": "jms/metadata", @@ -3870,7 +3869,7 @@ "xml", "yaml" ], - "time": "2016-12-05 10:18:33" + "time": "2016-12-05T10:18:33+00:00" }, { "name": "jms/parser-lib", @@ -3905,7 +3904,7 @@ "Apache2" ], "description": "A library for easily creating recursive-descent parsers.", - "time": "2012-11-18 18:08:43" + "time": "2012-11-18T18:08:43+00:00" }, { "name": "jms/serializer", @@ -3975,7 +3974,7 @@ "serialization", "xml" ], - "time": "2014-03-18 08:39:00" + "time": "2014-03-18T08:39:00+00:00" }, { "name": "jms/translation-bundle", @@ -4051,7 +4050,7 @@ "support": { "source": "https://github.com/alchemy-fr/JMSTranslationBundle/tree/rebase-2015-10-20" }, - "time": "2015-11-04 15:09:44" + "time": "2015-11-04T15:09:44+00:00" }, { "name": "justinrainbow/json-schema", @@ -4117,7 +4116,7 @@ "json", "schema" ], - "time": "2016-05-10 20:38:51" + "time": "2016-05-10T20:38:51+00:00" }, { "name": "league/flysystem", @@ -4200,7 +4199,7 @@ "sftp", "storage" ], - "time": "2017-01-30 17:41:17" + "time": "2017-01-30T17:41:17+00:00" }, { "name": "league/flysystem-aws-s3-v2", @@ -4247,7 +4246,7 @@ } ], "description": "Flysystem adapter for AWS S3 SDK v2", - "time": "2015-10-15 15:55:48" + "time": "2015-10-15T15:55:48+00:00" }, { "name": "league/fractal", @@ -4308,20 +4307,20 @@ "league", "rest" ], - "time": "2016-12-02 14:55:48" + "time": "2016-12-02T14:55:48+00:00" }, { "name": "media-alchemyst/media-alchemyst", - "version": "0.5.2", + "version": "0.5.5", "source": { "type": "git", "url": "https://github.com/alchemy-fr/Media-Alchemyst.git", - "reference": "5d2fe6dd95215804202ecf0466fd9cfaeedd0140" + "reference": "3bd3204b69882f495adfb617383a077face92ed0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/Media-Alchemyst/zipball/5d2fe6dd95215804202ecf0466fd9cfaeedd0140", - "reference": "5d2fe6dd95215804202ecf0466fd9cfaeedd0140", + "url": "https://api.github.com/repos/alchemy-fr/Media-Alchemyst/zipball/3bd3204b69882f495adfb617383a077face92ed0", + "reference": "3bd3204b69882f495adfb617383a077face92ed0", "shasum": "" }, "require": { @@ -4333,7 +4332,7 @@ "php": ">=5.3.3", "php-ffmpeg/php-ffmpeg": ">=0.4.2,<0.6", "php-mp4box/php-mp4box": "~0.3.0", - "php-unoconv/php-unoconv": "~0.3.0", + "php-unoconv/php-unoconv": "~0.3.1", "pimple/pimple": "~1.0", "swftools/swftools": "~0.3.0", "symfony/console": "^2.1|^3.0", @@ -4382,7 +4381,7 @@ "video", "video processing" ], - "time": "2019-01-25 12:09:11" + "time": "2019-12-11T07:20:45+00:00" }, { "name": "monolog/monolog", @@ -4460,7 +4459,7 @@ "logging", "psr-3" ], - "time": "2016-11-26 00:15:39" + "time": "2016-11-26T00:15:39+00:00" }, { "name": "mrclay/minify", @@ -4500,7 +4499,7 @@ ], "description": "Minify is a PHP5 app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers", "homepage": "http://code.google.com/p/minify/", - "time": "2013-07-23 19:58:28" + "time": "2013-07-23T19:58:28+00:00" }, { "name": "neutron/process-manager", @@ -4539,7 +4538,7 @@ "homepage": "http://www.lickmychip.com/" } ], - "time": "2014-02-13 20:27:33" + "time": "2014-02-13T20:27:33+00:00" }, { "name": "neutron/recaptcha", @@ -4583,7 +4582,7 @@ } ], "description": "ReCaptcha Client", - "time": "2013-02-14 13:42:00" + "time": "2013-02-14T13:42:00+00:00" }, { "name": "neutron/signal-handler", @@ -4626,7 +4625,7 @@ "keywords": [ "signal" ], - "time": "2014-01-15 17:24:13" + "time": "2014-01-15T17:24:13+00:00" }, { "name": "neutron/silex-filesystem-provider", @@ -4670,7 +4669,7 @@ "silex", "temporary-filesystem" ], - "time": "2012-11-08 21:07:08" + "time": "2012-11-08T21:07:08+00:00" }, { "name": "neutron/silex-imagine-provider", @@ -4717,7 +4716,7 @@ "imagine", "silex" ], - "time": "2013-05-03 18:48:51" + "time": "2013-05-03T18:48:51+00:00" }, { "name": "neutron/temporary-filesystem", @@ -4757,7 +4756,7 @@ } ], "description": "Symfony filesystem extension to handle temporary files", - "time": "2016-03-05 10:22:50" + "time": "2016-03-05T10:22:50+00:00" }, { "name": "nikic/php-parser", @@ -4802,7 +4801,7 @@ "parser", "php" ], - "time": "2015-09-19 14:15:08" + "time": "2015-09-19T14:15:08+00:00" }, { "name": "ocramius/proxy-manager", @@ -4865,7 +4864,7 @@ "proxy pattern", "service proxies" ], - "time": "2015-08-09 04:28:19" + "time": "2015-08-09T04:28:19+00:00" }, { "name": "pagerfanta/pagerfanta", @@ -4932,7 +4931,7 @@ "paginator", "paging" ], - "time": "2016-11-28 09:17:04" + "time": "2016-11-28T09:17:04+00:00" }, { "name": "paragonie/random-lib", @@ -4994,7 +4993,7 @@ "random-numbers", "random-strings" ], - "time": "2017-10-06 23:34:21" + "time": "2017-10-06T23:34:21+00:00" }, { "name": "paragonie/random_compat", @@ -5042,7 +5041,7 @@ "pseudorandom", "random" ], - "time": "2016-11-07 23:38:38" + "time": "2016-11-07T23:38:38+00:00" }, { "name": "paragonie/sodium_compat", @@ -5124,7 +5123,7 @@ "secret-key cryptography", "side-channel resistant" ], - "time": "2019-03-20 17:19:05" + "time": "2019-03-20T17:19:05+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", @@ -5193,7 +5192,7 @@ "video", "video processing" ], - "time": "2014-08-26 08:46:56" + "time": "2014-08-26T08:46:56+00:00" }, { "name": "php-mp4box/php-mp4box", @@ -5244,20 +5243,20 @@ "gpac", "mp4box" ], - "time": "2013-06-25 10:13:06" + "time": "2013-06-25T10:13:06+00:00" }, { "name": "php-unoconv/php-unoconv", - "version": "0.3.0", + "version": "0.3.1", "source": { "type": "git", "url": "https://github.com/alchemy-fr/PHP-Unoconv.git", - "reference": "6d1e14a7467b5d637741396549529dc4d5f9f355" + "reference": "8fa666972f6c13fe9703dfe894cd311a61f89f33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/PHP-Unoconv/zipball/6d1e14a7467b5d637741396549529dc4d5f9f355", - "reference": "6d1e14a7467b5d637741396549529dc4d5f9f355", + "url": "https://api.github.com/repos/alchemy-fr/PHP-Unoconv/zipball/8fa666972f6c13fe9703dfe894cd311a61f89f33", + "reference": "8fa666972f6c13fe9703dfe894cd311a61f89f33", "shasum": "" }, "require": { @@ -5294,7 +5293,7 @@ "keywords": [ "unoconv" ], - "time": "2013-06-25 10:09:59" + "time": "2019-09-16T09:54:30+00:00" }, { "name": "php-xpdf/php-xpdf", @@ -5346,7 +5345,7 @@ "pdf", "xpdf" ], - "time": "2016-07-04 07:30:16" + "time": "2016-07-04T07:30:16+00:00" }, { "name": "phpcollection/phpcollection", @@ -5394,7 +5393,7 @@ "sequence", "set" ], - "time": "2015-05-17 12:39:23" + "time": "2015-05-17T12:39:23+00:00" }, { "name": "phpexiftool/exiftool", @@ -5427,7 +5426,7 @@ "exiftool", "metadatas" ], - "time": "2016-01-25 11:10:14" + "time": "2016-01-25T11:10:14+00:00" }, { "name": "phpoption/phpoption", @@ -5477,7 +5476,7 @@ "php", "type" ], - "time": "2015-07-25 16:39:46" + "time": "2015-07-25T16:39:46+00:00" }, { "name": "phpseclib/phpseclib", @@ -5569,7 +5568,7 @@ "x.509", "x509" ], - "time": "2017-10-23 05:04:54" + "time": "2017-10-23T05:04:54+00:00" }, { "name": "pimple/pimple", @@ -5615,7 +5614,7 @@ "container", "dependency injection" ], - "time": "2013-11-22 08:30:29" + "time": "2013-11-22T08:30:29+00:00" }, { "name": "psr/cache", @@ -5661,7 +5660,7 @@ "psr", "psr-6" ], - "time": "2016-08-06 20:24:11" + "time": "2016-08-06T20:24:11+00:00" }, { "name": "psr/http-message", @@ -5711,7 +5710,7 @@ "request", "response" ], - "time": "2016-08-06 14:39:51" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "psr/log", @@ -5758,7 +5757,7 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "ramsey/uuid", @@ -5840,7 +5839,7 @@ "identifier", "uuid" ], - "time": "2016-11-22 19:21:44" + "time": "2016-11-22T19:21:44+00:00" }, { "name": "react/promise", @@ -5883,7 +5882,7 @@ "promise", "promises" ], - "time": "2016-12-22 14:09:01" + "time": "2016-12-22T14:09:01+00:00" }, { "name": "roave/security-advisories", @@ -6008,7 +6007,7 @@ } ], "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "time": "2017-01-24 18:32:04" + "time": "2017-01-24T18:32:04+00:00" }, { "name": "seld/jsonlint", @@ -6054,7 +6053,7 @@ "parser", "validator" ], - "time": "2016-11-14 17:59:58" + "time": "2016-11-14T17:59:58+00:00" }, { "name": "silex/silex", @@ -6132,7 +6131,7 @@ "microframework" ], "abandoned": "symfony/flex", - "time": "2016-01-06 14:59:35" + "time": "2016-01-06T14:59:35+00:00" }, { "name": "silex/web-profiler", @@ -6178,7 +6177,7 @@ "description": "A WebProfiler for Silex", "homepage": "http://silex.sensiolabs.org/", "abandoned": true, - "time": "2016-01-10 11:39:13" + "time": "2016-01-10T11:39:13+00:00" }, { "name": "simple-bus/doctrine-orm-bridge", @@ -6232,7 +6231,7 @@ "doctrine", "event bus" ], - "time": "2015-04-29 12:27:27" + "time": "2015-04-29T12:27:27+00:00" }, { "name": "simple-bus/jms-serializer-bridge", @@ -6281,7 +6280,7 @@ "message", "serialization" ], - "time": "2015-07-29 07:48:42" + "time": "2015-07-29T07:48:42+00:00" }, { "name": "simple-bus/message-bus", @@ -6331,7 +6330,7 @@ "message", "message bus" ], - "time": "2016-02-12 08:35:53" + "time": "2016-02-12T08:35:53+00:00" }, { "name": "simple-bus/serialization", @@ -6379,7 +6378,7 @@ "messages", "serialization" ], - "time": "2015-05-08 13:34:17" + "time": "2015-05-08T13:34:17+00:00" }, { "name": "sorien/silex-dbal-profiler", @@ -6427,7 +6426,7 @@ "profiler", "silex" ], - "time": "2016-10-26 11:08:02" + "time": "2016-10-26T11:08:02+00:00" }, { "name": "sorien/silex-pimple-dumper", @@ -6469,7 +6468,7 @@ "plugin", "silex" ], - "time": "2015-11-11 07:16:28" + "time": "2015-11-11T07:16:28+00:00" }, { "name": "swftools/swftools", @@ -6523,7 +6522,7 @@ "flash", "swf" ], - "time": "2013-07-03 13:11:36" + "time": "2013-07-03T13:11:36+00:00" }, { "name": "swiftmailer/swiftmailer", @@ -6577,7 +6576,7 @@ "mail", "mailer" ], - "time": "2016-12-29 10:02:40" + "time": "2016-12-29T10:02:40+00:00" }, { "name": "symfony/polyfill-apcu", @@ -6630,7 +6629,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-intl-icu", @@ -6688,7 +6687,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -6747,7 +6746,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-php54", @@ -6805,7 +6804,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-php55", @@ -6861,7 +6860,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-php56", @@ -6917,7 +6916,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-php70", @@ -6976,7 +6975,7 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/polyfill-util", @@ -7028,7 +7027,7 @@ "polyfill", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2016-11-14T01:06:16+00:00" }, { "name": "symfony/security-acl", @@ -7089,7 +7088,7 @@ ], "description": "Symfony Security Component - ACL (Access Control List)", "homepage": "https://symfony.com", - "time": "2015-12-28 09:39:46" + "time": "2015-12-28T09:39:46+00:00" }, { "name": "symfony/symfony", @@ -7224,7 +7223,7 @@ "keywords": [ "framework" ], - "time": "2017-01-12 20:27:46" + "time": "2017-01-12T20:27:46+00:00" }, { "name": "themattharris/tmhoauth", @@ -7266,7 +7265,7 @@ "oauth", "twitter" ], - "time": "2014-08-06 22:29:35" + "time": "2014-08-06T22:29:35+00:00" }, { "name": "twig/extensions", @@ -7318,7 +7317,7 @@ "i18n", "text" ], - "time": "2016-10-25 17:34:14" + "time": "2016-10-25T17:34:14+00:00" }, { "name": "twig/twig", @@ -7379,7 +7378,7 @@ "keywords": [ "templating" ], - "time": "2017-01-11 19:36:15" + "time": "2017-01-11T19:36:15+00:00" }, { "name": "vierbergenlars/php-semver", @@ -7427,7 +7426,7 @@ "semver", "versioning" ], - "time": "2013-09-20 10:41:27" + "time": "2013-09-20T10:41:27+00:00" }, { "name": "webmozart/assert", @@ -7477,7 +7476,7 @@ "check", "validate" ], - "time": "2016-11-23 20:04:58" + "time": "2016-11-23T20:04:58+00:00" }, { "name": "webmozart/json", @@ -7526,7 +7525,7 @@ } ], "description": "A robust JSON decoder/encoder with support for schema validation.", - "time": "2016-01-14 12:11:46" + "time": "2016-01-14T12:11:46+00:00" }, { "name": "webmozart/path-util", @@ -7572,7 +7571,7 @@ } ], "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", - "time": "2015-12-17 08:42:14" + "time": "2015-12-17T08:42:14+00:00" }, { "name": "willdurand/negotiation", @@ -7624,7 +7623,7 @@ "header", "negotiation" ], - "time": "2016-10-14 09:17:47" + "time": "2016-10-14T09:17:47+00:00" }, { "name": "zend/gdata", @@ -7665,7 +7664,7 @@ "gdata", "zend" ], - "time": "2013-01-30 15:31:21" + "time": "2013-01-30T15:31:21+00:00" }, { "name": "zendframework/zend-code", @@ -7717,7 +7716,7 @@ "code", "zf2" ], - "time": "2016-04-20 17:26:42" + "time": "2016-04-20T17:26:42+00:00" }, { "name": "zendframework/zend-eventmanager", @@ -7771,7 +7770,7 @@ "events", "zf2" ], - "time": "2016-02-18 20:53:00" + "time": "2016-02-18T20:53:00+00:00" } ], "packages-dev": [ @@ -7819,7 +7818,7 @@ ], "description": "Virtual file system to mock the real file system in unit tests.", "homepage": "http://vfs.bovigo.org/", - "time": "2016-07-18 14:02:57" + "time": "2016-07-18T14:02:57+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -7873,7 +7872,7 @@ "reflection", "static analysis" ], - "time": "2015-12-27 11:43:31" + "time": "2015-12-27T11:43:31+00:00" }, { "name": "phpdocumentor/reflection-docblock", @@ -7918,7 +7917,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" + "time": "2016-09-30T07:12:33+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -7965,7 +7964,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2016-11-25 06:54:22" + "time": "2016-11-25T06:54:22+00:00" }, { "name": "phpspec/prophecy", @@ -8028,7 +8027,7 @@ "spy", "stub" ], - "time": "2016-11-21 14:58:47" + "time": "2016-11-21T14:58:47+00:00" }, { "name": "phpunit/php-code-coverage", @@ -8090,7 +8089,7 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8137,7 +8136,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03 07:40:28" + "time": "2016-10-03T07:40:28+00:00" }, { "name": "phpunit/php-text-template", @@ -8178,7 +8177,7 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", @@ -8222,7 +8221,7 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2016-05-12T18:03:57+00:00" }, { "name": "phpunit/php-token-stream", @@ -8271,7 +8270,7 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15 14:06:22" + "time": "2016-11-15T14:06:22+00:00" }, { "name": "phpunit/phpunit", @@ -8343,7 +8342,7 @@ "testing", "xunit" ], - "time": "2017-01-26 16:15:36" + "time": "2017-01-26T16:15:36+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -8400,7 +8399,7 @@ "xunit" ], "abandoned": true, - "time": "2015-10-02 06:51:40" + "time": "2015-10-02T06:51:40+00:00" }, { "name": "sebastian/comparator", @@ -8464,7 +8463,7 @@ "compare", "equality" ], - "time": "2017-01-29 09:50:25" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", @@ -8516,7 +8515,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2015-12-08T07:14:41+00:00" }, { "name": "sebastian/environment", @@ -8566,7 +8565,7 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", @@ -8633,7 +8632,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/global-state", @@ -8684,7 +8683,7 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/recursion-context", @@ -8737,7 +8736,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-11-11 19:50:13" + "time": "2015-11-11T19:50:13+00:00" }, { "name": "sebastian/version", @@ -8772,7 +8771,7 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" + "time": "2015-06-21T13:59:46+00:00" } ], "aliases": [ diff --git a/docker/nginx/boot.sh b/docker/nginx/boot.sh index 49e6b8a3b7..2684d8c0f7 100755 --- a/docker/nginx/boot.sh +++ b/docker/nginx/boot.sh @@ -1,4 +1,6 @@ #!/bin/bash -cat nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/nginx.conf +set -xe + +cat nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/conf.d/default.conf nginx -g "daemon off;" diff --git a/docker/nginx/etc/nginx/nginx.conf b/docker/nginx/etc/nginx/nginx.conf new file mode 100755 index 0000000000..71a94ee98f --- /dev/null +++ b/docker/nginx/etc/nginx/nginx.conf @@ -0,0 +1,31 @@ + +user app; +worker_processes 1; + +error_log /var/log/ngnix_error.log info; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + #tcp_nopush on; + + keepalive_timeout 65; + + #gzip on; + + include /etc/nginx/conf.d/*.conf; + +} diff --git a/docker/nginx/nginx.conf.sample b/docker/nginx/nginx.conf.sample index c1f0150c1e..ad015e7c5a 100644 --- a/docker/nginx/nginx.conf.sample +++ b/docker/nginx/nginx.conf.sample @@ -1,85 +1,39 @@ -user app; -worker_processes auto; - -#error_log /var/log/ngnix_error.log info; -error_log /dev/stdout info; - -pid /var/run/nginx.pid; -#daemon off; - -events { - worker_connections 1024; - multi_accept on; +upstream backend { + server phraseanet:9000; } -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - server_tokens off; +server { + listen 80; + root /var/alchemy/Phraseanet/www; - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; + index index.php; + client_max_body_size $MAX_BODY_SIZE; - access_log /dev/stdout main; - - sendfile on; - #tcp_nopush on; - - keepalive_timeout 65; - - #gzip on; - - reset_timedout_connection on; - - proxy_connect_timeout 300s; - proxy_send_timeout 300s; - proxy_read_timeout 300s; - fastcgi_send_timeout 300s; - fastcgi_read_timeout 300; - - resolver 127.0.0.11; - - upstream backend { - server phraseanet:9000; + location /api { + rewrite ^(.*)$ /api.php/$1 last; } - server { - listen 80; - server_name localhost; - error_log on; - access_log on; - root /var/alchemy/Phraseanet/www; + location / { + # First attempt to serve request as file, then + # as directory, then fall back to index.html + try_files $uri $uri/ @rewriteapp; + } - index index.php; - client_max_body_size $MAX_BODY_SIZE; + location @rewriteapp { + rewrite ^(.*)$ /index.php/$1 last; + } - location /api { - rewrite ^(.*)$ /api.php/$1 last; - } + # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000 + location ~ ^/(index|index_dev|api)\.php(/|$) { + fastcgi_pass backend; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } - location / { - # First attempt to serve request as file, then - # as directory, then fall back to index.html - try_files $uri $uri/ @rewriteapp; - } - - location @rewriteapp { - rewrite ^(.*)$ /index.php/$1 last; - } - - # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000 - location ~ ^/(index|index_dev|api)\.php(/|$) { - fastcgi_pass backend; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - } - - location ~ ^/(status|ping)$ { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_pass backend; - } + location ~ ^/(status|ping)$ { + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_pass backend; } } diff --git a/docker/phraseanet/auto-install.sh b/docker/phraseanet/auto-install.sh index 4028e5a614..b69490fd03 100755 --- a/docker/phraseanet/auto-install.sh +++ b/docker/phraseanet/auto-install.sh @@ -2,6 +2,16 @@ set -xe +if [ $INSTALL_ACCOUNT_EMAIL = ""]; then + echo "INSTALL_ACCOUNT_EMAIL var is not set." + exit 1 +fi + +if [ $INSTALL_ACCOUNT_PASSWORD = ""]; then + echo "INSTALL_ACCOUNT_PASSWORD var is not set." + exit 1 +fi + /var/alchemy/Phraseanet/bin/setup system:install \ --email=$INSTALL_ACCOUNT_EMAIL \ --password=$INSTALL_ACCOUNT_PASSWORD \ diff --git a/docker/phraseanet/boot.sh b/docker/phraseanet/boot.sh index 4b2cf2baa2..444b63a64c 100755 --- a/docker/phraseanet/boot.sh +++ b/docker/phraseanet/boot.sh @@ -1,5 +1,11 @@ #!/bin/bash +set -xe + +chown -R app:app /var/alchemy/Phraseanet/config +chown -R app:app /var/alchemy/Phraseanet/datas +chown -R app:app /var/alchemy/Phraseanet/tmp +chown -R app:app /var/alchemy/Phraseanet/www/thumbnails FILE=/var/alchemy/Phraseanet/config/configuration.yml if [ -f "$FILE" ]; then echo "$FILE exist, skip setup." diff --git a/docker/phraseanet/phraseanet-entrypoint.sh b/docker/phraseanet/phraseanet-entrypoint.sh index de763cd13a..225b56a672 100755 --- a/docker/phraseanet/phraseanet-entrypoint.sh +++ b/docker/phraseanet/phraseanet-entrypoint.sh @@ -5,4 +5,4 @@ set -e envsubst < /php.ini.sample > /usr/local/etc/php/php.ini envsubst < /php-fpm.conf.sample > /usr/local/etc/php-fpm.conf -docker-php-entrypoint $@ +bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/worker-boot.sh b/docker/phraseanet/worker-boot.sh index 1b972c6cdb..4c1b76b02f 100755 --- a/docker/phraseanet/worker-boot.sh +++ b/docker/phraseanet/worker-boot.sh @@ -1,3 +1,4 @@ #!/bin/bash +mkdir /var/alchemy/Phraseanet/tmp/locks && chown -R app:app /var/alchemy/Phraseanet/tmp runuser app -c 'php /var/alchemy/Phraseanet/bin/console task-manager:scheduler:run' diff --git a/grammar/query.pp b/grammar/query.pp index b55c8f9aba..03df29b061 100644 --- a/grammar/query.pp +++ b/grammar/query.pp @@ -128,7 +128,7 @@ key: | quoted_string() group: - ::space::? ::parenthese_:: primary() ::_parenthese:: ::space::? + ::space::? ::parenthese_:: ::space::? primary() ::space::? ::_parenthese:: ::space::? // Thesaurus terms diff --git a/lib/Alchemy/Phrasea/Application/ApiApplicationLoader.php b/lib/Alchemy/Phrasea/Application/ApiApplicationLoader.php index 490554c95e..ca47f16baa 100644 --- a/lib/Alchemy/Phrasea/Application/ApiApplicationLoader.php +++ b/lib/Alchemy/Phrasea/Application/ApiApplicationLoader.php @@ -15,6 +15,7 @@ use Alchemy\Phrasea\Controller\Api\Result; use Alchemy\Phrasea\ControllerProvider\Api\OAuth2; use Alchemy\Phrasea\ControllerProvider\Api\V1; use Alchemy\Phrasea\ControllerProvider\Api\V2; +use Alchemy\Phrasea\ControllerProvider\Api\V3; use Alchemy\Phrasea\ControllerProvider\Datafiles; use Alchemy\Phrasea\ControllerProvider\MediaAccessor; use Alchemy\Phrasea\ControllerProvider\Minifier; @@ -36,6 +37,7 @@ class ApiApplicationLoader extends BaseApplicationLoader $app->register(new OAuth2()); $app->register(new V1()); $app->register(new V2()); + $app->register(new V3()); $app->register(new ApiReportControllerProvider()); $app->register(new JsonSchemaServiceProvider()); } @@ -119,6 +121,16 @@ class ApiApplicationLoader extends BaseApplicationLoader 'access_token' => '/api/oauthv2/token' ], ], + '3' => [ + 'number' => V3::VERSION, + 'uri' => '/api/v3/', + 'authenticationProtocol' => 'OAuth2', + 'authenticationVersion' => 'draft#v9', + 'authenticationEndPoints' => [ + 'authorization_token' => '/api/oauthv2/authorize', + 'access_token' => '/api/oauthv2/token' + ] + ], ] ])->createResponse(); }); @@ -135,6 +147,7 @@ class ApiApplicationLoader extends BaseApplicationLoader $app->mount('/datafiles/', new Datafiles()); $app->mount('/api/v1', new V1()); $app->mount('/api/v2', new V2()); + $app->mount('/api/v3', new V3()); $app->mount('/api/report', new ApiReportControllerProvider()); $app->mount('/permalink/', new Permalink()); $app->mount($app['controller.media_accessor.route_prefix'], new MediaAccessor()); diff --git a/lib/Alchemy/Phrasea/Border/Checker/AbstractChecker.php b/lib/Alchemy/Phrasea/Border/Checker/AbstractChecker.php index 8b4de0fb58..de6f4c25d6 100644 --- a/lib/Alchemy/Phrasea/Border/Checker/AbstractChecker.php +++ b/lib/Alchemy/Phrasea/Border/Checker/AbstractChecker.php @@ -34,6 +34,11 @@ abstract class AbstractChecker implements CheckerInterface */ protected $collections = []; + /** + * @var \collection[] + */ + protected $compareIgnoreCollections = []; + public function __construct(Application $app) { $this->app = $app; @@ -44,7 +49,7 @@ abstract class AbstractChecker implements CheckerInterface * Warning, you can not restrict on both databoxes and collections * * @param \databox[] $databoxes A databox or an array of databoxes - * @return bool + * @return \databox[] * * @throws \LogicException If already restricted to collections * @throws \InvalidArgumentException In case invalid databoxes are provided @@ -72,7 +77,7 @@ abstract class AbstractChecker implements CheckerInterface * Warning, you can not restrict on both databoxes and collections * * @param \collection[] $collections - * @return bool + * @return \collection[] * * @throws \LogicException If already restricted to databoxes * @throws \InvalidArgumentException In case invalid collections are provided @@ -95,6 +100,11 @@ abstract class AbstractChecker implements CheckerInterface return $this->collections; } + public function setCompareIgnoreCollections($collections) + { + $this->compareIgnoreCollections = $collections; + } + /** * Returns true if the checker should be executed against the current file * diff --git a/lib/Alchemy/Phrasea/Border/Checker/Filename.php b/lib/Alchemy/Phrasea/Border/Checker/Filename.php index ec4f0b0be4..ea1c25a7a6 100644 --- a/lib/Alchemy/Phrasea/Border/Checker/Filename.php +++ b/lib/Alchemy/Phrasea/Border/Checker/Filename.php @@ -45,8 +45,18 @@ class Filename extends AbstractChecker */ public function check(EntityManager $em, File $file) { - $boolean = empty(\record_adapter::get_records_by_originalname( - $file->getCollection()->get_databox(), $file->getOriginalName(), $this->sensitive, 0, 1 + $excludedCollIds = []; + if (!empty($this->compareIgnoreCollections)) { + foreach ($this->compareIgnoreCollections as $collection) { + // use only collection in the same databox and retrieve the coll_id + if ($collection->get_sbas_id() === $file->getCollection()->get_sbas_id()) { + $excludedCollIds[] = $collection->get_coll_id(); + } + } + } + + $boolean = empty(\record_adapter::getRecordsByOriginalnameWithExcludedCollIds( + $file->getCollection()->get_databox(), $file->getOriginalName(), $this->sensitive, 0, 1, $excludedCollIds )); return new Response($boolean, $this); diff --git a/lib/Alchemy/Phrasea/Border/Checker/Sha256.php b/lib/Alchemy/Phrasea/Border/Checker/Sha256.php index d17b28e5b9..5116e35dfd 100644 --- a/lib/Alchemy/Phrasea/Border/Checker/Sha256.php +++ b/lib/Alchemy/Phrasea/Border/Checker/Sha256.php @@ -34,7 +34,17 @@ class Sha256 extends AbstractChecker */ public function check(EntityManager $em, File $file) { - $boolean = empty($file->getCollection()->get_databox()->getRecordRepository()->findBySha256($file->getSha256())); + $excludedCollIds = []; + if (!empty($this->compareIgnoreCollections)) { + foreach ($this->compareIgnoreCollections as $collection) { + // use only collection in the same databox and retrieve the coll_id + if ($collection->get_sbas_id() === $file->getCollection()->get_sbas_id()) { + $excludedCollIds[] = $collection->get_coll_id(); + } + } + } + + $boolean = empty($file->getCollection()->get_databox()->getRecordRepository()->findBySha256WithExcludedCollIds($file->getSha256(), $excludedCollIds)); return new Response($boolean, $this); } diff --git a/lib/Alchemy/Phrasea/Border/Checker/UUID.php b/lib/Alchemy/Phrasea/Border/Checker/UUID.php index c3857fbe76..cdacf973a5 100644 --- a/lib/Alchemy/Phrasea/Border/Checker/UUID.php +++ b/lib/Alchemy/Phrasea/Border/Checker/UUID.php @@ -33,7 +33,17 @@ class UUID extends AbstractChecker */ public function check(EntityManager $em, File $file) { - $boolean = empty($file->getCollection()->get_databox()->getRecordRepository()->findByUuid($file->getUUID())); + $excludedCollIds = []; + if (!empty($this->compareIgnoreCollections)) { + foreach ($this->compareIgnoreCollections as $collection) { + // use only collection in the same databox and retrieve the coll_id + if ($collection->get_sbas_id() === $file->getCollection()->get_sbas_id()) { + $excludedCollIds[] = $collection->get_coll_id(); + } + } + } + + $boolean = empty($file->getCollection()->get_databox()->getRecordRepository()->findByUuidWithExcludedCollIds($file->getUUID(), $excludedCollIds)); return new Response($boolean, $this); } diff --git a/lib/Alchemy/Phrasea/Cache/RedisCache.php b/lib/Alchemy/Phrasea/Cache/RedisCache.php index 1130112563..365461256f 100644 --- a/lib/Alchemy/Phrasea/Cache/RedisCache.php +++ b/lib/Alchemy/Phrasea/Cache/RedisCache.php @@ -73,7 +73,7 @@ class RedisCache extends CacheProvider implements Cache */ protected function doDelete($id) { - return $this->_redis->delete($id); + return $this->_redis->del($id); } /** diff --git a/lib/Alchemy/Phrasea/Command/Setup/Install.php b/lib/Alchemy/Phrasea/Command/Setup/Install.php index 99dee9c15a..8e211a9284 100644 --- a/lib/Alchemy/Phrasea/Command/Setup/Install.php +++ b/lib/Alchemy/Phrasea/Command/Setup/Install.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Command\Setup; use Alchemy\Phrasea\Command\Command; use Alchemy\Phrasea\Core\Configuration\StructureTemplate; +use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions; use Doctrine\DBAL\Driver\Connection; use Symfony\Component\Console\Helper\DialogHelper; use Symfony\Component\Console\Input\ArrayInput; @@ -51,7 +52,9 @@ class Install extends Command ->addOption('db-template', null, InputOption::VALUE_OPTIONAL, 'Databox template (' . $this->structureTemplate->toString() . ')', null) ->addOption('data-path', null, InputOption::VALUE_OPTIONAL, 'Path to data repository', realpath(__DIR__ . '/../../../../../datas')) ->addOption('server-name', null, InputOption::VALUE_OPTIONAL, 'Server name') - ->addOption('indexer', null, InputOption::VALUE_OPTIONAL, 'Path to Phraseanet Indexer', 'auto') + ->addOption('es-host', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch server HTTP host', 'localhost') + ->addOption('es-port', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch server HTTP port', 9200) + ->addOption('es-index', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch index name', null) ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answer yes to all questions'); return $this; @@ -121,6 +124,21 @@ class Install extends Command list($email, $password) = $this->getCredentials($input, $output, $dialog); $dataPath = $this->getDataPath($input, $output, $dialog); + if (! $input->getOption('yes')) { + $output->writeln("--- ElasticSearch connection settings ---"); + } + + list($esHost, $esPort) = $this->getESHost($input, $output, $dialog); + $esIndexName = $this->getESIndexName($input, $output, $dialog); + + $esOptions = ElasticsearchOptions::fromArray([ + 'host' => $esHost, + 'port' => $esPort, + 'index' => $esIndexName + ]); + + $output->writeln(''); + if (!$input->getOption('yes')) { $continue = $dialog->askConfirmation($output, "Phraseanet is going to be installed, continue ? (N/y)", false); @@ -132,6 +150,7 @@ class Install extends Command } $this->container['phraseanet.installer']->install($email, $password, $abConn, $serverName, $dataPath, $dbConn, $templateName, $this->detectBinaries()); + $this->container['conf']->set(['main', 'search-engine', 'options'], $esOptions->toArray()); if (null !== $this->getApplication()) { $command = $this->getApplication()->find('crossdomain:generate'); @@ -339,6 +358,35 @@ class Install extends Command return $serverName; } + private function getESHost(InputInterface $input, OutputInterface $output, DialogHelper $dialog) + { + $host = $input->getOption('es-host'); + $port = (int) $input->getOption('es-port'); + + if (! $input->getOption('yes')) { + while (! $host) { + $host = $dialog->ask($output, 'ElasticSearch server host : ', null); + }; + + while ($port <= 0 || $port >= 65535) { + $port = (int) $dialog->ask($output, 'ElasticSearch server port : ', null); + }; + } + + return [ $host, $port ]; + } + + private function getESIndexName(InputInterface $input, OutputInterface $output, DialogHelper $dialog) + { + $index = $input->getOption('es-index'); + + if (! $input->getOption('yes')) { + $index = $dialog->ask($output, 'ElasticSearch server index name (blank to autogenerate) : ', null); + } + + return $index; + } + private function detectBinaries() { return [ diff --git a/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php b/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php index 02822d9228..dc81bc67c3 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/FieldsController.php @@ -314,6 +314,9 @@ class FieldsController extends Controller ->set_readonly($data['readonly']) ->set_type($data['type']) ->set_tbranch($data['tbranch']) + ->set_generate_cterms($data['generate_cterms']) + ->set_gui_editable($data['gui_editable']) + ->set_gui_visible($data['gui_visible']) ->set_report($data['report']) ->setVocabularyControl(null) ->setVocabularyRestricted(false); @@ -349,7 +352,7 @@ class FieldsController extends Controller { return [ 'name', 'multi', 'thumbtitle', 'tag', 'business', 'indexable', 'aggregable', - 'required', 'separator', 'readonly', 'type', 'tbranch', 'report', + 'required', 'separator', 'readonly', 'gui_editable', 'gui_visible' , 'type', 'tbranch', 'generate_cterms', 'report', 'vocabulary-type', 'vocabulary-restricted', 'dces-element', 'labels' ]; } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php index e30aa03946..106a60b1d8 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php @@ -354,7 +354,7 @@ class SubdefsController extends Controller Subdef::TYPE_VIDEO => [ "definitions" => [ "video codec H264" => null, - "144P H264 128 kbps ACC 128kbps" => [ + "144P H264 128 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "128", @@ -362,10 +362,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "256", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libx264", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "240P H264 256 kbps ACC 128kbps" => [ + "240P H264 256 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "256", @@ -373,10 +373,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "426", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libx264", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "360P H264 576 kbps ACC 128kbps" => [ + "360P H264 576 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "576", @@ -384,10 +384,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "480", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libtheora", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "480P H264 750 kbps ACC 128kbps" => [ + "480P H264 750 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "750", @@ -395,10 +395,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "854", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libx264", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "720P H264 1492 kbps ACC 128kbps" => [ + "720P H264 1492 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "1492", @@ -406,10 +406,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "1280", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libx264", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "1080P H264 2420 kbps ACC 128kbps" => [ + "1080P H264 2420 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "2420", @@ -417,11 +417,77 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "1920", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libx264", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", + Subdef::OPTION_DEVICE => ["all"] + ], + "144P H264 128 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "128", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "256", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libx264", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "240P H264 256 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "256", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "426", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libx264", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "360P H264 576 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "576", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "480", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libtheora", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "480P H264 750 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "750", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "854", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libx264", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "720P H264 1492 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "1492", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "1280", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libx264", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "1080P H264 2420 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "2420", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "1920", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libx264", + Video::OPTION_ACODEC => "libfdk_aac", Subdef::OPTION_DEVICE => ["all"] ], "video codec libvpx" => null, - "144P webm 128 kbps ACC 128kbps" => [ + "144P webm 128 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "128", @@ -429,10 +495,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "256", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "240P webm 256 kbps ACC 128kbps" => [ + "240P webm 256 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "256", @@ -440,10 +506,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "426", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "360P webm 576 kbps ACC 128kbps" => [ + "360P webm 576 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "576", @@ -451,10 +517,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "480", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "480P webm 750 kbps ACC 128kbps" => [ + "480P webm 750 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "750", @@ -462,10 +528,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "854", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "720P webm 1492 kbps ACC 128kbps" => [ + "720P webm 1492 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "1492", @@ -473,10 +539,10 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "1280", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", Subdef::OPTION_DEVICE => ["all"] ], - "1080P webm 2420 kbps ACC 128kbps" => [ + "1080P webm 2420 kbps MP3 128kbps" => [ Video::OPTION_AUDIOBITRATE => "128", Video::OPTION_AUDIOSAMPLERATE => "44100", Video::OPTION_BITRATE => "2420", @@ -484,7 +550,73 @@ class SubdefsController extends Controller Video::OPTION_SIZE => "1920", Video::OPTION_FRAMERATE => "25", Video::OPTION_VCODEC => "libvpx", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_ACODEC => "libmp3lame", + Subdef::OPTION_DEVICE => ["all"] + ], + "144P webm 128 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "128", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "256", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "240P webm 256 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "256", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "426", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "360P webm 576 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "576", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "480", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "480P webm 750 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "750", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "854", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "720P webm 1492 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "1492", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "1280", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", + Subdef::OPTION_DEVICE => ["all"] + ], + "1080P webm 2420 kbps AAC 128kbps" => [ + Video::OPTION_AUDIOBITRATE => "128", + Video::OPTION_AUDIOSAMPLERATE => "44100", + Video::OPTION_BITRATE => "2420", + Video::OPTION_GOPSIZE => "25", + Video::OPTION_SIZE => "1920", + Video::OPTION_FRAMERATE => "25", + Video::OPTION_VCODEC => "libvpx", + Video::OPTION_ACODEC => "libfdk_aac", Subdef::OPTION_DEVICE => ["all"] ], ], diff --git a/lib/Alchemy/Phrasea/Controller/Api/Result.php b/lib/Alchemy/Phrasea/Controller/Api/Result.php index 15624e1f6e..c7c45b4d0f 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/Result.php +++ b/lib/Alchemy/Phrasea/Controller/Api/Result.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Controller\Api; use Alchemy\Phrasea\ControllerProvider\Api\V1; +use Alchemy\Phrasea\ControllerProvider\Api\V3; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -268,11 +269,13 @@ class Result public function getVersion() { if (null === $this->version) { - if($this->request->attributes->get('api_version')){ + if ($this->request->attributes->get('api_version')) { $this->version = $this->request->attributes->get('api_version'); - }elseif(mb_strpos($this->request->getPathInfo(), '/api/v1') !== FALSE){ + } elseif (mb_strpos($this->request->getPathInfo(), '/api/v1') !== FALSE) { $this->version = V1::VERSION; - }else{ + } elseif (mb_strpos($this->request->getPathInfo(), '/api/v3') !== FALSE) { + $this->version = V3::VERSION; + } else { $this->version = self::$defaultVersion; } } diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 39361d46da..9b8f4ed04d 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -594,6 +594,9 @@ class V1Controller extends Controller ], 'separator' => $databox_field->get_separator(), 'thesaurus_branch' => $databox_field->get_tbranch(), + 'generate_cterms' => $databox_field->get_generate_cterms(), + 'gui_editable' => $databox_field->get_gui_editable(), + 'gui_visible' => $databox_field->get_gui_visible(), 'type' => $databox_field->get_type(), 'indexable' => $databox_field->is_indexable(), 'multivalue' => $databox_field->is_multi(), diff --git a/lib/Alchemy/Phrasea/Controller/Api/V3Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V3Controller.php new file mode 100644 index 0000000000..4dcab291fe --- /dev/null +++ b/lib/Alchemy/Phrasea/Controller/Api/V3Controller.php @@ -0,0 +1,807 @@ +findDataboxById($databox_id)->get_record($record_id); + + return Result::create($request, ['story' => $this->listStory($request, $story)])->createResponse(); + } catch (NotFoundHttpException $e) { + return Result::createError($request, 404, $this->app->trans('Story Not Found'))->createResponse(); + } catch (\Exception $e) { + return $this->app['controller.api.v1']->getBadRequestAction($request, $this->app->trans('An error occurred')); + } + } + + /** + * Search for results + * + * @param Request $request + * + * @return Response + */ + public function searchAction(Request $request) + { + $subdefTransformer = new SubdefTransformer($this->app['acl'], $this->getAuthenticatedUser(), new PermalinkTransformer()); + $technicalDataTransformer = new TechnicalDataTransformer(); + $recordTransformer = new RecordTransformer($subdefTransformer, $technicalDataTransformer); + $storyTransformer = new StoryTransformer($subdefTransformer, $recordTransformer); + $compositeTransformer = new V1SearchCompositeResultTransformer($recordTransformer, $storyTransformer); + $searchTransformer = new V1SearchResultTransformer($compositeTransformer); + + $transformerResolver = new SearchResultTransformerResolver([ + '' => $searchTransformer, + 'results' => $compositeTransformer, + 'results.stories' => $storyTransformer, + 'results.stories.thumbnail' => $subdefTransformer, + 'results.stories.metadatas' => new CallbackTransformer(), + 'results.stories.caption' => new CallbackTransformer(), + 'results.stories.records' => $recordTransformer, + 'results.stories.records.thumbnail' => $subdefTransformer, + 'results.stories.records.technical_informations' => $technicalDataTransformer, + 'results.stories.records.subdefs' => $subdefTransformer, + 'results.stories.records.metadata' => new CallbackTransformer(), + 'results.stories.records.status' => new CallbackTransformer(), + 'results.stories.records.caption' => new CallbackTransformer(), + 'results.records' => $recordTransformer, + 'results.records.thumbnail' => $subdefTransformer, + 'results.records.technical_informations' => $technicalDataTransformer, + 'results.records.subdefs' => $subdefTransformer, + 'results.records.metadata' => new CallbackTransformer(), + 'results.records.status' => new CallbackTransformer(), + 'results.records.caption' => new CallbackTransformer(), + ]); + + $includeResolver = new IncludeResolver($transformerResolver); + + $fractal = new \League\Fractal\Manager(); + $fractal->setSerializer(new TraceableArraySerializer($this->app['dispatcher'])); + $fractal->parseIncludes($this->resolveSearchIncludes($request)); + + $result = $this->doSearch($request); + + $story_max_records = null; + // if search on story + if ($request->get('search_type') == 1) { + $story_max_records = (int)$request->get('story_max_records') ?: 10; + } + + $searchView = $this->buildSearchView( + $result, + $includeResolver->resolve($fractal), + $this->resolveSubdefUrlTTL($request), + $story_max_records + ); + + $ret = $fractal->createData(new Item($searchView, $searchTransformer))->toArray(); + + return Result::create($request, $ret)->createResponse(); + } + + /** + * Retrieve detailed information about one story + * + * @param Request $request + * @param \record_adapter $story + * @return array + * @throws \Exception + */ + private function listStory(Request $request, \record_adapter $story) + { + if (!$story->isStory()) { + return Result::createError($request, 404, 'Story not found')->createResponse(); + } + + $per_page = (int)$request->get('per_page')?:10; + $page = (int)$request->get('page')?:1; + $offset = ($per_page * ($page - 1)) + 1; + + $caption = $story->get_caption(); + + $format = function (\caption_record $caption, $dcField) { + + $field = $caption->get_dc_field($dcField); + + if (!$field) { + return null; + } + + return $field->get_serialized_values(); + }; + + return [ + '@entity@' => V1Controller::OBJECT_TYPE_STORY, + 'databox_id' => $story->getDataboxId(), + 'story_id' => $story->getRecordId(), + 'updated_on' => $story->getUpdated()->format(DATE_ATOM), + 'created_on' => $story->getCreated()->format(DATE_ATOM), + 'collection_id' => $story->getCollectionId(), + 'base_id' => $story->getBaseId(), + 'thumbnail' => $this->listEmbeddableMedia($request, $story, $story->get_thumbnail()), + 'uuid' => $story->getUuid(), + 'metadatas' => [ + '@entity@' => V1Controller::OBJECT_TYPE_STORY_METADATA_BAG, + 'dc:contributor' => $format($caption, \databox_Field_DCESAbstract::Contributor), + 'dc:coverage' => $format($caption, \databox_Field_DCESAbstract::Coverage), + 'dc:creator' => $format($caption, \databox_Field_DCESAbstract::Creator), + 'dc:date' => $format($caption, \databox_Field_DCESAbstract::Date), + 'dc:description' => $format($caption, \databox_Field_DCESAbstract::Description), + 'dc:format' => $format($caption, \databox_Field_DCESAbstract::Format), + 'dc:identifier' => $format($caption, \databox_Field_DCESAbstract::Identifier), + 'dc:language' => $format($caption, \databox_Field_DCESAbstract::Language), + 'dc:publisher' => $format($caption, \databox_Field_DCESAbstract::Publisher), + 'dc:relation' => $format($caption, \databox_Field_DCESAbstract::Relation), + 'dc:rights' => $format($caption, \databox_Field_DCESAbstract::Rights), + 'dc:source' => $format($caption, \databox_Field_DCESAbstract::Source), + 'dc:subject' => $format($caption, \databox_Field_DCESAbstract::Subject), + 'dc:title' => $format($caption, \databox_Field_DCESAbstract::Title), + 'dc:type' => $format($caption, \databox_Field_DCESAbstract::Type), + ], + 'records' => $this->listRecords($request, array_values($story->getChildren($offset, $per_page)->get_elements())), + ]; + } + + private function listEmbeddableMedia(Request $request, \record_adapter $record, \media_subdef $media) + { + if (!$media->is_physically_present()) { + return null; + } + + if ($this->getAuthenticator()->isAuthenticated()) { + $acl = $this->getAclForUser(); + if ($media->get_name() !== 'document' + && false === $acl->has_access_to_subdef($record, $media->get_name()) + ) { + return null; + } + if ($media->get_name() === 'document' + && !$acl->has_right_on_base($record->getBaseId(), \ACL::CANDWNLDHD) + && !$acl->has_hd_grant($record) + ) { + return null; + } + } + + if ($media->get_permalink() instanceof \media_Permalink_Adapter) { + $permalink = $this->listPermalink($media->get_permalink()); + } else { + $permalink = null; + } + + $urlTTL = (int) $request->get( + 'subdef_url_ttl', + $this->getConf()->get(['registry', 'general', 'default-subdef-url-ttl']) + ); + if ($urlTTL < 0) { + $urlTTL = -1; + } + $issuer = $this->getAuthenticatedUser(); + + return [ + 'name' => $media->get_name(), + 'permalink' => $permalink, + 'height' => $media->get_height(), + 'width' => $media->get_width(), + 'filesize' => $media->get_size(), + 'devices' => $media->getDevices(), + 'player_type' => $media->get_type(), + 'mime_type' => $media->get_mime(), + 'substituted' => $media->is_substituted(), + 'created_on' => $media->get_creation_date()->format(DATE_ATOM), + 'updated_on' => $media->get_modification_date()->format(DATE_ATOM), + 'url' => $this->app['media_accessor.subdef_url_generator']->generate($issuer, $media, $urlTTL), + 'url_ttl' => $urlTTL, + ]; + } + + private function listPermalink(\media_Permalink_Adapter $permalink) + { + $downloadUrl = $permalink->get_url(); + $downloadUrl->getQuery()->set('download', '1'); + + return [ + 'created_on' => $permalink->get_created_on()->format(DATE_ATOM), + 'id' => $permalink->get_id(), + 'is_activated' => $permalink->get_is_activated(), + /** @Ignore */ + 'label' => $permalink->get_label(), + 'updated_on' => $permalink->get_last_modified()->format(DATE_ATOM), + 'page_url' => $permalink->get_page(), + 'download_url' => (string)$downloadUrl, + 'url' => (string)$permalink->get_url(), + ]; + } + + /** + * @param Request $request + * @param RecordReferenceInterface[]|RecordReferenceCollection $records + * @return array + */ + private function listRecords(Request $request, $records) + { + if (!$records instanceof RecordReferenceCollection) { + $records = new RecordReferenceCollection($records); + } + + $technicalData = $this->app['service.technical_data']->fetchRecordsTechnicalData($records); + + $data = []; + + foreach ($records->toRecords($this->getApplicationBox()) as $index => $record) { + $record->setTechnicalDataSet($technicalData[$index]); + + $data[$index] = $this->listRecord($request, $record); + } + + return $data; + } + + /** + * Retrieve detailed information about one record + * + * @param Request $request + * @param \record_adapter $record + * @return array + */ + private function listRecord(Request $request, \record_adapter $record) + { + $technicalInformation = []; + foreach ($record->get_technical_infos()->getValues() as $name => $value) { + $technicalInformation[] = ['name' => $name, 'value' => $value]; + } + + $data = [ + 'databox_id' => $record->getDataboxId(), + 'record_id' => $record->getRecordId(), + 'mime_type' => $record->getMimeType(), + 'title' => $record->get_title(), + 'original_name' => $record->get_original_name(), + 'updated_on' => $record->getUpdated()->format(DATE_ATOM), + 'created_on' => $record->getCreated()->format(DATE_ATOM), + 'collection_id' => $record->getCollectionId(), + 'base_id' => $record->getBaseId(), + 'sha256' => $record->getSha256(), + 'thumbnail' => $this->listEmbeddableMedia($request, $record, $record->get_thumbnail()), + 'technical_informations' => $technicalInformation, + 'phrasea_type' => $record->getType(), + 'uuid' => $record->getUuid(), + ]; + + if ($request->attributes->get('_extended', false)) { + $data = array_merge($data, [ + 'subdefs' => $this->listRecordEmbeddableMedias($request, $record), + 'metadata' => $this->listRecordMetadata($record), + 'status' => $this->listRecordStatus($record), + 'caption' => $this->listRecordCaption($record), + ]); + } + + return $data; + } + + /** + * @param Request $request + * @param \record_adapter $record + * @return array + */ + private function listRecordEmbeddableMedias(Request $request, \record_adapter $record) + { + $subdefs = []; + + foreach ($record->get_embedable_medias([], []) as $name => $media) { + if (null !== $subdef = $this->listEmbeddableMedia($request, $record, $media)) { + $subdefs[] = $subdef; + } + } + + return $subdefs; + } + + /** + * List all fields of given record + * + * @param \record_adapter $record + * @return array + */ + private function listRecordMetadata(\record_adapter $record) + { + $includeBusiness = $this->getAclForUser()->can_see_business_fields($record->getDatabox()); + + return $this->listRecordCaptionFields($record->get_caption()->get_fields(null, $includeBusiness)); + } + + /** + * @param \caption_field[] $fields + * @return array + */ + private function listRecordCaptionFields($fields) + { + $ret = []; + + foreach ($fields as $field) { + $databox_field = $field->get_databox_field(); + + $fieldData = [ + 'meta_structure_id' => $field->get_meta_struct_id(), + 'name' => $field->get_name(), + 'labels' => [ + 'fr' => $databox_field->get_label('fr'), + 'en' => $databox_field->get_label('en'), + 'de' => $databox_field->get_label('de'), + 'nl' => $databox_field->get_label('nl'), + ], + ]; + + foreach ($field->get_values() as $value) { + $data = [ + 'meta_id' => $value->getId(), + 'value' => $value->getValue(), + ]; + + $ret[] = $fieldData + $data; + } + } + + return $ret; + } + + /** + * Retrieve detailed information about one status + * + * @param \record_adapter $record + * @return array + */ + private function listRecordStatus(\record_adapter $record) + { + $ret = []; + foreach ($record->getStatusStructure() as $bit => $status) { + $ret[] = [ + 'bit' => $bit, + 'state' => \databox_status::bitIsSet($record->getStatusBitField(), $bit), + ]; + } + + return $ret; + } + + /** + * @param \record_adapter $record + * @return array + */ + private function listRecordCaption(\record_adapter $record) + { + $includeBusiness = $this->getAclForUser()->can_see_business_fields($record->getDatabox()); + + $caption = []; + + foreach ($record->get_caption()->get_fields(null, $includeBusiness) as $field) { + $caption[] = [ + 'meta_structure_id' => $field->get_meta_struct_id(), + 'name' => $field->get_name(), + 'value' => $field->get_serialized_values(';'), + ]; + } + + return $caption; + } + + /** + * Returns requested includes + * + * @param Request $request + * @return string[] + */ + private function resolveSearchIncludes(Request $request) + { + $includes = [ + 'results.stories.records' + ]; + + if ($request->attributes->get('_extended', false)) { + if ($request->get('search_type') != SearchEngineOptions::RECORD_STORY) { + $includes = array_merge($includes, [ + 'results.stories.records.subdefs', + 'results.stories.records.metadata', + 'results.stories.records.caption', + 'results.stories.records.status' + ]); + } + else { + $includes = [ 'results.stories.caption' ]; + } + + $includes = array_merge($includes, [ + 'results.records.subdefs', + 'results.records.metadata', + 'results.records.caption', + 'results.records.status' + ]); + } + + return $includes; + } + + /** + * @param SearchEngineResult $result + * @param string[] $includes + * @param int $urlTTL + * @param int|null $story_max_records + * @return SearchResultView + */ + private function buildSearchView(SearchEngineResult $result, array $includes, $urlTTL, $story_max_records = null) + { + $references = new RecordReferenceCollection($result->getResults()); + + $records = new RecordCollection(); + $stories = new RecordCollection(); + + foreach ($references->toRecords($this->getApplicationBox()) as $record) { + if ($record->isStory()) { + $stories[$record->getId()] = $record; + } else { + $records[$record->getId()] = $record; + } + } + + $resultView = new SearchResultView($result); + + if ($stories->count() > 0) { + $user = $this->getAuthenticatedUser(); + $children = []; + + foreach ($stories->getDataboxIds() as $databoxId) { + $storyIds = $stories->getDataboxRecordIds($databoxId); + + $selections = $this->findDataboxById($databoxId) + ->getRecordRepository() + ->findChildren($storyIds, $user,1, $story_max_records); + $children[$databoxId] = array_combine($storyIds, $selections); + } + + /** @var StoryView[] $storyViews */ + $storyViews = []; + /** @var RecordView[] $childrenViews */ + $childrenViews = []; + + foreach ($stories as $index => $story) { + $storyView = new StoryView($story); + + $selection = $children[$story->getDataboxId()][$story->getRecordId()]; + + $childrenView = $this->buildRecordViews($selection); + + foreach ($childrenView as $view) { + $childrenViews[spl_object_hash($view)] = $view; + } + + $storyView->setChildren($childrenView); + + $storyViews[$index] = $storyView; + } + + if (in_array('results.stories.thumbnail', $includes, true)) { + $subdefViews = $this->buildSubdefsViews($stories, ['thumbnail'], $urlTTL); + + foreach ($storyViews as $index => $storyView) { + $storyView->setSubdefs($subdefViews[$index]); + } + } + + if (in_array('results.stories.metadatas', $includes, true) || + in_array('results.stories.caption', $includes, true)) { + $captions = $this->app['service.caption']->findByReferenceCollection($stories); + $canSeeBusiness = $this->retrieveSeeBusinessPerDatabox($stories); + + $this->buildCaptionViews($storyViews, $captions, $canSeeBusiness); + } + + $allChildren = new RecordCollection(); + foreach ($childrenViews as $index => $childrenView) { + $allChildren[$index] = $childrenView->getRecord(); + } + + $names = in_array('results.stories.records.subdefs', $includes, true) ? null : ['thumbnail']; + $subdefViews = $this->buildSubdefsViews($allChildren, $names, $urlTTL); + $technicalDatasets = $this->app['service.technical_data']->fetchRecordsTechnicalData($allChildren); + + foreach ($childrenViews as $index => $recordView) { + $recordView->setSubdefs($subdefViews[$index]); + $recordView->setTechnicalDataView(new TechnicalDataView($technicalDatasets[$index])); + } + + if (array_intersect($includes, ['results.stories.records.metadata', 'results.stories.records.caption'])) { + $captions = $this->app['service.caption']->findByReferenceCollection($allChildren); + $canSeeBusiness = $this->retrieveSeeBusinessPerDatabox($allChildren); + + $this->buildCaptionViews($childrenViews, $captions, $canSeeBusiness); + } + + $resultView->setStories($storyViews); + } + + if ($records->count() > 0) { + $names = in_array('results.records.subdefs', $includes, true) ? null : ['thumbnail']; + $recordViews = $this->buildRecordViews($records); + $subdefViews = $this->buildSubdefsViews($records, $names, $urlTTL); + + $technicalDatasets = $this->app['service.technical_data']->fetchRecordsTechnicalData($records); + + foreach ($recordViews as $index => $recordView) { + $recordView->setSubdefs($subdefViews[$index]); + $recordView->setTechnicalDataView(new TechnicalDataView($technicalDatasets[$index])); + } + + if (array_intersect($includes, ['results.records.metadata', 'results.records.caption'])) { + $captions = $this->app['service.caption']->findByReferenceCollection($records); + $canSeeBusiness = $this->retrieveSeeBusinessPerDatabox($records); + + $this->buildCaptionViews($recordViews, $captions, $canSeeBusiness); + } + + $resultView->setRecords($recordViews); + } + + return $resultView; + } + + /** + * @param Request $request + * @return SearchEngineResult + */ + private function doSearch(Request $request) + { + $options = SearchEngineOptions::fromRequest($this->app, $request); + $options->setFirstResult((int)($request->get('offset_start') ?: 0)); + $options->setMaxResults((int)$request->get('per_page') ?: 10); + + $this->getSearchEngine()->resetCache(); + + $search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options); + + $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getQueryText()); + + // log array of collectionIds (from $options) for each databox + $collectionsReferencesByDatabox = $options->getCollectionsReferencesByDatabox(); + foreach ($collectionsReferencesByDatabox as $sbid => $references) { + $databox = $this->findDataboxById($sbid); + $collectionsIds = array_map(function(CollectionReference $ref){return $ref->getCollectionId();}, $references); + $this->getSearchEngineLogger()->log($databox, $search_result->getQueryText(), $search_result->getTotal(), $collectionsIds); + } + + $this->getSearchEngine()->clearCache(); + + return $search_result; + } + + /** + * @return SearchEngineInterface + */ + private function getSearchEngine() + { + return $this->app['phraseanet.SE']; + } + + /** + * @return UserManipulator + */ + private function getUserManipulator() + { + return $this->app['manipulator.user']; + } + + /** + * @return SearchEngineLogger + */ + private function getSearchEngineLogger() + { + return $this->app['phraseanet.SE.logger']; + } + + /** + * @param Request $request + * @return int + */ + private function resolveSubdefUrlTTL(Request $request) + { + $urlTTL = $request->query->get('subdef_url_ttl'); + + if (null !== $urlTTL) { + return (int)$urlTTL; + } + + return $this->getConf()->get(['registry', 'general', 'default-subdef-url-ttl']); + } + + /** + * @param RecordCollection|\record_adapter[] $references + * @return RecordView[] + */ + private function buildRecordViews($references) + { + if (!$references instanceof RecordCollection) { + $references = new RecordCollection($references); + } + + $recordViews = []; + + foreach ($references as $index => $record) { + $recordViews[$index] = new RecordView($record); + } + + return $recordViews; + } + + /** + * @param RecordReferenceInterface[]|RecordReferenceCollection|DataboxGroupable $references + * @param array|null $names + * @param int $urlTTL + * @return SubdefView[][] + */ + private function buildSubdefsViews($references, array $names = null, $urlTTL) + { + $subdefGroups = $this->app['service.media_subdef'] + ->findSubdefsByRecordReferenceFromCollection($references, $names); + + $fakeSubdefs = []; + + foreach ($subdefGroups as $index => $subdefGroup) { + if (!isset($subdefGroup['thumbnail'])) { + $fakeSubdef = new \media_subdef($this->app, $references[$index], 'thumbnail', true, []); + $fakeSubdefs[spl_object_hash($fakeSubdef)] = $fakeSubdef; + + $subdefGroups[$index]['thumbnail'] = $fakeSubdef; + } + } + + $allSubdefs = $this->mergeGroupsIntoOneList($subdefGroups); + $allPermalinks = \media_Permalink_Adapter::getMany( + $this->app, + array_filter($allSubdefs, function (\media_subdef $subdef) use ($fakeSubdefs) { + return !isset($fakeSubdefs[spl_object_hash($subdef)]); + }) + ); + $urls = $this->app['media_accessor.subdef_url_generator'] + ->generateMany($this->getAuthenticatedUser(), $allSubdefs, $urlTTL); + + $subdefViews = []; + + /** @var \media_subdef $subdef */ + foreach ($allSubdefs as $index => $subdef) { + $subdefView = new SubdefView($subdef); + + if (isset($allPermalinks[$index])) { + $subdefView->setPermalinkView(new PermalinkView($allPermalinks[$index])); + } + + $subdefView->setUrl($urls[$index]); + $subdefView->setUrlTTL($urlTTL); + + $subdefViews[spl_object_hash($subdef)] = $subdefView; + } + + $reorderedGroups = []; + + /** @var \media_subdef[] $subdefGroup */ + foreach ($subdefGroups as $index => $subdefGroup) { + $reordered = []; + + foreach ($subdefGroup as $subdef) { + $reordered[] = $subdefViews[spl_object_hash($subdef)]; + } + + $reorderedGroups[$index] = $reordered; + } + + return $reorderedGroups; + } + + /** + * @param array $groups + * @return array|mixed + */ + private function mergeGroupsIntoOneList(array $groups) + { + // Strips keys from the internal array + array_walk($groups, function (array &$group) { + $group = array_values($group); + }); + + if ($groups) { + return call_user_func_array('array_merge', $groups); + } + + return []; + } + + /** + * @param RecordReferenceInterface[]|DataboxGroupable $references + * @return array + */ + private function retrieveSeeBusinessPerDatabox($references) + { + if (!$references instanceof DataboxGroupable) { + $references = new RecordReferenceCollection($references); + } + + $acl = $this->getAclForUser(); + + $canSeeBusiness = []; + + foreach ($references->getDataboxIds() as $databoxId) { + $canSeeBusiness[$databoxId] = $acl->can_see_business_fields($this->findDataboxById($databoxId)); + } + + $rights = []; + + foreach ($references as $index => $reference) { + $rights[$index] = $canSeeBusiness[$reference->getDataboxId()]; + } + + return $rights; + } + + /** + * @param RecordView[] $recordViews + * @param \caption_record[] $captions + * @param bool[] $canSeeBusiness + */ + private function buildCaptionViews($recordViews, $captions, $canSeeBusiness) + { + foreach ($recordViews as $index => $recordView) { + $caption = $captions[$index]; + + $captionView = new CaptionView($caption); + + $captionView->setFields($caption->get_fields(null, isset($canSeeBusiness[$index]) && (bool)$canSeeBusiness[$index])); + + $recordView->setCaption($captionView); + } + } +} diff --git a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php index 849c5af046..29ef942919 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/EditController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/EditController.php @@ -75,6 +75,9 @@ class EditController extends Controller 'format' => '', 'explain' => '', 'tbranch' => $meta->get_tbranch(), + 'generate_cterms' => $meta->get_generate_cterms(), + 'gui_editable' => $meta->get_gui_editable(), + 'gui_visible' => $meta->get_gui_visible(), 'maxLength' => $meta->get_tag() ->getMaxLength(), 'minLength' => $meta->get_tag() diff --git a/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php b/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php index afb91cb23e..7fcddb0b28 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php @@ -70,7 +70,7 @@ class LazaretController extends Controller public function getElement($file_id) { $ret = ['success' => false, 'message' => '', 'result' => []]; - + /* @var LazaretFile $lazaretFile */ $lazaretFile = $this->getLazaretFileRepository()->find($file_id); @@ -126,6 +126,16 @@ class LazaretController extends Controller $ret = $lazaretManipulator->add($file_id, $keepAttributes, $attributesToKeep); + try{ + // get the new record + $record = \Collection::getByBaseId($this->app, $request->request->get('bas_id'))->get_databox()->get_record($ret['result']['record_id']); + $postStatus = (array) $request->request->get('status'); + // update status + $this->updateRecordStatus($record, $postStatus); + }catch(\Exception $e){ + $ret['message'] = $this->app->trans('An error occured when wanting to change status!'); + } + return $this->app->json($ret); } @@ -216,6 +226,7 @@ class LazaretController extends Controller return $this->app->json($ret); } + $postStatus = (array) $request->request->get('status'); $path = $this->app['tmp.lazaret.path'] . '/'; $lazaretFileName = $path .$lazaretFile->getFilename(); @@ -233,6 +244,9 @@ class LazaretController extends Controller '' ); + // update status + $this->updateRecordStatus($record, $postStatus); + //Delete lazaret file $manager = $this->getEntityManager(); $manager->remove($lazaretFile); @@ -278,6 +292,35 @@ class LazaretController extends Controller ); } + /** + * @param Request $request + * @param $databox_id + * @param $record_id + * @return \Symfony\Component\HttpFoundation\JsonResponse + */ + public function getDestinationStatus(Request $request, $databox_id, $record_id) + { + if (!$request->isXmlHttpRequest()) { + $this->app->abort(400); + } + $record = new \record_adapter($this->app, (int) $databox_id, (int) $record_id); + $databox = $this->findDataboxById($databox_id); + $statusStructure = $databox->getStatusStructure(); + $recordsStatuses = []; + foreach ($statusStructure as $status) { + // make the key as a string for the json usage in javascript + $bit = "'".$status['bit']."'"; + if (!isset($recordsStatuses[$bit])) { + $recordsStatuses[$bit] = $status; + } + $statusSet = \databox_status::bitIsSet($record->getStatusBitField(), $status['bit']); + if (!isset($recordsStatuses[$bit]['flag'])) { + $recordsStatuses[$bit]['flag'] = (int) $statusSet; + } + } + return $this->app->json(['status' => $recordsStatuses]); + } + /** * @return LazaretFileRepository */ @@ -293,4 +336,32 @@ class LazaretController extends Controller { return $this->app['border-manager']; } + + /** + * Set new status to selected record + * + * @param \record_adapter $record + * @param array $postStatus + * @return array|null + */ + private function updateRecordStatus(\record_adapter $record, array $postStatus) + { + $sbasId = $record->getDataboxId(); + if (isset($postStatus[$sbasId]) && is_array($postStatus[$sbasId])) { + $postStatus = $postStatus[$sbasId]; + $currentStatus = strrev($record->getStatus()); + $newStatus = ''; + foreach (range(0, 31) as $i) { + $newStatus .= isset($postStatus[$i]) ? ($postStatus[$i] ? '1' : '0') : $currentStatus[$i]; + } + $record->setStatus(strrev($newStatus)); + $this->getDataboxLogger($record->getDatabox()) + ->log($record, \Session_Logger::EVENT_STATUS, '', ''); + return [ + 'current_status' => $currentStatus, + 'new_status' => $newStatus, + ]; + } + return null; + } } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php index f9ce528e41..6e650aefaa 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php @@ -193,7 +193,7 @@ class PushController extends Controller 'Validation from %user%', [ '%user%' => $this->getAuthenticatedUser()->getDisplayName(), ])); - $validation_description = $request->request->get('validation_description'); + $validation_description = $request->request->get('message'); $participants = $request->request->get('participants'); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php index 790e33525d..d327e860c5 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php @@ -341,10 +341,20 @@ class QueryController extends Controller if ($result->getTotal() === 0) { $template = 'prod/results/help.html.twig'; - } else { + } + else { $template = 'prod/results/records.html.twig'; } - $json['results'] = $this->render($template, ['results'=> $result]); + + /** @var \Closure $filter */ + $filter = $this->app['plugin.filter_by_authorization']; + + $plugins = [ + 'workzone' => $filter('workzone'), + 'actionbar' => $filter('actionbar'), + ]; + + $json['results'] = $this->render($template, ['results'=> $result, 'plugins'=>$plugins]); // add technical fields @@ -382,7 +392,6 @@ class QueryController extends Controller 'labels' => $field->get_labels(), 'type' => $field->get_type(), 'field' => $field->get_name(), - 'query' => "field." . $field->get_name() . ":%s", 'trans_label' => $field->get_label($this->app['locale']), ]; $field->get_label($this->app['locale']); diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Api/V3.php b/lib/Alchemy/Phrasea/ControllerProvider/Api/V3.php new file mode 100644 index 0000000000..5925c74921 --- /dev/null +++ b/lib/Alchemy/Phrasea/ControllerProvider/Api/V3.php @@ -0,0 +1,48 @@ +share(function (PhraseaApplication $app) { + return (new V3Controller($app)); + }); + } + + public function boot(Application $app) + { + } + + public function connect(Application $app) + { + if (! $this->isApiEnabled($app)) { + return $app['controllers_factory']; + } + + /** @var ControllerCollection $controllers */ + $controllers = $app['controllers_factory']; + + $controllers->before(new OAuthListener()); + + $controllers->get('/stories/{databox_id}/{record_id}/', 'controller.api.v3:getStoryAction') + ->before('controller.api.v1:ensureCanAccessToRecord') + ->assert('databox_id', '\d+') + ->assert('record_id', '\d+'); + + $controllers->match('/search/', 'controller.api.v3:searchAction'); + + return $controllers; + } +} diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php index 16081d7f14..53c2804fce 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php @@ -82,6 +82,11 @@ class Lazaret implements ControllerProviderInterface, ServiceProviderInterface ->assert('file_id', '\d+') ->bind('lazaret_thumbnail'); + $controllers->get('/{databox_id}/{record_id}/status', 'controller.prod.lazaret:getDestinationStatus') + ->assert('databox_id', '\d+') + ->assert('record_id', '\d+') + ->bind('lazaret_destination_status'); + return $controllers; } } diff --git a/lib/Alchemy/Phrasea/Core/Event/Listener/OAuthListener.php b/lib/Alchemy/Phrasea/Core/Event/Listener/OAuthListener.php index 34c4685149..0dd4984306 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Listener/OAuthListener.php +++ b/lib/Alchemy/Phrasea/Core/Event/Listener/OAuthListener.php @@ -15,6 +15,7 @@ use Alchemy\Phrasea\Authentication\Context; use Alchemy\Phrasea\Controller\Api\Result; use Alchemy\Phrasea\ControllerProvider\Api\V1; use Alchemy\Phrasea\ControllerProvider\Api\V2; +use Alchemy\Phrasea\ControllerProvider\Api\V3; use Alchemy\Phrasea\Core\Configuration\PropertyAccess; use Alchemy\Phrasea\Core\Event\ApiOAuth2EndEvent; use Alchemy\Phrasea\Core\Event\ApiOAuth2StartEvent; @@ -76,11 +77,13 @@ class OAuthListener // Sets the Api Version $CalledController = $request->attributes->get('_controller'); - if(mb_strpos($CalledController, 'controller.api.v1') !== FALSE){ + if (mb_strpos($CalledController, 'controller.api.v1') !== FALSE) { $request->attributes->set('api_version', V1::VERSION); - }elseif(mb_strpos($CalledController, 'controller.api.v2') !== FALSE){ + } elseif(mb_strpos($CalledController, 'controller.api.v2') !== FALSE) { $request->attributes->set('api_version', V2::VERSION); - }else{ + } elseif(mb_strpos($CalledController, 'controller.api.v3') !== FALSE) { + $request->attributes->set('api_version', V3::VERSION); + } else { $request->attributes->set('api_version', $oAuth2Account->getApiVersion()); } diff --git a/lib/Alchemy/Phrasea/Core/Provider/BorderManagerServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/BorderManagerServiceProvider.php index 36f0ed0e7e..d7a0f636f9 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/BorderManagerServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/BorderManagerServiceProvider.php @@ -78,6 +78,20 @@ class BorderManagerServiceProvider implements ServiceProviderInterface $checkerObj->restrictToCollections($collections); } + + if (isset($checker['compare-ignore-collections'])) { + $collections = []; + foreach ($checker['compare-ignore-collections'] as $base_id) { + try { + $collections[] = \collection::getByBaseId($app, $base_id); + } catch (\Exception $e) { + throw new \InvalidArgumentException('Invalid collection option'); + } + } + + $checkerObj->setCompareIgnoreCollections($collections); + } + $registeredCheckers[] = $checkerObj; } catch (\InvalidArgumentException $e) { $app['monolog']->error( diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php index 0e15108724..c209691c0b 100644 --- a/lib/Alchemy/Phrasea/Core/Version.php +++ b/lib/Alchemy/Phrasea/Core/Version.php @@ -16,7 +16,7 @@ class Version /** * @var string */ - private $number = '4.1.0-alpha.15a'; + private $number = '4.1.0-alpha.19a'; /** * @var string diff --git a/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php b/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php index a8209285ca..3e247d99c9 100644 --- a/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php +++ b/lib/Alchemy/Phrasea/Databox/Field/DbalDataboxFieldRepository.php @@ -36,6 +36,9 @@ final class DbalDataboxFieldRepository implements DataboxFieldRepository 'label_fr', 'label_de', 'label_nl', + 'generate_cterms', + 'gui_editable', + 'gui_visible', ]; /** @var DataboxFieldFactory */ diff --git a/lib/Alchemy/Phrasea/Databox/Record/LegacyRecordRepository.php b/lib/Alchemy/Phrasea/Databox/Record/LegacyRecordRepository.php index 522d49baae..30feada346 100644 --- a/lib/Alchemy/Phrasea/Databox/Record/LegacyRecordRepository.php +++ b/lib/Alchemy/Phrasea/Databox/Record/LegacyRecordRepository.php @@ -82,6 +82,34 @@ class LegacyRecordRepository implements RecordRepository return $this->mapRecordsFromResultSet($result); } + public function findBySha256WithExcludedCollIds($sha256, $excludedCollIds = []) + { + static $sql; + + if (!$sql) { + $qb = $this->createSelectBuilder() + ->where('sha256 = :sha256'); + + if (!empty($excludedCollIds)) { + $qb->andWhere($qb->expr()->notIn('coll_id', ':coll_id')); + } + + $sql = $qb->getSQL(); + } + + $result = $this->databox->get_connection()->fetchAll($sql, + [ + 'sha256' => $sha256, + 'coll_id' => $excludedCollIds + ], + [ + ':coll_id' => Connection::PARAM_INT_ARRAY + ] + ); + + return $this->mapRecordsFromResultSet($result); + } + /** * @param string $uuid * @return \record_adapter[] @@ -99,6 +127,40 @@ class LegacyRecordRepository implements RecordRepository return $this->mapRecordsFromResultSet($result); } + /** + * @param string $uuid + * @param array $excludedCollIds + * @return \record_adapter[] + */ + public function findByUuidWithExcludedCollIds($uuid, $excludedCollIds = []) + { + static $sql; + + if (!$sql) { + $qb = $this->createSelectBuilder() + ->where('uuid = :uuid') + ; + + if (!empty($excludedCollIds)) { + $qb->andWhere($qb->expr()->notIn('coll_id', ':coll_id')); + } + + $sql = $qb->getSQL(); + } + + $result = $this->databox->get_connection()->fetchAll($sql, + [ + 'uuid' => $uuid, + 'coll_id' => $excludedCollIds + ], + [ + ':coll_id' => Connection::PARAM_INT_ARRAY + ] + ); + + return $this->mapRecordsFromResultSet($result); + } + public function findByRecordIds(array $recordIds) { static $sql; @@ -120,7 +182,7 @@ class LegacyRecordRepository implements RecordRepository return $this->mapRecordsFromResultSet($result); } - public function findChildren(array $storyIds, $user = null) + public function findChildren(array $storyIds, $user = null, $offset = 1, $max_items = null) { if (!$storyIds) { return []; @@ -129,25 +191,73 @@ class LegacyRecordRepository implements RecordRepository $connection = $this->databox->get_connection(); $selects = $this->getRecordSelects(); - array_unshift($selects, 's.rid_parent as story_id'); - $builder = $connection->createQueryBuilder(); - $builder - ->select($selects) - ->from('regroup', 's') - ->innerJoin('s', 'record', 'r', 'r.record_id = s.rid_child') - ->where( - 's.rid_parent IN (:storyIds)', - 'r.parent_record_id = 0' - ) - ->setParameter('storyIds', $storyIds, Connection::PARAM_INT_ARRAY) - ; + if ($max_items) { + array_unshift($selects, 'sr.rid_parent as story_id'); - if (null !== $user) { - $this->addUserFilter($builder, $user); + $subBuilder = $connection->createQueryBuilder(); + + $subBuilder + ->select('s.*, + IF(@old_rid_parent != s.rid_parent, @cpt := 1, @cpt := @cpt+1) AS CPT') + ->addSelect("IF(@old_rid_parent != s.rid_parent, IF(@old_rid_parent:=s.rid_parent,'NEW PARENT',0), '----------') AS Y") + ->from('regroup', 's') + ->where('s.rid_parent IN (:storyIds)') + ->setParameter('storyIds', $storyIds, Connection::PARAM_INT_ARRAY) + ->orderBy('s.rid_parent, s.ord') + ; + + $builder = $subBuilder->getConnection()->createQueryBuilder(); + + $builder->select($selects) + ->from(sprintf('( %s )', $subBuilder->getSQL()), 'sr') + ->innerJoin('sr', 'record', 'r', 'r.record_id = sr.rid_child') + ->where('sr.CPT BETWEEN :offset AND :maxresult') + ->andWhere('r.parent_record_id = 0') + ->setParameter('offset', $offset) + ->setParameter('maxresult', ($offset + $max_items -1)) + ->orderBy('story_id, sr.CPT') + ; + + if (null !== $user) { + $this->addUserFilter($builder, $user); + } + + $connection->executeQuery('SET @cpt = 1'); + + $connection->executeQuery('SET @old_rid_parent = -1'); + + + $data = $connection->fetchAll( + $builder->getSQL(), + array_merge($subBuilder->getParameters(), $builder->getParameters()), + array_merge($subBuilder->getParameterTypes(), $builder->getParameterTypes()) + ); + + } else { + array_unshift($selects, 's.rid_parent as story_id'); + + $builder = $connection->createQueryBuilder(); + + $builder + ->select($selects) + ->from('regroup', 's') + ->innerJoin('s', 'record', 'r', 'r.record_id = s.rid_child') + ->where( + 's.rid_parent IN (:storyIds)', + 'r.parent_record_id = 0' + ) + ->orderBy('s.ord', 'ASC') + ->setParameter('storyIds', $storyIds, Connection::PARAM_INT_ARRAY) + ; + + if (null !== $user) { + $this->addUserFilter($builder, $user); + } + + $data = $connection->fetchAll($builder->getSQL(), $builder->getParameters(), $builder->getParameterTypes()); } - $data = $connection->fetchAll($builder->getSQL(), $builder->getParameters(), $builder->getParameterTypes()); $records = $this->mapRecordsFromResultSet($data); $selections = array_map( diff --git a/lib/Alchemy/Phrasea/Databox/Record/RecordRepository.php b/lib/Alchemy/Phrasea/Databox/Record/RecordRepository.php index 0da49bb00f..bab31055da 100644 --- a/lib/Alchemy/Phrasea/Databox/Record/RecordRepository.php +++ b/lib/Alchemy/Phrasea/Databox/Record/RecordRepository.php @@ -26,12 +26,26 @@ interface RecordRepository */ public function findBySha256($sha256); + /** + * @param string $sha256 + * @param array $excludedCollIds + * @return \record_adapter[] + */ + public function findBySha256WithExcludedCollIds($sha256, $excludedCollIds = []); + /** * @param string $uuid * @return \record_adapter[] */ public function findByUuid($uuid); + /** + * @param string $uuid + * @param array $excludedCollIds + * @return \record_adapter[] + */ + public function findByUuidWithExcludedCollIds($uuid, $excludedCollIds = []); + /** * @param array $recordIds * @return \record_adapter[] @@ -43,9 +57,11 @@ interface RecordRepository * * @param int[] $storyIds * @param null|int|User $user + * @param int $offset + * @param null|int $max_items * @return \set_selection[] */ - public function findChildren(array $storyIds, $user = null); + public function findChildren(array $storyIds, $user = null, $offset = 1, $max_items = null); /** diff --git a/lib/Alchemy/Phrasea/Media/Subdef/Video.php b/lib/Alchemy/Phrasea/Media/Subdef/Video.php index ef0a113564..be673b937a 100644 --- a/lib/Alchemy/Phrasea/Media/Subdef/Video.php +++ b/lib/Alchemy/Phrasea/Media/Subdef/Video.php @@ -33,7 +33,7 @@ class Video extends Audio $this->registerOption(new OptionType\Range($this->translator->trans('Frame Rate'), self::OPTION_FRAMERATE, 1, 200, 20)); $this->registerOption(new OptionType\Enum($this->translator->trans('Video Codec'), self::OPTION_VCODEC, ['libx264', 'libvpx', 'libtheora'], 'libx264')); $this->unregisterOption(self::OPTION_ACODEC); - $this->registerOption(new OptionType\Enum($this->translator->trans('Audio Codec'), self::OPTION_ACODEC, ['libfaac', 'libvo_aacenc', 'libmp3lame', 'libvorbis'], 'libfaac')); + $this->registerOption(new OptionType\Enum($this->translator->trans('Audio Codec'), self::OPTION_ACODEC, ['libfaac', 'libvo_aacenc', 'libmp3lame', 'libvorbis', 'libfdk_aac'], 'libmp3lame')); } public function getType() diff --git a/lib/Alchemy/Phrasea/Model/Entities/LazaretFile.php b/lib/Alchemy/Phrasea/Model/Entities/LazaretFile.php index 9355acc471..221027e28e 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/LazaretFile.php +++ b/lib/Alchemy/Phrasea/Model/Entities/LazaretFile.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Model\Entities; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Border\Attribute\AttributeInterface; use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; use \record_adapter; @@ -474,4 +475,32 @@ class LazaretFile return $merged; } + /** + * @param Application $app + * @return array|null + */ + public function getStatus(Application $app) + { + /**@var LazaretAttribute $atribute*/ + foreach ($this->attributes as $atribute) { + if ($atribute->getName() == AttributeInterface::NAME_STATUS) { + $databox = $this->getCollection($app)->get_databox(); + $statusStructure = $databox->getStatusStructure(); + $recordsStatuses = []; + foreach ($statusStructure as $status) { + $bit = $status['bit']; + if (!isset($recordsStatuses[$bit])) { + $recordsStatuses[$bit] = $status; + } + $statusSet = \databox_status::bitIsSet(bindec($atribute->getValue()), $bit); + if (!isset($recordsStatuses[$bit]['flag'])) { + $recordsStatuses[$bit]['flag'] = (int) $statusSet; + } + } + return $recordsStatuses; + } + } + return null; + } + } diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/LazaretManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/LazaretManipulator.php index fff97be4bd..3c86fe91e3 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/LazaretManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/LazaretManipulator.php @@ -226,6 +226,8 @@ class LazaretManipulator $this->entityManager->remove($lazaretFile); $this->entityManager->flush(); + $ret['result']['record_id'] = $record->getRecordId(); + $ret['success'] = true; } catch (\Exception $e) { $ret['message'] = $this->app->trans('An error occured'); diff --git a/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php index b835a821e0..e01864e398 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/BasketRepository.php @@ -232,7 +232,7 @@ class BasketRepository extends EntityRepository $dql = "SELECT b\n" . "FROM Phraseanet:Basket b\n" . " JOIN b.elements e\n" - . "WHERE b.user = :usr_id AND b.pusher_id IS NOT NULL"; + . "WHERE b.user = :usr_id AND b.pusher IS NOT NULL"; $params = [ 'usr_id' => $user->getId() ]; diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php index 4bc98ec6b9..bf239ffbd1 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/TextNode.php @@ -45,6 +45,9 @@ class TextNode extends AbstractTermNode implements ContextAbleInterface foreach ($context->localizeField($field) as $f) { $index_fields[] = $f; } + foreach ($context->truncationField($field) as $f) { + $index_fields[] = $f; + } } if (!$index_fields) { return null; diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php index 87d54c5b71..0532f85c30 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php @@ -323,7 +323,7 @@ class ElasticsearchOptions "aggregated (2 values: fired = 0 or 1)" => -1, ], 'output_formatter' => function($value) { - static $map = ['0'=>"No flash", '1'=>"Flash"]; + static $map = ["false"=>"No flash", "true"=>"Flash", '0'=>"No flash", '1'=>"Flash"]; return array_key_exists($value, $map) ? $map[$value] : $value; }, ], diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Index.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Index.php index dd5d942f78..9671b83226 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Index.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Index.php @@ -90,6 +90,16 @@ class Index // TODO Maybe replace nfkc_normalizer + asciifolding with icu_folding 'filter' => ['nfkc_normalizer', 'asciifolding'] ], + 'truncation_analyzer' => [ + 'type' => 'custom', + 'tokenizer' => 'truncation_tokenizer', + 'filter' => ['lowercase', 'stop', 'kstem'] + ], + 'truncation_analyzer#search' => [ + 'type' => 'custom', + 'tokenizer' => 'truncation_tokenizer', + 'filter' => ['lowercase', 'stop', 'kstem'] + ], // Lang specific 'fr_full' => [ 'type' => 'custom', @@ -145,6 +155,12 @@ class Index ] ], 'tokenizer' => [ + 'truncation_tokenizer' => [ + "type" => "edgeNGram", + "min_gram" => "2", + "max_gram" => "15", + "token_chars" => [ "letter", "digit", "punctuation", "symbol" ] + ], 'thesaurus_path' => [ 'type' => 'path_hierarchy' ] diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/ThesaurusHydrator.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/ThesaurusHydrator.php index 4107285ac2..d8076b2922 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/ThesaurusHydrator.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/ThesaurusHydrator.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator; use Alchemy\Phrasea\SearchEngine\Elastic\Exception\Exception; use Alchemy\Phrasea\SearchEngine\Elastic\RecordHelper; +use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure; use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus; use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\CandidateTerms; use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\Concept; @@ -27,7 +28,7 @@ class ThesaurusHydrator implements HydratorInterface private $thesaurus; private $candidate_terms; - public function __construct(Structure $structure, Thesaurus $thesaurus, CandidateTerms $candidate_terms) + public function __construct(GlobalStructure $structure, Thesaurus $thesaurus, CandidateTerms $candidate_terms) { $this->structure = $structure; $this->thesaurus = $thesaurus; @@ -42,7 +43,7 @@ class ThesaurusHydrator implements HydratorInterface $fields = []; $index_fields = []; foreach ($structure as $name => $field) { - $fields[$name] = $field->getThesaurusRoots(); + $fields[$name] = $field; // ->getThesaurusRoots(); $index_fields[$name] = $field->getIndexField(); } // Hydrate records with concepts @@ -51,7 +52,13 @@ class ThesaurusHydrator implements HydratorInterface } } - private function hydrate(array &$record, array $fields, array $index_fields) + /** + * @param array $record + * @param Field[] $fields + * @param array $index_fields + * @throws Exception + */ + private function hydrate(array &$record, $fields, array $index_fields) { if (!isset($record['databox_id'])) { throw new Exception('Expected a record with the "databox_id" key set.'); @@ -61,7 +68,14 @@ class ThesaurusHydrator implements HydratorInterface $terms = array(); $filters = array(); $field_names = array(); - foreach ($fields as $name => $root_concepts) { + /** @var Field[] $dbFields */ + $dbFields = $this->structure->getAllFieldsByDatabox($record['databox_id']); + foreach ($fields as $name => $field) { + if(!array_key_exists($name, $dbFields) || !$dbFields[$name]->get_generate_cterms()) { + continue; + } + + $root_concepts = $field->getThesaurusRoots(); // Loop through all values to prepare bulk query $field_values = \igorw\get_in($record, explode('.', $index_fields[$name])); if ($field_values !== null) { @@ -84,12 +98,13 @@ class ThesaurusHydrator implements HydratorInterface $bulk = $this->thesaurus->findConceptsBulk($terms, null, $filters, true); foreach ($bulk as $offset => $item_concepts) { + $name = $field_names[$offset]; if ($item_concepts && is_array($item_concepts) && count($item_concepts)>0) { - $name = $field_names[$offset]; foreach ($item_concepts as $concept) { $record['concept_path'][$name][] = $concept->getPath(); } - } else { + } + else { $this->candidate_terms->insert($field_names[$offset], $values[$offset]); } } diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Mapping/StringFieldMapping.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Mapping/StringFieldMapping.php index b9022b2238..4f7c9d360d 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Mapping/StringFieldMapping.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Mapping/StringFieldMapping.php @@ -55,8 +55,13 @@ class StringFieldMapping extends ComplexFieldMapping { $child = new StringFieldMapping('light'); $child->setAnalyzer('general_light'); - $this->addChild($child); + + $child = new StringFieldMapping('truncated'); + $child->setAnalyzer('truncation_analyzer', 'indexing'); + $child->setAnalyzer('truncation_analyzer#search', 'searching'); + $this->addChild($child); + $this->addLocalizedChildren($locales); return $this; diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/Escaper.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/Escaper.php index 728ed3e372..6369d426cc 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/Escaper.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/Escaper.php @@ -4,6 +4,11 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Search; class Escaper { + public function quoteWord($value) + { + return '"' . $this->escapeRaw($value) . '"'; + } + public function escapeWord($value) { // Strip double quotes from values to prevent broken queries diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php index 55503d50d6..2f2d966c51 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php @@ -46,22 +46,23 @@ class FacetsResponse if (!isset($bucket['key']) || !isset($bucket['doc_count'])) { $this->throwAggregationResponseError(); } + $key = array_key_exists('key_as_string', $bucket) ? $bucket['key_as_string'] : $bucket['key']; if($tf) { // the field is one of the hardcoded tech fields $value = [ - 'value' => $valueFormatter($bucket['key']), - 'raw_value' => $bucket['key'], + 'value' => $valueFormatter($key), + 'raw_value' => $key, 'count' => $bucket['doc_count'], - 'query' => sprintf($tf['query'], $this->escaper->escapeWord($bucket['key'])) + 'query' => sprintf($tf['query'], $this->escaper->escapeWord($key)) ]; } else { // the field is a normal field $value = [ - 'value' => $bucket['key'], - 'raw_value' => $bucket['key'], + 'value' => $key, + 'raw_value' => $key, 'count' => $bucket['doc_count'], - 'query' => sprintf('field.%s:%s', $this->escaper->escapeWord($name), $this->escaper->escapeWord($bucket['key'])) + 'query' => sprintf('field.%s=%s', $this->escaper->escapeWord($name), $this->escaper->quoteWord($key)) ]; } diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContext.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContext.php index cd65ed8d1d..69baf9f5bf 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContext.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContext.php @@ -9,6 +9,7 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Field; use Alchemy\Phrasea\SearchEngine\Elastic\AST\Field as ASTField; use Alchemy\Phrasea\SearchEngine\Elastic\AST\Flag; use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure; +use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; /** * @todo Check for private fields and only search on them if allowed @@ -23,13 +24,23 @@ class QueryContext private $queryLocale; /** @var array */ private $fields; + /** @var SearchEngineOptions */ + private $options; - public function __construct(Structure $structure, array $locales, $queryLocale, array $fields = null) + /** + * @param SearchEngineOptions|null $options + * @param Structure $structure + * @param array $locales + * @param $queryLocale + * @param array $fields + */ + public function __construct($options, Structure $structure, array $locales, $queryLocale, array $fields = null) { $this->structure = $structure; $this->locales = $locales; $this->queryLocale = $queryLocale; $this->fields = $fields; + $this->options = $options; } public function narrowToFields(array $fields) @@ -43,7 +54,7 @@ class QueryContext } } - return new static($this->structure, $this->locales, $this->queryLocale, $fields); + return new static($this->options, $this->structure, $this->locales, $this->queryLocale, $fields); } /** @@ -131,6 +142,16 @@ class QueryContext return $ret; } + public function truncationField(Field $field) + { + if($this->options && $this->options->useTruncation()) { + return [sprintf('%s.truncated', $field->getIndexField())]; + } + else { + return []; + } + } + private function localizeFieldName($field) { $fields = array(); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContextFactory.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContextFactory.php index f199434677..9443c79655 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContextFactory.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/QueryContextFactory.php @@ -23,7 +23,7 @@ class QueryContextFactory ? $this->getLimitedStructure($options) : $this->structure; - $context = new QueryContext($structure, $this->locales, $this->current_locale); + $context = new QueryContext($options, $structure, $this->locales, $this->current_locale); if ($options) { $fields = $this->getSearchedFields($options); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/StringUtils.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/StringUtils.php index bb8f3dedfd..0131fa942b 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/StringUtils.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/StringUtils.php @@ -63,4 +63,26 @@ class StringUtils return self::$transliterator->transliterate($string); } + + /** + * replace bad chars (ascii 0...31 except 9,10,13) + * + * @param $s + * @param string $replace + * @return mixed + */ + public static function substituteCtrlCharacters($s, $replace = '_') + { + static $bad_chars = null; + if($bad_chars === null) { + $bad_chars = []; + for($i=0; $i<32; $i++) { + if($i != 9 && $i != 10 && $i != 13) { + $bad_chars[] = chr($i); + } + } + } + + return str_replace($bad_chars, $replace, $s); + } } diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Field.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Field.php index 3b71f6f451..5333da5ab4 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Field.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Field.php @@ -24,6 +24,11 @@ class Field implements Typed */ private $name; + /** + * @var int + */ + private $databox_id; + /** * @var string */ @@ -43,6 +48,8 @@ class Field implements Typed private $thesaurus_roots; + private $generate_cterms; + private $used_by_collections; public static function createFromLegacyField(databox_field $field, $with = Structure::WITH_EVERYTHING) @@ -71,10 +78,12 @@ class Field implements Typed } return new self($field->get_name(), $type, [ + 'databox_id' => $databox->get_sbas_id(), 'searchable' => $field->is_indexable(), 'private' => $field->isBusiness(), 'facet' => $facet, 'thesaurus_roots' => $roots, + 'generate_cterms' => $field->get_generate_cterms(), 'used_by_collections' => $databox->get_collection_unique_ids() ]); } @@ -99,10 +108,12 @@ class Field implements Typed { $this->name = (string) $name; $this->type = $type; + $this->databox_id = \igorw\get_in($options, ['databox_id'], 0); $this->is_searchable = \igorw\get_in($options, ['searchable'], true); $this->is_private = \igorw\get_in($options, ['private'], false); $this->facet = \igorw\get_in($options, ['facet']); $this->thesaurus_roots = \igorw\get_in($options, ['thesaurus_roots'], null); + $this->generate_cterms = \igorw\get_in($options, ['generate_cterms'], false); $this->used_by_collections = \igorw\get_in($options, ['used_by_collections'], []); Assertion::boolean($this->is_searchable); @@ -122,10 +133,12 @@ class Field implements Typed public function withOptions(array $options) { return new self($this->name, $this->type, $options + [ + 'databox_id' => $this->databox_id, 'searchable' => $this->is_searchable, 'private' => $this->is_private, 'facet' => $this->facet, 'thesaurus_roots' => $this->thesaurus_roots, + 'generate_cterms' => $this->generate_cterms, 'used_by_collections' => $this->used_by_collections ]); } @@ -150,6 +163,11 @@ class Field implements Typed return sprintf('concept_path.%s', $this->name); } + public function get_databox_id() + { + return $this->databox_id; + } + public function getType() { return $this->type; @@ -190,6 +208,11 @@ class Field implements Typed return $this->thesaurus_roots; } + public function get_generate_cterms() + { + return $this->generate_cterms; + } + /** * Merge with another field, returning the new instance * diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php index 912bbe934a..ea4022dffb 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/GlobalStructure.php @@ -14,6 +14,12 @@ final class GlobalStructure implements Structure */ private $fields = array(); + + /** + * @var Field[][] + */ + private $fieldsByDatabox = []; + /** * @var Field[] * */ @@ -119,6 +125,10 @@ final class GlobalStructure implements Structure public function add(Field $field) { + // store info for each field, not still merged by databox + $this->fieldsByDatabox[$field->get_databox_id()][$field->getName()] = $field; + + // store merged infos (same field name) $name = $field->getName(); if (isset($this->fields[$name])) { @@ -152,6 +162,11 @@ final class GlobalStructure implements Structure return $this->fields; } + public function getAllFieldsByDatabox($databox_id) + { + return $this->fieldsByDatabox[$databox_id]; + } + /** * @return Field[] */ diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Thesaurus/CandidateTerms.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Thesaurus/CandidateTerms.php index cb5c6d24e8..9ebb6f2a7e 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Thesaurus/CandidateTerms.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Thesaurus/CandidateTerms.php @@ -32,6 +32,7 @@ class CandidateTerms public function insert($field, $value) { + $value = StringUtils::substituteCtrlCharacters($value, ''); $this->ensureVisitorSetup(); if (!$this->visitor->hasTerm($field, $value)) { $this->new_candidates[$value] = $field; diff --git a/lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php b/lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php index f52fbcdf21..5e942b1adf 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php +++ b/lib/Alchemy/Phrasea/SearchEngine/SearchEngineOptions.php @@ -71,6 +71,8 @@ class SearchEngineOptions protected $i18n; /** @var bool */ protected $stemming = true; + /** @var bool */ + protected $use_truncation = false; /** @var string */ protected $sort_by; @@ -105,7 +107,8 @@ class SearchEngineOptions 'sort_ord', 'business_fields', 'max_results', - 'first_result' + 'first_result', + 'use_truncation', ]; /** @@ -217,6 +220,29 @@ class SearchEngineOptions return $this; } + /** + * Tells whether to use truncation or not + * + * @param boolean $boolean + * @return $this + */ + public function setUseTruncation($boolean) + { + $this->use_truncation = !!$boolean; + + return $this; + } + + /** + * Return wheter the use of truncation is enabled or not + * + * @return boolean + */ + public function useTruncation() + { + return $this->use_truncation; + } + /** * Return wheter the use of stemming is enabled or not * @@ -542,6 +568,8 @@ class SearchEngineOptions $options->setFields($databoxFields); $options->setDateFields($databoxDateFields); + $options->setUseTruncation((Boolean) $request->get('truncation')); + return $options; } @@ -628,6 +656,7 @@ class SearchEngineOptions } }, 'stemming' => $optionSetter('setStemming'), + 'use_truncation' => $optionSetter('setUseTruncation'), 'date_fields' => function ($value, SearchEngineOptions $options) use ($fieldNormalizer) { $options->setDateFields($fieldNormalizer($value)); }, diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index c39271db6a..efbf36fe81 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -48,6 +48,7 @@ class PhraseanetExtension extends \Twig_Extension new \Twig_SimpleFunction('border_checker_from_fqcn', array($this, 'getCheckerFromFQCN')), new \Twig_SimpleFunction('caption_field', array($this, 'getCaptionField')), new \Twig_SimpleFunction('caption_field_label', array($this, 'getCaptionFieldLabel')), + new \Twig_SimpleFunction('caption_field_gui_visible', array($this, 'getCaptionFieldGuiVisible')), new \Twig_SimpleFunction('caption_field_order', array($this, 'getCaptionFieldOrder')), new \Twig_SimpleFunction('flag_slugify', array(Flag::class, 'normalizeName')), @@ -77,6 +78,29 @@ class PhraseanetExtension extends \Twig_Extension return ''; } + /** + * get localized field's gui_visible + * @param RecordInterface $record + * @param $fieldName + * @return string - the name gui_visible + */ + public function getCaptionFieldGuiVisible(RecordInterface $record, $fieldName) + { + if ($record) { + /** @var \appbox $appbox */ + $appbox = $this->app['phraseanet.appbox']; + $databox = $appbox->get_databox($record->getDataboxId()); + foreach ($databox->get_meta_structure() as $meta) { + /** @var \databox_field $meta */ + if ($meta->get_name() === $fieldName) { + return $meta->get_gui_visible($this->app['locale']); + } + } + } + + return ''; + } + public function getCaptionField(RecordInterface $record, $field, $value) { if ($record instanceof ElasticsearchRecord) { diff --git a/lib/Alchemy/Phrasea/Utilities/RedisSessionHandler.php b/lib/Alchemy/Phrasea/Utilities/RedisSessionHandler.php index b2e8c008cc..fd5ee8470d 100644 --- a/lib/Alchemy/Phrasea/Utilities/RedisSessionHandler.php +++ b/lib/Alchemy/Phrasea/Utilities/RedisSessionHandler.php @@ -80,7 +80,7 @@ class RedisSessionHandler implements \SessionHandlerInterface */ public function destroy($sessionId) { - return 1 === $this->redis->delete($this->prefix.$sessionId); + return 1 === $this->redis->del($this->prefix.$sessionId); } /** diff --git a/lib/classes/databox.php b/lib/classes/databox.php index c02ef4ffba..3377695e39 100644 --- a/lib/classes/databox.php +++ b/lib/classes/databox.php @@ -462,6 +462,9 @@ class databox extends base implements ThumbnailedElement ->set_aggregable((isset($field['aggregable']) ? (string) $field['aggregable'] : 0)) ->set_type($type) ->set_tbranch(isset($field['tbranch']) ? (string) $field['tbranch'] : '') + ->set_generate_cterms((isset($field['generate_cterms']) && (string) $field['generate_cterms'] == 1)) + ->set_gui_editable((!isset($field['gui_editable']) || (isset($field['gui_editable']) && (string) $field['gui_editable'] == 1))) + ->set_gui_visible((!isset($field['gui_visible']) || (isset($field['gui_visible']) && (string) $field['gui_visible'] == 1))) ->set_thumbtitle(isset($field['thumbtitle']) ? (string) $field['thumbtitle'] : (isset($field['thumbTitle']) ? $field['thumbTitle'] : '0')) ->set_report(isset($field['report']) ? (string) $field['report'] : '1') ->save(); @@ -1214,21 +1217,40 @@ class databox extends base implements ThumbnailedElement $domct = $this->get_dom_cterms(); if ($domct !== false) { + $changed = false; $nodesToDel = []; + // loop on first level : "fields" for($n = $domct->documentElement->firstChild; $n; $n = $n->nextSibling) { if($n->nodeType == XML_ELEMENT_NODE && !($n->getAttribute('delbranch'))){ - $nodesToDel[] = $n; + $nodesToDel2 = []; + // loop on 2nd level : "terms" + for($n2 = $n->firstChild; $n2; $n2 = $n2->nextSibling) { + // do not remove "rejected" candidates + if(substr($n2->getAttribute('id'), 0, 1) != 'R') { + $nodesToDel2[] = $n2; + } + } + foreach($nodesToDel2 as $n2) { + $n->removeChild($n2); + $changed = true; + } + // if a field has no more candidates, we can remove it + if(!($n->firstChild)) { + $nodesToDel[] = $n; + } } } foreach($nodesToDel as $n) { $n->parentNode->removeChild($n); + $changed = true; } - if(!empty($nodesToDel)) { + if($changed) { $this->saveCterms($domct); } } - } catch (\Exception $e) { - + } + catch (\Exception $e) { + // no-op } } diff --git a/lib/classes/databox/field.php b/lib/classes/databox/field.php index 35fc525265..85e9089cad 100644 --- a/lib/classes/databox/field.php +++ b/lib/classes/databox/field.php @@ -43,6 +43,9 @@ class databox_field implements cache_cacheableInterface protected $report; protected $type; protected $tbranch; + protected $generate_cterms; + protected $gui_editable; + protected $gui_visible; protected $separator; protected $thumbtitle; @@ -166,6 +169,9 @@ class databox_field implements cache_cacheableInterface $this->position = (int)$row['sorter']; $this->type = $row['type'] ?: self::TYPE_STRING; $this->tbranch = $row['tbranch']; + $this->generate_cterms = (bool)$row['generate_cterms']; + $this->gui_editable = (bool)$row['gui_editable']; + $this->gui_visible = (bool)$row['gui_visible']; $this->VocabularyType = $row['VocabularyControlType']; $this->VocabularyRestriction = (bool)$row['RestrictToVocabularyControl']; @@ -306,6 +312,9 @@ class databox_field implements cache_cacheableInterface `report` = :report, `type` = :type, `tbranch` = :tbranch, + `generate_cterms` = :generate_cterms, + `gui_editable` = :gui_editable, + `gui_visible` = :gui_visible, `sorter` = :position, `thumbtitle` = :thumbtitle, `VocabularyControlType` = :VocabularyControlType, @@ -329,6 +338,9 @@ class databox_field implements cache_cacheableInterface ':report' => $this->report ? '1' : '0', ':type' => $this->type, ':tbranch' => $this->tbranch, + ':generate_cterms' => $this->generate_cterms ? '1' : '0', + ':gui_editable' => $this->gui_editable ? '1' : '0', + ':gui_visible' => $this->gui_visible ? '1' : '0', ':position' => $this->position, ':thumbtitle' => $this->thumbtitle, ':VocabularyControlType' => $this->getVocabularyControl() ? $this->getVocabularyControl()->getType() : null, @@ -380,6 +392,9 @@ class databox_field implements cache_cacheableInterface $meta->setAttribute('aggregable', $this->aggregable); $meta->setAttribute('type', $this->type); $meta->setAttribute('tbranch', $this->tbranch); + $meta->setAttribute('generate_cterms', $this->generate_cterms ? '1' : '0'); + $meta->setAttribute('gui_editable', $this->gui_editable ? '1' : '0'); + $meta->setAttribute('gui_visible', $this->gui_visible ? '1' : '0'); if ($this->multi) { $meta->setAttribute('separator', $this->separator); } @@ -711,6 +726,39 @@ class databox_field implements cache_cacheableInterface return $this; } + /** + * @param boolean $generate_cterms + * @return databox_field + */ + public function set_generate_cterms($generate_cterms) + { + $this->generate_cterms = $generate_cterms; + + return $this; + } + + /** + * @param boolean $gui_editable + * @return databox_field + */ + public function set_gui_editable($gui_editable) + { + $this->gui_editable = $gui_editable; + + return $this; + } + + /** + * @param boolean $gui_visible + * @return databox_field + */ + public function set_gui_visible($gui_visible) + { + $this->gui_visible = $gui_visible; + + return $this; + } + /** * * @param string $separator @@ -795,6 +843,33 @@ class databox_field implements cache_cacheableInterface return $this->tbranch; } + /** + * + * @return boolean + */ + public function get_generate_cterms() + { + return $this->generate_cterms; + } + + /** + * + * @return boolean + */ + public function get_gui_editable() + { + return $this->gui_editable; + } + + /** + * + * @return boolean + */ + public function get_gui_visible() + { + return $this->gui_visible; + } + /** * @param Boolean $all If set to false, returns a one-char separator to use for serialiation * @@ -905,6 +980,9 @@ class databox_field implements cache_cacheableInterface 'sorter' => $this->position, 'thumbtitle' => $this->thumbtitle, 'tbranch' => $this->tbranch, + 'generate_cterms' => $this->generate_cterms, + 'gui_editable' => $this->gui_editable, + 'gui_visible' => $this->gui_visible, 'separator' => $this->separator, 'required' => $this->required, 'report' => $this->report, @@ -943,10 +1021,10 @@ class databox_field implements cache_cacheableInterface } $sql = "INSERT INTO metadatas_structure - (`id`, `name`, `src`, `readonly`, `required`, `indexable`, `type`, `tbranch`, + (`id`, `name`, `src`, `readonly`, `gui_editable`,`gui_visible`, `required`, `indexable`, `type`, `tbranch`, `generate_cterms`, `thumbtitle`, `multi`, `business`, `aggregable`, `report`, `sorter`, `separator`) - VALUES (null, :name, '', 0, 0, 1, 'string', '', + VALUES (null, :name, '', 0, 1, 1, 0, 1, 'string', '', 1, null, 0, 0, 0, 1, :sorter, '')"; diff --git a/lib/classes/patch/410alpha17a.php b/lib/classes/patch/410alpha17a.php new file mode 100644 index 0000000000..ff682b1ef9 --- /dev/null +++ b/lib/classes/patch/410alpha17a.php @@ -0,0 +1,67 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function apply(base $databox, Application $app) + { + // -- done by xml schema -- + // $sql = "ALTER TABLE `metadatas_structure` ADD `generate_cterms` INT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `tbranch`"; + // $databox->get_connection()->executeQuery($sql); + // $sql = "ALTER TABLE `metadatas_structure` ADD `gui_editable` INT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `readonly`"; + // $databox->get_connection()->executeQuery($sql); + + return true; + } +} diff --git a/lib/classes/patch/410alpha19a.php b/lib/classes/patch/410alpha19a.php new file mode 100644 index 0000000000..43646981a4 --- /dev/null +++ b/lib/classes/patch/410alpha19a.php @@ -0,0 +1,69 @@ +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) + { + // remove all and last in default query + $sql = "UPDATE UserSettings SET value = '' WHERE name = 'start_page_query' AND lower(trim(value)) in ('all','last')"; + $stmt = $appbox->get_connection()->prepare($sql); + $stmt->execute(); + $stmt->closeCursor(); + + return true; + } +} diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index ebf9c0d4e8..e8dc587451 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -1685,6 +1685,43 @@ class record_adapter implements RecordInterface, cache_cacheableInterface return $records; } + public static function getRecordsByOriginalnameWithExcludedCollIds(databox $databox, $original_name, $caseSensitive = false, $offset_start = 0, $how_many = 10, $excludedCollIds = []) + { + $offset_start = max(0, (int)$offset_start); + $how_many = max(1, (int)$how_many); + $collate = $caseSensitive ? 'utf8_bin' : 'utf8_unicode_ci'; + + $qb = $databox->get_connection()->createQueryBuilder() + ->select('record_id') + ->from('record') + ->where('originalname = :original_name COLLATE :collate') + ; + + $params = ['original_name' => $original_name, 'collate' => $collate]; + $types = []; + + if (!empty($excludedCollIds)) { + $qb->andWhere($qb->expr()->notIn('coll_id', ':coll_id')); + + $params['coll_id'] = $excludedCollIds; + $types[':coll_id'] = Connection::PARAM_INT_ARRAY; + } + + $sql = $qb->setFirstResult($offset_start) + ->setMaxResults($how_many) + ->getSQL() + ; + + $rs = $databox->get_connection()->fetchAll($sql, $params, $types); + + $records = []; + foreach ($rs as $row) { + $records[] = $databox->get_record($row['record_id']); + } + + return $records; + } + /** * @return set_selection|record_adapter[] * @throws Exception @@ -1697,17 +1734,20 @@ class record_adapter implements RecordInterface, cache_cacheableInterface } /** + * @param int $offset + * @param null|int $max_items + * * @return set_selection|record_adapter[] * @throws Exception * @throws \Doctrine\DBAL\DBALException */ - public function getChildren() + public function getChildren($offset = 1, $max_items = null) { if (!$this->isStory()) { throw new Exception('This record is not a grouping'); } - $selections = $this->getDatabox()->getRecordRepository()->findChildren([$this->getRecordId()]); + $selections = $this->getDatabox()->getRecordRepository()->findChildren([$this->getRecordId()], null, $offset, $max_items); return reset($selections); } diff --git a/lib/conf.d/bases_structure.xml b/lib/conf.d/bases_structure.xml index a666eaeb5c..8cfcd692fd 100644 --- a/lib/conf.d/bases_structure.xml +++ b/lib/conf.d/bases_structure.xml @@ -2033,6 +2033,30 @@ + + generate_cterms + int(1) unsigned + + + 1 + + + + gui_editable + int(1) unsigned + + + 1 + + + + gui_visible + int(1) unsigned + + + 1 + + diff --git a/lib/conf.d/data_templates/DublinCore.xml b/lib/conf.d/data_templates/DublinCore.xml index 31e874a13d..eae43d5461 100644 --- a/lib/conf.d/data_templates/DublinCore.xml +++ b/lib/conf.d/data_templates/DublinCore.xml @@ -79,7 +79,7 @@ 748 video yes - libfaac + libmp3lame libx264 screen 1000 diff --git a/lib/conf.d/data_templates/en-simple.xml b/lib/conf.d/data_templates/en-simple.xml index 5c5b10910d..44b0afa69f 100644 --- a/lib/conf.d/data_templates/en-simple.xml +++ b/lib/conf.d/data_templates/en-simple.xml @@ -79,7 +79,7 @@ 748 video yes - libfaac + libmp3lame libx264 screen 1000 diff --git a/lib/conf.d/data_templates/fr-simple.xml b/lib/conf.d/data_templates/fr-simple.xml index 49ab36b98d..cc0a2b582c 100644 --- a/lib/conf.d/data_templates/fr-simple.xml +++ b/lib/conf.d/data_templates/fr-simple.xml @@ -79,7 +79,7 @@ 748 video yes - libfaac + libmp3lame libx264 screen 1000 diff --git a/package.json b/package.json index 84823d0938..7525421e67 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.72-d", + "phraseanet-production-client": "^0.34.86-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 60bd9547fb..f6f73c85c8 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.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 @@ -26,6 +26,13 @@ Parameter "Authentifizierung erzwingen" erzwingt den Push Empfänger, ein Phraseanet Konto zu haben, um den Inhalt anzuschauen. Es vermeidet, unautorisierte Benutzer dem Push Inhalt zuzugreifen, falls sie die URL bekämen (Email wurde weitergeleitet, zum Beispiel). prod/templates/push.html.twig + + {0} No results|{1} Result|]1,Inf[ Results + + {0} No results|{1} Result|]1,Inf[ Results + + WorkZone/Browser/Results.html.twig + #3567c6 #3567c6 @@ -105,8 +112,7 @@ %Total% results %Total% Ergebnisse - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents @@ -206,7 +212,7 @@ selectionnes]]> ausgewählt]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -272,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. @@ -287,12 +293,12 @@ %total% reponses %total% Ergebnisse - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %user% a envoye son rapport de validation de %title% %user% hat seinen Bestätigungsbericht von %title% gesendet - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php %user% a passe une %opening_link% commande %end_link% @@ -342,7 +348,7 @@ %user% vous a delivre %quantity% document(s) pour votre commande %title% %user% hat %quantity% Dokument(e) für Ihre Bestellung %title% geliefert - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php %user% vous a delivre votre commande, consultez la en ligne a l'adresse suivante @@ -402,8 +408,7 @@ 1 result 1 Ergebnis - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -484,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 @@ -671,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 @@ -756,7 +761,8 @@ Advanced Search Erweiterte Suche - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -771,52 +777,52 @@ 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 Aggregation Aggregation - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aide Hilfe - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres Hilfe zu reguläre Ausdrücken - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Ajouter a @@ -863,12 +869,12 @@ All these conditions Alle Bedingungen - web/prod/index.html.twig + web/prod/index.html.twig All values Alle Werte - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aller a @@ -933,14 +939,14 @@ 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 Also delete records that rely on groupings. @@ -951,7 +957,7 @@ An error occured Ein Fehler ist aufgetreten Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -976,8 +982,8 @@ Controller/Admin/CollectionController.php Controller/Prod/BasketController.php Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php + Controller/Prod/LazaretController.php + Controller/Prod/MoveCollectionController.php Controller/Prod/StoryController.php web/admin/users.html.twig admin/databox/databox.html.twig @@ -986,6 +992,11 @@ admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + + An error occured when wanting to change status! + An error occured when wanting to change status! + Controller/Prod/LazaretController.php + An error occured while denying, please retry or contact an admin if problem persists Ein Fehler ist aufgetreten bei der Verweigerung. Bitte versuchen Sie es erneut oder wenden Sie sich an Ihren Systemadministrator @@ -1025,8 +1036,8 @@ Controller/Admin/SearchEngineController.php Controller/Admin/CollectionController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php web/admin/statusbit.html.twig @@ -1198,7 +1209,7 @@ Aucun Kein(e) - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1213,7 +1224,7 @@ Aucun statut editable Kein editierbarer Status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1254,7 +1265,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1468,7 +1479,7 @@ Basket is not found Sammelkorb wurde nicht gefunden - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1520,7 +1531,7 @@ Business Fields Geschäftsfelder - admin/fields/templates.html.twig + admin/fields/templates.html.twig By checking this box, you accept %beginning_link% Terms of Use %end_link% @@ -1538,7 +1549,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1800,7 +1811,7 @@ Codec Audio Audio Codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1812,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 @@ -1829,7 +1840,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1850,7 +1861,7 @@ Commande Bestellung eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1860,7 +1871,7 @@ Commandes Bestellungen - web/common/menubar.html.twig + web/common/menubar.html.twig Company @@ -1900,7 +1911,7 @@ Configuration Konfiguration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1930,7 +1941,7 @@ login/providers/bind.html.twig login/providers/bind.html.twig web/login/index.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig @@ -1956,7 +1967,7 @@ Contains enthält - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2011,7 +2022,7 @@ Couleur de selection Farbauswahl - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2122,7 +2133,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 @@ -2220,12 +2231,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 @@ -2235,7 +2246,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2264,7 +2275,7 @@ Date(s) from field(s) Datum vom Feld - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2307,7 +2318,7 @@ Default basket Standard Sammelkorb - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2342,7 +2353,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2362,8 +2373,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 @@ -2380,7 +2391,7 @@ Delete basket Sammelkorb löschen - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2520,17 +2531,17 @@ Display technical data Technische Informationen anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails Vorschaubilder anschauen - admin/fields/templates.html.twig + admin/fields/templates.html.twig Do not display Nicht anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2562,7 +2573,7 @@ Document Dokument - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2718,7 +2729,7 @@ Edition impossible Bearbeitung nicht möglich - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -3001,7 +3012,7 @@ Equals gleicht - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3094,7 +3105,7 @@ Error while creating user Fehler bei der Erstellung des Benutzers - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3144,7 +3155,7 @@ Ex : Paris, bleu, montagne Ex : Berlin, blau, Gebirge - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3205,7 +3216,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig Feeds @@ -3264,7 +3275,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3294,7 +3305,7 @@ Filename Dateiname - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3327,7 +3338,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3424,6 +3435,11 @@ Allgemeine Einstellungen web/admin/dashboard.html.twig + + Generate-cterms + Generate-cterms + admin/fields/templates.html.twig + Generates a flexpaper flash file Erstellt eine Flexpaper Flash Datei @@ -3458,7 +3474,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3533,7 +3549,7 @@ Graphiste (preview au rollover) Grafiker (Voransicht mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3548,8 +3564,8 @@ Guest Gast - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Guest access @@ -3561,6 +3577,16 @@ Gast, sie müssen authentifizieren, um die Dateien herunterzuladen. web/common/dialog_export.html.twig + + Gui-editable + Gui-editable + admin/fields/templates.html.twig + + + Gui-visible + Gui-visible + admin/fields/templates.html.twig + HD Download HD Download @@ -3576,7 +3602,7 @@ Help Hilfe - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3595,7 +3621,7 @@ mobile/lightbox/feed.html.twig mobile/lightbox/validate.html.twig login/include/language-block.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Homepage slideshow @@ -3631,7 +3657,7 @@ Iconographe (description au rollover) Bildredakteur (Beschreibung mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3676,7 +3702,7 @@ Image Bild - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3686,7 +3712,7 @@ Images par secondes Bilder pro Sekunde - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -3702,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 @@ -3714,7 +3740,7 @@ Incorrect please try again Falsch, bitte versuchen Sie es erneut - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3870,17 +3896,17 @@ L'utilisateur approuve ce document Benutzer genehmigt dieses Dokument - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur desapprouve ce document Benutzer lehnt dieses Dokument ab - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur n'a pas encore donne son avis sur ce document Benutzer hat seine Meinung nocht nicht gegeben - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig La connection vers le serveur distant est OK @@ -3926,7 +3952,7 @@ Language Sprache - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -3956,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 @@ -4058,12 +4084,12 @@ Les status de certains documents ne sont pas accessibles par manque de droits Status von einigen Dokumenten werden nicht erreichbar, fehlende Rechte - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig 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 @@ -4193,7 +4219,7 @@ Ma derniere question meine letzte Suchabfrage - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4350,7 +4376,7 @@ Mode de presentation Anzeigemodus - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4569,7 +4595,7 @@ No preview available Keine Voransicht verfügbar - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4584,8 +4610,7 @@ No results Keine Ergebnisse - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4664,7 +4689,7 @@ Not aggregated Nicht aggregiert - admin/fields/templates.html.twig + admin/fields/templates.html.twig Notification par email @@ -4674,8 +4699,8 @@ Notifications Benachrichtigungen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales @@ -4774,7 +4799,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. @@ -4800,7 +4825,7 @@ Or login with Oder Anmeldung mit web/login/register.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig api/auth/end_user_authorization.html.twig @@ -4827,7 +4852,7 @@ Orders manager Bestellungen Manager eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -5124,8 +5149,8 @@ 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 Prefix for notification emails @@ -5140,12 +5165,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 @@ -5198,10 +5223,10 @@ 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 + web/common/menubar.html.twig Publier @@ -5310,80 +5335,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% @@ -5398,14 +5423,14 @@ Rapport de Validation Bestätigungsbericht - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Re-initialiser Zurücksetzen prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5453,22 +5478,22 @@ Received from %user_name% Von %user_name% bekommen WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Reception d'un rapport de validation Empfang eines Bestätigungsberichtes - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Reception d'une commande Eingang einer Bestellung - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception de commande Empfangskontrolle - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception of %basket_name% @@ -5508,7 +5533,7 @@ Rechercher dans un champ date im Feld "Datum" suchen - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5528,7 +5553,7 @@ Record Not Found Datensatz wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5553,7 +5578,7 @@ Records have been successfuly moved Datensätze wurden erfolgreich bewegt - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5599,7 +5624,7 @@ Relevance Relevanz - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5663,7 +5688,7 @@ Report Report - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5971,7 +5996,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 ! @@ -6006,7 +6031,7 @@ Selected base(s) Ausgewählte Datenbank(en) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6057,7 +6082,7 @@ Sent for validation to %list_participants% Für die Bestätigung zu %list_participants% gesendet WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Separator @@ -6176,7 +6201,7 @@ Size Grösse - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig web/common/technical_datas.html.twig @@ -6283,7 +6308,7 @@ Status des documents a rechercher Zustand der Dokumente - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6321,7 +6346,7 @@ Story Not Found Bericht wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6376,8 +6401,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 @@ -6421,7 +6446,7 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig @@ -6562,7 +6587,7 @@ Controller/Prod/TOUController.php web/admin/tree.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6583,7 +6608,7 @@ The application is going down for maintenance, please logout. Die Anwendung wird wegen Überarbeitung heruntergefahren. Vielen Dank für Ihr Verständnis Controller/Root/SessionController.php - Controller/Root/SessionController.php + Controller/Root/SessionController.php The authentication token specified in the Authorization header has expired. @@ -6603,7 +6628,7 @@ The destination record provided is not allowed Zieldatensatz wird nicht erlaubt - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6701,7 +6726,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6727,7 +6752,7 @@ Thesaurus branch Thesaurus Sprung - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6794,7 +6819,7 @@ This user does not participate to the validation but is only viewer. Dieser Benutzer darf nicht teilnehmen, nur ansehen. - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig This user has no rights @@ -6873,12 +6898,12 @@ Tous Alle - admin/fields/templates.html.twig + admin/fields/templates.html.twig Tout type Bildschirmtyp - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6904,7 +6929,7 @@ Trier par Sortieren nach - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6929,7 +6954,7 @@ Type de documents Dokumenttyp - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7052,7 +7077,7 @@ Une question personnelle eine persönliche Frage - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7119,7 +7144,7 @@ Bridge/Flickr/upload.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig Upload URL is not set, please contact an admin @@ -7144,7 +7169,7 @@ Uploaded by : %username% von: %username% hochgeladen - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7164,7 +7189,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 @@ -7243,7 +7268,7 @@ User successfully created Benutzer wurde erfolgreich erstellt - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users @@ -7283,7 +7308,7 @@ Validation Bestätigung - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php @@ -7342,7 +7367,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7368,12 +7393,12 @@ Vocabulary not found Vokabeln nicht gefunden - Controller/Prod/EditController.php + Controller/Prod/EditController.php Vocabulary type Wortschatz Typ - admin/fields/templates.html.twig + admin/fields/templates.html.twig Voici vos paniers @@ -7432,11 +7457,6 @@ Sie haben einen neuen Sammelkorb erhalten prod/WorkZone/Macros.html.twig - - Vous avez recu une demande de validation de document sur ce panier - Sie können eine Bewertung der Bilder in diesem Sammelkorb abgeben - prod/WorkZone/Macros.html.twig - Vous aviez envoye cette demande a %n% utilisateurs Sie hatten diese Anfrage zu %n% Benutzer gesendet @@ -7544,7 +7564,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 ! @@ -7645,8 +7665,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 @@ -7801,7 +7821,7 @@ You have not access to this basket Sie haben keinen Zugriff auf diesen Sammelkorb - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php You have selected %nbReceivedDocuments% records. @@ -7841,7 +7861,7 @@ You must give a destination record Geben Sie bitte einen Zieldatensatz - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7967,7 +7987,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -7994,7 +8014,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 @@ -8005,7 +8025,7 @@ Werkzeuge prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : print @@ -8024,8 +8044,8 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push @@ -8033,7 +8053,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : status @@ -8047,7 +8067,7 @@ Löschen prod/WorkZone/Macros.html.twig prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action:: nouveau panier @@ -8820,7 +8840,7 @@ Upload lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + web/common/menubar.html.twig admin::monitor: module validation @@ -9046,7 +9066,7 @@ alert Vorsicht - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9087,7 +9107,7 @@ audio Audio - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9131,18 +9151,18 @@ 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 hinzufügen - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig admin/collection/suggested_value.html.twig @@ -9156,8 +9176,8 @@ Bridge/Youtube/video_modify.html.twig Bridge/Flickr/photo_modify.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -9248,8 +9268,8 @@ schliessen Controller/Prod/LanguageController.php prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/properties.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig @@ -9306,7 +9326,7 @@ boutton::rechercher suchen Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9341,7 @@ boutton::remplacer ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9438,10 +9458,10 @@ Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + 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 @@ -9567,7 +9587,7 @@ choisir wählen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9649,7 +9669,7 @@ created_on erstellt am - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9695,7 +9715,7 @@ document Dokument - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9752,7 +9772,7 @@ edit::preset:: titre Titel - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9805,7 +9825,7 @@ export::ftp: reglages manuels manuelle Einstellungen - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9854,7 +9874,7 @@ flash Flash - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9920,6 +9940,21 @@ Änderungen wurden hergestellt admin/databox/databox.html.twig + + generate_cterms + generate_cterms + admin/fields/templates.html.twig + + + gui_editable + gui_editable + admin/fields/templates.html.twig + + + gui_visible + gui_visible + admin/fields/templates.html.twig + help::help-section-bullet: check-spelling Vergewissern Sie sich, dass kein Schreibfehler oder Tippfehler vorliegt @@ -9978,7 +10013,7 @@ image Bild - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9995,42 +10030,42 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order 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 index::advance_search: hidden-facet-values-order - 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:advanced-preferences:: use truncation index:advanced-preferences:: use truncation - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10062,9 +10097,15 @@ Die Dienstleistung wird in einige Minuten wieder verfügbar sein. actions/Bridge/deactivated.html.twig + + lightbox::list + lightbox::list + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Übersicht + mobile/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig @@ -10087,8 +10128,8 @@ login:: Mon compte Mein Benutzerkonto web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig login:: Visitez le lien suivant et suivez les instructions pour continuer, sinon ignorez cet email et il ne se passera rien @@ -10222,7 +10263,7 @@ no image selected Kein Bild wurde ausgewählt - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10646,8 +10687,8 @@ phraseanet:: a propos Über - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: adresse @@ -10661,8 +10702,13 @@ phraseanet:: aide Hilfe - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: baskets + phraseanet:: baskets + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10684,8 +10730,8 @@ phraseanet:: deconnection Abmeldung actions/Bridge/wrapper.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: details @@ -10713,7 +10759,7 @@ phraseanet:: plugin.workzone Plugin WorkZone - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port @@ -10730,12 +10776,12 @@ phraseanet:: presse-papier Zwischenablage - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig phraseanet:: preview Voransicht - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod/actions/printer_default.html.twig @@ -10747,8 +10793,8 @@ phraseanet:: raccourcis clavier Abkürzungen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: sous definition @@ -10759,7 +10805,7 @@ phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -10806,7 +10852,7 @@ phraseanet::account The account has been deleted Ihr Benutzerkonto wurde gelöscht - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10852,7 +10898,7 @@ phraseanet::chargement Bitte warten... Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig @@ -10880,7 +10926,12 @@ Mailserver-Ausfall Controller/Root/AccountController.php Controller/Root/AccountController.php - Controller/Root/AccountController.php + Controller/Root/AccountController.php + + + phraseanet::error: failed to revoke some user access + phraseanet::error: failed to revoke some user access + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10965,12 +11016,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 @@ -10981,7 +11032,7 @@ phraseanet::type:: documents Dokumente web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -10991,7 +11042,7 @@ phraseanet::type:: reportages Berichte - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11016,17 +11067,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 @@ -11049,16 +11100,16 @@ preview::date preview::date - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::downloads preview::downloads - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::statistiques de telechargement @@ -11073,8 +11124,8 @@ preview::visualisation preview::visualisation - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig previewLinkLabel @@ -11133,7 +11184,7 @@ processing verarbeitend - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11150,12 +11201,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 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) @@ -11165,7 +11216,7 @@ prod::edit: Impossible d'editer simultanement des documents provenant de bases differentes Es ist nicht möglich, Dokumente die aus verschiedenen Bilddatenbanken stammen gleichzeitig zu bearbeiten - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11175,32 +11226,32 @@ 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 Es können keine Dokumente bearbeitet werden, da Sie keine Berechtigung für das Bearbeiten haben - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: modeles de fiches Vorlage - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: rechercher-remplacer suchen / ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: valider ou annuler les modifications Änderungen bestätigen oder abbrechen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::annulation: abandonner les modification ? @@ -11215,62 +11266,62 @@ prod::editing::replace: remplacer dans le champ In dem Feld ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::replace: remplacer dans tous les champs In allen Feldern ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:indexation en cours Indexierung in Vorbereitung - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: chaine remplacante ersetzen durch - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: options de remplacement Optionen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option : utiliser une expression reguliere regulärer Ausdruck - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur du cahmp doit etre exacte vollständiges Feld - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur est comprise dans le champ im Feld gehalten - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option respecter la casse Gross- und Kleinschreibung unterschieden - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: remplacer toutes les occurences alles ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: rester insensible a la casse Gross- und Kleinschreibung nicht unterschieden - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:replace: chaine a rechercher Suchen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::facet:base_label @@ -11562,12 +11613,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 @@ -11636,17 +11687,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 @@ -11668,7 +11719,7 @@ reponses:: taille des images : Miniaturansichtengrösse - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -12104,8 +12155,8 @@ reportage Bericht - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12145,7 +12196,7 @@ screenshot video Video Screenshot - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user @@ -13016,7 +13067,7 @@ thumbnail validation Miniaturansicht Bestätigung - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13052,7 +13103,7 @@ updated_on updated_on - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : @@ -13065,6 +13116,7 @@ Status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -13074,7 +13126,7 @@ validate bestätigen - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig @@ -13100,7 +13152,7 @@ validation:: note Kommentare - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13110,8 +13162,8 @@ validation::envoyer mon rapport Meinen Bericht senden - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 2e81315b7c..2bdfd5b0cd 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 @@ -26,6 +26,13 @@ Check the force authentication checkbox to constrain users to authenticate to access content of Push and Feedbacks. This feature can avoid divulging connection parameters contained in given links in e-mails notifications. prod/templates/push.html.twig
+ + {0} No results|{1} Result|]1,Inf[ Results + + {0} No results|{1} Result|]1,Inf[ Results + + WorkZone/Browser/Results.html.twig + #3567c6 #3567c6 @@ -105,8 +112,7 @@ %Total% results %Total% results - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents @@ -206,7 +212,7 @@ selectionnes]]> selected]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -272,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. @@ -287,12 +293,12 @@ %total% reponses %total% responses - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %user% a envoye son rapport de validation de %title% %user% has sent his feedback report for %title% - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php %user% a passe une %opening_link% commande %end_link% @@ -342,7 +348,7 @@ %user% vous a delivre %quantity% document(s) pour votre commande %title% %user% has delivered %quantity% document(s) from your order %title% - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php %user% vous a delivre votre commande, consultez la en ligne a l'adresse suivante @@ -402,8 +408,7 @@ 1 result 1 result - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -484,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 @@ -671,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 @@ -756,7 +761,8 @@ Advanced Search Advanced search - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -771,52 +777,52 @@ 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 Aggregation Aggregation - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres Help about Regular expressions - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Ajouter a @@ -863,12 +869,12 @@ All these conditions All these conditions - web/prod/index.html.twig + web/prod/index.html.twig All values All values - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aller a @@ -933,14 +939,14 @@ 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 Also delete records that rely on groupings. @@ -951,7 +957,7 @@ An error occured An error occurred Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -976,8 +982,8 @@ Controller/Admin/CollectionController.php Controller/Prod/BasketController.php Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php + Controller/Prod/LazaretController.php + Controller/Prod/MoveCollectionController.php Controller/Prod/StoryController.php web/admin/users.html.twig admin/databox/databox.html.twig @@ -986,6 +992,11 @@ admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + + An error occured when wanting to change status! + An error occured when wanting to change status! + Controller/Prod/LazaretController.php + An error occured while denying, please retry or contact an admin if problem persists An error occurred while denying. Please retry or contact an administrator if problem persists. @@ -1025,8 +1036,8 @@ Controller/Admin/SearchEngineController.php Controller/Admin/CollectionController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php web/admin/statusbit.html.twig @@ -1198,7 +1209,7 @@ Aucun None - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1213,7 +1224,7 @@ Aucun statut editable No editable status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1254,7 +1265,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1468,7 +1479,7 @@ Basket is not found Basket is not found - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1520,7 +1531,7 @@ Business Fields Business field - admin/fields/templates.html.twig + admin/fields/templates.html.twig By checking this box, you accept %beginning_link% Terms of Use %end_link% @@ -1538,7 +1549,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1800,7 +1811,7 @@ Codec Audio Audio codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1812,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 @@ -1829,7 +1840,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1850,7 +1861,7 @@ Commande Order eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1860,7 +1871,7 @@ Commandes Orders - web/common/menubar.html.twig + web/common/menubar.html.twig Company @@ -1900,7 +1911,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1930,7 +1941,7 @@ login/providers/bind.html.twig login/providers/bind.html.twig web/login/index.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig @@ -1956,7 +1967,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2011,7 +2022,7 @@ Couleur de selection Selection color - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2122,7 +2133,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 @@ -2220,12 +2231,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 @@ -2235,7 +2246,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2264,7 +2275,7 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2307,7 +2318,7 @@ Default basket Default basket - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2342,7 +2353,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2362,8 +2373,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 @@ -2380,7 +2391,7 @@ Delete basket Delete basket - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2520,17 +2531,17 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails Display as title - admin/fields/templates.html.twig + admin/fields/templates.html.twig Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2562,7 +2573,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2718,7 +2729,7 @@ Edition impossible Unable to edit - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -3001,7 +3012,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3094,7 +3105,7 @@ Error while creating user Error while creating user - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3144,7 +3155,7 @@ Ex : Paris, bleu, montagne Ex : Paris, blue, mountain - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3205,7 +3216,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig Feeds @@ -3264,7 +3275,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3294,7 +3305,7 @@ Filename File Name - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3327,7 +3338,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3424,6 +3435,11 @@ General settings web/admin/dashboard.html.twig + + Generate-cterms + Generate-cterms + admin/fields/templates.html.twig + Generates a flexpaper flash file Creates a flexpaper flash file @@ -3458,7 +3474,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3533,7 +3549,7 @@ Graphiste (preview au rollover) Graphist (preview on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3548,8 +3564,8 @@ Guest Guest - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Guest access @@ -3561,6 +3577,16 @@ You must be authenticated to have the right to download. web/common/dialog_export.html.twig + + Gui-editable + Gui-editable + admin/fields/templates.html.twig + + + Gui-visible + Gui-visible + admin/fields/templates.html.twig + HD Download Document Download @@ -3576,7 +3602,7 @@ Help Help - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3595,7 +3621,7 @@ mobile/lightbox/feed.html.twig mobile/lightbox/validate.html.twig login/include/language-block.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Homepage slideshow @@ -3631,7 +3657,7 @@ Iconographe (description au rollover) Iconograph (caption on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3676,7 +3702,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3686,7 +3712,7 @@ Images par secondes Image per second - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -3702,7 +3728,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3714,7 +3740,7 @@ Incorrect please try again Incorrect. Please try again. - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3870,17 +3896,17 @@ L'utilisateur approuve ce document User approves this document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur desapprouve ce document User disapproves this document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur n'a pas encore donne son avis sur ce document User hasn't decided yet - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig La connection vers le serveur distant est OK @@ -3926,7 +3952,7 @@ Language Language - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -3956,7 +3982,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 @@ -4058,12 +4084,12 @@ Les status de certains documents ne sont pas accessibles par manque de droits your user rights do not allow you to modify Status for some of the selected documents - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Les termes apparaissent dans le(s) champs Word(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4193,7 +4219,7 @@ Ma derniere question My last query - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4350,7 +4376,7 @@ Mode de presentation Display mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4569,7 +4595,7 @@ No preview available No preview available - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4584,8 +4610,7 @@ No results No results - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4664,7 +4689,7 @@ Not aggregated Not aggregated - admin/fields/templates.html.twig + admin/fields/templates.html.twig Notification par email @@ -4674,8 +4699,8 @@ Notifications Notifications - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales @@ -4774,7 +4799,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. @@ -4800,7 +4825,7 @@ Or login with Or login with web/login/register.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig api/auth/end_user_authorization.html.twig @@ -4827,7 +4852,7 @@ Orders manager Orders manager eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -5124,8 +5149,8 @@ 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 Prefix for notification emails @@ -5140,12 +5165,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 @@ -5198,10 +5223,10 @@ 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 + web/common/menubar.html.twig Publier @@ -5310,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% @@ -5398,14 +5423,14 @@ Rapport de Validation Feedback report - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Re-initialiser Reset prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5453,22 +5478,22 @@ Received from %user_name% Received from %user_name% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Reception d'un rapport de validation Incoming feedback report - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Reception d'une commande Order Delivery - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception de commande Order Delivery - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception of %basket_name% @@ -5508,7 +5533,7 @@ Rechercher dans un champ date In a date field - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5528,7 +5553,7 @@ Record Not Found Record not found - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5553,7 +5578,7 @@ Records have been successfuly moved Records have been successfuly moved - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5599,7 +5624,7 @@ Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5663,7 +5688,7 @@ Report Report - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5971,7 +5996,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 ! @@ -6006,7 +6031,7 @@ Selected base(s) Selected database(s) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6057,7 +6082,7 @@ Sent for validation to %list_participants% Sent for feedback to %list_participants% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Separator @@ -6176,7 +6201,7 @@ Size Size - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig web/common/technical_datas.html.twig @@ -6283,7 +6308,7 @@ Status des documents a rechercher Document status - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6321,7 +6346,7 @@ Story Not Found Story not found - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6376,8 +6401,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 @@ -6421,7 +6446,7 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig @@ -6562,7 +6587,7 @@ Controller/Prod/TOUController.php web/admin/tree.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6583,7 +6608,7 @@ The application is going down for maintenance, please logout. You will be disconnected for maintenance, please quit Phraseanet Controller/Root/SessionController.php - Controller/Root/SessionController.php + Controller/Root/SessionController.php The authentication token specified in the Authorization header has expired. @@ -6603,7 +6628,7 @@ The destination record provided is not allowed The targeted record choosen is not allowed - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6701,7 +6726,7 @@ Theme Skin - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6727,7 +6752,7 @@ Thesaurus branch Thesaurus branch - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6794,7 +6819,7 @@ This user does not participate to the validation but is only viewer. This user does not participate to the feedback request but is only viewer. - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig This user has no rights @@ -6873,12 +6898,12 @@ Tous All - admin/fields/templates.html.twig + admin/fields/templates.html.twig Tout type All types - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6904,7 +6929,7 @@ Trier par Sort by - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6929,7 +6954,7 @@ Type de documents Document(s) Type - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7052,7 +7077,7 @@ Une question personnelle The query - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7119,7 +7144,7 @@ Bridge/Flickr/upload.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig Upload URL is not set, please contact an admin @@ -7144,7 +7169,7 @@ Uploaded by : %username% Uploaded by: %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7164,7 +7189,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 @@ -7243,7 +7268,7 @@ User successfully created User successfully created - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users @@ -7283,7 +7308,7 @@ Validation Feedback - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php @@ -7342,7 +7367,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7368,12 +7393,12 @@ Vocabulary not found Vocabulary not found - Controller/Prod/EditController.php + Controller/Prod/EditController.php Vocabulary type Vocabulary type - admin/fields/templates.html.twig + admin/fields/templates.html.twig Voici vos paniers @@ -7432,11 +7457,6 @@ You have a new basket available prod/WorkZone/Macros.html.twig - - Vous avez recu une demande de validation de document sur ce panier - You have received a feedback demand for documents from this basket. - prod/WorkZone/Macros.html.twig - Vous aviez envoye cette demande a %n% utilisateurs You have sent this demand to %n% user(s) @@ -7544,7 +7564,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 ! @@ -7645,8 +7665,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 @@ -7801,7 +7821,7 @@ You have not access to this basket You cannot access to this basket - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php You have selected %nbReceivedDocuments% records. @@ -7841,7 +7861,7 @@ You must give a destination record You must select one target record - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7967,7 +7987,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -7994,7 +8014,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 @@ -8005,7 +8025,7 @@ Tools prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : print @@ -8024,8 +8044,8 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push @@ -8033,7 +8053,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : status @@ -8047,7 +8067,7 @@ Delete prod/WorkZone/Macros.html.twig prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action:: nouveau panier @@ -8820,7 +8840,7 @@ Upload lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + web/common/menubar.html.twig admin::monitor: module validation @@ -9046,7 +9066,7 @@ alert Warning - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9087,7 +9107,7 @@ audio audio - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9131,18 +9151,18 @@ 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 Add - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig admin/collection/suggested_value.html.twig @@ -9156,8 +9176,8 @@ Bridge/Youtube/video_modify.html.twig Bridge/Flickr/photo_modify.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -9248,8 +9268,8 @@ Close Controller/Prod/LanguageController.php prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/properties.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig @@ -9306,7 +9326,7 @@ boutton::rechercher Search Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9341,7 @@ boutton::remplacer Replace - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9438,10 +9458,10 @@ Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + 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 @@ -9567,7 +9587,7 @@ choisir Select - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9649,7 +9669,7 @@ created_on created on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9695,7 +9715,7 @@ document document - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9752,7 +9772,7 @@ edit::preset:: titre Title - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9805,7 +9825,7 @@ export::ftp: reglages manuels Manual settings - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9854,7 +9874,7 @@ flash flash - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9920,6 +9940,21 @@ Modifications done admin/databox/databox.html.twig + + generate_cterms + generate_cterms + admin/fields/templates.html.twig + + + gui_editable + gui_editable + admin/fields/templates.html.twig + + + gui_visible + gui_visible + admin/fields/templates.html.twig + help::help-section-bullet: check-spelling Check that there are no misspellings or typing errors. @@ -9979,7 +10014,7 @@ See documentation for more examples https://docs.phraseanet.com image Image - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9996,42 +10031,42 @@ See documentation for more examples https://docs.phraseanet.com 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 + 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 @@ -10063,9 +10098,15 @@ See documentation for more examples https://docs.phraseanet.com Service will be available again in a few minutes actions/Bridge/deactivated.html.twig + + lightbox::list + lightbox::list + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Summary + mobile/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig @@ -10088,8 +10129,8 @@ See documentation for more examples https://docs.phraseanet.com login:: Mon compte My account web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig login:: Visitez le lien suivant et suivez les instructions pour continuer, sinon ignorez cet email et il ne se passera rien @@ -10223,7 +10264,7 @@ See documentation for more examples https://docs.phraseanet.com no image selected No Document selected - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10647,8 +10688,8 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: a propos About - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: adresse @@ -10662,8 +10703,13 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: aide Help - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: baskets + phraseanet:: baskets + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10685,8 +10731,8 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: deconnection Sign out actions/Bridge/wrapper.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: details @@ -10714,7 +10760,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: plugin.workzone Plugin workzone - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port @@ -10731,12 +10777,12 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: presse-papier Clipboard - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig phraseanet:: preview Preview - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod/actions/printer_default.html.twig @@ -10748,8 +10794,8 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: raccourcis clavier Shortcuts - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: sous definition @@ -10760,7 +10806,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -10807,7 +10853,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::account The account has been deleted The account has been deleted - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10853,7 +10899,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::chargement Loading Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig @@ -10881,7 +10927,12 @@ See documentation for more examples https://docs.phraseanet.com Mail-server error Controller/Root/AccountController.php Controller/Root/AccountController.php - Controller/Root/AccountController.php + Controller/Root/AccountController.php + + + phraseanet::error: failed to revoke some user access + phraseanet::error: failed to revoke some user access + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10966,12 +11017,12 @@ See documentation for more examples https://docs.phraseanet.com 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 @@ -10982,7 +11033,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::type:: documents Documents web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -10992,7 +11043,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::type:: reportages Stories - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11017,17 +11068,17 @@ See documentation for more examples https://docs.phraseanet.com 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 @@ -11050,16 +11101,16 @@ See documentation for more examples https://docs.phraseanet.com preview::date Date - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::downloads Number of Downloads - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::statistiques de telechargement @@ -11074,8 +11125,8 @@ See documentation for more examples https://docs.phraseanet.com preview::visualisation Number of views - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig previewLinkLabel @@ -11134,7 +11185,7 @@ See documentation for more examples https://docs.phraseanet.com processing Processing... - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11151,12 +11202,12 @@ See documentation for more examples https://docs.phraseanet.com 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) @@ -11166,7 +11217,7 @@ See documentation for more examples https://docs.phraseanet.com prod::edit: Impossible d'editer simultanement des documents provenant de bases differentes Selected documents come from differents databases, unable to edit - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11176,32 +11227,32 @@ See documentation for more examples https://docs.phraseanet.com 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 Your user rights do not allow you to edit any of the selected documents - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: modeles de fiches Caption template - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: rechercher-remplacer Find / Replace - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: valider ou annuler les modifications Valid changes or Cancel - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::annulation: abandonner les modification ? @@ -11216,62 +11267,62 @@ See documentation for more examples https://docs.phraseanet.com prod::editing::replace: remplacer dans le champ Replace in field - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::replace: remplacer dans tous les champs Replace in all fields - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:indexation en cours Processing indexation - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: chaine remplacante Replace with - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: options de remplacement Options - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option : utiliser une expression reguliere Regular expression - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur du cahmp doit etre exacte Whole field - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur est comprise dans le champ In field - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option respecter la casse Case sensitive - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: remplacer toutes les occurences Replace All - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: rester insensible a la casse Case insensitive - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:replace: chaine a rechercher Find - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::facet:base_label @@ -11566,12 +11617,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 @@ -11640,17 +11691,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 @@ -11672,7 +11723,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 @@ -12108,8 +12159,8 @@ It is possible to place several search areas reportage Feature - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12149,7 +12200,7 @@ It is possible to place several search areas screenshot video Video screenshot - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user @@ -13020,7 +13071,7 @@ It is possible to place several search areas thumbnail validation Confirm thumbnail - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13056,7 +13107,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) : @@ -13069,6 +13120,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 users rights have been reseted @@ -13078,7 +13130,7 @@ It is possible to place several search areas validate Validate - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig @@ -13104,7 +13156,7 @@ It is possible to place several search areas validation:: note Comments - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13114,8 +13166,8 @@ It is possible to place several search areas validation::envoyer mon rapport Send my feedback - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index ee69b1cc05..1eb4a7f0ca 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 @@ -26,6 +26,13 @@ L'option Forcer l'authentification des utilisateurs contraint les destinataires à s'authentifier pour accéder au contenu diffusé. Cela interdit l'accès aux documents à des personnes auprès desquels l'URL aurait été divulguée notamment par un transfert d'e-mail. prod/templates/push.html.twig
+ + {0} No results|{1} Result|]1,Inf[ Results + + {0} No results|{1} Result|]1,Inf[ Results + + WorkZone/Browser/Results.html.twig + #3567c6 #3567c6 @@ -105,8 +112,7 @@ %Total% results %Total% résultats - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents @@ -206,7 +212,7 @@ selectionnes]]> sélectionnés]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -272,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. @@ -287,12 +293,12 @@ %total% reponses %total% réponses - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %user% a envoye son rapport de validation de %title% %user% a envoyé son rapport de validation pour %title% - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php %user% a passe une %opening_link% commande %end_link% @@ -342,7 +348,7 @@ %user% vous a delivre %quantity% document(s) pour votre commande %title% %user% vous a délivré %quantity% document(s) de votre commande %title% - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php %user% vous a delivre votre commande, consultez la en ligne a l'adresse suivante @@ -402,8 +408,7 @@ 1 result 1 résultat - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -484,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 @@ -671,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 @@ -755,7 +760,8 @@ Advanced Search Recherche avancée - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -770,52 +776,52 @@ 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 Aggregation Agrégation - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aide Aide - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres Aide sur les expressions régulières - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Ajouter a @@ -862,12 +868,12 @@ All these conditions Toutes les conditions - web/prod/index.html.twig + web/prod/index.html.twig All values Toutes les valeurs - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aller a @@ -932,14 +938,14 @@ 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 Also delete records that rely on groupings. @@ -950,7 +956,7 @@ An error occured Une erreur est survenue. Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -975,8 +981,8 @@ Controller/Admin/CollectionController.php Controller/Prod/BasketController.php Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php + Controller/Prod/LazaretController.php + Controller/Prod/MoveCollectionController.php Controller/Prod/StoryController.php web/admin/users.html.twig admin/databox/databox.html.twig @@ -985,6 +991,11 @@ admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + + An error occured when wanting to change status! + An error occured when wanting to change status! + Controller/Prod/LazaretController.php + An error occured while denying, please retry or contact an admin if problem persists Une erreur s'est produite lors du refus. Veuillez réessayer ou contacter un administrateur si le problème persiste @@ -1024,8 +1035,8 @@ Controller/Admin/SearchEngineController.php Controller/Admin/CollectionController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php web/admin/statusbit.html.twig @@ -1197,7 +1208,7 @@ Aucun Aucun - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1212,7 +1223,7 @@ Aucun statut editable Aucun status à éditer - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1253,7 +1264,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1467,7 +1478,7 @@ Basket is not found Panier non trouvé - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1519,7 +1530,7 @@ Business Fields Champ métier - admin/fields/templates.html.twig + admin/fields/templates.html.twig By checking this box, you accept %beginning_link% Terms of Use %end_link% @@ -1537,7 +1548,7 @@ By field Par champ - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1798,7 +1809,7 @@ Codec Audio Codec audio - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1810,7 +1821,7 @@ Collection Collection prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -1827,7 +1838,7 @@ Collection order Ordre des collections - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1848,7 +1859,7 @@ Commande Commande eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1858,7 +1869,7 @@ Commandes Commandes - web/common/menubar.html.twig + web/common/menubar.html.twig Company @@ -1898,7 +1909,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1928,7 +1939,7 @@ login/providers/bind.html.twig login/providers/bind.html.twig web/login/index.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig @@ -1954,7 +1965,7 @@ Contains Contient - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2009,7 +2020,7 @@ Couleur de selection Couleur de sélection - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2119,7 +2130,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 @@ -2217,12 +2228,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 @@ -2232,7 +2243,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2261,7 +2272,7 @@ Date(s) from field(s) Date(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2304,7 +2315,7 @@ Default basket Panier par défaut - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2339,7 +2350,7 @@ Defined by admin Définit par l'admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2359,8 +2370,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 @@ -2377,7 +2388,7 @@ Delete basket Supprimer le panier - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2461,7 +2472,7 @@ web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig - + Design of personalization logo section Design de la section de personnalisation du logo Form/Configuration/GeneralFormType.php @@ -2517,17 +2528,17 @@ Display technical data Affichage des informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails Afficher comme titre - admin/fields/templates.html.twig + admin/fields/templates.html.twig Do not display Masquer les informations techniques - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2559,7 +2570,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2715,7 +2726,7 @@ Edition impossible Edition impossible - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -2998,7 +3009,7 @@ Equals Egale - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3091,7 +3102,7 @@ Error while creating user Erreur lors de la création de l'utilisateur - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3141,7 +3152,7 @@ Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3202,7 +3213,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig Feeds @@ -3261,7 +3272,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3291,7 +3302,7 @@ Filename Nom du fichier - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3324,7 +3335,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3421,6 +3432,11 @@ Paramètres généraux web/admin/dashboard.html.twig + + Generate-cterms + Generate-cterms + admin/fields/templates.html.twig + Generates a flexpaper flash file Générer un fichier flexpaper flash @@ -3455,7 +3471,7 @@ Geo Search Recherche géolocalisée - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3530,7 +3546,7 @@ Graphiste (preview au rollover) Graphiste (prévisualisation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3545,8 +3561,8 @@ Guest Invité - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Guest access @@ -3558,6 +3574,16 @@ Vous devez vous authentifier pour télécharger. web/common/dialog_export.html.twig + + Gui-editable + Gui-editable + admin/fields/templates.html.twig + + + Gui-visible + Gui-visible + admin/fields/templates.html.twig + HD Download Téléchargement HD @@ -3573,7 +3599,7 @@ Help Aide - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3592,7 +3618,7 @@ mobile/lightbox/feed.html.twig mobile/lightbox/validate.html.twig login/include/language-block.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Homepage slideshow @@ -3628,7 +3654,7 @@ Iconographe (description au rollover) Iconographe (fiche d'indexation au survol de la vignette) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3673,7 +3699,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3683,7 +3709,7 @@ Images par secondes Images par seconde - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -3699,7 +3725,7 @@ In the answer grid Dans une infobulle séparée - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3711,7 +3737,7 @@ Incorrect please try again Incorrect. Veuillez réessayer - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3867,17 +3893,17 @@ L'utilisateur approuve ce document L'utilisateur approuve ce document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur desapprouve ce document L'utilisateur désapprouve ce document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur n'a pas encore donne son avis sur ce document L'utilisateur n'a pas encore donné son avis sur ce document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig La connection vers le serveur distant est OK @@ -3923,7 +3949,7 @@ Language Langue - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -3953,7 +3979,7 @@ Last uploaded version Dernière version ajoutée - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4055,12 +4081,12 @@ Les status de certains documents ne sont pas accessibles par manque de droits Vous ne disposez pas des droits nécessaires pour accéder aux status de certains documents - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Les termes apparaissent dans le(s) champs Le(s) mot(s) contenu(s) dans le(s) champ(s) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4190,7 +4216,7 @@ Ma derniere question Ma dernière question - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4347,7 +4373,7 @@ Mode de presentation Mode de présentation - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4566,7 +4592,7 @@ No preview available Pas de prévisualisation disponible - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4581,8 +4607,7 @@ No results Aucun résultat - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4661,7 +4686,7 @@ Not aggregated Non agrégé - admin/fields/templates.html.twig + admin/fields/templates.html.twig Notification par email @@ -4671,8 +4696,8 @@ Notifications Notifications - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales @@ -4771,7 +4796,7 @@ One of these conditions Une de ces conditions - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -4797,7 +4822,7 @@ Or login with Ou se connecter avec web/login/register.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig api/auth/end_user_authorization.html.twig @@ -4824,7 +4849,7 @@ Orders manager Gestionnaire des commandes eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -5121,8 +5146,8 @@ Préférences web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5137,12 +5162,12 @@ Presentation de vignettes Présentation de vignettes - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Présentation des vignettes de panier - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5195,10 +5220,10 @@ 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 + web/common/menubar.html.twig Publier @@ -5309,80 +5334,80 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Raccourcis claviers de la zone des paniers : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Raccourci de la fenêtre d'édition - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Raccourcis de la fenêtre vue détaillée - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Raccourcis de la fenêtre principale - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : sélectionner tout - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : éditer la sélection - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : imprimer la sélection - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama espace : démarrer/arrêter le diaporama - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical flèche basse : défilement vers le bas - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante flèche droite : page suivante - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere flèche gauche : document précédent - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant flèche droite : document suivant - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente flèche gauche : page précédente - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical flèche haute : défilement vers le haut - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs Tab/shift-tab : Changer de champs - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5397,14 +5422,14 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Rapport de Validation Rapport de validation - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Re-initialiser Ré-initialiser prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5452,22 +5477,22 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Received from %user_name% Reçu de %user_name% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Reception d'un rapport de validation Réception d'un rapport de validation - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Reception d'une commande Réception d'une commande - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception de commande Réception de commande - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception of %basket_name% @@ -5507,7 +5532,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Rechercher dans un champ date Dans un champ date - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5527,7 +5552,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Record Not Found Enregistrement non trouvé - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5552,7 +5577,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Records have been successfuly moved Les enregistrements ont été déplacés avec succès. - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5598,7 +5623,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Relevance Pertinence - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5662,7 +5687,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Report Afficher dans Phraseanet Report - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5970,7 +5995,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Select a field Choisir un champ - web/prod/index.html.twig + web/prod/index.html.twig Select a list on the left and edit it ! @@ -6005,7 +6030,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Selected base(s) Sélectionner les Bases : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6056,7 +6081,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Sent for validation to %list_participants% Envoyé pour validation à %list_participants% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Separator @@ -6175,7 +6200,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Size Taille - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig web/common/technical_datas.html.twig @@ -6282,7 +6307,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Status des documents a rechercher Status des documents pour la recherche - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6320,7 +6345,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Story Not Found Reportage inconnu - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6375,8 +6400,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Substitute Substituer - 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 @@ -6420,7 +6445,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig @@ -6561,7 +6586,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Controller/Prod/TOUController.php web/admin/tree.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6582,7 +6607,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis The application is going down for maintenance, please logout. L'application va être désactivée pour maintenance, merci de vous déconnecter dès que possible Controller/Root/SessionController.php - Controller/Root/SessionController.php + Controller/Root/SessionController.php The authentication token specified in the Authorization header has expired. @@ -6602,7 +6627,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis The destination record provided is not allowed L'enregistrement de destination fourni n'est pas autorisé - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6700,7 +6725,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Theme Thème - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6726,7 +6751,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Thesaurus branch Branche de thésaurus - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6793,7 +6818,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis This user does not participate to the validation but is only viewer. Cet utilisateur ne participe pas à la demande de validation - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig This user has no rights @@ -6872,12 +6897,12 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Tous Tous - admin/fields/templates.html.twig + admin/fields/templates.html.twig Tout type Tous types - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6903,7 +6928,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Trier par Trier par - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6928,7 +6953,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Type de documents Type de document - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7051,7 +7076,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Une question personnelle La question - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7118,7 +7143,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Bridge/Flickr/upload.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig Upload URL is not set, please contact an admin @@ -7143,7 +7168,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Uploaded by : %username% Ajouté par : %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7163,7 +7188,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Use latest search settings on Production loading Utiliser la dernière question posée au lancement de Production - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7242,7 +7267,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis User successfully created Utilisateur créé avec succès - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users @@ -7282,7 +7307,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Validation Validation - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php @@ -7341,7 +7366,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Video Vidéo - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7367,12 +7392,12 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Vocabulary not found Vocabulaire non trouvé - Controller/Prod/EditController.php + Controller/Prod/EditController.php Vocabulary type Liste de vocabulaire - admin/fields/templates.html.twig + admin/fields/templates.html.twig Voici vos paniers @@ -7431,11 +7456,6 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Vous avez reçu un nouveau panier prod/WorkZone/Macros.html.twig - - Vous avez recu une demande de validation de document sur ce panier - Vous avez reçu une demande de validation des documents de ce panier - prod/WorkZone/Macros.html.twig - Vous aviez envoye cette demande a %n% utilisateurs La demande avait été adressée à %n% utilisateurs @@ -7543,7 +7563,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Vous pouvez quitter la plupart des fenetres survolantes via la touche echap Vous pouvez fermer la plupart des fênetres en sur impression avec la touche echap - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7644,8 +7664,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis YYYY/MM/DD YYYY/MM/DD - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Yes @@ -7800,7 +7820,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You have not access to this basket Vous n'avez pas accès à ce panier - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php You have selected %nbReceivedDocuments% records. @@ -7840,7 +7860,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You must give a destination record Vous devez spécifier un enregistrement de destination - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7966,7 +7986,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -7993,7 +8013,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/results/record.html.twig prod/results/record.html.twig prod/preview/tools.html.twig - web/prod/index.html.twig + web/prod/index.html.twig web/lightbox/feed.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig @@ -8004,7 +8024,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Outils prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : print @@ -8023,8 +8043,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push @@ -8032,7 +8052,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : status @@ -8046,7 +8066,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Supprimer prod/WorkZone/Macros.html.twig prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action:: nouveau panier @@ -8820,7 +8840,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Upload lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + web/common/menubar.html.twig admin::monitor: module validation @@ -9046,7 +9066,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le alert Alerte - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9087,7 +9107,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le audio audios - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9131,18 +9151,18 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton:: selectionner aucune base Aucune - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases Toutes - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter Ajouter - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig admin/collection/suggested_value.html.twig @@ -9156,8 +9176,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Bridge/Youtube/video_modify.html.twig Bridge/Flickr/photo_modify.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -9248,8 +9268,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Fermer Controller/Prod/LanguageController.php prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/properties.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig @@ -9306,7 +9326,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::rechercher Rechercher Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9341,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::remplacer Remplacer - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9438,10 +9458,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + 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 @@ -9567,7 +9587,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le choisir Choisir - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9649,7 +9669,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le created_on créé le - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9695,7 +9715,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le document documents - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9752,7 +9772,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le edit::preset:: titre Nom du modèle - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9805,7 +9825,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export::ftp: reglages manuels Réglages manuels - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9854,7 +9874,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le flash Flash - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9920,6 +9940,21 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Modifications effectuées admin/databox/databox.html.twig + + generate_cterms + generate_cterms + admin/fields/templates.html.twig + + + gui_editable + gui_editable + admin/fields/templates.html.twig + + + gui_visible + gui_visible + admin/fields/templates.html.twig + help::help-section-bullet: check-spelling help::help-section-bullet: check-spelling @@ -9978,7 +10013,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le image images - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9995,42 +10030,42 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: disable-facet Ne pas afficher les facettes contenant un seul résultat (expérimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Préférences sur les facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order Ordre d'affichage des facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order Ordre par défaut - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order Ordre des valeurs de facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order Facettes Masquées - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits Trier les facettes par hits - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation Activer la troncature - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10062,9 +10097,15 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Le service sera de nouveau disponible dans quelques minutes. actions/Bridge/deactivated.html.twig + + lightbox::list + lightbox::list + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Récapitulatif + mobile/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig @@ -10087,8 +10128,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login:: Mon compte Mon Compte web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig login:: Visitez le lien suivant et suivez les instructions pour continuer, sinon ignorez cet email et il ne se passera rien @@ -10222,7 +10263,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le no image selected Aucune image sélectionnée - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10646,8 +10687,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: a propos A propos - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: adresse @@ -10661,8 +10702,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: aide Aide - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: baskets + phraseanet:: baskets + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10684,8 +10730,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: deconnection Déconnexion actions/Bridge/wrapper.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: details @@ -10713,7 +10759,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: plugin.workzone Zone de travail du plugin - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port @@ -10730,12 +10776,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: presse-papier Presse-papier - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig phraseanet:: preview Prévisualisation - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod/actions/printer_default.html.twig @@ -10747,8 +10793,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: raccourcis clavier Raccourcis - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: sous definition @@ -10759,7 +10805,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: thesaurus Thésaurus - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -10806,7 +10852,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::account The account has been deleted Le compte a été supprimé - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10852,7 +10898,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::chargement Chargement Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig @@ -10880,7 +10926,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Echec du serveur de mails Controller/Root/AccountController.php Controller/Root/AccountController.php - Controller/Root/AccountController.php + Controller/Root/AccountController.php + + + phraseanet::error: failed to revoke some user access + phraseanet::error: failed to revoke some user access + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10965,12 +11016,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::time:: a A - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de De - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -10981,7 +11032,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::type:: documents Documents web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -10991,7 +11042,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::type:: reportages Reportages - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11016,17 +11067,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview:: Description Notice - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historique - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Popularité - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11049,16 +11100,16 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview::date Date - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::downloads Nbr Téléchargement(s) - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::statistiques de telechargement @@ -11073,8 +11124,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview::visualisation Nbr Visualisations - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig previewLinkLabel @@ -11133,7 +11184,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le processing En cours... - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11150,12 +11201,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::advancesearch:tooltips:datefield_restriction_explanation Limiter la recherche des résultats à des dates - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation 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) @@ -11165,7 +11216,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::edit: Impossible d'editer simultanement des documents provenant de bases differentes Impossible d'éditer simultanément des documents provenant de bases différentes - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11175,32 +11226,32 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::editing: %not_actionable% documents ne peuvent etre edites car vos droits sont induffisants %not_actionable% document(s) éditables, vous ne disposez pas des autorisations nécessaires - 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 Vous ne possédez pas les autorisations d'accès requises pour éditer 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 Aucun document ne peut être édité car vous ne disposez pas des autorisations nécessaires - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: modeles de fiches Modèles - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: rechercher-remplacer Rechercher / Remplacer - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: valider ou annuler les modifications Valider ou annuler les modifications - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::annulation: abandonner les modification ? @@ -11215,62 +11266,62 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::editing::replace: remplacer dans le champ Remplacer dans le champ - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::replace: remplacer dans tous les champs Remplacer dans tous les champs - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:indexation en cours Indexation en cours - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: chaine remplacante Remplacer par - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: options de remplacement Options - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option : utiliser une expression reguliere Expression régulière - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur du cahmp doit etre exacte Champ complet - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur est comprise dans le champ Contenu dans le champ - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option respecter la casse Respecter la casse - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: remplacer toutes les occurences Remplacer tout - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: rester insensible a la casse Insensible à la casse - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:replace: chaine a rechercher Rechercher - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::facet:base_label @@ -11562,12 +11613,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le raccourci :: a propos des raccourcis claviers A propos des raccourcis clavier - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Ne plus montrer cette aide - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11636,17 +11687,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: images par pages : Résultats par page - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Liste - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11668,7 +11719,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reponses:: taille des images : Taille des vignettes - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -12104,8 +12155,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le reportage Reportage - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12145,7 +12196,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le screenshot video Capture d'écran vidéo - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user @@ -13016,7 +13067,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le thumbnail validation Validation de la vignette - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13052,7 +13103,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le updated_on mis à jour le - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : @@ -13065,6 +13116,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Appliquer les status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -13074,7 +13126,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le validate Valider - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig @@ -13100,7 +13152,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le validation:: note Annotation - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13110,8 +13162,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le validation::envoyer mon rapport Envoyer mon rapport - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index f0fbeeb0b7..5b9362ba05 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -30,6 +30,13 @@ prod/templates/push.html.twig + + {0} No results|{1} Result|]1,Inf[ Results + + {0} No results|{1} Result|]1,Inf[ Results + + WorkZone/Browser/Results.html.twig + #3567c6 #3567c6 @@ -109,8 +116,7 @@ %Total% results %Total% resultaten - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents @@ -210,7 +216,7 @@ selectionnes]]> selectionnes]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -276,7 +282,7 @@ %record_count% records match the unique identifier : %record_count% records zijn gelijk aan de unieke id : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig %s field has been created with success. @@ -291,12 +297,12 @@ %total% reponses %total% reponses - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %user% a envoye son rapport de validation de %title% %user% a envoye son rapport de validation de %title% - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php %user% a passe une %opening_link% commande %end_link% @@ -346,7 +352,7 @@ %user% vous a delivre %quantity% document(s) pour votre commande %title% %user% vous a delivre %quantity% document(s) pour votre commande %title% - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php %user% vous a delivre votre commande, consultez la en ligne a l'adresse suivante @@ -406,8 +412,7 @@ 1 result 1 resultaat - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -488,7 +493,7 @@ A record matches the unique identifier : Een record is gelijk aan de unieke id : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig A required field is missing or has an empty value @@ -675,8 +680,8 @@ Add Toevoegen 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,7 +765,8 @@ Advanced Search Geavanceerd zoeken - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -775,52 +781,52 @@ Affichage Tonen - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Tonen bij opstart - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive De beschrijvingsfiche tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre De titel tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status De statussen tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Pictogram tonen - web/prod/index.html.twig + web/prod/index.html.twig After metadata After metadata - web/prod/index.html.twig + web/prod/index.html.twig Aggregation Aggregation - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aide Help - web/prod/index.html.twig + web/prod/index.html.twig Aide sur les expressions regulieres Help over reguliere expressies - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Ajouter a @@ -867,12 +873,12 @@ All these conditions All these conditions - web/prod/index.html.twig + web/prod/index.html.twig All values All values - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aller a @@ -937,14 +943,14 @@ 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 Also delete records that rely on groupings. @@ -955,7 +961,7 @@ An error occured Er is een fout opgetreden Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -980,8 +986,8 @@ Controller/Admin/CollectionController.php Controller/Prod/BasketController.php Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php + Controller/Prod/LazaretController.php + Controller/Prod/MoveCollectionController.php Controller/Prod/StoryController.php web/admin/users.html.twig admin/databox/databox.html.twig @@ -990,6 +996,11 @@ admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + + An error occured when wanting to change status! + An error occured when wanting to change status! + Controller/Prod/LazaretController.php + An error occured while denying, please retry or contact an admin if problem persists Er heeft zich een fout voorgedaan tijdens het weigeren, gelieve opnieuw te proberen of contact op te nemen met een beheerder als het probleem blijft bestaan @@ -1029,8 +1040,8 @@ Controller/Admin/SearchEngineController.php Controller/Admin/CollectionController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php web/admin/statusbit.html.twig @@ -1202,7 +1213,7 @@ Aucun Geen enkele - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1217,7 +1228,7 @@ Aucun statut editable Geen enkele bewerkbare status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1258,7 +1269,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1472,7 +1483,7 @@ Basket is not found Basket is not found - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1524,7 +1535,7 @@ Business Fields Zakelijke velden - admin/fields/templates.html.twig + admin/fields/templates.html.twig By checking this box, you accept %beginning_link% Terms of Use %end_link% @@ -1542,7 +1553,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1804,7 +1815,7 @@ Codec Audio Audio Codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1816,7 +1827,7 @@ Collection Collectie prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -1833,7 +1844,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1854,7 +1865,7 @@ Commande Bestelling eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1864,7 +1875,7 @@ Commandes Commandos - web/common/menubar.html.twig + web/common/menubar.html.twig Company @@ -1904,7 +1915,7 @@ Configuration Configuratie - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1934,7 +1945,7 @@ login/providers/bind.html.twig login/providers/bind.html.twig web/login/index.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig @@ -1960,7 +1971,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -2015,7 +2026,7 @@ Couleur de selection Kleur van de selectie - web/prod/index.html.twig + web/prod/index.html.twig Country @@ -2126,7 +2137,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 @@ -2224,12 +2235,12 @@ Date Datum - 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 @@ -2239,7 +2250,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2268,7 +2279,7 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De @@ -2311,7 +2322,7 @@ Default basket Standaard mandje - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2346,7 +2357,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2366,8 +2377,8 @@ Delete Verwijder - 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 @@ -2384,7 +2395,7 @@ Delete basket Verwijder mandje - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2524,17 +2535,17 @@ Display technical data Display technical data - web/prod/index.html.twig + web/prod/index.html.twig Display thumbnails Toon thumbnails - admin/fields/templates.html.twig + admin/fields/templates.html.twig Do not display Do not display - web/prod/index.html.twig + web/prod/index.html.twig Do not forget to restart the tasks scheduler @@ -2566,7 +2577,7 @@ Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2722,7 +2733,7 @@ Edition impossible Kan niet worden bewerkt - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -3008,7 +3019,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3101,7 +3112,7 @@ Error while creating user Fout tijdens het aanmaken van gebruiker - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3151,7 +3162,7 @@ Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3212,7 +3223,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig Feeds @@ -3271,7 +3282,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3301,7 +3312,7 @@ Filename Bestandsnaam - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3334,7 +3345,7 @@ Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig @@ -3431,6 +3442,11 @@ Algemene instellingen web/admin/dashboard.html.twig + + Generate-cterms + Generate-cterms + admin/fields/templates.html.twig + Generates a flexpaper flash file Genereerd een flexpaper flash file @@ -3465,7 +3481,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3540,7 +3556,7 @@ Graphiste (preview au rollover) Graficus (preview au rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3555,8 +3571,8 @@ Guest Gast - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Guest access @@ -3568,6 +3584,16 @@ Guest, you must be authenticated to have the right to download. web/common/dialog_export.html.twig + + Gui-editable + Gui-editable + admin/fields/templates.html.twig + + + Gui-visible + Gui-visible + admin/fields/templates.html.twig + HD Download HD Download @@ -3583,7 +3609,7 @@ Help Help - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3602,7 +3628,7 @@ mobile/lightbox/feed.html.twig mobile/lightbox/validate.html.twig login/include/language-block.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Homepage slideshow @@ -3638,7 +3664,7 @@ Iconographe (description au rollover) Iconographe (beschrijving bij de rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3683,7 +3709,7 @@ Image Beeld - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3693,7 +3719,7 @@ Images par secondes Beelden per seconde - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -3709,7 +3735,7 @@ In the answer grid In the answer grid - web/prod/index.html.twig + web/prod/index.html.twig Include Business-fields in caption @@ -3721,7 +3747,7 @@ Incorrect please try again Fout gelieve opnieuw te proberen - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3877,17 +3903,17 @@ L'utilisateur approuve ce document De gebruiker keurt dit document goed - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur desapprouve ce document De gebruiker keurt dit document af - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig L'utilisateur n'a pas encore donne son avis sur ce document De gebruiker heeft nog zijn mening niet gegeven over dit document - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig La connection vers le serveur distant est OK @@ -3933,7 +3959,7 @@ Language Language - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -3963,7 +3989,7 @@ Last uploaded version Laatst opgeladen versie - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4065,12 +4091,12 @@ Les status de certains documents ne sont pas accessibles par manque de droits De status van bepaalde documenten is niet toegestaan omwille van gebrek aan rechten. - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Les termes apparaissent dans le(s) champs De termen verschijnen in de veld(en) - web/prod/index.html.twig + web/prod/index.html.twig Light Value @@ -4200,7 +4226,7 @@ Ma derniere question Mijn laatste vraag - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4357,7 +4383,7 @@ Mode de presentation Presentatie mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4576,7 +4602,7 @@ No preview available Geen voorvertoning beschikbaar - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4591,8 +4617,7 @@ No results Geen resultaten - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4671,7 +4696,7 @@ Not aggregated Not aggregated - admin/fields/templates.html.twig + admin/fields/templates.html.twig Notification par email @@ -4681,8 +4706,8 @@ Notifications Mededelingen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales @@ -4781,7 +4806,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. @@ -4807,7 +4832,7 @@ Or login with Of meld aan met web/login/register.html.twig - web/login/index.html.twig + web/login/index.html.twig login/oauth/login.html.twig api/auth/end_user_authorization.html.twig @@ -4834,7 +4859,7 @@ Orders manager Beheerder bestellingen eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -5131,8 +5156,8 @@ Voorkeuren web/prod/index.html.twig web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5147,12 +5172,12 @@ Presentation de vignettes Presentatie van de thumbnails - web/prod/index.html.twig + web/prod/index.html.twig Presentation de vignettes de panier Presentatie van de thumbnails in het mandje - web/prod/index.html.twig + web/prod/index.html.twig Presets @@ -5205,10 +5230,10 @@ Publications Publicaties - web/prod/index.html.twig + web/prod/index.html.twig admin/publications/wrapper.html.twig web/admin/tree.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig Publier @@ -5317,80 +5342,80 @@ Raccourcis claviers de la zone des paniers : Sneltoetsen in de mandjes zone : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de editing : Sneltoetsen tijdens het bewerken : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de preview : Sneltoetsen tijdens de voorvertoning : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis claviers en cours de recherche : Sneltoetsen tijdens het zoeken : - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-a : tout selectionner ctrl-a : alles selecteren - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-e : editer la selection ctrl-e : bewerk de selectie - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis:: ctrl-p : imprimer la selection ctrl-p : print de selectie - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::espace : arreter/demarrer le diaporama espace : start/stop de slideshow - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche bas : scroll vertical pijl onder : verticale scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche droite : page suivante pijl rechts : volgende pagina - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en arriere pijl links : achterwaarts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : en avant pijl rechts : voorwaarts - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche gauche : page precedente pijl links : vorige pagina - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::fleche haut : scroll vertical pijl boven : verticale scroll - web/prod/index.html.twig + web/prod/index.html.twig Raccourcis::tab/shift-tab se ballade dans les champs tab/shift-tab verspringt tussen de velden - web/prod/index.html.twig + web/prod/index.html.twig Rappel : Il vous reste %number% jours pour valider %title% de %user% @@ -5405,14 +5430,14 @@ Rapport de Validation Rapport van goedkeuring - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Re-initialiser Herinitialiseren prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig - web/prod/index.html.twig + web/prod/index.html.twig Re-ordonner @@ -5460,22 +5485,22 @@ Received from %user_name% Ontvangen van %user_name% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Reception d'un rapport de validation Ontvangst van een goedkeuringsrapport - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php Reception d'une commande Ontvangen van een bestelling - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception de commande Ontvangen van de bestelling - eventsmanager/notify/orderdeliver.php + eventsmanager/notify/orderdeliver.php Reception of %basket_name% @@ -5515,7 +5540,7 @@ Rechercher dans un champ date Zoeken in een datum veld - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5535,7 +5560,7 @@ Record Not Found Document niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5560,7 +5585,7 @@ Records have been successfuly moved Records werden met succes verplaatst - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5606,7 +5631,7 @@ Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5670,7 +5695,7 @@ Report Overzicht - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5978,7 +6003,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 ! @@ -6013,7 +6038,7 @@ Selected base(s) Selected base(s) - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6064,7 +6089,7 @@ Sent for validation to %list_participants% Voor goedkeuring verstuurd naar %list_participants% WorkZone/Browser/Basket.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Separator @@ -6183,7 +6208,7 @@ Size Grootte - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig web/common/technical_datas.html.twig @@ -6290,7 +6315,7 @@ Status des documents a rechercher Status van de te zoeken documenten - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6328,7 +6353,7 @@ Story Not Found Artikel niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6383,8 +6408,8 @@ Substitute Vervangen - 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 @@ -6428,7 +6453,7 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig @@ -6569,7 +6594,7 @@ Controller/Prod/TOUController.php web/admin/tree.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6590,7 +6615,7 @@ The application is going down for maintenance, please logout. Het programma sluit af voor onderhoud, gelieve uit te loggen. Controller/Root/SessionController.php - Controller/Root/SessionController.php + Controller/Root/SessionController.php The authentication token specified in the Authorization header has expired. @@ -6610,7 +6635,7 @@ The destination record provided is not allowed De opgegeven bestemmingsrecord is niet toegestaan - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6708,7 +6733,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6734,7 +6759,7 @@ Thesaurus branch Thesaurus tak - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6801,7 +6826,7 @@ This user does not participate to the validation but is only viewer. Deze gebruiker maakt geen deel uit van de goedkeuring maar is enkel een bezoeker. - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig This user has no rights @@ -6880,12 +6905,12 @@ Tous Alle - admin/fields/templates.html.twig + admin/fields/templates.html.twig Tout type Alle type - web/prod/index.html.twig + web/prod/index.html.twig Toutes les publications @@ -6911,7 +6936,7 @@ Trier par Sorteren op - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6936,7 +6961,7 @@ Type de documents Type van de documenten - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -7059,7 +7084,7 @@ Une question personnelle Een persoonlijke vraag - web/prod/index.html.twig + web/prod/index.html.twig Une selection @@ -7126,7 +7151,7 @@ Bridge/Flickr/upload.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig Upload URL is not set, please contact an admin @@ -7151,7 +7176,7 @@ Uploaded by : %username% Opgeladen door : %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7171,7 +7196,7 @@ Use latest search settings on Production loading Use latest search settings on Production loading - web/prod/index.html.twig + web/prod/index.html.twig Use my Phraseanet account @@ -7250,7 +7275,7 @@ User successfully created Gebruiker met succes aangemaakt - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users @@ -7290,7 +7315,7 @@ Validation Goedkeuring - eventsmanager/notify/validationdone.php + eventsmanager/notify/validationdone.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php @@ -7349,7 +7374,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7375,12 +7400,12 @@ Vocabulary not found Vocabulary niet gevonden - Controller/Prod/EditController.php + Controller/Prod/EditController.php Vocabulary type Type van de vocabulair - admin/fields/templates.html.twig + admin/fields/templates.html.twig Voici vos paniers @@ -7439,11 +7464,6 @@ U hebt een nieuw mandje ontvangen prod/WorkZone/Macros.html.twig - - Vous avez recu une demande de validation de document sur ce panier - U hebt een aanvraag tot goedkeuring van documenten in dit mandje ontvangen - prod/WorkZone/Macros.html.twig - Vous aviez envoye cette demande a %n% utilisateurs Vous aviez envoye cette demande a %n% utilisateurs @@ -7551,7 +7571,7 @@ Vous pouvez quitter la plupart des fenetres survolantes via la touche echap U kunt het grootste deel van de bovenliggende vensters sluiten met de escape toets - web/prod/index.html.twig + web/prod/index.html.twig Warning ! @@ -7652,8 +7672,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 @@ -7808,7 +7828,7 @@ You have not access to this basket You have not access to this basket - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php You have selected %nbReceivedDocuments% records. @@ -7848,7 +7868,7 @@ You must give a destination record U moet een bestemmingsrecord opgeven - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7974,7 +7994,7 @@ action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection @@ -8001,7 +8021,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 @@ -8012,7 +8032,7 @@ Gereedschappen prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : print @@ -8031,8 +8051,8 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push @@ -8040,7 +8060,7 @@ prod/WorkZone/Story.html.twig prod/WorkZone/Basket.html.twig web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action : status @@ -8054,7 +8074,7 @@ Verwijderen prod/WorkZone/Macros.html.twig prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig action:: nouveau panier @@ -8827,7 +8847,7 @@ Upload lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + web/common/menubar.html.twig admin::monitor: module validation @@ -9053,7 +9073,7 @@ alert alert - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9094,7 +9114,7 @@ audio Audio - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9138,18 +9158,18 @@ boutton:: selectionner aucune base Selecteer geen enkele database - web/prod/index.html.twig + web/prod/index.html.twig boutton:: selectionner toutes les bases Selecteer alle databases - web/prod/index.html.twig + web/prod/index.html.twig boutton::ajouter Toevoegen - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig admin/collection/suggested_value.html.twig @@ -9163,8 +9183,8 @@ Bridge/Youtube/video_modify.html.twig Bridge/Flickr/photo_modify.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -9255,8 +9275,8 @@ Sluiten Controller/Prod/LanguageController.php prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/properties.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig @@ -9313,7 +9333,7 @@ boutton::rechercher zoeken Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9328,7 +9348,7 @@ boutton::remplacer Vervangen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9445,10 +9465,10 @@ Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig + 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 @@ -9574,7 +9594,7 @@ choisir kiezen - web/prod/index.html.twig + web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig @@ -9656,7 +9676,7 @@ created_on created_on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9702,7 +9722,7 @@ document document - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9759,7 +9779,7 @@ edit::preset:: titre Titel - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9812,7 +9832,7 @@ export::ftp: reglages manuels Manuele instellingen - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9861,7 +9881,7 @@ flash flash - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -9927,6 +9947,21 @@ Bewerking correct uitgevoerd admin/databox/databox.html.twig + + generate_cterms + generate_cterms + admin/fields/templates.html.twig + + + gui_editable + gui_editable + admin/fields/templates.html.twig + + + gui_visible + gui_visible + admin/fields/templates.html.twig + help::help-section-bullet: check-spelling help::help-section-bullet: check-spelling @@ -9985,7 +10020,7 @@ image Beeld - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -10002,42 +10037,42 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order index::advance_search: facet-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order index::advance_search: facet-tech-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order index::advance_search: facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order index::advance_search: hidden-facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits index::advance_search: order-by-hits - web/prod/index.html.twig + web/prod/index.html.twig index:advanced-preferences:: use truncation index:advanced-preferences:: use truncation - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10069,9 +10104,15 @@ de service zal binnen enkele minuten opnieuw beschibaar zijn actions/Bridge/deactivated.html.twig + + lightbox::list + lightbox::list + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Beknopt + mobile/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig @@ -10094,8 +10135,8 @@ login:: Mon compte Mijn account web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig login:: Visitez le lien suivant et suivez les instructions pour continuer, sinon ignorez cet email et il ne se passera rien @@ -10229,7 +10270,7 @@ no image selected geen beeld geselecteerd - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10653,8 +10694,8 @@ phraseanet:: a propos Over - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: adresse @@ -10668,8 +10709,13 @@ phraseanet:: aide Help - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: baskets + phraseanet:: baskets + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10691,8 +10737,8 @@ phraseanet:: deconnection Afmelden actions/Bridge/wrapper.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: details @@ -10720,7 +10766,7 @@ phraseanet:: plugin.workzone phraseanet:: plugin.workzone - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port @@ -10737,12 +10783,12 @@ phraseanet:: presse-papier Klembord - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig phraseanet:: preview Voorvertoning - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod/actions/printer_default.html.twig @@ -10754,8 +10800,8 @@ phraseanet:: raccourcis clavier Sneltoetsen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig phraseanet:: sous definition @@ -10766,7 +10812,7 @@ phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig @@ -10813,7 +10859,7 @@ phraseanet::account The account has been deleted phraseanet::account The account has been deleted - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10859,7 +10905,7 @@ phraseanet::chargement Laden Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig @@ -10887,7 +10933,12 @@ De email server is mislukt Controller/Root/AccountController.php Controller/Root/AccountController.php - Controller/Root/AccountController.php + Controller/Root/AccountController.php + + + phraseanet::error: failed to revoke some user access + phraseanet::error: failed to revoke some user access + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10972,12 +11023,12 @@ phraseanet::time:: a a - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::time:: de de - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: audios @@ -10988,7 +11039,7 @@ phraseanet::type:: documents Documenten web/prod/toolbar.html.twig - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: images @@ -10998,7 +11049,7 @@ phraseanet::type:: reportages Reportages - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11023,17 +11074,17 @@ preview:: Description Beschrijving - web/prod/index.html.twig + web/prod/index.html.twig preview:: Historique Historie - web/prod/index.html.twig + web/prod/index.html.twig preview:: Popularite Populariteit - web/prod/index.html.twig + web/prod/index.html.twig preview:: arreter le diaporama @@ -11056,16 +11107,16 @@ preview::date preview::date - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::downloads preview::downloads - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::statistiques de telechargement @@ -11080,8 +11131,8 @@ preview::visualisation preview::visualisation - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig previewLinkLabel @@ -11140,7 +11191,7 @@ processing verwerken - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11157,12 +11208,12 @@ prod::advancesearch:tooltips:datefield_restriction_explanation prod::advancesearch:tooltips:datefield_restriction_explanation - web/prod/index.html.twig + web/prod/index.html.twig prod::advancesearch:tooltips:field_restriction_explanation prod::advancesearch:tooltips:field_restriction_explanation - web/prod/index.html.twig + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) @@ -11172,7 +11223,7 @@ prod::edit: Impossible d'editer simultanement des documents provenant de bases differentes Onmogelijk om documenten afkomstig van verschillende databases samen te bewerken - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11182,32 +11233,32 @@ prod::editing: %not_actionable% documents ne peuvent etre edites car vos droits sont induffisants %not_actionable% documenten kunnen niet bewerkt worden omdat u niet voldoende rechten heeft - 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 1 document kan niet worden bewerkt omdat u niet voldoende rechten heeft - 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 Geen enkel document kan worden bewerkt omdat u niet voldoende rechten heeft - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: modeles de fiches Bestandsmodellen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: rechercher-remplacer Zoeken-vervangen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing: valider ou annuler les modifications Bewaar of annuleer de aanpassingen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::annulation: abandonner les modification ? @@ -11222,62 +11273,62 @@ prod::editing::replace: remplacer dans le champ Vervangen in het veld - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing::replace: remplacer dans tous les champs Vervangen in alle velden - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:indexation en cours Indexatie is bezig - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: chaine remplacante Vervangende string - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace: options de remplacement Vervanging opties - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option : utiliser une expression reguliere Een reguliere expressie gebruiken - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur du cahmp doit etre exacte De waarde van het veld moet exact zijn - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option la valeur est comprise dans le champ De waarde is in het veld opgenomen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option respecter la casse Respecteer de hoofdlettergevoeligheid - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: remplacer toutes les occurences Alle zoektekst vervangen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:remplace::option: rester insensible a la casse Hoofdletterongevoelig blijven - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::editing:replace: chaine a rechercher String zoeken - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig prod::facet:base_label @@ -11569,12 +11620,12 @@ raccourci :: a propos des raccourcis claviers Over toetsenbord sneltoetsen - web/prod/index.html.twig + web/prod/index.html.twig raccourcis :: ne plus montrer cette aide Deze help niet meer tonen - web/prod/index.html.twig + web/prod/index.html.twig rafraichir @@ -11643,17 +11694,17 @@ reponses:: images par pages : Beelden per pagina : - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode liste Lijst mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: mode vignettes Thumbnail mode - web/prod/index.html.twig + web/prod/index.html.twig reponses:: partager @@ -11675,7 +11726,7 @@ reponses:: taille des images : Grootte van de beelden : - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre @@ -12111,8 +12162,8 @@ reportage Reportage - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12152,7 +12203,7 @@ screenshot video schermafbeelding video - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user @@ -13023,7 +13074,7 @@ thumbnail validation thumbnail goedkeuring - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13059,7 +13110,7 @@ updated_on updated_on - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : @@ -13072,6 +13123,7 @@ Status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -13081,7 +13133,7 @@ validate OK - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig @@ -13107,7 +13159,7 @@ validation:: note Nota - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13117,8 +13169,8 @@ validation::envoyer mon rapport stuur mijn rapport - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index 352466f945..777d9db988 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index d25324b360..ef9ae08f16 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index e03b531b2f..529fdd3ab9 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index b6aa595998..63998943cb 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/www/common/images/icons/basket_feedback_read.png b/resources/www/common/images/icons/basket_feedback_read.png new file mode 100644 index 0000000000..129170a648 Binary files /dev/null and b/resources/www/common/images/icons/basket_feedback_read.png differ diff --git a/resources/www/common/images/icons/basket_feedback_unread.png b/resources/www/common/images/icons/basket_feedback_unread.png new file mode 100644 index 0000000000..31d91d31a4 Binary files /dev/null and b/resources/www/common/images/icons/basket_feedback_unread.png differ diff --git a/resources/www/common/images/icons/icon-right-arrow.svg b/resources/www/common/images/icons/icon-right-arrow.svg new file mode 100644 index 0000000000..c3fabe9a03 --- /dev/null +++ b/resources/www/common/images/icons/icon-right-arrow.svg @@ -0,0 +1,31 @@ + + + + 5609DDD5-6B9C-411B-B926-EEA284949013 + Created with sketchtool. + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/www/common/images/icons/to_be_denied.svg b/resources/www/common/images/icons/to_be_denied.svg new file mode 100644 index 0000000000..ea49e1a133 --- /dev/null +++ b/resources/www/common/images/icons/to_be_denied.svg @@ -0,0 +1 @@ + diff --git a/resources/www/common/images/icons/to_be_validated.svg b/resources/www/common/images/icons/to_be_validated.svg new file mode 100644 index 0000000000..02157e028b --- /dev/null +++ b/resources/www/common/images/icons/to_be_validated.svg @@ -0,0 +1 @@ + diff --git a/resources/www/common/styles/fonts/PhraseanetIcomoon/style.css b/resources/www/common/styles/fonts/PhraseanetIcomoon/style.css index 566f9d5786..bef5e9c08c 100644 --- a/resources/www/common/styles/fonts/PhraseanetIcomoon/style.css +++ b/resources/www/common/styles/fonts/PhraseanetIcomoon/style.css @@ -1,13 +1,3 @@ -@font-face { - font-family: 'icomoon'; - src: url('fonts/icomoon.eot?81kpnc'); - src: url('fonts/icomoon.eot?81kpnc#iefix') format('embedded-opentype'), - url('fonts/icomoon.ttf?81kpnc') format('truetype'), - url('fonts/icomoon.woff?81kpnc') format('woff'), - url('fonts/icomoon.svg?81kpnc#icomoon') format('svg'); - font-weight: normal; - font-style: normal; -} [class^="icon-"], [class*=" icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ diff --git a/resources/www/common/styles/main.scss b/resources/www/common/styles/main.scss index 805e018608..abcf466262 100644 --- a/resources/www/common/styles/main.scss +++ b/resources/www/common/styles/main.scss @@ -50,7 +50,9 @@ $mainMenuLinkBackgroundHoverColor: transparent; } } - +[class*=" icon-"].fa, [class^=icon-].fa, .fa { + font-family: Fontawesome!important; +} [class^="icon-"], [class*=" icon-"].icomoon { display: inline-block; width: inherit; diff --git a/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss b/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss index 67e49407ee..013a7ae0a7 100644 --- a/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss +++ b/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss @@ -1,58 +1,99 @@ $iconsPath: '../../../assets/common/images/icons/'; -ul.image_set{ - padding:0; - margin:0; - border:none; - width:100%; - border:none; +$feedbackColor : #8bc34a; +$basketColor : #2196f3 ; +ul.image_set { + padding: 0; + margin: 0; + border: none; + width: 100%; + border: none; list-style-type: none; + display: flex; + flex-wrap: wrap; } -li.image_box a img{ - position:relative; - vertical-align:middle; - border:none; + +li.image_box a img { + position: relative; + border: none; + width: auto !important; + height: 100% !important; + top: 0 !important; + object-fit: contain; } -li.image_box a{ - padding:0; - text-shadow:0; - margin:0; + +li.image_box a { + padding: 0; + text-shadow: 0; + margin: 0; + width: 100%; } -li.image_box{ - width:80px; - height:80px; - position:relative; - float:left; - margin:0px 15px 15px 0px; - padding:0px; - text-align:center; + +li.image_box { + width: 18%; + position: relative; + margin: 0 2.5% 15px 0; + padding: 0; + display: flex; + align-items: center; + text-align: center; + background: #ededed; + &:nth-child(5n) { + margin-right: 0; + } + .thumb_wrapper { + background: #ededed; + width: 100% !important; + height: 160px !important; + @media screen and (max-width: 767px) { + height: 130px !important; + } + } } -a.no.active_choice{ - background-color:red; + +@media screen and (max-width: 767px) { + li.image_box { + width: 32%; + margin: 0 2% 15px 0; + &:nth-child(5n) { + margin-right: 2%; + } + &:nth-child(3n) { + margin-right: 0; + } + } +} + +a.no.active_choice { + background-color: red; color: #fff; } -a.active_choice{ + +a.active_choice { background-color: #53b401; color: #fff; } -.valid_choice{ - position:absolute; - bottom:0; - right:0; - width:16px; - height:16px; - z-index:2; +.valid_choice { + position: absolute; + bottom: 0; + right: 0; + width: 16px; + height: 16px; + z-index: 2; } -.valid_choice.agree{ - background-image: url('#{$iconsPath}ok.png'); +.valid_choice.agree { + background: #7ed321; + border-top-left-radius: 100px; } -.valid_choice.disagree{ - background-image: url('#{$iconsPath}delete.png'); + +.valid_choice.disagree { + background: #d0021b; + border-top-left-radius: 100px; } .thumb_wrapper { - text-align:center; + text-align: center; } @media screen and (orientation: landscape) { @@ -70,3 +111,211 @@ a.active_choice{ } } + +.ui-footer .ui-title, .ui-header .ui-title { + font-size: 18px; +} + +.ui-listview .ui-li-has-thumb .ui-li-thumb, .ui-listview .ui-li-has-thumb > .ui-btn > img:first-child, .ui-listview .ui-li-has-thumb > img:first-child { + top: 50%; + transform: translateY(-50%); +} + +/*user status*/ +.menu-bar-item { + background: #f0f0f0; + padding: 12px 15px; + text-align: left; + position: relative; + .icomoon { + font-size: 17px; + position: absolute; + left: 23px; + top: 50%; + transform: translateY(-50%); + } + .ui-link { + color: #4f4f4f !important; + text-decoration: none !important; + .text { + padding-left: 31px; + color: #4f4f4f !important; + text-decoration: none !important; + font-weight: 700; + font-size: 13px; + } + } +} + +/*new design of lightbox*/ +/*main nav */ +#lightbox-menu { + li { + margin-bottom: 30px; + .ui-li-count { + border-radius: 3px !important; + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + border: 0; + color: #fff; + text-shadow: none; + padding: 18px 23px; + top: 0; + right: 0; + margin: 0; + font-size: 22px; + min-width: 25px; + background: $feedbackColor; + } + &.ui-first-child { + margin-top: 15px; + } + &.ui-last-child { + a { + &:before { + background: $basketColor; + } + &:hover, &:active, &:focus { + color: $basketColor; + } + } + .ui-li-count { + background: $basketColor; + } + } + + } + a { + padding: 22px 25px; + font-size: 20px; + border-radius: 3px !important; + box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.19); + background-color: #eeeeee; + &:hover, &:active, &:focus { + color: $feedbackColor; + } + &:after { + content: none !important; + } + &:before { + content: ""; + position: absolute; + display: block; + width: 100%; + height: 4px; + bottom: 0; + background: $feedbackColor; + left: 0; + border-radius: 3px; + } + } +} + +.lightbox-bottom-btn { + margin-top: 50px; + .ui-btn { + font-size: 15px; + } +} +#validation, #baskets { + .ui-content { + padding-left: 0; + padding-right: 0; + } +} +.basket-title { + background: $feedbackColor; + padding: 12px 30px; + font-size: 17px; + margin: 0; + text-shadow: none; + color: #fff; + font-weight: 700; + #baskets & { + background: $basketColor; + } + span { + float: right; + } +} + +.feed-list { + li { + height: 71px; + padding-left: 109px!important; + padding-right: 80px!important; + border-color: #d4d4d4!important; + text-overflow: inherit!important; + white-space: inherit!important; + } + .lightbox-img { + width: 90px; + height: 90px; + background-color: #ededed; + position: absolute; + left: 0; + top: 0; + display: flex; + flex-wrap: wrap; + img { + display: flex; + align-items: center; + width: 90px; + max-width: 100%; + max-height: 100%; + object-fit: contain; + } + } + h3 { + display: flex!important; + align-items: center; + height: 71px; + margin: 0!important; + font-size: 15px; + font-weight: bold!important; + text-overflow: inherit!important; + white-space: inherit!important; + a { + position: relative; + color: #313131!important; + width: 100%; + padding-right: 18px; + &:after { + content: "\e96c"; + font-family: icomoon; + position: absolute; + right: 0; + font-size: 20px; + line-height: 1; + top: 50%; + transform: translateY(-50%); + } + } + + } + span { + font-size: 17px; + color: #fff!important; + display: inline-block; + text-shadow: none!important; + top: 0; + width: 52px; + right: 0; + line-height: 25px; + padding: 31px 0px; + margin: 0; + border-radius: 0; + &.validation { + background: $feedbackColor!important; + } + &.baskets { + background: $basketColor!important; + } + } + +} +.lightbox-msg { + font-size: 14px; + color: #313131; + padding: 6px 0 6px 30px; +} diff --git a/resources/www/lightbox/styles/main-mobile.scss b/resources/www/lightbox/styles/main-mobile.scss index a3476342d9..7f53448267 100644 --- a/resources/www/lightbox/styles/main-mobile.scss +++ b/resources/www/lightbox/styles/main-mobile.scss @@ -1,5 +1,28 @@ @import './jquery-mobile/jquery-validator'; +@font-face { + font-family: 'icomoon'; + src: url("../../common/fonts/PhraseanetIcomoon/fonts/icomoon.eot?xt8hfo"); + src: url("../../common/fonts/PhraseanetIcomoon/fonts/icomoon.eot?xt8hfo#iefix") format("embedded-opentype"), url("../../common/fonts/PhraseanetIcomoon/fonts/icomoon.ttf?xt8hfo") format("truetype"), url("../../common/fonts/PhraseanetIcomoon/fonts/icomoon.woff?xt8hfo") format("woff"), url("../../common/fonts/PhraseanetIcomoon/fonts/icomoon.svg?xt8hfo#icomoon") format("svg"); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"], [class*=" icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + .nav_button { width: 90%; margin: 0px auto; @@ -24,4 +47,677 @@ #right-btn { float: right; -} \ No newline at end of file +} + +.report-modal, .ui-dialog .ui-dialog-content { + background: linear-gradient(#3c3c3c, #111); +} + +.ui-bar-c, .ui-body-c, .ui-btn-down-c, .ui-btn-hover-c, .ui-btn-up-c, .ui-overlay-c { + text-shadow: none; +} + +@import '../../_shared/styles/variables'; +$lightboxPath: '../images/'; +$imagesPath: '/assets/vendors/jquery-ui/images/dark-hive/'; + +$mainMenuBackgroundColor: #c7c7c7; //BFBFBF; +$mainMenuBottomBorder: 1px solid #c7c7c7; +$mainMenuLinkColor: #212121; +$mainMenuLinkHoverColor: #000000; +$mainMenuLinkActiveColor: #BFBFBF; +$mainMenuLinkBackgroundHoverColor: transparent; + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; +} + +ul { + list-style-type: none; + margin: 0; + padding: 0; +} + +img { + border: none; + vertical-align: middle; +} + +.title15 { + font-size: 15px; + font-weight: bold; +} + +.record_display_box { + width: 100%; + height: 100%; + display: block; + table { + vertical-align: middle; + table-layout: fixed; + } + .title { + margin: 0 10px; + } + .record { + position: relative; + max-width: none; + max-height: none; + } + .header { + color: #BFBFBF; + height: 30px; + bottom: auto; + overflow: hidden; + .title { + overflow: hidden; + line-height: 20px; + height: 20px; + } + } + .lightbox_container { + top: 30px; + overflow: hidden; + } + .display_id { + top: 5px; + margin: 0 0 0 5px; + background: #bebebe; + } +} + +#sc_wrapper { + left: 20px; + right: 20px; + overflow-x: scroll; + overflow-y: hidden; +} + +#sc_container { + position: relative; + height: 100%; +} + +.basket_element_wrapper { + position: relative; + float: left; + padding: 0 5px; +} + +.basket_element { + position: relative; + float: left; + width: 114px; + height: 130px; + border: 1px solid #212121; + text-align: left; + padding: 5px 8px; + &.selected { + background-color: #212121; + } + .display_id { + top: 4px; + left: 8px; + } + .agreement { + position: absolute; + top: 4px; + right: 8px; + z-index: 99; + } + .image { + position: relative; + z-index: 90; + } + .previewTips { + background-image: url('#{$iconsPath}zoom.gif'); + background-position: center center; + background-repeat: no-repeat; + cursor: help; + position: absolute; + bottom: 4px; + right: 8px; + height: 18px; + width: 18px; + z-index: 99; + } +} + +#report .display_id { + top: 0; + left: 0; + border-radius: 0; + background-color: rgba(216, 216, 216, 0.7); + font-weight: 700; + z-index: 99; + color: #333333; + position: absolute; + width: 22px; + padding: 2px 0; + font-size: 12px; +} + +#report .CHIM.diapo { + text-align: center; +} + +.display_id { + background-color: #FFFFFF; + padding: 3px 6px; + font-weight: bold; + z-index: 99; + color: #212121; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + position: absolute; +} + +.not_decided { + opacity: 0.30; + filter: alpha(opacity=30); +} + +#sc_wrapper .not_decided { + display: none; +} + +#right_scroller { + width: 30px; + right: -10px; + left: auto; + background-image: url('#{$lightboxPath}right_arrow.png'); + background-position: center center; + background-repeat: no-repeat; +} + +#left_scroller { + width: 30px; + left: -10px; + right: auto; + background-image: url('#{$lightboxPath}left_arrow.png'); + background-position: center center; + background-repeat: no-repeat; +} + +#basket_infos { + overflow: hidden; + background-color: #1F1E1B; + color: #BFBFBF; +} + +#basket_options { + height: 35px; + top: auto; + background-color: #1F1E1B; + text-align: center; +} + +#basket_options .confirm_report { + margin: 5px auto; +} + +#basket_infos .user_infos { + height: 120px; + top: auto; +} + +#basket_infos { + table { + width: 100%; + margin: 5px 0; + .title { + width: 100%; + } + .report_wrapper { + text-align: right; + } + } +} + +#right_column { + left: auto; + right: 0; + width: 240px; +} + +#right_column_validation_toggle { + bottom: 45px; + background-color: #1F1E1B; + height: 30px; + top: auto; + text-align: center; + display: none; + line-height: 25px; + color: #BFBFBF; +} + +#right_column .right_column_title { + height: 30px; + bottom: auto; +} + +#right_column .right_column_title img.expanded { + display: none; +} + +#right_column .right_column_title img.collapsed { + display: inline; +} + +#right_column .right_column_title.expanded img.expanded { + display: inline; +} + +#right_column .right_column_title.expanded img.collapsed { + display: none; +} + +#right_column .right_column_wrapper { + top: 30px; + bottom: 45px; +} + +#right_column .right_column_wrapper.caption { + bottom: 85px; +} + +#record_infos { + overflow-x: hidden; + overflow-y: auto; +} + +#record_compare { + visibility: hidden; + top: auto; + left: auto; +} + +#record_compare .header, #record_compare .lightbox_container { + left: 5px; +} + +#record_wrapper.comparison #record_main .header, #record_wrapper.comparison #record_main .lightbox_container { + right: 5px; +} + +.agreement_selector { + position: absolute; + bottom: 10px; + right: 10px; +} + +.clickable { + cursor: pointer; +} + +.big_box.agree { + border: 2px solid #35AC00; + background-color: #35AC00; +} + +.big_box.disagree { + border: 2px solid #DE1200; + background-color: #DE1200; +} + +.big_box, .big_box.not_decided { + width: 95px; + margin: 0 auto; + padding: 6px 10px; + height: 30px; + color: #1F1E1B; + background-color: #353430; + border: 2px solid #353430; + text-align: center; + opacity: 1; + filter: alpha(opacity=100); +} + +.big_box span { + margin: 0 10px; +} + +li.userchoice { + margin: 5px 0 0px 20px; +} + +.userchoice.disagree { + color: #DE1200; +} + +.userchoice.agree { + color: #35AC00; +} + +.basket_report_user { + padding: 7px 10px; +} + +.basket_report_user_wrapper { + margin: 0; + border-bottom: 1px solid #b2b2b2; + border-radius: 0; + display: inline-block; + padding: 10px 15px; + width: 100%; + box-sizing: border-box; + background: #e5e5e5; + text-shadow: none; + float: left; +} + +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { + padding: 0.2em 1em 0.2em 2.1em; +} + +/******* +* +* Index +* +* ******/ +#main_index { + position: relative; + width: 600px; + margin: 0 auto; +} + +#main_wrapper { + width: 100%; +} + +#main_wrapper h1 { + font-weight: bold; + font-size: 25px; +} + +table th { + text-align: right; + vertical-align: bottom; + height: 60px; + border-bottom: 1px solid #8F8F8F; +} + +table th.title { + text-align: left; +} + +table th h1 { + margin-left: 20px; +} + +table th i { + margin-right: 20px; +} + +.ui-state-default.note_closer, .ui-state-default.note_saver { + background-color: #353430; + padding: 5px; + margin: 0 10px; +} + +.ui-state-default.note_saver { + background-color: #1F1E1B; +} + +.record_display_box form .buttons { + margin: 5px; + text-align: right; +} + +.record_display_box form { + margin: 15px 0; + width: 90%; +} + +.record_display_box form textarea { + width: 100%; + height: 75px; +} + +#navigation { + width: 200px; +} + +.basket_downloader { + background-color: #1F1E1B; + margin: 0 10px; + padding: 2px; + border: 0; +} + +hr { + width: 100%; + height: 1px; + background-color: #212121; + border: none; +} + +.report { + margin: 0 10px; + vertical-align: bottom; +} + +/* +* +* Overrides JqueryUI +* +*/ +.ui-button { + background: transparent; + border: none; + margin: 0; + padding: 0; +} + +.ui-button-text-only .ui-button-text { + padding: 0.15em; +} + +.ui-dialog { + .ui-dialog-titlebar { + padding: 1em 1em; + } +} + +.videoTips { + width: 100%; + height: 100%; +} + +#basket_infos { + margin-bottom: 20px; + .mobile_aggreement_box { + padding: 20px; + } +} + +.ui-button-icon.ui-icon.ui-icon-closethick { + background-position: -73px 0px; + background-color: rgba(0, 0, 0, .9); + padding: 0; +} + +.btn-container { + padding: 0 20px; +} + +button.confirm_report { + background: #38c !important; + color: #fff !important; + font-size: 16px; + font-weight: bold; + padding: 6px; + display: inline-block; + border: 1px solid #38c; + text-shadow: 0 1px 0 #111; + border-radius: 16px; + font-family: Roboto, sans-serif; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2) !important; +} + +.report_wrapper { + position: relative; + margin-bottom: 20px; +} + +.report_btn { + position: absolute; + top: -41px; + right: 0; + z-index: 1; + background: #8bc34a; + border: 1px solid #8bc34a; + box-sizing: border-box; + padding: 8px 13px; + min-width: 110px; + border-radius: 4px; + color: #fff !important; + text-decoration: none; + text-align: center; + transition: all 0.3s; + &:hover, &:focus { + background: darken(#8bc34a, 0.2); + border-color: darken(#8bc34a, 0.3); + } + &.report_list { + background: #f44336; + border-color: #f44336; + &:hover, &:focus { + background: darken(#f44336, 0.2); + border-color: darken(#f44336, 0.3); + } + } +} + +.report_list { + display: none; +} + +.report_summary_backup, .report_list_backup { + display: none; +} + +.chim-wrapper-block { + margin-bottom: 15px; + .chim-block { + margin: 0; + } + .chim-inner { + width: 100%; + display: inline-block; + min-width: 296px; + } + .chim-left { + display: inline-block; + width: 100%; + background: #ededed; + text-align: center; + position: relative; + .diapo { + display: inline-block; + div { + max-width: 100%; + } + } + } + + .chim-right { + width: 100%; + .validate-icon { + float: left; + height: 25px; + vertical-align: middle; + display: flex; + flex-wrap: wrap; + align-items: center; + } + h3 { + font-size: 16px; + margin: 0; + padding-top: 3px; + } + } +} + +.thumb_wrapper img.record_image { + max-width: 100%; +} + +/*header lightbox*/ +.ui-footer .ui-title, .ui-header .ui-title { + min-height: 26px; + padding: 10px 0; +} +.ui-controlgroup, fieldset.ui-controlgroup { + margin: 10px 0!important; +} +.ui-listview.lightbox-list-view { + margin-top: 0; + margin-bottom: 0; + & > .ui-li-static { + padding: .7em 1em; + text-overflow: inherit; + white-space: inherit; + } + & > li { + border-color: #b2b2b2; + background: none; + p { + text-overflow: inherit; + white-space: inherit; + line-height: 15px; + font-size: 13px; + color: #141414; + } + } + h3 { + font-family: Roboto, sans-serif;; + font-size: 16px; + font-weight: bold; + font-stretch: normal; + font-style: normal; + line-height: 0.94; + letter-spacing: normal; + color: #141414; + } + +} + +.ui-footer.ui-bar-inherit { + border: 0; +} + +.center-image { + text-align: center; + iframe { + min-height: 240px; + width: auto; + } +} + +/*validate page*/ +.validate-icon { + float: left; + position: absolute; + .icomoon { + color: #fff; + font-size: 17px; + padding: 3px; + border-radius: 50px; + display: inline-block; + } + .icon-disagree { + background: #cd2f2f; + } + .icon-agree { + background: #8bc34a; + } + +} +.validate-info { + float: left; + padding-left: 36px; +} + diff --git a/resources/www/permaview/styles/main.scss b/resources/www/permaview/styles/main.scss index a7ed1a6526..0bf3be49a0 100644 --- a/resources/www/permaview/styles/main.scss +++ b/resources/www/permaview/styles/main.scss @@ -109,3 +109,48 @@ dd { float: left; } } + +/*Help menu*/ +.contextMenu.helpcontextmenu { + display: none; + &.shown { + display: block; + position: absolute; + z-index: 101; + } +} +.help-trigger { + display:inline-block; + cursor:pointer; + padding: 0 4px; + border:none; + margin-left: -12px; + margin-right: 94px; + .fa-caret-down:before { + content: "\25BC"; + font-size: 11px; + } +} +.context-menu-theme-vista { + background-image: none; + background-color: #414141; + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + + .context-menu-item { + transition: 500ms; + &:hover { + background-image: none; + background-color: #75abff; + border: none; + } + .context-menu-item-inner { + padding: 4px 12px; + margin-left: 0; + font-family: Helvetica; + font-size: 12px; + font-weight: 700; + color: #fff; + } + } +} diff --git a/templates/mobile/common/menubar.html.twig b/templates/mobile/common/menubar.html.twig new file mode 100644 index 0000000000..d8190dd5fa --- /dev/null +++ b/templates/mobile/common/menubar.html.twig @@ -0,0 +1,17 @@ +{% set configuration = app['conf'].get(['registry', 'custom-links']) %} + +{% if app.getAuthenticator().isAuthenticated() %} + +{% endif %} + diff --git a/templates/mobile/lightbox/basket_element.html.twig b/templates/mobile/lightbox/basket_element.html.twig index 0cd2a1be3b..54736a3fb2 100644 --- a/templates/mobile/lightbox/basket_element.html.twig +++ b/templates/mobile/lightbox/basket_element.html.twig @@ -26,7 +26,7 @@ #content { position: fixed; - top:50px; + top:90px; bottom: 0; right: 0; left: 0; @@ -40,18 +40,19 @@ {% block content %} {% set record = basket_element.getRecord(app) %} -
-
- {{ 'Back' | trans }} -

{{basket_element.getOrd()}} - {{record.get_title()}}

- {{ 'Home' | trans }} -
-
- {{ thumbnail.format100percent(record.get_preview()) }} - +
{{ thumbnail.format100percent(record.get_preview()) }}
+ {% if basket_element.getBasket().getValidation() %} + {% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %} +
+ + + + +
+ {% endif %} + +
+ +
+ {% endif %} +
diff --git a/templates/mobile/lightbox/feed_element.html.twig b/templates/mobile/lightbox/feed_element.html.twig index 9aa5f0aa99..997bd5ad36 100644 --- a/templates/mobile/lightbox/feed_element.html.twig +++ b/templates/mobile/lightbox/feed_element.html.twig @@ -17,7 +17,7 @@ #content { position: fixed; - top:50px; + top:90px; bottom: 0; right: 0; left: 0; @@ -36,9 +36,12 @@

{{feed_element.getOrd()}} - {{record.get_title()}}

Home
+
{{ thumbnail.format100percent(record.get_preview()) }}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/mobile/lightbox/index.html.twig b/templates/mobile/lightbox/index.html.twig index 4d8cc7cd96..67f698664f 100644 --- a/templates/mobile/lightbox/index.html.twig +++ b/templates/mobile/lightbox/index.html.twig @@ -40,18 +40,21 @@

{{module_name}}

{{ 'a propos' | trans }} +
-
+

Phraseanet Version {{ app['phraseanet.version'].getName() }} - {{ app['phraseanet.version'].getNumber() }}

@@ -83,27 +89,38 @@

{{ 'Back' | trans }} -

{{ 'Validations' | trans }}

+

{{ module_name }}

+
-

- {{ 'Voici vos validations en cours' | trans }} -

-
    - {% for basket in baskets_collection %} - {% if basket.getValidation() %} - {% set basket_length = basket.getElements().count() %} -
  • - {% if basket.getElements().first() %} - - {% endif %} -

    {{basket.getName()}}

    -

    {{ basket.getDescription() }}

    - {{ basket_length }} -
  • - {% endif %} - {% endfor %} -
+

+ {{ 'Validations' | trans }} + {{_self.valid_baskets_length(baskets_collection)}} +

+ +
+
    + {% for basket in baskets_collection | sort | reverse%} + {% if basket.getValidation() %} + {% set basket_length = basket.getElements().count() %} +
  • + {% if basket.getElements().first() %} + + {% endif %} +

    {{basket.getName()}}

    + {#

    {{ basket.getDescription() }}

    #} + {{ basket_length }} +
  • + {% endif %} + {% endfor %} +
+
@@ -113,27 +130,38 @@
{{ 'Back' | trans }} -

{{ 'Paniers' | trans }}

+

{{module_name}}

+
-

+

+ {{ 'Paniers' | trans }} + {{_self.baskets_length(baskets_collection)}} +

+ -
    - {% for basket in baskets_collection %} - {% if basket.getValidation() is empty %} - {% set basket_length = basket.getElements().count() %} -
  • - {% if basket.getElements().first() %} - - {% endif %} -

    {{ basket.getName() }}

    -

    {{ basket.getDescription() }}

    - {{basket_length}} -
  • - {% endif %} - {% endfor %} -
+
+
    + {% for basket in baskets_collection | sort | reverse %} + {% if basket.getValidation() is empty %} + {% set basket_length = basket.getElements().count() %} +
  • + {% if basket.getElements().first() %} + + {% endif %} +

    {{ basket.getName() }}

    + {#

    {{ basket.getDescription() }}

    #} + {{basket_length}} +
  • + {% endif %} + {% endfor %} +
+
diff --git a/templates/mobile/lightbox/sc_note.html.twig b/templates/mobile/lightbox/sc_note.html.twig index c987560a99..e1c783d245 100644 --- a/templates/mobile/lightbox/sc_note.html.twig +++ b/templates/mobile/lightbox/sc_note.html.twig @@ -1,17 +1,19 @@ {% for validationDatas in basket_element.getValidationDatas() %} - {% set is_mine = validationDatas.getParticipant().getUser().getId() == app.getAuthenticatedUser().getId() %} - {% if validationDatas.getNote() != '' or (validationDatas.getAgreement() is not null and is_mine) %} -
  • -

    - {% if is_mine == false and validationDatas.getAgreement() is not null %} - - {% endif %} - {{ validationDatas.getParticipant().getUser().getDisplayName() }} -

    - {% if validationDatas.getNote() != '' %} -

    {{ 'validation:: note' | trans }} : {{ validationDatas.getNote()|nl2br }}

    - {% endif %} + {% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %} + +
  • +
    + {% if validationDatas.getAgreement() == true %}{% endif %} + {% if validationDatas.getAgreement() == false and validationDatas.getAgreement() is not null %} {{ validationDatas.getAgreement() }}{% endif %} +
    +
    +

    + {{ validationDatas.getParticipant().getUser().getDisplayName() }} +

    + {% if validationDatas.getNote() != '' %} +

    {{ 'validation:: note' | trans }} : {{ validationDatas.getNote()|nl2br }}

    + {% endif %} +
  • - {% endif %} + {% endif %} {% endfor %} diff --git a/templates/mobile/lightbox/validate.html.twig b/templates/mobile/lightbox/validate.html.twig index b06c6e7728..f45998a029 100644 --- a/templates/mobile/lightbox/validate.html.twig +++ b/templates/mobile/lightbox/validate.html.twig @@ -32,35 +32,74 @@

    {{basket.getName()}}

    {{ 'Home' | trans }}
    +

    {% set basket_length = basket.getElements().count() %} {% trans with {'%basket_length%' : basket_length} %}%basket_length% documents{% endtrans %}

    - -
    -
    - {% if basket.getValidation() and basket.getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %} - - {% endif %} -
    + +
    + +
    +
    + +
    + {% if basket.getValidation() and basket.getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %} + + {% endif %} +
    +
    +
    {% endblock %} diff --git a/templates/web/admin/fields/templates.html.twig b/templates/web/admin/fields/templates.html.twig index c785a9a701..0dc661fc5c 100644 --- a/templates/web/admin/fields/templates.html.twig +++ b/templates/web/admin/fields/templates.html.twig @@ -189,6 +189,22 @@ + + + + + + + + + +
    diff --git a/templates/web/common/macro_caption.html.twig b/templates/web/common/macro_caption.html.twig index 21a1fab40d..a1eedb9426 100644 --- a/templates/web/common/macro_caption.html.twig +++ b/templates/web/common/macro_caption.html.twig @@ -1,8 +1,10 @@ {% macro caption(record, can_see_business, display_exif, limitedWidth = false) %}
    {% for name, value in record.getCaption(caption_field_order(record, can_see_business)) %} -
    {{ caption_field_label(record, name) }}
    -
    {{ caption_field(record, name, value)|e|highlight|linkify|parseColor }}
    + {% if caption_field_gui_visible(record, name) == 1 %} +
    {{ caption_field_label(record, name) }}
    +
    {{ caption_field(record, name, value)|e|highlight|linkify|parseColor }}
    + {% endif %} {% endfor %}
    {% if display_exif|default(true) and app.getAuthenticator().user is not none and user_setting('technical_display') == 'group' %} diff --git a/templates/web/common/menubar.html.twig b/templates/web/common/menubar.html.twig index 3821f42e79..772a86c497 100644 --- a/templates/web/common/menubar.html.twig +++ b/templates/web/common/menubar.html.twig @@ -302,8 +302,18 @@ $(document).ready(function () { $('body').on('click', '#help-trigger', function (event) { $('#mainMenu .helpcontextmenu').toggleClass('shown'); - console.log('mety'); + }); + + $(document).on('click', function (e) { + if($('#mainMenu .helpcontextmenu').hasClass('shown')) { + var $this = $(e.target); + if ($this.closest('#mainMenu .helpcontextmenu.shown, .help-trigger').length == 0 && $this[0].id != "toggle") { + $('#mainMenu .helpcontextmenu').removeClass('shown'); + } + } + }); + // var key = 'help'; var configurationSettingLinks = {{ configuration|json_encode|raw }}; //seperate array based on location of link diff --git a/templates/web/lightbox/basket_content_report.html.twig b/templates/web/lightbox/basket_content_report.html.twig index 54798fc9b5..7a9940354e 100644 --- a/templates/web/lightbox/basket_content_report.html.twig +++ b/templates/web/lightbox/basket_content_report.html.twig @@ -4,48 +4,49 @@
    {% for basket_element in basket.getElements() %} {% set record = basket_element.getRecord(app) %} -
    -
    - - - - - - -
    -
    -
    - {{basket_element.getOrd()}} +
    +
    +
    +
    +
    +
    + {{basket_element.getOrd()}} +
    + {{thumbnail.format(record.get_thumbnail(),165, 125, '', true, false)}} +
    - {{thumbnail.format(record.get_thumbnail(),165, 125, '', true, false)}} -
    -
    - - {% for validationDatas in basket_element.getValidationDatas()%} -
    -
    - {% if validationDatas.getAgreement() == true %} - {% set imguser = '' %} - {% set styleuser = '' %} - {% elseif validationDatas.getAgreement() is null %} - {% set imguser = '' %} - {% set styleuser = 'margin-left:18px;' %} - {% else %} - {% set imguser = '' %} - {% set styleuser = '' %} - {% endif %} - {{imguser|raw}} {{validationDatas.getParticipant().getUser().getDisplayName()}} - {% if validationDatas.getNote() != '' %} - : {{validationDatas.getNote()|nl2br}} - {% endif %} -
    +
    + {% for validationDatas in basket_element.getValidationDatas()%} + {% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %} + +
    + {% if validationDatas.getAgreement() == true %} + {% set imguser = '' %} + {% set styleuser = '' %} + {% elseif validationDatas.getAgreement() is null %} + {% set imguser = ' ' %} + {% set styleuser = 'margin-left:18px;' %} + {% else %} + {% set imguser = '' %} + {% set styleuser = '' %} + {% endif %} + +
    + {{imguser|raw}}
    - {% endfor %} -
    +
    +

    {{validationDatas.getParticipant().getUser().getDisplayName()}}

    + {% if validationDatas.getNote() != '' %} +

    {{validationDatas.getNote()|nl2br}}

    + {% endif %} +
    +
    + {% endif %} + {% endfor %} +
    -

    + {% endfor %} diff --git a/templates/web/prod/WorkZone/Macros.html.twig b/templates/web/prod/WorkZone/Macros.html.twig index de3d0f4316..abd96a7641 100644 --- a/templates/web/prod/WorkZone/Macros.html.twig +++ b/templates/web/prod/WorkZone/Macros.html.twig @@ -16,9 +16,10 @@ {% if not basket.isRead() %} - + + {% else %} + {% endif %} - {{basket.getName()|e}} @@ -26,11 +27,9 @@ diff --git a/templates/web/prod/actions/edit_default.html.twig b/templates/web/prod/actions/edit_default.html.twig index bc4a8a3de9..781183b270 100644 --- a/templates/web/prod/actions/edit_default.html.twig +++ b/templates/web/prod/actions/edit_default.html.twig @@ -90,7 +90,7 @@ {% endif %} {% for field in fields %} {% set i = field.get_id() %} - {% if field.is_readonly() is empty %} + {% if field.is_readonly() is empty and field.get_gui_editable()== 1 %}
    diff --git a/templates/web/prod/index.html.twig b/templates/web/prod/index.html.twig index c5cde9d778..43c4255fa8 100644 --- a/templates/web/prod/index.html.twig +++ b/templates/web/prod/index.html.twig @@ -926,7 +926,7 @@ {% set basket_status_display = app['settings'].getUserSetting(app.getAuthenticatedUser(), 'basket_status_display') %} diff --git a/templates/web/prod/results/grid.html.twig b/templates/web/prod/results/grid.html.twig index e797c96481..035cc1f182 100644 --- a/templates/web/prod/results/grid.html.twig +++ b/templates/web/prod/results/grid.html.twig @@ -1,4 +1,5 @@ {% include 'prod/results/record.html.twig' with { 'record': record, - 'settings': settings + 'settings': settings, + 'plugins': plugins } %} diff --git a/templates/web/prod/results/list.html.twig b/templates/web/prod/results/list.html.twig index ca45b67914..051622bb4d 100644 --- a/templates/web/prod/results/list.html.twig +++ b/templates/web/prod/results/list.html.twig @@ -7,7 +7,8 @@
    diff --git a/templates/web/prod/results/records.html.twig b/templates/web/prod/results/records.html.twig index 6b3dedc8cc..d64039a26c 100644 --- a/templates/web/prod/results/records.html.twig +++ b/templates/web/prod/results/records.html.twig @@ -31,7 +31,8 @@ 'doctype_display': doctype_display, 'handle_dblclick' : true, 'show_context_menu': true - } + }, + 'plugins': plugins } %} {% endblock %} {% endfor %} diff --git a/templates/web/prod/toolbar.html.twig b/templates/web/prod/toolbar.html.twig index 9f169906ea..68edc289c5 100644 --- a/templates/web/prod/toolbar.html.twig +++ b/templates/web/prod/toolbar.html.twig @@ -44,270 +44,159 @@ - -
    - - - -
    -
    + {% set menus = { + 'export': [ + { + 'class':'TOOL_disktt_btn', + 'icon':'/assets/common/images/icons/disktt_history.png', + 'label':'action : exporter' | trans }, + { + 'class':'TOOL_print_btn', + 'icon':'/assets/common/images/icons/print_history.png', + 'label':'action : print' | trans } + ], + 'edit': [], + 'push': [], + 'tools': [], + 'delete': [] + } %} - {% set actions = {} %} + {# menu "edit" #} + {% set m = [] %} {% if acl.has_right(constant('\\ACL::CANMODIFRECORD')) %} - {% set label %} - {{ 'action : editer' | trans }} - {% endset %} - {% set actions = actions|merge( { 'edit' : {'icon': "/assets/common/images/icons/ppen_history.png", 'class':'TOOL_ppen_btn', 'label' : label} }) %} - {% set label %} - {{ 'prod::toolbar : video editor' | trans }} - {% endset %} - {% set actions = actions|merge( { 'video' : {'icon': "/assets/common/images/icons/icon-video-editor.png", 'class':'TOOL_videoeditor_btn', 'label' : label} }) %} + {% set m = m|merge([ + { + 'class':'TOOL_ppen_btn', + 'icon':'/assets/common/images/icons/ppen_history.png', + 'label':'action : editer' | trans }, + { + 'class':'TOOL_videoeditor_btn', + 'icon':'/assets/common/images/icons/icon-video-editor.png', + 'label':'prod::toolbar : video editor' | trans } + ]) %} {% endif %} - {% if acl.has_right(constant('\\ACL::CHGSTATUS')) %} - {% set label %} - {{ 'action : status' | trans }} - {% endset %} - {% set actions = actions|merge( { 'status' : {'icon': "/assets/common/images/icons/chgstatus_history.png", 'class':'TOOL_chgstatus_btn', 'label' : label} }) %} + {% if acl.has_right(constant('\\\ACL::CHGSTATUS')) %} + {% set m = m|merge([ + { + 'class':'TOOL_chgstatus_btn', + 'icon':'/assets/common/images/icons/chgstatus_history.png', + 'label':'action : status' | trans } + ]) %} {% endif %} {% if acl.has_right(constant('\\ACL::CANDELETERECORD')) and acl.has_right(constant('\\ACL::CANADDRECORD')) %} - {% set label %} - {{ 'action : collection' | trans }} - {% endset %} - {% set actions = actions|merge( { 'move' : {'icon': "/assets/common/images/icons/chgcoll_history.png", 'class':'TOOL_chgcoll_btn', 'label' : label} }) %} + {% set m = m|merge([ + { + 'class':'TOOL_chgcoll_btn', + 'icon':'/assets/common/images/icons/chgcoll_history.png', + 'label':'action : collection' | trans } + ]) %} + {% endif %} + {% set menus = menus|merge({'edit' : m}) %} + + {# menu "push" #} + {% set m = [] %} + {% if acl.has_right(constant('\\ACL::CANPUSH')) %} + {% set m = m|merge([ + { + 'class':'TOOL_pushdoc_btn', + 'icon':'/assets/common/images/icons/push16.png', + 'label':'action : push' | trans }, + { + 'class':'TOOL_feedback_btn', + 'icon':'/assets/common/images/icons/feedback16.png', + 'label':'Feedback' | trans } + ]) %} + {% endif %} + {% if acl.has_right(constant('\\ACL::BAS_CHUPUB')) %} + {% set m = m|merge([ + { + 'class':'TOOL_publish_btn', + 'icon':'/assets/common/images/icons/rss16.png', + 'label':'action : publier' | trans } + ]) %} + {% endif %} + {% set menus = menus|merge({'push' : m}) %} + + {# menu "tools" #} + {% if acl.has_right(constant('\\ACL::IMGTOOLS')) %} + {% set menus = menus|merge({'tools' : [ + { + 'class':'TOOL_imgtools_btn', + 'icon':'/assets/common/images/icons/imgtools_history.png', + 'label':'action : outils' | trans } + ]}) %} {% endif %} - {% set n_actions = actions|length %} - {% if n_actions > 1 %} - -
    - {% for action in actions %} - {% if loop.first %} - - {% endif %} - {% endfor %} - - -
    -
    - {% elseif n_actions == 1 %} - -
    - {% for action in actions %} - - {% endfor %} -
    -
    + {% set menus = menus|merge({(k) : m}) %} + {% endif %} + {% endfor %} + {% endfor %} {% endif %} - {% if acl.has_right(constant('\\ACL::CANPUSH')) and acl.has_right(constant('\\ACL::BAS_CHUPUB')) %} - -
    - - - -
    -
    - {% elseif acl.has_right(constant('\\ACL::CANPUSH')) %} - -
    - - - -
    -
    - {% elseif acl.has_right(constant('\\ACL::BAS_CHUPUB')) %} - -
    - {##} - - - {% if plugins.actionbar is not empty %} + {# print #} + {% for menu_entries in menus %} + {% if menu_entries|length > 0 %} + +
    + {% set menu_entry = menu_entries[0] %} + + {% set menu_entries = menu_entries|slice(1) %} + {% if menu_entries|length > 0 %} - - {% endif %} -
    -
    - {% elseif plugins.actionbar is not empty %} - -
    - {% set firstButton = true %} - {% for plugin in plugins.actionbar %} - {% for key, action in plugin.getActionBar().push|default([]) %} - {% if firstButton %} - - {% if not (loop.last and loop.parent.loop.last) %} - - - {% endif %} -
    -
    - {% endif %} +
    +
    + {% endif %} + {% endfor %} - {% if acl.has_right(constant('\\ACL::IMGTOOLS')) %} - -
    - -
    -
    - {% endif %} - {% if acl.has_right(constant('\\ACL::CANDELETERECORD')) %} - -
    - -
    -
    - {% endif %} {% endblock %} {% block toolbarJS %} {% if plugins.actionbar is not empty %} - {% for plugin in plugins.actionbar %} -{{ (plugin.JS|default(''))|raw }} - {% endfor %} + {% for pluginId, plugin in plugins.actionbar %} + {% if plugin.getActionBarTemplate is defined %} + {% set template = plugin.getActionBarTemplate() %} + {% if template %} + {% include template with {'app': app, 'plugin_id': pluginId, 'plugin': plugin} only %} + {% endif %} + {% endif %} + {% endfor %} {% endif %} {% endblock %} \ No newline at end of file diff --git a/templates/web/prod/upload/lazaret.html.twig b/templates/web/prod/upload/lazaret.html.twig index 29bad734c0..eb0c9f19d0 100644 --- a/templates/web/prod/upload/lazaret.html.twig +++ b/templates/web/prod/upload/lazaret.html.twig @@ -35,7 +35,7 @@
      {% for file in lazaretFiles %}
    • - {{ _self.lazaretElement(app, file) }} + {{ _self.lazaretElement(app, file) }}
    • {% endfor %}
    @@ -48,56 +48,56 @@ - {% macro lazaretElement(app, file) %} {% import "common/thumbnail.html.twig" as thumb %} {% set records = file.getRecordsToSubstitute(app, true) %}
    +
    {{ "Last uploaded version" | trans }}
      -
    • +
    • @@ -344,19 +445,128 @@

      {{ border_checker_from_fqcn(check.getCheckClassname()).getMessage(app['translator']) }}

      {% endfor %}
      -
      - - - {% if records|length > 0 %} - +
      +
      + {% set collection = file.getCollection(app) %} + + + +
      +
      + Reset status +
      {{ 'upload:: Status :' | trans }}
      +
    - + diff --git a/templates/web/prod/actions/Push.html.twig b/templates/web/prod/actions/Push.html.twig index 720db4c0f6..f0b8640d06 100644 --- a/templates/web/prod/actions/Push.html.twig +++ b/templates/web/prod/actions/Push.html.twig @@ -218,8 +218,8 @@ - - + +
    {% include 'prod/results/record.html.twig' with { 'record': record, - 'settings': settings + 'settings': settings, + 'plugins': plugins } %} diff --git a/templates/web/prod/results/record.html.twig b/templates/web/prod/results/record.html.twig index f6e2d899c5..61088ea939 100644 --- a/templates/web/prod/results/record.html.twig +++ b/templates/web/prod/results/record.html.twig @@ -155,6 +155,29 @@ {% endif %} {% endif %} + + {# add plugins entries #} + {% for plugin in plugins.actionbar|default([]) %} + {% set menu = plugin.ActionBar['_context_']|default([]) %} + {% for k, action in menu %} + {% if plugin.isContextMenuOptionAvailable(k, record) %} +
    +
    + {% set icon = (action.icon ?? false) ? plugin_asset(plugin.PluginName, action.icon) : null %} + {% set label = (action.label ?? false) ? (action.label|trans({}, plugin.PluginLocale)) : 'undefined label' %} + + {% if icon %} + {{ label }} + {% endif %} + {{ label }} + +
    +
    + {% endif %} + {% endfor %} + {% endfor %} +
    + + {% if file.getStatus(app) is not null %} + {% for bit, status in file.getStatus(app) %} + + + + + {% endfor %} + {% else %} + {% for bit, status in collection.get_databox().getStatusStructure() %} + + + + + {% endfor %} + {% endif %} + +
    + {% if status['img_off'] is not empty %} + + {% endif %} + {{ status['labels_off_i18n'][app['locale']]|default('off') }} + + + + + {{ status['labels_on_i18n'][app['locale']]|default('on') }} + {% if status['img_on'] is not empty %} + + {% endif %} +
    + {% if status['img_off'] is not empty %} + + {% endif %} + {{ status['labels_off_i18n'][app['locale']]|default('off') }} + + + + + {{ status['labels_on_i18n'][app['locale']]|default('on') }} + {% if status['img_on'] is not empty %} + + {% endif %} +
    + + + + +
    + + + {% if records|length > 0 %} + + {% endif %} +
    + + + + {# bloc to backup initial value of status list#} + + + {% if file.getStatus(app) is not null %} + {% for bit, status in file.getStatus(app) %} + + + + + {% endfor %} + {% else %} + {% for bit, status in collection.get_databox().getStatusStructure() %} + + + + + {% endfor %} {% endif %} - + + @@ -369,11 +579,11 @@ {% if record_count > 0 %}
    - {% if record_count <= 1 %} - {% trans %}A record matches the unique identifier :{% endtrans %} - {% else %} - {% trans with {'%record_count%' : record_count} %}%record_count% records match the unique identifier :{% endtrans %} - {% endif %} + {% if record_count <= 1 %} + {% trans %}A record matches the unique identifier :{% endtrans %} + {% else %} + {% trans with {'%record_count%' : record_count} %}%record_count% records match the unique identifier :{% endtrans %} + {% endif %}
      {% for record in records %} @@ -383,15 +593,15 @@ and app.getAclForUser(app.getAuthenticatedUser()).has_right_on_base(record.get_base_id(), constant('\\ACL::CANDELETERECORD')) %}
    • {% include 'prod/results/record.html.twig' with { - 'record': record, - 'settings': { - 'images_size': 169, - 'technical_display': '1', - 'rollover_thumbnail': 'caption', - 'doctype_display': '1', - 'handle_dblclick' : false, - 'show_context_menu': false - } + 'record': record, + 'settings': { + 'images_size': 169, + 'technical_display': '1', + 'rollover_thumbnail': 'caption', + 'doctype_display': '1', + 'handle_dblclick' : false, + 'show_context_menu': false + } } %}
      {% for reason in reasons %} @@ -406,3 +616,30 @@ {% endif %} {% endmacro %} + + diff --git a/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php b/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php index e1784cfcbf..523b4c00da 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Plugin/AddPluginTest.php @@ -10,6 +10,26 @@ use Alchemy\Phrasea\Command\Plugin\AddPlugin; */ class AddPluginTest extends PluginCommandTestCase { + private $bkp = null; + + public function setUp() + { + parent::setUp(); + $this->bkp = self::$DI['app']['conf']->get('plugins'); + } + + public function tearDown() + { + if(is_null($this->bkp)) { + self::$DI['app']['conf']->remove('plugins'); + } + else { + self::$DI['app']['conf']->set('plugins', $this->bkp); + } + parent::tearDown(); + } + + public function testExecute() { $source = 'TestPlugin'; diff --git a/tests/Alchemy/Tests/Phrasea/Command/Plugin/DisablePluginTest.php b/tests/Alchemy/Tests/Phrasea/Command/Plugin/DisablePluginTest.php index 06029140c2..09a1b52c03 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Plugin/DisablePluginTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Plugin/DisablePluginTest.php @@ -22,6 +22,8 @@ class DisablePluginTest extends PluginCommandTestCase ->with($this->equalTo('name')) ->will($this->returnValue('test-plugin')); + $bkp = self::$DI['cli']['conf']->get('plugins'); + self::$DI['cli']['conf']->set(['plugins', 'test-plugin', 'enabled'], $initial); $command = new DisablePlugin(); @@ -29,6 +31,13 @@ class DisablePluginTest extends PluginCommandTestCase $this->assertSame(0, $command->execute($input, $output)); $this->assertFalse(self::$DI['cli']['conf']->get(['plugins', 'test-plugin', 'enabled'])); + + if(is_null($bkp)) { + self::$DI['cli']['conf']->remove('plugins'); + } + else { + self::$DI['cli']['conf']->set('plugins', $bkp); + } } public function provideVariousInitialConfs() diff --git a/tests/Alchemy/Tests/Phrasea/Command/Plugin/EnablePluginTest.php b/tests/Alchemy/Tests/Phrasea/Command/Plugin/EnablePluginTest.php index d5f8c22ba8..9408489b55 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Plugin/EnablePluginTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Plugin/EnablePluginTest.php @@ -22,6 +22,8 @@ class EnablePluginTest extends PluginCommandTestCase ->with($this->equalTo('name')) ->will($this->returnValue('test-plugin')); + $bkp = self::$DI['cli']['conf']->get('plugins'); + self::$DI['cli']['conf']->set(['plugins', 'test-plugin', 'enabled'], $initial); $command = new EnablePlugin(); @@ -29,6 +31,13 @@ class EnablePluginTest extends PluginCommandTestCase $this->assertSame(0, $command->execute($input, $output)); $this->assertTrue(self::$DI['cli']['conf']->get(['plugins', 'test-plugin', 'enabled'])); + + if(is_null($bkp)) { + self::$DI['cli']['conf']->remove('plugins'); + } + else { + self::$DI['cli']['conf']->set('plugins', $bkp); + } } public function provideVariousInitialConfs() diff --git a/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php b/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php index 0e3c477b5c..f8e0a8b5a1 100644 --- a/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php +++ b/tests/Alchemy/Tests/Phrasea/Command/Setup/InstallTest.php @@ -12,6 +12,21 @@ use Alchemy\Phrasea\Core\Configuration\StructureTemplate; */ class InstallTest extends \PhraseanetTestCase { + private $bkp = null; + + public function setUp() + { + parent::setUp(); + $this->bkp = self::$DI['app']['conf']->get('main'); + } + + public function tearDown() + { + self::$DI['app']['conf']->set('main', $this->bkp); + parent::tearDown(); + } + + public function testRunWithoutProblems() { $input = $this->getMock('Symfony\Component\Console\Input\InputInterface'); @@ -78,9 +93,12 @@ class InstallTest extends \PhraseanetTestCase case 'db-password': return $infoDb['database']['password']; break; - case 'yes': - return true; - break; + case 'es-host': + return 'localhost'; + case 'es-port': + return 9200; + case 'es-index': + return 'phrasea_test'; default: return ''; } diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Admin/FieldsTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Admin/FieldsTest.php index e13f9e4e9a..6ddb53df86 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Admin/FieldsTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Admin/FieldsTest.php @@ -229,6 +229,9 @@ class FieldsTest extends \PhraseanetAuthenticatedWebTestCase 'dces-element' => null, 'vocabulary-type' => 'User', 'vocabulary-restricted' => true, + 'gui_editable' => true, + 'gui_visible' => true, + 'generate_cterms' => true, ]); $response = $this->request("POST", sprintf("/admin/fields/%d/fields", $databox->get_sbas_id()), [], [], $body); diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php index c8f2cdb254..e8377a823b 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Api/ApiJsonTest.php @@ -1281,7 +1281,7 @@ class ApiJsonTest extends ApiTestCase $tochange = []; foreach ($statusStructure as $n => $datas) { - $tochange[$n] = substr($record_status, ($n - 1), 1) == '0' ? '1' : '0'; + $tochange[$n] = substr($record_status, $n, 1) == '0' ? '1' : '0'; } $this->evaluateMethodNotAllowedRoute($route, ['GET', 'PUT', 'DELETE']); @@ -1305,7 +1305,8 @@ class ApiJsonTest extends ApiTestCase // test record_status in string $record_status_expected = $record_status; - $pos = strpos($record_status, '1'); + $bitToChange = []; + $pos = strpos($record_status, '1', 4); $bitToChange[$pos] = '1'; $response = $this->request('POST', $route, $this->getParameters(['status' => $bitToChange]), ['HTTP_Accept' => $this->getAcceptMimeType()]); diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php index 925caa9945..e49a967d0c 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/ExportTest.php @@ -132,9 +132,11 @@ class ExportTest extends \PhraseanetAuthenticatedWebTestCase { $app = $this->getApplication(); + $bkp = $app['conf']->get('registry'); + if (!$app['conf']->get(['registry', 'ftp', 'ftp-enabled'])) { $app['conf']->set(['registry', 'ftp', 'ftp-enabled'], true); - self::$GV_activeFTP = true; + self::$GV_activeFTP = true; } /** @var User $user */ @@ -158,6 +160,8 @@ class ExportTest extends \PhraseanetAuthenticatedWebTestCase $this->assertArrayHasKey('message', $datas); $this->assertTrue($datas['success']); unset($response, $datas); + + $app['conf']->set('registry', $bkp); } /** diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Root/LoginTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Root/LoginTest.php index 2377df72f6..b17d31de7c 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Root/LoginTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Root/LoginTest.php @@ -2017,6 +2017,9 @@ class LoginTest extends \PhraseanetAuthenticatedWebTestCase { $app = $this->getApplication(); $this->logout($app); + + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 10, 'lifetime' => 60475, @@ -2027,12 +2030,17 @@ class LoginTest extends \PhraseanetAuthenticatedWebTestCase $this->assertSame(200, $client->getResponse()->getStatusCode()); $this->assertEquals('hidden', $crawler->filter('input[name="remember-me"]')->attr('type')); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testLoginPageWithNoIdleSessionTime() { $app = $this->getApplication(); $this->logout($app); + + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 0, 'lifetime' => 60475, @@ -2043,6 +2051,8 @@ class LoginTest extends \PhraseanetAuthenticatedWebTestCase $this->assertSame(200, $client->getResponse()->getStatusCode()); $this->assertEquals('checkbox', $crawler->filter('input[name="remember-me"]')->attr('type')); + + $app['phraseanet.configuration']['session'] = $bkp; } private function addUsrAuthDoctrineEntitySupport($id, $out, $participants = false) diff --git a/tests/Alchemy/Tests/Phrasea/Core/CLIProvider/PluginServiceProviderTest.php b/tests/Alchemy/Tests/Phrasea/Core/CLIProvider/PluginServiceProviderTest.php index ad07999d04..8af589cd4a 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/CLIProvider/PluginServiceProviderTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/CLIProvider/PluginServiceProviderTest.php @@ -81,16 +81,26 @@ class PluginServiceProviderTest extends ServiceProviderTestCase } $app = self::$DI['cli']; - $app['conf']->set(['binaries', 'php_binary'], null); + + $bkp = $app['conf']->get(['main', 'binaries']); + + $app['conf']->set(['main', 'binaries', 'php_binary'], null); $app->register(new PluginServiceProvider()); $this->assertInstanceOf('Alchemy\Phrasea\Plugin\Management\ComposerInstaller', $app['plugins.composer-installer']); + + $app['conf']->set(['main', 'binaries'], $bkp); } public function testInstallerCanDetectPhpConf() { $app = self::$DI['cli']; - $app['conf']->set(['binaries', 'php_binary'], null); + + $bkp = $app['conf']->get(['main', 'binaries']); + + $app['conf']->set(['main', 'binaries', 'php_binary'], null); $app->register(new PluginServiceProvider()); $this->assertInstanceOf('Alchemy\Phrasea\Plugin\Management\ComposerInstaller', $app['plugins.composer-installer']); + + $app['conf']->set(['main', 'binaries'], $bkp); } } diff --git a/tests/Alchemy/Tests/Phrasea/Core/Configuration/DisplaySettingServiceTest.php b/tests/Alchemy/Tests/Phrasea/Core/Configuration/DisplaySettingServiceTest.php index 3cc753a6be..71269e4755 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Configuration/DisplaySettingServiceTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Configuration/DisplaySettingServiceTest.php @@ -11,33 +11,33 @@ use Doctrine\Common\Collections\ArrayCollection; */ class DisplaySettingServiceTest extends \PhraseanetTestCase { - private static $userSettings; - private static $appSettings; + private $userSettings = false; + private $appSettings = false; public function setUp() { parent::setUp(); - if (null === self::$userSettings) { - self::$userSettings = self::$DI['app']['conf']->get(['user-settings'], []); - } - - if (null === self::$appSettings) { - self::$appSettings = self::$DI['app']['conf']->get(['registry'], []); - } + $this->userSettings = self::$DI['app']['conf']->get(['user-settings']); + $this->appSettings = self::$DI['app']['conf']->get(['registry']); } - public static function tearDownAfterClass() + public function tearDown() { - if (null !== self::$userSettings) { - self::$DI['app']['conf']->set('user-settings', self::$userSettings); + if (is_null($this->userSettings)) { + self::$DI['app']['conf']->remove('user-settings'); + } + else { + self::$DI['app']['conf']->set('user-settings', $this->userSettings); } - if (null !== self::$appSettings) { - self::$DI['app']['conf']->set('registry', self::$appSettings); + if (is_null($this->appSettings)) { + self::$DI['app']['conf']->remove('registry'); + } + else { + self::$DI['app']['conf']->set('registry', $this->appSettings); } - self::$userSettings = self::$appSettings = null; parent::tearDownAfterClass(); } diff --git a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/DebuggerSubscriberTest.php b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/DebuggerSubscriberTest.php index 938207cdf1..ee899a026a 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/DebuggerSubscriberTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/DebuggerSubscriberTest.php @@ -12,8 +12,22 @@ use Symfony\Component\HttpFoundation\Request; */ class DebuggerSubscriberTest extends \PhraseanetTestCase { + private $bkp = null; + + public function setUp() + { + parent::setUp(); + $this->bkp = self::$DI['app']['conf']->get('debugger'); + } + public function tearDown() { + if(is_null($this->bkp)) { + self::$DI['app']['conf']->remove('debugger'); + } + else { + self::$DI['app']['conf']->set('debugger', $this->bkp); + } if (is_file(__DIR__ . '/Fixtures/configuration-debugger.php')) { unlink(__DIR__ . '/Fixtures/configuration-debugger.php'); } diff --git a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/SessionManagerSubscriberTest.php b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/SessionManagerSubscriberTest.php index ad2b007005..538c780028 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/SessionManagerSubscriberTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Event/Subscriber/SessionManagerSubscriberTest.php @@ -19,6 +19,9 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase { $app = new Application(Application::ENV_TEST); $app['dispatcher']->addSubscriber(new SessionManagerSubscriber($app)); + + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 0, 'lifetime' => 60475, @@ -39,12 +42,17 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $this->assertNotNUll($client->getResponse()->headers->get('x-phraseanet-end-session')); $this->assertNotNUll($client->getResponse()->headers->get('location')); $this->assertRegExp('#/login\?redirect=..(?:%2F|/)prod#', $client->getResponse()->headers->get('location')); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testEndSessionXmlXhttpRequest() { $app = new Application(Application::ENV_TEST); $app['dispatcher']->addSubscriber(new SessionManagerSubscriber($app)); + + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 0, 'lifetime' => 60475, @@ -67,6 +75,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $this->assertTrue($client->getResponse()->isClientError()); $this->assertNotNUll($client->getResponse()->headers->get('x-phraseanet-end-session')); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testEndSessionAuthenticated() @@ -85,6 +95,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $app['orm.em']->expects($this->exactly(4))->method('persist')->will($this->returnValue(null)); $app['orm.em']->expects($this->exactly(2))->method('flush')->will($this->returnValue(null)); + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 0, 'lifetime' => 60475, @@ -101,6 +113,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $client->request('GET', '/prod'); $this->assertTrue($client->getResponse()->isOK()); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testEndSessionAuthenticatedWithOutdatedIdle() @@ -120,6 +134,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $app['orm.em']->expects($this->any())->method('persist')->will($this->returnValue(null)); $app['orm.em']->expects($this->any())->method('flush')->will($this->returnValue(null)); + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 10, 'lifetime' => 60475, @@ -139,6 +155,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $this->assertNotNUll($client->getResponse()->headers->get('x-phraseanet-end-session')); $this->assertNotNUll($client->getResponse()->headers->get('location')); $this->assertRegExp('#/login\?redirect=..(?:%2F|/)prod#', $client->getResponse()->headers->get('location')); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testEndSessionAuthenticatedWithOutdatedIdleXmlHttpRequest() @@ -158,6 +176,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $app['orm.em']->expects($this->any())->method('persist')->will($this->returnValue(null)); $app['orm.em']->expects($this->any())->method('flush')->will($this->returnValue(null)); + $bkp = $app['phraseanet.configuration']['session']; + $app['phraseanet.configuration']['session'] = [ 'idle' => 10, 'lifetime' => 60475, @@ -178,6 +198,8 @@ class SessionManagerSubscriberTest extends \PhraseanetAuthenticatedWebTestCase $this->assertTrue($client->getResponse()->isClientError()); $this->assertNotNUll($client->getResponse()->headers->get('x-phraseanet-end-session')); + + $app['phraseanet.configuration']['session'] = $bkp; } public function testUndefinedModule() diff --git a/tests/Alchemy/Tests/Phrasea/Core/Provider/AuthenticationManagerServiceProviderTest.php b/tests/Alchemy/Tests/Phrasea/Core/Provider/AuthenticationManagerServiceProviderTest.php index fb128260f8..c28a005f72 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Provider/AuthenticationManagerServiceProviderTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Provider/AuthenticationManagerServiceProviderTest.php @@ -95,6 +95,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase { $app = $this->loadApp(); + $bkp = $app['conf']->get('authentication'); + $app['conf']->set(['authentication', 'captcha', 'trials-before-display'], 42); //$app['orm.em'] = $this->createEntityManagerMock(); @@ -102,14 +104,21 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $manager = $app['auth.native.failure-manager']; $this->assertEquals(42, $manager->getTrials()); + + $app['conf']->set('authentication', $bkp); } public function testFailureAccountCreator() { $app = $this->getApplication(); + + $bkp = $app['conf']->get('authentication'); + $app->register(new ConfigurationServiceProvider()); $app['conf']->set(['authentication', 'auto-create'], ['templates' => []]); $app['authentication.providers.account-creator']; + + $app['conf']->set('authentication', $bkp); } public function testAuthNativeWithCaptchaEnabled() @@ -121,6 +130,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $app->register(new RepositoriesServiceProvider()); $app['phraseanet.appbox'] = self::$DI['app']['phraseanet.appbox']; + $bkp = $app['conf']->get('authentication'); + $app['conf']->set(['authentication', 'captcha'], ['enabled' => true]); $app['orm.em'] = $this->createEntityManagerMock(); @@ -131,6 +142,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $app['recaptcha'] = $this->createReCaptchaMock(); $this->assertInstanceOf(FailureHandledNativeAuthentication::class, $app['auth.native']); + + $app['conf']->set('authentication', $bkp); } public function testAuthNativeWithCaptchaDisabled() @@ -141,6 +154,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $app->register(new ConfigurationServiceProvider()); $app['phraseanet.appbox'] = self::$DI['app']['phraseanet.appbox']; + $bkp = $app['conf']->get('authentication'); + $app['conf']->set(['authentication', 'captcha'], ['enabled' => false]); $app['orm.em'] = $this->createEntityManagerMock(); @@ -148,6 +163,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $app['recaptcha'] = $this->createReCaptchaMock(); $this->assertInstanceOf(NativeAuthentication::class, $app['auth.native']); + + $app['conf']->set('authentication', $bkp); } public function testAccountCreator() @@ -156,6 +173,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $template1 = $user = $app['manipulator.user']->createTemplate('template1', self::$DI['user']); $template2 = $user = $app['manipulator.user']->createTemplate('template2', self::$DI['user']); + $bkp = $app['conf']->get('authentication'); + $app['conf']->set(['authentication', 'auto-create'], ['templates' => [$template1->getId(), $template2->getId()]]); $this->assertEquals([$template1->getLogin(), $template2->getLogin()], array_map(function (User $user) { @@ -164,6 +183,8 @@ class AuthenticationManagerServiceProviderTest extends ServiceProviderTestCase $this->removeUser($app, $template1); $this->removeUser($app, $template2); + + $app['conf']->set('authentication', $bkp); } private function createUserRepositoryMock() diff --git a/tests/Alchemy/Tests/Phrasea/Core/Provider/BorderManagerServiceProviderTest.php b/tests/Alchemy/Tests/Phrasea/Core/Provider/BorderManagerServiceProviderTest.php index 3ebca4a7f5..14f16bb8d4 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Provider/BorderManagerServiceProviderTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Provider/BorderManagerServiceProviderTest.php @@ -38,10 +38,20 @@ class BorderManagerServiceProviderTest extends ServiceProviderTestCase $app->register(new PhraseanetServiceProvider()); $app['root.path'] = __DIR__ . '/../../../../../..'; $app->register(new ConfigurationServiceProvider()); + + $bkp = $app['conf']->get('border-manager'); + $app['conf']->set(['border-manager', 'enabled'], false); $this->assertInstanceOf('Alchemy\Phrasea\Border\Manager', $app['border-manager']); $this->assertNull($app['phraseanet.metadata-reader']->getPdfToText()); + + if(is_null($bkp)) { + $app['conf']->remove('border-manager'); + } + else { + $app['conf']->set('border-manager', $bkp); + } } public function testItLoadsWithXPDF() @@ -63,9 +73,19 @@ class BorderManagerServiceProviderTest extends ServiceProviderTestCase $app->register(new BorderManagerServiceProvider()); $app['root.path'] = __DIR__ . '/../../../../../..'; $app->register(new ConfigurationServiceProvider()); + + $bkp = $app['conf']->get('border-manager'); + $app['conf']->set(['border-manager', 'enabled'], false); $this->assertInstanceOf('Alchemy\Phrasea\Border\Manager', $app['border-manager']); $this->assertInstanceOf('XPDF\PdfToText', $app['phraseanet.metadata-reader']->getPdfToText()); + + if(is_null($bkp)) { + $app['conf']->remove('border-manager'); + } + else { + $app['conf']->set('border-manager', $bkp); + } } } diff --git a/tests/Alchemy/Tests/Phrasea/Core/Provider/LocaleServiceProviderTest.php b/tests/Alchemy/Tests/Phrasea/Core/Provider/LocaleServiceProviderTest.php index 49d0d54fc8..db97e02e07 100644 --- a/tests/Alchemy/Tests/Phrasea/Core/Provider/LocaleServiceProviderTest.php +++ b/tests/Alchemy/Tests/Phrasea/Core/Provider/LocaleServiceProviderTest.php @@ -27,6 +27,9 @@ class LocaleServiceProviderTest extends \PhraseanetTestCase $app->register(new LocaleServiceProvider()); $app['root.path'] = __DIR__ . '/../../../../../..'; $app->register(new ConfigurationServiceProvider()); + + $bkp = $app['conf']->get('languages'); + $app['conf']->set(['languages', 'available'], ['fr', 'zh', 'de']); $original = Application::getAvailableLanguages(); @@ -34,6 +37,8 @@ class LocaleServiceProviderTest extends \PhraseanetTestCase unset($original['nl']); $this->assertEquals($original, $app['locales.available']); + + $app['conf']->set('languages', $bkp); } public function testLocalesCustomizedWithError() @@ -43,6 +48,8 @@ class LocaleServiceProviderTest extends \PhraseanetTestCase $app['root.path'] = __DIR__ . '/../../../../../..'; $app->register(new ConfigurationServiceProvider()); + $bkp = $app['conf']->get('languages'); + $app['conf']->set(['languages', 'available'], ['en_US']); $app['monolog'] = $this->getMock('Psr\Log\LoggerInterface'); @@ -52,6 +59,8 @@ class LocaleServiceProviderTest extends \PhraseanetTestCase $original = Application::getAvailableLanguages(); $this->assertEquals($original, $app['locales.available']); + + $app['conf']->set('languages', $bkp); } public function testLocaleBeforeBoot() diff --git a/tests/Alchemy/Tests/Phrasea/Plugin/Management/AutoloaderGeneratorTest.php b/tests/Alchemy/Tests/Phrasea/Plugin/Management/AutoloaderGeneratorTest.php index 49bfc79340..42f6d2ea9d 100644 --- a/tests/Alchemy/Tests/Phrasea/Plugin/Management/AutoloaderGeneratorTest.php +++ b/tests/Alchemy/Tests/Phrasea/Plugin/Management/AutoloaderGeneratorTest.php @@ -15,6 +15,25 @@ use Symfony\Component\Process\ExecutableFinder; */ class AutoloaderGeneratorTest extends \PhraseanetTestCase { + private $bkp = null; + + public function setUp() + { + parent::setUp(); + $this->bkp = self::$DI['app']['conf']->get('plugins'); + } + + public function tearDown() + { + if(is_null($this->bkp)) { + self::$DI['app']['conf']->remove('plugins'); + } + else { + self::$DI['app']['conf']->set('plugins', $this->bkp); + } + parent::tearDown(); + } + public function testGeneratedFileAfterInstall() { $pluginDir = __DIR__ . '/../Fixtures/PluginDirInstalled/test-plugin'; diff --git a/tests/Alchemy/Tests/Phrasea/Plugin/PluginManagerTest.php b/tests/Alchemy/Tests/Phrasea/Plugin/PluginManagerTest.php index af439bdf15..16288b353b 100644 --- a/tests/Alchemy/Tests/Phrasea/Plugin/PluginManagerTest.php +++ b/tests/Alchemy/Tests/Phrasea/Plugin/PluginManagerTest.php @@ -47,9 +47,16 @@ class PluginManagerTest extends PluginTestCase public function testHasPlugin() { + $prevPlugins = self::$DI['cli']['conf']->get('plugins'); + + self::$DI['cli']['conf']->set('plugins', []); + self::$DI['cli']['conf']->set(['plugins', 'test-plugin', 'enabled'], true); + $manager = new PluginManager(__DIR__ . '/Fixtures/PluginDirInstalled', self::$DI['cli']['plugins.plugins-validator'], self::$DI['cli']['conf']); $this->assertTrue($manager->hasPlugin('test-plugin')); $this->assertFalse($manager->hasPlugin('test-plugin2')); + + self::$DI['cli']['conf']->set('plugins', $prevPlugins); } private function createValidatorMock() diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TextNodeTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TextNodeTest.php index b2cde860b1..571cbd93de 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TextNodeTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/AST/TextNodeTest.php @@ -48,6 +48,7 @@ class TextNodeTest extends \PHPUnit_Framework_TestCase $query_context->getUnrestrictedFields()->willReturn([$field]); $query_context->getPrivateFields()->willReturn([]); $query_context->localizeField($field)->willReturn(['foo.fr', 'foo.en']); + $query_context->truncationField($field)->willReturn([]); $node = new TextNode('bar', new Context('baz')); $query = $node->buildQuery($query_context->reveal()); @@ -80,12 +81,18 @@ class TextNodeTest extends \PHPUnit_Framework_TestCase $query_context ->localizeField($public_field) ->willReturn(['foo.fr', 'foo.en']); + $query_context + ->truncationField($public_field) + ->willReturn([]); $query_context ->getPrivateFields() ->willReturn([$private_field]); $query_context ->localizeField($private_field) ->willReturn(['private_caption.bar.fr', 'private_caption.bar.en']); + $query_context + ->truncationField($private_field) + ->willReturn([]); $node = new TextNode('baz'); $query = $node->buildQuery($query_context->reveal()); @@ -136,6 +143,7 @@ class TextNodeTest extends \PHPUnit_Framework_TestCase $query_context->getUnrestrictedFields()->willReturn([$field]); $query_context->getPrivateFields()->willReturn([]); $query_context->localizeField($field)->willReturn(['foo.fr', 'foo.en']); + $query_context->truncationField($field)->willReturn([]); $node = new TextNode('bar'); $node->setConcepts([ @@ -180,12 +188,18 @@ class TextNodeTest extends \PHPUnit_Framework_TestCase $query_context ->localizeField($public_field) ->willReturn(['foo.fr', 'foo.en']); + $query_context + ->truncationField($public_field) + ->willReturn([]); $query_context ->getPrivateFields() ->willReturn([$private_field]); $query_context ->localizeField($private_field) ->willReturn(['private_caption.bar.fr', 'private_caption.bar.en']); + $query_context + ->truncationField($private_field) + ->willReturn([]); $node = new TextNode('baz'); $node->setConcepts([ diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/Search/QueryContextTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/Search/QueryContextTest.php index e45a69b87b..093ee51f3a 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/Search/QueryContextTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/Search/QueryContextTest.php @@ -18,7 +18,7 @@ class QueryContextTest extends \PHPUnit_Framework_TestCase { $structure = $this->prophesize(Structure::class)->reveal(); $available_locales = ['ab', 'cd', 'ef']; - $context = new QueryContext($structure, $available_locales, 'fr'); + $context = new QueryContext(null, $structure, $available_locales, 'fr'); $narrowed = $context->narrowToFields(['some_field']); $this->assertEquals(['some_field'], $narrowed->getFields()); } @@ -33,10 +33,10 @@ class QueryContextTest extends \PHPUnit_Framework_TestCase 'bar' => $bar_field ]); - $context = new QueryContext($structure->reveal(), [], 'fr'); + $context = new QueryContext(null, $structure->reveal(), [], 'fr'); $this->assertEquals([$foo_field, $bar_field], $context->getUnrestrictedFields()); - $narrowed_context = new QueryContext($structure->reveal(), [], 'fr', ['foo']); + $narrowed_context = new QueryContext(null, $structure->reveal(), [], 'fr', ['foo']); $this->assertEquals([$foo_field], $narrowed_context->getUnrestrictedFields()); } @@ -50,10 +50,10 @@ class QueryContextTest extends \PHPUnit_Framework_TestCase 'bar' => $bar_field ]); - $context = new QueryContext($structure->reveal(), [], 'fr'); + $context = new QueryContext(null, $structure->reveal(), [], 'fr'); $this->assertEquals([$foo_field, $bar_field], $context->getPrivateFields()); - $narrowed_context = new QueryContext($structure->reveal(), [], 'fr', ['foo']); + $narrowed_context = new QueryContext(null, $structure->reveal(), [], 'fr', ['foo']); $this->assertEquals([$foo_field], $narrowed_context->getPrivateFields()); } } diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/StructureTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/StructureTest.php index 4f6edc5a9b..27f01811c1 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/StructureTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/StructureTest.php @@ -36,6 +36,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase $field->isFacet()->willReturn(false); $field->hasConceptInference()->willReturn(false); $field->getDependantCollections()->willReturn(['1']); + $field->get_databox_id()->willReturn('1'); $structure->add($field->reveal()); $this->assertCount(1, $structure->getAllFields()); @@ -60,6 +61,7 @@ class StructureTest extends \PHPUnit_Framework_TestCase $field->isPrivate()->willReturn(false); $field->isFacet()->willReturn(false); $field->hasConceptInference()->willReturn(false); + $field->get_databox_id()->willReturn('1'); $other = new Field('foo', FieldMapping::TYPE_STRING); diff --git a/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/ValueCheckerTest.php b/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/ValueCheckerTest.php index fe4fd0c7d4..b0e2b6aff8 100644 --- a/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/ValueCheckerTest.php +++ b/tests/Alchemy/Tests/Phrasea/SearchEngine/Structure/ValueCheckerTest.php @@ -14,14 +14,14 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Typed; class ValueCheckerTest extends \PHPUnit_Framework_TestCase { /** - * @dataProvider escapeRawProvider + * @dataProvider valueCheckerProvider */ public function testValueCompatibility($subject, $value, $compatible) { $this->assertEquals($compatible, ValueChecker::isValueCompatible($subject, $value)); } - public function escapeRawProvider() + public function valueCheckerProvider() { $values = [ [FieldMapping::TYPE_FLOAT , 42 , true ], diff --git a/tests/bootstrap.sh b/tests/bootstrap.sh index 658fec4bab..0f951a22ac 100755 --- a/tests/bootstrap.sh +++ b/tests/bootstrap.sh @@ -34,7 +34,7 @@ then mv config/configuration.yml{,.backup} rm -f config/configuration-compiled.php fi -./bin/setup system:install --email=test@phraseanet.com --password=test --db-user=root --db-template=en-simple --db-password=toor --databox=db_test --appbox=ab_test --server-name=http://127.0.0.1 -y $VERBOSITY +./bin/setup system:install --email=test@phraseanet.com --password=test --db-user=root --db-template=en-simple --db-password=toor --databox=db_test --appbox=ab_test --server-name=http://127.0.0.1 --es-host=localhost --es-port=9200 --es-index=phrasea_test -y $VERBOSITY case "$INSTALL_MODE" in update) ./bin/developer ini:reset --email=test@phraseanet.com --password=test --run-patches --no-setup-dbs $VERBOSITY diff --git a/tests/classes/media/Permalink/AdapterTest.php b/tests/classes/media/Permalink/AdapterTest.php index d51af25bca..dd841c38aa 100644 --- a/tests/classes/media/Permalink/AdapterTest.php +++ b/tests/classes/media/Permalink/AdapterTest.php @@ -44,14 +44,15 @@ class media_Permalink_AdapterTest extends \PhraseanetTestCase public function testGet_url() { - $url = rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' + $url = $this->removeScheme(rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/document/' . $this->object->get_label() . '.' . pathinfo(self::$DI['record_1']->get_subdef('document')->get_file(), PATHINFO_EXTENSION) - . '?token=' . urlencode($this->object->get_token()); + . '?token=' . urlencode($this->object->get_token()) + ); - $this->assertEquals($url, $this->object->get_url()); + $this->assertEquals($url, $this->removeScheme((string)($this->object->get_url()))); } public function testGet_Previewurl() @@ -60,25 +61,27 @@ class media_Permalink_AdapterTest extends \PhraseanetTestCase $subdef = self::$DI['record_1']->get_subdef('preview'); $previewPermalink = media_Permalink_Adapter::getPermalink(self::$DI['app'], $databox, $subdef); - $url = rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' + $url = $this->removeScheme(rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/preview/' . $previewPermalink->get_label() . '.' . pathinfo(self::$DI['record_1']->get_subdef('preview')->get_file(), PATHINFO_EXTENSION) - . '?token=' . urlencode($previewPermalink->get_token()); + . '?token=' . urlencode($previewPermalink->get_token()) + ); - $this->assertEquals($url, $previewPermalink->get_url()); + $this->assertEquals($url, $this->removeScheme((string)($previewPermalink->get_url()))); } public function testGet_page() { - $url = rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' + $url = $this->removeScheme(rtrim(self::$DI['app']['conf']->get('servername'), '/') . '/permalink/v1/' . self::$DI['record_1']->get_sbas_id() . '/' . self::$DI['record_1']->get_record_id() . '/document/' - . '?token=' . urlencode($this->object->get_token()); + . '?token=' . urlencode($this->object->get_token()) + ); - $this->assertEquals($url, $this->object->get_page()); + $this->assertEquals($url, $this->removeScheme((string)($this->object->get_page()))); } public function testGet_id() @@ -113,4 +116,9 @@ class media_Permalink_AdapterTest extends \PhraseanetTestCase { media_Permalink_Adapter::create(self::$DI['app'], self::$DI['record_1']->get_databox(), self::$DI['record_1']->get_subdef('document')); } + + private function removeScheme($s) + { + return preg_replace('/^(http|https):\\/\\/(.*)$/', '$2', $s); + } } diff --git a/www/scripts/models/field.js b/www/scripts/models/field.js index e4b603ee75..c9b3eb8077 100644 --- a/www/scripts/models/field.js +++ b/www/scripts/models/field.js @@ -26,6 +26,9 @@ define([ "type": "string", "thumbtitle": "0", "tbranch": "", + "generate_cterms": false, + "gui_editable": true, + "gui_visible": true, "separator": "", "required": false, "report": true, diff --git a/www/scripts/tests/specs/models.js b/www/scripts/tests/specs/models.js index bf4c240779..83ea14f7e7 100644 --- a/www/scripts/tests/specs/models.js +++ b/www/scripts/tests/specs/models.js @@ -44,6 +44,18 @@ define([ this.field.get('tbranch').should.equal(""); }); + it("should default generate_cterms property to '1'", function () { + this.field.get('generate_cterms').should.equal("1"); + }); + + it("should default gui_editable property to '1'", function () { + this.field.get('gui_editable').should.equal("1"); + }); + + it("should default gui_visible property to '1'", function () { + this.field.get('gui_visible').should.equal("1"); + }); + it("should default separator property to 'empty'", function () { this.field.get('separator').should.equal(""); }); diff --git a/yarn.lock b/yarn.lock index 4cfedda66c..a7d490caab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3815,9 +3815,9 @@ fsevents@^1.0.0, fsevents@^1.1.2, fsevents@^1.2.7: node-pre-gyp "^0.12.0" fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -4049,7 +4049,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -4061,6 +4061,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" @@ -4166,10 +4178,10 @@ graceful-fs@^3.0.0: dependencies: natives "^1.1.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.4: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== graceful-fs@~1.2.0: version "1.2.3" @@ -4181,6 +4193,11 @@ graceful-fs@~2.0.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0" integrity sha1-fNLNsiiko/Nule+mzBQt59GhNtA= +graceful-fs@~4.1.4: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -4757,7 +4774,12 @@ inherits@1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -5974,9 +5996,9 @@ lodash.keys@~2.4.1: lodash.isobject "~2.4.1" lodash.merge@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" - integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.restparam@^3.0.0: version "3.6.1" @@ -6483,9 +6505,9 @@ mitt@^1.1.3: integrity sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA== mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -7543,10 +7565,10 @@ phantomjs-prebuilt@^2.1.3: request-progress "^2.0.1" which "^1.2.10" -phraseanet-common@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/phraseanet-common/-/phraseanet-common-0.4.2.tgz#740de9bf254116adc506c9703015ab1533f89864" - integrity sha512-uyKULVCV9df161A970mWnZtdxAb/ZWCuUdnSTn0T9AGvwsWvKf2p6+pgEVtBQ81LIGn1m5UlhiF7dUlc6nT7iQ== +phraseanet-common@^0.4.5-d: + version "0.4.5-d" + resolved "https://registry.yarnpkg.com/phraseanet-common/-/phraseanet-common-0.4.5-d.tgz#193da1ab062f98e99729b7f98a7bbe32c495c7f3" + integrity sha512-7mmPDg0pFnFYyY1eazmUcDa18SGXp90zEBYTNzVan6goPPBjUmA0YwzBiuvDnxlcwMX8x0kDIrOouOBfWG5E1w== dependencies: es6-promise "^4.1.1" humane-js "^3.2.2" @@ -7555,10 +7577,10 @@ phraseanet-common@^0.4.1: js-cookie "^2.1.0" pym.js "^1.3.1" -phraseanet-production-client@0.34.72-d: - version "0.34.72-d" - resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.72-d.tgz#028a5ccd589e696b5433eea9d53d9367966613c8" - integrity sha512-IPaDRqXwyJegoKmzr56bggxTzN4TnmuAqU4O7rDEhh0aqdCiuC8rlH/yzKoLeEIMSrESCw5mBhrI//ccntvv9w== +phraseanet-production-client@^0.34.86-d: + version "0.34.86-d" + resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.86-d.tgz#51e6c6fb17fcd2695cee90fb3d972c781057fd78" + integrity sha512-12o7pcRZAJ/5Ote4DbkaRxLz2GIZBUcZf53FB+GHVFxhds5ia6UNDCPhYP5vX4hhHtO/Y6Mj/BOlOjnoyi+k1g== dependencies: "@mapbox/mapbox-gl-language" "^0.9.2" "@turf/turf" "^5.1.6" @@ -7589,7 +7611,7 @@ phraseanet-production-client@0.34.72-d: mapbox-gl-circle "^1.6.5" mapbox.js "^2.4.0" nouislider "^9.2.0" - phraseanet-common "^0.4.1" + phraseanet-common "^0.4.5-d" pym.js "^1.3.1" rx "^4.1.0" sprintf-js "^1.1.1" @@ -8296,9 +8318,9 @@ right-align@^0.1.1: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.5.0, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3"