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..12389ce613 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,36 @@ +.idea +.settings +/*.md +/.circleci +/.dockerignore +/.env +/.env.* +/env.* +/.git +/.gitignore +/.travis.yml +/AUTHORS +/CONTRIBUTORS +/Dockerfile +/LICENSE +/bin +!/bin/console +!/bin/developer +!/bin/setup +/cache +/config/configuration.yml +/config/configuration-compiled.php +!/config/configuration.sample.yml +/datas +/docker-compose.* +/logs +/node_modules +/plugins +/tmp +/vendor +/volumes +/www/assets +/www/custom +/www/plugins +/www/thumbnails +npm-debug.log diff --git a/.env b/.env new file mode 100644 index 0000000000..1f3824846a --- /dev/null +++ b/.env @@ -0,0 +1,83 @@ +PHRASEANET_PROJECT_NAME=Phraseanet +# Registry from where you pull Docker images +PHRASEANET_DOCKER_REGISTRY=local +# Tag of the Docker images +PHRASEANET_DOCKER_TAG=latest +# APPLICATION PORT +PHRASEANET_APP_PORT=8082 +# RabbitMQ configuration +RABBITMQ_DEFAULT_USER=alchemy +RABBITMQ_DEFAULT_PASS=vdh4dpe5Wy3R +RABBITMQ_MANAGEMENT_PORT=10811 +# Mysql configuration +MYSQL_ROOT_PASSWORD=root +SERVER_NAME=phraseanet-docker + + +# --------------- APPLICATION CONFIGURATION -------------------- + +# Max upload size +MAX_BODY_SIZE=2G +# Max input var +MAX_INPUT_VARS=12000 + +# Enable opcache ? (0/1) +OPCACHE_ENABLED=1 +# session cache limiter (off/on) +SESSION_CACHE_LIMITER=off + +# PHP LOG LEVEL : Possible Values: alert, error, warning, notice, debug +PHP_LOG_LEVEL=warning + +# --------------- APPLICATION STARTUP CONFIGURATION -------------------- + +# These variables are only used if the configuration.yml file is not present, in order to automate the installation procedure + +# set here the first user / email couple +INSTALL_ACCOUNT_EMAIL=admin@alchemy.fr +INSTALL_ACCOUNT_PASSWORD=iJRqXU0MwbyJewQLBbra6IWHsWly +# Database parameters +INSTALL_DB_HOST=db +INSTALL_DB_PORT=3306 +INSTALL_DB_USER=root +INSTALL_DB_PASSWORD=root +INSTALL_DB_TEMPLATE=en-simple +INSTALL_APPBOX=ab_master +INSTALL_DATABOX=db_databox1 +INSTALL_SERVER_NAME=localhost + +# Mysql max allowed packet +MYSQL_MAX_ALLOWED_PACKET=16M + + +# --- DEV purpose --- + +# PhpMyAdmin port +PHRASEANET_PHPMYADMIN_PORT=8089 + +# Xdebug +XDEBUG_ENABLED=1 +XDEBUG_PROFILER_ENABLED=0 +IDE_KEY=PHPSTORM +PHRASEANET_SUBNET_IPS=172.32.0.0/16 +XDEBUG_REMOTE_HOST=172.32.0.1 +PHP_IDE_CONFIG=serverName=docker-server-phraseanet + +# Volumes location for dev +PHRASEANET_CONFIG_DIR=./config +PHRASEANET_LOGS_DIR=./logs +PHRASEANET_DATA_DIR=./datas +PHRASEANET_DB_DIR=./volumes/db +PHRASEANET_ELASTICSEARCH_DIR=./volumes/elasticsearch +PHRASEANET_THUMBNAILS_DIR=./www/thumbnails +PHRASEANET_CUSTOM_DIR=./www/custom +PHRASEANET_TMP_DIR=./tmp +PHRASEANET_CACHE_DIR=./cache + + +# For dev who don't have SSH_AUTH_SOCK (avoid an empty volume name) +SSH_AUTH_SOCK=/dev/null + +# Plugin support +PHRASEANET_PLUGINS= +PHRASEANET_SSH_PRIVATE_KEY= diff --git a/.gitignore b/.gitignore index dc81372af0..ead2712de2 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,7 @@ playbook.retry npm-debug.log /Phrasea_datas + +.env.* +env.local +/volumes diff --git a/Dockerfile b/Dockerfile index 7ff718ab2c..8231d48455 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,21 @@ -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) +######################################################################### -RUN apt-get update \ +FROM php:7.0-fpm-stretch as phraseanet-system + +ENV FFMPEG_VERSION=4.2.2 + +RUN echo "deb http://deb.debian.org/debian stretch main non-free" > /etc/apt/sources.list \ + && 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 \ + && apt-get install -y --no-install-recommends \ + zlib1g-dev \ git \ ghostscript \ gpac \ @@ -23,142 +32,194 @@ RUN apt-get update \ libxslt-dev \ libzmq3-dev \ locales \ + gettext \ mcrypt \ swftools \ unoconv \ unzip \ xpdf \ + libreoffice-base-core \ + libreoffice-impress \ + libreoffice-calc \ + libreoffice-math \ + libreoffice-writer \ + libreoffice-pdfimport \ + # FFmpeg + yasm \ + libvorbis-dev \ + texi2html \ + nasm \ + zlib1g-dev \ + libx264-dev \ + libfdk-aac-dev \ + libopus-dev \ + libvpx-dev \ + libmp3lame-dev \ + libogg-dev \ + libopencore-amrnb-dev \ + libopencore-amrwb-dev \ + libdc1394-22-dev \ + libx11-dev \ + libswscale-dev \ + libpostproc-dev \ + libxvidcore-dev \ + libtheora-dev \ + libgsm1-dev \ + libfreetype6-dev \ + # End FFmpeg && 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 \ + && pecl install \ + redis \ + amqp-1.9.3 \ + zmq-beta \ + imagick-beta \ + xdebug-2.6.1 \ && docker-php-ext-enable redis amqp zmq imagick \ && pecl clear-cache \ && docker-php-source delete \ - && rm -rf /var/lib/apt/lists/* + && mkdir /tmp/ffmpeg \ + && curl -s https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 | tar jxf - -C /tmp/ffmpeg \ + && ( \ + cd /tmp/ffmpeg/ffmpeg-${FFMPEG_VERSION} \ + && ./configure \ + --enable-gpl \ + --enable-nonfree \ + --enable-libfdk-aac \ + --enable-libfdk_aac \ + --enable-libgsm \ + --enable-libmp3lame \ + --enable-libtheora \ + --enable-libvorbis \ + --enable-libvpx \ + --enable-libfreetype \ + --enable-libopus \ + --enable-libx264 \ + --enable-libxvid \ + --enable-zlib \ + --enable-postproc \ + --enable-swscale \ + --enable-pthreads \ + --enable-libdc1394 \ + --enable-version3 \ + --enable-libopencore-amrnb \ + --enable-libopencore-amrwb \ + && make \ + && make install \ + && make distclean \ + ) \ + && rm -rf /tmp/ffmpeg \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists \ + && mkdir /entrypoint /var/alchemy \ + && useradd -u 1000 app \ + && mkdir -p /home/app/.composer \ + && chown -R app: /home/app /var/alchemy -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 composer-setup.php --install-dir=/usr/local/bin --filename=composer \ - && php -r "unlink('composer-setup.php');" +ENV XDEBUG_ENABLED=0 + +######################################################################### +# This image is used to build the apps +######################################################################### + +FROM phraseanet-system as builder + +COPY --from=composer:1.9.1 /usr/bin/composer /usr/bin/composer # Node Installation (node + yarn) # Reference : # https://linuxize.com/post/how-to-install-node-js-on-ubuntu-18.04/ # https://yarnpkg.com/lang/en/docs/install/#debian-stable RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \ - && apt install -y nodejs \ && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ - && apt-get update && apt-get install -y --no-install-recommends yarn \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/ - -RUN mkdir /entrypoint /var/alchemy \ - && useradd -u 1000 app \ - && mkdir -p /home/app/.composer \ - && chown -R app: /home/app /var/alchemy - -WORKDIR /var/alchemy/ - -COPY gulpfile.js /var/alchemy/ -COPY Makefile /var/alchemy/ -COPY package.json /var/alchemy/ -COPY phpunit.xml.dist /var/alchemy/ -COPY yarn.lock /var/alchemy/ -COPY bin /var/alchemy/bin -COPY composer.json /var/alchemy/ -COPY composer.lock /var/alchemy/ -RUN make install_composer -COPY resources /var/alchemy/resources -COPY www /var/alchemy/www -RUN make clean_assets -RUN make install_asset_dependencies -RUN make install_assets - -ADD ./docker/phraseanet/ / -COPY lib /var/alchemy/lib -COPY tmp /var/alchemy/tmp -COPY config /var/alchemy/config -COPY grammar /var/alchemy/grammar -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/* + && apt-get install -y --no-install-recommends \ + nodejs \ + yarn \ + nano \ + vim \ + iputils-ping \ + zsh \ + ssh \ + telnet \ + autoconf \ + libtool \ + python \ + pkg-config \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists \ + && git clone https://github.com/robbyrussell/oh-my-zsh.git /bootstrap/.oh-my-zsh \ + && mkdir -p /var/alchemy/Phraseanet \ + && chown -R app:app /var/alchemy -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 \ - && chmod -R 777 /var/alchemy/Phraseanet/cache \ - && mkdir -p /var/alchemy/Phraseanet/datas \ - && chmod -R 777 /var/alchemy/Phraseanet/datas \ - && mkdir -p /var/alchemy/Phraseanet/tmp \ - && chmod -R 777 /var/alchemy/Phraseanet/tmp \ - && mkdir -p /var/alchemy/Phraseanet/www/custom \ - && chmod -R 777 /var/alchemy/Phraseanet/www/custom \ - && mkdir -p /var/alchemy/Phraseanet/config \ - && chmod -R 777 /var/alchemy/Phraseanet/config WORKDIR /var/alchemy/Phraseanet -ENTRYPOINT ["/phraseanet-entrypoint.sh"] -CMD ["/boot.sh"] -# phraseanet-worker +USER app + +# Warm up composer cache for faster builds +COPY docker/caching/composer.* ./ +RUN composer install --prefer-dist --no-dev --no-progress --no-suggest --classmap-authoritative --no-interaction --no-scripts \ + && rm -rf vendor composer.* +# End warm up + +COPY --chown=app . . + +RUN make install + +ADD ./docker/builder/root / + +# SSH Private repo +ARG SSH_PRIVATE_KEY +ARG PHRASEANET_PLUGINS + +RUN ( \ + test ! -z "${SSH_PRIVATE_KEY}" \ + && mkdir -p ~/.ssh \ + && echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa \ + # make sure github domain.com is accepted + && ssh-keyscan -H github.com >> ~/.ssh/known_hosts \ + && chmod 600 ~/.ssh/id_rsa \ + ) || echo "Skip SSH key" + +RUN ./docker/phraseanet/plugins/console install + +ENTRYPOINT ["/bootstrap/entrypoint.sh"] + +CMD [] + +######################################################################### +# Phraseanet web application image +######################################################################### + +FROM phraseanet-system as phraseanet-fpm + +COPY --from=builder --chown=app /var/alchemy/Phraseanet /var/alchemy/Phraseanet +ADD ./docker/phraseanet/root / +WORKDIR /var/alchemy/Phraseanet +ENTRYPOINT ["docker/phraseanet/entrypoint.sh"] +CMD ["php-fpm", "-F"] + +######################################################################### +# Phraseanet worker application image +######################################################################### + FROM phraseanet-fpm as phraseanet-worker -CMD ["/worker-boot.sh"] +ENTRYPOINT ["docker/phraseanet/worker/entrypoint.sh"] +CMD ["bin/console", "task-manager:scheduler:run"] +######################################################################### # phraseanet-nginx -FROM nginx:1.15 as phraseanet-nginx -RUN useradd -u 1000 app -ADD ./docker/nginx/ / -COPY --from=builder /var/alchemy/www /var/alchemy/Phraseanet/www -CMD ["/boot.sh"] +######################################################################### + +FROM nginx:1.17.8-alpine as phraseanet-nginx +RUN adduser --uid 1000 --disabled-password app +ADD ./docker/nginx/root / +COPY --from=builder /var/alchemy/Phraseanet/www /var/alchemy/Phraseanet/www + +ENTRYPOINT ["/entrypoint.sh"] + +CMD ["nginx", "-g", "daemon off;"] 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/Makefile b/Makefile index 192ae889bb..1627d6356d 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,10 @@ install: make install_assets install_composer: - composer install --ignore-platform-reqs + composer install --ignore-platform-reqs --no-dev --no-suggest --classmap-authoritative --no-interaction + +install_composer_dev: + composer install install_asset_dependencies: yarn install diff --git a/README.md b/README.md index 9fb4237d25..377d5ceee6 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ Phraseanet is licensed under GPL-v3 license. https://docs.phraseanet.com/ +For development with Phraseanet API see https://docs.phraseanet.com/4.0/en/Devel/index.html + # Installation : You **must** not download the source from GitHub, but download a packaged version here : @@ -26,13 +28,176 @@ https://www.phraseanet.com/download/ And follow the install steps described at https://docs.phraseanet.com/4.0/en/Admin/Install.html -# Try Phraseanet : +# Phraseanet with Docker: + +## Prerequisites + +- docker-compose +- docker >=v18.01-ce + +## Get started + +You should review the default env variables defined in `.env` file. +Use `export` to override these values. + +i.e: +```bash +export PHRASEANET_DOCKER_TAG=latest +export INSTALL_ACCOUNT_EMAIL=foo@bar.com +export INSTALL_ACCOUNT_PASSWORD=$3cr3t! +export PHRASEANET_APP_PORT=8082 +``` + +### Using a env.local (custom .env) + +It may be easier to deal with a local file to manage our env variables. + +You can add your `env.local` at the root of this project and define a command function in your `~/.bashrc`: + +```bash +# ~/.bashrc or ~/.zshrc +function dc() { + if [ -f env.local ]; then + env $(cat env.local | grep -v '#' | tr '\n' ' ') docker-compose $@ + else + docker-compose $@ + fi +} +``` + +### Running the application + +If you are not interested in the development of Phraseanet, you can ignore everything in `.env` after the `DEV Purpose` part. + + docker-compose -f docker-compose.yml up -d + +Why this option `-f docker-compose.yml`? +The development and integration concerns are separated using a `docker-compose.override.yml`. By default, `docker-compose` will include this files if it exists. +If you don't work on phraseanet development, avoiding this `-f docker-compose.yml` parameters will throw errors. So you have to add this options on every `docker-compose` commands to avoid this inclusion. + +> You can also delete the `docker-compose.override.yml` to get free from this behavior. + +#### Running workers + +```bash +docker-compose -f docker-compose.yml run --rm worker +``` + +Where `` can be: +- `bin/console task-manager:scheduler:run` (default) +- `bin/console worker:execute -m 2` +- ... + +The default parameters allow you to reach the app with : `http://localhost:8082` + +### Use Phraseanet images from docker hub + +Retrieve on Docker hub prebuilt images for Phraseanet. + +https://hub.docker.com/r/alchemyfr/phraseanet-fpm + +https://hub.docker.com/r/alchemyfr/phraseanet-worker + +https://hub.docker.com/r/alchemyfr/phraseanet-nginx + +To use them and not build the images locally, we advise to override the properties in file: env.local + +```bash +# Registry from where you pull Docker images +PHRASEANET_DOCKER_REGISTRY=alchemyfr +# Tag of the Docker images +PHRASEANET_DOCKER_TAG= +``` + +## Development mode + +The development mode uses the `docker-compose-override.yml` file. + +You can run it with: + + docker-compose up -d + +The environment is not ready yet: you have to fetch all dependencies. + +This can be made easily from the builder container: + + docker-compose run --rm -u app builder make install install_composer_dev + +> Please note that the phraseanet image does not contain nor `composer` neither `node` tools. This allow the final image to be slim. +> If you need to use dev tools, ensure you are running the `builder` image! + +### Developer shell + +You can also obtain a shell access in builder container: + +```bash +docker-compose run --rm builder /bin/bash +# or +docker-compose run --rm builder /bin/zsh +``` + +In this container you will have the same libraries (PHP, Node, composer, ...) that are used to build images. +Also you have utils for development like telnet, ping, ssh, git, ... +Your $HOME/.ssh directory is also mounted to builder's home with your ssh agent. + +### Using Xdebug + +Xdebug is enabled by default with the `docker-compose.override.yml` +You can disable it by setting: + +```bash +export XDEBUG_ENABLED=0 +``` + +Remote host is fixed because of the subnet network from compose. + +You need to configure file mapping in your IDE. +For PhpStorm, you can follow this example: + +![PhpStorm mapping](https://i.ibb.co/GMb43Cv/image.png) + +> Configure the `Absolute path on the server` to `/var/alchemy/Phraseanet` at the project root path (i.e. `~/projects/Phraseanet`). + +#### Xdebug on MacOS + +You have to set the following env: +```bash +XDEBUG_REMOTE_HOST=host.docker.internal +``` + +> Don't forget to recreate your container (`docker-compose up -d phraseanet`) + +### Build images with plugins + +Plugins can be installed during build if you set the `PHRASEANET_PLUGINS` env var as follows: + +```bash +PHRASEANET_PLUGINS="git@github.com:alchemy-fr/Phraseanet-plugin-webgallery.git" + +# You can optionally precise the branch to install +# If not precised, the main branch will be pulled +PHRASEANET_PLUGINS="git@github.com:alchemy-fr/Phraseanet-plugin-webgallery.git(custom-branch)" + +# Plugins are separated by spaces +PHRASEANET_PLUGINS="git@github.com:foo/bar.git(branch-1) git@github.com:baz/42.git" +``` + +If you install private plugins, make sure you export your SSH private key content in order to allow docker build to access the GIT repository: +```bash +export PHRASEANET_SSH_PRIVATE_KEY=$(cat ~/.ssh/id_rsa) +# or if your private key is protected by a passphrase: +export PHRASEANET_SSH_PRIVATE_KEY=$(openssl rsa -in ~/.ssh/id_rsa -out /tmp/id_rsa_raw && cat /tmp/id_rsa_raw && rm /tmp/id_rsa_raw) +``` + +# Try Phraseanet with Pre installed VM (deprecated) You can also download a testing pre installed Virtual Machine in OVA format here : https://www.phraseanet.com/download/ -# Development : +# With Vagrant (deprecated) + +## Development : For development purpose Phraseanet is shipped with ready to use development environments using vagrant. You can easily choose betweeen a complete build or a prebuild box, with a specific PHP version. @@ -49,28 +214,5 @@ Ex: - vagrant up --provision //// 5.6 ///// 1 >> Build the alchemy/phraseanet-php-5.6 box -For development with Phraseanet API see https://docs.phraseanet.com/4.0/en/Devel/index.html -# Docker build - -WARNING : still in a work-in-progress status and can be used only for test purposes. - -The docker distribution come with 3 differents containers : -* An nginx that act as the front http server. -* The php-fpm who serves the php files through nginx. -* The worker who execute Phraseanet scheduler. - -## How to build - -The three images can be built respectively with these commands : - - # nginx server - docker build --target phraseanet-nginx -t local/phraseanet-nginx . - - # php-fpm application - docker build --target phraseanet-fpm -t local/phraseanet-fpm . - - # worker - docker build --target phraseanet-worker -t local/phraseanet-worker . - diff --git a/bin/console b/bin/console index 552cb672d0..c49fc89052 100755 --- a/bin/console +++ b/bin/console @@ -23,12 +23,19 @@ use Alchemy\Phrasea\Command\SearchEngine\IndexPopulateCommand; use Alchemy\Phrasea\Command\Thesaurus\FindConceptsCommand; use Alchemy\Phrasea\Core\Version; use Alchemy\Phrasea\Command\CreateCollection; +use Alchemy\Phrasea\Command\Collection\UnPublishCollectionCommand; +use Alchemy\Phrasea\Command\Collection\PublishCollectionCommand; +use Alchemy\Phrasea\Command\Collection\ListCollectionCommand; use Alchemy\Phrasea\Command\Databox\CreateDataboxCommand; +use Alchemy\Phrasea\Command\Databox\UnMountDataboxCommand; +use Alchemy\Phrasea\Command\Databox\MountDataboxCommand; +use Alchemy\Phrasea\Command\Databox\ListDataboxCommand; use Alchemy\Phrasea\Command\MailTest; use Alchemy\Phrasea\Command\Compile\Configuration; use Alchemy\Phrasea\Command\RecordAdd; use Alchemy\Phrasea\Command\RescanTechnicalDatas; use Alchemy\Phrasea\CLI; +use Alchemy\Phrasea\Command\User\UserApplicationsCommand; use Alchemy\Phrasea\Command\Plugin\AddPlugin; use Alchemy\Phrasea\Command\Plugin\RemovePlugin; use Alchemy\Phrasea\Command\CheckConfig; @@ -46,7 +53,11 @@ use Alchemy\Phrasea\Command\Task\TaskRun; use Alchemy\Phrasea\Command\Task\TaskStart; use Alchemy\Phrasea\Command\Task\TaskState; use Alchemy\Phrasea\Command\Task\TaskStop; +use Alchemy\Phrasea\Command\User\UserCreateCommand; +use Alchemy\Phrasea\Command\User\UserPasswordCommand; +use Alchemy\Phrasea\Command\User\UserListCommand; use Alchemy\Phrasea\Command\UpgradeDBDatas; +use Alchemy\Phrasea\Command\ApplyRightsCommand; require_once __DIR__ . '/../lib/autoload.php'; @@ -83,6 +94,7 @@ $cli->command(new \module_console_aboutLicense('about:license')); $cli->command(new CheckConfig('check:config')); $cli->command(new UpgradeDBDatas('system:upgrade-datas')); +$cli->command(new ApplyRightsCommand('system:apply-rights')); $cli->command(new \module_console_systemMailCheck('system:mail-check')); $cli->command(new \module_console_systemBackupDB('system:backup-db')); @@ -107,8 +119,25 @@ $cli->command(new \module_console_fieldsDelete('fields:delete')); $cli->command(new \module_console_fieldsRename('fields:rename')); $cli->command(new \module_console_fieldsMerge('fields:merge')); +$cli->command(new UserApplicationsCommand('user:applications')); + $cli->command(new CreateCollection('collection:create')); +$cli->command(new UnPublishCollectionCommand('collection:unpublish')); +$cli->command(new PublishCollectionCommand('collection:publish')); +$cli->command(new ListCollectionCommand('collection:list')); + +$cli->command(new ListDataboxCommand('databox:list')); $cli->command(new CreateDataboxCommand('databox:create')); +$cli->command(new UnMountDataboxCommand('databox:unmount')); +$cli->command(new MountDataboxCommand('databox:mount')); + + +$cli->command(new UserCreateCommand('user:create')); + +$cli->command(new UserPasswordCommand('user:password')); + +$cli->command(new UserListCommand('user:list')); + $cli->command(new RecordAdd('records:add')); $cli->command(new RescanTechnicalDatas('records:rescan-technical-datas')); @@ -133,9 +162,9 @@ $cli->command(new QueryParseCommand()); $cli->command(new QuerySampleCommand()); $cli->command(new FindConceptsCommand()); -$cli->command($cli['alchemy_worker.commands.run_dispatcher_command']); -$cli->command($cli['alchemy_worker.commands.run_worker_command']); -$cli->command($cli['alchemy_worker.commands.show_configuration']); +//$cli->command($cli['alchemy_worker.commands.run_dispatcher_command']); +//$cli->command($cli['alchemy_worker.commands.run_worker_command']); +//$cli->command($cli['alchemy_worker.commands.show_configuration']); $cli->loadPlugins(); diff --git a/composer.json b/composer.json index 47635b0e47..0fd22effb0 100644 --- a/composer.json +++ b/composer.json @@ -18,6 +18,18 @@ } } }, + { + "type": "package", + "package": { + "name": "exiftool/exiftool", + "version": "11", + "source": { + "url": "https://github.com/exiftool/exiftool.git", + "type": "git", + "reference": "11.84" + } + } + }, { "type": "vcs", "url": "https://github.com/alchemy-fr/tcpdf-clone" @@ -84,7 +96,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.6", "monolog/monolog": "~1.3", "mrclay/minify": "~2.1.6", "neutron/process-manager": "2.0.x-dev@dev", @@ -93,9 +105,9 @@ "neutron/silex-imagine-provider": "~0.1.0", "neutron/temporary-filesystem": "~2.1", "pagerfanta/pagerfanta": "^1.0", - "php-ffmpeg/php-ffmpeg": "~0.5.0", + "php-ffmpeg/php-ffmpeg": "^v0.15", "php-xpdf/php-xpdf": "~0.2.1", - "phpexiftool/exiftool": "10.10", + "exiftool/exiftool": "^11", "ramsey/uuid": "^3.0", "roave/security-advisories": "dev-master", "silex/silex": "^1.3.0", diff --git a/composer.lock b/composer.lock index eb4523a2a5..112a4ecd0f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f3b1fc0a30bf14b05e57ce673550d9c0", + "content-hash": "008ff0b5d3d13b4f0ce5d34348ded83a", "packages": [ { "name": "alchemy-fr/tcpdf-clone", @@ -131,16 +131,16 @@ }, { "name": "alchemy/embed-bundle", - "version": "2.0.7", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/alchemy-fr/embed-bundle.git", - "reference": "c585ccf18e53a9a6f2b696ddbbc39521732dfdde" + "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/c585ccf18e53a9a6f2b696ddbbc39521732dfdde", - "reference": "c585ccf18e53a9a6f2b696ddbbc39521732dfdde", + "url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/8cdb9612a9e3edd998b68f0803eacca8e0f50775", + "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775", "shasum": "" }, "require-dev": { @@ -178,10 +178,10 @@ ], "description": "Embed resources bundle", "support": { - "source": "https://github.com/alchemy-fr/embed-bundle/tree/2.0.7", + "source": "https://github.com/alchemy-fr/embed-bundle/tree/2.0.9", "issues": "https://github.com/alchemy-fr/embed-bundle/issues" }, - "time": "2019-09-02T12:28:19+00:00" + "time": "2020-02-04T14:53:00+00:00" }, { "name": "alchemy/geonames-api-consumer", @@ -275,16 +275,16 @@ }, { "name": "alchemy/mediavorus", - "version": "0.4.9", + "version": "0.4.10", "source": { "type": "git", "url": "https://github.com/alchemy-fr/MediaVorus.git", - "reference": "1a96dc4142ff8474c11285cab9eab11df9683255" + "reference": "3e235eb1efb528aea2973c946f4bf47630b98985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/MediaVorus/zipball/1a96dc4142ff8474c11285cab9eab11df9683255", - "reference": "1a96dc4142ff8474c11285cab9eab11df9683255", + "url": "https://api.github.com/repos/alchemy-fr/MediaVorus/zipball/3e235eb1efb528aea2973c946f4bf47630b98985", + "reference": "3e235eb1efb528aea2973c946f4bf47630b98985", "shasum": "" }, "require": { @@ -300,6 +300,7 @@ }, "require-dev": { "jms/serializer": "~0.12.0", + "phpunit/phpunit": "^4.0|^5.0", "silex/silex": "~1.0", "symfony/yaml": "~2.0" }, @@ -333,7 +334,7 @@ "keywords": [ "metadata" ], - "time": "2019-01-22T11:23:34+00:00" + "time": "2020-02-18T13:37:45+00:00" }, { "name": "alchemy/oauth2php", @@ -383,30 +384,27 @@ }, { "name": "alchemy/phpexiftool", - "version": "0.7.2", + "version": "0.7.3", "source": { "type": "git", "url": "https://github.com/alchemy-fr/PHPExiftool.git", - "reference": "ba1cb51eceb6562d7996023478977a8739de188b" + "reference": "0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/PHPExiftool/zipball/ba1cb51eceb6562d7996023478977a8739de188b", - "reference": "ba1cb51eceb6562d7996023478977a8739de188b", + "url": "https://api.github.com/repos/alchemy-fr/PHPExiftool/zipball/0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2", + "reference": "0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2", "shasum": "" }, "require": { "doctrine/cache": "^1.0", "doctrine/collections": "^1.0", + "exiftool/exiftool": "^11", "monolog/monolog": "^1.3", "php": ">=5.5.9", - "phpexiftool/exiftool": "10.10", "symfony/console": "^2.1|^3.0", "symfony/process": "^2.1|^3.0" }, - "replace": { - "phpexiftool/phpexiftool": "<0.5.0" - }, "require-dev": { "jms/serializer": "~0.10|^1.0", "phpunit/phpunit": "^4.0|^5.0", @@ -452,7 +450,7 @@ "exiftool", "metadata" ], - "time": "2019-02-13T13:06:43+00:00" + "time": "2020-01-17T14:28:33+00:00" }, { "name": "alchemy/queue-bundle", @@ -2105,6 +2103,16 @@ ], "time": "2012-05-30T15:01:08+00:00" }, + { + "name": "exiftool/exiftool", + "version": "11", + "source": { + "type": "git", + "url": "https://github.com/exiftool/exiftool.git", + "reference": "11.84" + }, + "type": "library" + }, { "name": "facebook/graph-sdk", "version": "5.6.1", @@ -2853,6 +2861,7 @@ } ], "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "abandoned": true, "time": "2015-05-20T03:37:09+00:00" }, { @@ -2903,6 +2912,7 @@ "Guzzle", "stream" ], + "abandoned": true, "time": "2014-10-12T19:18:40+00:00" }, { @@ -4321,16 +4331,16 @@ }, { "name": "media-alchemyst/media-alchemyst", - "version": "0.5.2", + "version": "0.5.6", "source": { "type": "git", "url": "https://github.com/alchemy-fr/Media-Alchemyst.git", - "reference": "5d2fe6dd95215804202ecf0466fd9cfaeedd0140" + "reference": "2b9f7697997f7863bbc3d08344c559a1cba519c2" }, "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/2b9f7697997f7863bbc3d08344c559a1cba519c2", + "reference": "2b9f7697997f7863bbc3d08344c559a1cba519c2", "shasum": "" }, "require": { @@ -4340,9 +4350,9 @@ "monolog/monolog": "~1.0", "neutron/temporary-filesystem": "^2.1.1", "php": ">=5.3.3", - "php-ffmpeg/php-ffmpeg": ">=0.4.2,<0.6", + "php-ffmpeg/php-ffmpeg": "^v0.15", "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", @@ -4391,7 +4401,7 @@ "video", "video processing" ], - "time": "2019-01-25T12:09:11+00:00" + "time": "2020-04-01T08:51:55+00:00" }, { "name": "monolog/monolog", @@ -5137,29 +5147,29 @@ }, { "name": "php-ffmpeg/php-ffmpeg", - "version": "0.5.1", + "version": "v0.15", "source": { "type": "git", "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", - "reference": "c8949fe3df89edd7692368cc110a51a27971f28a" + "reference": "984dbd046b6d8c285f9e7419fc7645f197513bfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/c8949fe3df89edd7692368cc110a51a27971f28a", - "reference": "c8949fe3df89edd7692368cc110a51a27971f28a", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/984dbd046b6d8c285f9e7419fc7645f197513bfa", + "reference": "984dbd046b6d8c285f9e7419fc7645f197513bfa", "shasum": "" }, "require": { - "alchemy/binary-driver": "~1.5", - "doctrine/cache": "~1.0", - "evenement/evenement": "~1.0", - "neutron/temporary-filesystem": "~2.1, >=2.1.1", - "php": ">=5.3.3" + "alchemy/binary-driver": "^1.5 || ~2.0.0 || ^5.0", + "doctrine/cache": "^1.0", + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "neutron/temporary-filesystem": "^2.1.1", + "php": "^5.3.9 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~3.7", "sami/sami": "~1.0", - "silex/silex": "~1.0" + "silex/silex": "~1.0", + "symfony/phpunit-bridge": "^5.0.4" }, "suggest": { "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" @@ -5167,7 +5177,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "0.7-dev" } }, "autoload": { @@ -5189,6 +5199,21 @@ "name": "Phraseanet Team", "email": "info@alchemy.fr", "homepage": "http://www.phraseanet.com/" + }, + { + "name": "Patrik Karisch", + "email": "patrik@karisch.guru", + "homepage": "http://www.karisch.guru" + }, + { + "name": "Romain Biard", + "email": "romain.biard@gmail.com", + "homepage": "https://www.strime.io/" + }, + { + "name": "Jens Hausdorf", + "email": "hello@jens-hausdorf.de", + "homepage": "https://jens-hausdorf.de" } ], "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg", @@ -5202,7 +5227,7 @@ "video", "video processing" ], - "time": "2014-08-26T08:46:56+00:00" + "time": "2020-03-23T09:32:09+00:00" }, { "name": "php-mp4box/php-mp4box", @@ -5257,16 +5282,16 @@ }, { "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": { @@ -5303,7 +5328,7 @@ "keywords": [ "unoconv" ], - "time": "2013-06-25T10:09:59+00:00" + "time": "2019-09-16T09:54:30+00:00" }, { "name": "php-xpdf/php-xpdf", @@ -5405,39 +5430,6 @@ ], "time": "2015-05-17T12:39:23+00:00" }, - { - "name": "phpexiftool/exiftool", - "version": "10.10", - "source": { - "type": "git", - "url": "https://github.com/alchemy-fr/exiftool.git", - "reference": "0833cab894c890353192a83011428525a318bedf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/alchemy-fr/exiftool/zipball/0833cab894c890353192a83011428525a318bedf", - "reference": "0833cab894c890353192a83011428525a318bedf", - "shasum": "" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Perl Licensing" - ], - "authors": [ - { - "name": "Phil Harvey", - "email": "phil@owl.phy.queensu.ca", - "homepage": "http://www.sno.phy.queensu.ca/~phil/exiftool/" - } - ], - "description": "Exiftool is a library for reading, writing and editing meta information. This package is not PHP, but required for the main PHP driver : PHP Exiftool", - "keywords": [ - "exiftool", - "metadatas" - ], - "time": "2016-01-25T11:10:14+00:00" - }, { "name": "phpoption/phpoption", "version": "1.5.0", @@ -5902,6 +5894,12 @@ "url": "https://github.com/Roave/SecurityAdvisories.git", "reference": "0698207bf8a9bed212fdde2d8c7cdc77085660c4" }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0698207bf8a9bed212fdde2d8c7cdc77085660c4", + "reference": "0698207bf8a9bed212fdde2d8c7cdc77085660c4", + "shasum": "" + }, "conflict": { "adodb/adodb-php": "<5.20.6", "amphp/artax": ">=2,<2.0.4|>0.7.1,<1.0.4", @@ -6186,7 +6184,7 @@ ], "description": "A WebProfiler for Silex", "homepage": "http://silex.sensiolabs.org/", - "abandoned": true, + "abandoned": "symfony/web-profiler-bundle", "time": "2016-01-10T11:39:13+00:00" }, { @@ -6436,6 +6434,7 @@ "profiler", "silex" ], + "abandoned": true, "time": "2016-10-26T11:08:02+00:00" }, { @@ -6478,6 +6477,7 @@ "plugin", "silex" ], + "abandoned": true, "time": "2015-11-11T07:16:28+00:00" }, { @@ -7726,6 +7726,7 @@ "code", "zf2" ], + "abandoned": "laminas/laminas-code", "time": "2016-04-20T17:26:42+00:00" }, { @@ -7780,12 +7781,13 @@ "events", "zf2" ], + "abandoned": "laminas/laminas-eventmanager", "time": "2016-02-18T20:53:00+00:00" } ], "packages-dev": [ { - "name": "mikey179/vfsStream", + "name": "mikey179/vfsstream", "version": "v1.6.4", "source": { "type": "git", @@ -7830,76 +7832,6 @@ "homepage": "http://vfs.bovigo.org/", "time": "2016-07-18T14:02:57+00:00" }, - { - "name": "php-amqplib/php-amqplib", - "version": "v2.6.3", - "source": { - "type": "git", - "url": "https://github.com/php-amqplib/php-amqplib.git", - "reference": "fa2f0d4410a11008cb36b379177291be7ee9e4f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/fa2f0d4410a11008cb36b379177291be7ee9e4f6", - "reference": "fa2f0d4410a11008cb36b379177291be7ee9e4f6", - "shasum": "" - }, - "require": { - "ext-bcmath": "*", - "ext-mbstring": "*", - "php": ">=5.3.0" - }, - "replace": { - "videlalvaro/php-amqplib": "self.version" - }, - "require-dev": { - "phpunit/phpunit": "^4.8", - "scrutinizer/ocular": "^1.1", - "squizlabs/php_codesniffer": "^2.5" - }, - "suggest": { - "ext-sockets": "Use AMQPSocketConnection" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "PhpAmqpLib\\": "PhpAmqpLib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1" - ], - "authors": [ - { - "name": "Alvaro Videla", - "role": "Original Maintainer" - }, - { - "name": "John Kelly", - "email": "johnmkelly86@gmail.com", - "role": "Maintainer" - }, - { - "name": "Raúl Araya", - "email": "nubeiro@gmail.com", - "role": "Maintainer" - } - ], - "description": "Formerly videlalvaro/php-amqplib. This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.", - "homepage": "https://github.com/php-amqplib/php-amqplib/", - "keywords": [ - "message", - "queue", - "rabbitmq" - ], - "time": "2016-04-11T14:30:01+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "1.0", @@ -8046,6 +7978,39 @@ ], "time": "2016-11-25T06:54:22+00:00" }, + { + "name": "phpexiftool/exiftool", + "version": "10.10", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/exiftool.git", + "reference": "0833cab894c890353192a83011428525a318bedf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/exiftool/zipball/0833cab894c890353192a83011428525a318bedf", + "reference": "0833cab894c890353192a83011428525a318bedf", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Perl Licensing" + ], + "authors": [ + { + "name": "Phil Harvey", + "email": "phil@owl.phy.queensu.ca", + "homepage": "http://www.sno.phy.queensu.ca/~phil/exiftool/" + } + ], + "description": "Exiftool is a library for reading, writing and editing meta information. This package is not PHP, but required for the main PHP driver : PHP Exiftool", + "keywords": [ + "exiftool", + "metadatas" + ], + "time": "2016-01-25T11:10:14+00:00" + }, { "name": "phpspec/prophecy", "version": "v1.6.2", diff --git a/config/configuration.sample.yml b/config/configuration.sample.yml index fbaa368ed9..a912e61876 100644 --- a/config/configuration.sample.yml +++ b/config/configuration.sample.yml @@ -22,13 +22,54 @@ main: path: '/tmp/db.sqlite' charset: UTF8 cache: - type: MemcacheCache + type: redis options: host: localhost - port: 11211 + port: 6379 search-engine: - type: phrasea - options: [] + type: elasticsearch + options: + host: elasticsearch + port: 9200 + index: '' + shards: 3 + replicas: 0 + minScore: 2 + highlight: true + populate_order: RECORD_ID + populate_direction: DESC + activeTab: '' + facets: + _base: + limit: 10 + _collection: + limit: 10 + _doctype: + limit: 10 + _camera_model: + limit: 0 + _iso: + limit: 0 + _aperture: + limit: 0 + _shutterspeed: + limit: 0 + _flashfired: + limit: 0 + _framerate: + limit: 0 + _audiosamplerate: + limit: 0 + _videocodec: + limit: 0 + _audiocodec: + limit: 0 + _orientation: + limit: 0 + _colorspace: + limit: 0 + _mimetype: + limit: 0 task-manager: status: started enabled: true @@ -62,12 +103,7 @@ main: mp4box_timeout: 60 swftools_timeout: 60 unoconv_timeout: 60 - task-manager: - status: started - listener: - protocol: tcp - host: 127.0.0.1 - port: 6700 + exiftool_timeout: 60 storage: subdefs: null cache: null @@ -75,20 +111,7 @@ main: download: null lazaret: null caption: null - bridge: - youtube: - enabled: false - client_id: null - client_secret: null - developer_key: null - flickr: - enabled: false - client_id: null - client_secret: null - dailymotion: - enabled: false - client_id: null - client_secret: null + worker_tmp_files: null border-manager: enabled: true extension-mapping: @@ -98,12 +121,17 @@ border-manager: - type: Checker\Sha256 enabled: true + collections: [] + compare-ignore-collections: [] - type: Checker\UUID enabled: true + collections: [] + compare-ignore-collections: [] - type: Checker\Colorspace enabled: false + collections: [] options: colorspaces: [cmyk, grayscale, rgb] media_types: [Image] @@ -123,6 +151,8 @@ border-manager: enabled: false options: sensitive: true + collections: [] + compare-ignore-collections: [] - type: Checker\MediaType enabled: false @@ -244,6 +274,14 @@ embed_bundle: document: player: flexpaper enable_pdfjs: true +video-editor: + ChapterVttFieldName: VideoTextTrackChapters + seekBackwardStep: 500 # in ms + seekForwardStep: 500 # in ms + playbackRates: + - 1 + - '1.5' + - 3 geocoding-providers: - map-provider: mapboxWebGL diff --git a/docker-compose.override.yml b/docker-compose.override.yml new file mode 100644 index 0000000000..e058d2886a --- /dev/null +++ b/docker-compose.override.yml @@ -0,0 +1,103 @@ +version: "3.4" +services: + phpmyadmin: + image: phpmyadmin/phpmyadmin + restart: on-failure + ports: + - ${PHRASEANET_PHPMYADMIN_PORT}:80 + depends_on: + - db + + gateway: + volumes: + - ../:/var/alchemy + - .:/var/alchemy/Phraseanet + - ./docker/nginx/root/entrypoint.sh:/entrypoint.sh + - ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw + - ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw + - ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw + - ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw + + builder: + build: + context: . + target: builder + args: + - SSH_PRIVATE_KEY=${PHRASEANET_SSH_PRIVATE_KEY} + - PHRASEANET_PLUGINS=${PHRASEANET_PLUGINS} + stdin_open: true + tty: true + volumes: + - ../:/var/alchemy + - .:/var/alchemy/Phraseanet + - ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw + - ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw + - ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw + - ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw + - ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw + - ${SSH_AUTH_SOCK}:/ssh-auth-sock + - ${HOME}/.ssh:/home/app/.ssh + - dev_vol:/home/app + environment: + - PHRASEANET_PROJECT_NAME + + phraseanet: + environment: + - XDEBUG_ENABLED + - XDEBUG_CONFIG=remote_host=${XDEBUG_REMOTE_HOST} idekey=${IDE_KEY} remote_enable=1 profiler_enable=${XDEBUG_PROFILER_ENABLED} profiler_output_dir=/var/alchemy/Phraseanet/cache/profiler + - PHP_IDE_CONFIG + volumes: + - ../:/var/alchemy + - .:/var/alchemy/Phraseanet + - ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw + - ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw + - ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw + - ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw + - ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw + - ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw + + worker: + volumes: + - ../:/var/alchemy + - .:/var/alchemy/Phraseanet + - ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw + - ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw + - ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw + - ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw + - ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw + - ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw + + rabbitmq: + ports: + - ${RABBITMQ_MANAGEMENT_PORT}:15672 + + db: + volumes: + - ${PHRASEANET_DB_DIR}:/var/lib/mysql:rw + + mailhog: + image: mailhog/mailhog + ports: + - 1025:1025 + - 8025:8025 + + elasticsearch: + ports: + - 9200:9200 + volumes: + - ${PHRASEANET_ELASTICSEARCH_DIR}:/usr/share/elasticsearch/data:rw + + kibana: + image: kibana:4.6.6 + ports: + - 5601:5601 + +networks: + default: + ipam: + config: + - subnet: $PHRASEANET_SUBNET_IPS + +volumes: + dev_vol: + driver: local diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..3eee64c36a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,143 @@ +version: "3.4" + +services: + gateway: + build: + context: . + target: phraseanet-nginx + args: + - SSH_PRIVATE_KEY=${PHRASEANET_SSH_PRIVATE_KEY} + - PHRASEANET_PLUGINS=${PHRASEANET_PLUGINS} + image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-nginx:$PHRASEANET_DOCKER_TAG + restart: on-failure + volumes: + - data_vol:/var/alchemy/Phraseanet/datas:rw + - thumbnails_vol:/var/alchemy/Phraseanet/www/thumbnails:rw + - custom_vol:/var/alchemy/Phraseanet/www/custom:rw + depends_on: + - phraseanet + environment: + - MAX_BODY_SIZE + ports: + - ${PHRASEANET_APP_PORT}:80 + + phraseanet: + build: + context: . + target: phraseanet-fpm + args: + - SSH_PRIVATE_KEY=${PHRASEANET_SSH_PRIVATE_KEY} + - PHRASEANET_PLUGINS=${PHRASEANET_PLUGINS} + image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-fpm:$PHRASEANET_DOCKER_TAG + restart: on-failure + depends_on: + - db + - redis + - rabbitmq + - elasticsearch + environment: + - PHRASEANET_PROJECT_NAME + - MAX_BODY_SIZE + - MAX_INPUT_VARS + - OPCACHE_ENABLED + - SESSION_CACHE_LIMITER + - PHP_LOG_LEVEL + - INSTALL_ACCOUNT_EMAIL + - INSTALL_ACCOUNT_PASSWORD + - INSTALL_DB_HOST + - INSTALL_DB_PORT + - INSTALL_DB_USER + - INSTALL_DB_PASSWORD + - INSTALL_DB_TEMPLATE + - INSTALL_APPBOX + - INSTALL_DATABOX + - INSTALL_SERVER_NAME + - INSTALL_RABBITMQ_USER=$RABBITMQ_DEFAULT_USER + - INSTALL_RABBITMQ_PASSWORD=$RABBITMQ_DEFAULT_PASS + volumes: + - config_vol:/var/alchemy/Phraseanet/config:rw + - data_vol:/var/alchemy/Phraseanet/datas:rw + - tmp_vol:/var/alchemy/Phraseanet/tmp:rw + - logs_vol:/var/alchemy/Phraseanet/logs:rw + - thumbnails_vol:/var/alchemy/Phraseanet/www/thumbnails:rw + - custom_vol:/var/alchemy/Phraseanet/www/custom:rw + - cache_vol:/var/alchemy/Phraseanet/cache:rw + + worker: + build: + context: . + target: phraseanet-worker + args: + - SSH_PRIVATE_KEY=${PHRASEANET_SSH_PRIVATE_KEY} + - PHRASEANET_PLUGINS=${PHRASEANET_PLUGINS} + image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-worker:$PHRASEANET_DOCKER_TAG + restart: on-failure + depends_on: + - db + - redis + - rabbitmq + - elasticsearch + environment: + - PHRASEANET_PROJECT_NAME + - MAX_BODY_SIZE + - MAX_INPUT_VARS + - OPCACHE_ENABLED + - SESSION_CACHE_LIMITER + - PHP_LOG_LEVEL + volumes: + - config_vol:/var/alchemy/Phraseanet/config:rw + - data_vol:/var/alchemy/Phraseanet/datas:rw + - tmp_vol:/var/alchemy/Phraseanet/tmp:rw + - logs_vol:/var/alchemy/Phraseanet/logs:rw + - thumbnails_vol:/var/alchemy/Phraseanet/www/thumbnails:rw + - custom_vol:/var/alchemy/Phraseanet/www/custom:rw + - cache_vol:/var/alchemy/Phraseanet/cache:rw + + db: + image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-db:$PHRASEANET_DOCKER_TAG + build: ./docker/db + restart: on-failure + environment: + - MYSQL_ROOT_PASSWORD + - MYSQL_MAX_ALLOWED_PACKET + volumes: + - db_vol:/var/lib/mysql + + rabbitmq: + image: rabbitmq:3-management + restart: on-failure + environment: + - RABBITMQ_DEFAULT_USER + - RABBITMQ_DEFAULT_PASS + + redis: + image: redis + restart: on-failure + + elasticsearch: + image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-elasticsearch:$PHRASEANET_DOCKER_TAG + build: ./docker/elasticsearch + restart: on-failure + volumes: + - elasticsearch_vol:/usr/share/elasticsearch/data + +volumes: + config_vol: + driver: local + data_vol: + driver: local + tmp_vol: + driver: local + db_vol: + driver: local + elasticsearch_vol: + driver: local + thumbnails_vol: + driver: local + custom_vol: + driver: local + cache_vol: + driver: local + # to be replacer by stdout/stderr + logs_vol: + driver: local diff --git a/docker/builder/root/bootstrap/.oh-my-zsh/themes/alchemy.zsh-theme b/docker/builder/root/bootstrap/.oh-my-zsh/themes/alchemy.zsh-theme new file mode 100644 index 0000000000..807e8b6ef7 --- /dev/null +++ b/docker/builder/root/bootstrap/.oh-my-zsh/themes/alchemy.zsh-theme @@ -0,0 +1,7 @@ +local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ %s)" +PROMPT='%* %{$fg_bold[green]%}%n%{$fg[grey]%}@%m%{$fg_bold[green]%}%u ${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}' + +ZSH_THEME_GIT_PROMPT_PREFIX="[%{$fg[red]%}" +ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}] %{$fg[yellow]%}✗%{$reset_color%}" +ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%}]" diff --git a/docker/builder/root/bootstrap/.zshrc b/docker/builder/root/bootstrap/.zshrc new file mode 100644 index 0000000000..ae18e5a4ef --- /dev/null +++ b/docker/builder/root/bootstrap/.zshrc @@ -0,0 +1,56 @@ +export LC_ALL=en_US.UTF-8 +export LANG=en_US.UTF-8 + +export ZSH=$HOME/.oh-my-zsh + +ZSH_THEME="alchemy" + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. Case +# sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment the following line to disable bi-weekly auto-update checks. +# DISABLE_AUTO_UPDATE="true" + +# Uncomment the following line to change how often to auto-update (in days). +# export UPDATE_ZSH_DAYS=13 + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*) +# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(git symfony2) + +# User configuration + +source $ZSH/oh-my-zsh.sh + +alias ll='ls -alFh' diff --git a/docker/builder/root/bootstrap/entrypoint.d/ohmyzsh.sh b/docker/builder/root/bootstrap/entrypoint.d/ohmyzsh.sh new file mode 100644 index 0000000000..aded04c7c7 --- /dev/null +++ b/docker/builder/root/bootstrap/entrypoint.d/ohmyzsh.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +if [ ! -d "$HOME/.oh-my-zsh" ]; then + cp -r "/bootstrap/.oh-my-zsh" "$HOME/.oh-my-zsh" +fi diff --git a/docker/builder/root/bootstrap/entrypoint.d/zshrc.sh b/docker/builder/root/bootstrap/entrypoint.d/zshrc.sh new file mode 100644 index 0000000000..71d47ed475 --- /dev/null +++ b/docker/builder/root/bootstrap/entrypoint.d/zshrc.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +ZSH_FILE="$HOME/.zshrc" + +if [ ! -f "$HOME/.zshrc" ]; then + cp "/bootstrap/.zshrc" "$HOME/.zshrc" +fi diff --git a/docker/builder/root/bootstrap/entrypoint.sh b/docker/builder/root/bootstrap/entrypoint.sh new file mode 100755 index 0000000000..c8bff0d1bb --- /dev/null +++ b/docker/builder/root/bootstrap/entrypoint.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -d /bootstrap/entrypoint.d ]; then + for i in /bootstrap/entrypoint.d/*.sh; do + if [ -r $i ]; then + . $i + fi + done + unset i +fi + +if [ ! -t 1 ] ; then + echo "No tty available." + exit 0 +fi + +exec "$@" diff --git a/docker/caching/composer.json b/docker/caching/composer.json new file mode 100644 index 0000000000..46ff98203e --- /dev/null +++ b/docker/caching/composer.json @@ -0,0 +1,154 @@ +{ + "name": "phraseanet/phraseanet", + "description": "Phraseanet", + "license": "GPL-3.0", + "config": { + "bin-dir": "bin/" + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "facebook/php-sdk", + "version": "3.2.3", + "source": { + "url": "https://github.com/facebookarchive/facebook-php-sdk.git", + "type": "git", + "reference": "3.2.3" + } + } + }, + { + "type": "package", + "package": { + "name": "exiftool/exiftool", + "version": "11", + "source": { + "url": "https://github.com/exiftool/exiftool.git", + "type": "git", + "reference": "11.84" + } + } + }, + { + "type": "vcs", + "url": "https://github.com/alchemy-fr/tcpdf-clone" + }, + { + "type": "git", + "url": "https://github.com/romainneutron/ProcessManager.git" + }, + { + "type": "vcs", + "url": "https://github.com/alchemy-fr/imagine" + }, + { + "type": "vcs", + "url": "https://github.com/alchemy-fr/JMSTranslationBundle" + }, + { + "type": "vcs", + "url": "https://github.com/alchemy-fr/embed-bundle.git" + }, + { + "type": "git", + "url": "https://github.com/alchemy-fr/fractal.git" + } + ], + "require": { + "php": ">=5.5.9", + "ext-intl": "*", + "alchemy-fr/tcpdf-clone": "~6.0", + "alchemy/embed-bundle": "^2.0.7", + "alchemy/geonames-api-consumer": "~0.1.0", + "alchemy/mediavorus": "^0.4.4", + "alchemy/oauth2php": "1.1.0", + "alchemy/phlickr": "0.2.9", + "alchemy/phpexiftool": "^0.7.0", + "alchemy/rest-bundle": "^0.0.5", + "alchemy/symfony-cors": "^0.1.0", + "alchemy/task-manager": "2.0.x-dev@dev", + "alchemy/zippy": "^0.3.0", + "beberlei/assert": "^2.3", + "cocur/slugify": "^2.0", + "dailymotion/sdk": "~1.5", + "data-uri/data-uri": "~0.1.0", + "dflydev/doctrine-orm-service-provider": "~1.0", + "doctrine/cache": "1.6.x-dev", + "doctrine/dbal": "^2.4.0", + "doctrine/migrations": "^1.0.0", + "doctrine/orm": "^2.4.0", + "elasticsearch/elasticsearch": "~2.0", + "firebase/php-jwt": "^3.0.0", + "gedmo/doctrine-extensions": "~2.3.0", + "goodby/csv": "^1.3.0", + "google/apiclient": "^2.0", + "guzzle/guzzle": "~3.0", + "hoa/compiler": "~2.0", + "hoa/console": "~2.0", + "hoa/dispatcher": "~0.0", + "hoa/router": "~2.0", + "igorw/get-in": "~1.0", + "imagine/imagine": "0.6.x-dev", + "jms/serializer": "~0.10", + "jms/translation-bundle": "dev-rebase-2015-10-20", + "justinrainbow/json-schema": "2.0.3 as 1.6.1", + "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.5", + "monolog/monolog": "~1.3", + "mrclay/minify": "~2.1.6", + "neutron/process-manager": "2.0.x-dev@dev", + "neutron/recaptcha": "~0.1.0", + "neutron/silex-filesystem-provider": "~1.0", + "neutron/silex-imagine-provider": "~0.1.0", + "neutron/temporary-filesystem": "~2.1", + "pagerfanta/pagerfanta": "^1.0", + "php-ffmpeg/php-ffmpeg": "~0.5.0", + "php-xpdf/php-xpdf": "~0.2.1", + "exiftool/exiftool": "^11", + "ramsey/uuid": "^3.0", + "roave/security-advisories": "dev-master", + "silex/silex": "^1.3.0", + "silex/web-profiler": "~1.0", + "simple-bus/doctrine-orm-bridge": "^4.0", + "simple-bus/jms-serializer-bridge": "^1.0", + "simple-bus/message-bus": "^2.1", + "simple-bus/serialization": "^2.0", + "sorien/silex-dbal-profiler": "^1.1", + "sorien/silex-pimple-dumper": "^1.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/symfony": "~2.7.10|~2.8.3", + "themattharris/tmhoauth": "~0.7", + "twig/extensions": "^1.2.0", + "twig/twig": "~1.14, >=1.14.2", + "vierbergenlars/php-semver": "~2.1", + "webmozart/json": "^1.1", + "willdurand/negotiation": "^2.0.0-alpha1", + "zend/gdata": "~1.12.1", + "alchemy/worker-bundle": "^0.1.6", + "alchemy/queue-bundle": "^0.1.5", + "google/recaptcha": "^1.1", + "facebook/graph-sdk": "^5.6", + "box/spout": "^2.7", + "paragonie/random-lib": "^2.0", + "czproject/git-php": "^3.17" + }, + "require-dev": { + "mikey179/vfsstream": "~1.5", + "phpunit/phpunit": "^4.8|^5.0" + }, + "autoload": { + "psr-0": { + "Alchemy\\": "lib", + "": "lib/classes" + } + }, + "include-path": ["vendor/zend/gdata/library"], + "extra": { + "branch-alias": { + "dev-master": "4.1.x-dev" + } + } +} diff --git a/docker/caching/composer.lock b/docker/caching/composer.lock new file mode 100644 index 0000000000..41a8b05beb --- /dev/null +++ b/docker/caching/composer.lock @@ -0,0 +1,8839 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "5a4a0be62b13071a6b06893b7ce08372", + "packages": [ + { + "name": "alchemy-fr/tcpdf-clone", + "version": "6.0.039", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/tcpdf-clone.git", + "reference": "2ba0248a7187f1626df6c128750650416267f0e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/tcpdf-clone/zipball/2ba0248a7187f1626df6c128750650416267f0e7", + "reference": "2ba0248a7187f1626df6c128750650416267f0e7", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "fonts", + "config", + "include", + "tcpdf.php", + "tcpdf_parser.php", + "tcpdf_import.php", + "tcpdf_barcodes_1d.php", + "tcpdf_barcodes_2d.php", + "include/tcpdf_colors.php", + "include/tcpdf_filters.php", + "include/tcpdf_font_data.php", + "include/tcpdf_fonts.php", + "include/tcpdf_images.php", + "include/tcpdf_static.php", + "include/barcodes/datamatrix.php", + "include/barcodes/pdf417.php", + "include/barcodes/qrcode.php" + ] + }, + "license": [ + "LGPLv3" + ], + "authors": [ + { + "name": "Nicola Asuni", + "email": "info@tecnick.com", + "homepage": "http://nicolaasuni.tecnick.com" + } + ], + "description": "TCPDF is a PHP class for generating PDF documents.", + "homepage": "http://www.tcpdf.org/", + "keywords": [ + "PDF", + "PDFD32000-2008", + "barcodes", + "datamatrix", + "pdf417", + "qrcode", + "tcpdf" + ], + "support": { + "source": "https://github.com/alchemy-fr/tcpdf-clone/tree/6.0.039", + "issues": "https://github.com/alchemy-fr/tcpdf-clone/issues" + }, + "time": "2013-10-13T16:11:17+00:00" + }, + { + "name": "alchemy/binary-driver", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/BinaryDriver.git", + "reference": "80c6633890afb71d2417ae851d0ad167d8b00b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/BinaryDriver/zipball/80c6633890afb71d2417ae851d0ad167d8b00b95", + "reference": "80c6633890afb71d2417ae851d0ad167d8b00b95", + "shasum": "" + }, + "require": { + "evenement/evenement": "^2.0|^1.0", + "monolog/monolog": "^1.3", + "php": ">=5.5", + "psr/log": "^1.0", + "symfony/process": "^2.0|^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Alchemy": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + }, + { + "name": "Nicolas Le Goff", + "email": "legoff.n@gmail.com" + } + ], + "description": "A set of tools to build binary drivers", + "keywords": [ + "binary", + "driver" + ], + "time": "2016-03-02T13:49:15+00:00" + }, + { + "name": "alchemy/embed-bundle", + "version": "2.0.9", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/embed-bundle.git", + "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/8cdb9612a9e3edd998b68f0803eacca8e0f50775", + "reference": "8cdb9612a9e3edd998b68f0803eacca8e0f50775", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "^4.7", + "silex/silex": "^1.0.0", + "squizlabs/php_codesniffer": "^2.3", + "symfony/symfony": "~2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Embed\\": "src/Component", + "Alchemy\\EmbedBundle\\": "src/Bundle", + "Alchemy\\EmbedProvider\\": "src/Provider" + } + }, + "autoload-dev": { + "psr-4": { + "Alchemy\\EmbedBundle\\Tests\\": "tests/unit/Bundle" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florian Blouet", + "email": "florian.blouet@gmail.com" + } + ], + "description": "Embed resources bundle", + "support": { + "source": "https://github.com/alchemy-fr/embed-bundle/tree/2.0.9", + "issues": "https://github.com/alchemy-fr/embed-bundle/issues" + }, + "time": "2020-02-04T14:53:00+00:00" + }, + { + "name": "alchemy/geonames-api-consumer", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/GeonamesServer-PHP-Plugin.git", + "reference": "111a38233da7a5503f86e96877e044381698f647" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/GeonamesServer-PHP-Plugin/zipball/111a38233da7a5503f86e96877e044381698f647", + "reference": "111a38233da7a5503f86e96877e044381698f647", + "shasum": "" + }, + "require": { + "guzzle/guzzle": "~3.5", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Alchemy": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A connector to a geonames server", + "keywords": [ + "geonames" + ], + "time": "2014-02-05T15:29:39+00:00" + }, + { + "name": "alchemy/ghostscript", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/Ghostscript-PHP.git", + "reference": "a5d40c29efa4c4e4016a1f83cd5645300ad602d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/Ghostscript-PHP/zipball/a5d40c29efa4c4e4016a1f83cd5645300ad602d7", + "reference": "a5d40c29efa4c4e4016a1f83cd5645300ad602d7", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "sami/sami": "~1.0", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Ghostscript": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "Ghostscript PDF, a library to handle PDF through ghostscript", + "keywords": [ + "ghostscript", + "pdf" + ], + "time": "2013-06-25T09:12:58+00:00" + }, + { + "name": "alchemy/mediavorus", + "version": "0.4.10", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/MediaVorus.git", + "reference": "3e235eb1efb528aea2973c946f4bf47630b98985" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/MediaVorus/zipball/3e235eb1efb528aea2973c946f4bf47630b98985", + "reference": "3e235eb1efb528aea2973c946f4bf47630b98985", + "shasum": "" + }, + "require": { + "alchemy/phpexiftool": "~0.1", + "doctrine/collections": "~1.0", + "monolog/monolog": "~1.0", + "php": ">=5.3.0", + "php-ffmpeg/php-ffmpeg": "~0.3", + "symfony/http-foundation": "~2.0" + }, + "replace": { + "mediavorus/mediavorus": "<=0.4.4" + }, + "require-dev": { + "jms/serializer": "~0.12.0", + "phpunit/phpunit": "^4.0|^5.0", + "silex/silex": "~1.0", + "symfony/yaml": "~2.0" + }, + "suggest": { + "jms/serializer": "To serialize Medias", + "symfony/yaml": "To serialize Medias in Yaml format" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "MediaVorus": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "description": "MediaVorus", + "keywords": [ + "metadata" + ], + "time": "2020-02-18T13:37:45+00:00" + }, + { + "name": "alchemy/oauth2php", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/oauth2-php.git", + "reference": "801510972240555fa182813851efd96659d37a68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/oauth2-php/zipball/801510972240555fa182813851efd96659d37a68", + "reference": "801510972240555fa182813851efd96659d37a68", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "time": "2019-01-17T14:34:10+00:00" + }, + { + "name": "alchemy/phlickr", + "version": "0.2.9", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/Phlickr.git", + "reference": "f9af93e27e9235db43e61ce2f9588d8ce9859b68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/Phlickr/zipball/f9af93e27e9235db43e61ce2f9588d8ce9859b68", + "reference": "f9af93e27e9235db43e61ce2f9588d8ce9859b68", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Phlickr_": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "time": "2014-12-15T14:27:57+00:00" + }, + { + "name": "alchemy/phpexiftool", + "version": "0.7.3", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHPExiftool.git", + "reference": "0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHPExiftool/zipball/0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2", + "reference": "0b22e7d7cc40f2a6b9c85c0cfbd968a39a31dab2", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/collections": "^1.0", + "exiftool/exiftool": "^11", + "monolog/monolog": "^1.3", + "php": ">=5.5.9", + "symfony/console": "^2.1|^3.0", + "symfony/process": "^2.1|^3.0" + }, + "require-dev": { + "jms/serializer": "~0.10|^1.0", + "phpunit/phpunit": "^4.0|^5.0", + "silex/silex": "~1.0", + "symfony/css-selector": "^2.1|^3.0", + "symfony/dom-crawler": "^2.1|^3.0", + "symfony/finder": "^2.1|^3.0", + "symfony/yaml": "^2.1|^3.0" + }, + "suggest": { + "jms/serializer": "To serialize tags", + "symfony/yaml": "To serialize tags in Yaml format" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "PHPExiftool\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Benoit Burnichon", + "email": "bburnichon@alchemy.fr", + "role": "Lead Developer" + } + ], + "description": "Exiftool driver for PHP", + "keywords": [ + "exiftool", + "metadata" + ], + "time": "2020-01-17T14:28:33+00:00" + }, + { + "name": "alchemy/queue-bundle", + "version": "0.1.5", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/queue-bundle.git", + "reference": "dcc64ac5e888250cf29a80570df66cdb5dc3857f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/queue-bundle/zipball/dcc64ac5e888250cf29a80570df66cdb5dc3857f", + "reference": "dcc64ac5e888250cf29a80570df66cdb5dc3857f", + "shasum": "" + }, + "require": { + "alchemy/queue-component": "^0.1.4", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4|^5", + "silex/silex": "^1.3.0", + "symfony/symfony": "^2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\QueueBundle\\": "src/QueueBundle", + "Alchemy\\QueueProvider\\": "src/QueueProvider" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Symfony bundle for alchemy/queue-component", + "time": "2016-10-04T14:19:39+00:00" + }, + { + "name": "alchemy/queue-component", + "version": "0.1.5", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/queue-component.git", + "reference": "5506445a5770e23075e78e02510752106ee284b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/queue-component/zipball/5506445a5770e23075e78e02510752106ee284b0", + "reference": "5506445a5770e23075e78e02510752106ee284b0", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "psr/log": "^1.0", + "ramsey/uuid": "^3.3" + }, + "require-dev": { + "empi89/php-amqp-stubs": "dev-master", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.0|^5.0" + }, + "suggest": { + "ext-amqp": "To use the AMQP extension adapters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Queue\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Message queue component", + "time": "2016-10-05T10:41:36+00:00" + }, + { + "name": "alchemy/rest-bundle", + "version": "0.0.5", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/rest-bundle.git", + "reference": "e795b3cd565086d575ee919d1b23279656c982ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/rest-bundle/zipball/e795b3cd565086d575ee919d1b23279656c982ad", + "reference": "e795b3cd565086d575ee919d1b23279656c982ad", + "shasum": "" + }, + "require": { + "league/fractal": "^0.12.0|^0.13.0", + "php": ">=5.4", + "willdurand/negotiation": "~2.0@dev" + }, + "require-dev": { + "pagerfanta/pagerfanta": "^1.0.3", + "phpunit/phpunit": "^4.7", + "silex/silex": "^1.0.0", + "squizlabs/php_codesniffer": "^2.3", + "symfony/symfony": "~2.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Rest\\": "src/Component", + "Alchemy\\RestBundle\\": "src/Bundle", + "Alchemy\\RestProvider\\": "src/Provider" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Simple REST utility bundle", + "time": "2016-05-16T09:37:34+00:00" + }, + { + "name": "alchemy/symfony-cors", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/symfony-cors.git", + "reference": "dbf7fcff1ce9fc1265db12955476ff169eab7375" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/symfony-cors/zipball/dbf7fcff1ce9fc1265db12955476ff169eab7375", + "reference": "dbf7fcff1ce9fc1265db12955476ff169eab7375", + "shasum": "" + }, + "require": { + "symfony/http-kernel": "^2.3.0|^3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "silex/silex": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Cors\\": "src/Component/", + "Alchemy\\CorsProvider\\": "src/Provider/", + "Alchemy\\CorsBundle\\": "src/Bundle/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benoît Burnichon", + "email": "bburnichon@alchemy.fr" + } + ], + "description": "A library that adds CORS services to Silex/Symfony Applications", + "time": "2015-12-17T15:34:43+00:00" + }, + { + "name": "alchemy/task-manager", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/task-manager.git", + "reference": "6185ab425922580c3f7a6f0ae1b364e6a4626aae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/task-manager/zipball/6185ab425922580c3f7a6f0ae1b364e6a4626aae", + "reference": "6185ab425922580c3f7a6f0ae1b364e6a4626aae", + "shasum": "" + }, + "require": { + "ext-zmq": "*", + "neutron/process-manager": "2.0.x-dev@dev", + "neutron/signal-handler": "~1.0", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.0", + "symfony/process": "~2.4" + }, + "require-dev": { + "monolog/monolog": "~1.0", + "phpunit/phpunit": "~3.7|^4.0|^5.0", + "symfony/console": "~2.3", + "symfony/finder": "~2.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-0": { + "Alchemy": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "A manager for running parallel PHP processes command line.", + "keywords": [ + "cli", + "parallel", + "process" + ], + "time": "2016-11-30T13:34:30+00:00" + }, + { + "name": "alchemy/worker-bundle", + "version": "0.1.6", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/worker-bundle.git", + "reference": "a4911cc4a4c9ccf1195c78a11ca5899c9077b1df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/worker-bundle/zipball/a4911cc4a4c9ccf1195c78a11ca5899c9077b1df", + "reference": "a4911cc4a4c9ccf1195c78a11ca5899c9077b1df", + "shasum": "" + }, + "require": { + "alchemy/queue-bundle": "^0.1.5", + "alchemy/worker-component": "^0.1.0", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^5.4", + "silex/silex": "^1.3.0", + "symfony/symfony": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\WorkerBundle\\": "src/WorkerBundle", + "Alchemy\\WorkerProvider\\": "src/WorkerProvider" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + } + ], + "description": "Symfony bundle for alchemy/worker-component", + "time": "2016-12-06T10:39:58+00:00" + }, + { + "name": "alchemy/worker-component", + "version": "0.1.4", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/worker-component.git", + "reference": "239927775b9097e6f1a540a975d2ea49bda550f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/worker-component/zipball/239927775b9097e6f1a540a975d2ea49bda550f4", + "reference": "239927775b9097e6f1a540a975d2ea49bda550f4", + "shasum": "" + }, + "require": { + "alchemy/queue-component": "^0.1.4", + "php": ">=5.5", + "psr/log": "^1.0", + "ramsey/uuid": "^3.3" + }, + "require-dev": { + "empi89/php-amqp-stubs": "dev-master", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.0|^5.0" + }, + "suggest": { + "ext-amqp": "To use the AMQP extension adapters" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Worker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Message queue worker component", + "time": "2016-11-14T16:41:16+00:00" + }, + { + "name": "alchemy/zippy", + "version": "0.3.5", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/Zippy.git", + "reference": "92c773f7bbe47fdb30c61dbaea3dcbf4dd13a40a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/Zippy/zipball/92c773f7bbe47fdb30c61dbaea3dcbf4dd13a40a", + "reference": "92c773f7bbe47fdb30c61dbaea3dcbf4dd13a40a", + "shasum": "" + }, + "require": { + "doctrine/collections": "~1.0", + "ext-mbstring": "*", + "php": ">=5.3.3", + "symfony/filesystem": "^2.0.5|^3.0", + "symfony/process": "^2.1|^3.0" + }, + "require-dev": { + "ext-zip": "*", + "guzzle/guzzle": "~3.0", + "phpunit/phpunit": "^4.0|^5.0", + "symfony/finder": "^2.0.5|^3.0" + }, + "suggest": { + "ext-zip": "To use the ZipExtensionAdapter", + "guzzle/guzzle": "To use the GuzzleTeleporter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Alchemy\\Zippy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alchemy", + "email": "dev.team@alchemy.fr", + "homepage": "http://www.alchemy.fr/" + } + ], + "description": "Zippy, the archive manager companion", + "keywords": [ + "bzip", + "compression", + "tar", + "zip" + ], + "time": "2016-02-15T22:46:40+00:00" + }, + { + "name": "aws/aws-sdk-php", + "version": "2.8.31", + "source": { + "type": "git", + "url": "https://github.com/aws/aws-sdk-php.git", + "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/64fa4b07f056e338a5f0f29eece75babaa83af68", + "reference": "64fa4b07f056e338a5f0f29eece75babaa83af68", + "shasum": "" + }, + "require": { + "guzzle/guzzle": "~3.7", + "php": ">=5.3.3" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "ext-openssl": "*", + "monolog/monolog": "~1.4", + "phpunit/phpunit": "~4.0", + "phpunit/phpunit-mock-objects": "2.3.1", + "symfony/yaml": "~2.1" + }, + "suggest": { + "doctrine/cache": "Adds support for caching of credentials and responses", + "ext-apc": "Allows service description opcode caching, request and response caching, and credentials caching", + "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", + "monolog/monolog": "Adds support for logging HTTP requests and responses", + "symfony/yaml": "Eases the ability to write manifests for creating jobs in AWS Import/Export" + }, + "type": "library", + "autoload": { + "psr-0": { + "Aws": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Amazon Web Services", + "homepage": "http://aws.amazon.com" + } + ], + "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", + "homepage": "http://aws.amazon.com/sdkforphp", + "keywords": [ + "amazon", + "aws", + "cloud", + "dynamodb", + "ec2", + "glacier", + "s3", + "sdk" + ], + "time": "2016-07-25T18:03:20+00:00" + }, + { + "name": "beberlei/assert", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/beberlei/assert.git", + "reference": "5972776d6a9eedfd3c55216341434e19cb50418f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/beberlei/assert/zipball/5972776d6a9eedfd3c55216341434e19cb50418f", + "reference": "5972776d6a9eedfd3c55216341434e19cb50418f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpunit/phpunit": "@stable" + }, + "type": "library", + "autoload": { + "psr-4": { + "Assert\\": "lib/Assert" + }, + "files": [ + "lib/Assert/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" + } + ], + "description": "Thin assertion library for input validation in business models.", + "keywords": [ + "assert", + "assertion", + "validation" + ], + "time": "2017-01-24T15:14:39+00:00" + }, + { + "name": "behat/transliterator", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Transliterator.git", + "reference": "868e05be3a9f25ba6424c2dd4849567f50715003" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Transliterator/zipball/868e05be3a9f25ba6424c2dd4849567f50715003", + "reference": "868e05be3a9f25ba6424c2dd4849567f50715003", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Transliterator": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Artistic-1.0" + ], + "description": "String transliterator", + "keywords": [ + "i18n", + "slug", + "transliterator" + ], + "time": "2015-09-28T16:26:35+00:00" + }, + { + "name": "box/spout", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/box/spout.git", + "reference": "3681a3421a868ab9a65da156c554f756541f452b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/box/spout/zipball/3681a3421a868ab9a65da156c554f756541f452b", + "reference": "3681a3421a868ab9a65da156c554f756541f452b", + "shasum": "" + }, + "require": { + "ext-xmlreader": "*", + "ext-zip": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.0" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-intl\" is not already installed or is too limited)", + "ext-intl": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8.x-dev" + } + }, + "autoload": { + "psr-4": { + "Box\\Spout\\": "src/Spout" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://www.github.com/box/spout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "time": "2017-09-25T19:44:35+00:00" + }, + { + "name": "cocur/slugify", + "version": "v2.3", + "source": { + "type": "git", + "url": "https://github.com/cocur/slugify.git", + "reference": "57a00e06a382928e350cc7bbb13b19f1b8f4e73a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cocur/slugify/zipball/57a00e06a382928e350cc7bbb13b19f1b8f4e73a", + "reference": "57a00e06a382928e350cc7bbb13b19f1b8f4e73a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "laravel/framework": "~5.1", + "latte/latte": "~2.2", + "league/container": "^2.2.0", + "mikey179/vfsstream": "~1.6", + "mockery/mockery": "~0.9", + "nette/di": "~2.2", + "phpunit/phpunit": "~4.8|~5.2", + "pimple/pimple": "~1.1", + "plumphp/plum": "~0.1", + "silex/silex": "~1.3", + "symfony/config": "~2.4|~3.0", + "symfony/dependency-injection": "~2.4|~3.0", + "symfony/http-kernel": "~2.4|~3.0", + "twig/twig": "~1.12", + "zendframework/zend-modulemanager": "~2.2", + "zendframework/zend-servicemanager": "~2.2", + "zendframework/zend-view": "~2.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cocur\\Slugify\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ivo Bathke", + "email": "ivo.bathke@gmail.com" + }, + { + "name": "Florian Eckerstorfer", + "email": "florian@eckerstorfer.co", + "homepage": "https://florian.ec" + } + ], + "description": "Converts a string into a slug.", + "keywords": [ + "slug", + "slugify" + ], + "time": "2016-08-09T20:10:17+00:00" + }, + { + "name": "czproject/git-php", + "version": "v3.17.0", + "source": { + "type": "git", + "url": "https://github.com/czproject/git-php.git", + "reference": "a7b911b81a2fe626f748a4ac8955353c5777bc6c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/czproject/git-php/zipball/a7b911b81a2fe626f748a4ac8955353c5777bc6c", + "reference": "a7b911b81a2fe626f748a4ac8955353c5777bc6c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "nette/tester": "^1.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jan Pecha", + "email": "janpecha@email.cz" + } + ], + "description": "Library for work with Git repository in PHP.", + "keywords": [ + "git" + ], + "time": "2019-02-09T13:11:36+00:00" + }, + { + "name": "dailymotion/sdk", + "version": "1.6.5", + "source": { + "type": "git", + "url": "https://github.com/dailymotion/dailymotion-sdk-php.git", + "reference": "0f558978785f9a6ab9e59c393041d4896550973b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dailymotion/dailymotion-sdk-php/zipball/0f558978785f9a6ab9e59c393041d4896550973b", + "reference": "0f558978785f9a6ab9e59c393041d4896550973b", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "Dailymotion.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Dailymotion PHP SDK", + "homepage": "http://dailymotion.com", + "keywords": [ + "api", + "dailymotion", + "sdk" + ], + "time": "2015-11-20T11:18:32+00:00" + }, + { + "name": "data-uri/data-uri", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHP-dataURI.git", + "reference": "6b84ac5b57af163d30a18cdb145928a1b90526ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHP-dataURI/zipball/6b84ac5b57af163d30a18cdb145928a1b90526ac", + "reference": "6b84ac5b57af163d30a18cdb145928a1b90526ac", + "shasum": "" + }, + "require": { + "php": ">=5.3.2", + "symfony/http-foundation": "~2.0" + }, + "require-dev": { + "sami/sami": "dev-master" + }, + "type": "library", + "autoload": { + "psr-0": { + "DataURI": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "nlegoff", + "email": "legoff.n@gmail.com" + } + ], + "description": "PHP DataURI component", + "keywords": [ + "data", + "data-uri", + "uri" + ], + "time": "2014-08-22T15:01:57+00:00" + }, + { + "name": "dflydev/doctrine-orm-service-provider", + "version": "v1.0.7", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-doctrine-orm-service-provider.git", + "reference": "68f6805bbbedfdebccb9f24802f0484204b6a17d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-doctrine-orm-service-provider/zipball/68f6805bbbedfdebccb9f24802f0484204b6a17d", + "reference": "68f6805bbbedfdebccb9f24802f0484204b6a17d", + "shasum": "" + }, + "require": { + "doctrine/orm": "~2.3", + "php": ">=5.3.3", + "pimple/pimple": "1.*@dev" + }, + "require-dev": { + "cilex/cilex": "1.*@dev", + "cilex/console-service-provider": "@dev", + "silex/silex": "1.*@dev" + }, + "suggest": { + "dflydev/psr0-resource-locator-service-provider": "1.0.*@dev" + }, + "type": "library", + "autoload": { + "psr-0": { + "Dflydev\\Cilex\\Provider\\DoctrineOrm": "src", + "Dflydev\\Pimple\\Provider\\DoctrineOrm": "src", + "Dflydev\\Silex\\Provider\\DoctrineOrm": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + } + ], + "description": "Doctrine ORM Service Provider", + "homepage": "http://dflydev.com/projects/doctrine-orm-service-provider/", + "keywords": [ + "cilex", + "doctrine", + "orm", + "pimple", + "silex" + ], + "time": "2015-09-07T12:16:54+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "reference": "f25c8aab83e0c3e976fd7d19875f198ccf2f7535", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Annotations\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2015-08-31T12:32:49+00:00" + }, + { + "name": "doctrine/cache", + "version": "1.6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "reference": "b6f544a20f4807e81f7044d31e679ccbb1866dc3", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2016-10-29T11:16:17+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "reference": "6c1e4eef75f310ea1b3e30945e9f06e652128b8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2015-04-14T22:21:58+00:00" + }, + { + "name": "doctrine/common", + "version": "v2.6.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "7bce00698899aa2c06fe7365c76e4d78ddb15fa3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/7bce00698899aa2c06fe7365c76e4d78ddb15fa3", + "reference": "7bce00698899aa2c06fe7365c76e4d78ddb15fa3", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.5|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2016-11-30T16:50:46+00:00" + }, + { + "name": "doctrine/dbal", + "version": "v2.5.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "fc376f7a61498e18520cd6fa083752a4ca08072b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/fc376f7a61498e18520cd6fa083752a4ca08072b", + "reference": "fc376f7a61498e18520cd6fa083752a4ca08072b", + "shasum": "" + }, + "require": { + "doctrine/common": ">=2.4,<2.8-dev", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "symfony/console": "2.*||^3.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2017-01-23T23:17:10+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06T14:35:42+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "doctrine/migrations", + "version": "v1.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/migrations.git", + "reference": "c81147c0f2938a6566594455367e095150547f72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/c81147c0f2938a6566594455367e095150547f72", + "reference": "c81147c0f2938a6566594455367e095150547f72", + "shasum": "" + }, + "require": { + "doctrine/dbal": "~2.2", + "ocramius/proxy-manager": "^1.0|^2.0", + "php": "^5.5|^7.0", + "symfony/console": "~2.3|~3.0", + "symfony/yaml": "~2.3|~3.0" + }, + "require-dev": { + "doctrine/coding-standard": "dev-master", + "doctrine/orm": "2.*", + "jdorn/sql-formatter": "~1.1", + "johnkary/phpunit-speedtrap": "~1.0@dev", + "mikey179/vfsstream": "^1.6", + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "~4.7", + "satooshi/php-coveralls": "^1.0" + }, + "suggest": { + "jdorn/sql-formatter": "Allows to generate formatted SQL with the diff command." + }, + "bin": [ + "bin/doctrine-migrations" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "v1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\Migrations\\": "lib/Doctrine/DBAL/Migrations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Michael Simonson", + "email": "contact@mikesimonson.com" + } + ], + "description": "Database Schema migrations using Doctrine DBAL", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "migrations" + ], + "time": "2016-12-25T22:54:00+00:00" + }, + { + "name": "doctrine/orm", + "version": "v2.5.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/orm.git", + "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/orm/zipball/e6c434196c8ef058239aaa0724b4aadb0107940b", + "reference": "e6c434196c8ef058239aaa0724b4aadb0107940b", + "shasum": "" + }, + "require": { + "doctrine/cache": "~1.4", + "doctrine/collections": "~1.2", + "doctrine/common": ">=2.5-dev,<2.8-dev", + "doctrine/dbal": ">=2.5-dev,<2.6-dev", + "doctrine/instantiator": "~1.0.1", + "ext-pdo": "*", + "php": ">=5.4", + "symfony/console": "~2.5|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "symfony/yaml": "~2.3|~3.0" + }, + "suggest": { + "symfony/yaml": "If you want to use YAML Metadata Mapping Driver" + }, + "bin": [ + "bin/doctrine", + "bin/doctrine.php" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\ORM\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Object-Relational-Mapper for PHP", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "orm" + ], + "time": "2016-12-18T15:42:34+00:00" + }, + { + "name": "elasticsearch/elasticsearch", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/elastic/elasticsearch-php.git", + "reference": "12a400656e4cf4c231d83cb56af3f50a27dcde93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/12a400656e4cf4c231d83cb56af3f50a27dcde93", + "reference": "12a400656e4cf4c231d83cb56af3f50a27dcde93", + "shasum": "" + }, + "require": { + "guzzlehttp/ringphp": "~1.0", + "php": ">=5.4", + "psr/log": "~1.0" + }, + "require-dev": { + "cpliakas/git-wrapper": "~1.0", + "mockery/mockery": "0.9.4", + "phpunit/phpunit": "~4.7", + "sami/sami": "~3.2", + "symfony/yaml": "2.4.3 as 2.4.2", + "twig/twig": "1.*" + }, + "suggest": { + "ext-curl": "*", + "monolog/monolog": "Allows for client-level logging and tracing" + }, + "type": "library", + "autoload": { + "psr-4": { + "Elasticsearch\\": "src/Elasticsearch/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Zachary Tong" + } + ], + "description": "PHP Client for Elasticsearch", + "keywords": [ + "client", + "elasticsearch", + "search" + ], + "time": "2016-11-30T17:15:05+00:00" + }, + { + "name": "evenement/evenement", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "fa966683e7df3e5dd5929d984a44abfbd6bafe8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/fa966683e7df3e5dd5929d984a44abfbd6bafe8d", + "reference": "fa966683e7df3e5dd5929d984a44abfbd6bafe8d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Evenement": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch", + "homepage": "http://wiedler.ch/igor/" + } + ], + "description": "Événement is a very simple event dispatching library for PHP 5.3", + "keywords": [ + "event-dispatcher" + ], + "time": "2012-05-30T15:01:08+00:00" + }, + { + "name": "exiftool/exiftool", + "version": "11", + "source": { + "type": "git", + "url": "https://github.com/exiftool/exiftool.git", + "reference": "11.84" + }, + "type": "library" + }, + { + "name": "facebook/graph-sdk", + "version": "5.6.1", + "source": { + "type": "git", + "url": "https://github.com/facebook/php-graph-sdk.git", + "reference": "2f9639c15ae043911f40ffe44080b32bac2c5280" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/facebook/php-graph-sdk/zipball/2f9639c15ae043911f40ffe44080b32bac2c5280", + "reference": "2f9639c15ae043911f40ffe44080b32bac2c5280", + "shasum": "" + }, + "require": { + "php": "^5.4|^7.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "~5.0", + "mockery/mockery": "~0.8", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "guzzlehttp/guzzle": "Allows for implementation of the Guzzle HTTP client", + "paragonie/random_compat": "Provides a better CSPRNG option in PHP 5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "Facebook\\": "src/Facebook/" + }, + "files": [ + "src/Facebook/polyfills.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Facebook Platform" + ], + "authors": [ + { + "name": "Facebook", + "homepage": "https://github.com/facebook/php-graph-sdk/contributors" + } + ], + "description": "Facebook SDK for PHP", + "homepage": "https://github.com/facebook/php-graph-sdk", + "keywords": [ + "facebook", + "sdk" + ], + "time": "2017-08-16T17:28:07+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "fa8a06e96526eb7c0eeaa47e4f39be59d21f16e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/fa8a06e96526eb7c0eeaa47e4f39be59d21f16e1", + "reference": "fa8a06e96526eb7c0eeaa47e4f39be59d21f16e1", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "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-22T18:31:08+00:00" + }, + { + "name": "gedmo/doctrine-extensions", + "version": "v2.3.12", + "source": { + "type": "git", + "url": "https://github.com/Atlantic18/DoctrineExtensions.git", + "reference": "c3ff3c73c95b01e107af33d4fe3abf80794e2df9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Atlantic18/DoctrineExtensions/zipball/c3ff3c73c95b01e107af33d4fe3abf80794e2df9", + "reference": "c3ff3c73c95b01e107af33d4fe3abf80794e2df9", + "shasum": "" + }, + "require": { + "behat/transliterator": "~1.0", + "doctrine/common": "~2.4", + "php": ">=5.3.2" + }, + "require-dev": { + "doctrine/mongodb-odm": ">=1.0.0-BETA11", + "doctrine/orm": "~2.4", + "phpunit/phpunit": "~4.4", + "phpunit/phpunit-mock-objects": "~2.3", + "symfony/yaml": "~2.3" + }, + "suggest": { + "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", + "doctrine/orm": "to use the extensions with the ORM" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Gedmo\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David Buchmann", + "email": "david@liip.ch" + }, + { + "name": "Gediminas Morkevicius", + "email": "gediminas.morkevicius@gmail.com" + }, + { + "name": "Gustavo Falco", + "email": "comfortablynumb84@gmail.com" + } + ], + "description": "Doctrine2 behavioral extensions", + "homepage": "http://gediminasm.org/", + "keywords": [ + "Blameable", + "behaviors", + "doctrine2", + "extensions", + "gedmo", + "loggable", + "nestedset", + "sluggable", + "sortable", + "timestampable", + "translatable", + "tree", + "uploadable" + ], + "time": "2015-02-24T21:41:37+00:00" + }, + { + "name": "goodby/csv", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/goodby/csv.git", + "reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/goodby/csv/zipball/e71217b8d6110f3d1ac3784ef9b8a2383c3398b9", + "reference": "e71217b8d6110f3d1ac3784ef9b8a2383c3398b9", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.3.2" + }, + "require-dev": { + "mikey179/vfsstream": ">=1.1.0", + "mockery/mockery": ">=0.7.2", + "phpunit/phpunit": "3.7.*", + "suin/php-expose": ">=1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Goodby\\CSV": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "suin", + "email": "suinyeze@gmail.com", + "homepage": "https://www.facebook.com/suinyeze", + "role": "Developer, Renaming Specialist" + }, + { + "name": "reoring", + "email": "mori.reo@gmail.com", + "homepage": "https://www.facebook.com/reoring", + "role": "Developer" + } + ], + "description": "CSV import/export library", + "homepage": "https://github.com/goodby/csv", + "keywords": [ + "csv", + "export", + "import" + ], + "time": "2015-06-29T10:28:19+00:00" + }, + { + "name": "google/apiclient", + "version": "v2.2.1", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-api-php-client.git", + "reference": "b69b8ac4bf6501793c389d4e013a79d09c85c5f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/b69b8ac4bf6501793c389d4e013a79d09c85c5f2", + "reference": "b69b8ac4bf6501793c389d4e013a79d09c85c5f2", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", + "google/apiclient-services": "~0.13", + "google/auth": "^1.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "^1.2", + "monolog/monolog": "^1.17", + "php": ">=5.4", + "phpseclib/phpseclib": "~0.3.10|~2.0" + }, + "require-dev": { + "cache/filesystem-adapter": "^0.3.2", + "phpunit/phpunit": "~4", + "squizlabs/php_codesniffer": "~2.3", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1" + }, + "suggest": { + "cache/filesystem-adapter": "For caching certs and tokens (using Google_Client::setCache)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Google_": "src/" + }, + "classmap": [ + "src/Google/Service/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2017-11-03T01:19:53+00:00" + }, + { + "name": "google/apiclient-services", + "version": "v0.36", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-api-php-client-services.git", + "reference": "2fd7d2876fbc0174faddba3241956a1393536159" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/2fd7d2876fbc0174faddba3241956a1393536159", + "reference": "2fd7d2876fbc0174faddba3241956a1393536159", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Google_Service_": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Client library for Google APIs", + "homepage": "http://developers.google.com/api-client-library/php", + "keywords": [ + "google" + ], + "time": "2017-11-25T00:23:12+00:00" + }, + { + "name": "google/auth", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/googleapis/google-auth-library-php.git", + "reference": "548d27d670f0236dc5258fa4cdde6e7b63464cfd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/548d27d670f0236dc5258fa4cdde6e7b63464cfd", + "reference": "548d27d670f0236dc5258fa4cdde6e7b63464cfd", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~2.0|~3.0|~4.0|~5.0", + "guzzlehttp/guzzle": "~5.3.1|~6.0", + "guzzlehttp/psr7": "~1.2", + "php": ">=5.4", + "psr/cache": "^1.0", + "psr/http-message": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "Google\\Auth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Google Auth Library for PHP", + "homepage": "http://github.com/google/google-auth-library-php", + "keywords": [ + "Authentication", + "google", + "oauth2" + ], + "time": "2017-10-10T17:01:45+00:00" + }, + { + "name": "google/recaptcha", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/google/recaptcha.git", + "reference": "5a56d15ca10a7b75158178752b2ad8f755eb4f78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/google/recaptcha/zipball/5a56d15ca10a7b75158178752b2ad8f755eb4f78", + "reference": "5a56d15ca10a7b75158178752b2ad8f755eb4f78", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Client library for reCAPTCHA, a free service that protect websites from spam and abuse.", + "homepage": "http://www.google.com/recaptcha/", + "keywords": [ + "Abuse", + "captcha", + "recaptcha", + "spam" + ], + "time": "2017-03-09T18:44:34+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "guzzlehttp/ringphp", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/RingPHP.git", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "reference": "dbbb91d7f6c191e5e405e900e3102ac7f261bc0b", + "shasum": "" + }, + "require": { + "guzzlehttp/streams": "~3.0", + "php": ">=5.4.0", + "react/promise": "~2.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-curl": "Guzzle will use specific adapters if cURL is present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Ring\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.", + "abandoned": true, + "time": "2015-05-20T03:37:09+00:00" + }, + { + "name": "guzzlehttp/streams", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/streams.git", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Provides a simple abstraction over streams of data", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "Guzzle", + "stream" + ], + "abandoned": true, + "time": "2014-10-12T19:18:40+00:00" + }, + { + "name": "hoa/compiler", + "version": "2.15.10.29", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Compiler.git", + "reference": "ec0849fd3c1472fbcd86c3c961981f0cfe1f8d39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Compiler/zipball/ec0849fd3c1472fbcd86c3c961981f0cfe1f8d39", + "reference": "ec0849fd3c1472fbcd86c3c961981f0cfe1f8d39", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0", + "hoa/file": "~0.0", + "hoa/iterator": "~1.0", + "hoa/math": "~0.0", + "hoa/regex": "~0.0", + "hoa/visitor": "~1.0" + }, + "require-dev": { + "hoa/json": "~1.0", + "hoa/test": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Compiler\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Compiler library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "algebraic", + "ast", + "compiler", + "context-free", + "coverage", + "exhaustive", + "grammar", + "isotropic", + "language", + "lexer", + "library", + "ll1", + "llk", + "parser", + "pp", + "random", + "regular", + "rule", + "sampler", + "syntax", + "token", + "trace", + "uniform" + ], + "time": "2015-10-29T21:35:12+00:00" + }, + { + "name": "hoa/console", + "version": "2.15.07.27", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Console.git", + "reference": "3b871f5f1059a3664acb5380ebadd988daa7a0db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Console/zipball/3b871f5f1059a3664acb5380ebadd988daa7a0db", + "reference": "3b871f5f1059a3664acb5380ebadd988daa7a0db", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0", + "hoa/stream": "~0.0", + "hoa/ustring": "~3.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "suggest": { + "ext-pcntl": "To enable hoa://Event/Console/Window:resize.", + "hoa/dispatcher": "To use the console kit.", + "hoa/router": "To use the console kit." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Console\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Console library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "autocompletion", + "chrome", + "cli", + "console", + "cursor", + "getoption", + "library", + "option", + "parser", + "processus", + "readline", + "terminfo", + "tput", + "window" + ], + "time": "2015-07-27T07:52:10+00:00" + }, + { + "name": "hoa/core", + "version": "2.15.11.09", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Core.git", + "reference": "5538b1e90e2c66c90df5cc45e03fb85d047be900" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Core/zipball/5538b1e90e2c66c90df5cc45e03fb85d047be900", + "reference": "5538b1e90e2c66c90df5cc45e03fb85d047be900", + "shasum": "" + }, + "require": { + "ext-spl": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "suggest": { + "ext-mbstring": "ext/mbstring must be present (or a third implementation).", + "hoa/cli": "To use the `hoa` script." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Core\\": "." + }, + "files": [ + "Core.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Core library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "consistency", + "core", + "data", + "event", + "library", + "listener", + "parameter", + "protocol" + ], + "abandoned": "hoa/consistency", + "time": "2015-11-09T06:51:06+00:00" + }, + { + "name": "hoa/dispatcher", + "version": "0.15.11.09", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Dispatcher.git", + "reference": "45fd0484824b2a3a5059296eb2403399606627d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Dispatcher/zipball/45fd0484824b2a3a5059296eb2403399606627d9", + "reference": "45fd0484824b2a3a5059296eb2403399606627d9", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "require-dev": { + "hoa/router": "~2.0", + "hoa/test": "~1.0", + "hoa/view": "~2.0" + }, + "suggest": { + "hoa/router": "Provide routers.", + "hoa/view": "Provide view interface." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Dispatcher\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Dispatcher library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "dispatcher", + "kit", + "library" + ], + "time": "2015-11-09T06:52:08+00:00" + }, + { + "name": "hoa/file", + "version": "0.15.11.09", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/File.git", + "reference": "f46fe552ff79cb6c93a2ff9c25cfbc134fbd57ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/File/zipball/f46fe552ff79cb6c93a2ff9c25cfbc134fbd57ee", + "reference": "f46fe552ff79cb6c93a2ff9c25cfbc134fbd57ee", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0", + "hoa/iterator": "~1.0", + "hoa/stream": "~0.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\File\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\File library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "Socket", + "directory", + "file", + "finder", + "library", + "link", + "temporary" + ], + "time": "2015-11-09T06:55:20+00:00" + }, + { + "name": "hoa/iterator", + "version": "1.15.10.29", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Iterator.git", + "reference": "a64ed9fd62579a34e4450134d6d1abdf77d54435" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/a64ed9fd62579a34e4450134d6d1abdf77d54435", + "reference": "a64ed9fd62579a34e4450134d6d1abdf77d54435", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Iterator\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Iterator library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "iterator", + "library" + ], + "time": "2015-10-29T21:37:16+00:00" + }, + { + "name": "hoa/math", + "version": "0.15.10.26", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Math.git", + "reference": "62631c65d9a4f1b8bb4c4a3d6cdff0e8971d684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Math/zipball/62631c65d9a4f1b8bb4c4a3d6cdff0e8971d684e", + "reference": "62631c65d9a4f1b8bb4c4a3d6cdff0e8971d684e", + "shasum": "" + }, + "require": { + "hoa/compiler": "~2.0", + "hoa/core": "~2.0", + "hoa/iterator": "~1.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Math\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Math library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "arrangement", + "combination", + "combinatorics", + "counting", + "library", + "math", + "permutation", + "sampler", + "set" + ], + "time": "2015-10-26T15:22:52+00:00" + }, + { + "name": "hoa/regex", + "version": "0.15.08.13", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Regex.git", + "reference": "2ef8a77ef3885ca202fcd9c31a8e54c44cd04232" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Regex/zipball/2ef8a77ef3885ca202fcd9c31a8e54c44cd04232", + "reference": "2ef8a77ef3885ca202fcd9c31a8e54c44cd04232", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0", + "hoa/math": "~0.0", + "hoa/ustring": "~3.0", + "hoa/visitor": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Regex\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Regex library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "compiler", + "library", + "regex" + ], + "time": "2015-08-13T06:48:47+00:00" + }, + { + "name": "hoa/router", + "version": "2.15.10.21", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Router.git", + "reference": "6d9a39c5655660ea80d8196fddccdc02054ea3bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Router/zipball/6d9a39c5655660ea80d8196fddccdc02054ea3bd", + "reference": "6d9a39c5655660ea80d8196fddccdc02054ea3bd", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Router\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Router library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "cli", + "http", + "library", + "router" + ], + "time": "2015-10-21T14:12:51+00:00" + }, + { + "name": "hoa/stream", + "version": "0.15.10.26", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Stream.git", + "reference": "3bc446bc00849bf51166adc415d77aa375d48d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3bc446bc00849bf51166adc415d77aa375d48d8c", + "reference": "3bc446bc00849bf51166adc415d77aa375d48d8c", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Stream\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Stream library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "Context", + "bucket", + "composite", + "filter", + "in", + "library", + "out", + "protocol", + "stream", + "wrapper" + ], + "time": "2015-10-26T12:21:43+00:00" + }, + { + "name": "hoa/ustring", + "version": "3.15.11.09", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Ustring.git", + "reference": "8506be4910212b1a2beb9014763a8a4fbd871001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Ustring/zipball/8506be4910212b1a2beb9014763a8a4fbd871001", + "reference": "8506be4910212b1a2beb9014763a8a4fbd871001", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "suggest": { + "ext-iconv": "ext/iconv must be present (or a third implementation) to use Hoa\\Ustring::transcode().", + "ext-intl": "To get a better Hoa\\Ustring::toAscii() and Hoa\\Ustring::compareTo()." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Ustring\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Ustring library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "library", + "search", + "string", + "unicode" + ], + "time": "2015-11-09T06:44:33+00:00" + }, + { + "name": "hoa/visitor", + "version": "1.15.08.17", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Visitor.git", + "reference": "e30bfff741f71979f6476a41548e34afe8053c67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Visitor/zipball/e30bfff741f71979f6476a41548e34afe8053c67", + "reference": "e30bfff741f71979f6476a41548e34afe8053c67", + "shasum": "" + }, + "require": { + "hoa/core": "~2.0" + }, + "require-dev": { + "hoa/test": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Visitor\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "http://hoa-project.net/" + } + ], + "description": "The Hoa\\Visitor library.", + "homepage": "http://hoa-project.net/", + "keywords": [ + "library", + "structure", + "visit", + "visitor" + ], + "time": "2015-08-17T06:30:58+00:00" + }, + { + "name": "igorw/get-in", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/igorw/get-in.git", + "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/get-in/zipball/170ded831f49abc6a6061f655aba9bdbcf7b8111", + "reference": "170ded831f49abc6a6061f655aba9bdbcf7b8111", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "files": [ + "src/get_in.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Functions for for hash map (assoc array) traversal.", + "keywords": [ + "assoc-array", + "hash-map" + ], + "time": "2014-12-15T23:03:51+00:00" + }, + { + "name": "imagine/imagine", + "version": "0.6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/Imagine.git", + "reference": "6605d13e3b24f335fe80099c193546671158c041" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/Imagine/zipball/6605d13e3b24f335fe80099c193546671158c041", + "reference": "6605d13e3b24f335fe80099c193546671158c041", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "sami/sami": "dev-master" + }, + "suggest": { + "ext-gd": "to use the GD implementation", + "ext-gmagick": "to use the Gmagick implementation", + "ext-imagick": "to use the Imagick implementation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-develop": "0.7-dev" + } + }, + "autoload": { + "psr-0": { + "Imagine": "lib/" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bulat Shakirzyanov", + "email": "mallluhuct@gmail.com", + "homepage": "http://avalanche123.com" + } + ], + "description": "Image processing for PHP 5.3", + "homepage": "http://imagine.readthedocs.org/", + "keywords": [ + "drawing", + "graphics", + "image manipulation", + "image processing" + ], + "support": { + "source": "https://github.com/alchemy-fr/Imagine/tree/alchemy-0.6.2" + }, + "time": "2015-01-13T18:12:26+00:00" + }, + { + "name": "ircmaxell/password-compat", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20T16:49:30+00:00" + }, + { + "name": "ircmaxell/security-lib", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/ircmaxell/SecurityLib.git", + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ircmaxell/SecurityLib/zipball/f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", + "reference": "f3db6de12c20c9bcd1aa3db4353a1bbe0e44e1b5", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "mikey179/vfsstream": "1.1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "SecurityLib": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A Base Security Library", + "homepage": "https://github.com/ircmaxell/SecurityLib", + "time": "2015-03-20T14:31:23+00:00" + }, + { + "name": "jms/metadata", + "version": "1.6.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/6a06970a10e0a532fb52d3959547123b84a3b3ab", + "reference": "6a06970a10e0a532fb52d3959547123b84a3b3ab", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/cache": "~1.0", + "symfony/cache": "~3.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Metadata\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Class/method/property metadata management in PHP", + "keywords": [ + "annotations", + "metadata", + "xml", + "yaml" + ], + "time": "2016-12-05T10:18:33+00:00" + }, + { + "name": "jms/parser-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/parser-lib.git", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", + "shasum": "" + }, + "require": { + "phpoption/phpoption": ">=0.9,<2.0-dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "description": "A library for easily creating recursive-descent parsers.", + "time": "2012-11-18T18:08:43+00:00" + }, + { + "name": "jms/serializer", + "version": "0.16.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/serializer.git", + "reference": "c8a171357ca92b6706e395c757f334902d430ea9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/c8a171357ca92b6706e395c757f334902d430ea9", + "reference": "c8a171357ca92b6706e395c757f334902d430ea9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "jms/metadata": "~1.1", + "jms/parser-lib": "1.*", + "php": ">=5.3.2", + "phpcollection/phpcollection": "~0.1" + }, + "require-dev": { + "doctrine/orm": "~2.1", + "doctrine/phpcr-odm": "~1.0.1", + "jackalope/jackalope-doctrine-dbal": "1.0.*", + "propel/propel1": "~1.7", + "symfony/filesystem": "2.*", + "symfony/form": "~2.1", + "symfony/translation": "~2.0", + "symfony/validator": "~2.0", + "symfony/yaml": "2.*", + "twig/twig": ">=1.8,<2.0-dev" + }, + "suggest": { + "symfony/yaml": "Required if you'd like to serialize data to YAML format." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.15-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\Serializer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh", + "role": "Developer of wrapped JMSSerializerBundle" + } + ], + "description": "Library for (de-)serializing data of any complexity; supports XML, JSON, and YAML.", + "homepage": "http://jmsyst.com/libs/serializer", + "keywords": [ + "deserialization", + "jaxb", + "json", + "serialization", + "xml" + ], + "time": "2014-03-18T08:39:00+00:00" + }, + { + "name": "jms/translation-bundle", + "version": "dev-rebase-2015-10-20", + "target-dir": "JMS/TranslationBundle", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/JMSTranslationBundle.git", + "reference": "aff66e65736d9fddbd17cac5a5f0c6fd044c6a92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/JMSTranslationBundle/zipball/aff66e65736d9fddbd17cac5a5f0c6fd044c6a92", + "reference": "aff66e65736d9fddbd17cac5a5f0c6fd044c6a92", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~1.4.1", + "symfony/console": "*", + "symfony/framework-bundle": "~2.1" + }, + "conflict": { + "twig/twig": "<1.12" + }, + "require-dev": { + "jms/di-extra-bundle": ">=1.1", + "sensio/framework-extra-bundle": "*", + "symfony/browser-kit": "*", + "symfony/class-loader": "*", + "symfony/css-selector": "*", + "symfony/expression-language": "~2.6", + "symfony/finder": "*", + "symfony/form": "*", + "symfony/process": "*", + "symfony/security": "*", + "symfony/twig-bundle": "*", + "symfony/validator": "*", + "symfony/yaml": "*" + }, + "type": "symfony-bundle", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev", + "dev-rebase-2015-10-20": "1.1-dev" + } + }, + "autoload": { + "psr-0": { + "JMS\\TranslationBundle": "" + } + }, + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Puts the Symfony2 Translation Component on steroids", + "homepage": "http://jmsyst.com/bundles/JMSTranslationBundle", + "keywords": [ + "extract", + "extraction", + "i18n", + "interface", + "multilanguage", + "translation", + "ui", + "webinterface" + ], + "support": { + "source": "https://github.com/alchemy-fr/JMSTranslationBundle/tree/rebase-2015-10-20" + }, + "time": "2015-11-04T15:09:44+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "c21534c635f03428e92254333fab4ae35b2cdfd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/c21534c635f03428e92254333fab4ae35b2cdfd9", + "reference": "c21534c635f03428e92254333fab4ae35b2cdfd9", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.1.2", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "^4.8.22" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2016-05-10T20:38:51+00:00" + }, + { + "name": "league/flysystem", + "version": "1.0.34", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "469ad53c13ea19a0e54e3e5d70f61227ddcc0299" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/469ad53c13ea19a0e54e3e5d70f61227ddcc0299", + "reference": "469ad53c13ea19a0e54e3e5d70f61227ddcc0299", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "ext-fileinfo": "*", + "mockery/mockery": "~0.9", + "phpspec/phpspec": "^2.2", + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-fileinfo": "Required for MimeType", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-copy": "Allows you to use Copy.com storage", + "league/flysystem-dropbox": "Allows you to use Dropbox storage", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "time": "2017-01-30T17:41:17+00:00" + }, + { + "name": "league/flysystem-aws-s3-v2", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-aws-s3-v2.git", + "reference": "e464a35e34abed572c76b76aa2f278d178e141c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v2/zipball/e464a35e34abed572c76b76aa2f278d178e141c6", + "reference": "e464a35e34abed572c76b76aa2f278d178e141c6", + "shasum": "" + }, + "require": { + "aws/aws-sdk-php": "~2.7", + "league/flysystem": "~1.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\AwsS3v2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Flysystem adapter for AWS S3 SDK v2", + "time": "2015-10-15T15:55:48+00:00" + }, + { + "name": "league/fractal", + "version": "dev-webgalleries", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/fractal.git", + "reference": "af1acc0275438571bc8c1d08a05a4b5af92c9f97" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "illuminate/contracts": "~5.0", + "mockery/mockery": "~0.9", + "pagerfanta/pagerfanta": "~1.0.0", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~1.5", + "zendframework/zend-paginator": "~2.3" + }, + "suggest": { + "illuminate/pagination": "The Illuminate Pagination component.", + "pagerfanta/pagerfanta": "Pagerfanta Paginator", + "zendframework/zend-paginator": "Zend Framework Paginator" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.13-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Fractal\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "League\\Fractal\\Test\\": "test" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Sturgeon", + "email": "me@philsturgeon.uk", + "homepage": "http://philsturgeon.uk/", + "role": "Developer" + } + ], + "description": "Handle the output of complex data structures ready for API output.", + "homepage": "http://fractal.thephpleague.com/", + "keywords": [ + "api", + "json", + "league", + "rest" + ], + "time": "2016-12-02T14:55:48+00:00" + }, + { + "name": "media-alchemyst/media-alchemyst", + "version": "0.5.5", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/Media-Alchemyst.git", + "reference": "3bd3204b69882f495adfb617383a077face92ed0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/Media-Alchemyst/zipball/3bd3204b69882f495adfb617383a077face92ed0", + "reference": "3bd3204b69882f495adfb617383a077face92ed0", + "shasum": "" + }, + "require": { + "alchemy/ghostscript": "~0.4.0", + "alchemy/mediavorus": "^0.4.4", + "imagine/imagine": "^0.6.2", + "monolog/monolog": "~1.0", + "neutron/temporary-filesystem": "^2.1.1", + "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.1", + "pimple/pimple": "~1.0", + "swftools/swftools": "~0.3.0", + "symfony/console": "^2.1|^3.0", + "symfony/filesystem": "^2.1|^3.0", + "symfony/process": "^2.1.1|^3.0" + }, + "require-dev": { + "alchemy/phpexiftool": "^0.4.0|^0.5.0", + "neutron/silex-imagine-provider": "~0.1", + "phpunit/phpunit": "^4.1|^5.0", + "silex/silex": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "MediaAlchemyst": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "An Object Oriented wrapper for easy multimedia conversion, based on Imagine, FFMpeg, SwfTools, Unoconv and other libs", + "keywords": [ + "audio", + "audio processing", + "image", + "image processing", + "video", + "video processing" + ], + "time": "2019-12-11T07:20:45+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.22.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "bad29cb8d18ab0315e6c477751418a82c850d558" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bad29cb8d18ab0315e6c477751418a82c850d558", + "reference": "bad29cb8d18ab0315e6c477751418a82c850d558", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "~5.3" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2016-11-26T00:15:39+00:00" + }, + { + "name": "mrclay/minify", + "version": "2.1.7", + "source": { + "type": "git", + "url": "https://github.com/mrclay/minify.git", + "reference": "db7fe244932ea77cf1438965693672ea12b33da8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mrclay/minify/zipball/db7fe244932ea77cf1438965693672ea12b33da8", + "reference": "db7fe244932ea77cf1438965693672ea12b33da8", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.2.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "min/lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Steve Clay", + "email": "steve@mrclay.org", + "homepage": "http://www.mrclay.org/", + "role": "Developer" + } + ], + "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-23T19:58:28+00:00" + }, + { + "name": "neutron/process-manager", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/ProcessManager.git", + "reference": "2b3e2a4aa969ce82627199bcdd81fb2553ab25df" + }, + "require": { + "php": ">=5.3.3", + "symfony/process": "~2.4" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "sami/sami": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "time": "2014-02-13T20:27:33+00:00" + }, + { + "name": "neutron/recaptcha", + "version": "0.1.3", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/ReCaptcha.git", + "reference": "f9de705c5b8631ec74353bb9f0b5077d50328ab2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/romainneutron/ReCaptcha/zipball/f9de705c5b8631ec74353bb9f0b5077d50328ab2", + "reference": "f9de705c5b8631ec74353bb9f0b5077d50328ab2", + "shasum": "" + }, + "require": { + "guzzle/guzzle": "~3.0" + }, + "require-dev": { + "silex/silex": "1.0.x-dev@dev", + "symfony/http-foundation": "~2.0" + }, + "suggest": { + "symfony/http-foundation": "To bind symfony request to ReCaptcha" + }, + "type": "library", + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "description": "ReCaptcha Client", + "time": "2013-02-14T13:42:00+00:00" + }, + { + "name": "neutron/signal-handler", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/signal-handler.git", + "reference": "5f2069bf4a5901a65be51f57ea60779a279564c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/romainneutron/signal-handler/zipball/5f2069bf4a5901a65be51f57ea60779a279564c1", + "reference": "5f2069bf4a5901a65be51f57ea60779a279564c1", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7" + }, + "type": "library", + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "description": "A library to ease the use of signal handling.", + "keywords": [ + "signal" + ], + "time": "2014-01-15T17:24:13+00:00" + }, + { + "name": "neutron/silex-filesystem-provider", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/Silex-Filesystem-Service-Provider.git", + "reference": "98771524bba1ffa58373c4c06d438f5fb5442ff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/romainneutron/Silex-Filesystem-Service-Provider/zipball/98771524bba1ffa58373c4c06d438f5fb5442ff4", + "reference": "98771524bba1ffa58373c4c06d438f5fb5442ff4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "silex/silex": ">=1.0", + "symfony/filesystem": ">=2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "description": "A Silex Provider for Symfony Filesystem component", + "keywords": [ + "filesystem", + "silex", + "temporary-filesystem" + ], + "time": "2012-11-08T21:07:08+00:00" + }, + { + "name": "neutron/silex-imagine-provider", + "version": "0.1.2", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/Imagine-Silex-Service-Provider.git", + "reference": "a8a7862ae90419f2b23746cd8436c2310e4eb084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/romainneutron/Imagine-Silex-Service-Provider/zipball/a8a7862ae90419f2b23746cd8436c2310e4eb084", + "reference": "a8a7862ae90419f2b23746cd8436c2310e4eb084", + "shasum": "" + }, + "require": { + "imagine/imagine": "*", + "php": ">=5.3.3", + "silex/silex": "~1.0" + }, + "require-dev": { + "symfony/browser-kit": "~2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + } + ], + "description": "A Silex service provider for Imagine Image Processing Library", + "keywords": [ + "image processing", + "imagine", + "silex" + ], + "time": "2013-05-03T18:48:51+00:00" + }, + { + "name": "neutron/temporary-filesystem", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/romainneutron/Temporary-Filesystem.git", + "reference": "0a72a1c858b95fd469d87baa333f627978504ea8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/romainneutron/Temporary-Filesystem/zipball/0a72a1c858b95fd469d87baa333f627978504ea8", + "reference": "0a72a1c858b95fd469d87baa333f627978504ea8", + "shasum": "" + }, + "require": { + "php": "^5.3.9 || ^7.0", + "symfony/filesystem": "^2.3 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8" + }, + "type": "library", + "autoload": { + "psr-0": { + "Neutron": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com" + } + ], + "description": "Symfony filesystem extension to handle temporary files", + "time": "2016-03-05T10:22:50+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "files": [ + "lib/bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2015-09-19T14:15:08+00:00" + }, + { + "name": "ocramius/proxy-manager", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/ProxyManager.git", + "reference": "57e9272ec0e8deccf09421596e0e2252df440e11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/57e9272ec0e8deccf09421596e0e2252df440e11", + "reference": "57e9272ec0e8deccf09421596e0e2252df440e11", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "zendframework/zend-code": ">2.2.5,<3.0" + }, + "require-dev": { + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "1.5.*" + }, + "suggest": { + "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", + "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", + "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)", + "zendframework/zend-stdlib": "To use the hydrator proxy", + "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "ProxyManager\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", + "homepage": "https://github.com/Ocramius/ProxyManager", + "keywords": [ + "aop", + "lazy loading", + "proxy", + "proxy pattern", + "service proxies" + ], + "time": "2015-08-09T04:28:19+00:00" + }, + { + "name": "pagerfanta/pagerfanta", + "version": "v1.0.4", + "source": { + "type": "git", + "url": "https://github.com/whiteoctober/Pagerfanta.git", + "reference": "f846c5e06bb66df659a688ea4734aab49de589d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/whiteoctober/Pagerfanta/zipball/f846c5e06bb66df659a688ea4734aab49de589d6", + "reference": "f846c5e06bb66df659a688ea4734aab49de589d6", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "doctrine/orm": "~2.3", + "doctrine/phpcr-odm": "1.*", + "jackalope/jackalope-doctrine-dbal": "1.*", + "jmikola/geojson": "~1.0", + "mandango/mandango": "~1.0@dev", + "mandango/mondator": "~1.0@dev", + "phpunit/phpunit": "~4 | ~5", + "propel/propel1": "~1.6", + "ruflin/elastica": "~1.3", + "solarium/solarium": "~3.1" + }, + "suggest": { + "doctrine/mongodb-odm": "To use the DoctrineODMMongoDBAdapter.", + "doctrine/orm": "To use the DoctrineORMAdapter.", + "doctrine/phpcr-odm": "To use the DoctrineODMPhpcrAdapter. >= 1.1.0", + "mandango/mandango": "To use the MandangoAdapter.", + "propel/propel1": "To use the PropelAdapter", + "solarium/solarium": "To use the SolariumAdapter." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pagerfanta\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Pablo Díez", + "email": "pablodip@gmail.com" + } + ], + "description": "Pagination for PHP 5.3", + "keywords": [ + "page", + "pagination", + "paginator", + "paging" + ], + "time": "2016-11-28T09:17:04+00:00" + }, + { + "name": "paragonie/random-lib", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/paragonie/RandomLib.git", + "reference": "b73a1cb8eae7a346824ccee42298046dedbf2415" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/RandomLib/zipball/b73a1cb8eae7a346824ccee42298046dedbf2415", + "reference": "b73a1cb8eae7a346824ccee42298046dedbf2415", + "shasum": "" + }, + "require": { + "ircmaxell/security-lib": "^1.1", + "paragonie/random_compat": "^2", + "paragonie/sodium_compat": "^1.3", + "php": ">=5.3.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.11", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^4.8 || >=5.0.0 <5.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "RandomLib": "lib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@ircmaxell.com", + "homepage": "http://blog.ircmaxell.com" + }, + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "A Library For Generating Secure Random Numbers", + "homepage": "https://github.com/ircmaxell/RandomLib", + "keywords": [ + "cryptography", + "random", + "random-numbers", + "random-strings" + ], + "time": "2017-10-06T23:34:21+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v2.0.4", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "reference": "a9b97968bcde1c4de2a5ec6cbd06a0f6c919b46e", + "shasum": "" + }, + "require": { + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "autoload": { + "files": [ + "lib/random.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "pseudorandom", + "random" + ], + "time": "2016-11-07T23:38:38+00:00" + }, + { + "name": "paragonie/sodium_compat", + "version": "v1.9.1", + "source": { + "type": "git", + "url": "https://github.com/paragonie/sodium_compat.git", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/87125d5b265f98c4d1b8d83a1f0726607c229421", + "reference": "87125d5b265f98c4d1b8d83a1f0726607c229421", + "shasum": "" + }, + "require": { + "paragonie/random_compat": ">=1", + "php": "^5.2.4|^5.3|^5.4|^5.5|^5.6|^7|^8" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + }, + "type": "library", + "autoload": { + "files": [ + "autoload.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "ISC" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com" + }, + { + "name": "Frank Denis", + "email": "jedisct1@pureftpd.org" + } + ], + "description": "Pure PHP implementation of libsodium; uses the PHP extension if it exists", + "keywords": [ + "Authentication", + "BLAKE2b", + "ChaCha20", + "ChaCha20-Poly1305", + "Chapoly", + "Curve25519", + "Ed25519", + "EdDSA", + "Edwards-curve Digital Signature Algorithm", + "Elliptic Curve Diffie-Hellman", + "Poly1305", + "Pure-PHP cryptography", + "RFC 7748", + "RFC 8032", + "Salpoly", + "Salsa20", + "X25519", + "XChaCha20-Poly1305", + "XSalsa20-Poly1305", + "Xchacha20", + "Xsalsa20", + "aead", + "cryptography", + "ecdh", + "elliptic curve", + "elliptic curve cryptography", + "encryption", + "libsodium", + "php", + "public-key cryptography", + "secret-key cryptography", + "side-channel resistant" + ], + "time": "2019-03-20T17:19:05+00:00" + }, + { + "name": "php-ffmpeg/php-ffmpeg", + "version": "0.5.1", + "source": { + "type": "git", + "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", + "reference": "c8949fe3df89edd7692368cc110a51a27971f28a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/c8949fe3df89edd7692368cc110a51a27971f28a", + "reference": "c8949fe3df89edd7692368cc110a51a27971f28a", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "doctrine/cache": "~1.0", + "evenement/evenement": "~1.0", + "neutron/temporary-filesystem": "~2.1, >=2.1.1", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "sami/sami": "~1.0", + "silex/silex": "~1.0" + }, + "suggest": { + "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5-dev" + } + }, + "autoload": { + "psr-0": { + "FFMpeg": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg", + "keywords": [ + "audio", + "audio processing", + "avconv", + "avprobe", + "ffmpeg", + "ffprobe", + "video", + "video processing" + ], + "time": "2014-08-26T08:46:56+00:00" + }, + { + "name": "php-mp4box/php-mp4box", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHP-MP4Box.git", + "reference": "baa466be3f6d0b46d27bc0e255e958a95cb7738c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHP-MP4Box/zipball/baa466be3f6d0b46d27bc0e255e958a95cb7738c", + "reference": "baa466be3f6d0b46d27bc0e255e958a95cb7738c", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "MP4Box": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "PHP MP4Box, an Object Oriented library for easy file conversion with MP4 Box", + "keywords": [ + "gpac", + "mp4box" + ], + "time": "2013-06-25T10:13:06+00:00" + }, + { + "name": "php-unoconv/php-unoconv", + "version": "0.3.1", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHP-Unoconv.git", + "reference": "8fa666972f6c13fe9703dfe894cd311a61f89f33" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHP-Unoconv/zipball/8fa666972f6c13fe9703dfe894cd311a61f89f33", + "reference": "8fa666972f6c13fe9703dfe894cd311a61f89f33", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "Unoconv": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "Unoconv PHP, an Object Oriented library for easy file conversion with LibreOffice's unoconv", + "keywords": [ + "unoconv" + ], + "time": "2019-09-16T09:54:30+00:00" + }, + { + "name": "php-xpdf/php-xpdf", + "version": "0.2.3", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHP-XPDF.git", + "reference": "d5e73960108704e0063b81ae777d01b8fb91ae08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHP-XPDF/zipball/d5e73960108704e0063b81ae777d01b8fb91ae08", + "reference": "d5e73960108704e0063b81ae777d01b8fb91ae08", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "sami/sami": "~1.0", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "XPDF": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "XPDF PHP, an Object Oriented library to manipulate XPDF", + "keywords": [ + "pdf", + "xpdf" + ], + "time": "2016-07-04T07:30:16+00:00" + }, + { + "name": "phpcollection/phpcollection", + "version": "0.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-collection.git", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-collection/zipball/f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "reference": "f2bcff45c0da7c27991bbc1f90f47c4b7fb434a6", + "shasum": "" + }, + "require": { + "phpoption/phpoption": "1.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-0": { + "PhpCollection": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "General-Purpose Collection Library for PHP", + "keywords": [ + "collection", + "list", + "map", + "sequence", + "set" + ], + "time": "2015-05-17T12:39:23+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "4.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-0": { + "PhpOption\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache2" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "time": "2015-07-25T16:39:46+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.7", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", + "reference": "f4b6a522dfa1fd1e477c9cfe5909d5b31f098c0b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "~4.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2017-10-23T05:04:54+00:00" + }, + { + "name": "pimple/pimple", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "reference": "2019c145fe393923f3441b23f29bbdfaa5c58c4d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple is a simple Dependency Injection Container for PHP 5.3", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2013-11-22T08:30:29+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "ramsey/uuid", + "version": "3.5.2", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "5677cfe02397dd6b58c861870dfaa5d9007d3954" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5677cfe02397dd6b58c861870dfaa5d9007d3954", + "reference": "5677cfe02397dd6b58c861870dfaa5d9007d3954", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0", + "php": ">=5.4" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "apigen/apigen": "^4.1", + "codeception/aspect-mock": "1.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.4", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|>=5.0 <5.4", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2016-11-22T19:21:44+00:00" + }, + { + "name": "react/promise", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/2760f3898b7e931aa71153852dcd48a75c9b95db", + "reference": "2760f3898b7e931aa71153852dcd48a75c9b95db", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2016-12-22T14:09:01+00:00" + }, + { + "name": "roave/security-advisories", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "0698207bf8a9bed212fdde2d8c7cdc77085660c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/0698207bf8a9bed212fdde2d8c7cdc77085660c4", + "reference": "0698207bf8a9bed212fdde2d8c7cdc77085660c4", + "shasum": "" + }, + "conflict": { + "adodb/adodb-php": "<5.20.6", + "amphp/artax": ">=2,<2.0.4|>0.7.1,<1.0.4", + "aws/aws-sdk-php": ">=3,<3.2.1", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", + "cakephp/cakephp": ">=3,<3.0.15|>=2,<2.4.99|>=2.5,<2.5.99|>=2.6,<2.6.12|>=1.3,<1.3.18|>=2.7,<2.7.6|>=3.1,<3.1.4", + "cartalyst/sentry": "<2.1", + "codeigniter/framework": "<=3.0.6", + "composer/composer": "<=1.0.0-alpha11", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/core": ">=2.11,<3.5.15", + "doctrine/annotations": ">=1,<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": ">=2,<2.4.3|>=2.5,<2.5.1", + "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2", + "doctrine/doctrine-bundle": "<1.5.2", + "doctrine/doctrine-module": "<=0.7.1", + "doctrine/mongodb-odm": ">=1,<1.0.2", + "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1", + "dompdf/dompdf": ">=0.6,<0.6.2", + "drupal/core": ">=8,<8.2.3", + "drupal/drupal": ">=8,<8.2.3", + "firebase/php-jwt": "<2", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "gregwar/rst": "<1.0.3", + "guzzlehttp/guzzle": ">=6,<6.2.1|>=4.0.0-rc2,<4.2.4|>=5,<5.3.1", + "illuminate/auth": ">=4,<4.0.99|>=4.1,<4.1.26", + "illuminate/database": ">=4,<4.0.99|>=4.1,<4.1.29", + "joomla/session": "<1.3.1", + "laravel/framework": ">=4,<4.0.99|>=4.1,<4.1.29", + "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "magento/magento2ce": ">=2,<2.2", + "monolog/monolog": ">=1.8,<1.12", + "namshi/jose": "<2.2", + "oro/crm": ">=1.7,<1.7.4", + "oro/platform": ">=1.7,<1.7.4", + "phpmailer/phpmailer": ">=5,<5.2.22", + "pusher/pusher-php-server": "<2.2.1", + "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", + "shopware/shopware": "<4.4|>=5,<5.2.15", + "silverstripe/cms": ">=3.1,<3.1.11|>=3,<=3.0.11", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": ">=3,<3.3", + "silverstripe/userforms": "<3", + "simplesamlphp/saml2": "<1.8.1|>=1.9,<1.9.1|>=1.10,<1.10.3|>=2,<2.3.3", + "simplesamlphp/simplesamlphp": "<1.14.11", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "socalnick/scn-social-auth": "<1.15.2", + "swiftmailer/swiftmailer": ">=4,<5.4.5", + "symfony/dependency-injection": ">=2,<2.0.17", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.7", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2", + "symfony/http-foundation": ">=2,<2.3.27|>=2.4,<2.5.11|>=2.6,<2.6.6", + "symfony/http-kernel": ">=2,<2.3.29|>=2.4,<2.5.12|>=2.6,<2.6.8", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2.3,<2.3.37|>=2.4,<2.6.13|>=2.7,<2.7.9|>=2,<2.0.25|>=2.1,<2.1.13|>=2.2,<2.2.9", + "symfony/security-core": ">=2.8,<2.8.6|>=3,<3.0.6|>=2.4,<2.6.13|>=2.7,<2.7.9", + "symfony/security-http": ">=2.4,<2.7.13|>=2.3,<2.3.41|>=2.8,<2.8.6|>=3,<3.0.6", + "symfony/serializer": ">=2,<2.0.11", + "symfony/symfony": ">=2,<2.3.41|>=2.4,<2.7.13|>=2.8,<2.8.6|>=3,<3.0.6", + "symfony/translation": ">=2,<2.0.17", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1.0-beta1,<2.1.3|>=2.1,<2.1.2", + "twig/twig": "<1.20", + "typo3/cms": ">=6.2,<6.2.30|>=8,<8.4.1|>=7,<7.6.13", + "typo3/flow": ">=2.3,<2.3.16|>=3,<3.0.10|>=3.1,<3.1.7|>=3.2,<3.2.7|>=3.3,<3.3.5|>=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4", + "willdurand/js-translation-bundle": "<2.1.1", + "yiisoft/yii": ">=1.1.14,<1.1.15", + "yiisoft/yii2": "<2.0.5", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.4", + "yiisoft/yii2-gii": "<2.0.4", + "yiisoft/yii2-jui": "<2.0.4", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", + "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", + "zendframework/zend-diactoros": ">=1,<1.0.4", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.3,<2.3.8|>=2.4,<2.4.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": ">=2,<2.4.11|>=2.5,<2.5.1", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": ">=2,<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "time": "2017-01-24T18:32:04+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "19495c181d6d53a0a13414154e52817e3b504189" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/19495c181d6d53a0a13414154e52817e3b504189", + "reference": "19495c181d6d53a0a13414154e52817e3b504189", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2016-11-14T17:59:58+00:00" + }, + { + "name": "silex/silex", + "version": "v1.3.5", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Silex.git", + "reference": "374c7e04040a6f781c90f7d746726a5daa78e783" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Silex/zipball/374c7e04040a6f781c90f7d746726a5daa78e783", + "reference": "374c7e04040a6f781c90f7d746726a5daa78e783", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "pimple/pimple": "~1.0", + "symfony/event-dispatcher": "~2.3|3.0.*", + "symfony/http-foundation": "~2.3|3.0.*", + "symfony/http-kernel": "~2.3|3.0.*", + "symfony/routing": "~2.3|3.0.*" + }, + "require-dev": { + "doctrine/dbal": "~2.2", + "monolog/monolog": "^1.4.1", + "swiftmailer/swiftmailer": "~5", + "symfony/browser-kit": "~2.3|3.0.*", + "symfony/config": "~2.3|3.0.*", + "symfony/css-selector": "~2.3|3.0.*", + "symfony/debug": "~2.3|3.0.*", + "symfony/dom-crawler": "~2.3|3.0.*", + "symfony/finder": "~2.3|3.0.*", + "symfony/form": "~2.3|3.0.*", + "symfony/locale": "~2.3|3.0.*", + "symfony/monolog-bridge": "~2.3|3.0.*", + "symfony/options-resolver": "~2.3|3.0.*", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.3|3.0.*", + "symfony/security": "~2.3|3.0.*", + "symfony/serializer": "~2.3|3.0.*", + "symfony/translation": "~2.3|3.0.*", + "symfony/twig-bridge": "~2.3|3.0.*", + "symfony/validator": "~2.3|3.0.*", + "twig/twig": "~1.8|~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Silex\\": "src/Silex" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "The PHP micro-framework based on the Symfony Components", + "homepage": "http://silex.sensiolabs.org", + "keywords": [ + "microframework" + ], + "abandoned": "symfony/flex", + "time": "2016-01-06T14:59:35+00:00" + }, + { + "name": "silex/web-profiler", + "version": "v1.0.8", + "target-dir": "Silex/Provider", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Silex-WebProfiler.git", + "reference": "3b767e6c9006a542cac737474f02671bdf2909cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Silex-WebProfiler/zipball/3b767e6c9006a542cac737474f02671bdf2909cb", + "reference": "3b767e6c9006a542cac737474f02671bdf2909cb", + "shasum": "" + }, + "require": { + "silex/silex": "~1.1", + "symfony/stopwatch": "~2.2", + "symfony/web-profiler-bundle": "~2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Silex\\Provider\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "A WebProfiler for Silex", + "homepage": "http://silex.sensiolabs.org/", + "abandoned": "symfony/web-profiler-bundle", + "time": "2016-01-10T11:39:13+00:00" + }, + { + "name": "simple-bus/doctrine-orm-bridge", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/SimpleBus/DoctrineORMBridge.git", + "reference": "46df998f26940d9525f8e35c40641328c679dbfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SimpleBus/DoctrineORMBridge/zipball/46df998f26940d9525f8e35c40641328c679dbfe", + "reference": "46df998f26940d9525f8e35c40641328c679dbfe", + "shasum": "" + }, + "require": { + "beberlei/assert": "~2.0", + "doctrine/orm": "~2.2", + "php": ">=5.4", + "simple-bus/message-bus": "~2.0" + }, + "require-dev": { + "matthiasnoback/doctrine-orm-test-service-provider": "~2.0", + "phpunit/phpunit": "~4.5", + "satooshi/php-coveralls": "~0.6" + }, + "suggest": { + "simple-bus/symfony-bridge": "Bridge for using command buses and event buses with Symfony" + }, + "type": "library", + "autoload": { + "psr-4": { + "SimpleBus\\DoctrineORMBridge\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Noback", + "email": "matthiasnoback@gmail.com", + "homepage": "http://php-and-symfony.matthiasnoback.nl" + } + ], + "description": "Doctrine ORM bridge for using command and event buses", + "homepage": "http://github.com/SimpleBus/DoctrineORMBridge", + "keywords": [ + "command bus", + "doctrine", + "event bus" + ], + "time": "2015-04-29T12:27:27+00:00" + }, + { + "name": "simple-bus/jms-serializer-bridge", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/SimpleBus/JMSSerializerBridge.git", + "reference": "6292dc9537311100725f5b926d434b0495c03fad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SimpleBus/JMSSerializerBridge/zipball/6292dc9537311100725f5b926d434b0495c03fad", + "reference": "6292dc9537311100725f5b926d434b0495c03fad", + "shasum": "" + }, + "require": { + "jms/serializer": "~0.12||~1.0", + "php": ">=5.4", + "simple-bus/serialization": ">=1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "bundle", + "autoload": { + "psr-4": { + "SimpleBus\\JMSSerializerBridge\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Noback", + "email": "matthiasnoback@gmail.com", + "homepage": "http://php-and-symfony.matthiasnoback.nl" + } + ], + "description": "Bridge for using JMSSerializer as message serializer for SimpleBus/Asynchronous", + "homepage": "http://github.com/SimpleBus/JMSSerializerBridge", + "keywords": [ + "asynchronous", + "message", + "serialization" + ], + "time": "2015-07-29T07:48:42+00:00" + }, + { + "name": "simple-bus/message-bus", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/SimpleBus/MessageBus.git", + "reference": "723bf20b93e17e9e87e83032ec21d8b2452328cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SimpleBus/MessageBus/zipball/723bf20b93e17e9e87e83032ec21d8b2452328cf", + "reference": "723bf20b93e17e9e87e83032ec21d8b2452328cf", + "shasum": "" + }, + "require": { + "beberlei/assert": "~2.0", + "php": ">=5.4", + "psr/log": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "SimpleBus\\Message\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Noback", + "email": "matthiasnoback@gmail.com", + "homepage": "http://php-and-symfony.matthiasnoback.nl" + } + ], + "description": "Generic classes and interfaces for messages and message buses", + "homepage": "http://github.com/SimpleBus/MessageBus", + "keywords": [ + "command bus", + "event bus", + "message", + "message bus" + ], + "time": "2016-02-12T08:35:53+00:00" + }, + { + "name": "simple-bus/serialization", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/SimpleBus/Serialization.git", + "reference": "df7a5704d4a9c3057184be09ce8dc6d442785618" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SimpleBus/Serialization/zipball/df7a5704d4a9c3057184be09ce8dc6d442785618", + "reference": "df7a5704d4a9c3057184be09ce8dc6d442785618", + "shasum": "" + }, + "require": { + "beberlei/assert": "~2.0", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "SimpleBus\\Serialization\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthias Noback", + "email": "matthiasnoback@gmail.com", + "homepage": "http://php-and-symfony.matthiasnoback.nl" + } + ], + "description": "Generic classes and interfaces for serializing messages", + "homepage": "http://github.com/SimpleBus/Serialization", + "keywords": [ + "SimpleBus", + "messages", + "serialization" + ], + "time": "2015-05-08T13:34:17+00:00" + }, + { + "name": "sorien/silex-dbal-profiler", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/Sorien/silex-dbal-profiler.git", + "reference": "1df811da6cc2eb4abec4562e8000ca9eb998f7dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Sorien/silex-dbal-profiler/zipball/1df811da6cc2eb4abec4562e8000ca9eb998f7dd", + "reference": "1df811da6cc2eb4abec4562e8000ca9eb998f7dd", + "shasum": "" + }, + "require": { + "silex/silex": "~1.0", + "silex/web-profiler": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Sorien": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stanislav Turza", + "role": "Developer" + } + ], + "description": "Doctrine DBAL Profiler for Silex", + "keywords": [ + "dbal", + "doctrine", + "profiler", + "silex" + ], + "abandoned": true, + "time": "2016-10-26T11:08:02+00:00" + }, + { + "name": "sorien/silex-pimple-dumper", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/Sorien/silex-pimple-dumper.git", + "reference": "867b47181aab86b79cc78bad953419c1a327b2c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Sorien/silex-pimple-dumper/zipball/867b47181aab86b79cc78bad953419c1a327b2c6", + "reference": "867b47181aab86b79cc78bad953419c1a327b2c6", + "shasum": "" + }, + "require-dev": { + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Sorien\\Provider\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stanislav Turza", + "role": "Developer" + } + ], + "description": "Pimple File Dumper - Helper Provider for Silex Idea Plugin", + "keywords": [ + "dumper", + "idea", + "plugin", + "silex" + ], + "abandoned": true, + "time": "2015-11-11T07:16:28+00:00" + }, + { + "name": "swftools/swftools", + "version": "0.3.1", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/PHPSwftools.git", + "reference": "5a0fefbd5a518c9b1ec2ba247640aadbab4cc396" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/PHPSwftools/zipball/5a0fefbd5a518c9b1ec2ba247640aadbab4cc396", + "reference": "5a0fefbd5a518c9b1ec2ba247640aadbab4cc396", + "shasum": "" + }, + "require": { + "alchemy/binary-driver": "~1.5", + "php": ">=5.3.3", + "pimple/pimple": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "sami/sami": "~1.0", + "silex/silex": "~1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "SwfTools": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Neutron", + "email": "imprec@gmail.com", + "homepage": "http://www.lickmychip.com/" + }, + { + "name": "Phraseanet Team", + "email": "info@alchemy.fr", + "homepage": "http://www.phraseanet.com/" + } + ], + "description": "PHP SwfTools", + "keywords": [ + "adobe flash", + "flash", + "swf" + ], + "time": "2013-07-03T13:11:36+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.4.5", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "cd142238a339459b10da3d8234220963f392540c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c", + "reference": "cd142238a339459b10da3d8234220963f392540c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "http://swiftmailer.org", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2016-12-29T10:02:40+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "5d4474f447403c3348e37b70acc2b95475b7befa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/5d4474f447403c3348e37b70acc2b95475b7befa", + "reference": "5d4474f447403c3348e37b70acc2b95475b7befa", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-intl-icu", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-icu.git", + "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/2d6e2b20d457603eefb6e614286c22efca30fdb4", + "reference": "2d6e2b20d457603eefb6e614286c22efca30fdb4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/intl": "~2.3|~3.0" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's ICU-related data and classes", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "icu", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-php54", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php54.git", + "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php54/zipball/90e085822963fdcc9d1c5b73deb3d2e5783b16a0", + "reference": "90e085822963fdcc9d1c5b73deb3d2e5783b16a0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php54\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-php55", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "03e3f0350bca2220e3623a0e340eef194405fc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/03e3f0350bca2220e3623a0e340eef194405fc67", + "reference": "03e3f0350bca2220e3623a0e340eef194405fc67", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "reference": "1dd42b9b89556f18092f3d1ada22cb05ac85383c", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "reference": "13ce343935f0f91ca89605a2f6ca6f5c2f3faac2", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/746bce0fca664ac0a575e465f65c6643faddf7fb", + "reference": "746bce0fca664ac0a575e465f65c6643faddf7fb", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + }, + { + "name": "symfony/security-acl", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/security-acl.git", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/security-acl/zipball/053b49bf4aa333a392c83296855989bcf88ddad1", + "reference": "053b49bf4aa333a392c83296855989bcf88ddad1", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/security-core": "~2.8|~3.0" + }, + "require-dev": { + "doctrine/common": "~2.2", + "doctrine/dbal": "~2.2", + "psr/log": "~1.0", + "symfony/phpunit-bridge": "~2.8|~3.0" + }, + "suggest": { + "doctrine/dbal": "For using the built-in ACL implementation", + "symfony/class-loader": "For using the ACL generateSql script", + "symfony/finder": "For using the ACL generateSql script" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Security\\Acl\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Security Component - ACL (Access Control List)", + "homepage": "https://symfony.com", + "time": "2015-12-28T09:39:46+00:00" + }, + { + "name": "symfony/symfony", + "version": "v2.8.16", + "source": { + "type": "git", + "url": "https://github.com/symfony/symfony.git", + "reference": "9fef72a3ab561c4bfa703a70369db028dec387d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/symfony/zipball/9fef72a3ab561c4bfa703a70369db028dec387d2", + "reference": "9fef72a3ab561c4bfa703a70369db028dec387d2", + "shasum": "" + }, + "require": { + "doctrine/common": "~2.4", + "php": ">=5.3.9", + "psr/log": "~1.0", + "symfony/polyfill-apcu": "~1.1", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php54": "~1.0", + "symfony/polyfill-php55": "~1.0", + "symfony/polyfill-php56": "~1.0", + "symfony/polyfill-php70": "~1.0", + "symfony/polyfill-util": "~1.0", + "symfony/security-acl": "~2.7|~3.0.0", + "twig/twig": "~1.28|~2.0" + }, + "conflict": { + "phpdocumentor/reflection": "<1.0.7" + }, + "replace": { + "symfony/asset": "self.version", + "symfony/browser-kit": "self.version", + "symfony/class-loader": "self.version", + "symfony/config": "self.version", + "symfony/console": "self.version", + "symfony/css-selector": "self.version", + "symfony/debug": "self.version", + "symfony/debug-bundle": "self.version", + "symfony/dependency-injection": "self.version", + "symfony/doctrine-bridge": "self.version", + "symfony/dom-crawler": "self.version", + "symfony/event-dispatcher": "self.version", + "symfony/expression-language": "self.version", + "symfony/filesystem": "self.version", + "symfony/finder": "self.version", + "symfony/form": "self.version", + "symfony/framework-bundle": "self.version", + "symfony/http-foundation": "self.version", + "symfony/http-kernel": "self.version", + "symfony/intl": "self.version", + "symfony/ldap": "self.version", + "symfony/locale": "self.version", + "symfony/monolog-bridge": "self.version", + "symfony/options-resolver": "self.version", + "symfony/process": "self.version", + "symfony/property-access": "self.version", + "symfony/property-info": "self.version", + "symfony/proxy-manager-bridge": "self.version", + "symfony/routing": "self.version", + "symfony/security": "self.version", + "symfony/security-bundle": "self.version", + "symfony/security-core": "self.version", + "symfony/security-csrf": "self.version", + "symfony/security-guard": "self.version", + "symfony/security-http": "self.version", + "symfony/serializer": "self.version", + "symfony/stopwatch": "self.version", + "symfony/swiftmailer-bridge": "self.version", + "symfony/templating": "self.version", + "symfony/translation": "self.version", + "symfony/twig-bridge": "self.version", + "symfony/twig-bundle": "self.version", + "symfony/validator": "self.version", + "symfony/var-dumper": "self.version", + "symfony/web-profiler-bundle": "self.version", + "symfony/yaml": "self.version" + }, + "require-dev": { + "doctrine/data-fixtures": "1.0.*", + "doctrine/dbal": "~2.4", + "doctrine/doctrine-bundle": "~1.2", + "doctrine/orm": "~2.4,>=2.4.5", + "egulias/email-validator": "~1.2,>=1.2.1", + "monolog/monolog": "~1.11", + "ocramius/proxy-manager": "~0.4|~1.0|~2.0", + "phpdocumentor/reflection": "^1.0.7", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Doctrine\\": "src/Symfony/Bridge/Doctrine/", + "Symfony\\Bridge\\Monolog\\": "src/Symfony/Bridge/Monolog/", + "Symfony\\Bridge\\ProxyManager\\": "src/Symfony/Bridge/ProxyManager/", + "Symfony\\Bridge\\Swiftmailer\\": "src/Symfony/Bridge/Swiftmailer/", + "Symfony\\Bridge\\Twig\\": "src/Symfony/Bridge/Twig/", + "Symfony\\Bundle\\": "src/Symfony/Bundle/", + "Symfony\\Component\\": "src/Symfony/Component/" + }, + "classmap": [ + "src/Symfony/Component/Intl/Resources/stubs" + ], + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "The Symfony PHP framework", + "homepage": "https://symfony.com", + "keywords": [ + "framework" + ], + "time": "2017-01-12T20:27:46+00:00" + }, + { + "name": "themattharris/tmhoauth", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/themattharris/tmhOAuth.git", + "reference": "455552d6c57549632644b6c9ac9204766be2b5ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/themattharris/tmhOAuth/zipball/455552d6c57549632644b6c9ac9204766be2b5ee", + "reference": "455552d6c57549632644b6c9ac9204766be2b5ee", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "tmhOAuth": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "themattharris", + "email": "matt@themattharris.com", + "role": "Developer" + } + ], + "description": "An OAuth library written in PHP by @themattharris", + "keywords": [ + "oauth", + "twitter" + ], + "time": "2014-08-06T22:29:35+00:00" + }, + { + "name": "twig/extensions", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig-extensions.git", + "reference": "f0bb8431c8691f5a39f1017d9a5967a082bf01ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig-extensions/zipball/f0bb8431c8691f5a39f1017d9a5967a082bf01ff", + "reference": "f0bb8431c8691f5a39f1017d9a5967a082bf01ff", + "shasum": "" + }, + "require": { + "twig/twig": "~1.20|~2.0" + }, + "require-dev": { + "symfony/translation": "~2.3" + }, + "suggest": { + "symfony/translation": "Allow the time_diff output to be translated" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_Extensions_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Common additional features for Twig that do not directly belong in core", + "homepage": "http://twig.sensiolabs.org/doc/extensions/index.html", + "keywords": [ + "i18n", + "text" + ], + "time": "2016-10-25T17:34:14+00:00" + }, + { + "name": "twig/twig", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ddc9e3e20ee9c0b6908f401ac8353635b750eca7", + "reference": "ddc9e3e20ee9c0b6908f401ac8353635b750eca7", + "shasum": "" + }, + "require": { + "php": ">=5.2.7" + }, + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.31-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2017-01-11T19:36:15+00:00" + }, + { + "name": "vierbergenlars/php-semver", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/vierbergenlars/php-semver.git", + "reference": "6b16f72b8c2d3aa00368f9fa612b2218a96245fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vierbergenlars/php-semver/zipball/6b16f72b8c2d3aa00368f9fa612b2218a96245fc", + "reference": "6b16f72b8c2d3aa00368f9fa612b2218a96245fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "vierbergenlars/simpletest": "1.1.*" + }, + "bin": [ + "bin/semver", + "bin/update-versions" + ], + "type": "library", + "autoload": { + "psr-0": { + "vierbergenlars\\SemVer": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Vierbergen", + "email": "vierbergenlars@gmail.com" + } + ], + "description": "The Semantic Versioner for PHP", + "keywords": [ + "semantic", + "semver", + "versioning" + ], + "time": "2013-09-20T10:41:27+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + }, + { + "name": "webmozart/json", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/webmozart/json.git", + "reference": "a1fb3da904b8364e3db47eed68f76bfb6cd0031a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/json/zipball/a1fb3da904b8364e3db47eed68f76bfb6cd0031a", + "reference": "a1fb3da904b8364e3db47eed68f76bfb6cd0031a", + "shasum": "" + }, + "require": { + "justinrainbow/json-schema": "^1.6", + "php": "^5.3.3|^7.0", + "seld/jsonlint": "^1.0", + "webmozart/path-util": "^2.3" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1", + "symfony/filesystem": "^2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust JSON decoder/encoder with support for schema validation.", + "time": "2016-01-14T12:11:46+00:00" + }, + { + "name": "webmozart/path-util", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/path-util.git", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "webmozart/assert": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\PathUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.", + "time": "2015-12-17T08:42:14+00:00" + }, + { + "name": "willdurand/negotiation", + "version": "v2.2.1", + "source": { + "type": "git", + "url": "https://github.com/willdurand/Negotiation.git", + "reference": "1f210db45723b21edd69f39794662b8d64656b93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/1f210db45723b21edd69f39794662b8d64656b93", + "reference": "1f210db45723b21edd69f39794662b8d64656b93", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2-dev" + } + }, + "autoload": { + "psr-4": { + "Negotiation\\": "src/Negotiation" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "William Durand", + "email": "will+git@drnd.me" + } + ], + "description": "Content Negotiation tools for PHP provided as a standalone library.", + "homepage": "http://williamdurand.fr/Negotiation/", + "keywords": [ + "accept", + "content", + "format", + "header", + "negotiation" + ], + "time": "2016-10-14T09:17:47+00:00" + }, + { + "name": "zend/gdata", + "version": "1.12.1", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/gdata.git", + "reference": "4ae96d26cec159d74ced57c89ebdcde754ece35d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/gdata/zipball/4ae96d26cec159d74ced57c89ebdcde754ece35d", + "reference": "4ae96d26cec159d74ced57c89ebdcde754ece35d", + "shasum": "" + }, + "require": { + "php": ">5.2.4" + }, + "type": "library", + "autoload": { + "psr-0": { + "Zend_": "library" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "New BSD" + ], + "authors": [ + { + "name": "Zend Contributors", + "homepage": "http://framework.zend.com/community/contributors" + } + ], + "description": "The Google Data APIs are a set of web services for read/write access to applications hosted by Google", + "homepage": "http://framework.zend.com/download/webservices", + "keywords": [ + "gdata", + "zend" + ], + "time": "2013-01-30T15:31:21+00:00" + }, + { + "name": "zendframework/zend-code", + "version": "2.6.3", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-code.git", + "reference": "95033f061b083e16cdee60530ec260d7d628b887" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-code/zipball/95033f061b083e16cdee60530ec260d7d628b887", + "reference": "95033f061b083e16cdee60530ec260d7d628b887", + "shasum": "" + }, + "require": { + "php": "^5.5 || 7.0.0 - 7.0.4 || ^7.0.6", + "zendframework/zend-eventmanager": "^2.6 || ^3.0" + }, + "require-dev": { + "doctrine/annotations": "~1.0", + "fabpot/php-cs-fixer": "1.7.*", + "phpunit/phpunit": "^4.8.21", + "zendframework/zend-stdlib": "^2.7 || ^3.0" + }, + "suggest": { + "doctrine/annotations": "Doctrine\\Common\\Annotations >=1.0 for annotation features", + "zendframework/zend-stdlib": "Zend\\Stdlib component" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev", + "dev-develop": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\Code\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "provides facilities to generate arbitrary code using an object oriented interface", + "homepage": "https://github.com/zendframework/zend-code", + "keywords": [ + "code", + "zf2" + ], + "abandoned": "laminas/laminas-code", + "time": "2016-04-20T17:26:42+00:00" + }, + { + "name": "zendframework/zend-eventmanager", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zend-eventmanager.git", + "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/5c80bdee0e952be112dcec0968bad770082c3a6e", + "reference": "5c80bdee0e952be112dcec0968bad770082c3a6e", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0" + }, + "require-dev": { + "athletic/athletic": "^0.1", + "container-interop/container-interop": "^1.1.0", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "^2.0", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0" + }, + "suggest": { + "container-interop/container-interop": "^1.1.0, to use the lazy listeners feature", + "zendframework/zend-stdlib": "^2.7.3 || ^3.0, to use the FilterChain feature" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev", + "dev-develop": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Zend\\EventManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Trigger and listen to events within a PHP application", + "homepage": "https://github.com/zendframework/zend-eventmanager", + "keywords": [ + "event", + "eventmanager", + "events", + "zf2" + ], + "abandoned": "laminas/laminas-eventmanager", + "time": "2016-02-18T20:53:00+00:00" + } + ], + "packages-dev": [ + { + "name": "mikey179/vfsStream", + "version": "v1.6.4", + "source": { + "type": "git", + "url": "https://github.com/bovigo/vfsStream.git", + "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/0247f57b2245e8ad2e689d7cee754b45fbabd592", + "reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "org\\bovigo\\vfs\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Frank Kleine", + "homepage": "http://frankkleine.de/", + "role": "Developer" + } + ], + "description": "Virtual file system to mock the real file system in unit tests.", + "homepage": "http://vfs.bovigo.org/", + "time": "2016-07-18T14:02:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "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-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, + { + "name": "phpexiftool/exiftool", + "version": "10.10", + "source": { + "type": "git", + "url": "https://github.com/alchemy-fr/exiftool.git", + "reference": "0833cab894c890353192a83011428525a318bedf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/alchemy-fr/exiftool/zipball/0833cab894c890353192a83011428525a318bedf", + "reference": "0833cab894c890353192a83011428525a318bedf", + "shasum": "" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Perl Licensing" + ], + "authors": [ + { + "name": "Phil Harvey", + "email": "phil@owl.phy.queensu.ca", + "homepage": "http://www.sno.phy.queensu.ca/~phil/exiftool/" + } + ], + "description": "Exiftool is a library for reading, writing and editing meta information. This package is not PHP, but required for the main PHP driver : PHP Exiftool", + "keywords": [ + "exiftool", + "metadatas" + ], + "time": "2016-01-25T11:10:14+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-11-21T14:58:47+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12T18:03:57+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2016-11-15T14:06:22+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.34", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "7eb45205d27edd94bd2b3614085ea158bd1e2bca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7eb45205d27edd94bd2b3614085ea158bd1e2bca", + "reference": "7eb45205d27edd94bd2b3614085ea158bd1e2bca", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-01-26T16:15:36+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "abandoned": true, + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11T19:50:13+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + } + ], + "aliases": [ + { + "alias": "1.6.1", + "alias_normalized": "1.6.1.0", + "version": "2.0.3.0", + "package": "justinrainbow/json-schema" + }, + { + "alias": "0.13.0", + "alias_normalized": "0.13.0.0", + "version": "dev-webgalleries", + "package": "league/fractal" + } + ], + "minimum-stability": "stable", + "stability-flags": { + "alchemy/task-manager": 20, + "doctrine/cache": 20, + "imagine/imagine": 20, + "jms/translation-bundle": 20, + "league/fractal": 20, + "neutron/process-manager": 20, + "roave/security-advisories": 20, + "willdurand/negotiation": 15 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.9", + "ext-intl": "*" + }, + "platform-dev": [] +} diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile new file mode 100644 index 0000000000..7330ff91c0 --- /dev/null +++ b/docker/db/Dockerfile @@ -0,0 +1,12 @@ +FROM mariadb:10.4.5 + +RUN apt-get update && \ + apt-get install -y \ + gettext \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/ + +ADD ./docker/ / + +ENTRYPOINT ["/phraseanet-entrypoint.sh"] +CMD ["mysqld","--sql_mode="] diff --git a/docker/db/docker/custom.cnf b/docker/db/docker/custom.cnf new file mode 100644 index 0000000000..850a93e19c --- /dev/null +++ b/docker/db/docker/custom.cnf @@ -0,0 +1,3 @@ +[mysqld] + +max_allowed_packet=$MYSQL_MAX_ALLOWED_PACKET diff --git a/docker/db/docker/docker-entrypoint-initdb.d/01-create_databases.sql b/docker/db/docker/docker-entrypoint-initdb.d/01-create_databases.sql new file mode 100644 index 0000000000..a868d9f35c --- /dev/null +++ b/docker/db/docker/docker-entrypoint-initdb.d/01-create_databases.sql @@ -0,0 +1,5 @@ +CREATE DATABASE ab_master CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +CREATE DATABASE db_databox1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +CREATE DATABASE db_unitTest CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +CREATE DATABASE db_dataset1 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +CREATE DATABASE db_dataset2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; \ No newline at end of file diff --git a/docker/db/docker/phraseanet-entrypoint.sh b/docker/db/docker/phraseanet-entrypoint.sh new file mode 100755 index 0000000000..a12ab6629e --- /dev/null +++ b/docker/db/docker/phraseanet-entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -eo pipefail +shopt -s nullglob + +envsubst < /custom.cnf > /etc/mysql/conf.d/custom.cnf +docker-entrypoint.sh "$@" diff --git a/docker/elasticsearch/Dockerfile b/docker/elasticsearch/Dockerfile new file mode 100644 index 0000000000..5847b7448f --- /dev/null +++ b/docker/elasticsearch/Dockerfile @@ -0,0 +1,3 @@ +FROM elasticsearch:2.4 + +RUN /usr/share/elasticsearch/bin/plugin install analysis-icu diff --git a/docker/nginx/boot.sh b/docker/nginx/boot.sh deleted file mode 100755 index 49e6b8a3b7..0000000000 --- a/docker/nginx/boot.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -cat nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/nginx.conf -nginx -g "daemon off;" diff --git a/docker/nginx/nginx.conf.sample b/docker/nginx/nginx.conf.sample deleted file mode 100644 index c1f0150c1e..0000000000 --- a/docker/nginx/nginx.conf.sample +++ /dev/null @@ -1,85 +0,0 @@ -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; -} - -http { - include /etc/nginx/mime.types; - default_type application/octet-stream; - server_tokens off; - - 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 /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; - } - - server { - listen 80; - server_name localhost; - error_log on; - access_log on; - root /var/alchemy/Phraseanet/www; - - index index.php; - client_max_body_size $MAX_BODY_SIZE; - - location /api { - rewrite ^(.*)$ /api.php/$1 last; - } - - 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; - } - } -} diff --git a/docker/nginx/root/entrypoint.sh b/docker/nginx/root/entrypoint.sh new file mode 100755 index 0000000000..e46ea44296 --- /dev/null +++ b/docker/nginx/root/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -xe + +cat /nginx.conf.sample | sed "s/\$MAX_BODY_SIZE/$MAX_BODY_SIZE/g" > /etc/nginx/conf.d/default.conf + +exec "$@" diff --git a/docker/nginx/root/etc/nginx/nginx.conf b/docker/nginx/root/etc/nginx/nginx.conf new file mode 100755 index 0000000000..71a94ee98f --- /dev/null +++ b/docker/nginx/root/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/root/nginx.conf.sample b/docker/nginx/root/nginx.conf.sample new file mode 100644 index 0000000000..ad015e7c5a --- /dev/null +++ b/docker/nginx/root/nginx.conf.sample @@ -0,0 +1,39 @@ +upstream backend { + server phraseanet:9000; +} + +server { + listen 80; + root /var/alchemy/Phraseanet/www; + + index index.php; + client_max_body_size $MAX_BODY_SIZE; + + location /api { + rewrite ^(.*)$ /api.php/$1 last; + } + + 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; + } +} diff --git a/docker/phraseanet-debug/entrypoint.sh b/docker/phraseanet-debug/entrypoint.sh deleted file mode 100644 index a7a9f915b1..0000000000 --- a/docker/phraseanet-debug/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -if [ ! -z ${DOCKER_XDEBUG_ENABLED} ]; then - . usr-bin/docker-xdebug-enable -fi - -exec "$@" diff --git a/docker/phraseanet-debug/usr/bin/docker-get-host-ip b/docker/phraseanet-debug/usr/bin/docker-get-host-ip deleted file mode 100644 index 752c1566ea..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-get-host-ip +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -/sbin/ip route|awk '/default/ { print $3 }' -# TODO support MacOS & Windows host IP diff --git a/docker/phraseanet-debug/usr/bin/docker-xdebug-disable b/docker/phraseanet-debug/usr/bin/docker-xdebug-disable deleted file mode 100644 index 7d9de59329..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-xdebug-disable +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -unset HOST_IP -unset XDEBUG_CONFIG -unset XDEBUG_REMOTE_HOST diff --git a/docker/phraseanet-debug/usr/bin/docker-xdebug-enable b/docker/phraseanet-debug/usr/bin/docker-xdebug-enable deleted file mode 100644 index 24b7fcd97b..0000000000 --- a/docker/phraseanet-debug/usr/bin/docker-xdebug-enable +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -HOST_IP=$(docker-get-host-ip); - -export HOST_IP -export XDEBUG_CONFIG="remote_enable=1 remote_host=${HOST_IP} idekey=PHPSTORM"; -export XDEBUG_REMOTE_HOST="${HOST_IP}"; diff --git a/docker/phraseanet/auto-install.sh b/docker/phraseanet/auto-install.sh index 4028e5a614..c408f4aafa 100755 --- a/docker/phraseanet/auto-install.sh +++ b/docker/phraseanet/auto-install.sh @@ -2,6 +2,16 @@ set -xe +if [ -z "$INSTALL_ACCOUNT_EMAIL" ]; then + echo "INSTALL_ACCOUNT_EMAIL var is not set." + exit 1 +fi + +if [ -z "$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 \ @@ -17,28 +27,33 @@ set -xe /var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.host elasticsearch /var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.minScore 2 -/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.base_aggregate_limit 10 -/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.collection_aggregate_limit 10 -/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.doctype_aggregate_limit 10 +/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.minScore 2 +/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._base.limit 10 +/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._collection.limit 10 +/var/alchemy/Phraseanet/bin/setup system:config set main.search-engine.options.facets._doctype.limit 10 ## Redis /var/alchemy/Phraseanet/bin/setup system:config set main.cache.options.host redis /var/alchemy/Phraseanet/bin/setup system:config set main.cache.options.port 6379 -/var/alchemy/Phraseanet/bin/setup system:config set main.cache.options.domain $INSTALL_SERVER_NAME +/var/alchemy/Phraseanet/bin/setup system:config set main.cache.options.namespace $INSTALL_SERVER_NAME /var/alchemy/Phraseanet/bin/setup system:config set main.cache.type redis -# RabbitMQ - -bin/setup system:config set rabbitmq.server.host rabbitmq -bin/setup system:config set rabbitmq.server.port 5672 -bin/setup system:config set rabbitmq.server.user $INSTALL_RABBITMQ_USER -bin/setup system:config set rabbitmq.server.password $INSTALL_RABBITMQ_PASSWORD -bin/setup system:config set rabbitmq.server.vhost / - +# Bus configuration for scheduler & worker +bin/setup system:config set workers.queue.worker-queue.registry alchemy_worker.queue_registry +bin/setup system:config set workers.queue.worker-queue.host rabbitmq +bin/setup system:config set workers.queue.worker-queue.port 5672 +bin/setup system:config set workers.queue.worker-queue.user $INSTALL_RABBITMQ_USER +bin/setup system:config set workers.queue.worker-queue.password $INSTALL_RABBITMQ_PASSWORD +bin/setup system:config set workers.queue.worker-queue.vhost / +# Create elasticsearch index /var/alchemy/Phraseanet/bin/console searchengine:index -c ## enable API and disable ssl on it /var/alchemy/Phraseanet/bin/setup system:config set registry.api-clients.api-enabled true /var/alchemy/Phraseanet/bin/setup system:config set main.api_require_ssl false + +# set instance title +bin/setup system:config set registry.general.title $PHRASEANET_PROJECT_NAME + /var/alchemy/Phraseanet/bin/console compile:configuration diff --git a/docker/phraseanet/boot.sh b/docker/phraseanet/boot.sh deleted file mode 100755 index 4b2cf2baa2..0000000000 --- a/docker/phraseanet/boot.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -FILE=/var/alchemy/Phraseanet/config/configuration.yml -if [ -f "$FILE" ]; then - echo "$FILE exist, skip setup." -else - echo "$FILE doesn't exist, entering setup..." - runuser app -c '/auto-install.sh' -fi - -php-fpm diff --git a/docker/phraseanet/entrypoint.sh b/docker/phraseanet/entrypoint.sh new file mode 100755 index 0000000000..621d8c2e5f --- /dev/null +++ b/docker/phraseanet/entrypoint.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +set -e + +envsubst < "docker/phraseanet/php.ini.sample" > /usr/local/etc/php/php.ini +envsubst < "docker/phraseanet/php-fpm.conf.sample" > /usr/local/etc/php-fpm.conf +envsubst < "docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf" > /usr/local/etc/php-fpm.d/zz-docker.conf + +chown -R app:app \ + cache \ + config \ + datas \ + tmp \ + logs \ + www/thumbnails \ + www/custom + +FILE=config/configuration.yml + +if [ -f "$FILE" ]; then + bin/setup system:config set registry.general.title $PHRASEANET_PROJECT_NAME + echo "$FILE exists, skip setup." +else + echo "$FILE doesn't exist, entering setup..." + runuser app -c docker/phraseanet/auto-install.sh +fi + +if [ ${XDEBUG_ENABLED} == "1" ]; then + echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." + docker-php-ext-enable xdebug +fi + +./docker/phraseanet/plugins/console init + +bash -e docker-php-entrypoint $@ diff --git a/docker/phraseanet/php.ini.sample b/docker/phraseanet/php.ini.sample index 774389b614..7f5fc97430 100644 --- a/docker/phraseanet/php.ini.sample +++ b/docker/phraseanet/php.ini.sample @@ -935,7 +935,7 @@ cli_server.color = On [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone -date.timezone = Europe/Paris +date.timezone = UTC ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667 diff --git a/docker/phraseanet/phraseanet-entrypoint.sh b/docker/phraseanet/phraseanet-entrypoint.sh deleted file mode 100755 index de763cd13a..0000000000 --- a/docker/phraseanet/phraseanet-entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -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 $@ diff --git a/docker/phraseanet/plugins/InitCommand.php b/docker/phraseanet/plugins/InitCommand.php new file mode 100644 index 0000000000..23b7d644b7 --- /dev/null +++ b/docker/phraseanet/plugins/InitCommand.php @@ -0,0 +1,29 @@ +setName('init') + ->setDescription('Initialize plugins'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + foreach (glob('./plugins/*') as $dir) { + if (is_dir($dir)) { + $output->writeln(sprintf('Init %s plugin', basename($dir))); + SubCommand::run(sprintf('bin/setup plugin:add %s', $dir)); + } + } + + return 0; + } +} diff --git a/docker/phraseanet/plugins/InstallCommand.php b/docker/phraseanet/plugins/InstallCommand.php new file mode 100644 index 0000000000..7b8a28c4cd --- /dev/null +++ b/docker/phraseanet/plugins/InstallCommand.php @@ -0,0 +1,64 @@ +setName('install') + ->setDescription('Install plugins'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $plugins = trim(getenv('PHRASEANET_PLUGINS')); + if (empty($plugins)) { + $output->writeln('No plugin to install... SKIP'); + + return 0; + } + + $pluginsDir = 'plugins'; + if (!is_dir($pluginsDir)) { + mkdir($pluginsDir); + } + + foreach (explode(' ', $plugins) as $key => $plugin) { + $plugin = trim($plugin); + $repo = $plugin; + $branch = 'master'; + if (1 === preg_match('#^(.+)\(([^)]+)\)$#', $plugin, $matches)) { + $repo = $matches[1]; + $branch = $matches[2]; + } + + $pluginPath = './plugin' . $key; + if (is_dir($pluginPath)) { + SubCommand::run(sprintf('rm -rf %s', $pluginPath)); + } + + $output->writeln(sprintf('Installing %s (branch: %s)', $repo, $branch)); + SubCommand::run(sprintf('git clone --single-branch --branch %s %s %s', $branch, $repo, $pluginPath)); + + $manifestSrc = $pluginPath.'/manifest.json'; + if (!file_exists($manifestSrc)) { + throw new \Exception(sprintf('Cannot install plugin %s: no manifest.json file found', $plugin)); + } + $pluginDestName = json_decode(file_get_contents($manifestSrc), true)['name']; + rename($pluginPath, $pluginsDir.'/'.$pluginDestName); + $pluginPath = $pluginsDir.'/'.$pluginDestName; + + if (file_exists($pluginPath.'/composer.json')) { + SubCommand::run(sprintf('cd %s && composer install --no-dev', $pluginPath)); + } + } + + return 0; + } +} diff --git a/docker/phraseanet/plugins/SubCommand.php b/docker/phraseanet/plugins/SubCommand.php new file mode 100644 index 0000000000..fd2dbc68a1 --- /dev/null +++ b/docker/phraseanet/plugins/SubCommand.php @@ -0,0 +1,26 @@ +add(new InstallCommand()); +$application->add(new InitCommand()); + +$application->run(); diff --git a/docker/phraseanet/usr/local/etc/php-fpm.d/www.conf.default b/docker/phraseanet/root/usr/local/etc/php-fpm.d/www.conf.default similarity index 100% rename from docker/phraseanet/usr/local/etc/php-fpm.d/www.conf.default rename to docker/phraseanet/root/usr/local/etc/php-fpm.d/www.conf.default diff --git a/docker/phraseanet/usr/local/etc/php-fpm.d/zz-docker.conf b/docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf similarity index 89% rename from docker/phraseanet/usr/local/etc/php-fpm.d/zz-docker.conf rename to docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf index 81fecdea72..2dfa5d2c60 100644 --- a/docker/phraseanet/usr/local/etc/php-fpm.d/zz-docker.conf +++ b/docker/phraseanet/root/usr/local/etc/php-fpm.d/zz-docker.conf @@ -1,6 +1,5 @@ [global] daemonize = no -error_log = /var/log/fpm-php.www.log process.max = 128 [www] diff --git a/docker/phraseanet/worker-boot.sh b/docker/phraseanet/worker-boot.sh deleted file mode 100755 index 1b972c6cdb..0000000000 --- a/docker/phraseanet/worker-boot.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -runuser app -c 'php /var/alchemy/Phraseanet/bin/console task-manager:scheduler:run' diff --git a/docker/phraseanet/worker/entrypoint.sh b/docker/phraseanet/worker/entrypoint.sh new file mode 100755 index 0000000000..763a07d8ba --- /dev/null +++ b/docker/phraseanet/worker/entrypoint.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -e + +DOCKER_DIR="./docker/phraseanet" + +mkdir -p "${APP_DIR}/tmp/locks" \ + && chown -R app:app "${APP_DIR}/tmp" + +envsubst < "${DOCKER_DIR}/php.ini.sample" > /usr/local/etc/php/php.ini +envsubst < "${DOCKER_DIR}/php-fpm.conf.sample" > /usr/local/etc/php-fpm.conf + +if [ ${XDEBUG_ENABLED} == "1" ]; then + echo "XDEBUG is enabled. YOU MAY KEEP THIS FEATURE DISABLED IN PRODUCTION." + docker-php-ext-enable xdebug +fi + +runuser -u app -- $@ 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/Account/AccountService.php b/lib/Alchemy/Phrasea/Account/AccountService.php index 4c0e594e64..567a404a94 100644 --- a/lib/Alchemy/Phrasea/Account/AccountService.php +++ b/lib/Alchemy/Phrasea/Account/AccountService.php @@ -167,11 +167,11 @@ class AccountService * @param string $login * @throws AccountException */ - public function deleteAccount($login = null) + public function deleteAccount($login = null, array $grantedBaseIdList = array()) { $user = $this->getUserOrCurrentUser($login); - $this->userManipulator->delete($user); + $this->userManipulator->delete($user, $grantedBaseIdList); } /** 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/Authentication/RegistrationService.php b/lib/Alchemy/Phrasea/Authentication/RegistrationService.php index 7ffdf8c489..2ffe87f0cd 100644 --- a/lib/Alchemy/Phrasea/Authentication/RegistrationService.php +++ b/lib/Alchemy/Phrasea/Authentication/RegistrationService.php @@ -328,11 +328,9 @@ class RegistrationService $autoReg = $acl->get_granted_base(); - $granted = []; foreach ($autoReg as $baseId => $collection) { $granted[$baseId] = $collection->get_label($this->app['locale']); - } - if(count($granted) > 0) { + $this->app['manipulator.webhook-event']->create( WebhookEvent::USER_REGISTRATION_GRANTED, WebhookEvent::USER_REGISTRATION_TYPE, @@ -340,8 +338,11 @@ class RegistrationService 'user_id' => $user->getId(), 'granted' => $granted, 'rejected' => [] - ] + ], + [$baseId] ); + + unset($granted); } 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/Border/Manager.php b/lib/Alchemy/Phrasea/Border/Manager.php index d8abc9ac99..d017d206e6 100644 --- a/lib/Alchemy/Phrasea/Border/Manager.php +++ b/lib/Alchemy/Phrasea/Border/Manager.php @@ -14,6 +14,8 @@ namespace Alchemy\Phrasea\Border; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Border\Checker\CheckerInterface; use Alchemy\Phrasea\Border\Attribute\AttributeInterface; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\Tag\TfArchivedate; use Alchemy\Phrasea\Metadata\Tag\TfQuarantine; @@ -333,7 +335,7 @@ class Manager $this->app['phraseanet.metadata-setter']->replaceMetadata($newMetadata, $element); if(!$nosubdef) { - $element->rebuild_subdefs(); + $this->app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($element, true)); } return $element; 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/ApplyRightsCommand.php b/lib/Alchemy/Phrasea/Command/ApplyRightsCommand.php new file mode 100644 index 0000000000..bcf0b3d0e7 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/ApplyRightsCommand.php @@ -0,0 +1,89 @@ +setDescription('Apply right on databox, inject appbox:basusr to dboxes:collusr') + ->addOption('user_id', null, InputOption::VALUE_REQUIRED, 'the user ID to apply rights') + ; + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + $userId = $input->getOption('user_id'); + $userRepository = $this->container['repo.users']; + + if ($userId) { + if (($user = $userRepository->find($userId)) === null) { + $output->writeln('user not found!'); + + return 0; + } + + $this->injectRightsSbas($user); + } else { + foreach ($userRepository->findAll() as $user) { + $this->injectRightsSbas($user); + } + } + + $output->writeln('Apply right on databox finished!'); + + return 0; + } + + private function injectRightsSbas(User $user) + { + $userAcl = $this->container->getAclForUser($user); + + foreach ($userAcl->get_granted_sbas() as $databox) { + + $userAcl->delete_injected_rights_sbas($databox); + + $sql = "INSERT INTO collusr + (site, usr_id, coll_id, mask_and, mask_xor, ord) + VALUES (:site_id, :usr_id, :coll_id, :mask_and, :mask_xor, :ord)"; + $stmt = $databox->get_connection()->prepare($sql); + $iord = 0; + + // fix collusr if user has right on collection + foreach ($userAcl->get_granted_base([], [$databox->get_sbas_id()]) as $collection) { + try { + $stmt->execute([ + ':site_id' => $this->container['conf']->get(['main', 'key']), + ':usr_id' => $user->getId(), + ':coll_id' => $collection->get_coll_id(), + ':mask_and' => $userAcl->get_mask_and($collection->get_base_id()), + ':mask_xor' => $userAcl->get_mask_xor($collection->get_base_id()), + ':ord' => $iord++ + ]); + } catch (DBALException $e) { + + } + } + + $stmt->closeCursor(); + } + } +} diff --git a/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php new file mode 100644 index 0000000000..7cf2d91ced --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/ListCollectionCommand.php @@ -0,0 +1,86 @@ +setDescription('List all collection in Phraseanet') + ->addOption('databox_id', 'd', InputOption::VALUE_REQUIRED, 'The id of the databox to list collection') + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + ->setHelp(''); + return $this; + } + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + $jsonformat = $input->getOption('jsonformat'); + $databox = $this->container->findDataboxById($input->getOption('databox_id')); + $collections = $this->listDataboxCollections($databox); + + if ($jsonformat) { + foreach ($collections as $collection) { + $collectionList[] = array_combine(['id local for API', 'id distant', 'name','label','status','total records'], $collection); + } + echo json_encode($collectionList); + } else { + $table = $this->getHelperSet()->get('table'); + $table + ->setHeaders(['id local for API', 'id distant', 'name','label','status','total records']) + ->setRows($collections) + ->render($output); + } + + } catch (\Exception $e) { + $output->writeln("{$e->getMessage()}"); + } + return 0; + } + + private function listDataboxCollections(\databox $databox) + { + return array_map(function (\collection $collection) { + return $this->listCollection($collection); + }, array_merge($databox->get_collections(),$this->getUnabledCollection($databox->get_activable_colls()))); + } + + private function getUnabledCollection($collections) + { + return array_map(function ($colId){ + return \collection::getByBaseId($this->container, $colId); + },$collections); + + } + + private function listCollection(\collection $collection) + { + return [ + $collection->get_base_id(), + $collection->get_coll_id(), + $collection->get_name(), + 'en: ' . $collection->get_label('en') . + ', de: ' . $collection->get_label('de') . + ', fr: ' . $collection->get_label('fr') . + ', nl: ' . $collection->get_label('nl'), + ($collection->is_active()) ? 'enabled' : 'disabled', + $collection->get_record_amount() + ]; + } +} \ No newline at end of file diff --git a/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php new file mode 100644 index 0000000000..6cfac3a388 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/PublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Publish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to publish but keep with existing right into present in application box.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really publish this collection? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->enable($this->container->getApplicationBox()); + $output->writeln('Publish collection successful'); + } catch (\Exception $e) { + $output->writeln('Publish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php new file mode 100644 index 0000000000..ef0fc9dae5 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Collection/UnPublishCollectionCommand.php @@ -0,0 +1,61 @@ +setDescription('Unpublish collection in Phraseanet') + ->addOption('collection_id', null, InputOption::VALUE_REQUIRED, 'The base_id of the collection to unpublish, the base_id is the same id used in API.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + + $collection = \collection::getByBaseId($this->container,(int)$input->getOption('collection_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, sprintf(" Do you want really unpublish the collection %s? (y/N)", $collection->get_name()), 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $collection->disable($this->container->getApplicationBox()); + $output->writeln('Unpublish collection successful'); + } catch (\Exception $e) { + $output->writeln('Unpublish collection failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php new file mode 100644 index 0000000000..92a30435fe --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Databox/ListDataboxCommand.php @@ -0,0 +1,72 @@ +setDescription('List all databox in Phraseanet') + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + $jsonformat = $input->getOption('jsonformat'); + $databoxes = array_map(function (\databox $databox) { + return $this->listDatabox($databox); + }, $this->container->getApplicationBox()->get_databoxes()); + + if ($jsonformat) { + foreach ($databoxes as $databox) { + $databoxList[] = array_combine(['id', 'name', 'alias'], $databox); + } + echo json_encode($databoxList); + } else { + $table = $this->getHelperSet()->get('table'); + $table + ->setHeaders(['id', 'name', 'alias']) + ->setRows($databoxes) + ->render($output); + } + + } catch (\Exception $e) { + $output->writeln('Listing databox failed : '.$e->getMessage().''); + } + + return 0; + } + + private function listDatabox(\databox $databox) + { + return [ + $databox->get_sbas_id(), + $databox->get_dbname(), + $databox->get_viewname() + ]; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php index ce77c7dbb2..bcfe53ae4f 100644 --- a/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php +++ b/lib/Alchemy/Phrasea/Command/Databox/MountDataboxCommand.php @@ -1,7 +1,16 @@ setName('databox:mount') - ->addArgument('databox', InputArgument::REQUIRED, 'Database name for the databox', null) - ->addArgument('owner', InputArgument::REQUIRED, 'Email of the databox admin user', null) - ->addOption('connection', 'c', InputOption::VALUE_NONE, 'Flag to set new database settings') - ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host', 'localhost') - ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port', 3306) - ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user', 'phrasea') - ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password', null); + parent::__construct('databox:mount'); + + $this->setDescription('Mount databox') + ->addArgument('databox', InputArgument::REQUIRED, 'Database name in Mysql', null) + ->addArgument('user_id', InputArgument::REQUIRED, 'The Id of user owner (this account became full admin on this databox)', null) + ->addOption('db-host', null, InputOption::VALUE_OPTIONAL, 'MySQL server host') + ->addOption('db-port', null, InputOption::VALUE_OPTIONAL, 'MySQL server port') + ->addOption('db-user', null, InputOption::VALUE_OPTIONAL, 'MySQL server user') + ->addOption('db-password', null, InputOption::VALUE_OPTIONAL, 'MySQL server password') + ; + + return $this; } protected function doExecute(InputInterface $input, OutputInterface $output) { - $databoxName = $input->getArgument('databox'); - $connectionSettings = $input->getOption('connection') == false ? null : new DataboxConnectionSettings( - $input->getOption('db-host'), - $input->getOption('db-port'), - $input->getOption('db-user'), - $input->getOption('db-password') - ); + try { - /** @var UserRepository $userRepository */ - $userRepository = $this->container['repo.users']; - /** @var DataboxService $databoxService */ - $databoxService = $this->container['databox.service']; + /** @var UserRepository $userRepository */ + $userRepository = $this->container['repo.users']; - $owner = $userRepository->findByEmail($input->getArgument('owner')); + $owner = $userRepository->find($input->getArgument('user_id')); - $databoxService->mountDatabox( - $databoxName, - $owner, - $connectionSettings - ); + if (empty($owner)) { + $output->writeln('User not found ! '); - $output->writeln('Databox mounted'); + return; + } + + if ($owner->isGuest() || !$this->container->getAclForUser($owner)->is_admin()) { + $output->writeln('Admin role is required for the owner ! '); + + return; + } + + $databoxName = $input->getArgument('databox'); + $dialog = $this->getHelperSet()->get('dialog'); + + $connectionSettings = new DataboxConnectionSettings( + $input->getOption('db-host')?:$this->container['conf']->get(['main', 'database', 'host']), + $input->getOption('db-port')?:$this->container['conf']->get(['main', 'database', 'port']), + $input->getOption('db-user')?:$this->container['conf']->get(['main', 'database', 'user']), + $input->getOption('db-password')?:$this->container['conf']->get(['main', 'database', 'password']) + ); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really mount this databox? (y/N)', 'N')); + } + while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + /** @var DataboxService $databoxService */ + $databoxService = $this->container['databox.service']; + + \phrasea::clear_sbas_params($this->container); + + $databox = $databoxService->mountDatabox( + $databoxName, + $owner, + $connectionSettings + ); + + $output->writeln("\n\tData-Box ID ".$databox->get_sbas_id()." mounted successful !\n"); + } catch (\Exception $e) { + $output->writeln('Mount databox failed :'.$e->getMessage().''); + } + + return 0; } + } diff --git a/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php new file mode 100644 index 0000000000..42199a519f --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Databox/UnMountDataboxCommand.php @@ -0,0 +1,60 @@ +setDescription('Unmount databox') + ->addArgument('databox_id', InputArgument::REQUIRED, 'The id of the databox to unmount', null) + ; + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + try { + $databox = $this->container->findDataboxById($input->getArgument('databox_id')); + $dialog = $this->getHelperSet()->get('dialog'); + + do { + $continue = mb_strtolower($dialog->ask($output, ' Do you want really unmount this databox? (y/N)', 'N')); + } while ( ! in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + + $databox->unmount_databox(); + $output->writeln('Unmount databox successful'); + } catch (\Exception $e) { + $output->writeln('Unmount databox failed : '.$e->getMessage().''); + } + + return 0; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php b/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php index 890fed9e6d..112914d088 100644 --- a/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php +++ b/lib/Alchemy/Phrasea/Command/Developer/JsFixtures.php @@ -15,6 +15,7 @@ use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Command\Command; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Model\Entities\User; +use Alchemy\Phrasea\Plugin\Plugin; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\HttpKernel\Client; @@ -30,6 +31,15 @@ class JsFixtures extends Command protected function doExecute(InputInterface $input, OutputInterface $output) { + /** @var Plugin $plugin */ + $msg = []; + foreach($this->container['plugins.manager']->listPlugins() as $plugin) { + $msg[] = sprintf(" bin/setup plugins:remove \"%s\"", $plugin->getName()); + } + if(count($msg) !== 0) { + throw new RuntimeException("You must remove plugins first:\n" . join("\n", $msg)); + } + if (!file_exists($this->container['db.fixture.info']['path'])) { throw new RuntimeException('You must generate sqlite db first, run "bin/developer phraseanet:regenerate-sqlite" command.'); } @@ -104,6 +114,7 @@ class JsFixtures extends Command private function writeResponse(OutputInterface $output, $method, $path, $to, $authenticateUser = false) { $environment = Application::ENV_TEST; + /** @var Application $app */ $app = require __DIR__ . '/../../Application/Root.php'; $app['orm.em'] = $app->extend('orm.em', function($em, $app) { return $app['orm.ems'][$app['db.fixture.hash.key']]; diff --git a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php index 2d9d211612..53e4ffed39 100644 --- a/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php +++ b/lib/Alchemy/Phrasea/Command/Plugin/AbstractPluginCommand.php @@ -15,6 +15,21 @@ use Alchemy\Phrasea\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +function normalizePath($path) { + return array_reduce(explode('/', $path), function ($a, $b) { + if($a === 0) + $a = '/'; + + if($b === '' || $b === '.') + return $a; + + if($b === '..') + return dirname($a); + + return preg_replace('/\/+/', '/', "$a/$b"); + }, 0); +} + abstract class AbstractPluginCommand extends Command { protected function validatePlugins(InputInterface $input, OutputInterface $output) @@ -54,33 +69,42 @@ abstract class AbstractPluginCommand extends Command protected function doInstallPlugin($source, InputInterface $input, OutputInterface $output) { - $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); - - $output->write("Importing $source..."); - $this->container['plugins.importer']->import($source, $temporaryDir); - $output->writeln(" OK"); - $output->write("Validating plugin..."); - $manifest = $this->container['plugins.plugins-validator']->validatePlugin($temporaryDir); + $manifest = $this->container['plugins.plugins-validator']->validatePlugin($source); $output->writeln(" OK found ".$manifest->getName().""); $targetDir = $this->container['plugin.path'] . DIRECTORY_SEPARATOR . $manifest->getName(); + if (normalizePath($targetDir) !== normalizePath($source)) { + $temporaryDir = $this->container['temporary-filesystem']->createTemporaryDirectory(); + $output->write("Importing $source..."); + $this->container['plugins.importer']->import($source, $temporaryDir); + $output->writeln(" OK"); + $workingDir = $temporaryDir; + } else { + $workingDir = $targetDir; + } - $output->write("Setting up composer..."); - $this->container['plugins.composer-installer']->install($temporaryDir); - $output->writeln(" OK"); + if (!is_dir($workingDir.'/vendor')) { + $output->write("Setting up composer..."); + $this->container['plugins.composer-installer']->install($workingDir); + $output->writeln(" OK"); + } $output->write("Installing plugin ".$manifest->getName()."..."); - $this->container['filesystem']->mirror($temporaryDir, $targetDir); + if (isset($temporaryDir)) { + $this->container['filesystem']->mirror($temporaryDir, $targetDir); + } $output->writeln(" OK"); $output->write("Copying public files ".$manifest->getName()."..."); $this->container['plugins.assets-manager']->update($manifest); $output->writeln(" OK"); - $output->write("Removing temporary directory..."); - $this->container['filesystem']->remove($temporaryDir); - $output->writeln(" OK"); + if (isset($temporaryDir)) { + $output->write("Removing temporary directory..."); + $this->container['filesystem']->remove($temporaryDir); + $output->writeln(" OK"); + } $output->write("Activating plugin..."); $this->container['conf']->set(['plugins', $manifest->getName(), 'enabled'], true); diff --git a/lib/Alchemy/Phrasea/Command/Setup/Install.php b/lib/Alchemy/Phrasea/Command/Setup/Install.php index 99dee9c15a..4f83162584 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,8 +52,17 @@ 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('yes', 'y', InputOption::VALUE_NONE, 'Answer yes to all questions'); + ->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('download-path', null, InputOption::VALUE_OPTIONAL, 'Path to download repository', __DIR__ . '/../../../../../tmp/download') + ->addOption('lazaret-path', null, InputOption::VALUE_OPTIONAL, 'Path to lazaret repository', __DIR__ . '/../../../../../tmp/lazaret') + ->addOption('caption-path', null, InputOption::VALUE_OPTIONAL, 'Path to caption repository', __DIR__ . '/../../../../../tmp/caption') + ->addOption('scheduler-locks-path', null, InputOption::VALUE_OPTIONAL, 'Path to scheduler-locks repository', __DIR__ . '/../../../../../tmp/locks') + ->addOption('worker-tmp-files', null, InputOption::VALUE_OPTIONAL, 'Path to worker-tmp-files repository', __DIR__ . '/../../../../../tmp') + ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answer yes to all questions') + ->setHelp("Phraseanet can only be installed on 64 bits PHP."); + ; return $this; } @@ -72,6 +82,14 @@ class Install extends Command */ protected function doExecute(InputInterface $input, OutputInterface $output) { + if(PHP_INT_SIZE !== 8) { + $output->writeln(sprintf( + "Phraseanet can only be installed on 64 bits PHP, your version is %d bits (PHP_INT_SIZE=%d).", + PHP_INT_SIZE<<3,PHP_INT_SIZE + )); + return -1; + } + /** @var DialogHelper $dialog */ $dialog = $this->getHelperSet()->get('dialog'); @@ -121,6 +139,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); @@ -131,7 +164,10 @@ class Install extends Command } } - $this->container['phraseanet.installer']->install($email, $password, $abConn, $serverName, $dataPath, $dbConn, $templateName, $this->detectBinaries()); + $storagePaths = $this->getStoragePaths($input, $dataPath); + + $this->container['phraseanet.installer']->install($email, $password, $abConn, $serverName, $storagePaths, $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 +375,56 @@ 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 getStoragePaths(InputInterface $input, $dataPath) + { + $schedulerLocksPath = $input->getOption('scheduler-locks-path'); + + if (!is_dir($schedulerLocksPath)) { + mkdir($schedulerLocksPath, 0755, true); + } + + if (($schedulerLocksPath = realpath($schedulerLocksPath)) === FALSE) { + throw new \InvalidArgumentException(sprintf('Path %s does not exist.', $schedulerLocksPath)); + } + + return [ + 'subdefs' => $dataPath, + 'download' => $input->getOption('download-path'), + 'lazaret' => $input->getOption('lazaret-path'), + 'caption' => $input->getOption('caption-path'), + 'worker_tmp_files' => $input->getOption('worker-tmp-files') + ]; + } + private function detectBinaries() { return [ diff --git a/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php b/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php new file mode 100644 index 0000000000..ef79b178b6 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/User/UserApplicationsCommand.php @@ -0,0 +1,329 @@ +setDescription('List, Create, Edit, Delete application in Phraseanet (experimental)') + ->addOption('list', null, InputOption::VALUE_NONE, 'List all applications or user applications if --user_id is set') + ->addOption('create', null, InputOption::VALUE_NONE, 'Create application for user in Phraseanet') + ->addOption('edit', null, InputOption::VALUE_NONE, 'Edit application in Phraseanet work only if app_id is set') + ->addOption('delete', null, InputOption::VALUE_NONE, 'Delete application in Phraseanet, require an app_id') + ->addOption('user_id', 'u', InputOption::VALUE_REQUIRED, 'The Id of user owner of application (user_id), required to Create, Edit and Delete.') + ->addOption('app_id', 'a', InputOption::VALUE_REQUIRED, 'The application ID, required for Edit and Delete') + ->addOption('name', null, InputOption::VALUE_REQUIRED, 'The desired name for application, required for Create and Edit.') + ->addOption('type', 't', InputOption::VALUE_OPTIONAL, 'The kind of application, Desktop or Web.',ApiApplication::WEB_TYPE) + ->addOption('description', 'd', InputOption::VALUE_REQUIRED, 'The desired description for application.') + ->addOption('website', 'w', InputOption::VALUE_OPTIONAL, 'The desired url, eg: -w "https://www.alchemy.fr".') + ->addOption('callback', 'c', InputOption::VALUE_OPTIONAL, 'The desired endpoint for callback, required for web kind eg: -c "https://www.alchemy.fr/callback"') + ->addOption('webhook_url', null, InputOption::VALUE_REQUIRED, 'The webhook url') + ->addOption('active', null, InputOption::VALUE_OPTIONAL, 'Activate or deactivate the app, values true or false', 'true') + ->addOption('generate_token', null, InputOption::VALUE_NONE, 'Generate or regenerate the access token') + ->addOption('password_oauth2_gt', null, InputOption::VALUE_OPTIONAL, 'Activate or deactivate password OAuth2 grant type , values true or false', 'false') + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + $userId = $input->getOption('user_id'); + $appId = $input->getOption('app_id'); + $name = $input->getOption('name'); + $type = $input->getOption('type'); + $description = $input->getOption('description'); + $website = $input->getOption('website'); + $urlCallback = $input->getOption('callback'); + $webhookUrl = $input->getOption('webhook_url'); + $active = $input->getOption('active'); + $generateToken = $input->getOption('generate_token'); + $passwordOauth2Gt = $input->getOption('password_oauth2_gt'); + $create = $input->getOption('create'); + $edit = $input->getOption('edit'); + $delete = $input->getOption('delete'); + $list = $input->getOption('list'); + $jsonformat = $input->getOption('jsonformat'); + + $applicationManipulator = $this->container['manipulator.api-application']; + $apiOauthTokenManipulator = $this->container['manipulator.api-oauth-token']; + $accountRepository = $this->container['repo.api-accounts']; + $apiApllicationConverter = $this->container['converter.api-application']; + $userRepository = $this->container['repo.users']; + $apiOauthRepository = $this->container['repo.api-oauth-tokens']; + + if ($create) { + if (null === $user = $userRepository->find($userId)) { + $output->writeln('User not found'); + return 0; + } + + if (!$name) { + $output->writeln('Name of application must be provide with option --name.'); + return 0; + } + + if (!$description) { + $output->writeln('Desciption of application must be provide.'); + + return 0; + } + + try { + $application = $applicationManipulator + ->create( + $name, + $type, + $description, + $website, + $user, + $urlCallback + ); + + $apiAccountManipulator = $this->container['manipulator.api-account']; + $apiAccountManipulator->create($application, $user, V2::VERSION); + + $account = $accountRepository->findByUserAndApplication($user, $application); + + if ($generateToken) { + $apiOauthTokenManipulator->create($account); + } + + if ($passwordOauth2Gt) { + if (in_array($passwordOauth2Gt, ['true', 'false'])) { + $application->setGrantPassword(($passwordOauth2Gt == 'true') ? true : false); + $applicationManipulator->update($application); + } else { + $output->writeln(' Value of option --password_oauth2_gt should be "true" or "false"'); + + return 0; + } + } + + if ($webhookUrl) { + $applicationManipulator->setWebhookUrl($application, $webhookUrl); + $applicationManipulator->update($application); + } + + if ($active) { + if (in_array($active, ['true', 'false'])) { + $application->setActivated(($active == 'true') ? true : false); + $applicationManipulator->update($application); + } else { + $output->writeln('Value of option --active should be "true" or "false"'); + + return 0; + } + } else { + $application->setActivated(true); + $applicationManipulator->update($application); + } + + $this->showApllicationInformation($apiOauthRepository, $account, $application, $jsonformat, $output); + } catch (\Exception $e) { + $output->writeln('Create an application for user failed : '.$e->getMessage().''); + } + } elseif ($edit) { + if (!$appId) { + $output->writeln('ID of the application must be provided with option --app_id to edit the application.'); + + return 0; + } + + $application = $apiApllicationConverter->convert($appId); + $account = $accountRepository->findByUserAndApplication($application->getCreator(), $application); + + if (!$account) { + $output->writeln('ApiAccount not found!'); + + return 0; + } + + if ($name) { + $application->setName($name); + } + if ($type) { + $applicationManipulator->setType($application, $type); + if ($type == ApiApplication::DESKTOP_TYPE) { + $applicationManipulator->setRedirectUri($application, ApiApplication::NATIVE_APP_REDIRECT_URI); + } + } + if ($description) { + $application->setDescription($description); + } + if ($website) { + $applicationManipulator->setWebsiteUrl($application, $website); + } + if ($urlCallback) { + $applicationManipulator->setRedirectUri($application, $urlCallback); + } + if ($generateToken) { + if (null !== $devToken = $apiOauthRepository->findDeveloperToken($account)) { + $apiOauthTokenManipulator->renew($devToken); + } else { + $apiOauthTokenManipulator->create($account); + } + } + if ($passwordOauth2Gt) { + if (in_array($passwordOauth2Gt, ['true', 'false'])) { + $application->setGrantPassword(($passwordOauth2Gt == 'true') ? true : false); + } else { + $output->writeln(' Value of option --password_oauth2_gt should be "true" or "false"'); + + return 0; + } + } + if ($webhookUrl) { + $applicationManipulator->setWebhookUrl($application, $webhookUrl); + } + + if ($active) { + if (in_array($active, ['true', 'false'])) { + $application->setActivated(($active == 'true') ? true : false); + } else { + $output->writeln('Value of option --active should be "true" or "false"'); + + return 0; + } + } + + $applicationManipulator->update($application); + + $this->showApllicationInformation($apiOauthRepository, $account, $application, $jsonformat, $output); + } elseif ($list) { + if ($userId) { + if (null === $user = $userRepository->find($userId)) { + $output->writeln('User not found'); + + return 0; + } + + $accounts = $accountRepository->findByUser($user); + } else { + $accounts = $accountRepository->findAll(); + } + + $applicationList = []; + + foreach ($accounts as $account) { + $application = $account->getApplication(); + $token = $apiOauthRepository->findDeveloperToken($account); + + $applicationList[] = [ + $application->getId(), + $account->getUser()->getId(), + $application->getName(), + $application->getClientId(), + $application->getClientSecret(), + $application->getRedirectUri(), + ($token) ? $token->getOauthToken() : '-', + $application->isPasswordGranted() ? "true": "false" + ]; + } + + $applicationTable = $this->getHelperSet()->get('table'); + $headers = ['app_id', 'user_id', 'name', 'client_id', 'client_secret', 'callback_url', 'generated token', 'grant_password status']; + + if ($jsonformat ) { + foreach ($applicationList as $appList) { + $appInfo[] = array_combine($headers, $appList); + } + + echo json_encode($appInfo); + } else { + $applicationTable = $this->getHelperSet()->get('table'); + $applicationTable + ->setHeaders($headers) + ->setRows($applicationList) + ->render($output) + ; + } + } elseif ($delete) { + if (!$appId) { + $output->writeln('ID of the application must be provided with option --app_id to delete the app.'); + + return 0; + } + + $application = $apiApllicationConverter->convert($appId); + + if (is_null($application->getCreator())) { + /** @var DialogHelper $dialog */ + $dialog = $this->getHelperSet()->get('dialog'); + + $continue = $dialog->askConfirmation($output, "It's a special phraseanet application, do you want really to delete it? (N/y)", false); + + if (!$continue) { + $output->writeln("See you later !"); + + return 0; + } + } + + $applicationManipulator->delete($application); + + $output->writeln("Application ID $appId deleted successfully !"); + } + + return 0; + } + + private function showApllicationInformation($apiOauthRepository, ApiAccount $account, ApiApplication $application, $jsonformat, $output) + { + $token = $account ? $apiOauthRepository->findDeveloperToken($account) : null; + + $applicationCreated = [ + $application->getClientSecret(), + $application->getClientId(), + $this->container["conf"]->get("servername") . "api/oauthv2/authorize", + $this->container["conf"]->get("servername") . "api/oauthv2/token", + ($token) ? $token->getOauthToken() : '-', + $application->isPasswordGranted() ? "true": "false" + ]; + + $headers = ['client_secret', 'client_id', 'Authorize endpoint url', 'Access endpoint', 'generated token', 'grant_password status']; + if ($jsonformat ) { + $createdAppInfo = array_combine($headers, $applicationCreated); + echo json_encode($createdAppInfo); + } else { + $table = $this->getHelperSet()->get('table'); + $table + ->setHeaders($headers) + ->setRows([$applicationCreated]) + ->render($output) + ; + } + } +} diff --git a/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php b/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php new file mode 100644 index 0000000000..66a33f1916 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/User/UserCreateCommand.php @@ -0,0 +1,211 @@ +setDescription('Create user in Phraseanet') + ->addOption('user_login', null, InputOption::VALUE_REQUIRED, 'The desired login for created user.') + ->addOption('user_mail', null, InputOption::VALUE_OPTIONAL, 'The desired mail for created user.') + ->addOption('user_password', null, InputOption::VALUE_OPTIONAL, 'The desired password') + ->addOption('send_mail_confirm', null, InputOption::VALUE_NONE, 'Send an email to user, for validate email.') + ->addOption('send_mail_password', null, InputOption::VALUE_NONE, 'Send an email to user, for password definition, work only if user_password is not define') + ->addOption('model_number', null, InputOption::VALUE_OPTIONAL, 'Id of model') + ->addOption('user_gender', null, InputOption::VALUE_OPTIONAL, 'The gender for created user.') + ->addOption('user_firstname', null, InputOption::VALUE_OPTIONAL, 'The first name for created user.') + ->addOption('user_lastname', null, InputOption::VALUE_OPTIONAL, 'The last name for created user.') + ->addOption('user_compagny', null, InputOption::VALUE_OPTIONAL, 'The compagny for created user.') + ->addOption('user_job', null, InputOption::VALUE_OPTIONAL, 'The job for created user.') + ->addOption('user_activitie', null, InputOption::VALUE_OPTIONAL, 'The activitie for created user.') + ->addOption('user_phone', null, InputOption::VALUE_OPTIONAL, 'The phone number for created user.') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + + $userLogin = $input->getOption('user_login'); + $userMail = $input->getOption('user_mail'); + $userPassword = $input->getOption('user_password'); + $sendMailConfirm = $input->getOption('send_mail_confirm'); + $sendMailPassword = $input->getOption('send_mail_password'); + $modelNumber = $input->getOption('model_number'); + $userGender = $input->getOption('user_gender'); + $userFirstName = $input->getOption('user_firstname'); + $userLastName = $input->getOption('user_lastname'); + $userCompagny = $input->getOption('user_compagny'); + $userJob = $input->getOption('user_job'); + $userActivity = $input->getOption('user_activitie'); + $userPhone = $input->getOption('user_phone'); + + $userRepository = $this->container['repo.users']; + + if ($userMail) { + if (!\Swift_Validate::email($userMail)) { + $output->writeln('Invalid mail address'); + return 0; + } + + if (null !== $userRepository->findByEmail($userMail)) { + $output->writeln('An user exist with this email.'); + return 0; + } + + } + + $password = (!is_null($userPassword)) ? $userPassword : $this->container['random.medium']->generateString(128); + $userManipulator = $this->container['manipulator.user']; + $user = $userManipulator->createUser($userLogin, $password, $userMail); + + if ($userGender) { + if (null === $gender = $this->verifyGender($userGender)) { + $output->writeln('Gender '.$userGender.' not exists.'); + } + $user->setGender($gender); + } + + if($userFirstName) $user->setFirstName($userFirstName); + if($userLastName) $user->setLastName($userLastName); + if($userCompagny) $user->setCompany($userCompagny); + if($userJob) $user->setJob($userJob); + if($userActivity) $user->setActivity($userActivity); + if($userPhone) $user->setPhone($userPhone); + + if ($sendMailPassword and $userMail and is_null($userPassword)) { + $this->sendPasswordSetupMail($user); + } + + if ($sendMailConfirm and $userMail) { + $user->setMailLocked(true); + $this->sendAccountUnlockEmail($user); + } + + if ($modelNumber) { + $template = $userRepository->find($modelNumber); + if (!$template) { + $output->writeln('Model '.$modelNumber.' not found.'); + } else { + $base_ids = []; + foreach ($this->container->getApplicationBox()->get_databoxes() as $databox) { + foreach ($databox->get_collections() as $collection) { + $base_ids[] = $collection->get_base_id(); + } + } + $this->container->getAclForUser($user)->apply_model($template, $base_ids); + } + } + + $this->container['orm.em']->flush(); + + $output->writeln("Create new user successful !"); + + return 0; + } + + /** + * Get gender for user + * @param $type + * @return int|null + */ + private function verifyGender($type) + { + switch (strtolower($type)) { + case "mlle.": + case "mlle": + case "miss": + case "mademoiselle": + case "0": + $gender = User::GENDER_MISS; + break; + case "mme": + case "madame": + case "ms": + case "ms.": + case "1": + $gender = User::GENDER_MRS; + break; + case "m": + case "m.": + case "mr": + case "mr.": + case "monsieur": + case "mister": + case "2": + $gender = User::GENDER_MR; + break; + default: + $gender = null; + } + return $gender; + } + + /** + * Send mail for renew password + * @param User $user + */ + public function sendPasswordSetupMail(User $user) + { + $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer')); + $receiver = Receiver::fromUser($user); + + $token = $this->container['manipulator.token']->createResetPasswordToken($user); + + $mail = MailRequestPasswordSetup::create($this->container, $receiver); + $servername = $this->container['conf']->get('servername'); + $mail->setButtonUrl('http://'.$servername.'/login/renew-password/?token='.$token->getValue()); + $mail->setLogin($user->getLogin()); + + $this->deliver($mail); + } + + /** + * @param User $user + */ + public function sendAccountUnlockEmail(User $user) + { + $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer')); + $receiver = Receiver::fromUser($user); + + $token = $this->container['manipulator.token']->createAccountUnlockToken($user); + + $mail = MailRequestEmailConfirmation::create($this->container, $receiver); + $servername = $this->container['conf']->get('servername'); + $mail->setButtonUrl('http://'.$servername.'/login/register-confirm/?code='.$token->getValue()); + $mail->setExpiration($token->getExpiration()); + + $this->deliver($mail); + } + +} diff --git a/lib/Alchemy/Phrasea/Command/User/UserListCommand.php b/lib/Alchemy/Phrasea/Command/User/UserListCommand.php new file mode 100644 index 0000000000..b88cd4c359 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/User/UserListCommand.php @@ -0,0 +1,236 @@ +setDescription('List of all user (experimental)') + ->addOption('user_id', null, InputOption::VALUE_OPTIONAL, 'The id of user export only info this user ') + ->addOption('user_email', null, InputOption::VALUE_OPTIONAL, 'The mail of user export only info this user .') + ->addOption('database_id', null, InputOption::VALUE_OPTIONAL, 'Id of database.') + ->addOption('collection_id', null, InputOption::VALUE_OPTIONAL, 'Id of the collection.') + ->addOption('mail_lock_status', null, InputOption::VALUE_NONE, 'Status by mail locked') + ->addOption('guest', null, InputOption::VALUE_NONE, 'Only guest user') + ->addOption('created', null, InputOption::VALUE_OPTIONAL, 'Created at with operator,aaaa-mm-jj hh:mm:ss.') + ->addOption('updated', null, InputOption::VALUE_OPTIONAL, 'Update at with operator,aaaa-mm-jj hh:mm:ss.') + ->addOption('right', null, InputOption::VALUE_NONE, 'Show right information') + ->addOption('adress', null, InputOption::VALUE_NONE, 'Show adress information') + ->addOption('models', null, InputOption::VALUE_NONE, "Show only defined models, if --user_id is set with --models it's the template owner") + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + + $userId = $input->getOption('user_id'); + $userEmail = $input->getOption('user_email'); + $databaseId = $input->getOption('database_id'); + $collectionId = $input->getOption('collection_id'); + $lockStatus = $input->getOption('mail_lock_status'); + $guest = $input->getOption('guest'); + $withAdress = $input->getOption('adress'); + $created = $input->getOption('created'); + $updated = $input->getOption('updated'); + $withRight = $input->getOption('right'); + $models = $input->getOption('models'); + $jsonformat = $input->getOption('jsonformat'); + + $query = $this->container['phraseanet.user-query']; + + if($databaseId) $query->on_base_ids([$databaseId]); + if($collectionId) $query->on_sbas_ids([$collectionId]); + if($created) $this->addFilterDate($created,'created',$query); + if($updated) $this->addFilterDate($updated,'updated',$query); + if($userId && !$models) $query->addSqlFilter('Users.id = ?' ,[$userId]); + if($userEmail && !$models) $query->addSqlFilter('Users.email = ?' ,[$userEmail]); + if($lockStatus && !$models) $query->addSqlFilter('Users.mail_locked = 1'); + if($guest && !$models) $query->include_invite(true)->addSqlFilter('Users.guest = 1'); + + /** @var UserRepository $userRepository */ + $userRepository = $this->container['repo.users']; + + if ($models && $userId) { + $users = $userRepository->findBy(['templateOwner' => $userId]); + } elseif ($models) { + $users = $userRepository->findTemplate(); + } else { + $users = $query->execute()->get_results(); + } + + $userList = []; + foreach ($users as $key => $user) { + $userList[] = $this->listUser($user, $withAdress, $withRight); + + $userListRaw[] = array_combine($this->headerTable($withAdress, $withRight), $this->listUser($user, $withAdress, $withRight)); + } + + if ($jsonformat) { + echo json_encode($userListRaw); + } else { + $table = $this->getHelperSet()->get('table'); + $table + ->setHeaders($this->headerTable($withAdress, $withRight)) + ->setRows($userList) + ->render($output); + ; + + } + + + return 0; + } + + /** + * @param $withAdress + * @param $withRight + * @return array + */ + private function headerTable($withAdress,$withRight) + { + $defaultHeader = ['id', 'login', 'email','last_model','first_name','last_name','gender','created','updated','status','locale']; + $adressHeader = [ 'address', 'zip_code', 'city', 'country', 'phone', 'fax', 'job','position', 'company', 'geoname_id']; + $rightHeader = [ 'admin', 'guest', 'mail_notification', 'ldap_created', 'mail_locked']; + + return $this->createInformation($withAdress,$withRight,$defaultHeader,['adress' => $adressHeader,'right' =>$rightHeader]); + } + + /** + * @param User $user + * @param $withAdress + * @param $withRight + * @return array + */ + private function listUser(User $user,$withAdress,$withRight) + { + switch ($user->getGender()) { + case User::GENDER_MRS: + $gender = 'Mrs'; + break; + case User::GENDER_MISS: + $gender = 'Miss'; + break; + case User::GENDER_MR: + default: + $gender = 'Mr'; + } + + $defaultInfo = [ + $user->getId(), + $user->getLogin() ?: '-', + $user->getEmail() ?: '-', + $user->getLastAppliedTemplate() ? $user->getLastAppliedTemplate()->getLogin() : '-', + $user->getFirstName() ?: '-', + $user->getLastName() ?: '-', + $gender, + NullableDateTime::format($user->getCreated(),'Y-m-d H:i:s'), + NullableDateTime::format($user->getUpdated(),'Y-m-d H:i:s'), + 'status', + $user->getLocale() ?: '-', + ]; + + return $this->createInformation($withAdress,$withRight,$defaultInfo,['adress' => $this->userAdress($user),'right' => $this->userRight($user)]); + } + + /** + * @param User $user + * @return array + */ + private function userAdress(User $user) + { + return [ + $user->getAddress() ?: '-', + $user->getZipCode() ?: '-', + $user->getCity() ?: '-', + $user->getCountry() ?: '-', + $user->getPhone() ?: '-', + $user->getFax() ?: '-', + $user->getJob() ?: '-', + $user->getActivity() ?: '-', + $user->getCompany() ?: '-', + $user->getGeonameId() ?: '-', + ]; + } + + /** + * @param User $user + * @return array + */ + private function userRight(User $user) + { + return [ + $user->isAdmin() ?: false, + $user->isGuest() ?: false, + $user->hasMailNotificationsActivated() ?: false, + $user->hasLdapCreated() ?: false, + $user->isMailLocked() ?: false, + ]; + } + + /** + * @param $withAdress + * @param $withRight + * @param $default + * @param $infoToMerge + * @return array + */ + private function createInformation($withAdress,$withRight,$default,$infoToMerge) + { + if ($withAdress && $withRight) { + $information = array_merge($default, $infoToMerge['adress'],$infoToMerge['right']); + } elseif ($withAdress && !$withRight) { + $information = array_merge($default, $infoToMerge['adress']); + } elseif(!$withAdress && $withRight) { + $information = array_merge($default, $infoToMerge['right']); + } else { + $information = $default; + } + + return $information; + } + + /** + * @param $date + * @param $type + * @param $query + */ + private function addFilterDate($date,$type,$query){ + + list($operator,$dateAt) = explode(',', $date); + + if (!in_array($operator,['=','>=','<=','>','<'])) { + throw new \InvalidArgumentException(" '=' or '<=' or '>=' or '>' or '<'"); + } + + $query->addSqlFilter($type.$operator.' ?' ,[$dateAt]); + } + +} diff --git a/lib/Alchemy/Phrasea/Command/User/UserPasswordCommand.php b/lib/Alchemy/Phrasea/Command/User/UserPasswordCommand.php new file mode 100644 index 0000000000..94e400aa14 --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/User/UserPasswordCommand.php @@ -0,0 +1,178 @@ +setDescription('Set user password in Phraseanet (experimental)') + ->addOption('user_id', null, InputOption::VALUE_REQUIRED, 'The id of user.') + ->addOption('generate', null, InputOption::VALUE_NONE, 'Generate and set with a random value') + ->addOption('password', null, InputOption::VALUE_OPTIONAL, 'Set the user password to the input value') + ->addOption('send_renewal_email', null, InputOption::VALUE_NONE, 'Send email link to user for password renewing, work only if --password or --generate are not define') + ->addOption('password_hash', null, InputOption::VALUE_OPTIONAL, 'Define a password hashed, work only with password_nonce') + ->addOption('password_nonce', null, InputOption::VALUE_OPTIONAL, 'Define a password nonce, work only with password_hash') + ->addOption('dump', null, InputOption::VALUE_NONE, 'Return the password hashed and nonce') + ->addOption('jsonformat', null, InputOption::VALUE_NONE, 'Output in json format') + ->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answer yes to all questions') + + ->setHelp(''); + + return $this; + } + + protected function doExecute(InputInterface $input, OutputInterface $output) + { + $dialog = $this->getHelperSet()->get('dialog'); + $userRepository = $this->container['repo.users']; + $userManipulator = $this->container['manipulator.user']; + + $user = $userRepository->find($input->getOption('user_id')); + $password = $input->getOption('password'); + $generate = $input->getOption('generate'); + $sendRenewalEmail = $input->getOption('send_renewal_email'); + $dump = $input->getOption('dump'); + $passwordHash = $input->getOption('password_hash'); + $passwordNonce = $input->getOption('password_nonce'); + $jsonformat = $input->getOption('jsonformat'); + $yes = $input->getOption('yes'); + + + if ($user === null) { + $output->writeln('Not found User.'); + return 0; + } + + if ($passwordHash && $passwordNonce) { + $user->setNonce($passwordNonce); + $user->setPassword($passwordHash); + $userManipulator->updateUser($user); + + $output->writeln('password set with hashed pass'); + + return 0; + } + + if ($dump) { + $oldHash = $user->getPassword(); + $oldNonce = $user->getNonce(); + } + + if ($generate) { + $oldHash = $user->getPassword(); + $oldNonce = $user->getNonce(); + + $password = $this->container['random.medium']->generateString(64); + } else { + if (!$password && $sendRenewalEmail) { + $this->sendPasswordSetupMail($user); + $output->writeln('email link sended for password renewing!'); + + return 0; + } elseif (!$password && !$sendRenewalEmail && ! $dump) { + $output->writeln('choose one option to set a password!'); + + return 0; + } + } + + if ($password) { + if (!$yes) { + do { + $continue = mb_strtolower($dialog->ask($output, 'Do you want really set password to this user? (y/N)', 'N')); + } while (!in_array($continue, ['y', 'n'])); + + if ($continue !== 'y') { + $output->writeln('Aborting !'); + + return; + } + } + $oldHash = $user->getPassword(); + $oldNonce = $user->getNonce(); + + $userManipulator->setPassword($user,$password); + } + + if ($dump) { + if ($jsonformat) { + $hash['password_hash'] = $oldHash; + $hash['nonce'] = $oldNonce; + + echo json_encode($hash); + + return 0; + } else { + $output->writeln('password_hash :' . $oldHash); + $output->writeln('nonce :' . $oldNonce); + + return 0; + } + } + + if (($password || $generate)) { + if ($jsonformat) { + $hash['new_password'] = $password; + $hash['previous_password_hash'] = $oldHash; + $hash['previous_nonce'] = $oldNonce; + + echo json_encode($hash); + } else { + $output->writeln('new_password :' . $password); + $output->writeln('previous_password_hash :' . $oldHash); + $output->writeln('previous_nonce :' . $oldNonce); + } + } + + return 0; + } + + /** + * Send mail for renew password + * @param User $user + */ + private function sendPasswordSetupMail(User $user) + { + $this->setDelivererLocator(new LazyLocator($this->container, 'notification.deliverer')); + $receiver = Receiver::fromUser($user); + + $token = $this->container['manipulator.token']->createResetPasswordToken($user); + + $url = $this->container['url_generator']->generate('login_renew_password', [ 'token' => $token->getValue() ], true); + $mail = MailRequestPasswordUpdate::create($this->container, $receiver); + $servername = $this->container['conf']->get('servername'); + $mail->setButtonUrl($url); + $mail->setLogin($user->getLogin()); + $mail->setExpiration(new \DateTime('+1 day')); + + $this->deliver($mail); + } + +} 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/SearchEngineController.php b/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php index 8cf04e7839..04762b3aef 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/SearchEngineController.php @@ -13,9 +13,11 @@ namespace Alchemy\Phrasea\Controller\Admin; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchSettingsFormType; use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions; +use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use databox_descriptionStructure; class SearchEngineController extends Controller { @@ -31,7 +33,19 @@ class SearchEngineController extends Controller $form->handleRequest($request); if ($form->isValid()) { - $this->saveElasticSearchOptions($form->getData()); + /** @var ElasticsearchOptions $data */ + $data = $form->getData(); + // $q = $request->request->get('elasticsearch_settings'); + $facetNames = []; // rebuild the data "_customValues/facets" list following the form order + foreach($request->request->get('elasticsearch_settings') as $name=>$value) { + $matches = null; + if(preg_match('/^facets:(.+):limit$/', $name, $matches) === 1) { + $facetNames[] = $matches[1]; + } + } + $data->reorderAggregableFields($facetNames); + + $this->saveElasticSearchOptions($data); return $this->app->redirectPath('admin_searchengine_form'); } @@ -76,6 +90,16 @@ class SearchEngineController extends Controller */ private function saveElasticSearchOptions(ElasticsearchOptions $configuration) { + // save to databoxes fields for backward compatibility (useless ?) + foreach($configuration->getAggregableFields() as $fname=>$aggregableField) { + foreach ($this->app->getDataboxes() as $databox) { + if(!is_null($f = $databox->get_meta_structure()->get_element_by_name($fname, databox_descriptionStructure::STRICT_COMPARE))) { + $f->set_aggregable($aggregableField['limit'])->save(); + } + } + } + + // save to conf $this->getConf()->set(['main', 'search-engine', 'options'], $configuration->toArray()); } @@ -85,7 +109,10 @@ class SearchEngineController extends Controller */ private function getConfigurationForm(ElasticsearchOptions $options) { - return $this->app->form(new ElasticsearchSettingsFormType(), $options, [ + /** @var GlobalStructure $g */ + $g = $this->app['search_engine.structure']; + + return $this->app->form(new ElasticsearchSettingsFormType($g, $options), $options, [ 'action' => $this->app->url('admin_searchengine_form'), ]); } diff --git a/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php b/lib/Alchemy/Phrasea/Controller/Admin/SubdefsController.php index e30aa03946..97896ac613 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,21 +373,21 @@ 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", Video::OPTION_GOPSIZE => "25", Video::OPTION_SIZE => "480", Video::OPTION_FRAMERATE => "25", - Video::OPTION_VCODEC => "libtheora", - Video::OPTION_ACODEC => "libfaac", + Video::OPTION_VCODEC => "libx264", + 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 => "libx264", + 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/Admin/UserController.php b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php index 35ff646b8c..a1487603d8 100644 --- a/lib/Alchemy/Phrasea/Controller/Admin/UserController.php +++ b/lib/Alchemy/Phrasea/Controller/Admin/UserController.php @@ -515,9 +515,9 @@ class UserController extends Controller $denyColl[] = $label; $hookData['rejected'][$bas] = $label; } - } - $this->app['manipulator.webhook-event']->create($hookName, $hookType, $hookData); + $this->app['manipulator.webhook-event']->create($hookName, $hookType, $hookData, [$bas]); + } if ($user->hasMailNotificationsActivated() && (0 !== count($acceptColl) || 0 !== count($denyColl))) { $message = ''; 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..42339169d6 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(), @@ -1570,9 +1573,9 @@ class V1Controller extends Controller $options->setFirstResult((int)($request->get('offset_start') ?: 0)); $options->setMaxResults((int)$request->get('per_page') ?: 10); - $this->getSearchEngine()->resetCache(); + $searchEngine = $this->getSearchEngine(); - $search_result = $this->getSearchEngine()->query((string)$request->get('query'), $options); + $search_result = $searchEngine->query((string)$request->get('query'), $options); $this->getUserManipulator()->logQuery($this->getAuthenticatedUser(), $search_result->getQueryText()); @@ -1580,12 +1583,12 @@ class V1Controller extends Controller $collectionsReferencesByDatabox = $options->getCollectionsReferencesByDatabox(); foreach ($collectionsReferencesByDatabox as $sbid => $references) { $databox = $this->findDataboxById($sbid); - $collectionsIds = array_map(function(CollectionReference $ref){return $ref->getCollectionId();}, $references); + $collectionsIds = array_map(function (CollectionReference $ref) { + return $ref->getCollectionId(); + }, $references); $this->getSearchEngineLogger()->log($databox, $search_result->getQueryText(), $search_result->getTotal(), $collectionsIds); } - $this->getSearchEngine()->clearCache(); - return $search_result; } diff --git a/lib/Alchemy/Phrasea/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/LightboxController.php b/lib/Alchemy/Phrasea/Controller/LightboxController.php index 30d7c81f65..19c7378c1f 100644 --- a/lib/Alchemy/Phrasea/Controller/LightboxController.php +++ b/lib/Alchemy/Phrasea/Controller/LightboxController.php @@ -450,6 +450,51 @@ class LightboxController extends Controller return $this->app->json($data); } + /** + * @param Basket $basket + * @return Response + */ + public function ajaxGetElementsAction(Basket $basket) + { + $ret = [ + 'error' => false, + 'datas' => [ + 'counts' => [ + 'yes' => 0, + 'no' => 0, + 'nul' => 0, + 'total' => 0 + ] + ] + ]; + try { + if (!$basket->getValidation()) { + throw new Exception('There is no validation session attached to this basket'); + } + foreach ($basket->getElements() as $element) { + $vd = $element->getUserValidationDatas($this->getAuthenticatedUser()); + if($vd->getAgreement() === true) { + $ret['datas']['counts']['yes']++; + } + elseif($vd->getAgreement() === false) { + $ret['datas']['counts']['no']++; + } + elseif($vd->getAgreement() === null) { + $ret['datas']['counts']['nul']++; + } + $ret['datas']['counts']['total']++; + } + } + catch (Exception $e) { + $ret = [ + 'error' => true, + 'datas' => $e->getMessage() + ]; + } + + return $this->app->json($ret); + } + /** * @param Basket $basket * @throws Exception diff --git a/lib/Alchemy/Phrasea/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/ExportController.php b/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php index df6f2a9f19..f4692c99ac 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ExportController.php @@ -15,6 +15,7 @@ use Alchemy\Phrasea\Application\Helper\FilesystemAware; use Alchemy\Phrasea\Application\Helper\NotifierAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Core\Event\ExportFailureEvent; +use Alchemy\Phrasea\Core\Event\ExportMailEvent; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Exception\InvalidArgumentException; use Alchemy\Phrasea\Model\Manipulator\TokenManipulator; @@ -193,42 +194,26 @@ class ExportController extends Controller $token = $this->getTokenManipulator()->createEmailExportToken(serialize($list)); if (count($destMails) > 0) { - //zip documents - \set_export::build_zip( - $this->app, - $token, - $list, - $this->app['tmp.download.path'].'/'. $token->getValue() . '.zip' - ); + $emitterId = $this->getAuthenticatedUser()->getId(); - $remaingEmails = $destMails; + $tokenValue = $token->getValue(); $url = $this->app->url('prepare_download', ['token' => $token->getValue(), 'anonymous' => false, 'type' => \Session_Logger::EVENT_EXPORTMAIL]); - $user = $this->getAuthenticatedUser(); - $emitter = new Emitter($user->getDisplayName(), $user->getEmail()); + $params = [ + 'url' => $url, + 'textmail' => $request->request->get('textmail'), + 'reading_confirm' => !!$request->request->get('reading_confirm', false), + 'ssttid' => $ssttid = $request->request->get('ssttid', ''), + 'lst' => $lst = $request->request->get('lst', ''), + ]; - foreach ($destMails as $key => $mail) { - try { - $receiver = new Receiver(null, trim($mail)); - } catch (InvalidArgumentException $e) { - continue; - } - - $mail = MailRecordsExport::create($this->app, $receiver, $emitter, $request->request->get('textmail')); - $mail->setButtonUrl($url); - $mail->setExpiration($token->getExpiration()); - - $this->deliver($mail, !!$request->request->get('reading_confirm', false)); - unset($remaingEmails[$key]); - } - - //some mails failed - if (count($remaingEmails) > 0) { - foreach ($remaingEmails as $mail) { - $this->dispatch(PhraseaEvents::EXPORT_MAIL_FAILURE, new ExportFailureEvent($this->getAuthenticatedUser(), $ssttid, $lst, \eventsmanager_notify_downloadmailfail::MAIL_FAIL, $mail)); - } - } + $this->dispatch(PhraseaEvents::EXPORT_MAIL_CREATE, new ExportMailEvent( + $emitterId, + $tokenValue, + $destMails, + $params + )); } return $this->app->json([ diff --git a/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php b/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php index 2bc333f45c..39a0a8f48d 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/FeedController.php @@ -19,8 +19,10 @@ use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Feed\Aggregate; use Alchemy\Phrasea\Feed\Link\AggregateLinkGenerator; use Alchemy\Phrasea\Feed\Link\FeedLinkGenerator; +use Alchemy\Phrasea\Model\Entities\Feed; use Alchemy\Phrasea\Model\Entities\FeedEntry; use Alchemy\Phrasea\Model\Entities\FeedItem; +use Alchemy\Phrasea\Model\Entities\FeedPublisher; use Alchemy\Phrasea\Model\Repositories\FeedEntryRepository; use Alchemy\Phrasea\Model\Repositories\FeedItemRepository; use Alchemy\Phrasea\Model\Repositories\FeedPublisherRepository; @@ -46,6 +48,7 @@ class FeedController extends Controller } public function createFeedEntryAction(Request $request) { + /** @var Feed $feed */ $feed = $this->getFeedRepository()->find($request->request->get('feed_id')); if (null === $feed) { @@ -53,6 +56,8 @@ class FeedController extends Controller } $user = $this->getAuthenticatedUser(); + + /** @var FeedPublisher $publisher */ $publisher = $this->getFeedPublisherRepository()->findOneBy([ 'feed' => $feed, 'user' => $user, diff --git a/lib/Alchemy/Phrasea/Controller/Prod/LanguageController.php b/lib/Alchemy/Phrasea/Controller/Prod/LanguageController.php index 5137d3f219..254e3e9835 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/LanguageController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/LanguageController.php @@ -136,6 +136,7 @@ class LanguageController 'or' => $translator->trans('or'), 'Suppr' => $translator->trans('Suppr'), 'Add new range' => $translator->trans('Add new range'), + 'Save as VTT' => $translator->trans('Save as VTT'), 'Export ranges' => $translator->trans('Export ranges'), 'Start Range' => $translator->trans('Start Range'), 'End Range' => $translator->trans('End Range'), 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/PrinterController.php b/lib/Alchemy/Phrasea/Controller/Prod/PrinterController.php index d2bc03b190..0d9c4a466f 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PrinterController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PrinterController.php @@ -12,7 +12,7 @@ namespace Alchemy\Phrasea\Controller\Prod; use Alchemy\Phrasea\Application\Helper\DataboxLoggerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Helper\Record as RecordHelper; -use Alchemy\Phrasea\Out\Module\PDF as PDFExport; +use Alchemy\Phrasea\Out\Module\PDFRecords; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -24,19 +24,27 @@ class PrinterController extends Controller { $printer = new RecordHelper\Printer($this->app, $request); - return $this->render('prod/actions/printer_default.html.twig', ['printer' => $printer, 'message' => '']); + $basketFeedbackId = null; + if($printer->is_basket() && ($basket = $printer->get_original_basket()) && ($validation = $basket->getValidation())) { + if($validation->getInitiator()->getId() === $this->app->getAuthenticatedUser()->getId()) { + $basketFeedbackId = $basket->getId(); + } + } + + return $this->render('prod/actions/printer_default.html.twig', ['printer' => $printer, 'message' => '', 'basketFeedbackId' => $basketFeedbackId]); } public function printAction(Request $request) { $printer = new RecordHelper\Printer($this->app, $request); + $b = $printer->get_original_basket(); $layout = $request->request->get('lay'); foreach ($printer->get_elements() as $record) { $this->getDataboxLogger($record->getDatabox())->log($record, \Session_Logger::EVENT_PRINT, $layout, ''); } - $PDF = new PDFExport($this->app, $printer->get_elements(), $layout); + $PDF = new PDFRecords($this->app, $printer, $layout); $response = new Response($PDF->render(), 200, array('Content-Type' => 'application/pdf')); $response->headers->set('Pragma', 'public', true); @@ -44,4 +52,5 @@ class PrinterController extends Controller return $response; } + } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php index 68bad88664..0ba61211a6 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/PushController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/PushController.php @@ -98,7 +98,7 @@ class PushController extends Controller $Basket->setUser($user_receiver); $Basket->setPusher($this->getAuthenticatedUser()); $Basket->markUnread(); - + $manager->persist($Basket); foreach ($pusher->get_elements() as $element) { @@ -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'); @@ -604,6 +604,38 @@ class PushController extends Controller ); } + public function updateExpirationAction(Request $request) + { + $ret = [ + 'success' => false, + 'message' => $this->app->trans('Unable to save the expiration date') + ]; + if (is_null($request->request->get('date'))) { + $ret['message'] = $this->app->trans('The provided date is null!'); + return $this->app->json($ret); + } + $repository = $this->app['repo.baskets']; + $manager = $this->getEntityManager(); + $manager->beginTransaction(); + try { + $basket = $repository->findUserBasket($request->request->get('basket_id'), $this->app->getAuthenticatedUser(), true); + $date = new \DateTime($request->request->get('date') . " 23:59:59"); + $validation = $basket->getValidation(); + if (is_null($validation)) { + return $this->app->json($ret); + } + $validation->setExpires($date); + $manager->persist($validation); + $manager->flush(); + $manager->commit(); + $ret['message'] = $this->app->trans('Expiration date successfully updated!'); + } catch (\Exception $e) { + $ret['message'] = $e->getMessage(); + $manager->rollback(); + } + return $this->app->json($ret); + } + private function formatUser(User $user) { $subtitle = array_filter([$user->getJob(), $user->getCompany()]); @@ -738,4 +770,5 @@ class PushController extends Controller { return $this->app['random.medium']; } + } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php index 790e33525d..d4830859c2 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/QueryController.php @@ -269,7 +269,7 @@ class QueryController extends Controller $infoResult = '
' . $this->app->trans('%number% documents
selectionnes', ['%number%' => '']) - . '
' + . '
' . '
@@ -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']); @@ -424,24 +433,15 @@ class QueryController extends Controller // populates facets (aggregates) $facets = []; - // $facetClauses = []; foreach ($result->getFacets() as $facet) { $facetName = $facet['name']; if(array_key_exists($facetName, $fieldsInfosByName)) { - $f = $fieldsInfosByName[$facetName]; - $facet['label'] = $f['trans_label']; $facet['labels'] = $f['labels']; $facet['type'] = strtoupper($f['type']) . "-AGGREGATE"; $facets[] = $facet; - - // $facetClauses[] = [ - // 'type' => strtoupper($f['type']) . "-AGGREGATE", - // 'field' => $f['field'], - // 'facet' => $facet - // ]; } } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php index 0a948d6d1d..da612c13aa 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/RecordController.php @@ -7,6 +7,7 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ + namespace Alchemy\Phrasea\Controller\Prod; use Alchemy\Phrasea\Application; @@ -14,6 +15,8 @@ use Alchemy\Phrasea\Application\Helper\EntityManagerAware; use Alchemy\Phrasea\Application\Helper\SearchEngineAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; +use Alchemy\Phrasea\Core\Event\Record\DeleteEvent; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Model\Entities\BasketElement; @@ -22,6 +25,7 @@ use Alchemy\Phrasea\Model\Repositories\StoryWZRepository; use Alchemy\Phrasea\SearchEngine\SearchEngineOptions; use Alchemy\Phrasea\Twig\Fit; use Alchemy\Phrasea\Twig\PhraseanetExtension; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -34,7 +38,7 @@ class RecordController extends Controller * * @param Request $request * - * @return Response + * @return \Symfony\Component\HttpFoundation\JsonResponse */ public function getRecord(Request $request) { @@ -192,7 +196,8 @@ class RecordController extends Controller $flatten = (bool)($request->request->get('del_children')) ? RecordsRequest::FLATTEN_YES_PRESERVE_STORIES : RecordsRequest::FLATTEN_NO; $records = RecordsRequest::fromRequest( $this->app, - $request,$flatten, + $request, + $flatten, [\ACL::CANDELETERECORD] ); @@ -222,19 +227,19 @@ class RecordController extends Controller $manager->remove($attachedStory); } - foreach($record->get_grouping_parents() as $story) { + foreach ($record->get_grouping_parents() as $story) { $this->getEventDispatcher()->dispatch(PhraseaEvents::RECORD_EDIT, new RecordEdit($story)); } $sbasId = $record->getDatabox()->get_sbas_id(); - if(!array_key_exists($sbasId, $trashCollectionsBySbasId)) { + if (!array_key_exists($sbasId, $trashCollectionsBySbasId)) { $trashCollectionsBySbasId[$sbasId] = $record->getDatabox()->getTrashCollection(); } $deleted[] = $record->getId(); - if($trashCollectionsBySbasId[$sbasId] !== null) { + if ($trashCollectionsBySbasId[$sbasId] !== null) { if($record->getCollection()->get_coll_id() == $trashCollectionsBySbasId[$sbasId]->get_coll_id()) { // record is already in trash so delete it - $record->delete(); + $this->getEventDispatcher()->dispatch(RecordEvents::DELETE, new DeleteEvent($record)); } else { // move to trash collection $record->move_to_collection($trashCollectionsBySbasId[$sbasId], $this->getApplicationBox()); @@ -247,7 +252,7 @@ class RecordController extends Controller } } else { // no trash collection, delete - $record->delete(); + $this->getEventDispatcher()->dispatch(RecordEvents::DELETE, new DeleteEvent($record)); } } catch (\Exception $e) { } @@ -278,35 +283,69 @@ class RecordController extends Controller * Delete a record or a list of records * * @param Request $request - * @return Response + * @return string html */ public function whatCanIDelete(Request $request) { + $viewParms = []; + + // pre-count records that would be trashed/deleted when the "deleted children" will be un-checked + $records = RecordsRequest::fromRequest( $this->app, $request, - !!$request->request->get('del_children'), + RecordsRequest::FLATTEN_NO, [\ACL::CANDELETERECORD] ); - $filteredRecord = $this->filterRecordToDelete($records); + $filteredRecords = $this->filterRecordToDelete($records); - return $this->app->json([ - 'renderView' => $this->render('prod/actions/delete_records_confirm.html.twig', [ - 'records' => $records, - 'filteredRecord' => $filteredRecord - ]), - 'filteredRecord' => $filteredRecord - ]); + $viewParms['parents_only'] = [ + 'records' => $records, + 'trashableCount' => count($filteredRecords['trash']), + 'deletableCount' => count($filteredRecords['delete']) + ]; + + // pre-count records that would be trashed/deleted when the "deleted children" will be checked + // + $records = RecordsRequest::fromRequest( + $this->app, + $request, + RecordsRequest::FLATTEN_YES_PRESERVE_STORIES, + [\ACL::CANDELETERECORD] + ); + $filteredRecords = $this->filterRecordToDelete($records); + $viewParms['with_children'] = [ + 'records' => $records, + 'trashableCount' => count($filteredRecords['trash']), + 'deletableCount' => count($filteredRecords['delete']) + ]; + + return $this->render( + 'prod/actions/delete_records_confirm.html.twig', + $viewParms + ); } + /** + * classifies records in two groups (does NOT delete anything) + * - 'trash' : the record can go to trash because the db has a "_TRASH_" coll, and the record is not already into it + * - 'delete' : the record would be deleted because the db has no trash, or the record is already trashed + * + * @param RecordsRequest $records + * @return array + */ private function filterRecordToDelete(RecordsRequest $records) { + $ret = [ + 'trash' => [], + 'delete' => [] + ]; + $trashCollectionsBySbasId = []; - $goingToTrash = []; - $delete = []; foreach ($records as $record) { + /** @var \record_adapter $record */ $sbasId = $record->getDatabox()->get_sbas_id(); if (!array_key_exists($sbasId, $trashCollectionsBySbasId)) { $trashCollectionsBySbasId[$sbasId] = $record->getDatabox()->getTrashCollection(); @@ -314,21 +353,20 @@ class RecordController extends Controller if ($trashCollectionsBySbasId[$sbasId] !== null) { if ($record->getCollection()->get_coll_id() == $trashCollectionsBySbasId[$sbasId]->get_coll_id()) { // record is already in trash - $delete[] = $record; + $ret['delete'][] = $record; } else { // will be moved to trash - $goingToTrash[] = $record; + $ret['trash'][] = $record; } } else { // trash does not exist - $delete[] = $record; + $ret['delete'][] = $record; } } - //check if all values in array are true - //return (!in_array(false, $goingToTrash, true)); - return ['trash' => $goingToTrash, 'delete' => $delete]; + + return $ret; } /** @@ -336,7 +374,8 @@ class RecordController extends Controller * * @param Request $request * - * @return Response + * @return \Symfony\Component\HttpFoundation\JsonResponse + * @throws \Alchemy\Phrasea\Cache\Exception */ public function renewUrl(Request $request) { diff --git a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php index 9a65ed61fa..a90f0a0ed1 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/StoryController.php @@ -14,6 +14,8 @@ use Alchemy\Phrasea\Application\Helper\EntityManagerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Controller\Exception as ControllerException; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Model\Entities\StoryWZ; @@ -68,7 +70,9 @@ class StoryController extends Controller break; } - $story->set_metadatas($metadatas)->rebuild_subdefs(); + $recordAdapter = $story->set_metadatas($metadatas); + // tell phraseanet to rebuild subdef + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($recordAdapter)); $storyWZ = new StoryWZ(); $storyWZ->setUser($this->getAuthenticatedUser()); diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php index 872f385455..65f72a8a36 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php @@ -16,6 +16,7 @@ use Alchemy\Phrasea\Application\Helper\SubDefinitionSubstituerAware; use Alchemy\Phrasea\Controller\Controller; use Alchemy\Phrasea\Controller\RecordsRequest; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Metadata\PhraseanetMetadataReader; use Alchemy\Phrasea\Metadata\PhraseanetMetadataSetter; @@ -156,7 +157,7 @@ class ToolsController extends Controller } if (!$substituted || $force) { - $record->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record)); } } diff --git a/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php b/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php index 27d18d5473..15cadafa52 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/UploadController.php @@ -181,8 +181,8 @@ class UploadController extends Controller $uploadedFilename = $file->getRealPath(); $renamedFilename = null; - if(!empty($this->app['conf']->get(['main', 'storage', 'tmp_files']))) { - $tmpStorage = \p4string::addEndSlash($this->app['conf']->get(['main', 'storage', 'tmp_files'])).'upload/'; + if(!empty($this->app['conf']->get(['main', 'storage', 'worker_tmp_files']))) { + $tmpStorage = \p4string::addEndSlash($this->app['conf']->get(['main', 'storage', 'worker_tmp_files'])).'upload/'; if(!is_dir($tmpStorage)){ $this->getFilesystem()->mkdir($tmpStorage); diff --git a/lib/Alchemy/Phrasea/Controller/RecordsRequest.php b/lib/Alchemy/Phrasea/Controller/RecordsRequest.php index bb911d15b9..798f556ca7 100644 --- a/lib/Alchemy/Phrasea/Controller/RecordsRequest.php +++ b/lib/Alchemy/Phrasea/Controller/RecordsRequest.php @@ -11,6 +11,7 @@ namespace Alchemy\Phrasea\Controller; +use Alchemy\Phrasea\Model\Converter\BasketConverter; use Alchemy\Phrasea\Model\Entities\Basket; use Doctrine\Common\Collections\ArrayCollection; use Alchemy\Phrasea\Application; @@ -21,6 +22,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class RecordsRequest extends ArrayCollection { protected $isSingleStory = false; + protected $rejected; protected $received; protected $basket; protected $databoxes; @@ -31,30 +33,40 @@ class RecordsRequest extends ArrayCollection const FLATTEN_YES_PRESERVE_STORIES = 'preserve'; /** - * Constructor + * RecordsRequest Constructor * * @param array $elements + * @param ArrayCollection $rejected * @param ArrayCollection $received - * @param Basket $basket + * @param Basket|null $basket * @param Boolean $flatten */ - public function __construct(array $elements, ArrayCollection $received, Basket $basket = null, $flatten = self::FLATTEN_NO) + public function __construct(array $elements, ArrayCollection $rejected, ArrayCollection $received, Basket $basket = null, $flatten = self::FLATTEN_NO) { parent::__construct($elements); $this->received = $received; + $this->rejected = $rejected; $this->basket = $basket; - $this->isSingleStory = ($flatten !== self::FLATTEN_YES && 1 === count($this) && $this->first()->isStory()); + // since stories are already flattened by "fromRequest" (to apply rights on children), + // flagging "isSingleStory" is a bit more difficult than checking the first item... + // $this->isSingleStory = ($flatten !== self::FLATTEN_YES && count($this) === 1 && $this->first()->isStory()); - if (self::FLATTEN_NO !== $flatten) { + if ($flatten !== self::FLATTEN_NO) { $to_remove = []; /** @var record_adapter $record */ foreach ($this as $key => $record) { if ($record->isStory()) { - if (self::FLATTEN_YES === $flatten) { + if ($flatten === self::FLATTEN_YES) { + // simple flatten : remove the story $to_remove[] = $key; } - foreach ($record->getChildren() as $child) { - $this->set($child->getId(), $child); + + try { + foreach ($record->getChildren() as $child) { + $this->set($child->getId(), $child); + } + } catch (\Exception $e) { + // getChildren will no fail since record IS a story } } } @@ -64,11 +76,39 @@ class RecordsRequest extends ArrayCollection } } +// We check that the list contains only one story, and that every other items (records) are children of this story + // Too bad : there is no "isChildOf" method :( + $rec = []; + $children = []; + $this->isSingleStory = false; + $i = 0; - $records = $this->toArray(); - array_walk($records, function (\record_adapter $record) use (&$i) { + foreach ($this as $key => $record) { + if($record->isStory()) { + if($this->isSingleStory) { + // we already found a story, we cannot have 2, game over + $this->isSingleStory = false; + break; + } + $this->isSingleStory = true; + foreach ($record->getChildren() as $child) { + $children[$child->getId()] = 1; // to later find by key + } + } + else { + $rec[] = $record->getId(); + } $record->setNumber($i++); - }); + } + if($this->isSingleStory) { + foreach ($rec as $rid) { + if(!array_key_exists($rid, $children)) { + // one record is not a child, game over + $this->isSingleStory = false; + break; + } + } + } } /** @@ -106,7 +146,7 @@ class RecordsRequest extends ArrayCollection /** @var \record_adapter $record */ foreach ($this as $record) { if (! isset($this->collections[$record->getBaseId()])) { - $this->collections[$record->getBaseId()] = $record->get_collection(); + $this->collections[$record->getBaseId()] = $record->getCollection(); } } @@ -126,6 +166,16 @@ class RecordsRequest extends ArrayCollection return $this->received; } + /** + * Return all rejected records + * + * @return \record_adapter[]|ArrayCollection + */ + public function rejected() + { + return $this->rejected; + } + /** * Return basket entity if provided, null otherwise * @@ -201,15 +251,18 @@ class RecordsRequest extends ArrayCollection * @param boolean $flattenStories * @param array $rightsColl * @param array $rightsDatabox - * @return RecordsRequest|\record_adapter[] + * @return RecordsRequest + * @throws \Alchemy\Phrasea\Cache\Exception */ public static function fromRequest(Application $app, Request $request, $flattenStories = self::FLATTEN_NO, array $rightsColl = [], array $rightsDatabox = []) { - $elements = $received = []; + $received = []; $basket = null; if ($request->get('ssel')) { - $basket = $app['converter.basket']->convert($request->get('ssel')); + /** @var BasketConverter $basketConverter */ + $basketConverter = $app['converter.basket']; + $basket = $basketConverter->convert($request->get('ssel')); $app['acl.basket']->hasAccess($basket, $app->getAuthenticatedUser()); foreach ($basket->getElements() as $basket_element) { @@ -240,35 +293,56 @@ class RecordsRequest extends ArrayCollection } } + // fill an array with records from flattened stories $elements = $received; - $to_remove = []; - - foreach ($elements as $id => $record) { - if (!$app->getAclForUser($app->getAuthenticatedUser())->has_access_to_record($record)) { - $to_remove[] = $id; - continue; - } - - foreach ($rightsColl as $right) { - if (!$app->getAclForUser($app->getAuthenticatedUser())->has_right_on_base($record->get_base_id(), $right)) { - $to_remove[] = $id; - continue; - } - } - - foreach ($rightsDatabox as $right) { - if (!$app->getAclForUser($app->getAuthenticatedUser())->has_right_on_sbas($record->get_sbas_id(), $right)) { - $to_remove[] = $id; - continue; + if ($flattenStories !== self::FLATTEN_NO) { + /** @var record_adapter $record */ + foreach ($received as $key => $record) { + if ($record->isStory()) { + if ($flattenStories === self::FLATTEN_YES) { + // simple flatten : remove the story from elements + unset($elements[$key]); + } + foreach ($record->getChildren() as $child) { + $elements[$child->getId()] = $child; + } } } } - foreach ($to_remove as $id) { - unset($elements[$id]); + // apply rights filter, remove from elements if no rights + $rejected = []; + $acl = $app->getAclForUser($app->getAuthenticatedUser()); + foreach ($elements as $key => $record) { + // any false or unknown right will throw exception and the record will be rejected + try { + if (!$acl->has_access_to_record($record)) { + throw new \Exception(); + } + + foreach ($rightsColl as $right) { + if (!$acl->has_right_on_base($record->getBaseId(), $right)) { + throw new \Exception(); + } + } + + foreach ($rightsDatabox as $right) { + if (!$acl->has_right_on_sbas($record->getDataboxId(), $right)) { + throw new \Exception(); + } + } + } + catch (\Exception $e) { + $rejected[$key] = $record; + } + } + // remove rejected from elements + foreach ($rejected as $key => $record) { + unset($elements[$key]); } - return new static($elements, new ArrayCollection($received), $basket, $flattenStories); + // flattening is already done + return new static($elements, new ArrayCollection($rejected), new ArrayCollection($received), $basket, self::FLATTEN_NO); } } diff --git a/lib/Alchemy/Phrasea/Controller/Root/AccountController.php b/lib/Alchemy/Phrasea/Controller/Root/AccountController.php index b4053a6ce1..b56d428cec 100644 --- a/lib/Alchemy/Phrasea/Controller/Root/AccountController.php +++ b/lib/Alchemy/Phrasea/Controller/Root/AccountController.php @@ -458,9 +458,9 @@ class AccountController extends Controller ->setZipCode($request->request->get("form_zip")) ->setPhone($request->request->get("form_phone")) ->setFax($request->request->get("form_fax")) - ->setJob($request->request->get("form_activity")) + ->setJob($request->request->get("form_function")) ->setCompany($request->request->get("form_company")) - ->setPosition($request->request->get("form_function")) + ->setPosition($request->request->get("form_activity")) ->setNotifications((Boolean) $request->request->get("mail_notifications")); $service->updateAccount($command); @@ -518,7 +518,9 @@ class AccountController extends Controller $this->getApiApplicationManipulator()->deleteApiApplications($applications); - // revoke access and delete phraseanet user account + // get list of old granted base_id then revoke access and delete phraseanet user account + + $oldGrantedBaseIds = array_keys($this->app->getAclForUser($user)->get_granted_base()); $list = array_keys($this->app['repo.collections-registry']->getBaseIdMap()); @@ -542,8 +544,9 @@ class AccountController extends Controller $mail = null; } - $this->app['manipulator.user']->delete($user); + $mail = MailSuccessAccountDelete::create($this->app, $receiver); + $this->app['manipulator.user']->delete($user, [$user->getId() => $oldGrantedBaseIds]); if($mail) { $this->deliver($mail); } diff --git a/lib/Alchemy/Phrasea/Controller/SetupController.php b/lib/Alchemy/Phrasea/Controller/SetupController.php index 8e3b588326..af6cff5029 100644 --- a/lib/Alchemy/Phrasea/Controller/SetupController.php +++ b/lib/Alchemy/Phrasea/Controller/SetupController.php @@ -174,7 +174,9 @@ class SetupController extends Controller $email = $request->request->get('email'); $password = $request->request->get('password'); $template = $request->request->get('db_template'); - $dataPath = $request->request->get('datapath_noweb'); + $storagePath = [ + 'subdefs' => $request->request->get('datapath_noweb') + ]; try { $installer = $this->app['phraseanet.installer']; @@ -193,7 +195,7 @@ class SetupController extends Controller $binaryData[$key] = $path; } - $user = $installer->install($email, $password, $abConn, $servername, $dataPath, $dbConn, $template, $binaryData); + $user = $installer->install($email, $password, $abConn, $servername, $storagePath, $dbConn, $template, $binaryData); $this->app->getAuthenticator()->openAccount($user); 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/Lightbox.php b/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php index c1485b862c..7e18fff788 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Lightbox.php @@ -105,6 +105,11 @@ class Lightbox implements ControllerProviderInterface, ServiceProviderInterface ->assert('basket', '\d+') ; + $controllers->get('/ajax/GET_ELEMENTS/{basket}/', 'controller.lightbox:ajaxGetElementsAction') + ->bind('lightbox_ajax_get_elements') + ->assert('basket', '\d+') + ; + return $controllers; } 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/ControllerProvider/Prod/Push.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php index 48352e1e39..40b93220c0 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Push.php @@ -59,6 +59,9 @@ class Push implements ControllerProviderInterface, ServiceProviderInterface $controllers->post('/validate/', 'controller.prod.push:validateAction') ->bind('prod_push_validate'); + $controllers->post('/update-expiration/', 'controller.prod.push:updateExpirationAction') + ->bind('prod_push_do_update_expiration'); + $controllers->get('/user/{usr_id}/', 'controller.prod.push:getUserAction') ->assert('usr_id', '\d+'); diff --git a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php index 104230411d..24fcff9b2c 100644 --- a/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php +++ b/lib/Alchemy/Phrasea/Core/Configuration/DisplaySettingService.php @@ -20,6 +20,7 @@ class DisplaySettingService const ORDER_BY_ADMIN = "ORDER_BY_ADMIN"; const ORDER_BY_BCT = "ORDER_BY_BCT"; const ORDER_BY_HITS = "ORDER_BY_HITS"; + const ORDER_BY_HITS_ASC = "ORDER_BY_HITS_ASC"; /** * The default user settings. @@ -31,7 +32,7 @@ class DisplaySettingService 'images_per_page' => '20', 'images_size' => '120', 'editing_images_size' => '134', - 'editing_top_box' => '180px', + 'editing_top_box' => '120px', 'editing_right_box' => '400px', 'editing_left_box' => '710px', 'basket_sort_field' => 'name', diff --git a/lib/Alchemy/Phrasea/Core/Configuration/RegistryFormManipulator.php b/lib/Alchemy/Phrasea/Core/Configuration/RegistryFormManipulator.php index fbce72ccc7..9ebd69c829 100644 --- a/lib/Alchemy/Phrasea/Core/Configuration/RegistryFormManipulator.php +++ b/lib/Alchemy/Phrasea/Core/Configuration/RegistryFormManipulator.php @@ -102,6 +102,8 @@ class RegistryFormManipulator 'keywords' => null, 'description' => null, 'analytics' => null, + 'matomo-analytics-url' => null, + 'matomo-analytics-id' => null, 'allow-indexation' => true, 'home-presentation-mode' => 'GALLERIA', 'default-subdef-url-ttl' => 7200, diff --git a/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php b/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php new file mode 100644 index 0000000000..3acafb4c70 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/ExportMailEvent.php @@ -0,0 +1,53 @@ +emitterUserId = $emitterUserId; + $this->tokenValue = $tokenValue; + $this->destinationMails = $destMails; + $this->params = $params; + } + + public function getTokenValue() + { + return $this->tokenValue; + } + + public function getDestinationMails() + { + return $this->destinationMails; + } + + public function getEmitterUserId() + { + return $this->emitterUserId; + } + + public function getParams() + { + return $this->params; + } +} diff --git a/lib/Alchemy/Phrasea/Core/Event/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/Event/Record/DeleteEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php new file mode 100644 index 0000000000..8d8bfdb379 --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/Record/DeleteEvent.php @@ -0,0 +1,7 @@ +isNewRecord = $isNewRecord; + } + + /** + * @return bool + */ + public function isNewRecord() + { + return $this->isNewRecord; + } +} diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php index fca66dab4a..d3c05a64b6 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/ExportSubscriber.php @@ -12,7 +12,15 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\ExportFailureEvent; +use Alchemy\Phrasea\Core\Event\ExportMailEvent; use Alchemy\Phrasea\Core\PhraseaEvents; +use Alchemy\Phrasea\Exception\InvalidArgumentException; +use Alchemy\Phrasea\Model\Entities\Token; +use Alchemy\Phrasea\Model\Repositories\TokenRepository; +use Alchemy\Phrasea\Model\Repositories\UserRepository; +use Alchemy\Phrasea\Notification\Emitter; +use Alchemy\Phrasea\Notification\Mail\MailRecordsExport; +use Alchemy\Phrasea\Notification\Receiver; class ExportSubscriber extends AbstractNotificationSubscriber { @@ -39,10 +47,65 @@ class ExportSubscriber extends AbstractNotificationSubscriber $this->app['event-manager']->notify($params['usr_id'], 'eventsmanager_notify_downloadmailfail', $datas, $mailed); } + public function onCreateExportMail(ExportMailEvent $event) + { + $destMails = $event->getDestinationMails(); + + $params = $event->getParams(); + + /** @var UserRepository $userRepository */ + $userRepository = $this->app['repo.users']; + + $user = $userRepository->find($event->getEmitterUserId()); + + /** @var TokenRepository $tokenRepository */ + $tokenRepository = $this->app['repo.tokens']; + + /** @var Token $token */ + $token = $tokenRepository->findValidToken($event->getTokenValue()); + + $list = unserialize($token->getData()); + + //zip documents + \set_export::build_zip( + $this->app, + $token, + $list, + $this->app['tmp.download.path'].'/'. $token->getValue() . '.zip' + ); + + $remaingEmails = $destMails; + + $emitter = new Emitter($user->getDisplayName(), $user->getEmail()); + + foreach ($destMails as $key => $mail) { + try { + $receiver = new Receiver(null, trim($mail)); + } catch (InvalidArgumentException $e) { + continue; + } + + $mail = MailRecordsExport::create($this->app, $receiver, $emitter, $params['textmail']); + $mail->setButtonUrl($params['url']); + $mail->setExpiration($token->getExpiration()); + + $this->deliver($mail, $params['reading_confirm']); + unset($remaingEmails[$key]); + } + + //some mails failed + if (count($remaingEmails) > 0) { + foreach ($remaingEmails as $mail) { + $this->app['dispatcher']->dispatch(PhraseaEvents::EXPORT_MAIL_FAILURE, new ExportFailureEvent($user, $params['ssttid'], $params['lst'], \eventsmanager_notify_downloadmailfail::MAIL_FAIL, $mail)); + } + } + } + public static function getSubscribedEvents() { return [ - PhraseaEvents::EXPORT_MAIL_FAILURE => 'onMailExportFailure' + PhraseaEvents::EXPORT_MAIL_FAILURE => 'onMailExportFailure', + PhraseaEvents::EXPORT_MAIL_CREATE => 'onCreateExportMail', ]; } } diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php index 03a72a95b4..e229cc3f44 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/FeedEntrySubscriber.php @@ -13,7 +13,9 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\FeedEntryEvent; use Alchemy\Phrasea\Core\PhraseaEvents; +use Alchemy\Phrasea\Model\Entities\User; use Alchemy\Phrasea\Model\Entities\WebhookEvent; +use Alchemy\Phrasea\Model\Manipulator\TokenManipulator; use Alchemy\Phrasea\Notification\Receiver; use Alchemy\Phrasea\Notification\Mail\MailInfoNewPublication; @@ -31,7 +33,8 @@ class FeedEntrySubscriber extends AbstractNotificationSubscriber $this->app['manipulator.webhook-event']->create( WebhookEvent::NEW_FEED_ENTRY, WebhookEvent::FEED_ENTRY_TYPE, - array_merge(array('feed_id' => $entry->getFeed()->getId()), $params) + array_merge(array('feed_id' => $entry->getFeed()->getId()), $params), + $entry->getFeed()->getBaseId() ? [$entry->getFeed()->getBaseId()] : [] ); $datas = json_encode($params); @@ -53,36 +56,43 @@ class FeedEntrySubscriber extends AbstractNotificationSubscriber do { $results = $Query->limit($start, $perLoop)->execute()->get_results(); - foreach ($results as $user_to_notif) { - $mailed = false; + $users_emailed = []; // for all users + $users_to_email = []; // list only users who must be emailed (=create tokens) - if ($params['notify_email'] && $this->shouldSendNotificationFor($user_to_notif, 'eventsmanager_notify_feed')) { - $readyToSend = false; - try { - $token = $this->app['manipulator.token']->createFeedEntryToken($user_to_notif, $entry); - $url = $this->app->url('lightbox', ['LOG' => $token->getValue()]); - - $receiver = Receiver::fromUser($user_to_notif); - $readyToSend = true; - } catch (\Exception $e) { - - } - - if ($readyToSend) { - $mail = MailInfoNewPublication::create($this->app, $receiver); - $mail->setButtonUrl($url); - $mail->setAuthor($entry->getAuthorName()); - $mail->setTitle($entry->getTitle()); - - $this->deliver($mail); - $mailed = true; - } + /** @var User $user */ + foreach ($results as $user) { + $users_emailed[$user->getId()] = false; + if ($params['notify_email'] && $this->shouldSendNotificationFor($user, 'eventsmanager_notify_feed')) { + $users_to_email[$user->getId()] = $user; } - - $this->app['events-manager']->notify($user_to_notif->getId(), 'eventsmanager_notify_feed', $datas, $mailed); } + + // get many tokens in one shot + $tokens = $this->getTokenManipulator()->createFeedEntryTokens($users_to_email, $entry); + foreach($tokens as $token) { + try { + $url = $this->app->url('lightbox', ['LOG' => $token->getValue()]); + $receiver = Receiver::fromUser($token->getUser()); + + $mail = MailInfoNewPublication::create($this->app, $receiver); + $mail->setButtonUrl($url); + $mail->setAuthor($entry->getAuthorName()); + $mail->setTitle($entry->getTitle()); + + $this->deliver($mail); + $users_emailed[$token->getUser()->getId()] = true; + } + catch (\Exception $e) { + // no-op + } + } + foreach($users_emailed as $id => $emailed) { + $this->app['events-manager']->notify($id, 'eventsmanager_notify_feed', $datas, $emailed); + } + $start += $perLoop; - } while (count($results) > 0); + } + while (count($results) > 0); } public static function getSubscribedEvents() @@ -91,4 +101,12 @@ class FeedEntrySubscriber extends AbstractNotificationSubscriber PhraseaEvents::FEED_ENTRY_CREATE => 'onCreate', ]; } + + /** + * @return TokenManipulator + */ + private function getTokenManipulator() + { + return $this->app['manipulator.token']; + } } diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php index 142537f418..01f7e7b235 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/OrderSubscriber.php @@ -41,13 +41,13 @@ class OrderSubscriber extends AbstractNotificationSubscriber public function onCreate(OrderEvent $event) { - $base_ids = array_unique(array_map(function (OrderElement $element) { + $baseIds = array_unique(array_map(function (OrderElement $element) { return $element->getBaseId(); }, iterator_to_array($event->getOrder()->getElements()))); $query = $this->app['phraseanet.user-query']; /** @var User[] $users */ - $users = $query->on_base_ids($base_ids) + $users = $query->on_base_ids($baseIds) ->who_have_right([\ACL::ORDER_MASTER]) ->execute()->get_results(); @@ -60,10 +60,12 @@ class OrderSubscriber extends AbstractNotificationSubscriber 'order_id' => $event->getOrder()->getId(), ]); - $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); + // notify by webhook + $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_WEBHOOK); - $notifier->notifyCreation($event->getOrder(), $event->getOrder()->getUser()); + $notifier->notifyCreation($event->getOrder(), $event->getOrder()->getUser(), $baseIds); + // notify by mail $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_MAIL); foreach ($users as $user) { @@ -85,7 +87,13 @@ class OrderSubscriber extends AbstractNotificationSubscriber public function onDeliver(OrderDeliveryEvent $event) { + // notify by webhook + $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_WEBHOOK); + $notifier->notifyDelivery($event->getDelivery(), $event->getDelivery()->getPartialOrder()->getBaseIds()); + $notified = false; + + // actually NotificationMethod is always by mail $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notificationData = json_encode([ 'from' => $event->getDelivery()->getAdmin()->getId(), @@ -109,7 +117,13 @@ class OrderSubscriber extends AbstractNotificationSubscriber public function onDeny(OrderDeliveryEvent $event) { + // notify by webhook + $notifier = $this->notifierRegistry->getNotifier(Order::NOTIFY_WEBHOOK); + $notifier->notifyDenial($event->getDelivery(), $event->getDelivery()->getPartialOrder()->getBaseIds()); + $notified = false; + + // actually NotificationMethod is always by mail $notifier = $this->notifierRegistry->getNotifier($event->getOrder()->getNotificationMethod()); $notificationData = json_encode([ 'from' => $event->getDelivery()->getAdmin()->getId(), diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php index d5c0c69f54..8307749eb5 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/RecordEditSubscriber.php @@ -11,8 +11,10 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber; use Alchemy\Phrasea\Core\Event\Record\CollectionChangedEvent; +use Alchemy\Phrasea\Core\Event\Record\DeleteEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\Event\RecordEdit; use Alchemy\Phrasea\Core\PhraseaEvents; use Alchemy\Phrasea\Metadata\Tag\TfEditdate; @@ -26,10 +28,12 @@ class RecordEditSubscriber implements EventSubscriberInterface public static function getSubscribedEvents() { return array( - PhraseaEvents::RECORD_EDIT => 'onEdit', - PhraseaEvents::RECORD_UPLOAD => 'onEdit', - RecordEvents::ROTATE => 'onRecordChange', - RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', + PhraseaEvents::RECORD_EDIT => 'onEdit', + PhraseaEvents::RECORD_UPLOAD => 'onEdit', + RecordEvents::ROTATE => 'onRecordChange', + RecordEvents::COLLECTION_CHANGED => 'onCollectionChanged', + RecordEvents::SUBDEFINITION_CREATE => 'onSubdefinitionCreate', + RecordEvents::DELETE => 'onDelete', ); } @@ -49,6 +53,18 @@ class RecordEditSubscriber implements EventSubscriberInterface $recordAdapter->clearStampCache(); } + public function onSubdefinitionCreate(SubdefinitionCreateEvent $event) + { + $recordAdapter = $this->convertToRecordAdapter($event->getRecord()); + $recordAdapter->rebuild_subdefs(); + } + + public function onDelete(DeleteEvent $event) + { + $recordAdapter = $this->convertToRecordAdapter($event->getRecord()); + $recordAdapter->delete(); + } + public function onEdit(RecordEdit $event) { static $into = false; diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php new file mode 100644 index 0000000000..ca5d88b2ab --- /dev/null +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookSubdefEventSubscriber.php @@ -0,0 +1,75 @@ +app = $app; + } + + public function onSubdefCreated(SubDefinitionCreatedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef' => $event->getSubDefinitionName() + ]; + + $this->app['manipulator.webhook-event']->create( + WebhookEvent::RECORD_SUBDEF_CREATED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public function onSubdefCreationFailed(SubDefinitionCreationFailedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef' => $event->getSubDefinitionName() + ]; + + $this->app['manipulator.webhook-event']->create( + WebhookEvent::RECORD_SUBDEF_FAILED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public function onSubdefsCreated(SubDefinitionsCreatedEvent $event) + { + $eventData = [ + 'databox_id' => $event->getRecord()->getDataboxId(), + 'record_id' => $event->getRecord()->getRecordId(), + 'subdef_count' => count($event->getMedia()) + ]; + + $this->app['manipulator.webhook-event']->create( + WebhookEvent::RECORD_SUBDEFS_CREATED, + WebhookEvent::RECORD_SUBDEF_TYPE, + $eventData + ); + } + + public static function getSubscribedEvents() + { + return [ + RecordEvents::SUB_DEFINITION_CREATED => 'onSubdefCreated', + RecordEvents::SUB_DEFINITIONS_CREATED => 'onSubdefsCreated', + RecordEvents::SUB_DEFINITION_CREATION_FAILED => 'onSubdefCreationFailed' + ]; + } +} diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php index a2f935bf89..74c1c6c23a 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php +++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/WebhookUserEventSubscriber.php @@ -45,7 +45,7 @@ class WebhookUserEventSubscriber implements EventSubscriberInterface 'user_id' => $event->getUserId(), 'email' => $event->getEmailAddress(), 'login' => $event->getLogin() - ]); + ], $event->getGrantedBaseIds()); } public static function getSubscribedEvents() diff --git a/lib/Alchemy/Phrasea/Core/Event/User/DeletedEvent.php b/lib/Alchemy/Phrasea/Core/Event/User/DeletedEvent.php index b67ba45b24..1528917245 100644 --- a/lib/Alchemy/Phrasea/Core/Event/User/DeletedEvent.php +++ b/lib/Alchemy/Phrasea/Core/Event/User/DeletedEvent.php @@ -36,4 +36,12 @@ class DeletedEvent extends UserEvent { return $this->args['email']; } + + /** + * @return array + */ + public function getGrantedBaseIds() + { + return $this->args['grantedBaseIds']; + } } diff --git a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php index 206efee9b2..8a463c2868 100644 --- a/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php +++ b/lib/Alchemy/Phrasea/Core/MetaProvider/DatabaseMetaProvider.php @@ -84,10 +84,14 @@ class DatabaseMetaProvider implements ServiceProviderInterface $service = $app['phraseanet.cache-service']; $config->setMetadataCacheImpl( - $service->factory('ORM_metadata', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/metadata', + )) ); $config->setQueryCacheImpl( - $service->factory('ORM_query', $app['orm.cache.driver'], $app['orm.cache.options']) + $app['orm.cache.factory.filesystem'](array( + 'path' => $app['cache.path'].'/doctrine/query', + )) ); $config->setResultCacheImpl( $service->factory('ORM_result', $app['orm.cache.driver'], $app['orm.cache.options']) diff --git a/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php b/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php index 5092c6c77f..cc55894313 100644 --- a/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/MetaProvider/MediaUtilitiesMetaServiceProvider.php @@ -9,6 +9,8 @@ use MediaVorus\MediaVorusServiceProvider; use MP4Box\MP4BoxServiceProvider; use Neutron\Silex\Provider\ImagineServiceProvider; use PHPExiftool\PHPExiftoolServiceProvider; +use PHPExiftool\Reader; +use PHPExiftool\Writer; use Silex\Application; use Silex\ServiceProviderInterface; @@ -48,6 +50,21 @@ class MediaUtilitiesMetaServiceProvider implements ServiceProviderInterface public function boot(Application $app) { - // no-op + if(isset($app['exiftool.reader']) && isset($app['conf'])) { + try { + $timeout = $app['conf']->get(['main', 'binaries', 'exiftool_timeout'], 60); + + /** @var Reader $exiftoolReader */ + $exiftoolReader = $app['exiftool.reader']; + $exiftoolReader->setTimeout($timeout); + + /** @var Writer $exiftoolWriter */ + $exiftoolWriter = $app['exiftool.writer']; + $exiftoolWriter->setTimeout($timeout); + } + catch(\Exception $e) { + // no-nop + } + } } } diff --git a/lib/Alchemy/Phrasea/Core/PhraseaEvents.php b/lib/Alchemy/Phrasea/Core/PhraseaEvents.php index 97c9c10ba5..90adac69dd 100644 --- a/lib/Alchemy/Phrasea/Core/PhraseaEvents.php +++ b/lib/Alchemy/Phrasea/Core/PhraseaEvents.php @@ -48,7 +48,8 @@ final class PhraseaEvents const BRIDGE_UPLOAD_FAILURE = 'bridge.upload-failure'; const EXPORT_MAIL_FAILURE = 'export.mail-failure'; - const EXPORT_CREATE = 'export.create'; + const EXPORT_CREATE = 'export.create'; + const EXPORT_MAIL_CREATE = 'export.mail-create'; const RECORD_EDIT = 'record.edit'; const RECORD_UPLOAD = 'record.upload'; diff --git a/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/Provider/SearchEngineServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php index 58f77475a1..8968ef5f0a 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/SearchEngineServiceProvider.php @@ -43,6 +43,7 @@ use Silex\ServiceProviderInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpKernel\KernelEvents; + class SearchEngineServiceProvider implements ServiceProviderInterface { public function register(Application $app) @@ -97,7 +98,7 @@ class SearchEngineServiceProvider implements ServiceProviderInterface }); $app['elasticsearch.facets_response.factory'] = $app->protect(function (array $response) use ($app) { - return new FacetsResponse(new Escaper(), $response, $app['search_engine.structure']); + return new FacetsResponse($app['elasticsearch.options'], new Escaper(), $response, $app['search_engine.structure']); }); return $app; @@ -145,6 +146,7 @@ class SearchEngineServiceProvider implements ServiceProviderInterface $app['elasticsearch.indexer.databox_fetcher_factory'] = $app->share(function ($app) { return new DataboxFetcherFactory( + $app['conf'], $app['elasticsearch.record_helper'], $app['elasticsearch.options'], $app, @@ -228,7 +230,8 @@ class SearchEngineServiceProvider implements ServiceProviderInterface }); $app['elasticsearch.options'] = $app->share(function ($app) { - $options = ElasticsearchOptions::fromArray($app['conf']->get(['main', 'search-engine', 'options'], [])); + $conf = $app['conf']->get(['main', 'search-engine', 'options'], []); + $options = ElasticsearchOptions::fromArray($conf); if (empty($options->getIndexName())) { $options->setIndexName(strtolower(sprintf('phraseanet_%s', str_replace( diff --git a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php index 4b280c92f0..43a5aeafa4 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/WebhookServiceProvider.php @@ -2,6 +2,7 @@ namespace Alchemy\Phrasea\Core\Provider; +use Alchemy\Phrasea\Core\Event\Subscriber\WebhookSubdefEventSubscriber; use Alchemy\Phrasea\Webhook\EventProcessorFactory; use Alchemy\Phrasea\Webhook\EventProcessorWorker; use Alchemy\Phrasea\Webhook\WebhookInvoker; @@ -10,6 +11,7 @@ use Alchemy\Worker\CallableWorkerFactory; use Alchemy\Worker\TypeBasedWorkerResolver; use Silex\Application; use Silex\ServiceProviderInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; class WebhookServiceProvider implements ServiceProviderInterface { @@ -58,6 +60,14 @@ class WebhookServiceProvider implements ServiceProviderInterface return $resolver; } ); + + $app['dispatcher'] = $app->share( + $app->extend('dispatcher', function (EventDispatcher $dispatcher, Application $app) { + $dispatcher->addSubscriber(new WebhookSubdefEventSubscriber($app)); + + return $dispatcher; + }) + ); } private function createAlias(Application $app, $alias, $targetServiceKey) @@ -69,6 +79,6 @@ class WebhookServiceProvider implements ServiceProviderInterface public function boot(Application $app) { - // no-op + } } diff --git a/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php index 1b2e15d4f0..9931d4649f 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/WorkerConfigurationServiceProvider.php @@ -32,11 +32,12 @@ class WorkerConfigurationServiceProvider implements ServiceProviderInterface $app['alchemy_queues.queues'] = $app->share(function (Application $app) { $defaultConfiguration = [ 'worker-queue' => [ - 'registry' => 'alchemy_worker.queue_registry', - 'host' => 'localhost', - 'port' => 5672, - 'user' => 'guest', - 'vhost' => '/' + 'registry' => 'alchemy_worker.queue_registry', + 'host' => 'localhost', + 'port' => 5672, + 'user' => 'guest', + 'password' => 'guest', + 'vhost' => '/' ] ]; @@ -46,19 +47,22 @@ class WorkerConfigurationServiceProvider implements ServiceProviderInterface $queueConfigurations = $configuration->get(['workers', 'queue'], $defaultConfiguration); - $queueConfiguration = reset($queueConfigurations); - $queueKey = key($queueConfigurations); + $config = []; - if (! isset($queueConfiguration['name'])) { - if (! is_string($queueKey)) { - throw new \RuntimeException('Invalid queue configuration: configuration has no key or name.'); + foreach($queueConfigurations as $name => $queueConfiguration) { + $queueKey = $name; + + if (! isset($queueConfiguration['name'])) { + if (! is_string($queueKey)) { + throw new \RuntimeException('Invalid queue configuration: configuration has no key or name.'); + } + + $queueConfiguration['name'] = $queueKey; } - $queueConfiguration['name'] = $queueKey; + $config[$queueConfiguration['name']] = $queueConfiguration ; } - $config = [ $queueConfiguration['name'] => $queueConfiguration ]; - return $config; } catch (RuntimeException $exception) { diff --git a/lib/Alchemy/Phrasea/Core/Version.php b/lib/Alchemy/Phrasea/Core/Version.php index 0e15108724..82a64c0955 100644 --- a/lib/Alchemy/Phrasea/Core/Version.php +++ b/lib/Alchemy/Phrasea/Core/Version.php @@ -16,7 +16,8 @@ class Version /** * @var string */ - private $number = '4.1.0-alpha.15a'; + + private $number = '4.1.0-alpha.26a'; /** * @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/Form/Configuration/GeneralFormType.php b/lib/Alchemy/Phrasea/Form/Configuration/GeneralFormType.php index 5a1c6a645e..767c91a782 100644 --- a/lib/Alchemy/Phrasea/Form/Configuration/GeneralFormType.php +++ b/lib/Alchemy/Phrasea/Form/Configuration/GeneralFormType.php @@ -38,6 +38,12 @@ class GeneralFormType extends AbstractType $builder->add('analytics', 'text', [ 'label' => 'Google Analytics identifier', ]); + $builder->add('matomo-analytics-url', 'text', [ + 'label' => 'Matomo Analytics url', + ]); + $builder->add('matomo-analytics-id', 'text', [ + 'label' => 'Matomo Analytics identifier', + ]); $builder->add('allow-indexation', 'checkbox', [ 'label' => 'Allow the website to be indexed by search engines like Google', ]); diff --git a/lib/Alchemy/Phrasea/Helper/User/Edit.php b/lib/Alchemy/Phrasea/Helper/User/Edit.php index 5c760a55de..970b2ec8e1 100644 --- a/lib/Alchemy/Phrasea/Helper/User/Edit.php +++ b/lib/Alchemy/Phrasea/Helper/User/Edit.php @@ -73,10 +73,12 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper { $list = array_keys($this->app->getAclForUser($this->app->getAuthenticatedUser())->get_granted_base([\ACL::CANADMIN])); + $oldGrantedBaseIds = array_keys($this->app->getAclForUser($user)->get_granted_base()); + $this->app->getAclForUser($user)->revoke_access_from_bases($list); if ($this->app->getAclForUser($user)->is_phantom()) { - $this->app['manipulator.user']->delete($user); + $this->app['manipulator.user']->delete($user, [$user->getId() => $oldGrantedBaseIds]); } return $this; @@ -583,8 +585,8 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper $user = $this->app['repo.users']->find($usr_id); $this->app->getAclForUser($user)->revoke_access_from_bases($delete) - ->give_access_to_base($create) - ->give_access_to_sbas($create_sbas); + ->give_access_to_sbas($create_sbas) // give access to sbas before bas + ->give_access_to_base($create); foreach ($update as $base_id => $rights) { $this->app->getAclForUser($user) @@ -657,8 +659,8 @@ class Edit extends \Alchemy\Phrasea\Helper\Helper ->setEmail($parm['email']) ->setAddress($parm['address']) ->setZipCode($parm['zip']) - ->setActivity($parm['function']) - ->setJob($parm['activite']) + ->setActivity($parm['activite']) + ->setJob($parm['function']) ->setCompany($parm['company']) ->setPhone($parm['telephone']) ->setFax($parm['fax']); diff --git a/lib/Alchemy/Phrasea/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/Media/SubdefGenerator.php b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php index 88867551a1..b6ebba31f3 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefGenerator.php +++ b/lib/Alchemy/Phrasea/Media/SubdefGenerator.php @@ -18,6 +18,7 @@ use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionsCreationEvent; use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationFailedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository; use Alchemy\Phrasea\Filesystem\FilesystemService; use Alchemy\Phrasea\Media\Subdef\Specification\PdfSpecification; use MediaAlchemyst\Alchemyst; @@ -56,7 +57,7 @@ class SubdefGenerator $this->filesystem = $filesystem; $this->logger = $logger; $this->mediavorus = $mediavorus; - $this->tmpDirectory = $this->app['conf']->get(['main', 'storage', 'tmp_files']);; + $this->tmpDirectory = $this->app['conf']->get(['main', 'storage', 'worker_tmp_files']);; } public function generateSubdefs(\record_adapter $record, array $wanted_subdefs = null) @@ -170,13 +171,53 @@ class SubdefGenerator unset($this->tmpFilePath); } - $this->dispatch( - RecordEvents::SUB_DEFINITIONS_CREATED, - new SubDefinitionsCreatedEvent( - $record, - $mediaCreated - ) - ); + // if we created subdef one by one + if (count($wanted_subdefs) == 1) { + $mediaSubdefRepository = $this->getMediaSubdefRepository($record->getDataboxId()); + $mediaSubdefs = $mediaSubdefRepository->findByRecordIdsAndNames([$record->getRecordId()]); + $medias = []; + foreach ($mediaSubdefs as $subdef) { + try { + $medias[$subdef->get_name()] = $this->mediavorus->guess($subdef->getRealPath()); + } catch (MediaVorusFileNotFoundException $e) { + + } + } + + $this->dispatch( + RecordEvents::SUB_DEFINITIONS_CREATED, + new SubDefinitionsCreatedEvent( + $record, + $medias + ) + ); + } else { + $this->dispatch( + RecordEvents::SUB_DEFINITIONS_CREATED, + new SubDefinitionsCreatedEvent( + $record, + $mediaCreated + ) + ); + } + } + + /** + * set a logger to use + * @param LoggerInterface $logger + */ + public function setLogger(LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * to get the logger + * @return LoggerInterface + */ + public function getLogger() + { + return $this->logger; } private function generateSubdef(\record_adapter $record, \databox_subdef $subdef_class, $pathdest) @@ -276,4 +317,14 @@ class SubdefGenerator $i = floor(log($bytes, 1024)); return round($bytes / pow(1024, $i), [0,0,2,2,3][$i]).['B','kB','MB','GB'][$i]; } + + /** + * @param $databoxId + * + * @return MediaSubdefRepository|Object + */ + private function getMediaSubdefRepository($databoxId) + { + return $this->app['provider.repo.media_subdef']->getRepositoryForDatabox($databoxId); + } } diff --git a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php index 2259fa572d..8f7aa61e90 100644 --- a/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php +++ b/lib/Alchemy/Phrasea/Media/SubdefSubstituer.php @@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Media; use Alchemy\Phrasea\Application; use Alchemy\Phrasea\Core\Event\Record\MediaSubstitutedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Filesystem\FilesystemService; use MediaAlchemyst\Alchemyst; use MediaAlchemyst\Exception\ExceptionInterface as MediaAlchemystException; @@ -79,7 +80,7 @@ class SubdefSubstituer $record->write_metas(); if ($shouldSubdefsBeRebuilt) { - $record->rebuild_subdefs(); + $this->dispatcher->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($record)); } $this->dispatcher->dispatch(RecordEvents::MEDIA_SUBSTITUTED, new MediaSubstitutedEvent($record)); diff --git a/lib/Alchemy/Phrasea/Model/Converter/BasketConverter.php b/lib/Alchemy/Phrasea/Model/Converter/BasketConverter.php index 4871ef3a45..568b5ef6d0 100644 --- a/lib/Alchemy/Phrasea/Model/Converter/BasketConverter.php +++ b/lib/Alchemy/Phrasea/Model/Converter/BasketConverter.php @@ -31,7 +31,8 @@ class BasketConverter implements ConverterInterface */ public function convert($id) { - if (null === $basket = $this->repository->find((int) $id)) { + /** @var Basket $basket */ + if ( ($basket = $this->repository->find((int) $id)) === null) { throw new NotFoundHttpException(sprintf('Basket %s not found.', $id)); } diff --git a/lib/Alchemy/Phrasea/Model/Entities/Basket.php b/lib/Alchemy/Phrasea/Model/Entities/Basket.php index c25b074634..eea18b21e0 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/Basket.php +++ b/lib/Alchemy/Phrasea/Model/Entities/Basket.php @@ -456,17 +456,27 @@ class Basket } public function hasRecord(Application $app, \record_adapter $record) + { + return !is_null($this->getElementByRecord($app, $record)); + } + + /** + * @param Application $app + * @param \record_adapter $record + * @return BasketElement + */ + public function getElementByRecord(Application $app, \record_adapter $record) { foreach ($this->getElements() as $basket_element) { $bask_record = $basket_element->getRecord($app); if ($bask_record->getRecordId() == $record->getRecordId() && $bask_record->getDataboxId() == $record->getDataboxId()) { - return true; + return $basket_element; } } - return false; + return null; } public function getSize(Application $app) 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/Entities/Token.php b/lib/Alchemy/Phrasea/Model/Entities/Token.php index 576cf05d36..81c632f97d 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/Token.php +++ b/lib/Alchemy/Phrasea/Model/Entities/Token.php @@ -15,7 +15,14 @@ use Doctrine\ORM\Mapping as ORM; use Gedmo\Mapping\Annotation as Gedmo; /** - * @ORM\Table(name="Tokens") + * @ORM\Table(name="Tokens", + * indexes={ + * @ORM\index(name="type", columns={"type"}), + * @ORM\index(name="created", columns={"created"}), + * @ORM\index(name="updated", columns={"updated"}), + * @ORM\index(name="expiration", columns={"expiration"}) + * } + * ) * @ORM\Entity(repositoryClass="Alchemy\Phrasea\Model\Repositories\TokenRepository") */ class Token diff --git a/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php b/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php index 275650f1b3..a1091f531f 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php +++ b/lib/Alchemy/Phrasea/Model/Entities/WebhookEvent.php @@ -68,6 +68,14 @@ class WebhookEvent */ private $created; + /** + * List of collection base_id concerned + * @var array + * + * @ORM\Column(name="collection_base_ids", type="json_array", nullable=true) + */ + private $collectionBaseIds; + /** * @param \DateTime $created * @@ -175,4 +183,24 @@ class WebhookEvent return $this; } + + /** + * @param array $collectionBaseIds + * + * @return $this + */ + public function setCollectionBaseIds(array $collectionBaseIds) + { + $this->collectionBaseIds = $collectionBaseIds; + + return $this; + } + + /** + * @return array + */ + public function getCollectionBaseIds() + { + return $this->collectionBaseIds; + } } diff --git a/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php b/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php index 1befac1843..141d415e22 100644 --- a/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php +++ b/lib/Alchemy/Phrasea/Model/Entities/WebhookEventPayload.php @@ -30,7 +30,7 @@ class WebhookEventPayload private $id; /** - * @ORM\OneToOne(targetEntity="WebhookEventDelivery") + * @ORM\OneToOne(targetEntity="WebhookEventDelivery", inversedBy="payload") * @ORM\JoinColumn(name="delivery_id", referencedColumnName="id") */ private $delivery; diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/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/Manipulator/TokenManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php index 2a43363693..56c4e9fc36 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/TokenManipulator.php @@ -22,7 +22,6 @@ use RandomLib\Generator; class TokenManipulator implements ManipulatorInterface { const LETTERS_AND_NUMBERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - const TYPE_FEED_ENTRY = 'FEED_ENTRY'; const TYPE_PASSWORD = 'password'; const TYPE_ACCOUNT_UNLOCK = 'account-unlock'; @@ -126,6 +125,38 @@ class TokenManipulator implements ManipulatorInterface return $this->create($user, self::TYPE_FEED_ENTRY, null, $entry->getId()); } + /** + * Create feedEntryTokens for many users in one shot + * + * @param User[] $users + * @param FeedEntry $entry + * @return Token[] + * @throws \Doctrine\DBAL\DBALException + */ + public function createFeedEntryTokens($users, FeedEntry $entry) + { + // $this->removeExpiredTokens(); + + $tokens = []; + foreach ($users as $user) { + $value = $this->random->generateString(32, self::LETTERS_AND_NUMBERS) . $user->getId(); + + $token = new Token(); + $token->setUser($user) + ->setType(self::TYPE_FEED_ENTRY) + ->setValue($value) + ->setExpiration(null) + ->setData($entry->getId()); + $tokens[] = $token; + + $this->om->persist($token); + } + $this->om->flush(); + $this->om->clear(); + + return $tokens; + } + /** * @param User $user * @param $data diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/UserManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/UserManipulator.php index 8104c04c47..d36fbf527a 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/UserManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/UserManipulator.php @@ -126,8 +126,9 @@ class UserManipulator implements ManipulatorInterface * Deletes a user. * * @param User|User[] $users + * @param array $grantedBaseIdList List of the old granted base_id per userId [user_id => [base_id, ...] ] */ - public function delete($users) + public function delete($users, array $grantedBaseIdList = array()) { /** @var User $user */ foreach ($this->makeTraversable($users) as $user) { @@ -146,9 +147,10 @@ class UserManipulator implements ManipulatorInterface new DeletedEvent( null, array( - 'user_id'=>$old_id, - 'login'=>$old_login, - 'email'=>$old_email + 'user_id' => $old_id, + 'login' => $old_login, + 'email' => $old_email, + 'grantedBaseIds' => isset($grantedBaseIdList[$old_id]) ? $grantedBaseIdList[$old_id] : [] ) ) ); @@ -368,7 +370,7 @@ class UserManipulator implements ManipulatorInterface throw new InvalidArgumentException(sprintf('Email %s is not legal.', $email)); } - if (null !== $this->repository->findByEmail($email)) { + if (($email !== null) && (null !== $this->repository->findByEmail($email))) { throw new RuntimeException(sprintf('User with email %s already exists.', $email)); } diff --git a/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php b/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php index 40e7f812a7..90cbf66b65 100644 --- a/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php +++ b/lib/Alchemy/Phrasea/Model/Manipulator/WebhookEventManipulator.php @@ -12,7 +12,7 @@ namespace Alchemy\Phrasea\Model\Manipulator; use Alchemy\Phrasea\Model\Entities\WebhookEvent; -use Alchemy\Phrasea\Webhook\WebhookPublisher; +use Alchemy\Phrasea\Webhook\WebhookPublisherInterface; use Doctrine\Common\Persistence\ObjectManager; use Doctrine\ORM\EntityRepository; @@ -29,18 +29,18 @@ class WebhookEventManipulator implements ManipulatorInterface private $repository; /** - * @var WebhookPublisher + * @var WebhookPublisherInterface */ private $publisher; - public function __construct(ObjectManager $om, EntityRepository $repo, WebhookPublisher $publisher) + public function __construct(ObjectManager $om, EntityRepository $repo, WebhookPublisherInterface $publisher) { $this->om = $om; $this->repository = $repo; $this->publisher = $publisher; } - public function create($eventName, $type, array $data) + public function create($eventName, $type, array $data, array $collectionBaseIds = array()) { $event = new WebhookEvent(); @@ -48,6 +48,10 @@ class WebhookEventManipulator implements ManipulatorInterface $event->setType($type); $event->setData($data); + if (count($collectionBaseIds) > 0) { + $event->setCollectionBaseIds($collectionBaseIds); + } + $this->update($event); $this->publisher->publishWebhookEvent($event); 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/Model/Repositories/TokenRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php index ad45425f7c..8e40f9ebd8 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/TokenRepository.php @@ -72,4 +72,9 @@ class TokenRepository extends EntityRepository return $query->getResult(); } + + public function getEntityManager() + { + return parent::getEntityManager(); + } } diff --git a/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php b/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php index d122922091..e428f8554b 100644 --- a/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php +++ b/lib/Alchemy/Phrasea/Model/Repositories/UserRepository.php @@ -122,4 +122,15 @@ class UserRepository extends EntityRepository { return $this->findBy(['templateOwner' => $user->getId()]); } + + /** + * Finds all templates + */ + public function findTemplate() + { + $qb = $this->createQueryBuilder('u'); + $qb->where('u.templateOwner is NOT NULL'); + + return $qb->getQuery()->getResult(); + } } diff --git a/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php b/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php index 2c466acaee..b331175fb9 100644 --- a/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php +++ b/lib/Alchemy/Phrasea/Order/Controller/ApiOrderController.php @@ -47,6 +47,10 @@ class ApiOrderController extends BaseOrderController use FilesystemAware; use JsonBodyAware; + /** + * @param Request $request + * @return Response + */ public function createAction(Request $request) { $data = $this->decodeJsonBody($request, 'orders.json#/definitions/order_request'); @@ -54,7 +58,13 @@ class ApiOrderController extends BaseOrderController $availableRecords = $this->toRequestedRecords($data->data->records); $records = $this->filterOrderableRecords($availableRecords); - $recordRequest = new RecordsRequest($records, new ArrayCollection($availableRecords), null, RecordsRequest::FLATTEN_YES); + $recordRequest = new RecordsRequest( + $records, // orderable records + new ArrayCollection([]), // rejected (rights) + new ArrayCollection($availableRecords), // all records from request + null, // basket + RecordsRequest::FLATTEN_YES // orderable records is stories + children + ); $filler = new OrderFiller($this->app['repo.collection-references'], $this->app['orm.em']); @@ -62,7 +72,13 @@ class ApiOrderController extends BaseOrderController $order = new Order(); $order->setUser($this->getAuthenticatedUser()); - $order->setDeadline(new \DateTime($data->data->deadline, new \DateTimeZone('UTC'))); + try { + $order->setDeadline(new \DateTime()); // safe value in case of data->deadline is invalid + $order->setDeadline(new \DateTime($data->data->deadline, new \DateTimeZone('UTC'))); + } + catch (\Exception $e) { + // no-op, will end-up with safe value + } $order->setOrderUsage($data->data->usage); $order->setNotificationMethod(Order::NOTIFY_WEBHOOK); @@ -139,8 +155,9 @@ class ApiOrderController extends BaseOrderController } /** - * @param int $orderId + * @param $orderId * @return Response + * @throws \Exception */ public function getArchiveAction($orderId) { @@ -162,7 +179,12 @@ class ApiOrderController extends BaseOrderController $user = $this->getAuthenticatedUser(); $subdefs = $this->findDataboxSubdefNames(); - $exportData = $export->prepare_export($user, $this->getFilesystem(), $subdefs, true, true); + try { + $exportData = $export->prepare_export($user, $this->getFilesystem(), $subdefs, true, true); + } + catch (\Exception $e) { + throw new NotFoundHttpException(sprintf('No archive could be downloaded for Order "%d"', $order->getId())); + } /** @var Token $token */ $token = $this->app['manipulator.token']->createDownloadToken($user, serialize($exportData)); @@ -248,8 +270,13 @@ class ApiOrderController extends BaseOrderController $filtered = []; foreach ($records as $index => $record) { - if (!$record->isStory() && $acl->has_right_on_base($record->getBaseId(), \ACL::CANCMD)) { - $filtered[$index] = $record; + try { + if ($acl->has_right_on_base($record->getBaseId(), \ACL::CANCMD)) { + $filtered[$index] = $record; + } + } + catch (\Exception $e) { + // will NOT happen since \ACL::CANCMD IS a known right } } diff --git a/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php b/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php index 5b2e90d4cb..cf3c84e981 100644 --- a/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php +++ b/lib/Alchemy/Phrasea/Order/Controller/BaseOrderController.php @@ -172,7 +172,7 @@ class BaseOrderController extends Controller $manager->persist($element); } - $delivery = new OrderDelivery($order, $acceptor, count($basketElements)); + $delivery = new OrderDelivery($order, $acceptor, count($basketElements), $partialOrder); $this->dispatch(PhraseaEvents::ORDER_DELIVER, new OrderDeliveryEvent($delivery)); } @@ -198,11 +198,13 @@ class BaseOrderController extends Controller $elements = $this->findRequestedElements($order_id, $elementIds, $acceptor); $order = $this->findOr404($order_id); + $partialOrder = new PartialOrder($order, $elements); + $this->getOrderValidator()->deny($acceptor, new PartialOrder($order, $elements)); try { if (!empty($elements)) { - $delivery = new OrderDelivery($order, $acceptor, count($elements)); + $delivery = new OrderDelivery($order, $acceptor, count($elements), $partialOrder); $this->dispatch(PhraseaEvents::ORDER_DENY, new OrderDeliveryEvent($delivery)); } diff --git a/lib/Alchemy/Phrasea/Order/OrderDelivery.php b/lib/Alchemy/Phrasea/Order/OrderDelivery.php index 5d8f3313ff..f36a98525f 100644 --- a/lib/Alchemy/Phrasea/Order/OrderDelivery.php +++ b/lib/Alchemy/Phrasea/Order/OrderDelivery.php @@ -31,16 +31,23 @@ class OrderDelivery */ private $quantity; + /** + * @var PartialOrder + */ + private $partialOrder; + /** * @param Order $deliveredOrder * @param User $manager * @param int $quantity + * @param PartialOrder $partialOrder */ - public function __construct(Order $deliveredOrder, User $manager, $quantity) + public function __construct(Order $deliveredOrder, User $manager, $quantity, PartialOrder $partialOrder) { - $this->order = $deliveredOrder; - $this->admin = $manager; - $this->quantity = $quantity; + $this->order = $deliveredOrder; + $this->admin = $manager; + $this->quantity = $quantity; + $this->partialOrder = $partialOrder; } /** @@ -66,4 +73,12 @@ class OrderDelivery { return $this->quantity; } + + /** + * @return PartialOrder + */ + public function getPartialOrder() + { + return $this->partialOrder; + } } diff --git a/lib/Alchemy/Phrasea/Order/ValidationNotifier.php b/lib/Alchemy/Phrasea/Order/ValidationNotifier.php index e79b9ef888..419f180520 100644 --- a/lib/Alchemy/Phrasea/Order/ValidationNotifier.php +++ b/lib/Alchemy/Phrasea/Order/ValidationNotifier.php @@ -19,20 +19,23 @@ interface ValidationNotifier /** * @param Order $order * @param User $recipient + * @param array $baseIds * @return void */ - public function notifyCreation(Order $order, User $recipient); + public function notifyCreation(Order $order, User $recipient, array $baseIds = array()); /** * @param OrderDelivery $delivery + * @param array $baseIds * @return void */ - public function notifyDelivery(OrderDelivery $delivery); + public function notifyDelivery(OrderDelivery $delivery, array $baseIds = array()); /** * @param OrderDelivery $delivery + * @param array $baseIds * @return void */ - public function notifyDenial(OrderDelivery $delivery); + public function notifyDenial(OrderDelivery $delivery, array $baseIds = array()); } diff --git a/lib/Alchemy/Phrasea/Order/ValidationNotifier/CompositeNotifier.php b/lib/Alchemy/Phrasea/Order/ValidationNotifier/CompositeNotifier.php index a3e75cebcb..b38d51a3ca 100644 --- a/lib/Alchemy/Phrasea/Order/ValidationNotifier/CompositeNotifier.php +++ b/lib/Alchemy/Phrasea/Order/ValidationNotifier/CompositeNotifier.php @@ -26,8 +26,9 @@ class CompositeNotifier implements ValidationNotifier /** * @param Order $order * @param User $recipient + * @param array $baseIds */ - public function notifyCreation(Order $order, User $recipient) + public function notifyCreation(Order $order, User $recipient, array $baseIds = array()) { foreach ($this->notifiers as $notifier) { $notifier->notifyCreation($order, $recipient); @@ -36,21 +37,23 @@ class CompositeNotifier implements ValidationNotifier /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDelivery(OrderDelivery $delivery) + public function notifyDelivery(OrderDelivery $delivery, array $baseIds = array()) { foreach ($this->notifiers as $notifier) { - $notifier->notifyDelivery($delivery); + $notifier->notifyDelivery($delivery, $baseIds); } } /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDenial(OrderDelivery $delivery) + public function notifyDenial(OrderDelivery $delivery, array $baseIds = array()) { foreach ($this->notifiers as $notifier) { - $notifier->notifyDenial($delivery); + $notifier->notifyDenial($delivery, $baseIds); } } } diff --git a/lib/Alchemy/Phrasea/Order/ValidationNotifier/MailNotifier.php b/lib/Alchemy/Phrasea/Order/ValidationNotifier/MailNotifier.php index 8a6541793a..9934fafb08 100644 --- a/lib/Alchemy/Phrasea/Order/ValidationNotifier/MailNotifier.php +++ b/lib/Alchemy/Phrasea/Order/ValidationNotifier/MailNotifier.php @@ -46,8 +46,9 @@ class MailNotifier implements ValidationNotifier /** * @param Order $order * @param User $recipient + * @param array $baseIds */ - public function notifyCreation(Order $order, User $recipient) + public function notifyCreation(Order $order, User $recipient, array $baseIds = array()) { $mail = MailInfoNewOrder::create($this->application, Receiver::fromUser($recipient)); @@ -58,8 +59,9 @@ class MailNotifier implements ValidationNotifier /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDelivery(OrderDelivery $delivery) + public function notifyDelivery(OrderDelivery $delivery, array $baseIds = array()) { $order = $delivery->getOrder(); @@ -85,8 +87,9 @@ class MailNotifier implements ValidationNotifier /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDenial(OrderDelivery $delivery) + public function notifyDenial(OrderDelivery $delivery, array $baseIds = array()) { $sender = Emitter::fromUser($delivery->getAdmin()); $recipient = Receiver::fromUser($delivery->getOrder()->getUser()); diff --git a/lib/Alchemy/Phrasea/Order/ValidationNotifier/WebhookNotifier.php b/lib/Alchemy/Phrasea/Order/ValidationNotifier/WebhookNotifier.php index 3634e8e907..4762ff43ec 100644 --- a/lib/Alchemy/Phrasea/Order/ValidationNotifier/WebhookNotifier.php +++ b/lib/Alchemy/Phrasea/Order/ValidationNotifier/WebhookNotifier.php @@ -47,21 +47,23 @@ class WebhookNotifier implements ValidationNotifier /** * @param Order $order * @param User $recipient + * @param array $baseIds */ - public function notifyCreation(Order $order, User $recipient) + public function notifyCreation(Order $order, User $recipient, array $baseIds = array()) { $eventData = [ 'order_id' => $order->getId(), 'user_id' => $recipient->getId(), ]; - $this->getManipulator()->create(WebhookEvent::ORDER_CREATED, WebhookEvent::ORDER_TYPE, $eventData); + $this->getManipulator()->create(WebhookEvent::ORDER_CREATED, WebhookEvent::ORDER_TYPE, $eventData, $baseIds); } /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDelivery(OrderDelivery $delivery) + public function notifyDelivery(OrderDelivery $delivery, array $baseIds = array()) { $eventData = [ 'order_id' => $delivery->getOrder()->getId(), @@ -69,13 +71,14 @@ class WebhookNotifier implements ValidationNotifier 'quantity' => $delivery->getQuantity() ]; - $this->getManipulator()->create(WebhookEvent::ORDER_DELIVERED, WebhookEvent::ORDER_TYPE, $eventData); + $this->getManipulator()->create(WebhookEvent::ORDER_DELIVERED, WebhookEvent::ORDER_TYPE, $eventData, $baseIds); } /** * @param OrderDelivery $delivery + * @param array $baseIds */ - public function notifyDenial(OrderDelivery $delivery) + public function notifyDenial(OrderDelivery $delivery, array $baseIds = array()) { $eventData = [ 'order_id' => $delivery->getOrder()->getId(), @@ -83,6 +86,6 @@ class WebhookNotifier implements ValidationNotifier 'quantity' => $delivery->getQuantity() ]; - $this->getManipulator()->create(WebhookEvent::ORDER_DENIED, WebhookEvent::ORDER_TYPE, $eventData); + $this->getManipulator()->create(WebhookEvent::ORDER_DENIED, WebhookEvent::ORDER_TYPE, $eventData, $baseIds); } } diff --git a/lib/Alchemy/Phrasea/Out/Module/PDF.php b/lib/Alchemy/Phrasea/Out/Module/PDF.php index 7514a099db..e436e6ec5e 100644 --- a/lib/Alchemy/Phrasea/Out/Module/PDF.php +++ b/lib/Alchemy/Phrasea/Out/Module/PDF.php @@ -20,6 +20,8 @@ class PDF protected $records; protected $pdf; + const LAYOUT_FEEDBACK = 'feedback'; + const LAYOUT_FEEDBACKONLY = 'feedbackOnly'; const LAYOUT_PREVIEW = 'preview'; const LAYOUT_PREVIEWCAPTION = 'previewCaption'; const LAYOUT_PREVIEWCAPTIONTDM = 'previewCaptionTdm'; @@ -27,64 +29,10 @@ class PDF const LAYOUT_THUMBNAILGRID = 'thumbnailGrid'; const LAYOUT_CAPTION = 'caption'; - public function __construct(Application $app, array $records, $layout) + public function __construct(Application $app) { $this->app = $app; - $list = []; - - foreach ($records as $record) { - switch ($layout) { - default: - throw new \Exception('Unknown layout'); - break; - case self::LAYOUT_PREVIEW: - case self::LAYOUT_PREVIEWCAPTION: - case self::LAYOUT_PREVIEWCAPTIONTDM: - try { - $subdef = $record->get_subdef('preview'); - // fallback to thumbnail ( video, sound, doc ) .. - if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { - $subdef = $record->get_thumbnail(); - } - - if (!$subdef->is_physically_present()) { - continue 2; - } - - if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { - continue 2; - } - } catch (\Exception $e) { - continue 2; - } - break; - case self::LAYOUT_THUMBNAILLIST: - case self::LAYOUT_THUMBNAILGRID: - try { - $subdef = $record->get_thumbnail(); - if (!$subdef->is_physically_present()) { - continue 2; - } - - if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { - continue 2; - } - } catch (\Exception $e) { - continue 2; - } - break; - case self::LAYOUT_CAPTION: - break; - } - - $record->setNumber(count($list) + 1); - - $list[] = $record; - } - - $this->records = $list; - $pdf = new PhraseaPDF("P", "mm", "A4", true, 'UTF-8', false); $pdf->SetAuthor("Phraseanet"); @@ -92,29 +40,6 @@ class PDF $pdf->SetDisplayMode("fullpage", "single"); $this->pdf = $pdf; - - switch ($layout) { - case self::LAYOUT_PREVIEW: - $this->print_preview(false, false); - break; - case self::LAYOUT_PREVIEWCAPTION: - $this->print_preview(false, true); - break; - case self::LAYOUT_PREVIEWCAPTIONTDM: - $this->print_preview(true, true); - break; - case self::LAYOUT_THUMBNAILLIST: - $this->print_thumbnailList(); - break; - case self::LAYOUT_THUMBNAILGRID: - $this->print_thumbnailGrid(); - break; - case self::LAYOUT_CAPTION: - $this->print_caption(); - break; - } - - return $this; } public function render() @@ -123,447 +48,4 @@ class PDF return $this->pdf->Output('', 'S'); } - - protected function print_thumbnailGrid($links = false) - { - $NDiapoW = 3; - $NDiapoH = 4; - - $this->pdf->AddPage(); - - $oldMargins = $this->pdf->getMargins(); - $tmargin = $oldMargins['top']; - $lmargin = $oldMargins['left']; - $bmargin = $oldMargins['bottom']; - $rmargin = $oldMargins['right']; - - $this->pdf->SetLeftMargin($lmargin + 55); - - $clientW = $this->pdf->getPageWidth() - $lmargin - $rmargin; - $clientH = $this->pdf->getPageHeight() - $tmargin - $bmargin; - - $DiapoW = floor($clientW / $NDiapoW); - $DiapoH = floor($clientH / $NDiapoH); - $TitleH = 5; - $ImgSize = min($DiapoW, ($DiapoH - $TitleH)) - 5; - - $npages = ceil(count($this->records) / ($NDiapoW * $NDiapoH)); - - $irow = $ipage = 0; - $icol = -1; - foreach ($this->records as $rec) { - /* @var \record_adapter $rec */ - if (++$icol >= $NDiapoW) { - $icol = 0; - if (++$irow >= $NDiapoH) { - $irow = 0; - $ipage++; - $this->pdf->AddPage(); - } - } - $fimg = null; - $himg = 0; - - $subdef = $rec->get_subdef('preview'); - - if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { - $subdef = $rec->get_thumbnail(); - } - - $fimg = $subdef->getRealPath(); - - if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) - && $subdef->get_type() == \media_subdef::TYPE_IMAGE) { - $fimg = \recordutils_image::watermark($this->app, $subdef); - } - - $wimg = $himg = $ImgSize; - if ($subdef->get_height() > 0 && $subdef->get_width() > 0) { - if ($subdef->get_width() > $subdef->get_height()) - $himg = $wimg * $subdef->get_height() / $subdef->get_width(); - else - $wimg = $himg * $subdef->get_width() / $subdef->get_height(); - } - - if ($fimg) { - $x = $lmargin + ($icol * $DiapoW); - $y = $tmargin + ($irow * $DiapoH); - $this->pdf->SetDrawColor(0); - $this->pdf->Rect($x, $y, $DiapoW, $DiapoH, "D"); - - $this->pdf->SetXY($x, $y + 1); - $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); - $t = $irow . '-' . $x; - $t = $rec->get_title(); - - if ($links) { - $lk = $this->pdf->AddLink(); - $this->pdf->SetLink($lk, 0, $npages + $rec->getNumber()); - $this->pdf->Image( - $fimg - , $x + (($DiapoW - $wimg) / 2) - , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) - , $wimg, $himg - , null, $lk - ); - } else { - $this->pdf->Image($fimg - , $x + (($DiapoW - $wimg) / 2) - , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) - , $wimg, $himg - ); - } - - $this->pdf->MultiCell($DiapoW, $TitleH, $t, '0', 'C', false); - } - } - $this->pdf->SetLeftMargin($oldMargins['left']); - } - - protected function print_thumbnailList() - { - $this->pdf->AddPage(); - $oldMargins = $this->pdf->getMargins(); - - $lmargin = $oldMargins['left']; - $rmargin = $oldMargins['right']; - - $this->pdf->SetLeftMargin($lmargin + 55); - - $ndoc = 0; - foreach ($this->records as $rec) { - /* @var \record_adapter $rec */ - $subdef = $rec->get_subdef('thumbnail'); - - $fimg = $subdef->getRealPath(); - - $wimg = $himg = 50; - // 1px = 3.77952 mm - $finalWidth = round($subdef->get_width() / 3.779528, 2); - $finalHeight = round($subdef->get_height() / 3.779528, 2); - $aspectH = $finalWidth/$finalHeight; - $aspectW = $finalHeight/$finalWidth; - - if ($finalWidth > 0 && $finalHeight > 0) { - if ($finalWidth > $finalHeight && $finalWidth > $wimg) { - $finalWidth = $wimg; - $finalHeight = $wimg * $aspectW; - } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { - $finalHeight = $himg; - $finalWidth = $himg * $aspectH; - } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { - $finalHeight = $wimg; - $finalWidth = $himg; - } - } - - if ($this->pdf->GetY() > $this->pdf->getPageHeight() - (6 + $finalHeight + 20)) - $this->pdf->AddPage(); - - $title = "record : " . $rec->get_title(); - - $y = $this->pdf->GetY(); - - $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); - $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); - $this->pdf->SetFillColor(220, 220, 220); - $this->pdf->SetLeftMargin($lmargin); - $this->pdf->SetRightMargin($rmargin); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - - $this->pdf->out = false; - $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); - $y2 = $this->pdf->GetY(); - $h = $y2 - $y; - $this->pdf->out = true; - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->Cell(0, 4, $t, "", 1, "R"); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->MultiCell(140, 4, $title, "", "L"); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y = $y2); - - $this->pdf->SetLeftMargin($lmargin + 55); - $this->pdf->SetY($y + 2); - - if ($fimg) { - $y = $this->pdf->GetY(); - $this->pdf->Image($fimg, $lmargin, $y, $finalWidth, $finalHeight); - $this->pdf->SetY($y + 3); - } - - $nf = 0; - $this->pdf->SetX($lmargin + 55); - $p0 = $this->pdf->PageNo(); - $y0 = $this->pdf->GetY(); - foreach ($rec->get_caption()->get_fields() as $field) { - /* @var $field caption_field */ - - $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); - $this->pdf->Write(5, $field->get_name() . " : "); - - $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); - $this->pdf->Write(5, $field->get_serialized_values()); - - $this->pdf->Write(6, "\n"); - $nf++; - } - if ($this->pdf->PageNo() == $p0 && ($this->pdf->GetY() - $y0) < $finalHeight) - $this->pdf->SetY($y0 + $finalHeight); - $ndoc++; - } - $this->pdf->SetLeftMargin($lmargin); - } - - protected function print_caption() - { - $this->pdf->AddPage(); - $oldMargins = $this->pdf->getMargins(); - - $lmargin = $oldMargins['left']; - $rmargin = $oldMargins['right']; - - foreach ($this->records as $rec) { - $title = "record : " . $rec->get_title(); - - $y = $this->pdf->GetY(); - if($this->pdf->getPageHeight() - $y < 20){ // height of the footer is 15 - $this->pdf->AddPage(); - $y = $oldMargins['top']; - } - - $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); - $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); - $this->pdf->SetFillColor(220, 220, 220); - $this->pdf->SetLeftMargin($lmargin); - $this->pdf->SetRightMargin($rmargin); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - - $this->pdf->out = false; - $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); - $y2 = $this->pdf->GetY(); - $h = $y2 - $y; - $this->pdf->out = true; - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->Cell(0, 4, $t, "", 1, "R"); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y); - $this->pdf->MultiCell(140, 4, $title, "", "L"); - $this->pdf->SetX($lmargin); - $this->pdf->SetY($y = $y2); - $this->pdf->SetY($y + 2); - - foreach ($rec->get_caption()->get_fields() as $field) { - $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); - $this->pdf->Write(5, $field->get_name() . " : "); - - $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); - $t = str_replace( - ["<", ">", "&"] - , ["<", ">", "&"] - , strip_tags($field->get_serialized_values()) - ); - $this->pdf->Write(5, $t); - - $this->pdf->Write(6, "\n"); - } - $this->pdf->SetY($this->pdf->GetY() + 10); - } - } - - protected function print_preview($withtdm, $write_caption) - { - if ($withtdm === true) { - $this->print_thumbnailGrid($this->pdf, $this->records, true); - } - - foreach ($this->records as $krec => $rec) { - /* @var \record_adapter $rec */ - - $this->pdf->AddPage(); - - if ($withtdm === "CALCPAGES") { - $rec->setNumber($this->pdf->PageNo()); - } - $lmargin = $this->pdf->GetX(); - $himg = 0; - $y = 0; - $miniConv = NULL; - - $LEFT__TEXT = ""; - $LEFT__IMG = NULL; - $RIGHT_TEXT = ""; - $RIGHT_IMG = NULL; - - $LEFT__IMG = $this->app['root.path'] . "/config/minilogos/logopdf_" . $rec->getDataboxId() . ".jpg"; - - if (!is_file($LEFT__IMG)) { - $databox = $rec->getDatabox(); - $str = $databox->get_sxml_structure(); - $vn = (string) ($str->pdfPrintLogo); - if (($vn * 1) == 1) { - $LEFT__TEXT = $databox->get_label($this->app['locale']); - } - } - - $collection = \collection::getByBaseId($this->app, $rec->getBaseId()); - - $vn = ""; - if (false !== $str = simplexml_load_string($collection->get_prefs())) { - $vn = (string) ($str->pdfPrintappear); - } - - if ($vn == "" || $vn == "1") { - $RIGHT_TEXT = \phrasea::bas_labels($rec->getBaseId(), $this->app); - } elseif ($vn == "2") { - $RIGHT_IMG = $this->app['root.path'] . "/config/minilogos/" . $rec->getBaseId(); - } - - $xtmp = $this->pdf->GetX(); - $ytmp = $this->pdf->GetY(); - - $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); - $this->pdf->SetFillColor(220, 220, 220); - $y = $this->pdf->GetY(); - $this->pdf->MultiCell(95, 7, $LEFT__TEXT, "LTB", "L", 1); - $y2 = $this->pdf->GetY(); - $h = $y2 - $y; - $this->pdf->SetY($y); - $this->pdf->SetX(105); - $this->pdf->Cell(95, $h, $RIGHT_TEXT, "TBR", 1, "R", 1); - - if ($LEFT__TEXT == "" && is_file($LEFT__IMG)) { - if ($size = @getimagesize($LEFT__IMG)) { - $wmm = (int) $size[0] * 25.4 / 72; - $hmm = (int) $size[1] * 25.4 / 72; - if ($hmm > 6) { - $coeff = $hmm / 6; - $wmm = (int) $wmm / $coeff; - $hmm = (int) $hmm / $coeff; - } - $this->pdf->Image($LEFT__IMG, $xtmp + 0.5, $ytmp + 0.5, $wmm, $hmm); - } - } - - if ($RIGHT_IMG != NULL && is_file($RIGHT_IMG)) { - if ($size = @getimagesize($RIGHT_IMG)) { - - if ($size[2] == '1') { - if (!isset($miniConv[$RIGHT_IMG])) { - $tmp_filename = tempnam('minilogos/', 'gif4fpdf'); - $img = imagecreatefromgif($RIGHT_IMG); - imageinterlace($img, 0); - imagepng($img, $tmp_filename); - rename($tmp_filename, $tmp_filename . '.png'); - $miniConv[$RIGHT_IMG] = $tmp_filename . '.png'; - $RIGHT_IMG = $tmp_filename . '.png'; - } else - $RIGHT_IMG = $miniConv[$RIGHT_IMG]; - - $wmm = (int) $size[0] * 25.4 / 72; - $hmm = (int) $size[1] * 25.4 / 72; - if ($hmm > 6) { - $coeff = $hmm / 6; - $wmm = (int) $wmm / $coeff; - $hmm = (int) $hmm / $coeff; - } - $tt = 0; - if ($hmm < 6) - $tt = (6 - $hmm) / 2; - $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5 + $tt); - } else { - $wmm = (int) $size[0] * 25.4 / 72; - $hmm = (int) $size[1] * 25.4 / 72; - if ($hmm > 6) { - $coeff = $hmm / 6; - $wmm = (int) $wmm / $coeff; - $hmm = (int) $hmm / $coeff; - } - $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5); - } - } - } - - $y = $this->pdf->GetY() + 5; - - $subdef = $rec->get_subdef('preview'); - - if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { - $subdef = $rec->get_thumbnail(); - } - - $f = $subdef->getRealPath(); - - if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) - && $subdef->get_type() == \media_subdef::TYPE_IMAGE) - $f = \recordutils_image::watermark($this->app, $subdef); - - // original height / original width x new width = new height - $wimg = $himg = 150; // preview dans un carre de 150 mm - // 1px = 3.77952 mm - $finalWidth = round($subdef->get_width() / 3.779528, 2); - $finalHeight = round($subdef->get_height() / 3.779528, 2); - $aspectH = $finalWidth/$finalHeight; - $aspectW = $finalHeight/$finalWidth; - - if ($finalWidth > 0 && $finalHeight > 0) { - if ($finalWidth > $finalHeight && $finalWidth > $wimg) { - $finalWidth = $wimg; - $finalHeight = $wimg * $aspectW; - } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { - $finalHeight = $himg; - $finalWidth = $himg * $aspectH; - } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { - $finalHeight = $wimg; - $finalWidth = $himg; - } - } - - $this->pdf->Image($f, (210 - $finalWidth) / 2, $y, $finalWidth, $finalHeight); - - if ($miniConv != NULL) { - foreach ($miniConv as $oneF) - unlink($oneF); - } - $this->pdf->SetXY($lmargin, $y += ( $finalHeight + 5)); - - $nf = 0; - if ($write_caption) { - foreach ($rec->get_caption()->get_fields() as $field) { - /* @var $field caption_field */ - if ($nf > 0) { - $this->pdf->Write(6, "\n"); - } - - $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); - $this->pdf->Write(5, $field->get_name() . " : "); - - $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); - - $t = str_replace( - ["<", ">", "&"] - , ["<", ">", "&"] - , strip_tags($field->get_serialized_values()) - ); - - $this->pdf->Write(5, $t); - - $nf++; - } - } - } - - return; - } } diff --git a/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php b/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php new file mode 100644 index 0000000000..8dd5dd4492 --- /dev/null +++ b/lib/Alchemy/Phrasea/Out/Module/PDFRecords.php @@ -0,0 +1,789 @@ +printer = $printer; + + $records = $printer->get_elements(); + + $list = []; + + foreach ($records as $record) { + switch ($layout) { + default: + throw new \Exception('Unknown layout'); + break; + case self::LAYOUT_FEEDBACK: + case self::LAYOUT_FEEDBACKONLY: + case self::LAYOUT_PREVIEW: + case self::LAYOUT_PREVIEWCAPTION: + case self::LAYOUT_PREVIEWCAPTIONTDM: + try { + $subdef = $record->get_subdef('preview'); + // fallback to thumbnail ( video, sound, doc ) .. + if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { + $subdef = $record->get_thumbnail(); + } + + if (!$subdef->is_physically_present()) { + continue 2; + } + + if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { + continue 2; + } + } catch (\Exception $e) { + continue 2; + } + break; + case self::LAYOUT_THUMBNAILLIST: + case self::LAYOUT_THUMBNAILGRID: + try { + $subdef = $record->get_thumbnail(); + if (!$subdef->is_physically_present()) { + continue 2; + } + + if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { + continue 2; + } + } catch (\Exception $e) { + continue 2; + } + break; + case self::LAYOUT_CAPTION: + break; + } + + $record->setNumber(count($list) + 1); + + $list[] = $record; + } + + $this->records = $list; + + switch ($layout) { + case self::LAYOUT_FEEDBACK: + $this->print_preview(false, true, true); + break; + case self::LAYOUT_FEEDBACKONLY: + $this->print_preview(false, false, true); + break; + case self::LAYOUT_PREVIEW: + $this->print_preview(false, false, false); + break; + case self::LAYOUT_PREVIEWCAPTION: + $this->print_preview(false, true, false); + break; + case self::LAYOUT_PREVIEWCAPTIONTDM: + $this->print_preview(true, true, false); + break; + case self::LAYOUT_THUMBNAILLIST: + $this->print_thumbnailList(); + break; + case self::LAYOUT_THUMBNAILGRID: + $this->print_thumbnailGrid(); + break; + case self::LAYOUT_CAPTION: + $this->print_caption(); + break; + } + } + + protected function print_thumbnailGrid($links = false) + { + $NDiapoW = 3; + $NDiapoH = 4; + + $this->pdf->AddPage(); + + $oldMargins = $this->pdf->getMargins(); + $tmargin = $oldMargins['top']; + $lmargin = $oldMargins['left']; + $bmargin = $oldMargins['bottom']; + $rmargin = $oldMargins['right']; + + $this->pdf->SetLeftMargin($lmargin + 55); + + $clientW = $this->pdf->getPageWidth() - $lmargin - $rmargin; + $clientH = $this->pdf->getPageHeight() - $tmargin - $bmargin; + + $DiapoW = floor($clientW / $NDiapoW); + $DiapoH = floor($clientH / $NDiapoH); + $TitleH = 5; + $ImgSize = min($DiapoW, ($DiapoH - $TitleH)) - 5; + + $npages = ceil(count($this->records) / ($NDiapoW * $NDiapoH)); + + $irow = $ipage = 0; + $icol = -1; + foreach ($this->records as $rec) { + /* @var \record_adapter $rec */ + if (++$icol >= $NDiapoW) { + $icol = 0; + if (++$irow >= $NDiapoH) { + $irow = 0; + $ipage++; + $this->pdf->AddPage(); + } + } + $fimg = null; + $himg = 0; + + $subdef = $rec->get_subdef('preview'); + + if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { + $subdef = $rec->get_thumbnail(); + } + + $fimg = $subdef->getRealPath(); + + if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) + && $subdef->get_type() == \media_subdef::TYPE_IMAGE) { + $fimg = \recordutils_image::watermark($this->app, $subdef); + } + + $wimg = $himg = $ImgSize; + if ($subdef->get_height() > 0 && $subdef->get_width() > 0) { + if ($subdef->get_width() > $subdef->get_height()) + $himg = $wimg * $subdef->get_height() / $subdef->get_width(); + else + $wimg = $himg * $subdef->get_width() / $subdef->get_height(); + } + + if ($fimg) { + $x = $lmargin + ($icol * $DiapoW); + $y = $tmargin + ($irow * $DiapoH); + $this->pdf->SetDrawColor(0); + $this->pdf->Rect($x, $y, $DiapoW, $DiapoH, "D"); + + $this->pdf->SetXY($x, $y + 1); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); + $t = $irow . '-' . $x; + $t = $rec->get_title(); + + if ($links) { + $lk = $this->pdf->AddLink(); + $this->pdf->SetLink($lk, 0, $npages + $rec->getNumber()); + $this->pdf->Image( + $fimg + , $x + (($DiapoW - $wimg) / 2) + , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) + , $wimg, $himg + , null, $lk + ); + } else { + $this->pdf->Image($fimg + , $x + (($DiapoW - $wimg) / 2) + , $TitleH + $y + (($DiapoH - $TitleH - $himg) / 2) + , $wimg, $himg + ); + } + + $this->pdf->MultiCell($DiapoW, $TitleH, $t, '0', 'C', false); + } + } + $this->pdf->SetLeftMargin($oldMargins['left']); + } + + protected function print_thumbnailList() + { + $this->pdf->AddPage(); + $oldMargins = $this->pdf->getMargins(); + + $lmargin = $oldMargins['left']; + $rmargin = $oldMargins['right']; + + $this->pdf->SetLeftMargin($lmargin + 55); + + $ndoc = 0; + foreach ($this->records as $rec) { + /* @var \record_adapter $rec */ + $subdef = $rec->get_subdef('thumbnail'); + + $fimg = $subdef->getRealPath(); + + $wimg = $himg = 50; + // 1px = 3.77952 mm + $finalWidth = round($subdef->get_width() / 3.779528, 2); + $finalHeight = round($subdef->get_height() / 3.779528, 2); + $aspectH = $finalWidth/$finalHeight; + $aspectW = $finalHeight/$finalWidth; + + if ($finalWidth > 0 && $finalHeight > 0) { + if ($finalWidth > $finalHeight && $finalWidth > $wimg) { + $finalWidth = $wimg; + $finalHeight = $wimg * $aspectW; + } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { + $finalHeight = $himg; + $finalWidth = $himg * $aspectH; + } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { + $finalHeight = $wimg; + $finalWidth = $himg; + } + } + + if ($this->pdf->GetY() > $this->pdf->getPageHeight() - (6 + $finalHeight + 20)) + $this->pdf->AddPage(); + + $title = "record : " . $rec->get_title(); + + $y = $this->pdf->GetY(); + + $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); + $this->pdf->SetFillColor(220, 220, 220); + $this->pdf->SetLeftMargin($lmargin); + $this->pdf->SetRightMargin($rmargin); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + + $this->pdf->out = false; + $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); + $y2 = $this->pdf->GetY(); + $h = $y2 - $y; + $this->pdf->out = true; + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->Cell(0, 4, $t, "", 1, "R"); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->MultiCell(140, 4, $title, "", "L"); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y = $y2); + + $this->pdf->SetLeftMargin($lmargin + 55); + $this->pdf->SetY($y + 2); + + if ($fimg) { + $y = $this->pdf->GetY(); + $this->pdf->Image($fimg, $lmargin, $y, $finalWidth, $finalHeight); + $this->pdf->SetY($y + 3); + } + + $nf = 0; + $this->pdf->SetX($lmargin + 55); + $p0 = $this->pdf->PageNo(); + $y0 = $this->pdf->GetY(); + foreach ($rec->get_caption()->get_fields() as $field) { + /* @var $field caption_field */ + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $field->get_name() . " : "); + + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $field->get_serialized_values()); + + $this->pdf->Write(6, "\n"); + $nf++; + } + if ($this->pdf->PageNo() == $p0 && ($this->pdf->GetY() - $y0) < $finalHeight) + $this->pdf->SetY($y0 + $finalHeight); + $ndoc++; + } + $this->pdf->SetLeftMargin($lmargin); + } + + protected function print_caption() + { + $this->pdf->AddPage(); + $oldMargins = $this->pdf->getMargins(); + + $lmargin = $oldMargins['left']; + $rmargin = $oldMargins['right']; + + foreach ($this->records as $rec) { + $title = "record : " . $rec->get_title(); + + $y = $this->pdf->GetY(); + if($this->pdf->getPageHeight() - $y < 20){ // height of the footer is 15 + $this->pdf->AddPage(); + $y = $oldMargins['top']; + } + + $t = \phrasea::bas_labels($rec->getBaseId(), $this->app); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 10); + $this->pdf->SetFillColor(220, 220, 220); + $this->pdf->SetLeftMargin($lmargin); + $this->pdf->SetRightMargin($rmargin); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + + $this->pdf->out = false; + $this->pdf->MultiCell(140, 4, $title, "LTR", "L", 1); + $y2 = $this->pdf->GetY(); + $h = $y2 - $y; + $this->pdf->out = true; + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->Cell(0, $h, "", "LTR", 1, "R", 1); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->Cell(0, 4, $t, "", 1, "R"); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y); + $this->pdf->MultiCell(140, 4, $title, "", "L"); + $this->pdf->SetX($lmargin); + $this->pdf->SetY($y = $y2); + $this->pdf->SetY($y + 2); + + foreach ($rec->get_caption()->get_fields() as $field) { + if ($field->get_databox_field()->get_gui_visible()) { + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $field->get_name() . " : "); + + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $t = str_replace( + ["<", ">", "&"] + , ["<", ">", "&"] + , strip_tags($field->get_serialized_values()) + ); + $this->pdf->Write(5, $t); + + $this->pdf->Write(6, "\n"); + } + } + $this->pdf->SetY($this->pdf->GetY() + 10); + } + } + + + protected function print_preview($withtdm, $write_caption, $withfeedback) + { + $basket = $validation = null; + + if($this->printer->is_basket()) { + $basket = $this->printer->get_original_basket(); + + if($withfeedback) { + // first page : validation informations + $validation = $basket->getValidation(); + + $this->pdf->AddPage(); + + $this->pdf->SetY(20); + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 14); + $this->pdf->Cell(0, 0, + $this->app->trans("print_feedback:: Feedback on basket %name%", ['%name%'=>$basket->getName()]), + '', 1, 'C', false); + + $this->pdf->SetY($this->pdf->GetY()+10); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Document generated on : ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $this->formatDate(new \DateTime('now'))); + $this->pdf->Write(12, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated by : ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $this->getDisplayName($validation->getInitiator())); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback initiated on : ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $this->formatDate($validation->getCreated())); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expiring on : ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $this->formatDate($validation->getExpires())); + $this->pdf->Write(12, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $validation->isFinished() ? $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback expired")) : $this->pdf->Write(5, $this->app->trans("print_feedback:: Feedback active")); + $this->pdf->Write(12, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Participants : ")); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + foreach ($validation->getParticipants() as $participant) { + $this->pdf->Write(5, "\n - " . $this->getDisplayName($participant->getUser())); + } + } + } + + if ($withtdm === true) { + $this->print_thumbnailGrid($this->pdf, $this->records, true); + } + + foreach ($this->records as $krec => $rec) { + /* @var \record_adapter $rec */ + + $this->pdf->AddPage(); + + if ($withtdm === "CALCPAGES") { + $rec->setNumber($this->pdf->PageNo()); + } + $lmargin = $this->pdf->GetX(); + $himg = 0; + $y = 0; + $miniConv = NULL; + + $LEFT__TEXT = ""; + $LEFT__IMG = NULL; + $RIGHT_TEXT = ""; + $RIGHT_IMG = NULL; + + $LEFT__IMG = $this->app['root.path'] . "/config/minilogos/logopdf_" . $rec->getDataboxId() . ".jpg"; + + if (!is_file($LEFT__IMG)) { + $databox = $rec->getDatabox(); + $str = $databox->get_sxml_structure(); + $vn = (string) ($str->pdfPrintLogo); + if (($vn * 1) == 1) { + $LEFT__TEXT = $databox->get_label($this->app['locale']); + } + } + + $collection = \collection::getByBaseId($this->app, $rec->getBaseId()); + + $vn = ""; + if (false !== $str = simplexml_load_string($collection->get_prefs())) { + $vn = (string) ($str->pdfPrintappear); + } + + if ($vn == "" || $vn == "1") { + $RIGHT_TEXT = \phrasea::bas_labels($rec->getBaseId(), $this->app); + } elseif ($vn == "2") { + $RIGHT_IMG = $this->app['root.path'] . "/config/minilogos/" . $rec->getBaseId(); + } + + $xtmp = $this->pdf->GetX(); + $ytmp = $this->pdf->GetY(); + + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->SetFillColor(220, 220, 220); + $y = $this->pdf->GetY(); + $this->pdf->MultiCell(95, 7, $LEFT__TEXT, "LTB", "L", 1); + $y2 = $this->pdf->GetY(); + $h = $y2 - $y; + $this->pdf->SetY($y); + $this->pdf->SetX(105); + $this->pdf->Cell(95, $h, $RIGHT_TEXT, "TBR", 1, "R", 1); + + if($basket) { + $ord = $basket->getElementByRecord($this->app, $rec)->getOrd(); + $this->pdf->SetY($y); + $this->pdf->SetX(10); + $this->pdf->Cell(190, $h, $ord, "", 1, "C", 0); + } + + if ($LEFT__TEXT == "" && is_file($LEFT__IMG)) { + if ($size = @getimagesize($LEFT__IMG)) { + $wmm = (int) $size[0] * 25.4 / 72; + $hmm = (int) $size[1] * 25.4 / 72; + if ($hmm > 6) { + $coeff = $hmm / 6; + $wmm = (int) $wmm / $coeff; + $hmm = (int) $hmm / $coeff; + } + $this->pdf->Image($LEFT__IMG, $xtmp + 0.5, $ytmp + 0.5, $wmm, $hmm); + } + } + + if ($RIGHT_IMG != NULL && is_file($RIGHT_IMG)) { + if ($size = @getimagesize($RIGHT_IMG)) { + + if ($size[2] == '1') { + if (!isset($miniConv[$RIGHT_IMG])) { + $tmp_filename = tempnam('minilogos/', 'gif4fpdf'); + $img = imagecreatefromgif($RIGHT_IMG); + imageinterlace($img, 0); + imagepng($img, $tmp_filename); + rename($tmp_filename, $tmp_filename . '.png'); + $miniConv[$RIGHT_IMG] = $tmp_filename . '.png'; + $RIGHT_IMG = $tmp_filename . '.png'; + } else + $RIGHT_IMG = $miniConv[$RIGHT_IMG]; + + $wmm = (int) $size[0] * 25.4 / 72; + $hmm = (int) $size[1] * 25.4 / 72; + if ($hmm > 6) { + $coeff = $hmm / 6; + $wmm = (int) $wmm / $coeff; + $hmm = (int) $hmm / $coeff; + } + $tt = 0; + if ($hmm < 6) + $tt = (6 - $hmm) / 2; + $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5 + $tt); + } else { + $wmm = (int) $size[0] * 25.4 / 72; + $hmm = (int) $size[1] * 25.4 / 72; + if ($hmm > 6) { + $coeff = $hmm / 6; + $wmm = (int) $wmm / $coeff; + $hmm = (int) $hmm / $coeff; + } + $this->pdf->Image($RIGHT_IMG, 200 - 0.5 - $wmm, $ytmp + 0.5); + } + } + } + + $y = $this->pdf->GetY() + 5; + + $subdef = $rec->get_subdef('preview'); + + if ($subdef->get_type() !== \media_subdef::TYPE_IMAGE) { + $subdef = $rec->get_thumbnail(); + } + + $f = $subdef->getRealPath(); + + if (!$this->app->getAclForUser($this->app->getAuthenticatedUser())->has_right_on_base($rec->getBaseId(), \ACL::NOWATERMARK) + && $subdef->get_type() == \media_subdef::TYPE_IMAGE) + $f = \recordutils_image::watermark($this->app, $subdef); + + // original height / original width x new width = new height + $wimg = $himg = 150; // preview dans un carre de 150 mm + // 1px = 3.77952 mm + $finalWidth = round($subdef->get_width() / 3.779528, 2); + $finalHeight = round($subdef->get_height() / 3.779528, 2); + $aspectH = $finalWidth/$finalHeight; + $aspectW = $finalHeight/$finalWidth; + + if ($finalWidth > 0 && $finalHeight > 0) { + if ($finalWidth > $finalHeight && $finalWidth > $wimg) { + $finalWidth = $wimg; + $finalHeight = $wimg * $aspectW; + } else if ($finalHeight > $finalWidth && $finalHeight > $himg) { + $finalHeight = $himg; + $finalWidth = $himg * $aspectH; + } else if ($finalHeight == $finalWidth & $finalWidth > $wimg) { + $finalHeight = $wimg; + $finalWidth = $himg; + } + } + + $this->pdf->Image($f, (210 - $finalWidth) / 2, $y, $finalWidth, $finalHeight); + + if ($miniConv != NULL) { + foreach ($miniConv as $oneF) + unlink($oneF); + } + $this->pdf->SetXY($lmargin, $y += ( $finalHeight + 5)); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: record title: ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $rec->get_title()); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: record id: ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $rec->getRecordId()); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: base name: ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $rec->getDatabox()->get_label($this->app['locale'])); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: originale filename: ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $rec->get_original_name()); + $this->pdf->Write(6, "\n"); + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: document Uuid: ") . " "); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + $this->pdf->Write(5, $rec->getUUID()); + $this->pdf->Write(6, "\n"); + + $nf = 0; + if($basket && $validation) { + /** @var ValidationParticipant $participant */ + + if ($nf > 0) { + $this->pdf->Write(6, "\n"); + } + $this->pdf->Write(12, "\n"); + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $this->app->trans("print_feedback:: Votes :")); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + + $basketElement = $basket->getElementByRecord($this->app, $rec); + + $iparticipant = 0; + foreach ($validation->getParticipants() as $participant) { + $this->pdf->Write(6, "\n"); + if($iparticipant++ > 0) { + // $this->pdf->SetY($this->pdf->GetY()+1); + } + $validationData = $basketElement->getUserValidationDatas($participant->getUser()); + + $this->pdf->Write(5, '- ' . $this->getDisplayName($participant->getUser(), true). " : "); + + $r = $validationData->getAgreement(); + $this->pdf->SetX(100); + if ($r === null) { + $this->pdf->Write(0, $this->app->trans("print_feedback:: non voté")); + } + else { + if($r) { + $this->pdf->SetTextColor(0, 127, 0); + $this->pdf->Write(0, $this->app->trans("print_feedback:: Oui")); + } + else { + $this->pdf->SetTextColor(200, 0, 0); + $this->pdf->Write(0, $this->app->trans("print_feedback:: Non")); + } + $this->pdf->SetTextColor(0); + $this->pdf->Write(0, " (" . $this->formatDate($validationData->getUpdated()) . ")"); + } + + if (($note = (string)($validationData->getNote())) !== '') { + $this->pdf->SetFont(PhraseaPDF::FONT, 'I', 11); + $this->pdf->Write(5,"\n"); + $this->pdf->SetX(100); + $this->pdf->MultiCell(95, 0, $note, '', "L", false); + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + } + + $nf++; + } + } + + if ($write_caption) { + $this->pdf->Write(12, "\n"); + foreach ($rec->get_caption()->get_fields() as $field) { + /* @var $field caption_field */ + + if ($field->get_databox_field()->get_gui_visible()) { + if ($nf > 0) { + $this->pdf->Write(6, "\n"); + } + + $this->pdf->SetFont(PhraseaPDF::FONT, 'B', 12); + $this->pdf->Write(5, $field->get_name() . " : "); + + $this->pdf->SetFont(PhraseaPDF::FONT, '', 12); + + $t = str_replace( + ["<", ">", "&"] + , ["<", ">", "&"] + , strip_tags($field->get_serialized_values()) + ); + + $this->pdf->Write(5, $t); + + $nf++; + } + } + } + } + + return; + } + + private function formatDate(\DateTime $date) + { + $locale = $this->app['locale']; + + switch ($locale) { + case 'fr': + $fmt = new DateFormatter( + 'fr_FR', + DateFormatter::LONG, + DateFormatter::NONE + ); + + $date_formated = $fmt->format($date); + break; + + case 'en': + $fmt = new DateFormatter( + 'en_EN', + DateFormatter::LONG, + DateFormatter::NONE + ); + + $date_formated = $fmt->format($date); + break; + + case 'de': + $fmt = new DateFormatter( + 'de_DE', + DateFormatter::LONG, + DateFormatter::NONE + ); + + $date_formated = $fmt->format($date); + break; + + default: + $fmt = new DateFormatter( + 'en_EN', + DateFormatter::LONG, + DateFormatter::NONE , + null, + null, + 'yyyy/mm/dd' + ); + + $date_formated = $fmt->format($date); + break; + } + + return $date_formated; + } + + private function getDisplayName($user, $short = false) + { + $displayName = ''; + + if (trim($user->getLastName()) !== '' || trim($user->getFirstName()) !== '') { + $displayName = $user->getFirstName() . ('' !== $user->getFirstName() && '' !== $user->getLastName() ? ' ' : '') . $user->getLastName() ; + + if ($short) { + return $displayName; + } + } + + $email = trim($user->getEmail()); + + if ($email === '') { + $email = $user->getLogin(); + } + + if ($displayName !== '') { + return $displayName . ", " . $email; + } else { + return $email; + } + } + +} diff --git a/lib/Alchemy/Phrasea/Plugin/Management/ComposerInstaller.php b/lib/Alchemy/Phrasea/Plugin/Management/ComposerInstaller.php index 738e357fdc..17aba29f79 100644 --- a/lib/Alchemy/Phrasea/Plugin/Management/ComposerInstaller.php +++ b/lib/Alchemy/Phrasea/Plugin/Management/ComposerInstaller.php @@ -33,6 +33,11 @@ class ComposerInstaller $this->composer = $pluginsDirectory . DIRECTORY_SEPARATOR . 'composer.phar'; } + public function __destruct() + { + @unlink($this->composer); + } + public function install($directory) { $process = $this->createProcessBuilder() diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/GeolocationKey.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/GeolocationKey.php index 9d8942e8f7..4ab7998d2b 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/GeolocationKey.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/AST/KeyValue/GeolocationKey.php @@ -58,6 +58,11 @@ class GeolocationKey implements Key $this->key = $key; } + public function getFieldType(QueryContext $context) + { + return $this->type; + } + public function getIndexField(QueryContext $context, $raw = false) { return $this->key; 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/DataboxFetcherFactory.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/DataboxFetcherFactory.php index b4eb070896..469ef65fc9 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/DataboxFetcherFactory.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/DataboxFetcherFactory.php @@ -2,6 +2,7 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic; +use Alchemy\Phrasea\Core\Configuration\PropertyAccess; use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Delegate\FetcherDelegateInterface; use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Fetcher; use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator\CoreHydrator; @@ -13,8 +14,14 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator\TitleHydrator; use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure; use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\CandidateTerms; + class DataboxFetcherFactory { + /** + * @var PropertyAccess phraseanet configuration + */ + private $conf; + /** * @var \ArrayAccess */ @@ -39,14 +46,16 @@ class DataboxFetcherFactory private $options; /** + * @param PropertyAccess $conf * @param RecordHelper $recordHelper * @param ElasticsearchOptions $options * @param \ArrayAccess $container * @param string $structureKey * @param string $thesaurusKey */ - public function __construct(RecordHelper $recordHelper, ElasticsearchOptions $options, \ArrayAccess $container, $structureKey, $thesaurusKey) + public function __construct(PropertyAccess $conf, RecordHelper $recordHelper, ElasticsearchOptions $options, \ArrayAccess $container, $structureKey, $thesaurusKey) { + $this->conf = $conf; $this->recordHelper = $recordHelper; $this->options = $options; $this->container = $container; @@ -70,7 +79,7 @@ class DataboxFetcherFactory [ new CoreHydrator($databox->get_sbas_id(), $databox->get_viewname(), $this->recordHelper), new TitleHydrator($connection, $this->recordHelper), - new MetadataHydrator($connection, $this->getStructure(), $this->recordHelper), + new MetadataHydrator($this->conf, $connection, $this->getStructure(), $this->recordHelper), new FlagHydrator($this->getStructure(), $databox), new ThesaurusHydrator($this->getStructure(), $this->getThesaurus(), $candidateTerms), new SubDefinitionHydrator($connection) diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php index 63d9ec108e..2424330031 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticSearchEngine.php @@ -668,17 +668,20 @@ class ElasticSearchEngine implements SearchEngineInterface } // fields aggregates $structure = $this->context_factory->getLimitedStructure($options); - foreach ($structure->getFacetFields() as $name => $field) { - // 2015-05-26 (mdarse) Removed databox filtering. - // It was already done by the ACL filter in the query scope, so no - // document that shouldn't be displayed can go this far. - $agg = [ - 'terms' => [ - 'field' => $field->getIndexField(true), - 'size' => $field->getFacetValuesLimit() - ] - ]; - $aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg); + foreach($structure->getAllFields() as $name => $field) { + $size = $this->options->getAggregableFieldLimit($name); + if ($size !== databox_field::FACET_DISABLED) { + if ($size === databox_field::FACET_NO_LIMIT) { + $size = ESField::FACET_NO_LIMIT; + } + $agg = [ + 'terms' => [ + 'field' => $field->getIndexField(true), + 'size' => $size + ] + ]; + $aggs[$name] = AggregationHelper::wrapPrivateFieldAggregation($field, $agg); + } } return $aggs; diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php index 87d54c5b71..cf4b262ef9 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchOptions.php @@ -9,6 +9,10 @@ */ namespace Alchemy\Phrasea\SearchEngine\Elastic; +use databox_field; +use igorw; + + class ElasticsearchOptions { const POPULATE_ORDER_RID = "RECORD_ID"; @@ -34,8 +38,8 @@ class ElasticsearchOptions /** @var string */ private $populateDirection; - /** @var int[] */ - private $_customValues; + /** @var int[][] */ + private $_customValues = []; private $activeTab; /** @@ -57,14 +61,10 @@ class ElasticsearchOptions 'populate_order' => self::POPULATE_ORDER_RID, 'populate_direction' => self::POPULATE_DIRECTION_DESC, 'activeTab' => null, + 'facets' => [] ]; - - foreach(self::getAggregableTechnicalFields() as $k => $f) { - $defaultOptions[$k.'_limit'] = 0; - } $options = array_replace($defaultOptions, $options); - $self = new self(); $self->setHost($options['host']); $self->setPort($options['port']); @@ -76,11 +76,10 @@ class ElasticsearchOptions $self->setPopulateOrder($options['populate_order']); $self->setPopulateDirection($options['populate_direction']); $self->setActiveTab($options['activeTab']); - foreach(self::getAggregableTechnicalFields() as $k => $f) { - $self->setAggregableFieldLimit($k, $options[$k.'_limit']); + foreach($options['facets'] as $fieldname=>$attributes) { + $self->setAggregableField($fieldname, $attributes); } - return $self; } @@ -99,10 +98,11 @@ class ElasticsearchOptions 'highlight' => $this->highlight, 'populate_order' => $this->populateOrder, 'populate_direction' => $this->populateDirection, - 'activeTab' => $this->activeTab + 'activeTab' => $this->activeTab, + 'facets' => [] ]; - foreach(self::getAggregableTechnicalFields() as $k => $f) { - $ret[$k.'_limit'] = $this->getAggregableFieldLimit($k); + foreach($this->getAggregableFields() as $fieldname=>$attributes) { + $ret['facets'][$fieldname] = $attributes; } return $ret; @@ -222,12 +222,51 @@ class ElasticsearchOptions public function setAggregableFieldLimit($key, $value) { - $this->_customValues[$key.'_limit'] = $value; + if(is_null($this->getAggregableField($key))) { + $this->_customValues['facets'][$key] = []; + } + $this->_customValues['facets'][$key]['limit'] = $value; + } + + public function setAggregableField($key, $attributes) + { + $this->getAggregableFields(); // ensure facets exists + $this->_customValues['facets'][$key] = $attributes; } public function getAggregableFieldLimit($key) { - return $this->_customValues[$key.'_limit']; + $facet = $this->getAggregableField($key); + return (is_array($facet) && array_key_exists('limit', $facet)) ? $facet['limit'] : databox_field::FACET_DISABLED; + } + + public function getAggregableField($key) + { + $facets = $this->getAggregableFields(); + return array_key_exists($key, $facets) ? $facets[$key] : null; + } + + /** + * @return array + */ + public function getAggregableFields() + { + if(!array_key_exists('facets', $this->_customValues) || !is_array($this->_customValues['facets'])) { + $this->_customValues['facets'] = []; + } + return $this->_customValues['facets']; + } + + // set to change the facets order during admin/form save + public function reorderAggregableFields($facetNames) + { + $newFacets = []; + foreach ($facetNames as $name) { + if(($facet = $this->getAggregableField($name)) !== null) { + $newFacets[$name] = $facet; + } + } + $this->_customValues['facets'] = $newFacets; } public function getActiveTab() @@ -241,56 +280,56 @@ class ElasticsearchOptions public function __get($key) { - if(!array_key_exists($key, $this->_customValues)) { - $this->_customValues[$key] = 0; - } - return $this->_customValues[$key]; + $keys = explode(':', $key); + + return igorw\get_in($this->_customValues, $keys); } public function __set($key, $value) { - $this->_customValues[$key] = $value; + $keys = explode(':', $key); + $this->_customValues = igorw\assoc_in($this->_customValues, $keys, $value); } public static function getAggregableTechnicalFields() { return [ - 'base_aggregate' => [ + '_base' => [ 'type' => 'string', 'label' => 'prod::facet:base_label', 'field' => "database", 'esfield' => 'databox_name', 'query' => 'database:%s', ], - 'collection_aggregate' => [ + '_collection' => [ 'type' => 'string', 'label' => 'prod::facet:collection_label', 'field' => "collection", 'esfield' => 'collection_name', 'query' => 'collection:%s', ], - 'doctype_aggregate' => [ + '_doctype' => [ 'type' => 'string', 'label' => 'prod::facet:doctype_label', 'field' => "type", 'esfield' => 'type', 'query' => 'type:%s', ], - 'camera_model_aggregate' => [ + '_camera_model' => [ 'type' => 'string', 'label' => 'Camera Model', 'field' => "meta.CameraModel", 'esfield' => 'metadata_tags.CameraModel', 'query' => 'meta.CameraModel:%s', ], - 'iso_aggregate' => [ + '_iso' => [ 'type' => 'number', 'label' => 'ISO', 'field' => "meta.ISO", 'esfield' => 'metadata_tags.ISO', 'query' => 'meta.ISO=%s', ], - 'aperture_aggregate' => [ + '_aperture' => [ 'type' => 'number', 'label' => 'Aperture', 'field' => "meta.Aperture", @@ -300,7 +339,7 @@ class ElasticsearchOptions return round($value, 1); }, ], - 'shutterspeed_aggregate' => [ + '_shutterspeed' => [ 'type' => 'number', 'label' => 'Shutter speed', 'field' => "meta.ShutterSpeed", @@ -313,7 +352,7 @@ class ElasticsearchOptions return $value . ' s.'; }, ], - 'flashfired_aggregate' => [ + '_flashfired' => [ 'type' => 'boolean', 'label' => 'FlashFired', 'field' => "meta.FlashFired", @@ -323,53 +362,53 @@ 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; }, ], - 'framerate_aggregate' => [ + '_framerate' => [ 'type' => 'number', 'label' => 'FrameRate', 'field' => "meta.FrameRate", 'esfield' => 'metadata_tags.FrameRate', 'query' => 'meta.FrameRate=%s', ], - 'audiosamplerate_aggregate' => [ + '_audiosamplerate' => [ 'type' => 'number', 'label' => 'Audio Samplerate', 'field' => "meta.AudioSamplerate", 'esfield' => 'metadata_tags.AudioSamplerate', 'query' => 'meta.AudioSamplerate=%s', ], - 'videocodec_aggregate' => [ + '_videocodec' => [ 'type' => 'string', 'label' => 'Video codec', 'field' => "meta.VideoCodec", 'esfield' => 'metadata_tags.VideoCodec', 'query' => 'meta.VideoCodec:%s', ], - 'audiocodec_aggregate' => [ + '_audiocodec' => [ 'type' => 'string', 'label' => 'Audio codec', 'field' => "meta.AudioCodec", 'esfield' => 'metadata_tags.AudioCodec', 'query' => 'meta.AudioCodec:%s', ], - 'orientation_aggregate' => [ + '_orientation' => [ 'type' => 'string', 'label' => 'Orientation', 'field' => "meta.Orientation", 'esfield' => 'metadata_tags.Orientation', 'query' => 'meta.Orientation=%s', ], - 'colorspace_aggregate' => [ + '_colorspace' => [ 'type' => 'string', 'label' => 'Colorspace', 'field' => "meta.ColorSpace", 'esfield' => 'metadata_tags.ColorSpace', 'query' => 'meta.ColorSpace:%s', ], - 'mimetype_aggregate' => [ + '_mimetype' => [ 'type' => 'string', 'label' => 'MimeType', 'field' => "meta.MimeType", @@ -398,15 +437,9 @@ class ElasticsearchOptions /** * @return string */ - public function getPopulateOrderAsSQL() + public function getPopulateOrder() { - static $orderAsColumn = [ - self::POPULATE_ORDER_RID => "`record_id`", - self::POPULATE_ORDER_MODDATE => "`moddate`", - ]; - - // populateOrder IS one of the keys (ensured by setPopulateOrder) - return $orderAsColumn[$this->populateOrder]; + return $this->populateOrder; } /** @@ -426,6 +459,14 @@ class ElasticsearchOptions } + /** + * @return string + */ + public function getPopulateDirection() + { + return $this->populateDirection; + } + /** * @return string */ @@ -435,4 +476,4 @@ class ElasticsearchOptions return $this->populateDirection; } -} +} \ No newline at end of file diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php index e1aaa3e378..1f2fa3d1e2 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/ElasticsearchSettingsFormType.php @@ -9,6 +9,7 @@ */ namespace Alchemy\Phrasea\SearchEngine\Elastic; +use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\FormBuilderInterface; @@ -17,6 +18,18 @@ use Symfony\Component\Validator\Constraints\Range; class ElasticsearchSettingsFormType extends AbstractType { + /** @var GlobalStructure */ + private $globalStructure; + + /** @var ElasticsearchOptions */ + private $esSettings; + + public function __construct(GlobalStructure $g, ElasticsearchOptions $settings) + { + $this->globalStructure = $g; + $this->esSettings = $settings; + } + public function buildForm(FormBuilderInterface $builder, array $options) { $builder @@ -56,59 +69,89 @@ class ElasticsearchSettingsFormType extends AbstractType ->add('minScore', 'integer', [ 'label' => 'Thesaurus Min score', 'constraints' => new Range(['min' => 0]), - ]); + ]) + ->add('highlight', 'checkbox', [ + 'label' => 'Activate highlight', + 'required' => false + ]) + // ->add('save', 'submit', [ + // 'attr' => ['class' => 'btn btn-primary'] + // ]) + ->add('esSettingFromIndex', 'button', [ + 'label' => 'Get setting form index', + 'attr' => [ + 'onClick' => 'esSettingFromIndex()', + 'class' => 'btn' + ] + ]) + ->add('dumpField', 'textarea', [ + 'label' => false, + 'required' => false, + 'mapped' => false, + 'attr' => ['class' => 'dumpfield hide'] + ]) + ->add('activeTab', 'hidden'); - foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) { - if(array_key_exists('choices', $f)) { - // choices[] : choice_key => choice_value - $choices = $f['choices']; - } - else { - $choices = [ - "10 values" => 10, - "20 values" => 20, - "50 values" => 50, - "100 values" => 100, - "all values" => -1 - ]; - } - // array_unshift($choices, "not aggregated"); // always as first choice - $choices = array_merge(["not aggregated" => 0], $choices); - $builder - ->add($k.'_limit', ChoiceType::class, [ - // 'label' => $f['label'],// . ' ' . 'aggregate limit', - 'choices_as_values' => true, - 'choices' => $choices, - 'attr' => [ - 'class' => 'aggregate' - ] - ]); + // keep aggregates in configuration order with this intermediate array + $aggs = []; + + // helper fct to add aggregate to a tmp list + $addAgg = function($k, $label, $help, $disabled=false, $choices=null) use (&$aggs) { + if(!$choices) { + $choices = [ + "10 values" => 10, + "50 values" => 50, + "100 values" => 100, + "all values" => -1 + ]; } + $choices = array_merge(["not aggregated" => 0], $choices); // add this option always as first choice + $aggs[$k] = [ // default value will be replaced by hardcoded tech fields & all databoxes fields + 'label' => $label, + 'choices_as_values' => true, + 'choices' => $choices, + 'attr' => [ + 'class' => 'aggregate' + ], + 'disabled' => $disabled, + 'help_message' => $help // todo : not displayed ? + ]; + }; - $builder - ->add('highlight', 'checkbox', [ - 'label' => 'Activate highlight', - 'required' => false - ]) -// ->add('save', 'submit', [ -// 'attr' => ['class' => 'btn btn-primary'] -// ]) - ->add('esSettingFromIndex', 'button', [ - 'label' => 'Get setting form index', - 'attr' => [ - 'onClick' => 'esSettingFromIndex()', - 'class' => 'btn' - ] - ]) - ->add('dumpField', 'textarea', [ - 'label' => false, - 'required' => false, - 'mapped' => false, - 'attr' => ['class' => 'dumpfield hide'] - ]) - ->add('activeTab', 'hidden'); + // all fields fron conf + foreach($this->esSettings->getAggregableFields() as $k=>$f) { + // default value will be replaced by hardcoded tech fields & all databoxes fields + $addAgg($k, "/?\\ " . $k, "This field does not exists in current databoxes.", true); + } + + // add or replace hardcoded tech fields + foreach(ElasticsearchOptions::getAggregableTechnicalFields() as $k => $f) { + $choices = array_key_exists('choices', $f) ? $f['choices'] : null; // a tech-field can publish it's own choices + $help = null; + $label = '#' . $k; + if(!array_key_exists($k, $aggs)) { + $label = "/!\\ " . $label; + $help = "New field, please confirm setting."; + } + $addAgg($k, $label, $help, false, $choices); + } + + // add or replace all databoxes fields (nb: new db field - unknown in conf - will be a the end) + foreach($this->globalStructure->getAllFields() as $field) { + $k = $label = $field->getName(); + $help = null; + if(!array_key_exists($field->getName(), $aggs)) { + $label = "/!\\ " . $label; + $help = "New field, please confirm setting."; + } + $addAgg($k, $label, $help); // default choices + } + + // populate aggs to form + foreach($aggs as $k=>$agg) { + $builder->add('facets:' . $k . ':limit', ChoiceType::class, $agg); + } - ; } public function getName() diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/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/Delegate/RecordListFetcherDelegate.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/RecordListFetcherDelegate.php index b0b36222b4..be96483ca3 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/RecordListFetcherDelegate.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/RecordListFetcherDelegate.php @@ -24,7 +24,7 @@ class RecordListFetcherDelegate implements FetcherDelegateInterface public function buildWhereClause() { - return 'WHERE r.record_id IN (:record_identifiers)'; + return 'record_id IN (:record_identifiers)'; } public function getParameters() diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/ScheduledFetcherDelegate.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/ScheduledFetcherDelegate.php index 79a1088285..aa56883146 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/ScheduledFetcherDelegate.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Delegate/ScheduledFetcherDelegate.php @@ -18,7 +18,7 @@ class ScheduledFetcherDelegate implements FetcherDelegateInterface { public function buildWhereClause() { - return 'WHERE (r.jeton & :to_index) > 0 AND (jeton & :indexing) = 0'; + return '(r.jeton & :to_index) > 0 AND (jeton & :indexing) = 0'; } public function getParameters() diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Fetcher.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Fetcher.php index 8a379b6269..2a4c3db601 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Fetcher.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Fetcher.php @@ -11,7 +11,6 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record; -use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions; use Alchemy\Phrasea\SearchEngine\Elastic\Exception\Exception; use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Delegate\FetcherDelegate; @@ -19,7 +18,9 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Delegate\FetcherDelegate use Closure; use databox; use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Driver\Connection as ConnectionInterface; +use Doctrine\DBAL\DBALException; +use Doctrine\DBAL\Driver\Statement; +use LogicException; use PDO; class Fetcher @@ -30,7 +31,14 @@ class Fetcher private $statement; private $delegate; - private $offset = 0; + // since we fetch records dy different order/direction, we setup sql limit + /** @var int|string */ + private $boundLimit; // may be highest or lowest int or date, as a startup condition for sql or loop + /** @var int|string */ + private $lastLimit; // the last falue fetched + /** @var Closure */ + private $updateLastLimitDelegate; // must update the lastLimit by comparing the current record rid or moddate while fetching + private $batchSize = 1; private $buffer = array(); @@ -38,13 +46,53 @@ class Fetcher private $postFetch; private $onDrain; - public function __construct(databox $databox,ElasticsearchOptions $options, array $hydrators, FetcherDelegateInterface $delegate = null) + public function __construct(databox $databox, ElasticsearchOptions $options, array $hydrators, FetcherDelegateInterface $delegate = null) { $this->databox = $databox; $this->options = $options; $this->connection = $databox->get_connection();; $this->hydrators = $hydrators; $this->delegate = $delegate ?: new FetcherDelegate(); + + // set the boundLimit and updateDelegate, depends on populate-order and populate-direction + // the bound limit value is used on first run, but also as initial value on fetch loop + + // too bad we cannot assign to a variable a builtin function ("min" or "max") as a closure (= vector) + // we need to encapsulate the builtin function into a closure in php. + // + if($options->getPopulateOrder() === ElasticsearchOptions::POPULATE_ORDER_RID) { + // record_id + if ($options->getPopulateDirection() === ElasticsearchOptions::POPULATE_DIRECTION_ASC) { + $this->boundLimit = 0; + $this->updateLastLimitDelegate = function ($record) { + $this->lastLimit = max($this->lastLimit, (int)($record['record_id'])); + }; + } + else { + $this->boundLimit = PHP_INT_MAX; + $this->updateLastLimitDelegate = function ($record) { + $this->lastLimit = min($this->lastLimit, (int)($record['record_id'])); + }; + } + } + else { + // moddate ; max() min() is ok on strings ! + if ($options->getPopulateDirection() === ElasticsearchOptions::POPULATE_DIRECTION_ASC) { + $this->boundLimit = '0000-00-00 00:00:00'; + $this->updateLastLimitDelegate = function ($record) { + $this->lastLimit = max($this->lastLimit, $record['updated_on']); + }; + } + else { + $this->boundLimit = '9999-12-31 23:59:59'; + $this->updateLastLimitDelegate = function ($record) { + $this->lastLimit = min($this->lastLimit, $record['updated_on']); + }; + } + } + + // limit for first run + $this->lastLimit = $this->boundLimit; } public function getDatabox() @@ -52,6 +100,11 @@ class Fetcher return $this->databox; } + /** + * @return mixed + * @throws DBALException + * @throws Exception + */ public function fetch() { if (empty($this->buffer)) { @@ -64,20 +117,29 @@ class Fetcher return array_pop($this->buffer); } + /** + * @return array + * @throws DBALException + * @throws Exception + */ private function fetchBatch() { // Fetch records rows $statement = $this->getExecutedStatement(); - // printf("Query %d/%d -> %d rows\n", $this->offset, $this->batchSize, $statement->rowCount()); + // printf("Query %s (%d) -> %d rows\n", $this->lastLimit, $this->batchSize, $statement->rowCount()); $records = []; + $this->lastLimit = $this->boundLimit; // initial low or high value while ($record = $statement->fetch()) { $records[$record['record_id']] = $record; - $this->offset++; + // compare/update limit + // ($this->updateLastLimitDelegate)($record); // php 7.2 only + call_user_func($this->updateLastLimitDelegate, $record); } if (empty($records)) { + /** @noinspection PhpUndefinedMethodInspection */ $this->onDrain->__invoke(); - return; + return []; } // Hydrate records @@ -91,6 +153,7 @@ class Fetcher } if ($this->postFetch) { + /** @noinspection PhpUndefinedMethodInspection */ $this->postFetch->__invoke($records); } @@ -100,13 +163,13 @@ class Fetcher public function restart() { $this->buffer = array(); - $this->offset = 0; + $this->lastLimit = $this->boundLimit; } public function setBatchSize($size) { if ($size < 1) { - throw new \LogicException("Batch size must be greater than or equal to 1"); + throw new LogicException("Batch size must be greater than or equal to 1"); } $this->batchSize = (int) $size; } @@ -122,28 +185,36 @@ class Fetcher } /** - * @return \Doctrine\DBAL\Driver\Statement + * @return Statement + * @throws DBALException */ private function getExecutedStatement() { if (!$this->statement) { $sql = "SELECT r.*, c.asciiname AS collection_name, subdef.width, subdef.height, subdef.size\n" - . " FROM ((\n" - . " SELECT r.record_id, r.coll_id AS collection_id, r.uuid, r.status AS flags_bitfield, r.sha256,\n" - . " r.originalname AS original_name, r.mime, r.type, r.parent_record_id,\n" - . " r.credate AS created_on, r.moddate AS updated_on, r.coll_id\n" - . " FROM record r\n" - . " -- WHERE\n" - . " ORDER BY " . $this->options->getPopulateOrderAsSQL() . " " . $this->options->getPopulateDirectionAsSQL() . "\n" - . " LIMIT :offset, :limit\n" - . " ) AS r\n" - . " INNER JOIN coll c ON (c.coll_id = r.coll_id)\n" - . " )\n" - . " LEFT JOIN\n" - . " subdef ON subdef.record_id=r.record_id AND subdef.name='document'\n" - . " ORDER BY " . $this->options->getPopulateOrderAsSQL() . " " . $this->options->getPopulateDirectionAsSQL() . ""; + . " FROM ((\n" + . " SELECT record_id, coll_id AS collection_id, uuid, status AS flags_bitfield, sha256,\n" + . " originalname AS original_name, mime, type, parent_record_id,\n" + . " credate AS created_on, moddate AS updated_on, coll_id\n" + . " FROM record\n" + . " WHERE -- WHERE\n" + . " ORDER BY " . ($this->options->getPopulateOrder() === ElasticsearchOptions::POPULATE_ORDER_RID ? 'record_id':'moddate') + . " " . $this->options->getPopulateDirectionAsSQL() . "\n" + . " LIMIT :limit\n" + . " ) AS r\n" + . " INNER JOIN coll c ON (c.coll_id = r.coll_id)\n" + . " )\n" + . " LEFT JOIN\n" + . " subdef ON subdef.record_id=r.record_id AND subdef.name='document'\n" + . " ORDER BY " . ($this->options->getPopulateOrder() === ElasticsearchOptions::POPULATE_ORDER_RID ? 'record_id':'updated_on') + . " " . $this->options->getPopulateDirectionAsSQL() . ""; - $where = $this->delegate->buildWhereClause(); + $where = ($this->options->getPopulateOrder() === ElasticsearchOptions::POPULATE_ORDER_RID ? 'record_id' : 'moddate') . + ($this->options->getPopulateDirection() === ElasticsearchOptions::POPULATE_DIRECTION_DESC ? ' < ' : ' > ') . + ':bound'; + if( ($w = $this->delegate->buildWhereClause()) != '') { + $where = '(' . $where . ') AND (' . $w . ')'; + } $sql = str_replace('-- WHERE', $where, $sql); // Build parameters list @@ -167,12 +238,12 @@ class Fetcher } } // Reference bound parameters - $statement->bindParam(':offset', $this->offset, PDO::PARAM_INT); + $statement->bindParam(':bound', $this->lastLimit, PDO::PARAM_INT); $statement->bindParam(':limit', $this->batchSize, PDO::PARAM_INT); $this->statement = $statement; } else { // Inject own query parameters - $params[':offset'] = $this->offset; + $params[':bound'] = $this->lastLimit; $params[':limit'] = $this->batchSize; $types[':offset'] = $types[':limit'] = PDO::PARAM_INT; @@ -184,4 +255,4 @@ class Fetcher return $this->statement; } -} +} \ No newline at end of file diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php index ba0dcf573f..9d4f1aabf7 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/GpsPosition.php @@ -15,6 +15,7 @@ use Assert\Assertion; class GpsPosition { + const FULL_GEO_NOTATION = 'FullNotation'; const LONGITUDE_TAG_NAME = 'Longitude'; const LONGITUDE_REF_TAG_NAME = 'LongitudeRef'; const LONGITUDE_REF_WEST = 'W'; @@ -29,6 +30,16 @@ class GpsPosition private $latitude; private $latitude_ref; + public function __construct() + { + $this->clear(); + } + + public function clear() + { + $this->longitude = $this->longitude_ref = $this->latitude = $this->latitude_ref = null; + } + public function set($tag_name, $value) { switch ($tag_name) { @@ -64,6 +75,53 @@ class GpsPosition $this->latitude_ref = $normalized; break; + case self::FULL_GEO_NOTATION: + $re = '/(-?\d+(?:\.\d+)?°?)\s*(\d+(?:\.\d+)?\')?\s*(\d+(?:\.\d+)?")?\s*(N|S|E|W)?/um'; + $normalized = trim(strtoupper($value)); + $matches = null; + preg_match_all($re, $normalized, $matches, PREG_SET_ORDER, 0); + if(count($matches) === 2) { // we need lat and lon + $lat = $lon = null; + foreach ($matches as $imatch => $match) { + if(count($match) != 5) { + continue; + } + $v = 0.0; + for($part=1, $div=1.0; $part<=3; $part++, $div*=60.0) { + $v += floatval($match[$part]) / $div; + } + switch($match[4]) { // N S E W + case 'N': + $lat = $v; + break; + case 'S': + $lat = -$v; + break; + case 'E': + $lon = $v; + break; + case 'W': + $lon = -$v; + break; + case '': // no ref -> lat lon (first=lat, second=lon) + if($imatch === 0) { + $lat = $v; + } + else { + $lon = $v; + } + break; + default: + throw new \InvalidArgumentException(sprintf('Unsupported reference "%s", should be N|S|E|W.', $match[4])); + } + } + if($lat !== null && $lon != null) { + $this->set(self::LATITUDE_TAG_NAME, $lat); + $this->set(self::LONGITUDE_TAG_NAME, $lon); + } + } + break; + default: throw new \InvalidArgumentException(sprintf('Unsupported tag name "%s".', $tag_name)); } @@ -95,19 +153,11 @@ class GpsPosition public function getCompositeLongitude() { - if ($this->longitude === null) { - return null; - } - return $this->longitude ; } public function getCompositeLatitude() { - if ($this->latitude === null) { - return null; - } - return $this->latitude; } diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php index 5dc2471cb9..f930fce740 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/Record/Hydrator/MetadataHydrator.php @@ -11,6 +11,7 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator; +use Alchemy\Phrasea\Core\Configuration\PropertyAccess; use Alchemy\Phrasea\SearchEngine\Elastic\Exception\Exception; use Alchemy\Phrasea\SearchEngine\Elastic\FieldMapping; use Alchemy\Phrasea\SearchEngine\Elastic\Mapping; @@ -24,28 +25,48 @@ use InvalidArgumentException; class MetadataHydrator implements HydratorInterface { + private $conf; private $connection; private $structure; private $helper; - private $gps_position_buffer = []; + private $position_fields_mapping; // get from conf - public function __construct(DriverConnection $connection, Structure $structure, RecordHelper $helper) + private $caption_gps_position; + private $exif_gps_position; + + public function __construct(PropertyAccess $conf, DriverConnection $connection, Structure $structure, RecordHelper $helper) { + $this->conf = $conf; $this->connection = $connection; $this->structure = $structure; $this->helper = $helper; + + // get the fieldnames of source of lat / lon geo fields (defined in instance conf) + $this->position_fields_mapping = []; + foreach($conf->get(['geocoding-providers'], []) as $provider) { + if($provider['enabled'] && array_key_exists('position-fields', $provider)) { + foreach ($provider['position-fields'] as $position_field) { + $this->position_fields_mapping[$position_field['name']] = $position_field['type']; + } + } + } + + $this->caption_gps_position = new GpsPosition(); + $this->exif_gps_position = new GpsPosition(); } public function hydrateRecords(array &$records) { - $sql = "(SELECT record_id, ms.name AS `key`, m.value AS value, 'caption' AS type, ms.business AS private\n" + $sql = "SELECT * FROM (" + . "(SELECT record_id, ms.name AS `key`, m.value AS value, 'caption' AS type, ms.business AS private\n" . " FROM metadatas AS m INNER JOIN metadatas_structure AS ms ON (ms.id = m.meta_struct_id)\n" . " WHERE record_id IN (?))\n" . "UNION\n" . "(SELECT record_id, t.name AS `key`, t.value AS value, 'exif' AS type, 0 AS private\n" . " FROM technical_datas AS t\n" - . " WHERE record_id IN (?))\n"; + . " WHERE record_id IN (?))\n" + . ") AS t ORDER BY record_id"; $ids = array_keys($records); $statement = $this->connection->executeQuery( @@ -54,7 +75,17 @@ class MetadataHydrator implements HydratorInterface array(Connection::PARAM_INT_ARRAY, Connection::PARAM_INT_ARRAY) ); + $record_id = -1; while ($metadata = $statement->fetch()) { + + if($metadata['record_id'] !== $record_id) { + // record has changed, don't mix with previous one + $this->caption_gps_position->clear(); + $this->exif_gps_position->clear(); + + $record_id = $metadata['record_id']; + } + // Store metadata value $key = $metadata['key']; $value = trim($metadata['value']); @@ -64,10 +95,10 @@ class MetadataHydrator implements HydratorInterface continue; } - $id = $metadata['record_id']; - if (isset($records[$id])) { - $record =& $records[$id]; - } else { + if (isset($records[$record_id])) { + $record =& $records[$record_id]; + } + else { throw new Exception('Received metadata from unexpected record'); } @@ -89,11 +120,31 @@ class MetadataHydrator implements HydratorInterface $record[$field] = array(); } $record[$field][] = $value; + + if(array_key_exists($key, $this->position_fields_mapping)) { + // this field is mapped as a position part (lat, lon, latlon), push it + switch($this->position_fields_mapping[$key]) { + case 'lat': + $this->handleGpsPosition($this->caption_gps_position, $record, GpsPosition::LATITUDE_TAG_NAME, $value); + break; + case 'lng': + case 'lon': + $this->handleGpsPosition($this->caption_gps_position, $record, GpsPosition::LONGITUDE_TAG_NAME, $value); + break; + case 'latlng': + case 'latlon': + $this->handleGpsPosition($this->caption_gps_position, $record, GpsPosition::FULL_GEO_NOTATION, $value); + break; + } + } + break; case 'exif': - if (GpsPosition::isSupportedTagName($key)) { - $this->handleGpsPosition($records, $id, $key, $value); + // exif gps is a first-chance if caption is not yet set + // anyway if caption is set later, it will override the exif values + if (GpsPosition::isSupportedTagName($key) && !$this->caption_gps_position->isCompleteComposite()) { + $this->handleGpsPosition($this->exif_gps_position, $record, $key, $value); break; } $tag = $this->structure->getMetadataTagByName($key); @@ -109,38 +160,25 @@ class MetadataHydrator implements HydratorInterface break; } } - - $this->clearGpsPositionBuffer(); } - private function handleGpsPosition(&$records, $id, $tag_name, $value) + private function handleGpsPosition(GpsPosition &$position, &$record, $tag_name, $value) { - // Get position object - if (!isset($this->gps_position_buffer[$id])) { - $this->gps_position_buffer[$id] = new GpsPosition(); - } - $position = $this->gps_position_buffer[$id]; // Push this tag into object $position->set($tag_name, $value); + // Try to output complete position if ($position->isCompleteComposite()) { $lon = $position->getCompositeLongitude(); $lat = $position->getCompositeLatitude(); - $records[$id]['metadata_tags']['Longitude'] = $lon; - $records[$id]['metadata_tags']['Latitude'] = $lat; + $record['metadata_tags']['Longitude'] = $lon; + $record['metadata_tags']['Latitude'] = $lat; - $records[$id]["location"] = [ + $record["location"] = [ "lat" => $lat, "lon" => $lon ]; - - unset($this->gps_position_buffer[$id]); } } - - private function clearGpsPositionBuffer() - { - $this->gps_position_buffer = []; - } } 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/Indexer/RecordIndex.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php index 9c86c1dc11..869d43cd4a 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Indexer/RecordIndex.php @@ -82,7 +82,14 @@ class RecordIndex implements MappingProvider $mapping->add($this->buildMetadataTagMapping('metadata_tags')); $mapping->add($this->buildFlagMapping('flags')); - $mapping->addIntegerField('flags_bitfield')->disableIndexing(); + // es int type is always int32 (32 bits signed), so on php-64 we may receive overflow values if the last sb (#31) is set. + // In mysql we use unsigned type, so the output value (as decimal string) may also overflow on php-32. + // Since we use a php lib for es, - with php-int as underlying type - + // we have no way to use a binary-string notation from mysql to es. + // The easy way here is to use a long (int64) in es, even if there is 32 status-bits in phraseanet + // nb : not fixed on php-32 ! + $mapping->addLongField('flags_bitfield')->disableIndexing(); + $mapping->addObjectField('subdefs')->disableMapping(); $mapping->addObjectField('title')->disableMapping(); 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/RecordHelper.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/RecordHelper.php index 74f3a297a8..6d19916e62 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/RecordHelper.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/RecordHelper.php @@ -151,6 +151,7 @@ class RecordHelper return (bool) $value; case FieldMapping::TYPE_STRING: + $value = substr($value, 0, 32766); // for lucene limit, before a better solution return str_replace("\0", '', $value); default: 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..efcc6d1c76 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Search/FacetsResponse.php @@ -15,7 +15,7 @@ class FacetsResponse private $escaper; private $facets = array(); - public function __construct(Escaper $escaper, array $response, GlobalStructure $structure) + public function __construct(ElasticsearchOptions $options, Escaper $escaper, array $response, GlobalStructure $structure) { $this->escaper = $escaper; @@ -25,7 +25,13 @@ class FacetsResponse $atf = ElasticsearchOptions::getAggregableTechnicalFields(); - foreach ($response['aggregations'] as $name => $aggregation) { + // sort facets respecting the order defined in options + foreach($options->getAggregableFields() as $name=>$foptions) { + if(!array_key_exists($name, $response['aggregations'])) { + continue; + } + $aggregation = $response['aggregations'][$name]; + $tf = null; $valueFormatter = function($v){ return $v; }; // default equality formatter @@ -46,22 +52,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)) ]; } @@ -77,6 +84,7 @@ class FacetsResponse ]; } } + } 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..0793c91c7b 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[] * */ @@ -29,11 +35,6 @@ final class GlobalStructure implements Structure */ private $private = array(); - /** - * @var Field[] - */ - private $facets = array(); - /** * @var Flag[] */ @@ -119,6 +120,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])) { @@ -135,9 +140,11 @@ final class GlobalStructure implements Structure $this->private[$name] = $field; } + /* if ($field->isFacet() && $field->isSearchable()) { $this->facets[$name] = $field; } + */ if ($field->hasConceptInference()) { $this->thesaurus_fields[$name] = $field; @@ -152,6 +159,11 @@ final class GlobalStructure implements Structure return $this->fields; } + public function getAllFieldsByDatabox($databox_id) + { + return $this->fieldsByDatabox[$databox_id]; + } + /** * @return Field[] */ @@ -168,14 +180,6 @@ final class GlobalStructure implements Structure return $this->private; } - /** - * @return Field[] - */ - public function getFacetFields() - { - return $this->facets; - } - /** * @return Field[] */ diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php index 671bf87c93..053ca6b0e0 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/LimitedStructure.php @@ -47,14 +47,6 @@ final class LimitedStructure implements Structure return $this->limit($this->structure->getPrivateFields()); } - /** - * @return Field[] - */ - public function getFacetFields() - { - return $this->limit($this->structure->getFacetFields()); - } - public function getThesaurusEnabledFields() { return $this->limit($this->structure->getThesaurusEnabledFields()); diff --git a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php index 3c2be701e1..44d58e9d5f 100644 --- a/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php +++ b/lib/Alchemy/Phrasea/SearchEngine/Elastic/Structure/Structure.php @@ -33,11 +33,6 @@ interface Structure */ public function getPrivateFields(); - /** - * @return Field[] - */ - public function getFacetFields(); - /** * @return Field[] */ diff --git a/lib/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/Setup/Installer.php b/lib/Alchemy/Phrasea/Setup/Installer.php index 9c750d6cc7..74cb131e9b 100644 --- a/lib/Alchemy/Phrasea/Setup/Installer.php +++ b/lib/Alchemy/Phrasea/Setup/Installer.php @@ -30,11 +30,11 @@ class Installer $this->app = $app; } - public function install($email, $password, Connection $abConn, $serverName, $dataPath, Connection $dbConn = null, $templateName = null, array $binaryData = []) + public function install($email, $password, Connection $abConn, $serverName, array $storagePaths, Connection $dbConn = null, $templateName = null, array $binaryData = []) { $this->rollbackInstall($abConn, $dbConn); - $this->createConfigFile($abConn, $serverName, $binaryData, $dataPath); + $this->createConfigFile($abConn, $serverName, $binaryData, $storagePaths); try { $this->createAB($abConn); $user = $this->createUser($email, $password); @@ -185,7 +185,7 @@ class Installer $this->app->getApplicationBox()->insert_datas($this->app); } - private function createConfigFile(Connection $abConn, $serverName, $binaryData, $dataPath) + private function createConfigFile(Connection $abConn, $serverName, $binaryData, array $storagePaths) { $config = $this->app['configuration.store']->initialize()->getConfig(); @@ -203,17 +203,28 @@ class Installer $config['servername'] = $serverName; $config['main']['key'] = $this->app['random.medium']->generateString(16); - if (null === $dataPath = realpath($dataPath)) { - throw new \InvalidArgumentException(sprintf('Path %s does not exist.', $dataPath)); + // define storage config + $defaultStoragePaths = [ + 'subdefs' => __DIR__ . '/../../../../datas', + 'cache' => __DIR__ . '/../../../../cache', + 'log' => __DIR__ . '/../../../../logs', + 'download' => __DIR__ . '/../../../../tmp/download', + 'lazaret' => __DIR__ . '/../../../../tmp/lazaret', + 'caption' => __DIR__ . '/../../../../tmp/caption', + 'worker_tmp_files' => __DIR__ . '/../../../../tmp' + ]; + + $storagePaths = array_merge($defaultStoragePaths, $storagePaths); + + foreach ($storagePaths as $key => $path) { + if (!is_dir($path)) { + mkdir($path, 0755, true); + } + + $storagePaths[$key] = realpath($path); } - $config['main']['storage']['subdefs'] = $dataPath; - - $config['main']['storage']['cache'] = realpath(__DIR__ . '/../../../../cache'); - $config['main']['storage']['log'] = realpath(__DIR__ . '/../../../../logs'); - $config['main']['storage']['download'] = realpath(__DIR__ . '/../../../../tmp/download'); - $config['main']['storage']['lazaret'] = realpath(__DIR__ . '/../../../../tmp/lazaret'); - $config['main']['storage']['caption'] = realpath(__DIR__ . '/../../../../tmp/caption'); + $config['main']['storage'] = $storagePaths; $config['registry'] = $this->app['registry.manipulator']->getRegistryData(); diff --git a/lib/Alchemy/Phrasea/Setup/Requirements/BinariesRequirements.php b/lib/Alchemy/Phrasea/Setup/Requirements/BinariesRequirements.php index 5e90593085..759809de61 100644 --- a/lib/Alchemy/Phrasea/Setup/Requirements/BinariesRequirements.php +++ b/lib/Alchemy/Phrasea/Setup/Requirements/BinariesRequirements.php @@ -60,7 +60,7 @@ class BinariesRequirements extends RequirementCollection implements RequirementI ); } - $exiftool = __DIR__ . '/../../../../../vendor/phpexiftool/exiftool/exiftool' . (defined('PHP_WINDOWS_VERSION_BUILD') ? '.exe' : ''); + $exiftool = __DIR__ . '/../../../../../vendor/exiftool/exiftool/exiftool' . (defined('PHP_WINDOWS_VERSION_BUILD') ? '.exe' : ''); $this->addRequirement( is_file($exiftool) && is_executable($exiftool), diff --git a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php index 532eb8bbb5..de418a4e71 100644 --- a/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php +++ b/lib/Alchemy/Phrasea/TaskManager/Job/ArchiveJob.php @@ -12,6 +12,8 @@ namespace Alchemy\Phrasea\TaskManager\Job; use Alchemy\Phrasea\Application; +use Alchemy\Phrasea\Core\Event\Record\RecordEvents; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Exception\RuntimeException; use Alchemy\Phrasea\Border\File; use Alchemy\Phrasea\Border\Manager as borderManager; @@ -1001,7 +1003,7 @@ class ArchiveJob extends AbstractJob { // quick fix to reconnect if mysql is lost $app->getApplicationBox()->get_connection(); - $databox->get_connection(); + $collection->get_connection(); $status = \databox_status::operation_or($stat0, $stat1); @@ -1032,7 +1034,8 @@ class ArchiveJob extends AbstractJob } $story->setStatus(\databox_status::operation_or($stat0, $stat1)); - $story->rebuild_subdefs(); + + $app['dispatcher']->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($story)); unset($media); 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/Alchemy/Phrasea/Webhook/EventProcessorFactory.php b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php index 90edefc10c..79109a624c 100644 --- a/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php +++ b/lib/Alchemy/Phrasea/Webhook/EventProcessorFactory.php @@ -12,6 +12,7 @@ use Alchemy\Phrasea\Webhook\Processor\ProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\ProcessorInterface; use Alchemy\Phrasea\Webhook\Processor\UserDeletedProcessorFactory; use Alchemy\Phrasea\Webhook\Processor\UserRegistrationProcessorFactory; +use Alchemy\Phrasea\Webhook\Processor\SubdefEventProcessor; class EventProcessorFactory { @@ -29,7 +30,10 @@ class EventProcessorFactory $this->registerFactory(WebhookEvent::FEED_ENTRY_TYPE, new FeedEntryProcessorFactory($app)); $this->registerFactory(WebhookEvent::USER_REGISTRATION_TYPE, new UserRegistrationProcessorFactory($app)); $this->registerFactory(WebhookEvent::ORDER_TYPE, new OrderNotificationProcessorFactory($app)); - $this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory($app)); + $this->registerFactory(WebhookEvent::USER_DELETED_TYPE, new UserDeletedProcessorFactory()); + $this->registerCallableFactory(WebhookEvent::RECORD_SUBDEF_TYPE, function () { + return new SubdefEventProcessor(); + }); } /** @@ -43,7 +47,7 @@ class EventProcessorFactory /** * @param string $eventType - * @param callback|callable $callable + * @param callback|callable|\Closure $callable */ public function registerCallableFactory($eventType, $callable) { diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/FeedEntryProcessor.php b/lib/Alchemy/Phrasea/Webhook/Processor/FeedEntryProcessor.php index 7fd4500c49..c873bbb680 100644 --- a/lib/Alchemy/Phrasea/Webhook/Processor/FeedEntryProcessor.php +++ b/lib/Alchemy/Phrasea/Webhook/Processor/FeedEntryProcessor.php @@ -34,17 +34,16 @@ class FeedEntryProcessor implements ProcessorInterface { $data = $event->getData(); - if (!isset($data->entry_id)) { + if (!isset($data['entry_id'])) { return null; } - $entry = $this->entryRepository->find($data->entry_id); + $entry = $this->entryRepository->find($data['entry_id']); if (null === $entry) { return null; } - $data = $event->getData(); $feed = $entry->getFeed(); $query = $this->userQuery; @@ -54,8 +53,8 @@ class FeedEntryProcessor implements ProcessorInterface ->include_templates(false) ->email_not_null(true); - if ($feed->getCollection($this->app)) { - $query->on_base_ids([$feed->getCollection($this->app)->get_base_id()]); + if ($feed->getCollection($this->application)) { + $query->on_base_ids([$feed->getCollection($this->application)->get_base_id()]); } $start = 0; @@ -76,7 +75,7 @@ class FeedEntryProcessor implements ProcessorInterface return [ 'event' => $event->getName(), - 'users_were_notified' => isset($data->notify_email) ?: (bool) $data->notify_email, + 'users_were_notified' => isset($data['notify_email']) ? (bool) $data['notify_email'] : false, 'feed' => [ 'id' => $feed->getId(), 'title' => $feed->getTitle(), diff --git a/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php b/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php new file mode 100644 index 0000000000..4a442ed5db --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/Processor/SubdefEventProcessor.php @@ -0,0 +1,17 @@ + $event->getName(), + 'data' => $event->getData() + ]; + } +} diff --git a/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php b/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php index 4304a5319f..2beaec292f 100644 --- a/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php +++ b/lib/Alchemy/Phrasea/Webhook/WebhookPublisher.php @@ -19,7 +19,7 @@ use Alchemy\Queue\MessageQueueRegistry; * Class WebhookPublisher publishes webhook event notifications in message queues * @package Alchemy\Phrasea\Webhook */ -class WebhookPublisher +class WebhookPublisher implements WebhookPublisherInterface { /** * @var MessageQueueRegistry diff --git a/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php b/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php new file mode 100644 index 0000000000..f8b4751ef0 --- /dev/null +++ b/lib/Alchemy/Phrasea/Webhook/WebhookPublisherInterface.php @@ -0,0 +1,10 @@ +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/eventsmanager/broker.php b/lib/classes/eventsmanager/broker.php index 62244756ce..468a0bc621 100644 --- a/lib/classes/eventsmanager/broker.php +++ b/lib/classes/eventsmanager/broker.php @@ -39,7 +39,6 @@ class eventsmanager_broker ], 'notify' => [ 'eventsmanager_notify_autoregister', - 'eventsmanager_notify_bridgeuploadfail', 'eventsmanager_notify_downloadmailfail', 'eventsmanager_notify_feed', 'eventsmanager_notify_order', diff --git a/lib/classes/eventsmanager/notify/order.php b/lib/classes/eventsmanager/notify/order.php index d5aca30998..bba2c686f0 100644 --- a/lib/classes/eventsmanager/notify/order.php +++ b/lib/classes/eventsmanager/notify/order.php @@ -42,7 +42,7 @@ class eventsmanager_notify_order extends eventsmanager_notifyAbstract $ret = [ 'text' => $this->app->trans('%user% a passe une %opening_link% commande %end_link%', [ '%user%' => $sender, - '%opening_link%' => '', + '%opening_link%' => '', '%end_link%' => '',]) , 'class' => '' ]; diff --git a/lib/classes/patch/410alpha17a.php b/lib/classes/patch/410alpha17a.php new file mode 100644 index 0000000000..a719c2b62b --- /dev/null +++ b/lib/classes/patch/410alpha17a.php @@ -0,0 +1,77 @@ +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); + + foreach ($databox->get_meta_structure() as $databox_field) { + if ($databox_field->get_tbranch() != '') { + $databox_field->set_generate_cterms(true); + } else { + $databox_field->set_generate_cterms(false); + } + + $databox_field->save(); + } + + return true; + } +} diff --git a/lib/classes/patch/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/patch/410alpha21a.php b/lib/classes/patch/410alpha21a.php new file mode 100644 index 0000000000..58091e62f2 --- /dev/null +++ b/lib/classes/patch/410alpha21a.php @@ -0,0 +1,111 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function apply(base $databox, Application $app) + { + // fix the Longitude value + + $sql = 'SELECT id, record_id, name, value FROM technical_datas WHERE trim(name) = "LongitudeRef" '; + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute(); + $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + foreach ($rs as $row) { + if (trim($row['value']) === 'W' ) { + $sql = 'UPDATE technical_datas SET value = CONCAT("-", value) WHERE trim(name) = "Longitude" AND record_id =:record_id'; + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute([':record_id' => $row['record_id']]); + } + + $sqlDelete = 'DELETE FROM technical_datas WHERE id =:id'; + + $stmt1 = $databox->get_connection()->prepare($sqlDelete); + $stmt1->execute([':id' => $row['id']]); + $stmt1->closeCursor(); + } + + $stmt->closeCursor(); + + // fix the Latitude value + + $sql = 'SELECT id, record_id, name, value FROM technical_datas WHERE trim(name) = "LatitudeRef" '; + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute(); + $rs = $stmt->fetchAll(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + foreach ($rs as $row) { + if (trim($row['value']) === 'S' ) { + $sql = 'UPDATE technical_datas SET value = CONCAT("-", value) WHERE trim(name) = "Latitude" AND record_id =:record_id'; + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute([':record_id' => $row['record_id']]); + } + + $sqlDelete = 'DELETE FROM technical_datas WHERE id =:id'; + + $stmt1 = $databox->get_connection()->prepare($sqlDelete); + $stmt1->execute([':id' => $row['id']]); + $stmt1->closeCursor(); + } + + $stmt->closeCursor(); + + return true; + } +} diff --git a/lib/classes/patch/410alpha22a.php b/lib/classes/patch/410alpha22a.php new file mode 100644 index 0000000000..6a80bd058e --- /dev/null +++ b/lib/classes/patch/410alpha22a.php @@ -0,0 +1,75 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function apply(base $appbox, Application $app) + { + foreach(['type', 'created', 'updated', 'expiration'] as $t) { + $sql = "ALTER TABLE `Tokens` ADD INDEX `".$t."` (`".$t."`);"; + try { + $stmt = $appbox->get_connection()->prepare($sql); + $stmt->execute(); + $stmt->closeCursor(); + } + catch (\Exception $e) { + // the inex already exists ? + } + } + + return true; + } +} diff --git a/lib/classes/patch/410alpha23a.php b/lib/classes/patch/410alpha23a.php new file mode 100644 index 0000000000..eae272bc8e --- /dev/null +++ b/lib/classes/patch/410alpha23a.php @@ -0,0 +1,111 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function apply(base $appbox, Application $app) + { + // fix embed-bundle keys + if ($app['conf']->has(['embed_bundle', 'video', 'available-speeds'])) { + $availableSpeed = $app['conf']->get(['embed_bundle', 'video', 'available-speeds']); + $app['conf']->remove(['embed_bundle', 'video', 'available-speeds']); + $app['conf']->set(['embed_bundle', 'video', 'available_speeds'], $availableSpeed); + } + + if ($app['conf']->has(['embed_bundle', 'audio', 'available-speeds'])) { + $availableSpeed = $app['conf']->get(['embed_bundle', 'audio', 'available-speeds']); + $app['conf']->remove(['embed_bundle', 'audio', 'available-speeds']); + $app['conf']->set(['embed_bundle', 'audio', 'available_speeds'], $availableSpeed); + } + + if ($app['conf']->has(['embed_bundle', 'document', 'enable-pdfjs'])) { + $enablePdfjs = $app['conf']->get(['embed_bundle', 'document', 'enable-pdfjs']); + $app['conf']->remove(['embed_bundle', 'document', 'enable-pdfjs']); + $app['conf']->set(['embed_bundle', 'document', 'enable_pdfjs'], $enablePdfjs); + } + + // geoloc section change replace 'name' to 'map-provider' + if ($app['conf']->has(['geocoding-providers', 0, 'name'])) { + $geocodingName = $app['conf']->get(['geocoding-providers', 0, 'name']); + $app['conf']->remove(['geocoding-providers', 0, 'name']); + $app['conf']->set(['geocoding-providers', 0, 'map-provider'], $geocodingName); + } + + // video-editor section change, replace 'vttFieldName' to 'ChapterVttFieldName' + if ($app['conf']->has(['video-editor', 'vttFieldName'])) { + $chapterVttFieldName = $app['conf']->get(['video-editor', 'vttFieldName']); + $app['conf']->remove(['video-editor', 'vttFieldName']); + $app['conf']->set(['video-editor', 'ChapterVttFieldName'], $chapterVttFieldName); + } + + // remove registry classic section if exist + if ($app['conf']->has(['registry', 'classic'])) { + $app['conf']->remove(['registry', 'classic']); + } + + // remove bridge section if exist + if ($app['conf']->has(['main', 'bridge'])) { + $app['conf']->remove(['main', 'bridge']); + } + + // insert RGPD bloc if not exist + if (!$app['conf']->has(['user_account', 'deleting_policies', 'email_confirmation'])) { + $app['conf']->set(['user_account', 'deleting_policies', 'email_confirmation'], true); + } + + return true; + } +} diff --git a/lib/classes/patch/410alpha25a.php b/lib/classes/patch/410alpha25a.php new file mode 100644 index 0000000000..35b1c5a5d0 --- /dev/null +++ b/lib/classes/patch/410alpha25a.php @@ -0,0 +1,82 @@ +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) + { + /** @var PropertyAccess $conf */ + $conf = $app['conf']; + $oldOptions = $conf->get(['main', 'search-engine', 'options'], []); + $newOptions = []; + $facets = []; + // preserve former settings from conf (tech facets) + foreach($oldOptions as $k=>$v) { + if(substr($k, -16) === '_aggregate_limit') { + // this option is moved under "facets" + $k = substr($k, 0, strlen($k)-16); // keep field name + $facets['_'.$k] = ['limit' => $v]; + } + else { + $newOptions[$k] = $v; + } + } + // add facets for fields + foreach($app->getDataboxes() as $databox) { + foreach($databox->get_meta_structure() as $field) { + $facets[$field->get_name()] = ['limit' => $field->getFacetValuesLimit()]; + } + } + // facets in the end of settings + $newOptions['facets'] = $facets; + $conf->set(['main', 'search-engine', 'options'], $newOptions); + + return true; + } +} diff --git a/lib/classes/patch/410alpha26a.php b/lib/classes/patch/410alpha26a.php new file mode 100644 index 0000000000..3d61ebcdc3 --- /dev/null +++ b/lib/classes/patch/410alpha26a.php @@ -0,0 +1,73 @@ +release; + } + + /** + * {@inheritdoc} + */ + public function concern() + { + return $this->concern; + } + + /** + * {@inheritdoc} + */ + public function require_all_upgrades() + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getDoctrineMigrations() + { + return []; + } + + /** + * {@inheritdoc} + */ + public function apply(base $databox, Application $app) + { + $sql = "ALTER TABLE `record` ADD INDEX `moddate` (`moddate`);"; + try { + $stmt = $databox->get_connection()->prepare($sql); + $stmt->execute(); + $stmt->closeCursor(); + } + catch (\Exception $e) { + // the index already exists ? + } + + return true; + } +} \ No newline at end of file diff --git a/lib/classes/phraseadate.php b/lib/classes/phraseadate.php index c501eadd5d..e6599283cc 100644 --- a/lib/classes/phraseadate.php +++ b/lib/classes/phraseadate.php @@ -90,13 +90,14 @@ class phraseadate $compareTo = new DateTime('now'); $diff = $compareTo->format('U') - $date->format('U'); + $yearDiff = $compareTo->format('Y') - $date->format('Y'); $dayDiff = floor($diff / 86400); if (is_nan($dayDiff) || $dayDiff > 365000) { return ''; } - $date_string = $this->formatDate($date, $this->app['locale'], 'DAY_MONTH'); + $date_string = $this->formatDate($date, $this->app['locale'], ($yearDiff != 0) ? 'DAY_MONTH_YEAR' : 'DAY_MONTH'); if ($dayDiff == 0) { if ($diff < 60) { @@ -119,6 +120,16 @@ class phraseadate } } + public function getTranslatedDate(DateTime $date = null) + { + $fmt = new IntlDateFormatter( + $this->app['locale'] ?: 'en', + NULL, NULL, NULL, NULL, 'dd MMMM yyyy' + ); + + return $fmt->format($date); + } + /** * * @param DateTime $date @@ -138,17 +149,25 @@ class phraseadate */ private function formatDate(DateTime $date, $locale, $format) { - switch ($locale) { default: + case 'de': case 'fr': switch ($format) { default: case 'DAY_MONTH': - $date_formated = strftime("%e %B", $date->format('U')); + $formatM = new IntlDateFormatter( + $locale, + NULL, NULL, NULL, NULL, 'dd MMMM' + ); + $date_formated = $formatM->format($date); break; case 'DAY_MONTH_YEAR': - $date_formated = strftime("%e %B %Y", $date->format('U')); + $formatY = new IntlDateFormatter( + $locale, + NULL, NULL, NULL, NULL, 'dd MMMM yyyy' + ); + $date_formated = $formatY->format($date); break; } break; @@ -156,26 +175,22 @@ class phraseadate switch ($format) { default: case 'DAY_MONTH': - $date_formated = strftime("%B %e", $date->format('U')); + $formatM = new IntlDateFormatter( + $locale, + NULL, NULL, NULL, NULL, 'MMMM dd' + ); + $date_formated = $formatM->format($date); break; case 'DAY_MONTH_YEAR': - $date_formated = strftime("%B %e %Y", $date->format('U')); - break; - } - break; - case 'de': - switch ($format) { - default: - case 'DAY_MONTH': - $date_formated = strftime("%e. %B", $date->format('U')); - break; - case 'DAY_MONTH_YEAR': - $date_formated = strftime("%e. %B %Y", $date->format('U')); + $formatY = new IntlDateFormatter( + $locale, + NULL, NULL, NULL, NULL, 'MMMM dd yyyy' + ); + $date_formated = $formatY->format($date); break; } break; } - return $date_formated; } diff --git a/lib/classes/record/adapter.php b/lib/classes/record/adapter.php index c4045d9fc5..9d94822566 100644 --- a/lib/classes/record/adapter.php +++ b/lib/classes/record/adapter.php @@ -19,6 +19,7 @@ use Alchemy\Phrasea\Core\Event\Record\OriginalNameChangedEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvent; use Alchemy\Phrasea\Core\Event\Record\RecordEvents; use Alchemy\Phrasea\Core\Event\Record\StatusChangedEvent; +use Alchemy\Phrasea\Core\Event\Record\SubdefinitionCreateEvent; use Alchemy\Phrasea\Core\PhraseaTokens; use Alchemy\Phrasea\Databox\Subdef\MediaSubdefRepository; use Alchemy\Phrasea\Filesystem\FilesystemService; @@ -284,7 +285,7 @@ class record_adapter implements RecordInterface, cache_cacheableInterface $this->getDataboxConnection()->executeUpdate($sql, ['type' => $type, 'record_id' => $this->getRecordId()]); if ($old_type !== $type) { - $this->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($this)); } $this->type = $type; @@ -341,7 +342,8 @@ class record_adapter implements RecordInterface, cache_cacheableInterface array(':mime' => $mime, ':record_id' => $this->getRecordId()) )) { - $this->rebuild_subdefs(); + $this->dispatch(RecordEvents::SUBDEFINITION_CREATE, new SubdefinitionCreateEvent($this)); + $this->delete_data_from_cache(); } @@ -1673,6 +1675,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 @@ -1685,17 +1724,22 @@ 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()]); + $user = $this->getAuthenticatedUser(); + + $selections = $this->getDatabox()->getRecordRepository()->findChildren([$this->getRecordId()], $user, $offset, $max_items); return reset($selections); } @@ -1705,7 +1749,9 @@ class record_adapter implements RecordInterface, cache_cacheableInterface */ public function get_grouping_parents() { - $selections = $this->getDatabox()->getRecordRepository()->findParents([$this->getRecordId()]); + $user = $this->getAuthenticatedUser(); + + $selections = $this->getDatabox()->getRecordRepository()->findParents([$this->getRecordId()], $user); return reset($selections); } @@ -1908,4 +1954,15 @@ class record_adapter implements RecordInterface, cache_cacheableInterface { return $this->app['provider.repo.media_subdef']->getRepositoryForDatabox($this->getDataboxId()); } + + /** + * @return User|null + */ + protected function getAuthenticatedUser() + { + /** @var \Alchemy\Phrasea\Authentication\Authenticator $authenticator */ + $authenticator = $this->app['authentication']; + + return $authenticator->getUser(); + } } diff --git a/lib/conf.d/bases_structure.xml b/lib/conf.d/bases_structure.xml index a666eaeb5c..d922ec0312 100644 --- a/lib/conf.d/bases_structure.xml +++ b/lib/conf.d/bases_structure.xml @@ -1328,7 +1328,7 @@ host - char(64) + char(255) @@ -1403,7 +1403,7 @@ label_en - char(50) + char(128) YES @@ -1411,7 +1411,7 @@ label_fr - char(50) + char(128) YES @@ -1419,7 +1419,7 @@ label_de - char(50) + char(128) YES @@ -1427,7 +1427,7 @@ label_nl - char(50) + char(128) YES @@ -2033,6 +2033,30 @@ + + generate_cterms + int(1) unsigned + + + 1 + + + + gui_editable + int(1) unsigned + + + 1 + + + + gui_visible + int(1) unsigned + + + 1 + + @@ -3260,6 +3284,13 @@ parent_record_id + + moddate + INDEX + + moddate + + InnoDB
diff --git a/lib/conf.d/configuration.yml b/lib/conf.d/configuration.yml index 0e13eba50c..8a7a62052d 100644 --- a/lib/conf.d/configuration.yml +++ b/lib/conf.d/configuration.yml @@ -39,21 +39,37 @@ main: populate_order: RECORD_ID populate_direction: DESC activeTab: '#elastic-search' - base_aggregate_limit: 10 - collection_aggregate_limit: 10 - doctype_aggregate_limit: 0 - camera_model_aggregate_limit: 0 - iso_aggregate_limit: 0 - aperture_aggregate_limit: 0 - shutterspeed_aggregate_limit: 0 - flashfired_aggregate_limit: 0 - framerate_aggregate_limit: 0 - audiosamplerate_aggregate_limit: 0 - videocodec_aggregate_limit: 0 - audiocodec_aggregate_limit: 0 - orientation_aggregate_limit: 0 - colorspace_aggregate_limit: 0 - mimetype_aggregate_limit: 0 + facets: + _base: + limit: 10 + _collection: + limit: 10 + _doctype: + limit: 10 + _camera_model: + limit: 0 + _iso: + limit: 0 + _aperture: + limit: 0 + _shutterspeed: + limit: 0 + _flashfired: + limit: 0 + _framerate: + limit: 0 + _audiosamplerate: + limit: 0 + _videocodec: + limit: 0 + _audiocodec: + limit: 0 + _orientation: + limit: 0 + _colorspace: + limit: 0 + _mimetype: + limit: 0 task-manager: status: started enabled: true @@ -87,6 +103,7 @@ main: mp4box_timeout: 60 swftools_timeout: 60 unoconv_timeout: 60 + exiftool_timeout: 60 storage: subdefs: null cache: null @@ -94,6 +111,7 @@ main: download: null lazaret: null caption: null + worker_tmp_files: null trusted-proxies: [] debugger: @@ -241,7 +259,7 @@ embed_bundle: geocoding-providers: - map-provider: 'mapboxWebGL' - enabled: true + enabled: false public-key: '' map-layers: - @@ -275,7 +293,7 @@ geocoding-providers: # type: latlng # - # name: Longitude - # type: lng + # type: lon # - # name: Latitude # type: lat @@ -284,20 +302,21 @@ geocoding-providers: provincefields: Province countryfields: 'Country, Pays' video-editor: - vttFieldName: VideoTextTrackChapters + ChapterVttFieldName: VideoTextTrackChapters seekBackwardStep: 500 # in ms seekForwardStep: 500 # in ms playbackRates: - 1 - '1.5' - 3 -rabbitmq: - server: - host: localhost - port: 5672 - user: '' - password: '' - vhost: / - +workers: + queue: + worker-queue: + registry: alchemy_worker.queue_registry + host: localhost + port: 5672 + user: '' + password: '' + vhost: / Console_logger_enabled_environments: [test] diff --git a/lib/conf.d/data_templates/DublinCore.xml b/lib/conf.d/data_templates/DublinCore.xml index 31e874a13d..db3039df7f 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 + libfdk_aac 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..81ce397169 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 + libfdk_aac 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..48d628cedd 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 + libfdk_aac libx264 screen 1000 diff --git a/package.json b/package.json index 84823d0938..2701197eda 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.177-d", "requirejs": "^2.3.5", "tinymce": "^4.0.28", "underscore": "^1.8.3", diff --git a/resources/ansible/roles/app/tasks/main.yml b/resources/ansible/roles/app/tasks/main.yml index 623d28d124..9c00f7171e 100644 --- a/resources/ansible/roles/app/tasks/main.yml +++ b/resources/ansible/roles/app/tasks/main.yml @@ -66,5 +66,5 @@ - name: Make exiftool executable file: - path: /vagrant/vendor/phpexiftool/exiftool/exiftool + path: /vagrant/vendor/exiftool/exiftool/exiftool mode: 0755 diff --git a/resources/hudson/_GV.php b/resources/hudson/_GV.php index 284f4db6ba..808768544e 100644 --- a/resources/hudson/_GV.php +++ b/resources/hudson/_GV.php @@ -84,5 +84,7 @@ define('GV_homeTitle', 'SuperPhraseanet'); define('GV_metaKeywords', ''); define('GV_metaDescription', ''); define('GV_googleAnalytics', ''); +define('GV_matomoAnalyticsUrl', ''); +define('GV_matomoAnalyticsId', ''); define('GV_allow_search_engine', true); define('GV_display_gcf', true); diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index 60bd9547fb..cabec7d032 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -12,9 +12,9 @@ Form/Login/PhraseaAuthenticationForm.php Form/Configuration/EmailFormType.php - + Add - Add + Hinzufügen admin/fields/templates.html.twig @@ -24,7 +24,14 @@ url through a forwarded mail for example. 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 + 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 @@ -105,15 +112,14 @@ %Total% results %Total% Ergebnisse - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents %basket_length% Dokument(e) - mobile/lightbox/validate.html.twig - web/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/validate.html.twig %countable% documents can not be modified. @@ -186,8 +192,9 @@ %nb_records% records %nb_records% Datensätze + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -205,8 +212,8 @@ selectionnes]]> - ausgewählt]]> - Controller/Prod/QueryController.php + ausgewählt]]> + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -247,7 +254,7 @@ %quantity% records added %quantity% Datensätze hinzugefügt Controller/Prod/BasketController.php - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php %quantity% records moved @@ -272,7 +279,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 +294,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 +349,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 @@ -377,17 +384,17 @@ (validation) a envoyer zu senden - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) envoyee gesendet - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) session terminee Sitzung beendet - web/lightbox/index.html.twig + web/lightbox/index.html.twig *Phraseanet Navigator* is a smartphone application that allow user to connect on this instance @@ -402,8 +409,7 @@ 1 result 1 Ergebnis - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -448,8 +454,8 @@ A zu - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig A document has been quarantined @@ -469,22 +475,22 @@ A file with the same UUID already exists in database Eine Datei mit ähnlichen UUID ist schon in der Datenbank - Border/Checker/UUID.php + Border/Checker/UUID.php A file with the same checksum already exists in database Eine Datei mit selber Checksumme ist schon in der Datenbank - Border/Checker/Sha256.php + Border/Checker/Sha256.php A file with the same filename already exists in database Eine Datei mit dem selben Dateiname befindet sich schon in der Datenbank - Border/Checker/Filename.php + Border/Checker/Filename.php 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 @@ -544,8 +550,8 @@ Access Zugriff - actions/Feedback/List-Share.html.twig web/admin/editusers.html.twig + actions/Feedback/List-Share.html.twig Access code @@ -612,7 +618,7 @@ Accuse de reception Empfangsbestätigung Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Accuse de reception indisponible, vous n'avez pas declare d'adresse email @@ -622,22 +628,22 @@ Action Forbidden : You are not the publisher Aktion verboten: Sie sind nicht der Veröffentlicher - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php Actions Handlungen - Bridge/Dailymotion/actionelements.html.twig Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig + Bridge/Dailymotion/actionelements.html.twig Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig + Bridge/Youtube/actionelements.html.twig Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig Activate highlight Highlight aktivieren - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -649,8 +655,8 @@ Activer aktivieren admin/databox/databox.html.twig - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Activer le grant_type de type password pour votre application @@ -662,29 +668,28 @@ eine Kollektion aktivieren admin/databox/databox.html.twig - + Activity - Activity + Aktivität actions/Feedback/list.html.twig Add Hinzufügen prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig - prod/User/Add.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/User/Add.html.twig - + Add a new field - Add a - new field + Fügen Sie ein neues Feld hinzu admin/fields/templates.html.twig - + Add a list - Add a list + Fügen Sie eine Liste hinzu actions/Feedback/lists-all.html.twig @@ -702,19 +707,19 @@ einen Administrator hinzufügen web/admin/dashboard.html.twig - + Add an end point - Add an end point + Fügen Sie einen Endpunkt hinzu Controller/Prod/LanguageController.php - + Add an entry point - Add an entry point + Fügen Sie einen Einstiegspunkt hinzu Controller/Prod/LanguageController.php - + Add new range - Add new range + Fügen Sie ein neues Kapitel hinzu Controller/Prod/LanguageController.php @@ -756,67 +761,73 @@ Advanced Search Erweiterte Suche - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig - + Advanced mode - Advanced mode + Erweiterter Modus actions/Feedback/list.html.twig - + Advanced settings - Advanced settings + Erweiterte Einstellungen web/admin/subdefs.html.twig Affichage Anzeige - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage beim Start anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive das beschriftliche Blatt anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre den Titel anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status die Status anzeigen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone eine Ikone anzeigen - web/prod/index.html.twig + web/prod/index.html.twig After metadata Nach Metadaten - web/prod/index.html.twig + web/prod/index.html.twig + + + Aggregated + aggregiert + admin/search-engine/general-aggregation.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 @@ -828,9 +839,9 @@ Ajouter ma selection courrante Meine aktuelle Auswahl hinzufügen + prod/orders/order_item.html.twig prod/Baskets/Create.html.twig prod/Story/Create.html.twig - prod/orders/order_item.html.twig Ajouter un nouvel utilisateur @@ -851,6 +862,7 @@ All Alle Form/Configuration/CustomLinkFormType.php + task-manager/task-editor/subdefs.html.twig WorkZone/Browser/Browser.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig @@ -858,17 +870,11 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - task-manager/task-editor/subdefs.html.twig All these conditions Alle Bedingungen - web/prod/index.html.twig - - - All values - Alle Werte - admin/fields/templates.html.twig + web/prod/index.html.twig Aller a @@ -878,7 +884,7 @@ Allow the website to be indexed by search engines like Google Die Website ermöglichen, von Suchmaschinen (wie Google) indexiert zu werden. - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Allowed @@ -930,39 +936,32 @@ Push wird erlaubt web/admin/editusers.html.twig - + Alphabetic asc - Alphabetic asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + aufsteigender alphabetischer Reihenfolge + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig - + Alphabetic desc - Alphabetic desc - web/prod/index.html.twig + absteigender alphabetischer Reihenfolge + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. Auch Datensätze löschen, die auf Berichte angewiesen sind - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm.html.twig An error occured Ein Fehler ist aufgetreten - Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxesController.php + Controller/Prod/MoveCollectionController.php + Controller/Prod/BasketController.php + Controller/Prod/ToolsController.php + Controller/Prod/LazaretController.php + Controller/Prod/StoryController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php @@ -974,17 +973,30 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php - Controller/Prod/StoryController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxesController.php + Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php web/admin/users.html.twig - admin/databox/databox.html.twig web/admin/databases.html.twig + admin/databox/databox.html.twig + task-manager/task-editor/task.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - task-manager/task-editor/task.html.twig + + + An error occured when wanting to change status! + Beim Ändern des Status ist ein Fehler aufgetreten! + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists @@ -1020,13 +1032,14 @@ An error occurred Ein Fehler ist aufgetreten - Order/Controller/ProdOrderController.php - Controller/Admin/DataboxController.php - Controller/Admin/SearchEngineController.php - Controller/Admin/CollectionController.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Admin/SearchEngineController.php + Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Order/Controller/ProdOrderController.php web/admin/statusbit.html.twig @@ -1057,7 +1070,7 @@ Aperture Blende - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -1118,8 +1131,8 @@ Apply a template Eine Schablone anwenden - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Apply changes @@ -1145,8 +1158,8 @@ Archive Archivieren - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Are you sure you want delete users rights ? @@ -1198,7 +1211,7 @@ Aucun Kein(e) - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1213,7 +1226,7 @@ Aucun statut editable Kein editierbarer Status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1254,7 +1267,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1270,7 +1283,7 @@ Audio Samplerate Audio Samplerate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Audio channel @@ -1280,7 +1293,7 @@ Audio codec Audio-Codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php AudioSamplerate @@ -1356,20 +1369,20 @@ Autorisation d'acces Zugriffsberechtigung - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autoriser Berechtigen - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autorisez-vous l'application %application_name% a acceder a votre contenu sur %home_title% ? Ermächtigen Sie die Anwendung %application_name%, Ihren Inhalt auf %home_title% zuzugreifen? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Available in multi-export tab @@ -1384,11 +1397,11 @@ Back Zurück - mobile/lightbox/basket_element.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/basket_element.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Back to Feedback @@ -1426,9 +1439,9 @@ Base %base% Datenbank %base% + web/admin/editusers_timelimit_sbas.html.twig web/admin/editusers_quotas.html.twig web/admin/editusers_timelimit.html.twig - web/admin/editusers_timelimit_sbas.html.twig Base could not be created @@ -1440,6 +1453,11 @@ Datenbank Leerung wurde erfolgreich Controller/Admin/DataboxController.php + + Basket + Sammelkorb + prod/WorkZone/Macros.html.twig + Basket created Sammelkorb wurde erstellt @@ -1468,16 +1486,16 @@ Basket is not found Sammelkorb wurde nicht gefunden - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated Sammelkorb wurde aktualisiert Controller/Prod/BasketController.php - + Binary data - Binary data + Binärdaten Controller/Prod/SubdefsController.php @@ -1508,9 +1526,9 @@ Browse Baskets Sammelkörbe durchsuchen - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1520,7 +1538,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% @@ -1535,10 +1553,10 @@ Standardmässig ist es für die Administratoren verfügbar Form/Configuration/FtpExportFormType.php - + By field - By field - web/prod/index.html.twig + Nach Feld + web/prod/index.html.twig CHAMPS @@ -1548,20 +1566,20 @@ Camera Model Kameramodell - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig Cancel Abbrechen Controller/Prod/LanguageController.php - prod/actions/delete_records_confirm.html.twig + user/import/view.html.twig + task-manager/task-editor/task.html.twig + admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig actions/Property/type.html.twig actions/Property/index.html.twig - prod/User/Add.html.twig - task-manager/task-editor/task.html.twig - user/import/view.html.twig - admin/fields/templates.html.twig + prod/User/Add.html.twig Cancel all @@ -1582,7 +1600,7 @@ Carousel Karussell - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Categorie @@ -1672,7 +1690,7 @@ Certaines donnees du panier ont change Einige Daten des Sammelkorbs wurden verändert - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -1699,16 +1717,15 @@ meine E-Mail Adresse verändern web/account/reset-email.html.twig - + Change play speed - Change play speed + Wiedergabegeschwindigkeit ändern Controller/Prod/LanguageController.php - + Changes for rotation will be applied only on the sub-definitions of "image" type. - Changes for rotation will be applied only on - the sub-definitions of "image" type. + Änderungen für Drehung werden nur auf "Bilder" Unterauflösungen verwendet. actions/Tools/index.html.twig @@ -1729,8 +1746,6 @@ Choisir wählen - prod/Baskets/Reorder.html.twig - prod/Story/Reorder.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -1738,23 +1753,20 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig + prod/Baskets/Reorder.html.twig + prod/Story/Reorder.html.twig Choose a new password Wählen Sie ein neues Passwort aus - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Choose the title of the document to export Wählen Sie den Titel des Dokuments zu exportieren Form/Configuration/ActionsFormType.php - - City - Stadt - prod/User/Add.html.twig - Civility Anrede @@ -1763,8 +1775,8 @@ Clear Klar - admin/task-manager/log_task.html.twig admin/task-manager/log_scheduler.html.twig + admin/task-manager/log_task.html.twig Clear list @@ -1800,7 +1812,7 @@ Codec Audio Audio Codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1811,9 +1823,9 @@ Collection Kollektion - prod/Story/Create.html.twig - prod/upload/lazaret.html.twig admin/databox/details.html.twig + prod/Story/Create.html.twig + prod/upload/lazaret.html.twig Collection %collection% @@ -1826,10 +1838,10 @@ Die Leerung der Kollektion wurde erfolgreich abgeschlossen Controller/Admin/CollectionController.php - + Collection order - Collection order - web/prod/index.html.twig + Kollektionen Ordnung + web/prod/index.html.twig Color Depth @@ -1844,13 +1856,13 @@ Colorspace Colorspace - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Commande Bestellung + eventsmanager/notify/orderdeliver.php eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1860,13 +1872,13 @@ Commandes Bestellungen - web/common/menubar.html.twig + web/common/menubar.html.twig Company Unternehmen - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig prod/User/Add.html.twig @@ -1900,7 +1912,7 @@ Configuration Konfiguration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1925,13 +1937,13 @@ Connection Verbindung - login/providers/mapping.html.twig - login/providers/mapping.html.twig + login/oauth/login.html.twig + web/login/index.html.twig + web/login/index.html.twig login/providers/bind.html.twig login/providers/bind.html.twig - web/login/index.html.twig - web/login/index.html.twig - login/oauth/login.html.twig + login/providers/mapping.html.twig + login/providers/mapping.html.twig Connection is OK but database does not exists or can not be accessed @@ -1946,7 +1958,7 @@ Connection to FTP succeed FTP Verbindung erfolgreich - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Consultez en ligne les pré-requis et la configuration du serveur web @@ -1956,7 +1968,7 @@ Contains enthält - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -1976,7 +1988,7 @@ Cooliris Cooliris - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Copiez le code ci-dessous, retournez dans votre application et collez-le a l'endroit requis : @@ -2011,17 +2023,17 @@ Couleur de selection Farbauswahl - web/prod/index.html.twig + web/prod/index.html.twig Country Land - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig - + Create a user - Create a user + Einen Benutzer erstellen actions/Feedback/list.html.twig @@ -2032,7 +2044,7 @@ Create index Index erstellen - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Creation date @@ -2107,9 +2119,9 @@ Erstellen Sie zuerst eine Anwendung, um das Phraseanet API danach zu benutzen. web/developers/applications.html.twig - + Ctrl - Ctrl + Strg Controller/Prod/LanguageController.php @@ -2117,12 +2129,11 @@ Gesamtzahl admin/databox/details.html.twig - + Current configuration contains some errors - Current configuration contains some - errors - admin/fields/templates.html.twig + Die aktuelle Konfiguration enthält einige Fehler + 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 @@ -2139,9 +2150,9 @@ Aktuelle Sitzung web/account/sessions.html.twig - + Custom - Custom + benutzerdefiniert web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -2160,9 +2171,9 @@ DU Form/Configuration/CustomLinkFormType.php - + Danger zone ! - Danger zone ! + Gefahrenzone ! admin/fields/index.html.twig @@ -2220,22 +2231,22 @@ 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 Erstellungsdatum admin/publications/list.html.twig - + Date Updated - Date Updated - web/prod/index.html.twig + Aktualisierungsdatum + web/prod/index.html.twig Date de connexion @@ -2264,13 +2275,13 @@ Date(s) from field(s) Datum vom Feld - web/prod/index.html.twig + web/prod/index.html.twig De von - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Deadline @@ -2292,7 +2303,7 @@ Deconnexion Abmeldung - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Decouvrez la documentation @@ -2302,12 +2313,12 @@ Default TTL in seconds of sub-definition url Standard-TTL in Sekunden, von URL Unterauflösung - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Default basket Standard Sammelkorb - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2339,10 +2350,10 @@ Eine Webhook URL festlegen web/developers/application.html.twig - + Defined by admin - Defined by admin - web/prod/index.html.twig + Von Administrator festgelegt + web/prod/index.html.twig Defined in Apache configuration @@ -2362,9 +2373,9 @@ Delete Löschen - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Delete account successfull @@ -2374,17 +2385,17 @@ Delete all users rights Alle Nutzerrechte löschen - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Delete basket Sammelkorb löschen - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig - + Delete current - Delete current + Aktuelles löschen Controller/Prod/LanguageController.php @@ -2392,14 +2403,14 @@ Datensätze löschen Controller/Prod/LanguageController.php - + Delete the selection - Delete the selection + Auswahl löschen actions/Feedback/list.html.twig - + Delete the subview ? - Delete the subview ? + Unteransicht löschen ? web/admin/subdefs.html.twig @@ -2410,9 +2421,9 @@ Deny verweigern + login/oauth/authorize-access.html.twig prod/orders/order_item.html.twig prod/orders/order_item.html.twig - login/oauth/authorize-access.html.twig Deplacement %n_element% elements @@ -2432,9 +2443,9 @@ prod/results/feeds_entry.html.twig prod/results/entry.html.twig - + Derniers envois - Derniers envois + Letzte Sendungen web/developers/application.html.twig @@ -2445,29 +2456,29 @@ Description Beschreibung + web/developers/application_form.html.twig Bridge/Dailymotion/upload.html.twig Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/upload.html.twig Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig prod/Tooltip/DCESFieldInfo.html.twig - web/developers/application_form.html.twig Deselect all Alle abwählen - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Design of personalization logo section Logo Anpassung - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Detailed view URL @@ -2494,8 +2505,8 @@ Dimension Grösse Media/Subdef/Image.php - Media/Subdef/Unknown.php Media/Subdef/Video.php + Media/Subdef/Unknown.php Disable document type sharing @@ -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 @@ -2556,13 +2567,12 @@ Do you want to send your report ? Möchten Sie Ihren Bericht senden ? Phrasea/Controller/LightboxController.php - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig Document Dokument - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2577,7 +2587,7 @@ Document has been successfully substitued Dokument wurde erfolgreich ersetzt - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% @@ -2617,9 +2627,9 @@ Download von Dokumenten actions/Download/prepare.html.twig - + Drag and drop the pin to move position - Drag and drop the pin to move position + Ziehen Sie das Pin-Symbol und legen Sie es ab, um den Standort zu verschieben Controller/Prod/LanguageController.php @@ -2630,7 +2640,7 @@ Drop index Drop index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Duree @@ -2648,9 +2658,9 @@ Form/Login/PhraseaForgotPasswordForm.php Form/Login/PhraseaRegisterForm.php - + E-mail domain - E-mail domain + Mail Domain actions/Feedback/list.html.twig @@ -2683,9 +2693,9 @@ Bearbeiten admin/task-manager/templates.html.twig - + Edit position - Edit position + Standort bearbeiten Controller/Prod/LanguageController.php @@ -2718,7 +2728,7 @@ Edition impossible Bearbeitung nicht möglich - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -2738,19 +2748,19 @@ ElasticSearch index name ElasticSearch Index Name - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch server host ElasticSearch Server Host - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch service port ElasticSearch Service Schnittstelle - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -2897,9 +2907,9 @@ HD Ersetzung aktivieren Form/Configuration/ModulesFormType.php - + Enable Phraseanet Web API - Enable Phraseanet Web API + Phraseanet Web API aktivieren Form/Configuration/APIClientsFormType.php @@ -2958,10 +2968,10 @@ web/account/sessions.html.twig web/account/sessions.html.twig - + End Range - End Range - Controller/Prod/LanguageController.php + Kapitel beenden + Controller/Prod/LanguageController.php End session activity @@ -3001,7 +3011,7 @@ Equals gleicht - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3011,8 +3021,8 @@ Erreur ! Fehler ! - mobile/lightbox/error.html.twig web/lightbox/error.html.twig + mobile/lightbox/error.html.twig Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas @@ -3089,12 +3099,12 @@ Error while connecting to FTP Fehler bei der FTP Verbindung - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Error while creating user Fehler bei der Erstellung des Benutzers - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3105,8 +3115,8 @@ Error while sending the file Fehler beim Datei Senden - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Error while uploading @@ -3144,7 +3154,7 @@ Ex : Paris, bleu, montagne Ex : Berlin, blau, Gebirge - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3156,6 +3166,11 @@ Einstellungen von ausführbaren Programme Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Ablaufsdatum erfolgreich aktualisiert! + Controller/Prod/PushController.php + Export Exportieren @@ -3163,15 +3178,15 @@ Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php - + Export ranges - Export ranges - Controller/Prod/LanguageController.php + Kapitel exportieren + Controller/Prod/LanguageController.php Export saved in the waiting queue Export in der Warteschlange gespeichert - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php FR @@ -3202,10 +3217,10 @@ Feedback Feedback Controller/Prod/LanguageController.php + prod/WorkZone/Macros.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig Feeds @@ -3260,11 +3275,11 @@ File is not present in quarantine anymore, please refresh Datei befindet sich nicht mehr in der Quarantäne, bitte aktualisieren + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php - Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php File is too big : 64k max @@ -3294,13 +3309,13 @@ Filename Dateiname - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles verfügbare Threads - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig Filter @@ -3320,20 +3335,20 @@ First/Last Name Vorname / Nachname - actions/Feedback/ListsMacros.html.twig web/admin/users.html.twig web/admin/users.html.twig + actions/Feedback/ListsMacros.html.twig Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig FlashFired FlashFired - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Flatten layers @@ -3349,7 +3364,7 @@ Force authentication Authentifizierung zwingen - prod/templates/push.html.twig + prod/templates/push.html.twig Force sending of the document ? @@ -3369,10 +3384,10 @@ Forgot password? Passwort vergessen ? - login/providers/mapping.html.twig - login/providers/bind.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig Forgot your password? @@ -3392,7 +3407,7 @@ FrameRate Framerate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Frequence d'echantillonage @@ -3412,7 +3427,7 @@ Gallery Gallery - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php General configuration @@ -3424,6 +3439,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 @@ -3455,10 +3475,10 @@ Media/Subdef/Image.php Media/Subdef/Unknown.php - + Geo Search - Geo Search - web/prod/index.html.twig + Lokalisierung + web/prod/index.html.twig Geonames server address @@ -3470,35 +3490,35 @@ Eine Nachricht erhalten wenn ein Email Export fehlschlägt eventsmanager/notify/downloadmailfail.php - + Get setting form index - Get setting form index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + Index Daten erhalten + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side. Gibt Ihrer Applikation die Möglichkeit, mit Phraseanet zu kommunizieren. Diese Webhook kann benutzt werden, um einige Aktionen auf Ihrer Applikationsseite auszulösen. web/developers/application.html.twig - + Go 1 frame backward - Go 1 frame backward - Controller/Prod/LanguageController.php - - - Go 1 frame forward - Go 1 frame forward + Gehen Sie ein Einzelbild zurück Controller/Prod/LanguageController.php - - Go to end point - Go to end point + + Go 1 frame forward + Gehen Sie ein Einzelbild vorwärts Controller/Prod/LanguageController.php - + + Go to end point + Gehen Sie zum Endpunkt + Controller/Prod/LanguageController.php + + Go to start point - Go to start point - Controller/Prod/LanguageController.php + Gehen Sie zum Startpunkt + Controller/Prod/LanguageController.php Good @@ -3533,7 +3553,7 @@ Graphiste (preview au rollover) Grafiker (Voransicht mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3548,8 +3568,9 @@ Guest Gast - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + mobile/common/menubar.html.twig Guest access @@ -3561,6 +3582,16 @@ Gast, sie müssen authentifizieren, um die Dateien herunterzuladen. web/common/dialog_export.html.twig + + Gui-editable + GUI editierbar + admin/fields/templates.html.twig + + + Gui-visible + GUI sichtbar + admin/fields/templates.html.twig + HD Download HD Download @@ -3569,14 +3600,14 @@ Hello %username% Hallo %username% - api/auth/end_user_authorization.html.twig - api/auth/native_app_access_token.html.twig api/auth/end_user_authorization.html.twig + api/auth/native_app_access_token.html.twig + api/auth/end_user_authorization.html.twig Help Hilfe - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3591,16 +3622,16 @@ Home Hautpseite - mobile/lightbox/basket_element.html.twig - 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 + mobile/lightbox/basket_element.html.twig + mobile/lightbox/feed.html.twig + mobile/lightbox/validate.html.twig Homepage slideshow Homeseite Diashow - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Hyperfocal distance @@ -3621,7 +3652,7 @@ ISO ISO - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php ISO sensibility @@ -3631,7 +3662,7 @@ Iconographe (description au rollover) Bildredakteur (Beschreibung mit Rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3676,7 +3707,7 @@ Image Bild - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3686,7 +3717,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 +3733,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 +3745,7 @@ Incorrect please try again Falsch, bitte versuchen Sie es erneut - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3734,9 +3765,9 @@ Informations Informationen - web/account/base.html.twig web/admin/dashboard.html.twig admin/user/registrations.html.twig + web/account/base.html.twig Informations personnelles @@ -3772,14 +3803,14 @@ Invalid file format Ungültiges Datei Format - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid file type Ungültiger Dateityp - prod/upload/upload-flash.html.twig admin/collection/collection.html.twig + prod/upload/upload-flash.html.twig Invalid file type, only (%supported_file_types%) file formats are supported @@ -3796,8 +3827,8 @@ Invalid labels parameter ungültige Labels Parameter - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid link. @@ -3846,9 +3877,9 @@ Synchronisierung zwischen Bridge und Client APIs erhalten. TaskManager/Job/BridgeJob.php - + Keyboard shortcuts - Keyboard shortcuts + Tastenkombinationen Controller/Prod/LanguageController.php @@ -3870,17 +3901,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 + Benutzer hat seine Meinung noch nicht gegeben + prod/WorkZone/Macros.html.twig La connection vers le serveur distant est OK @@ -3923,10 +3954,10 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Sprache - web/prod/index.html.twig + + Language selection + Sprachauswahl + web/prod/index.html.twig Last Name @@ -3956,7 +3987,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 +4089,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 @@ -4073,14 +4104,14 @@ Lightbox Lightbox - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Limite temporelle zeitliche Beschränkung - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Limited vocabulary @@ -4158,10 +4189,10 @@ Login Benutzername Form/Login/PhraseaAuthenticationForm.php - actions/Feedback/ListsMacros.html.twig - login/providers/mapping.html.twig - login/providers/bind.html.twig login/oauth/login.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig + actions/Feedback/ListsMacros.html.twig Login %login% already exists in database @@ -4181,8 +4212,8 @@ Login to link your account Einloggen, um Ihr Konto zu verknüpfen - login/providers/mapping.html.twig login/providers/bind.html.twig + login/providers/mapping.html.twig Logs @@ -4193,7 +4224,7 @@ Ma derniere question meine letzte Suchabfrage - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4260,6 +4291,16 @@ Masken web/admin/editusers_masks.html.twig + + Matomo Analytics identifier + Matomo Analytics site ID + Form/Configuration/GeneralFormType.php + + + Matomo Analytics url + Matomo Analytics URL + Form/Configuration/GeneralFormType.php + Maximum megabytes allowed for download genehmigte Menge in Megabytes für Download @@ -4279,7 +4320,7 @@ Message Nachricht Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Message automatique de Phraseanet @@ -4299,7 +4340,7 @@ MimeType MimeType - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Minimum number of letters before truncation @@ -4314,8 +4355,8 @@ Missing labels parameter Labels-Parameter fehlt - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Missing mandatory parameter %parameter% @@ -4350,7 +4391,7 @@ Mode de presentation Anzeigemodus - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4360,8 +4401,8 @@ Models Vorlage - actions/Feedback/list.html.twig admin/user/registrations.html.twig + actions/Feedback/list.html.twig Modify @@ -4389,20 +4430,20 @@ %countable% Datensätze zur ausgewählten Kollektion verschieben prod/actions/collection_default.html.twig - + Move down range - Move down range - Controller/Prod/LanguageController.php + Kapitel herunterziehen + Controller/Prod/LanguageController.php Move one record to the chosen collection in the list. Einen Datensatz zur ausgewählten Kollektion verschieben prod/actions/collection_default.html.twig - + Move up range - Move up range - Controller/Prod/LanguageController.php + Kapitel aufrücken + Controller/Prod/LanguageController.php Moves records @@ -4434,31 +4475,31 @@ Name Name Controller/Prod/LanguageController.php - Bridge/Dailymotion/playlist_createcontainer.html.twig - actions/Download/prepare.html.twig - prod/templates/push.html.twig admin/fields/templates.html.twig + actions/Download/prepare.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + prod/templates/push.html.twig Name or email Name oder Email admin/publications/fiche.html.twig - + Navigate to end point - Navigate to end point + Navigieren Sie zum Endpunkt Controller/Prod/LanguageController.php - + Navigate to entry point - Navigate to entry point + Navigieren Sie zum Startpunkt Controller/Prod/LanguageController.php Ne pas autoriser Nicht berechtigen - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Ne pas creer de DataBox maintenant @@ -4474,14 +4515,14 @@ New password Neues Passwort - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New password (confirmation) Neues Passwort (Bestätigung) - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New task @@ -4491,15 +4532,15 @@ Next Weiter - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig No Nein - web/account/account.html.twig web/developers/applications.html.twig + web/account/account.html.twig No URL available @@ -4534,7 +4575,7 @@ No document selected Kein ausgewähltes Dokument - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig No elements to push @@ -4551,9 +4592,9 @@ Keine Übereinstimmung gefunden web/geonames/city_list.html.twig - + No metadata available - No metadata available + Keine Metadaten verfügbar actions/Tools/metadata.html.twig @@ -4569,7 +4610,7 @@ No preview available Keine Voransicht verfügbar - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4584,8 +4625,7 @@ No results Keine Ergebnisse - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4620,8 +4660,8 @@ Nom du nouveau panier Titel - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig Non-Restreinte (publique) @@ -4644,16 +4684,16 @@ None of the selected records can be printed Keine der ausgewählte Datensätze können gedruckt werden - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig None of the selected records can be pushed. - Keines der ausgewählten Datensätze können via Push gesendet werden. + Keine der ausgewählten Datensätze können via Push gesendet werden. prod/actions/Push.html.twig None of the selected records can be sent for feedback. - Keines der ausgewählten Datensätze können für das Feedback gesendet werden. + Keine der ausgewählten Datensätze können für das Feedback gesendet werden. prod/actions/Push.html.twig @@ -4664,7 +4704,8 @@ Not aggregated Nicht aggregiert - admin/fields/templates.html.twig + admin/search-engine/general-aggregation.html.twig + admin/fields/templates.html.twig Notification par email @@ -4674,13 +4715,13 @@ Notifications Benachrichtigungen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales Allgemeine Benachrichtigungen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4730,13 +4771,13 @@ Number of replicas Anzahl von Nachbauten - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Number of shards Anzahl von Scherben - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -4753,28 +4794,28 @@ Ok OK - prod/actions/delete_records_confirm.html.twig admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig One document can not be modified. Ein Dokument kann nicht geändert werden prod/actions/collection_default.html.twig - + One frame backward - One frame backward + Ein Einzelbild zurück Controller/Prod/LanguageController.php - + One frame forward - One frame forward + Ein Einzelbild vorwärts Controller/Prod/LanguageController.php One of these conditions Eine von diesen Bedingungen - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -4799,9 +4840,9 @@ Or login with Oder Anmeldung mit - web/login/register.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + web/login/register.html.twig api/auth/end_user_authorization.html.twig @@ -4827,7 +4868,7 @@ Orders manager Bestellungen Manager eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -4837,7 +4878,7 @@ Orientation Ausrichtung - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Original name @@ -4866,27 +4907,27 @@ prod/upload/lazaret.html.twig prod/upload/lazaret.html.twig - + Pages - Pages + Seiten actions/Feedback/ListsMacros.html.twig Paniers Sammelkörbe - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - web/account/account.html.twig - web/lightbox/index.html.twig + web/lightbox/validate.html.twig + web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/account/account.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Par %author% Von %author% - mobile/lightbox/feed.html.twig prod/results/feeds_entry.html.twig prod/results/entry.html.twig + mobile/lightbox/feed.html.twig Password @@ -4915,21 +4956,16 @@ Letztes Jahr WorkZone/Browser/Browser.html.twig - + Path - Path + Pfad web/admin/subdefs.html.twig - + Pause - Pause + Pause Controller/Prod/LanguageController.php - - Pays - Pays - prod/User/Add.html.twig - Periodically fetches an FTP repository content locally Holt regelmässig einen FTP Repository Inhalt lokal @@ -4986,9 +5022,9 @@ Phraseanet empfiehlt dringend die Benutzung von %link_start%MariaDB%link_end%, um MySQL zu ersetzen web/setup/step2.html.twig - + Play - Play + Play Controller/Prod/LanguageController.php @@ -5122,10 +5158,10 @@ Preferences Einstellungen - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5140,24 +5176,24 @@ 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 - Presets + Voreinstellungen web/admin/subdefs.html.twig Previous Zurück - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig Print @@ -5167,8 +5203,8 @@ Problemes de connexion ? Verbindungsprobleme ? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Process the registration @@ -5198,10 +5234,10 @@ Publications Veröffentlichungen - web/prod/index.html.twig - admin/publications/wrapper.html.twig web/admin/tree.html.twig - web/common/menubar.html.twig + admin/publications/wrapper.html.twig + web/prod/index.html.twig + web/common/menubar.html.twig Publier @@ -5222,8 +5258,9 @@ Push Push - eventsmanager/notify/push.php Controller/Prod/LanguageController.php + eventsmanager/notify/push.php + prod/WorkZone/Macros.html.twig Push configuration @@ -5238,26 +5275,26 @@ Push::filter on companies Unternehmensname - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on countries Land - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on emails E-Mail - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on login Benutzername - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on name @@ -5272,8 +5309,8 @@ Push::filter starts beginnt mit - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::une validation est une demande d'appreciation a d'autres personnes @@ -5310,80 +5347,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,25 +5435,25 @@ 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 wieder ordnen prod/Baskets/Reorder.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod/Story/Reorder.html.twig @@ -5453,22 +5490,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 +5545,7 @@ Rechercher dans un champ date im Feld "Datum" suchen - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5528,7 +5565,7 @@ Record Not Found Datensatz wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5538,7 +5575,7 @@ Record removed from story Datensatz wurde vom Bericht entfernt - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Record_id @@ -5553,7 +5590,7 @@ Records have been successfuly moved Datensätze wurden erfolgreich bewegt - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5569,10 +5606,10 @@ Register Registrieren - web/login/register-classic.html.twig - web/login/register.html.twig - web/login/register-provider.html.twig login/include/register-link-block.html.twig + web/login/register-classic.html.twig + web/login/register-provider.html.twig + web/login/register.html.twig Register approbation @@ -5587,19 +5624,19 @@ Reglages:: reglages d acces guest Gast Zugriff Einstellungen - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Reglages:: reglages d inscitpition automatisee Auto Register Einstellungen - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Relevance Relevanz - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5617,10 +5654,10 @@ Media/Subdef/Image.php Media/Subdef/Unknown.php - + Remove current Range - Remove current Range - Controller/Prod/LanguageController.php + Aktuelles Kapitel entfernen + Controller/Prod/LanguageController.php Remove from basket @@ -5641,8 +5678,8 @@ Renew password Passwort erneuern Notification/Mail/MailRequestPasswordUpdate.php - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Reorder collections @@ -5663,7 +5700,7 @@ Report Report - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5833,9 +5870,9 @@ Row Passwort fehlt, Skript wurde gestoppt. user/import/file.html.twig - + Résultats des derniers envois effectués pour cette application - Résultats des derniers envois effectués pour cette application + Ergebnisse der letzten gesendeten Nachrichten für diese Anwendung web/developers/application.html.twig @@ -5876,23 +5913,28 @@ Save Speichern - actions/Feedback/list.html.twig - web/account/change-password.html.twig - admin/search-engine/general-aggregation.html.twig + web/login/renew-password.html.twig + admin/search-engine/general-aggregation.html.twig admin/search-engine/elastic-search.html.twig task-manager/task-editor/task.html.twig web/developers/application.html.twig web/developers/application.html.twig - web/login/renew-password.html.twig + actions/Feedback/list.html.twig + web/account/change-password.html.twig Save all changes Alle Änderungen speichern admin/fields/templates.html.twig - + + Save as VTT + Kapitel speichern + Controller/Prod/LanguageController.php + + Save the list - Save the list + Liste speichern actions/Feedback/list.html.twig @@ -5915,16 +5957,16 @@ Suchmaschine Form/Configuration/MainConfigurationFormType.php - + Search for existing user - Search for existing user + Suchen Sie nach bestehende Benutzer actions/Feedback/List-Share.html.twig SearchEngine settings Suchmaschine Einstellungen - web/setup/step2.html.twig web/admin/tree.html.twig + web/setup/step2.html.twig Security @@ -5935,10 +5977,11 @@ See Sehen WorkZone/Browser/Browser.html.twig + prod/WorkZone/Macros.html.twig - + See documentation about structure manipulation. - See documentation about structure manipulation. + Für Struktur Veränderungen, Dokumentation sehen admin/fields/index.html.twig @@ -5950,17 +5993,17 @@ See my order Meine Bestellung ansehen - Notification/Mail/MailInfoOrderCancelled.php Notification/Mail/MailInfoOrderDelivered.php + Notification/Mail/MailInfoOrderCancelled.php See others Andere sehen prod/actions/Push.html.twig - + See the list - See the list + Die Liste sehen actions/Feedback/list.html.twig @@ -5971,7 +6014,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 ! @@ -5981,10 +6024,10 @@ Select all Alle auswählen - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Select all collections @@ -5994,19 +6037,19 @@ Select files... Dateien auswählen... - prod/upload/upload.html.twig - prod/upload/upload-flash.html.twig + user/import/file.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig - user/import/file.html.twig admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig + prod/upload/upload.html.twig + prod/upload/upload-flash.html.twig Selected base(s) Ausgewählte Datenbank(en) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6017,14 +6060,14 @@ Send Senden Controller/Prod/LanguageController.php + web/login/forgot-password.html.twig + web/admin/dashboard.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod/actions/Push.html.twig prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - web/admin/dashboard.html.twig - web/login/forgot-password.html.twig Send an email to the user to setup his password @@ -6057,7 +6100,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 @@ -6116,9 +6159,9 @@ Verteilen Controller/Prod/LanguageController.php - + Share my list - Share my list + Meine Liste teilen actions/Feedback/list.html.twig @@ -6126,9 +6169,9 @@ Die Liste teilen actions/Feedback/list.html.twig - + Shift - Shift + Umschalt Controller/Prod/LanguageController.php @@ -6140,7 +6183,7 @@ Shutter speed Verschlusszeit - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -6166,7 +6209,7 @@ Single image Einzelbild - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Site web @@ -6176,14 +6219,14 @@ Size Grösse - actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig Slide show Diashow - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Some files are being downloaded @@ -6198,7 +6241,7 @@ Something went wrong Ein Fehler ist aufgetreten - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Something went wrong, please contact an administrator @@ -6233,9 +6276,9 @@ Source Quelle - prod/Tooltip/DataboxField.html.twig admin/fields/templates.html.twig admin/fields/templates.html.twig + prod/Tooltip/DataboxField.html.twig Sous-titre @@ -6243,9 +6286,9 @@ admin/publications/fiche.html.twig admin/publications/list.html.twig - + Space bar - Space bar + Space-Taste Controller/Prod/LanguageController.php @@ -6259,10 +6302,10 @@ admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig - + Start Range - Start Range - Controller/Prod/LanguageController.php + Kapitel starten + Controller/Prod/LanguageController.php Start by creating one by using the "add" button on the left ! @@ -6283,7 +6326,7 @@ Status des documents a rechercher Zustand der Dokumente - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6303,10 +6346,10 @@ Stop Stop - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Stopped @@ -6317,16 +6360,18 @@ Stories Berichte Form/Configuration/SearchEngineFormType.php + prod/WorkZone/Macros.html.twig Story Not Found Bericht wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php Story created Bericht wurde erfolgreich erstellt - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story detached from the WorkZone @@ -6341,7 +6386,7 @@ Story updated Bericht wurde aktualisiert - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story_id @@ -6368,16 +6413,16 @@ Unterauflösung admin/databox/details.html.twig - + Submit - Submit + Einreichen Controller/Prod/LanguageController.php 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 @@ -6398,16 +6443,22 @@ Successful removal erfolgreiches Löschen - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php Successful update Erfolgreiches Update + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -6415,16 +6466,10 @@ Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig + actions/Tools/videoEditor.html.twig Successfull connection @@ -6436,9 +6481,9 @@ Vorschlagswerte admin/collection/suggested_value.html.twig - + Suppr - Suppr + Entf Controller/Prod/LanguageController.php @@ -6560,19 +6605,19 @@ Terms of use Nutzungsbedingungen Controller/Prod/TOUController.php - web/admin/tree.html.twig + login/layout/base-layout.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + web/admin/tree.html.twig - + The Phraseanet Web API allows other web application to rely on this instance - The Phraseanet Web API allows other web application to rely on this instance + Die Phraseanet Web API ermöglicht, andere Web Anwendungen, auf diese Instanz zu vertrauen Form/Configuration/APIClientsFormType.php The URL you used is out of date, please login Die URL, die Sie benutzt haben, ist nicht mehr gültig. Bitte loggen Sie sich ein - Phrasea/ControllerProvider/Lightbox.php + Phrasea/ControllerProvider/Lightbox.php The Youtube servers have received too many calls from the same caller in a short amount of time. @@ -6583,7 +6628,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 +6648,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 @@ -6643,8 +6688,8 @@ The file is too big Datei ist zu gross - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The file was moved to the quarantine @@ -6656,11 +6701,16 @@ Die folgende Fehler wurden festgestellt user/import/view.html.twig + + The provided date is null! + Angegebenes Datum ist NULL! + Controller/Prod/PushController.php + The publication has been stopped Veröffentlichung wurde gestoppt - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The record was successfully created @@ -6701,7 +6751,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6721,13 +6771,13 @@ Thesaurus Min score Thesaurus Hits (minimal) - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Thesaurus branch Thesaurus Sprung - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6757,8 +6807,8 @@ This feed is public Dieses Feed ist öffentlich - actions/publish/publish.html.twig admin/publications/list.html.twig + actions/publish/publish.html.twig This field is required @@ -6794,7 +6844,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 @@ -6814,7 +6864,7 @@ Thumbnail has been successfully substitued Vorschau wurde erfolgreich ersetzt - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Thumbnails directory is mounted to be accessible via HTTP, while other files are not. @@ -6830,23 +6880,23 @@ Titre Titel - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/upload.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/upload.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig - Bridge/Flickr/upload.html.twig - Bridge/Flickr/photo_modify.html.twig - prod/Story/Reorder.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/publications/list.html.twig + prod/Baskets/Reorder.html.twig + Bridge/Dailymotion/upload.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Youtube/upload.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig - + Toggle loop - Toggle loop + Wiederholung aktivieren Controller/Prod/LanguageController.php @@ -6861,7 +6911,7 @@ Tool box - Toolbox + Werkzeuge Controller/Prod/LanguageController.php @@ -6873,12 +6923,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 +6954,7 @@ Trier par Sortieren nach - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6929,7 +6979,7 @@ Type de documents Dokumenttyp - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -6944,8 +6994,8 @@ URL de callback Callback URL - web/developers/application_form.html.twig web/developers/application.html.twig + web/developers/application_form.html.twig Un document commande @@ -6960,8 +7010,8 @@ Unable to add file to Phraseanet Unmöglich, Datei zu Phraseanet hinzuzufügen - Controller/Admin/FeedController.php Controller/Prod/UploadController.php + Controller/Admin/FeedController.php Unable to add usr to list @@ -6971,8 +7021,8 @@ Unable to authenticate with %provider_name% Unmöglich, mit %provider_name% zu authentifizieren - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php Unable to connect to MySQL server @@ -7014,8 +7064,13 @@ Unable to retrieve provider identity unmöglich, Provider Identität abzurufen - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php + + + Unable to save the expiration date + Unmöglich, Ablaufsdatum zu speichern + Controller/Prod/PushController.php Unable to send the documents @@ -7052,15 +7107,15 @@ Une question personnelle eine persönliche Frage - web/prod/index.html.twig + web/prod/index.html.twig Une selection eine Auswahl ohne Titel - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php Unhandled Error @@ -7119,7 +7174,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 +7199,7 @@ Uploaded by : %username% von: %username% hochgeladen - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7156,15 +7211,15 @@ Benutzen Sie einen SMTP Server Form/Configuration/EmailFormType.php - + Use an existing index - Use an existing index + Benutzen Sie einen bestehenden Index web/setup/step2.html.twig 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 @@ -7221,10 +7276,10 @@ Controller/Prod/LanguageController.php prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig + prod/templates/push.html.twig prod/templates/push.html.twig + prod/templates/push.html.twig User can see others choices @@ -7243,16 +7298,16 @@ User successfully created Benutzer wurde erfolgreich erstellt - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users Benutzer Vocabulary/ControlProvider/UserProvider.php - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/admin/users.html.twig user/import/view.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Users must accept Terms of Use for each export @@ -7264,16 +7319,16 @@ Benutzer Vorschlag prod/actions/Push.html.twig - + Utilisation prevue: - Utilisation prevue: + Verwendungszweck: prod/orders/order_item.html.twig VALIDATION Bestätigung - web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig + web/lightbox/agreement_box.html.twig Validate e-mail address @@ -7283,11 +7338,11 @@ Validation Bestätigung - eventsmanager/notify/validationdone.php - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationdone.php lightbox/IE6/validate.html.twig @@ -7303,11 +7358,11 @@ Validations Bestätigung - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + web/lightbox/validate.html.twig web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Validations received @@ -7342,7 +7397,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7352,7 +7407,7 @@ Video codec Video-Codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Videos @@ -7368,24 +7423,24 @@ 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 Ihre Sammelkörbe - mobile/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Voici vos validations en cours Hier sind Ihre aktuellen Bewertungen - mobile/lightbox/index.html.twig web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Votre adresse email @@ -7420,7 +7475,7 @@ Vous avez envoye une demande de validation de document sur ce panier Sie haben eine Bewertung von Dokumenten angefordert - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Vous avez recu des documents @@ -7432,11 +7487,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 +7594,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 ! @@ -7564,8 +7614,8 @@ Watch my access requests status Meine Zugriffsanfrage Status anschauen - Notification/Mail/MailSuccessAccessRequest.php Notification/Mail/MailSuccessEmailConfirmationUnregistered.php + Notification/Mail/MailSuccessAccessRequest.php Watermark @@ -7645,15 +7695,15 @@ 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 Ja - web/account/account.html.twig user/import/view.html.twig web/developers/applications.html.twig + web/account/account.html.twig You are Admin @@ -7740,7 +7790,7 @@ You can not edit this story Sie können diesen Bericht nicht bearbeiten - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php You can not upload files @@ -7766,17 +7816,17 @@ You do not have required rights to send these documents over FTP Sie besitzen nicht genügend Zugriffsrechte, diese Dokumente mit dem FTP zu senden - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php You do not have rights to remove all selected documents. Are you sure ? Sie besitzen nicht genügend Zugriffsrechte, alle ausgewählte Dokumente zu löschen. Sind Sie sicher? - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have rights to remove selected documents Sie besitzen nicht genügend Zugriffsrechte, um die ausgewählte Dokumente zu löschen - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have the permission to move records to %collection% @@ -7801,7 +7851,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. @@ -7816,7 +7866,7 @@ You have to give your feedback at least on one document to send a report Sie müssen Ihr Feedback mindestens an einem Dokument geben, um einen Bericht zu senden - Phrasea/Controller/LightboxController.php + Phrasea/Controller/LightboxController.php You have to wait for an administrator approval for your access request @@ -7841,7 +7891,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 @@ -7862,12 +7912,12 @@ You will no longer receive notifications at %old_email% Sie werden Benachrichtigungen auf %old_email% nicht mehr bekommen - Helper/User/Edit.php + Helper/User/Edit.php You will now receive notifications at %new_email% Sie werden nun Benachrichtigungen auf %new_email% bekommen - Helper/User/Edit.php + Helper/User/Edit.php Your %provider_name% account matchs a Phraseanet account @@ -7953,150 +8003,148 @@ a propos Über - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig action : ajouter au panier Zum Sammelkorb hinzufügen + prod/preview/tools.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection Verschieben prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : editer Bearbeiten prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig prod/preview/caption.html.twig + web/prod/toolbar.html.twig action : exporter Exportieren + web/lightbox/feed.html.twig + web/lightbox/validate.html.twig + lightbox/IE6/feed.html.twig + lightbox/IE6/validate.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig - web/prod/index.html.twig - web/lightbox/feed.html.twig - lightbox/IE6/feed.html.twig - lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/prod/index.html.twig action : outils Werkzeuge prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : print Drucken prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : publier Veröffentlichen 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 + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push Push prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : status Eigenschaften prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : supprimer Löschen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + web/prod/toolbar.html.twig action:: nouveau panier Neuer - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Neuer Bericht - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider Bestätigen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::detacher entfernen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::editer Bearbeiten - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::exporter Exportieren - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::renommer umbenennen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig actual status @@ -8346,9 +8394,9 @@ Sind Sie sicher, dass Sie die Kollektion leeren möchten? admin/collection/collection.html.twig - + admin::base:collection: identifiant - admin::base:collection: identifiant + Kollektion ID admin/collection/collection.html.twig @@ -8449,23 +8497,23 @@ Tätigkeit Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig + web/account/account.html.twig admin::compte-utilisateur adresse Adresse Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur changer mon mot de passe - mein Passwort ändern + Mein Passwort ändern web/account/account.html.twig @@ -8473,9 +8521,9 @@ PLZ Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur confirmer la nouvelle adresse email @@ -8497,21 +8545,21 @@ E-Mail Controller/Admin/UserController.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur fax Fax Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur id utilisateur @@ -8522,35 +8570,35 @@ admin::compte-utilisateur identifiant Benutzername Core/Provider/RegistrationServiceProvider.php + web/admin/users.html.twig + web/admin/editusers.html.twig + admin/user/registrations.html.twig api/auth/end_user_authorization.html.twig - web/account/reset-email.html.twig + web/common/dialog_export.html.twig web/account/account.html.twig web/account/account.html.twig - web/admin/editusers.html.twig - web/admin/users.html.twig - admin/user/registrations.html.twig - web/common/dialog_export.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur mot de passe Passwort api/auth/end_user_authorization.html.twig web/setup/step2.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur nom Name Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur nouvelle adresse email @@ -8568,40 +8616,40 @@ Beruf Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur prenom Vorname Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur sexe Anrede Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig + web/account/account.html.twig admin::compte-utilisateur societe - Firma + Unternehmen Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur tel @@ -8612,11 +8660,11 @@ admin::compte-utilisateur telephone Telefon Controller/Admin/UserController.php - web/account/account.html.twig web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur un email de confirmation vient de vous etre envoye. Veuillez suivre les instructions contenue pour continuer @@ -8628,9 +8676,9 @@ Ort Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur: L'email a correctement ete mis a jour @@ -8680,8 +8728,8 @@ admin::compte-utilisateur:ftp: repertoire de destination ftp FTP Zielordner - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Activer le compte FTP @@ -8696,14 +8744,14 @@ admin::compte-utilisateur:ftp: Nombre d'essais max maximale Anzahl von Versuchen - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Utiliser le mode passif Passiv Mode benutzen - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: creer un dossier @@ -8724,25 +8772,25 @@ admin::compte-utilisateur:sexe: madame Frau Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: mademoiselle Fräulein Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: monsieur Herr Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::monitor: bases sur lesquelles l'utilisateur est connecte : @@ -8762,26 +8810,26 @@ admin::monitor: module admin Admin - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module client Client - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module comparateur Lightbox - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig @@ -8792,44 +8840,44 @@ admin::monitor: module production Prod - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module report Report - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module thesaurus Thesaurus - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module upload Upload - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + lib/classes/phrasea.php + web/common/menubar.html.twig admin::monitor: module validation Lightbox - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/common/menubar.html.twig @@ -8865,8 +8913,8 @@ admin::plugins: plugins Plugins - admin/plugins/index.html.twig web/admin/tree.html.twig + admin/plugins/index.html.twig admin::plugins: retrieveConfigurationError @@ -9010,9 +9058,9 @@ Neuer Benutzer web/admin/users.html.twig - + admin::userlist: filterguestuser - admin::userlist: filterguestuser + Gastbenutzer filtern web/admin/users.html.twig @@ -9039,14 +9087,14 @@ admin::utilisateurs: utilisateurs connectes - eingeloggte Benutzer + Eingeloggte Benutzer web/admin/tree.html.twig web/admin/connected-users.html.twig alert Vorsicht - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9057,12 +9105,12 @@ an error occured Ein Fehler ist aufgetreten - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% Ein Fehler ist aufgetreten : %message% - Phrasea/Controller/SetupController.php + Phrasea/Controller/SetupController.php an error occured while exporting records @@ -9087,9 +9135,9 @@ audio Audio - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig avril @@ -9111,17 +9159,17 @@ Jetzt die Datenbank neu indexieren (Dieser Vorgang kann bei vielen Datensätzen / ab 10.000/ Stunden dauern) admin/databox/databox.html.twig - + basket:action:delete record form basket - basket:action:delete record form basket + Vom Sammelkorb entfernen prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + basket:action:delete record form database - basket:action:delete record form database + Datensatz von Datenbank vonlöschen prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig be notified when a document is placed in quarantine @@ -9131,54 +9179,54 @@ 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 admin/collection/suggested_value.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::annuler abbrechen Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php + admin/publications/fiche.html.twig + web/admin/index.html.twig + admin/collection/create.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/link-field-step1.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/export-topics-dialog.html.twig + web/report/all_content.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Youtube/video_modify.html.twig 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 - web/thesaurus/export-text-dialog.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/import-dialog.html.twig - web/thesaurus/link-field-step2.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/link-field-step1.html.twig - web/account/reset-email.html.twig - admin/publications/fiche.html.twig - admin/collection/create.html.twig - web/admin/index.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig - web/report/all_content.html.twig + web/account/reset-email.html.twig boutton::appliquer @@ -9188,16 +9236,16 @@ boutton::chercher suchen - web/prod/index.html.twig + web/admin/users.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig - web/admin/users.html.twig + web/prod/index.html.twig boutton::choisir Auswählen - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig boutton::commander @@ -9247,17 +9295,17 @@ boutton::fermer schliessen Controller/Prod/LanguageController.php - prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig - web/thesaurus/properties.html.twig + web/lightbox/sc_note.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig web/thesaurus/export-topics.html.twig web/thesaurus/link-field-step3.html.twig - web/lightbox/sc_note.html.twig - web/common/dialog_export.html.twig + web/thesaurus/properties.html.twig web/report/all_content.html.twig + prod/actions/Push.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + web/common/dialog_export.html.twig boutton::generer @@ -9267,15 +9315,15 @@ boutton::imprimer Drucken - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig boutton::modifier ändern + web/admin/users.html.twig Bridge/Dailymotion/actionelement.html.twig Bridge/Youtube/actionelement.html.twig Bridge/Flickr/actionelement.html.twig - web/admin/users.html.twig boutton::monter @@ -9291,22 +9339,22 @@ boutton::precedent vorherige + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::rechercher suchen Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9369,7 @@ boutton::remplacer ersetzen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9331,26 +9379,26 @@ boutton::retour Zurück + web/admin/editusers.html.twig + admin/databox/details.html.twig + user/import/file.html.twig + admin/publications/fiche.html.twig + admin/collection/details.html.twig + admin/statusbit/edit.html.twig + web/developers/application.html.twig + web/developers/application_form.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig Bridge/Dailymotion/video_deleteelement.html.twig Bridge/Dailymotion/playlist_createcontainer.html.twig Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Youtube/video_deleteelement.html.twig Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/databox/details.html.twig - admin/collection/details.html.twig - user/import/file.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig - web/developers/application.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig boutton::retry @@ -9360,32 +9408,22 @@ boutton::suivant folgende + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::supprimer Löschen Controller/Prod/LanguageController.php - actions/Bridge/disconnected.html.twig - Bridge/Dailymotion/actionelements.html.twig - Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig - Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig - Bridge/Flickr/actioncontainers.html.twig - prod/results/feeds_entry.html.twig - prod/results/entry.html.twig - web/prod/index.html.twig - web/thesaurus/presets.html.twig + web/admin/subdefs.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/collection/collection.html.twig @@ -9393,11 +9431,21 @@ admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig + web/thesaurus/presets.html.twig + Bridge/Dailymotion/actioncontainers.html.twig + Bridge/Dailymotion/actionelements.html.twig + actions/Bridge/disconnected.html.twig + Bridge/Youtube/actioncontainers.html.twig + Bridge/Youtube/actionelements.html.twig + Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig + prod/results/feeds_entry.html.twig + prod/results/entry.html.twig + web/prod/index.html.twig boutton::telecharger - download + Download web/lightbox/sc_options_box.html.twig web/lightbox/feed_options_box.html.twig web/common/dialog_export.html.twig @@ -9406,9 +9454,9 @@ boutton::telecharger tous les documents Alle Dokumente herunterladen web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig boutton::tester @@ -9420,69 +9468,69 @@ boutton::valider Bestätigen Controller/Prod/LanguageController.php - mobile/lightbox/note_form.html.twig - prod/Baskets/Update.html.twig - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/video_deleteelement.html.twig - Bridge/Dailymotion/playlist_createcontainer.html.twig - Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig - Bridge/Youtube/video_deleteelement.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig - Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig - 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/Story/Reorder.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 - web/thesaurus/link-field-step2.html.twig + web/admin/structure.html.twig + web/admin/setup.html.twig + web/admin/editusers.html.twig + web/admin/dashboard.html.twig + admin/user/registrations.html.twig + user/import/view.html.twig + web/admin/subdefs.html.twig + admin/publications/fiche.html.twig + admin/publications/list.html.twig + admin/collection/collection.html.twig + admin/collection/reorder.html.twig + admin/collection/create.html.twig + admin/collection/suggested_value.html.twig + admin/statusbit/edit.html.twig web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/index.html.twig web/thesaurus/new-term.html.twig web/thesaurus/new-term.html.twig web/thesaurus/link-field-step1.html.twig - web/account/access.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig - web/admin/dashboard.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/publications/list.html.twig - web/admin/setup.html.twig - admin/collection/create.html.twig - admin/collection/reorder.html.twig - admin/collection/collection.html.twig - admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig - web/admin/structure.html.twig - user/import/view.html.twig - admin/user/registrations.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/index.html.twig + web/thesaurus/export-topics-dialog.html.twig web/report/all_content.html.twig + web/developers/application_form.html.twig + prod/Baskets/Update.html.twig + prod/Baskets/Reorder.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Dailymotion/video_deleteelement.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + Bridge/Dailymotion/video_moveinto_playlist.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig + Bridge/Youtube/video_deleteelement.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Youtube/video_moveinto_playlist.html.twig + Bridge/Flickr/photo_deleteelement.html.twig + Bridge/Flickr/photo_moveinto_photoset.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig + web/prod/index.html.twig + web/account/access.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig + mobile/lightbox/note_form.html.twig boutton::vue graphique - grafische Ansicht - admin/collection/suggested_value.html.twig + Grafische Ansicht task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig boutton::vue xml XML Ansicht - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig button::Install @@ -9496,7 +9544,7 @@ cancel - abbrechen + Abbrechen actions/Tools/index.html.twig actions/Tools/index.html.twig actions/Tools/index.html.twig @@ -9524,12 +9572,12 @@ cgus :: accepter - annehmen + Annehmen classes/databox/cgu.php cgus :: refuser - ablehnen + Ablehnen classes/databox/cgu.php @@ -9555,21 +9603,21 @@ charger d'avantage de publications - mehr Veröffentlichungen hochladen + Mehr Veröffentlichungen hochladen prod/results/feeds.html.twig prod/results/feeds.html.twig charger d'avantages de notifications Mehr Benachrichtigungen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir wählen - web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig + web/prod/index.html.twig classe @@ -9596,60 +9644,60 @@ copyClipboardLabel in der Zwischenablage kopieren - prod/results/infos.html.twig prod/Share/record.html.twig prod/Share/record.html.twig prod/Share/record.html.twig + prod/results/infos.html.twig - + create_subdef_button_label - create_subdef_button_label + eine Unterauflösung hinzufügen web/admin/subdefs.html.twig - + create_subdef_modal_access_class - create_subdef_modal_access_class + Unterauflösung Aufstellung web/admin/subdefs.html.twig - + create_subdef_modal_access_class_document - create_subdef_modal_access_class_document + Dokument Rechte web/admin/subdefs.html.twig - + create_subdef_modal_access_class_no_restriction - create_subdef_modal_access_class_no_restriction + Offener Zugang web/admin/subdefs.html.twig - + create_subdef_modal_access_class_preview - create_subdef_modal_access_class_preview + Unterauflösung Rechte web/admin/subdefs.html.twig - + create_subdef_modal_presets - create_subdef_modal_presets + Voreingestellte Einstellungen web/admin/subdefs.html.twig - + create_subdef_modal_preview_mediatype - create_subdef_modal_preview_mediatype + Dateiformat für die Unterauflösung web/admin/subdefs.html.twig - + create_subdef_modal_record_phraseanet_type - create_subdef_modal_record_phraseanet_type + Unterauflösung festgelegt für den Typ web/admin/subdefs.html.twig - + create_subdef_modal_subdefinition_name - create_subdef_modal_subdefinition_name + Unterauflösung Name web/admin/subdefs.html.twig created_on erstellt am - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9667,9 +9715,9 @@ hinzugefügtes Datum SearchEngine/Elastic/ElasticSearchEngine.php - + date de modification - date de modification + Änderungsdatum SearchEngine/Elastic/ElasticSearchEngine.php @@ -9680,7 +9728,7 @@ delete Löschen - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig descendant @@ -9695,10 +9743,10 @@ document Dokument - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + task-manager/task-editor/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - task-manager/task-editor/subdefs.html.twig document original @@ -9709,7 +9757,7 @@ edit Bearbeiten - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig web/account/account.html.twig web/account/account.html.twig web/account/account.html.twig @@ -9752,7 +9800,7 @@ edit::preset:: titre Titel - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9789,7 +9837,7 @@ export:: erreur : aucun document selectionne Fehler: kein ausgewähltes Dokument - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig export:: telechargement @@ -9804,8 +9852,8 @@ export::ftp: reglages manuels - manuelle Einstellungen - classes/set/export.php + Manuelle Einstellungen + classes/set/export.php export::mail: contenu du mail @@ -9846,17 +9894,17 @@ file is not valid Datei ist nicht gültig - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash Flash - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig for the following reasons : %reasons% @@ -9920,6 +9968,17 @@ Änderungen wurden hergestellt admin/databox/databox.html.twig + + help::help-search: OR + OR + prod/results/help.html.twig + + + help::help-search: relaunch search without filter + Filter entfernen und wieder suchen + prod/results/help.html.twig + web/prod/index.html.twig + help::help-section-bullet: check-spelling Vergewissern Sie sich, dass kein Schreibfehler oder Tippfehler vorliegt @@ -9972,15 +10031,15 @@ help::help-section-title: sorry-no-result - Sorry, Ihre Suche liefert keine Ergebnisse + Entschuldigung, Ihre Suche liefert keine Ergebnisse prod/results/help.html.twig image Bild - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig image rotation @@ -9992,45 +10051,50 @@ Bild Werkzeug actions/Tools/index.html.twig - + index::advance_search: disable-facet - index::advance_search: disable-facet - web/prod/index.html.twig + Facetten mit nur einem Ergebnis ausblenden (experimentell) + web/prod/index.html.twig - + index::advance_search: facet - index::advance_search: facet - web/prod/index.html.twig + Einstellungen für Facetten + 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 + Versteckte Facetten + web/prod/index.html.twig index::advance_search: order-by-hits Nach Hits sortieren - web/prod/index.html.twig + web/prod/index.html.twig - + + index::advance_search: order-by-hits-asc + Nach Vorkommen asc + web/prod/index.html.twig + + index:advanced-preferences:: use truncation - index:advanced-preferences:: use truncation - web/prod/index.html.twig + Trunkierung aktivieren + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10039,7 +10103,7 @@ janvier - Jänner + Januar classes/module/report.php @@ -10062,11 +10126,79 @@ Die Dienstleistung wird in einige Minuten wieder verfügbar sein. actions/Bridge/deactivated.html.twig + + lightbox::See_less_feedback + Weniger Feedback sehen + web/lightbox/index.html.twig + + + lightbox::See_more_feedback + Mehr Feedback sehen + web/lightbox/index.html.twig + + + lightbox::list + Miniaturansicht + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Übersicht + web/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/validate.html.twig + + + lightbox::see_less_basket + Weniger Sammelkörbe sehen + web/lightbox/index.html.twig + + + lightbox::see_more_basket + Weitere Sammelkörbe sehen + web/lightbox/index.html.twig + + + lightbox:feedback:sendreport:warnwindows:cancel + Sendung abbrechen und Feedback fortsetzen + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:message + Zusammenfassung der Feedback Auswahlmöglichkeiten + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_approved + genehmigt + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_rejected + abgelehnt + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_unexpressed + unausgesprochen + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:title + Feedback Übersicht web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:validate + Bericht Sendung bestätigen + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig login:: Changer mon adresse email @@ -10086,9 +10218,10 @@ login:: Mon compte Mein Benutzerkonto + web/common/menubar.html.twig + web/common/menubar.html.twig web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + mobile/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 @@ -10103,8 +10236,8 @@ login::erreur: Erreur d'authentification Anmeldefehler - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php login::erreur: No available connection - Please contact sys-admin @@ -10124,8 +10257,8 @@ login::notification: Mise a jour du mot de passe avec succes erfolgreiche Passwort Aktualisierung - Controller/Root/LoginController.php Controller/Root/AccountController.php + Controller/Root/LoginController.php login::notification: demande de confirmation par mail envoyee @@ -10147,8 +10280,8 @@ login::register: sujet email : confirmation de votre adresse email E-Mail Adressen Bestätigung - Notification/Mail/MailRequestEmailUpdate.php Notification/Mail/MailRequestEmailConfirmation.php + Notification/Mail/MailRequestEmailUpdate.php login::register:email: Voici un compte rendu du traitement de vos demandes d'acces : @@ -10214,15 +10347,15 @@ no Nein - web/account/sessions.html.twig - web/admin/subdefs.html.twig user/import/view.html.twig + web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig no image selected Kein Bild wurde ausgewählt - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10235,9 +10368,9 @@ notice Beschreibung web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig nouveau @@ -10256,251 +10389,251 @@ or - Or + Oder Controller/Prod/LanguageController.php - + order-manager::mail: your-order-of - order-manager::mail: your-order-of + Ihre Bestellung von : prod/orders/order_item.html.twig - + order-manager::order-item: accepted-item - order-manager::order-item: accepted-item + akzeptiert prod/orders/order_item.html.twig - + order-manager::order-item: address - order-manager::order-item: address + Adresse prod/orders/order_item.html.twig - + order-manager::order-item: already-validated - order-manager::order-item: already-validated + gesendet prod/orders/order_item.html.twig - + order-manager::order-item: by - order-manager::order-item: by + von prod/orders/order_item.html.twig - + order-manager::order-item: company - order-manager::order-item: company + Unternehmen prod/orders/order_item.html.twig - + order-manager::order-item: country - order-manager::order-item: country + Land prod/orders/order_item.html.twig - + order-manager::order-item: create - order-manager::order-item: create + OK prod/orders/order_item.html.twig - + order-manager::order-item: create-basket - order-manager::order-item: create-basket + Neuer Sammelkorb prod/orders/order_item.html.twig - + order-manager::order-item: for-non-sent-items - order-manager::order-item: for-non-sent-items + Für die Dokumente, die nicht gesendet wurden prod/orders/order_item.html.twig - + order-manager::order-item: information - order-manager::order-item: information + Information prod/orders/order_item.html.twig - + order-manager::order-item: item - order-manager::order-item: item + Dokument prod/orders/order_item.html.twig - + order-manager::order-item: items-already-sent - order-manager::order-item: items-already-sent + Dokument(e) schon gesendet prod/orders/order_item.html.twig - + order-manager::order-item: items-waiting-validation - order-manager::order-item: items-waiting-validation + Dokumente, die auf eine Bestätigung warten prod/orders/order_item.html.twig - + order-manager::order-item: less - order-manager::order-item: less + weniger sehen prod/orders/order_item.html.twig - + order-manager::order-item: more - order-manager::order-item: more + mehr sehen prod/orders/order_item.html.twig - + order-manager::order-item: number - order-manager::order-item: number + Nummer prod/orders/order_item.html.twig - + order-manager::order-item: of - order-manager::order-item: of + Von prod/orders/order_item.html.twig prod/orders/order_item.html.twig - + order-manager::order-item: refused-previously - order-manager::order-item: refused-previously + zuvor abgelehnt prod/orders/order_item.html.twig prod/orders/order_item.html.twig - + order-manager::order-item: rejected-item - order-manager::order-item: rejected-item + abgelehnt prod/orders/order_item.html.twig - + order-manager::order-item: reset - order-manager::order-item: reset + zurücksetzen prod/orders/order_item.html.twig prod/orders/order_item.html.twig prod/orders/order_item.html.twig - + order-manager::order-item: select-all - order-manager::order-item: select-all + Alle auswählen prod/orders/order_item.html.twig - + order-manager::order-item: selected-item - order-manager::order-item: selected-item + ausgewählt prod/orders/order_item.html.twig - + order-manager::order-item: selected-records - order-manager::order-item: selected-records + ausgewählte Datensätze prod/orders/order_item.html.twig - + order-manager::order-item: submit - order-manager::order-item: submit + Senden prod/orders/order_item.html.twig - + order-manager::order-item: tel - order-manager::order-item: tel + Telefon prod/orders/order_item.html.twig - + order-manager::order-item: validate - order-manager::order-item: validate + bestätigen prod/orders/order_item.html.twig - + order-manager::order-item: warning-message-close - order-manager::order-item: warning-message-close + Ausstenhende Auswahl abbrechen? prod/orders/order_item.html.twig - + order-manager::order-item: with-denied-items - order-manager::order-item: with-denied-items + Mit der abgelehnten Datensätzen prod/orders/order_item.html.twig - + order-manager::order-item: with-selected-items - order-manager::order-item: with-selected-items + Mit der Auswahl prod/orders/order_item.html.twig - + order-manager::order-item: with-validated-items - order-manager::order-item: with-validated-items + Mit gesendete(r) Dokument(en) prod/orders/order_item.html.twig - + order-manager::order-item: you-have-denied - order-manager::order-item: you-have-denied + Dokument(e) abgelehnt prod/orders/order_item.html.twig - + order-manager::order-item: you-have-validated - order-manager::order-item: you-have-validated + Dokument(e) gesendet prod/orders/order_item.html.twig - + order-manager::order-item:Create-Basket - order-manager::order-item:Create-Basket + Sammelkorb erstellen prod/orders/order_item.html.twig - + order-manager::order-item:Validation - order-manager::order-item:Validation + Bestellübersicht prod/orders/order_item.html.twig - + order-manager::order-list: after - order-manager::order-list: after + Bestellt nach : prod/orders/order_box.html.twig - + order-manager::order-list: apply - order-manager::order-list: apply + Filter anwenden prod/orders/order_box.html.twig - + order-manager::order-list: before - order-manager::order-list: before + Bestellt vor: prod/orders/order_box.html.twig - + order-manager::order-list: last-month - order-manager::order-list: last-month + Letzten Monat prod/orders/order_box.html.twig - + order-manager::order-list: last-week - order-manager::order-list: last-week + Letzte Woche prod/orders/order_box.html.twig - + order-manager::order-list: no-filter - order-manager::order-list: no-filter + Kein Filter prod/orders/order_box.html.twig prod/orders/order_box.html.twig - + order-manager::order-list: no-result - order-manager::order-list: no-result + Keine Bestellung im Moment sichtbar prod/orders/order_box.html.twig prod/orders/order_box.html.twig - + order-manager::order-list: order-id - order-manager::order-list: order-id + Bestellung Nummer prod/orders/order_item.html.twig prod/orders/order_item.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig - + order-manager::order-list: pending - order-manager::order-list: pending + Bestellung zu verarbeiten prod/orders/order_box.html.twig - + order-manager::order-list: processed - order-manager::order-list: processed + Verarbeitet prod/orders/order_box.html.twig - + order-manager::order-list: this-week - order-manager::order-list: this-week + Diese Woche prod/orders/order_box.html.twig - + order-manager::order-list: treated-documents - order-manager::order-list: treated-documents + Verarbeitete(r) Datensatz(¨e) prod/orders/order_item.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig @@ -10540,17 +10673,17 @@ panier:: ordre Validation ascendante gut bewertet - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre Validation descendante weniger gut bewertet - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre du panier Sammelkorb Reihenfolge - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: renommer le panier @@ -10575,7 +10708,7 @@ paniers:: panier recu de %pusher% Sammelkorb von %pusher% bekommen - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ? @@ -10585,8 +10718,8 @@ paniers::description du nouveau panier Beschreibung - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig par %user_name% @@ -10598,9 +10731,9 @@ pro Monat web/admin/editusers_quotas.html.twig - + personalize logo - personalize logo + Logo anpassen Form/Configuration/PersonalisationLogoFormType.php @@ -10636,7 +10769,7 @@ phraseanet:: Preferences Einstellungen - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10646,23 +10779,33 @@ 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 Adresse - web/setup/step2.html.twig - web/account/account.html.twig - admin/collection/collection.html.twig web/admin/connected-users.html.twig + admin/collection/collection.html.twig + web/setup/step2.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig phraseanet:: aide Hilfe - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: basket feedback + Sammelkorb Feedback + prod/actions/printer_default.html.twig + + + phraseanet:: baskets + Sammelkörbe + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10684,8 +10827,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,14 +10856,14 @@ phraseanet:: plugin.workzone Plugin WorkZone - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port Schnittstelle - web/setup/step2.html.twig web/admin/databases.html.twig web/admin/databases.html.twig + web/setup/step2.html.twig phraseanet:: prereglages @@ -10730,13 +10873,13 @@ 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/printer_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/printer_default.html.twig phraseanet:: propositions @@ -10747,8 +10890,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,13 +10902,13 @@ phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig - web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/index.html.twig + prod/actions/edit_default.html.twig + web/prod/tab_headers.html.twig phraseanet:: tri @@ -10775,17 +10918,17 @@ phraseanet:: tri par date nach Datum sortieren - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: tri par nom alphabetische Sortierung - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -10806,7 +10949,7 @@ phraseanet::account The account has been deleted Ihr Benutzerkonto wurde gelöscht - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10852,9 +10995,9 @@ phraseanet::chargement Bitte warten... Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig - web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig + web/thesaurus/thesaurus.html.twig + prod/actions/edit_default.html.twig phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible @@ -10864,7 +11007,7 @@ phraseanet::erreur: Une erreur est survenue, si ce probleme persiste, contactez le support technique - Leider ist ein Fehler aufgetreten. Sollte sich dieser Fehler wiederholen kontaktieren Sie bitte den Administrator + Leider ist ein Fehler aufgetreten. Sollte sich dieser Fehler wiederholen, kontaktieren Sie bitte den Administrator Controller/Prod/LanguageController.php web/admin/index.html.twig @@ -10872,15 +11015,20 @@ phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier Sie sind nun abgemeldet. Bitte loggen Sie sich wieder ein Controller/Prod/LanguageController.php - web/thesaurus/thesaurus.html.twig web/admin/index.html.twig + web/thesaurus/thesaurus.html.twig phraseanet::erreur: echec du serveur de mail 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 + Fehler beim Widerruf von Nutzerrechten + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10919,7 +11067,7 @@ phraseanet::recherche avancee - erweiterte Suche + Erweiterte Suche Controller/Prod/LanguageController.php @@ -10935,42 +11083,42 @@ phraseanet::temps:: a l'instant gerade - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: hier gestern - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% heures vor %quantity% Stunde - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% minutes vor %quantity% Minuten - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une heure vor einer Stunde - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une minute vor einer Minute - lib/classes/phraseadate.php + lib/classes/phraseadate.php 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 +11129,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 +11139,7 @@ phraseanet::type:: reportages Berichte - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11016,53 +11164,53 @@ 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 stoppen prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig preview:: demarrer le diaporama Dia-Schau prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig - + preview::date - preview::date - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + Datum + 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 + Anzahl von Downloads + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig preview::statistiques de telechargement - Herunterladen Statistiken + Download Statistiken prod/preview/popularity.html.twig @@ -11070,11 +11218,11 @@ Ansicht Statistiken prod/preview/popularity.html.twig - + preview::visualisation - preview::visualisation - prod/preview/popularity.html.twig - prod/preview/popularity.html.twig + Anzahl von Ansichten + prod/preview/popularity.html.twig + prod/preview/popularity.html.twig previewLinkLabel @@ -11083,40 +11231,135 @@ prod/Share/record.html.twig prod/Share/record.html.twig - + + print:: basket feedback + Feedback Bericht mit Beschreibung + prod/actions/printer_default.html.twig + + + print:: basket feedback only + Feedback Bericht + prod/actions/printer_default.html.twig + + print:: description - print:: description - prod/actions/printer_default.html.twig + Bildunterschrift + prod/actions/printer_default.html.twig print:: image de choix et description Voransicht und Bildunterschrift - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix et description avec planche contact Voransicht und Bildunterschrift mit Mosaikansicht - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix seulement Voransicht - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: imagette Miniaturansicht - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: liste d'imagettes Miniaturansichten Liste - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: planche contact (mosaique) Mosaikansicht - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig + + + print_feedback:: Document generated on : + Drucken erzeugt am + Out/Module/PDFRecords.php + + + print_feedback:: Feedback active + Feedback ist aktiviert + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expired + Feedback ist abgelaufen + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expiring on : + Erlischt am + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated by : + Feedback gesendet von + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated on : + Feedback Beginn am + Out/Module/PDFRecords.php + + + print_feedback:: Feedback on basket %name% + Feedback auf Sammelkorb %name% + Out/Module/PDFRecords.php + + + print_feedback:: Non + Nein + Out/Module/PDFRecords.php + + + print_feedback:: Oui + Ja + Out/Module/PDFRecords.php + + + print_feedback:: Participants : + Teilnehmer : + Out/Module/PDFRecords.php + + + print_feedback:: Votes : + Zustimmung : + Out/Module/PDFRecords.php + + + print_feedback:: base name: + Datenbank + Out/Module/PDFRecords.php + + + print_feedback:: document Uuid: + Uuid Dokument + Out/Module/PDFRecords.php + + + print_feedback:: non voté + unausgedrückt + Out/Module/PDFRecords.php + + + print_feedback:: originale filename: + Originale Dateiname + Out/Module/PDFRecords.php + + + print_feedback:: record id: + Record id + Out/Module/PDFRecords.php + + + print_feedback:: record title: + Titel + Out/Module/PDFRecords.php prive @@ -11133,7 +11376,7 @@ processing verarbeitend - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11150,57 +11393,83 @@ 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 + Suchen Sie den Inhalt der Felder + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) Möchten Sie auch die Dokumente, die mit diesen Berichten verknüpft sind, verschieben? prod/actions/collection_default.html.twig + + prod::edit: Confirmation Edition latitude longitude + Länge und Breite Bestätigung + prod/actions/edit_default.html.twig + 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::edit:confirm: Edition latitude longitude + Möchten Sie die Felder Länge und Breite mit den Daten von Geoname Service aufstellen? +Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben + prod/actions/edit_default.html.twig + + + prod::edit:confirm: No + Nein, aktuelle Werte behalten + prod/actions/edit_default.html.twig + + + prod::edit:confirm: Yes + Ja, Geolokalisierung aktualisieren + prod/actions/edit_default.html.twig + + + prod::edit:story select all + Alle Dokumente dem Bericht auswahlen + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' - heterogene Werte, bitte wählen Sie "ersetzen", "hinzufügen" oder "abbrechen" + Heterogene Werte, bitte wählen Sie "ersetzen", "hinzufügen" oder "abbrechen" Controller/Prod/LanguageController.php 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,77 +11484,87 @@ 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 Datenbanken - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:collection_label Kollektionen - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:doctype_label Dokumenttyp - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php + + + prod::feedback:feedback_set_title + Feedback Name + prod/templates/push.html.twig + + + prod::push:push_set_title + Name der Push Sammelkorb + prod/templates/push.html.twig prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee. @@ -11304,12 +11583,12 @@ prod::thesaurusTab:cmenu:Remplacer par... - ersetzen durch + Ersetzen durch web/prod/index.html.twig - + prod::thesaurusTab:dlg:%number% record(s) updated - prod::thesaurusTab:dlg:%number% record(s) updated + %number% Datensatz(¨e) aktualisiert Controller/Thesaurus/ThesaurusXmlHttpController.php @@ -11317,9 +11596,9 @@ Annahme... web/prod/index.html.twig - + prod::thesaurusTab:dlg:Remplacement du candidat "%(from)s" par "%(to)s" - prod::thesaurusTab:dlg:Remplacement du candidat "%(from)s" par "%(to)s" + Termkandidat "%(from)s" durch "%(to)s" ersetzen? web/prod/index.html.twig @@ -11342,9 +11621,9 @@ die %d möglichen Begriffe annehmen? web/prod/index.html.twig - + prod::thesaurusTab:dlg:remplacer le terme "%s" des fiches par : - prod::thesaurusTab:dlg:remplacer le terme "%s" des fiches par : + In Beschreibungen, Begriff "%s" ersetzen durch : web/prod/index.html.twig @@ -11362,9 +11641,9 @@ %d Begriffe von der Beschreibung(en) löschen? web/prod/index.html.twig - + prod::thesaurusTab:dlg:too many (%number%) records to update (limit=%maximum%) - prod::thesaurusTab:dlg:too many (%number%) records to update (limit=%maximum%) + Zuviele (%number%) Datensätze zu aktualisieren (limit=%maximum%) Controller/Thesaurus/ThesaurusXmlHttpController.php @@ -11404,90 +11683,116 @@ prod::thesaurusTab:wizard:remplacer par le terme - ersetzen durch den Begriff + Durch den Begriff ersetzen web/prod/tab_thesaurus.html.twig - + prod::toolbar : video editor - prod::toolbar : video editor - web/prod/toolbar.html.twig + Video Tools + web/prod/toolbar.html.twig prod::tools: document Dokument - Controller/Prod/ToolsController.php Controller/Prod/ShareController.php - - - prod:app trash: also-move-record - Datensätze auch in den Papierkorb verschieben, die mit Berichten verknüpft sind - prod/actions/delete_records_confirm.html.twig - - - prod:app trash: record-delete - Datensatz (¨e) dauerhaft gelöscht! - prod/actions/delete_records_confirm.html.twig + Controller/Prod/ToolsController.php prod:app trash: record-move-to-trash Datensatz (¨e) in den Papierkorb verschoben - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig + + + prod:app trash: record-to-delete + prod:app trash: record-to-delete + prod/actions/delete_records_confirm_form.html.twig prod:app trash: title-trash Datensatz (¨e) In den Papierkorb verschieben Controller/Prod/LanguageController.php - + prod:edit: chapters - prod:edit: chapters - Controller/Prod/LanguageController.php - - - prod:edit: no overlaps for chapters - prod:edit: no overlaps for chapters + Kapitel Bearbeitung Controller/Prod/LanguageController.php - - prod:edit: only a media of type video can be edited - prod:edit: only a media of type video can be edited - Controller/Prod/LanguageController.php - - - prod:edit: suggested_values - prod:edit: suggested_values + + prod:edit: no overlaps for chapters + Keine Überschneidung für die Kapitel Controller/Prod/LanguageController.php - - prod:edit: video-editor - prod:edit: video-editor - Controller/Prod/LanguageController.php + + prod:edit: only a media of type video can be edited + Nur eine Video kann bearbeitet sein + Controller/Prod/LanguageController.php - - prod:mapboxgl: description notice - prod:mapboxgl: description notice - Controller/Prod/LanguageController.php - - - prod:mapboxgl: title map dialog - prod:mapboxgl: title map dialog - Controller/Prod/LanguageController.php - - - prod:mapboxgl: title notice - prod:mapboxgl: title notice + + prod:edit: suggested_values + Vorgeschlagene Werte Controller/Prod/LanguageController.php - - prod:push: create new user - prod:push: create new user + + prod:edit: video-editor + Video Tools + Controller/Prod/LanguageController.php + + + prod:mapboxgl: description notice + Machen Sie einen Rechtsklick, um einen Suchbereich zu hinzufügen. Klicken Sie auf den Bereich zu entfernen. Benutzen Sie den Griff, um die Grösse zu ändern oder den Bereich zu verschieben. Es ist auch möglich, mehrere Suchbereiche auszuwählen. + Controller/Prod/LanguageController.php + + + prod:mapboxgl: title map dialog + Lokalisierung Suche Controller/Prod/LanguageController.php - + + prod:mapboxgl: title notice + Suchbereiche Funktionen + Controller/Prod/LanguageController.php + + + prod:push: create new user + Einen neuen Benutzer erstellen + Controller/Prod/LanguageController.php + + prod:push: delete selection - prod:push: delete selection + Auswahl entfernen prod/actions/Push.html.twig + + prod:workzone:basket:creation-date + Erstellungsdatum + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + Feedback Schlusstermin aktualisiert + prod/WorkZone/Basket.html.twig + + + prod:workzone:facetstab:search_and_facets_sort_options + Facettensortierung + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + In die Ergebnisse aufnehmen + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + Ergebnnisse auschliessen + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + Filter entfernen + web/prod/index.html.twig + public öffentlich @@ -11499,32 +11804,32 @@ publication : autheur Autor - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : email autheur Autor E-Mail - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : sous titre Untertitel - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : titre Titel - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications. Hier finden Sie Ihr eigenes RSS Feed. Dank des RSS werden Sie über neue Veröffentlichungen automatisch informiert - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications:: s'abonner aux publications @@ -11534,15 +11839,15 @@ publications::Ne le partagez pas, il est strictement confidentiel - Dieses RSS nicht weiterleiten - es istvertraulich - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Dieses RSS nicht weiterleiten - es ist vertraulich + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications::votre rss personnel Ihr eigenes RSS - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php push::mail:: Rapport de validation de %user% pour %title% @@ -11562,19 +11867,19 @@ 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 + Diese Hilfe nicht mehr anzeigen + web/prod/index.html.twig rafraichir - aktualisieren - prod/WorkZone/Story.html.twig + Aktualisieren prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Story.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -11588,39 +11893,39 @@ Neuerstellung von Unterauflösungen actions/Tools/index.html.twig - + registration:collection.accepted - registration:collection.accepted + genehmigt web/account/access.html.twig - + registration:collection.active - registration:collection.active + aktiv web/account/access.html.twig - + registration:collection.in-time - registration:collection.in-time + Zeitlich begrentzer Zugang (aktiv) web/account/access.html.twig - + registration:collection.out-dated - registration:collection.out-dated + Datum überschritten web/account/access.html.twig - + registration:collection.pending - registration:collection.pending + Bevorstehend web/account/access.html.twig - + registration:collection.registrable - registration:collection.registrable + Einen Antrag stellen web/account/access.html.twig - + registration:collection.rejected - registration:collection.rejected + abgelehnt web/account/access.html.twig @@ -11636,17 +11941,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,16 +11973,16 @@ reponses:: taille des images : Miniaturansichtengrösse - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre ohne Titel - classes/record/adapter.php + classes/record/adapter.php - + report:: 1 - Periode - Zeit + Zeit web/report/form_date_and_base.html.twig @@ -11690,9 +11995,9 @@ Kollektionen web/report/form_date_and_base.html.twig - + report:: 3 - Type de report - Bericht Typ + Bericht Typ web/report/report_layout_child.html.twig web/report/report_layout_child.html.twig @@ -11720,12 +12025,12 @@ report:: Detail des connexions - Verbindungsdetails + Verbindungs-Detail module/report/activity.php report:: Detail des telechargements - Downloaddetails + Download Detail module/report/activity.php @@ -11809,7 +12114,7 @@ report:: document ajoute - hinzugefügte Dokumente + Hinzugefügte Dokumente module/report/add.php @@ -11856,21 +12161,21 @@ report:: non-renseigne nicht ausgefüllt - module/report/add.php - module/report/question.php - module/report/download.php + module/report/validate.php module/report/activity.php module/report/activity.php module/report/activity.php + module/report/question.php + module/report/edit.php module/report/connexion.php module/report/connexion.php module/report/connexion.php - module/report/push.php - module/report/sent.php - module/report/validate.php + module/report/add.php module/report/nav.php - module/report/edit.php + module/report/download.php + module/report/sent.php module/report/filter.php + module/report/push.php report:: page d'accueil @@ -11886,7 +12191,7 @@ report:: pays - Staat + Land classes/module/report.php @@ -11960,7 +12265,7 @@ report:: type - Bildschirmtyp + Typ classes/module/report.php @@ -11975,7 +12280,7 @@ report:: validated documents - Bestätigte Dokumente + Validierte Dokumente module/report/validate.php @@ -11997,7 +12302,7 @@ report::Demande de validation vers %n_user% utilisateurs depuis lapplication box %appbox% - Validierung Abfrage zu %n_user% Benutzer ab ApplicationBox %appbox% + Feedback Abfrage zu %n_user% Benutzer ab ApplicationBox %appbox% prod/preview/short_history.html.twig @@ -12104,8 +12409,8 @@ reportage Bericht - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12122,20 +12427,20 @@ 90° im Uhrzeigersinn drehen actions/Tools/index.html.twig - + same UUID - same UUID - Border/Checker/UUID.php + dieselbe UUID + Border/Checker/UUID.php - + same checksum - same checksum - Border/Checker/Sha256.php + gleiche Prüfsumme + Border/Checker/Sha256.php - + same filename - same filename - Border/Checker/Filename.php + gleiche Dateiname + Border/Checker/Filename.php scheduled status @@ -12145,11 +12450,11 @@ screenshot video Video Screenshot - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user - Einen user auswählen + Einen Benutzer auswählen web/admin/users.html.twig @@ -12169,7 +12474,7 @@ setup:: Reinitialisation des droits admins - die Rechte von Administratoren zurücksetzen + Administratoren Rechte zurücksetzen web/admin/dashboard.html.twig @@ -12304,9 +12609,9 @@ Status Suche in der erweiterten Suche aktivieren admin/statusbit/edit.html.twig - + subdef.orderable - subdef.orderable + Kann bestellt werden web/admin/subdefs.html.twig @@ -12337,21 +12642,21 @@ task::archive:Archivage Archivierung auf Kollektion - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:Archiving files found into a 'hotfolder' gefundenen Dateien nach einem Hotfolder archivieren - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:archivage sur base/collection/ Archivierung zur Datenbank/Kollektion task-manager/task-editor/archive.html.twig - + task::archive:copier les fichiers '.phrasea.xml' et '.grouping.xml' dans _archived - Copy '.phrasea.xml' and 'groupin.xml' files to _archive + Copy '.phrasea.xml' and 'groupin.xml' files to _archive task-manager/task-editor/archive.html.twig @@ -12408,8 +12713,8 @@ task::ftp:Status about your FTP transfert from %application% to %server% Zustand von FTP Übertragung von %application% zum Server %server% - Notification/Mail/MailSuccessFTPSender.php Notification/Mail/MailSuccessFTPReceiver.php + Notification/Mail/MailSuccessFTPSender.php task::ftp:TENTATIVE no %number%, %date% @@ -12454,8 +12759,8 @@ task::ftp:proxy Proxy - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy password @@ -12465,8 +12770,8 @@ task::ftp:proxy port Proxy Port - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy user @@ -12561,8 +12866,8 @@ thesaurus:: Lier la branche de thesaurus die Verzweigung verbinden? - web/thesaurus/link-field-step2.html.twig web/thesaurus/link-field-step3.html.twig + web/thesaurus/link-field-step2.html.twig thesaurus:: Lier la branche de thesaurus au champ @@ -12577,8 +12882,8 @@ thesaurus:: Nouveau synonyme Neuer Synonym - web/thesaurus/thesaurus.html.twig web/thesaurus/new-term.html.twig + web/thesaurus/thesaurus.html.twig thesaurus:: Nouveau terme @@ -12675,7 +12980,7 @@ thesaurus:: est candidat en provenance des champs mais ne peut etre accepte a cet emplacement du thesaurus - ist ein möglicher Begriff aus Felder Ursprung aber kann nicht in diesem Ort des Thesaurus akzeptiert werden + ist ein möglicher Begriff aus Felder Ursprung, aber kann an dieser Stelle im Thesaurus nicht akzeptiert werden web/thesaurus/new-term.html.twig @@ -12723,8 +13028,8 @@ thesaurus:: export en topics Themen - web/thesaurus/export-topics-dialog.html.twig web/thesaurus/export-topics.html.twig + web/thesaurus/export-topics-dialog.html.twig thesaurus:: exporter @@ -12858,7 +13163,7 @@ thesaurus:: recherche fulltext - volltext + volltext Suche web/thesaurus/export-topics-dialog.html.twig @@ -12879,7 +13184,7 @@ thesaurus:: reindexer la base apres l'import - wieder indexieren nach dem Import + nach dem Import wieder indexieren web/thesaurus/import-dialog.html.twig @@ -13009,14 +13314,14 @@ thesaurus::menu: supprimer Löschen - web/thesaurus/properties.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig + web/thesaurus/properties.html.twig thumbnail validation Miniaturansicht Bestätigung - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13049,10 +13354,10 @@ Ihre Version ist aktuell web/admin/databases.html.twig - + updated_on - updated_on - web/prod/index.html.twig + aktualisiert am + web/prod/index.html.twig upload:: Destination (collection) : @@ -13064,6 +13369,7 @@ upload:: Status : Status prod/upload/upload.html.twig + prod/upload/lazaret.html.twig prod/upload/upload-flash.html.twig @@ -13074,7 +13380,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 @@ -13083,24 +13389,24 @@ validation:: NON Nein - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: OUI Ja - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: editer ma note mein Kommentar verändern - mobile/lightbox/basket_element.html.twig + mobile/lightbox/basket_element.html.twig validation:: note Kommentare - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13110,10 +13416,10 @@ validation::envoyer mon rapport Meinen Bericht senden - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig version @@ -13128,12 +13434,12 @@ video Video - web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig - + video range extractor - video range extractor + Kapitelunterteilung actions/Tools/videoEditor.html.twig @@ -13141,12 +13447,144 @@ Video Werkzeug actions/Tools/videoEditor.html.twig + + workzone:datepicker:april + workzone:datepicker:april + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:august + workzone:datepicker:august + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:closeText + workzone:datepicker:closeText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:currentText + workzone:datepicker:currentText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:december + workzone:datepicker:december + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:february + workzone:datepicker:february + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:friday + workzone:datepicker:friday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:january + workzone:datepicker:january + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:july + workzone:datepicker:july + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:june + workzone:datepicker:june + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:march + workzone:datepicker:march + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:may + workzone:datepicker:may + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:monday + workzone:datepicker:monday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:nextText + workzone:datepicker:nextText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:november + workzone:datepicker:november + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:october + workzone:datepicker:october + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:prevText + workzone:datepicker:prevText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:saturday + workzone:datepicker:saturday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:september + workzone:datepicker:september + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:sunday + workzone:datepicker:sunday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:thursday + workzone:datepicker:thursday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:tuesday + workzone:datepicker:tuesday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:wednesday + workzone:datepicker:wednesday + prod/WorkZone/Basket.html.twig + + + workzone:feedback:expiration-closed + Feedback geschlossen am + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + Feedback geöffnet bis zum + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:update + Validieren + prod/WorkZone/Basket.html.twig + yes Ja - web/account/sessions.html.twig web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig you are about to change the representation thumbnail of your video diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 2e81315b7c..f3ea9f0ebc 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.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. @@ -24,7 +24,14 @@ url through a forwarded mail for example. 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 + 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 @@ -105,15 +112,14 @@ %Total% results %Total% results - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents %basket_length% document(s) - mobile/lightbox/validate.html.twig - web/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/validate.html.twig %countable% documents can not be modified. @@ -186,8 +192,9 @@ %nb_records% records %nb_records% records + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -206,7 +213,7 @@ selectionnes]]> selected]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -247,7 +254,7 @@ %quantity% records added %quantity% records added Controller/Prod/BasketController.php - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php %quantity% records moved @@ -272,7 +279,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 +294,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 +349,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 @@ -377,17 +384,17 @@ (validation) a envoyer Feedback request to send - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) envoyee Feedback request sent. - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) session terminee Feedback session ended. - web/lightbox/index.html.twig + web/lightbox/index.html.twig *Phraseanet Navigator* is a smartphone application that allow user to connect on this instance @@ -402,8 +409,7 @@ 1 result 1 result - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -448,8 +454,8 @@ A To - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig A document has been quarantined @@ -469,22 +475,22 @@ A file with the same UUID already exists in database A file with the same UUID already exists in the database - Border/Checker/UUID.php + Border/Checker/UUID.php A file with the same checksum already exists in database A file with the same checksum already exists in the database - Border/Checker/Sha256.php + Border/Checker/Sha256.php A file with the same filename already exists in database A file with the same filename already exists in the database - Border/Checker/Filename.php + Border/Checker/Filename.php 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 @@ -544,8 +550,8 @@ Access Access - actions/Feedback/List-Share.html.twig web/admin/editusers.html.twig + actions/Feedback/List-Share.html.twig Access code @@ -612,7 +618,7 @@ Accuse de reception Acknowledge receipt Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Accuse de reception indisponible, vous n'avez pas declare d'adresse email @@ -622,22 +628,22 @@ Action Forbidden : You are not the publisher Forbidden: You are not the publisher - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php Actions Actions - Bridge/Dailymotion/actionelements.html.twig Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig + Bridge/Dailymotion/actionelements.html.twig Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig + Bridge/Youtube/actionelements.html.twig Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig Activate highlight Activate highlight on full text (experimental). Impact the time performance of search. - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -649,8 +655,8 @@ Activer Activate admin/databox/databox.html.twig - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Activer le grant_type de type password pour votre application @@ -671,9 +677,9 @@ Add Add prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig - prod/User/Add.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/User/Add.html.twig Add a @@ -756,7 +762,8 @@ Advanced Search Advanced search - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -771,52 +778,57 @@ Affichage Display - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Display On startup - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Show Caption - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Show Title - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Show Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Display an Icon - web/prod/index.html.twig + web/prod/index.html.twig After metadata After captions - web/prod/index.html.twig + web/prod/index.html.twig + + + Aggregated + Aggregated + admin/search-engine/general-aggregation.html.twig Aggregation 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 @@ -828,9 +840,9 @@ Ajouter ma selection courrante Add my current selection + prod/orders/order_item.html.twig prod/Baskets/Create.html.twig prod/Story/Create.html.twig - prod/orders/order_item.html.twig Ajouter un nouvel utilisateur @@ -851,6 +863,7 @@ All All Form/Configuration/CustomLinkFormType.php + task-manager/task-editor/subdefs.html.twig WorkZone/Browser/Browser.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig @@ -858,17 +871,11 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - task-manager/task-editor/subdefs.html.twig All these conditions All these conditions - web/prod/index.html.twig - - - All values - All values - admin/fields/templates.html.twig + web/prod/index.html.twig Aller a @@ -878,7 +885,7 @@ Allow the website to be indexed by search engines like Google Allow search engines (such as Google) indexation - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Allowed @@ -933,36 +940,29 @@ Alphabetic asc Alphabetic asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. Also delete records that rely on stories. - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm.html.twig An error occured An error occurred - Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxesController.php + Controller/Prod/MoveCollectionController.php + Controller/Prod/BasketController.php + Controller/Prod/ToolsController.php + Controller/Prod/LazaretController.php + Controller/Prod/StoryController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php @@ -974,17 +974,30 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php - Controller/Prod/StoryController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxesController.php + Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php web/admin/users.html.twig - admin/databox/databox.html.twig web/admin/databases.html.twig + admin/databox/databox.html.twig + task-manager/task-editor/task.html.twig admin/collection/collection.html.twig 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 @@ -1020,13 +1033,14 @@ An error occurred An error occurred - Order/Controller/ProdOrderController.php - Controller/Admin/DataboxController.php - Controller/Admin/SearchEngineController.php - Controller/Admin/CollectionController.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Admin/SearchEngineController.php + Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Order/Controller/ProdOrderController.php web/admin/statusbit.html.twig @@ -1057,7 +1071,7 @@ Aperture Aperture - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -1118,8 +1132,8 @@ Apply a template Apply a template - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Apply changes @@ -1145,8 +1159,8 @@ Archive Archive - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Are you sure you want delete users rights ? @@ -1198,7 +1212,7 @@ Aucun None - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1213,7 +1227,7 @@ Aucun statut editable No editable status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1254,7 +1268,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1270,7 +1284,7 @@ Audio Samplerate Audio Samplerate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Audio channel @@ -1280,7 +1294,7 @@ Audio codec Audio codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php AudioSamplerate @@ -1356,20 +1370,20 @@ Autorisation d'acces Access authorization - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autoriser Authorize - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autorisez-vous l'application %application_name% a acceder a votre contenu sur %home_title% ? Allow application %application_name% to access content on %home_title%? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Available in multi-export tab @@ -1384,11 +1398,11 @@ Back Previous - mobile/lightbox/basket_element.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/basket_element.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Back to Feedback @@ -1426,9 +1440,9 @@ Base %base% Database %base% + web/admin/editusers_timelimit_sbas.html.twig web/admin/editusers_quotas.html.twig web/admin/editusers_timelimit.html.twig - web/admin/editusers_timelimit_sbas.html.twig Base could not be created @@ -1440,6 +1454,11 @@ Dabase succesfully emptied Controller/Admin/DataboxController.php + + Basket + Basket + prod/WorkZone/Macros.html.twig + Basket created Basket created @@ -1468,7 +1487,7 @@ Basket is not found Basket is not found - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1508,9 +1527,9 @@ Browse Baskets Browse baskets - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1520,7 +1539,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 +1557,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1548,20 +1567,20 @@ Camera Model Camera model - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig Cancel Cancel Controller/Prod/LanguageController.php - prod/actions/delete_records_confirm.html.twig + user/import/view.html.twig + task-manager/task-editor/task.html.twig + admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig actions/Property/type.html.twig actions/Property/index.html.twig - prod/User/Add.html.twig - task-manager/task-editor/task.html.twig - user/import/view.html.twig - admin/fields/templates.html.twig + prod/User/Add.html.twig Cancel all @@ -1582,7 +1601,7 @@ Carousel Carousel - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Categorie @@ -1672,7 +1691,7 @@ Certaines donnees du panier ont change This basket has been updated - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -1729,8 +1748,6 @@ Choisir Choose - prod/Baskets/Reorder.html.twig - prod/Story/Reorder.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -1738,23 +1755,20 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig + prod/Baskets/Reorder.html.twig + prod/Story/Reorder.html.twig Choose a new password Choose a new password - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Choose the title of the document to export Enable filename choice option when downloading Form/Configuration/ActionsFormType.php - - City - City - prod/User/Add.html.twig - Civility Title @@ -1763,8 +1777,8 @@ Clear Clear - admin/task-manager/log_task.html.twig admin/task-manager/log_scheduler.html.twig + admin/task-manager/log_task.html.twig Clear list @@ -1800,7 +1814,7 @@ Codec Audio Audio codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1811,9 +1825,9 @@ Collection Collection - prod/Story/Create.html.twig - prod/upload/lazaret.html.twig admin/databox/details.html.twig + prod/Story/Create.html.twig + prod/upload/lazaret.html.twig Collection %collection% @@ -1829,7 +1843,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1844,13 +1858,13 @@ Colorspace Colorspace - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Commande Order + eventsmanager/notify/orderdeliver.php eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1860,13 +1874,13 @@ Commandes Orders - web/common/menubar.html.twig + web/common/menubar.html.twig Company Company - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig prod/User/Add.html.twig @@ -1900,7 +1914,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1925,13 +1939,13 @@ Connection Login - login/providers/mapping.html.twig - login/providers/mapping.html.twig + login/oauth/login.html.twig + web/login/index.html.twig + web/login/index.html.twig login/providers/bind.html.twig login/providers/bind.html.twig - web/login/index.html.twig - web/login/index.html.twig - login/oauth/login.html.twig + login/providers/mapping.html.twig + login/providers/mapping.html.twig Connection is OK but database does not exists or can not be accessed @@ -1946,7 +1960,7 @@ Connection to FTP succeed Succeeded connection to FTP server - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Consultez en ligne les pré-requis et la configuration du serveur web @@ -1956,7 +1970,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -1970,13 +1984,13 @@ Contributor - Contributor + Contribute prod/actions/Push.html.twig Cooliris Cooliris - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Copiez le code ci-dessous, retournez dans votre application et collez-le a l'endroit requis : @@ -2011,13 +2025,13 @@ Couleur de selection Selection color - web/prod/index.html.twig + web/prod/index.html.twig Country Country - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig Create a user @@ -2032,7 +2046,7 @@ Create index Create index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Creation date @@ -2122,7 +2136,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 +2234,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 +2249,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2264,13 +2278,13 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De From - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Deadline @@ -2292,7 +2306,7 @@ Deconnexion Logout - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Decouvrez la documentation @@ -2302,12 +2316,12 @@ Default TTL in seconds of sub-definition url Default TTL in seconds for JWT of sub-definition url - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Default basket Default basket - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2342,7 +2356,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2362,9 +2376,9 @@ Delete Delete - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Delete account successfull @@ -2374,13 +2388,13 @@ Delete all users rights Delete all users rights - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Delete basket Delete basket - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2410,9 +2424,9 @@ Deny Deny + login/oauth/authorize-access.html.twig prod/orders/order_item.html.twig prod/orders/order_item.html.twig - login/oauth/authorize-access.html.twig Deplacement %n_element% elements @@ -2445,29 +2459,29 @@ Description Caption + web/developers/application_form.html.twig Bridge/Dailymotion/upload.html.twig Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/upload.html.twig Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig prod/Tooltip/DCESFieldInfo.html.twig - web/developers/application_form.html.twig Deselect all Deselect all - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Design of personalization logo section Design of logo customization section - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Detailed view URL @@ -2494,8 +2508,8 @@ Dimension Size Media/Subdef/Image.php - Media/Subdef/Unknown.php Media/Subdef/Video.php + Media/Subdef/Unknown.php Disable document type sharing @@ -2520,17 +2534,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 @@ -2556,13 +2570,12 @@ Do you want to send your report ? Send your Report ? Phrasea/Controller/LightboxController.php - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2577,7 +2590,7 @@ Document has been successfully substitued Document has been successfully substituted - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% @@ -2630,7 +2643,7 @@ Drop index Drop index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Duree @@ -2718,7 +2731,7 @@ Edition impossible Unable to edit - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -2738,19 +2751,19 @@ ElasticSearch index name ElasticSearch index name - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch server host ElasticSearch server host - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch service port ElasticSearch service port - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -2961,7 +2974,7 @@ End Range End Range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php End session activity @@ -3001,7 +3014,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3011,8 +3024,8 @@ Erreur ! Error ! - mobile/lightbox/error.html.twig web/lightbox/error.html.twig + mobile/lightbox/error.html.twig Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas @@ -3089,12 +3102,12 @@ Error while connecting to FTP Error while connecting to FTP - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Error while creating user Error while creating user - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3105,8 +3118,8 @@ Error while sending the file Error while sending the file - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Error while uploading @@ -3144,7 +3157,7 @@ Ex : Paris, bleu, montagne Ex : Paris, blue, mountain - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3156,6 +3169,11 @@ Executables setting Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Export @@ -3163,15 +3181,15 @@ Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php - + Export ranges - Export ranges - Controller/Prod/LanguageController.php + Export ranges + Controller/Prod/LanguageController.php Export saved in the waiting queue Export saved in the waiting queue. - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php FR @@ -3202,10 +3220,10 @@ Feedback Feedback Controller/Prod/LanguageController.php + prod/WorkZone/Macros.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig Feeds @@ -3260,11 +3278,11 @@ File is not present in quarantine anymore, please refresh Document is not in quarantine anymore, please refresh + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php - Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php File is too big : 64k max @@ -3294,13 +3312,13 @@ Filename File Name - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles Available feed - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig Filter @@ -3320,20 +3338,20 @@ First/Last Name First/Last name - actions/Feedback/ListsMacros.html.twig web/admin/users.html.twig web/admin/users.html.twig + actions/Feedback/ListsMacros.html.twig Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig FlashFired FlashFired - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Flatten layers @@ -3349,7 +3367,7 @@ Force authentication Force authentication - prod/templates/push.html.twig + prod/templates/push.html.twig Force sending of the document ? @@ -3369,10 +3387,10 @@ Forgot password? Forgot password? - login/providers/mapping.html.twig - login/providers/bind.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig Forgot your password? @@ -3392,7 +3410,7 @@ FrameRate FrameRate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Frequence d'echantillonage @@ -3412,7 +3430,7 @@ Gallery Gallery - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php General configuration @@ -3424,6 +3442,11 @@ General settings web/admin/dashboard.html.twig + + Generate-cterms + Generate candidate terms + admin/fields/templates.html.twig + Generates a flexpaper flash file Creates a flexpaper flash file @@ -3458,7 +3481,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3473,7 +3496,7 @@ Get setting form index Get setting form index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side. @@ -3483,22 +3506,22 @@ Go 1 frame backward Go 1 frame backward - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go 1 frame forward Go 1 frame forward - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go to end point Go to end point - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go to start point Go to start point - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Good @@ -3533,7 +3556,7 @@ Graphiste (preview au rollover) Graphist (preview on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3548,8 +3571,9 @@ Guest Guest - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + mobile/common/menubar.html.twig Guest access @@ -3561,6 +3585,16 @@ You must be authenticated to have the right to download. web/common/dialog_export.html.twig + + Gui-editable + Editable in Graphical interface (prod) + admin/fields/templates.html.twig + + + Gui-visible + Displayed in Graphical Interface + admin/fields/templates.html.twig + HD Download Document Download @@ -3569,14 +3603,14 @@ Hello %username% Hi %username% - api/auth/end_user_authorization.html.twig - api/auth/native_app_access_token.html.twig api/auth/end_user_authorization.html.twig + api/auth/native_app_access_token.html.twig + api/auth/end_user_authorization.html.twig Help Help - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3591,16 +3625,16 @@ Home Home - mobile/lightbox/basket_element.html.twig - 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 + mobile/lightbox/basket_element.html.twig + mobile/lightbox/feed.html.twig + mobile/lightbox/validate.html.twig Homepage slideshow Homepage slideshow setting - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Hyperfocal distance @@ -3621,7 +3655,7 @@ ISO ISO - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php ISO sensibility @@ -3631,7 +3665,7 @@ Iconographe (description au rollover) Iconograph (caption on thumbnail rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3676,7 +3710,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3686,7 +3720,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 +3736,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 +3748,7 @@ Incorrect please try again Incorrect. Please try again. - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3734,9 +3768,9 @@ Informations Info - web/account/base.html.twig web/admin/dashboard.html.twig admin/user/registrations.html.twig + web/account/base.html.twig Informations personnelles @@ -3772,14 +3806,14 @@ Invalid file format Invalid file format - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid file type Invalid file type - prod/upload/upload-flash.html.twig admin/collection/collection.html.twig + prod/upload/upload-flash.html.twig Invalid file type, only (%supported_file_types%) file formats are supported @@ -3796,8 +3830,8 @@ Invalid labels parameter Invalid label parameters - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid link. @@ -3870,17 +3904,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 @@ -3923,10 +3957,10 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language - web/prod/index.html.twig + + Language selection + Language selection + web/prod/index.html.twig Last Name @@ -3956,7 +3990,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 +4092,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 @@ -4073,14 +4107,14 @@ Lightbox Lightbox - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Limite temporelle Time limit - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Limited vocabulary @@ -4158,10 +4192,10 @@ Login Login Form/Login/PhraseaAuthenticationForm.php - actions/Feedback/ListsMacros.html.twig - login/providers/mapping.html.twig - login/providers/bind.html.twig login/oauth/login.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig + actions/Feedback/ListsMacros.html.twig Login %login% already exists in database @@ -4181,8 +4215,8 @@ Login to link your account Login to link your account - login/providers/mapping.html.twig login/providers/bind.html.twig + login/providers/mapping.html.twig Logs @@ -4193,7 +4227,7 @@ Ma derniere question My last query - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4260,6 +4294,16 @@ Masks web/admin/editusers_masks.html.twig + + Matomo Analytics identifier + Matomo Analytics property (site id) + Form/Configuration/GeneralFormType.php + + + Matomo Analytics url + Matomo Analytics URL + Form/Configuration/GeneralFormType.php + Maximum megabytes allowed for download Maximum megabytes allowed for download @@ -4279,7 +4323,7 @@ Message Message Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Message automatique de Phraseanet @@ -4299,7 +4343,7 @@ MimeType MimeType - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Minimum number of letters before truncation @@ -4314,8 +4358,8 @@ Missing labels parameter Labels missing parameter - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Missing mandatory parameter %parameter% @@ -4350,7 +4394,7 @@ Mode de presentation Display mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4360,8 +4404,8 @@ Models Templates - actions/Feedback/list.html.twig admin/user/registrations.html.twig + actions/Feedback/list.html.twig Modify @@ -4389,20 +4433,20 @@ Move %countable% selected records to the chosen collection in the list. prod/actions/collection_default.html.twig - + Move down range - Move down range - Controller/Prod/LanguageController.php + Move down range + Controller/Prod/LanguageController.php Move one record to the chosen collection in the list. Move one record to the chosen collection in the list. prod/actions/collection_default.html.twig - + Move up range - Move up range - Controller/Prod/LanguageController.php + Move up range + Controller/Prod/LanguageController.php Moves records @@ -4434,10 +4478,10 @@ Name Name Controller/Prod/LanguageController.php - Bridge/Dailymotion/playlist_createcontainer.html.twig - actions/Download/prepare.html.twig - prod/templates/push.html.twig admin/fields/templates.html.twig + actions/Download/prepare.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + prod/templates/push.html.twig Name or email @@ -4457,8 +4501,8 @@ Ne pas autoriser Do not authorize - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Ne pas creer de DataBox maintenant @@ -4474,14 +4518,14 @@ New password New password - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New password (confirmation) Confirm new password - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New task @@ -4491,15 +4535,15 @@ Next Next - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig No No - web/account/account.html.twig web/developers/applications.html.twig + web/account/account.html.twig No URL available @@ -4534,7 +4578,7 @@ No document selected No document selected - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig No elements to push @@ -4569,7 +4613,7 @@ No preview available No preview available - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4584,8 +4628,7 @@ No results No results - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4620,8 +4663,8 @@ Nom du nouveau panier Name - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig Non-Restreinte (publique) @@ -4644,7 +4687,7 @@ None of the selected records can be printed None of the selected records can be printed - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig None of the selected records can be pushed. @@ -4664,7 +4707,8 @@ Not aggregated Not aggregated - admin/fields/templates.html.twig + admin/search-engine/general-aggregation.html.twig + admin/fields/templates.html.twig Notification par email @@ -4674,13 +4718,13 @@ Notifications Notifications - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales Global notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4730,13 +4774,13 @@ Number of replicas Number of replicas - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Number of shards Number of shards - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -4753,17 +4797,17 @@ Ok Ok - prod/actions/delete_records_confirm.html.twig admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig One document can not be modified. One document can not be modified. prod/actions/collection_default.html.twig - + One frame backward - One frame backward + One frame backward Controller/Prod/LanguageController.php @@ -4774,7 +4818,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. @@ -4799,9 +4843,9 @@ Or login with Or login with - web/login/register.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + web/login/register.html.twig api/auth/end_user_authorization.html.twig @@ -4827,7 +4871,7 @@ Orders manager Orders manager eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -4837,7 +4881,7 @@ Orientation Orientation - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Original name @@ -4866,27 +4910,27 @@ prod/upload/lazaret.html.twig prod/upload/lazaret.html.twig - + Pages - Pages + Pages actions/Feedback/ListsMacros.html.twig Paniers Baskets - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - web/account/account.html.twig - web/lightbox/index.html.twig + web/lightbox/validate.html.twig + web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/account/account.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Par %author% by %author% - mobile/lightbox/feed.html.twig prod/results/feeds_entry.html.twig prod/results/entry.html.twig + mobile/lightbox/feed.html.twig Password @@ -4915,9 +4959,9 @@ Past year WorkZone/Browser/Browser.html.twig - + Path - Path + Path web/admin/subdefs.html.twig @@ -4925,11 +4969,6 @@ Pause Controller/Prod/LanguageController.php - - Pays - Country - prod/User/Add.html.twig - Periodically fetches an FTP repository content locally Periodically fetches a FTP repository content locally @@ -5122,10 +5161,10 @@ Preferences Settings - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5140,12 +5179,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 @@ -5155,9 +5194,9 @@ Previous Previous - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig Print @@ -5167,8 +5206,8 @@ Problemes de connexion ? Connection problems? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Process the registration @@ -5198,10 +5237,10 @@ Publications Publications - web/prod/index.html.twig - admin/publications/wrapper.html.twig web/admin/tree.html.twig - web/common/menubar.html.twig + admin/publications/wrapper.html.twig + web/prod/index.html.twig + web/common/menubar.html.twig Publier @@ -5222,8 +5261,9 @@ Push Push - eventsmanager/notify/push.php Controller/Prod/LanguageController.php + eventsmanager/notify/push.php + prod/WorkZone/Macros.html.twig Push configuration @@ -5238,26 +5278,26 @@ Push::filter on companies Company - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on countries Country - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on emails E-mail - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on login Login - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on name @@ -5272,8 +5312,8 @@ Push::filter starts Starts with - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::une validation est une demande d'appreciation a d'autres personnes @@ -5310,80 +5350,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,25 +5438,25 @@ 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 Set order prod/Baskets/Reorder.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod/Story/Reorder.html.twig @@ -5453,22 +5493,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 +5548,7 @@ Rechercher dans un champ date In a date field - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5528,7 +5568,7 @@ Record Not Found Record not found - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5538,7 +5578,7 @@ Record removed from story Record removed from story - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Record_id @@ -5553,7 +5593,7 @@ Records have been successfuly moved Records have been successfuly moved - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5569,10 +5609,10 @@ Register Register - web/login/register-classic.html.twig - web/login/register.html.twig - web/login/register-provider.html.twig login/include/register-link-block.html.twig + web/login/register-classic.html.twig + web/login/register-provider.html.twig + web/login/register.html.twig Register approbation @@ -5587,19 +5627,19 @@ Reglages:: reglages d acces guest Guest access setup - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Reglages:: reglages d inscitpition automatisee Auto register setup - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5617,10 +5657,10 @@ Media/Subdef/Image.php Media/Subdef/Unknown.php - + Remove current Range - Remove current Range - Controller/Prod/LanguageController.php + Remove current Range + Controller/Prod/LanguageController.php Remove from basket @@ -5641,8 +5681,8 @@ Renew password Renew password Notification/Mail/MailRequestPasswordUpdate.php - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Reorder collections @@ -5663,7 +5703,7 @@ Report Report - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5833,9 +5873,9 @@ Row Password is missing. Script has stopped. user/import/file.html.twig - + Résultats des derniers envois effectués pour cette application - Résultats des derniers envois effectués pour cette application + Last webhooks sent for this application web/developers/application.html.twig @@ -5876,20 +5916,25 @@ Save Save - actions/Feedback/list.html.twig - web/account/change-password.html.twig - admin/search-engine/general-aggregation.html.twig + web/login/renew-password.html.twig + admin/search-engine/general-aggregation.html.twig admin/search-engine/elastic-search.html.twig task-manager/task-editor/task.html.twig web/developers/application.html.twig web/developers/application.html.twig - web/login/renew-password.html.twig + actions/Feedback/list.html.twig + web/account/change-password.html.twig Save all changes Save all changes admin/fields/templates.html.twig + + Save as VTT + Save chaptering + Controller/Prod/LanguageController.php + Save the list Save the list @@ -5923,8 +5968,8 @@ SearchEngine settings Search engine settings - web/setup/step2.html.twig web/admin/tree.html.twig + web/setup/step2.html.twig Security @@ -5935,6 +5980,7 @@ See See WorkZone/Browser/Browser.html.twig + prod/WorkZone/Macros.html.twig See documentation about structure manipulation. @@ -5950,8 +5996,8 @@ See my order See my orders - Notification/Mail/MailInfoOrderCancelled.php Notification/Mail/MailInfoOrderDelivered.php + Notification/Mail/MailInfoOrderCancelled.php See others @@ -5971,7 +6017,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 ! @@ -5981,10 +6027,10 @@ Select all Select all - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Select all collections @@ -5994,19 +6040,19 @@ Select files... Select files - prod/upload/upload.html.twig - prod/upload/upload-flash.html.twig + user/import/file.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig - user/import/file.html.twig admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig + prod/upload/upload.html.twig + prod/upload/upload-flash.html.twig Selected base(s) Selected database(s) : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6017,14 +6063,14 @@ Send Send Controller/Prod/LanguageController.php + web/login/forgot-password.html.twig + web/admin/dashboard.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod/actions/Push.html.twig prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - web/admin/dashboard.html.twig - web/login/forgot-password.html.twig Send an email to the user to setup his password @@ -6057,7 +6103,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 @@ -6140,7 +6186,7 @@ Shutter speed Shutter speed - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -6166,7 +6212,7 @@ Single image Single image - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Site web @@ -6176,14 +6222,14 @@ Size Size - actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig Slide show Slideshow - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Some files are being downloaded @@ -6198,7 +6244,7 @@ Something went wrong Something went wrong - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Something went wrong, please contact an administrator @@ -6233,9 +6279,9 @@ Source Source - prod/Tooltip/DataboxField.html.twig admin/fields/templates.html.twig admin/fields/templates.html.twig + prod/Tooltip/DataboxField.html.twig Sous-titre @@ -6259,10 +6305,10 @@ admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig - + Start Range - Start Range - Controller/Prod/LanguageController.php + Start Range + Controller/Prod/LanguageController.php Start by creating one by using the "add" button on the left ! @@ -6283,7 +6329,7 @@ Status des documents a rechercher Document status - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6303,10 +6349,10 @@ Stop Stop - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Stopped @@ -6317,16 +6363,18 @@ Stories Stories Form/Configuration/SearchEngineFormType.php + prod/WorkZone/Macros.html.twig Story Not Found Story not found - Controller/Api/V1Controller.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php Story created Story created - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story detached from the WorkZone @@ -6341,7 +6389,7 @@ Story updated Story updated - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story_id @@ -6376,8 +6424,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 @@ -6398,16 +6446,22 @@ Successful removal Successful removal. - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php Successful update Successful update + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -6415,16 +6469,10 @@ Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig + actions/Tools/videoEditor.html.twig Successfull connection @@ -6436,9 +6484,9 @@ Suggested values admin/collection/suggested_value.html.twig - + Suppr - Suppr + Suppr Controller/Prod/LanguageController.php @@ -6560,9 +6608,9 @@ Terms of use Terms of use Controller/Prod/TOUController.php - web/admin/tree.html.twig + login/layout/base-layout.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + web/admin/tree.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6572,7 +6620,7 @@ The URL you used is out of date, please login The URL you used is out of date. Please login. - Phrasea/ControllerProvider/Lightbox.php + Phrasea/ControllerProvider/Lightbox.php The Youtube servers have received too many calls from the same caller in a short amount of time. @@ -6583,7 +6631,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 +6651,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 @@ -6643,8 +6691,8 @@ The file is too big The file is too large. - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The file was moved to the quarantine @@ -6656,11 +6704,16 @@ The following errors have been detected user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped The publication has been stopped. - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The record was successfully created @@ -6701,7 +6754,7 @@ Theme Skin - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6721,13 +6774,13 @@ Thesaurus Min score Thesaurus Min score - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Thesaurus branch Thesaurus branch - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6757,8 +6810,8 @@ This feed is public This feed is public - actions/publish/publish.html.twig admin/publications/list.html.twig + actions/publish/publish.html.twig This field is required @@ -6794,7 +6847,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 @@ -6814,7 +6867,7 @@ Thumbnail has been successfully substitued Thumbnail has been successfully substituted - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Thumbnails directory is mounted to be accessible via HTTP, while other files are not. @@ -6830,19 +6883,19 @@ Titre Title - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/upload.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/upload.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig - Bridge/Flickr/upload.html.twig - Bridge/Flickr/photo_modify.html.twig - prod/Story/Reorder.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/publications/list.html.twig + prod/Baskets/Reorder.html.twig + Bridge/Dailymotion/upload.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Youtube/upload.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig Toggle loop @@ -6873,12 +6926,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 +6957,7 @@ Trier par Sort by - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6928,8 +6981,8 @@ Type de documents - Document(s) Type - web/prod/index.html.twig + Document Type + web/prod/index.html.twig Type nombre @@ -6944,8 +6997,8 @@ URL de callback Callback url - web/developers/application_form.html.twig web/developers/application.html.twig + web/developers/application_form.html.twig Un document commande @@ -6960,8 +7013,8 @@ Unable to add file to Phraseanet Unable to add files to Phraseanet - Controller/Admin/FeedController.php Controller/Prod/UploadController.php + Controller/Admin/FeedController.php Unable to add usr to list @@ -6971,8 +7024,8 @@ Unable to authenticate with %provider_name% Unable to authenticate with %provider_name% - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php Unable to connect to MySQL server @@ -7014,8 +7067,13 @@ Unable to retrieve provider identity Unable to retrieve provider identity. - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php + + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php Unable to send the documents @@ -7052,15 +7110,15 @@ Une question personnelle The query - web/prod/index.html.twig + web/prod/index.html.twig Une selection an untitled selection - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php Unhandled Error @@ -7119,7 +7177,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 +7202,7 @@ Uploaded by : %username% Uploaded by: %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7156,15 +7214,15 @@ Use a SMTP server Form/Configuration/EmailFormType.php - + Use an existing index - Use an existing index + Use an existing index web/setup/step2.html.twig 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 @@ -7221,10 +7279,10 @@ Controller/Prod/LanguageController.php prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig + prod/templates/push.html.twig prod/templates/push.html.twig + prod/templates/push.html.twig User can see others choices @@ -7243,16 +7301,16 @@ User successfully created User successfully created - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users Users Vocabulary/ControlProvider/UserProvider.php - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/admin/users.html.twig user/import/view.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Users must accept Terms of Use for each export @@ -7272,8 +7330,8 @@ VALIDATION Feedback - web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig + web/lightbox/agreement_box.html.twig Validate e-mail address @@ -7283,11 +7341,11 @@ Validation Feedback - eventsmanager/notify/validationdone.php - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationdone.php lightbox/IE6/validate.html.twig @@ -7303,11 +7361,11 @@ Validations Feedbacks - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + web/lightbox/validate.html.twig web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Validations received @@ -7342,7 +7400,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7352,7 +7410,7 @@ Video codec Video codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Videos @@ -7368,24 +7426,24 @@ 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 Your Basket(s) - mobile/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Voici vos validations en cours Your feedbacks in progress - mobile/lightbox/index.html.twig web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Votre adresse email @@ -7420,7 +7478,7 @@ Vous avez envoye une demande de validation de document sur ce panier You have pushed this basket for a feedback request - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Vous avez recu des documents @@ -7432,11 +7490,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 +7597,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 ! @@ -7564,8 +7617,8 @@ Watch my access requests status View my access requests status. - Notification/Mail/MailSuccessAccessRequest.php Notification/Mail/MailSuccessEmailConfirmationUnregistered.php + Notification/Mail/MailSuccessAccessRequest.php Watermark @@ -7645,15 +7698,15 @@ 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 Yes - web/account/account.html.twig user/import/view.html.twig web/developers/applications.html.twig + web/account/account.html.twig You are Admin @@ -7740,7 +7793,7 @@ You can not edit this story You cannot edit this story - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php You can not upload files @@ -7766,17 +7819,17 @@ You do not have required rights to send these documents over FTP You don't have required rights to send these documents over FTP. - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php You do not have rights to remove all selected documents. Are you sure ? You do not have rights to remove all selected documents. Are you sure? - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have rights to remove selected documents You don't have rights to remove selected documents. - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have the permission to move records to %collection% @@ -7801,7 +7854,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. @@ -7816,7 +7869,7 @@ You have to give your feedback at least on one document to send a report You have to give at least one document feedback to send a report - Phrasea/Controller/LightboxController.php + Phrasea/Controller/LightboxController.php You have to wait for an administrator approval for your access request @@ -7841,7 +7894,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 @@ -7862,12 +7915,12 @@ You will no longer receive notifications at %old_email% You will no longer receive notifications at %old_email% - Helper/User/Edit.php + Helper/User/Edit.php You will now receive notifications at %new_email% You will now receive notifications at %new_email% - Helper/User/Edit.php + Helper/User/Edit.php Your %provider_name% account matchs a Phraseanet account @@ -7953,150 +8006,148 @@ a propos About - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig action : ajouter au panier Add to Basket + prod/preview/tools.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection Move prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : editer Edit prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig prod/preview/caption.html.twig + web/prod/toolbar.html.twig action : exporter Export + web/lightbox/feed.html.twig + web/lightbox/validate.html.twig + lightbox/IE6/feed.html.twig + lightbox/IE6/validate.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig - web/prod/index.html.twig - web/lightbox/feed.html.twig - lightbox/IE6/feed.html.twig - lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/prod/index.html.twig action : outils Tools prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : print Print prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : publier Publish 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 + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push Push prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : status Properties prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : supprimer Delete - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + web/prod/toolbar.html.twig action:: nouveau panier New basket - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage New Story - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider Validate - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::detacher Release from Basket zone - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::editer Edit - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::exporter Export - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::renommer Rename - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig actual status @@ -8449,19 +8500,19 @@ Activity Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig + web/account/account.html.twig admin::compte-utilisateur adresse Address Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur changer mon mot de passe @@ -8473,9 +8524,9 @@ Zip code Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur confirmer la nouvelle adresse email @@ -8497,21 +8548,21 @@ E-mail Controller/Admin/UserController.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur fax Fax Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur id utilisateur @@ -8522,35 +8573,35 @@ admin::compte-utilisateur identifiant Login Core/Provider/RegistrationServiceProvider.php + web/admin/users.html.twig + web/admin/editusers.html.twig + admin/user/registrations.html.twig api/auth/end_user_authorization.html.twig - web/account/reset-email.html.twig + web/common/dialog_export.html.twig web/account/account.html.twig web/account/account.html.twig - web/admin/editusers.html.twig - web/admin/users.html.twig - admin/user/registrations.html.twig - web/common/dialog_export.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur mot de passe Password api/auth/end_user_authorization.html.twig web/setup/step2.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur nom Last name Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur nouvelle adresse email @@ -8568,40 +8619,40 @@ Job Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur prenom First name Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur sexe Gender Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig + web/account/account.html.twig admin::compte-utilisateur societe Company Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur tel @@ -8612,11 +8663,11 @@ admin::compte-utilisateur telephone Phone Controller/Admin/UserController.php - web/account/account.html.twig web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur un email de confirmation vient de vous etre envoye. Veuillez suivre les instructions contenue pour continuer @@ -8628,9 +8679,9 @@ City Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur: L'email a correctement ete mis a jour @@ -8680,8 +8731,8 @@ admin::compte-utilisateur:ftp: repertoire de destination ftp Ftp reception folder - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Activer le compte FTP @@ -8696,14 +8747,14 @@ admin::compte-utilisateur:ftp: Nombre d'essais max Max. retry - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Utiliser le mode passif Use passive mode - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: creer un dossier @@ -8724,25 +8775,25 @@ admin::compte-utilisateur:sexe: madame Mrs. Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: mademoiselle Miss Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: monsieur Mr. Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::monitor: bases sur lesquelles l'utilisateur est connecte : @@ -8762,26 +8813,26 @@ admin::monitor: module admin Admin - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module client Client - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module comparateur Lightbox - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig @@ -8792,44 +8843,44 @@ admin::monitor: module production Production - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module report Report - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module thesaurus Thesaurus - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module upload Upload - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + lib/classes/phrasea.php + web/common/menubar.html.twig admin::monitor: module validation Lightbox - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/common/menubar.html.twig @@ -8865,8 +8916,8 @@ admin::plugins: plugins Plugins - admin/plugins/index.html.twig web/admin/tree.html.twig + admin/plugins/index.html.twig admin::plugins: retrieveConfigurationError @@ -9010,9 +9061,9 @@ New User web/admin/users.html.twig - + admin::userlist: filterguestuser - Show guest user. + Show guest user web/admin/users.html.twig @@ -9046,7 +9097,7 @@ alert Warning - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9057,12 +9108,12 @@ an error occured an error occured - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% an error occured: %message% - Phrasea/Controller/SetupController.php + Phrasea/Controller/SetupController.php an error occured while exporting records @@ -9087,9 +9138,9 @@ audio audio - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig avril @@ -9111,17 +9162,17 @@ Re-index database now (regarding quantity of documents, this operation can last several hours) admin/databox/databox.html.twig - + basket:action:delete record form basket - Delete form Basket + Delete record from basket prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + basket:action:delete record form database - Delete form Database. + Delete record from database prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig be notified when a document is placed in quarantine @@ -9131,54 +9182,54 @@ 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 admin/collection/suggested_value.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::annuler Cancel Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php + admin/publications/fiche.html.twig + web/admin/index.html.twig + admin/collection/create.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/link-field-step1.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/export-topics-dialog.html.twig + web/report/all_content.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Youtube/video_modify.html.twig 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 - web/thesaurus/export-text-dialog.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/import-dialog.html.twig - web/thesaurus/link-field-step2.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/link-field-step1.html.twig - web/account/reset-email.html.twig - admin/publications/fiche.html.twig - admin/collection/create.html.twig - web/admin/index.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig - web/report/all_content.html.twig + web/account/reset-email.html.twig boutton::appliquer @@ -9188,16 +9239,16 @@ boutton::chercher Search - web/prod/index.html.twig + web/admin/users.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig - web/admin/users.html.twig + web/prod/index.html.twig boutton::choisir Choose - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig boutton::commander @@ -9247,17 +9298,17 @@ boutton::fermer Close Controller/Prod/LanguageController.php - prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig - web/thesaurus/properties.html.twig + web/lightbox/sc_note.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig web/thesaurus/export-topics.html.twig web/thesaurus/link-field-step3.html.twig - web/lightbox/sc_note.html.twig - web/common/dialog_export.html.twig + web/thesaurus/properties.html.twig web/report/all_content.html.twig + prod/actions/Push.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + web/common/dialog_export.html.twig boutton::generer @@ -9267,15 +9318,15 @@ boutton::imprimer Print - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig boutton::modifier Modify + web/admin/users.html.twig Bridge/Dailymotion/actionelement.html.twig Bridge/Youtube/actionelement.html.twig Bridge/Flickr/actionelement.html.twig - web/admin/users.html.twig boutton::monter @@ -9291,22 +9342,22 @@ boutton::precedent Previous + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::rechercher Search Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9372,7 @@ boutton::remplacer Replace - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9331,26 +9382,26 @@ boutton::retour Back + web/admin/editusers.html.twig + admin/databox/details.html.twig + user/import/file.html.twig + admin/publications/fiche.html.twig + admin/collection/details.html.twig + admin/statusbit/edit.html.twig + web/developers/application.html.twig + web/developers/application_form.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig Bridge/Dailymotion/video_deleteelement.html.twig Bridge/Dailymotion/playlist_createcontainer.html.twig Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Youtube/video_deleteelement.html.twig Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/databox/details.html.twig - admin/collection/details.html.twig - user/import/file.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig - web/developers/application.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig boutton::retry @@ -9360,32 +9411,22 @@ boutton::suivant Next + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::supprimer Delete Controller/Prod/LanguageController.php - actions/Bridge/disconnected.html.twig - Bridge/Dailymotion/actionelements.html.twig - Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig - Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig - Bridge/Flickr/actioncontainers.html.twig - prod/results/feeds_entry.html.twig - prod/results/entry.html.twig - web/prod/index.html.twig - web/thesaurus/presets.html.twig + web/admin/subdefs.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/collection/collection.html.twig @@ -9393,7 +9434,17 @@ admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig + web/thesaurus/presets.html.twig + Bridge/Dailymotion/actioncontainers.html.twig + Bridge/Dailymotion/actionelements.html.twig + actions/Bridge/disconnected.html.twig + Bridge/Youtube/actioncontainers.html.twig + Bridge/Youtube/actionelements.html.twig + Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig + prod/results/feeds_entry.html.twig + prod/results/entry.html.twig + web/prod/index.html.twig boutton::telecharger @@ -9406,9 +9457,9 @@ boutton::telecharger tous les documents Download all web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig boutton::tester @@ -9420,69 +9471,69 @@ boutton::valider Validate Controller/Prod/LanguageController.php - mobile/lightbox/note_form.html.twig - prod/Baskets/Update.html.twig - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/video_deleteelement.html.twig - Bridge/Dailymotion/playlist_createcontainer.html.twig - Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig - Bridge/Youtube/video_deleteelement.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig - Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig - 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/Story/Reorder.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 - web/thesaurus/link-field-step2.html.twig + web/admin/structure.html.twig + web/admin/setup.html.twig + web/admin/editusers.html.twig + web/admin/dashboard.html.twig + admin/user/registrations.html.twig + user/import/view.html.twig + web/admin/subdefs.html.twig + admin/publications/fiche.html.twig + admin/publications/list.html.twig + admin/collection/collection.html.twig + admin/collection/reorder.html.twig + admin/collection/create.html.twig + admin/collection/suggested_value.html.twig + admin/statusbit/edit.html.twig web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/index.html.twig web/thesaurus/new-term.html.twig web/thesaurus/new-term.html.twig web/thesaurus/link-field-step1.html.twig - web/account/access.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig - web/admin/dashboard.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/publications/list.html.twig - web/admin/setup.html.twig - admin/collection/create.html.twig - admin/collection/reorder.html.twig - admin/collection/collection.html.twig - admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig - web/admin/structure.html.twig - user/import/view.html.twig - admin/user/registrations.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/index.html.twig + web/thesaurus/export-topics-dialog.html.twig web/report/all_content.html.twig + web/developers/application_form.html.twig + prod/Baskets/Update.html.twig + prod/Baskets/Reorder.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Dailymotion/video_deleteelement.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + Bridge/Dailymotion/video_moveinto_playlist.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig + Bridge/Youtube/video_deleteelement.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Youtube/video_moveinto_playlist.html.twig + Bridge/Flickr/photo_deleteelement.html.twig + Bridge/Flickr/photo_moveinto_photoset.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig + web/prod/index.html.twig + web/account/access.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig + mobile/lightbox/note_form.html.twig boutton::vue graphique Graphic view - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig boutton::vue xml XML view - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig button::Install @@ -9562,14 +9613,14 @@ charger d'avantages de notifications Load more Notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Select - web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig + web/prod/index.html.twig classe @@ -9596,29 +9647,29 @@ copyClipboardLabel Copy to clipboard - prod/results/infos.html.twig prod/Share/record.html.twig prod/Share/record.html.twig prod/Share/record.html.twig + prod/results/infos.html.twig create_subdef_button_label Create new subview web/admin/subdefs.html.twig - + create_subdef_modal_access_class - Access right: + Access right : web/admin/subdefs.html.twig - + create_subdef_modal_access_class_document - "Documents" Right + "Documents" Right web/admin/subdefs.html.twig - + create_subdef_modal_access_class_no_restriction - "Thumbnail" Right (No Restriction) + No Restriction (Hash protected) web/admin/subdefs.html.twig @@ -9631,14 +9682,14 @@ Presets web/admin/subdefs.html.twig - + create_subdef_modal_preview_mediatype - Preview Media Type (mime type) + Preview Media Type (mime type) : web/admin/subdefs.html.twig - + create_subdef_modal_record_phraseanet_type - Build subview for document Type: + Build subview for document Type : web/admin/subdefs.html.twig @@ -9649,7 +9700,7 @@ created_on created on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9680,7 +9731,7 @@ delete Delete - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig descendant @@ -9695,10 +9746,10 @@ document document - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + task-manager/task-editor/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - task-manager/task-editor/subdefs.html.twig document original @@ -9709,7 +9760,7 @@ edit edit - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig web/account/account.html.twig web/account/account.html.twig web/account/account.html.twig @@ -9752,7 +9803,7 @@ edit::preset:: titre Title - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9789,7 +9840,7 @@ export:: erreur : aucun document selectionne Error : no document selected - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig export:: telechargement @@ -9805,7 +9856,7 @@ export::ftp: reglages manuels Manual settings - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9846,17 +9897,17 @@ file is not valid file is not valid - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash flash - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig for the following reasons : %reasons% @@ -9920,14 +9971,25 @@ Modifications done admin/databox/databox.html.twig + + help::help-search: OR + Or + prod/results/help.html.twig + + + help::help-search: relaunch search without filter + Remove all filters and relaunch search + prod/results/help.html.twig + web/prod/index.html.twig + help::help-section-bullet: check-spelling Check that there are no misspellings or typing errors. prod/results/help.html.twig - + help::help-section-bullet: default-operator-between-terms - help::help-section-bullet: default-operator-between-terms + Default operator between terms is AND, example : typing words “red“ “dog”, search "red AND dog" in same record prod/results/help.html.twig @@ -9945,10 +10007,9 @@ Remove advanced search filters. prod/results/help.html.twig - + help::help-section-bullet: search-in-a-specific-field - To search in a specific field, use syntaxe "name of field: value", exemple: city:"Paris" -See documentation for more examples https://docs.phraseanet.com + To search in a specific field, use syntax "name of field: value", for example: city:"Paris". You can also use the advanced search and read documentation for more examples: https://docs.phraseanet.com prod/results/help.html.twig @@ -9979,9 +10040,9 @@ See documentation for more examples https://docs.phraseanet.com image Image - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig image rotation @@ -9996,42 +10057,47 @@ 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 + By Hits + web/prod/index.html.twig + + + index::advance_search: order-by-hits-asc + By Hits asc + web/prod/index.html.twig index:advanced-preferences:: use truncation use truncation - web/prod/index.html.twig + web/prod/index.html.twig invite:: Redirection vers la zone d'authentification, cliquez sur OK pour continuer ou annulez @@ -10063,11 +10129,79 @@ See documentation for more examples https://docs.phraseanet.com Service will be available again in a few minutes actions/Bridge/deactivated.html.twig + + lightbox::See_less_feedback + See less feedback + web/lightbox/index.html.twig + + + lightbox::See_more_feedback + See more feedback + web/lightbox/index.html.twig + + + lightbox::list + Summary + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Summary + web/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/validate.html.twig + + + lightbox::see_less_basket + See less baskets + web/lightbox/index.html.twig + + + lightbox::see_more_basket + See more baskets + web/lightbox/index.html.twig + + + lightbox:feedback:sendreport:warnwindows:cancel + Cancel report sending and continue + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:message + Your feedback contains + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_approved + Approved + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_rejected + Rejected + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_unexpressed + Unexpressed + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:title + Feedback summary web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:validate + Send my report + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig login:: Changer mon adresse email @@ -10087,9 +10221,10 @@ See documentation for more examples https://docs.phraseanet.com login:: Mon compte My account + web/common/menubar.html.twig + web/common/menubar.html.twig web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + mobile/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 @@ -10104,8 +10239,8 @@ See documentation for more examples https://docs.phraseanet.com login::erreur: Erreur d'authentification Authentication error - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php login::erreur: No available connection - Please contact sys-admin @@ -10125,8 +10260,8 @@ See documentation for more examples https://docs.phraseanet.com login::notification: Mise a jour du mot de passe avec succes Password update done - Controller/Root/LoginController.php Controller/Root/AccountController.php + Controller/Root/LoginController.php login::notification: demande de confirmation par mail envoyee @@ -10148,8 +10283,8 @@ See documentation for more examples https://docs.phraseanet.com login::register: sujet email : confirmation de votre adresse email E-mail address check. - Notification/Mail/MailRequestEmailUpdate.php Notification/Mail/MailRequestEmailConfirmation.php + Notification/Mail/MailRequestEmailUpdate.php login::register:email: Voici un compte rendu du traitement de vos demandes d'acces : @@ -10215,15 +10350,15 @@ See documentation for more examples https://docs.phraseanet.com no No - web/account/sessions.html.twig - web/admin/subdefs.html.twig user/import/view.html.twig + web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig no image selected No Document selected - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10236,9 +10371,9 @@ See documentation for more examples https://docs.phraseanet.com notice Caption web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig nouveau @@ -10265,9 +10400,9 @@ See documentation for more examples https://docs.phraseanet.com Your Order Of : prod/orders/order_item.html.twig - + order-manager::order-item: accepted-item - accepted item + Accepted item(s) prod/orders/order_item.html.twig @@ -10357,9 +10492,9 @@ See documentation for more examples https://docs.phraseanet.com prod/orders/order_item.html.twig prod/orders/order_item.html.twig - + order-manager::order-item: rejected-item - rejected item + Rejected item(s) prod/orders/order_item.html.twig @@ -10374,9 +10509,9 @@ See documentation for more examples https://docs.phraseanet.com Select All prod/orders/order_item.html.twig - + order-manager::order-item: selected-item - selected item + Selected item(s) prod/orders/order_item.html.twig @@ -10541,17 +10676,17 @@ See documentation for more examples https://docs.phraseanet.com panier:: ordre Validation ascendante Most approved - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre Validation descendante Less approved - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre du panier Basket order - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: renommer le panier @@ -10576,7 +10711,7 @@ See documentation for more examples https://docs.phraseanet.com paniers:: panier recu de %pusher% Basket received from %pusher% - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ? @@ -10586,8 +10721,8 @@ See documentation for more examples https://docs.phraseanet.com paniers::description du nouveau panier Caption - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig par %user_name% @@ -10637,7 +10772,7 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: Preferences Preferences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10647,23 +10782,33 @@ 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 Address - web/setup/step2.html.twig - web/account/account.html.twig - admin/collection/collection.html.twig web/admin/connected-users.html.twig + admin/collection/collection.html.twig + web/setup/step2.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig phraseanet:: aide Help - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: basket feedback + Feedback report with caption + prod/actions/printer_default.html.twig + + + phraseanet:: baskets + Workzone tab + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10685,8 +10830,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,14 +10859,14 @@ 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 Port - web/setup/step2.html.twig web/admin/databases.html.twig web/admin/databases.html.twig + web/setup/step2.html.twig phraseanet:: prereglages @@ -10731,13 +10876,13 @@ 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/printer_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/printer_default.html.twig phraseanet:: propositions @@ -10748,8 +10893,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,13 +10905,13 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig - web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/index.html.twig + prod/actions/edit_default.html.twig + web/prod/tab_headers.html.twig phraseanet:: tri @@ -10776,17 +10921,17 @@ See documentation for more examples https://docs.phraseanet.com phraseanet:: tri par date Sort by date - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: tri par nom Sort by name - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -10807,7 +10952,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,9 +10998,9 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::chargement Loading Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig - web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig + web/thesaurus/thesaurus.html.twig + prod/actions/edit_default.html.twig phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible @@ -10873,15 +11018,20 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier Your session is closed, please re-authentificate Controller/Prod/LanguageController.php - web/thesaurus/thesaurus.html.twig web/admin/index.html.twig + web/thesaurus/thesaurus.html.twig phraseanet::erreur: echec du serveur de mail 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 + Failed to revoke some user access + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10936,42 +11086,42 @@ See documentation for more examples https://docs.phraseanet.com phraseanet::temps:: a l'instant Just now - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: hier Yesterday - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% heures %quantity% hours ago - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% minutes %quantity% minutes ago - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une heure One hour ago - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une minute One minute ago - lib/classes/phraseadate.php + lib/classes/phraseadate.php 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 +11132,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 +11142,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,49 +11167,49 @@ 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 Stop prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig preview:: demarrer le diaporama Slideshow prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig 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 +11224,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 @@ -11084,40 +11234,135 @@ See documentation for more examples https://docs.phraseanet.com prod/Share/record.html.twig prod/Share/record.html.twig + + print:: basket feedback + Feedback report with caption + prod/actions/printer_default.html.twig + + + print:: basket feedback only + Feedback report + prod/actions/printer_default.html.twig + print:: description - Description - prod/actions/printer_default.html.twig + Caption only + prod/actions/printer_default.html.twig print:: image de choix et description Preview and caption - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix et description avec planche contact Preview, caption and thumbnails - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix seulement Preview - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: imagette Thumbnail - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: liste d'imagettes Thumbnail list - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: planche contact (mosaique) Thumbnails - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig + + + print_feedback:: Document generated on : + Generated on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback active + Feedback session still opened + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expired + Feedback session closed + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expiring on : + Feedback expiring on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated by : + Feedback initiated by : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated on : + Feedback initiated on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback on basket %name% + Feedback report on basket : %name% + Out/Module/PDFRecords.php + + + print_feedback:: Non + No + Out/Module/PDFRecords.php + + + print_feedback:: Oui + Yes + Out/Module/PDFRecords.php + + + print_feedback:: Participants : + Participants list : + Out/Module/PDFRecords.php + + + print_feedback:: Votes : + Approvals : + Out/Module/PDFRecords.php + + + print_feedback:: base name: + Base Name : + Out/Module/PDFRecords.php + + + print_feedback:: document Uuid: + Document Unique Id : + Out/Module/PDFRecords.php + + + print_feedback:: non voté + Unexpressed + Out/Module/PDFRecords.php + + + print_feedback:: originale filename: + Original file name : + Out/Module/PDFRecords.php + + + print_feedback:: record id: + Record Id : + Out/Module/PDFRecords.php + + + print_feedback:: record title: + Record Title : + Out/Module/PDFRecords.php prive @@ -11134,7 +11379,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,22 +11396,48 @@ 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 + Search a value on specific fields + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) Move also Stories linked documents ? prod/actions/collection_default.html.twig + + prod::edit: Confirmation Edition latitude longitude + Longitude and latitude confirmation + prod/actions/edit_default.html.twig + 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::edit:confirm: Edition latitude longitude + Do you wish to setup the longitude and latitude fields with the data returned by Geoname service? +Warning: The current values will be overwritten by these new values + prod/actions/edit_default.html.twig + + + prod::edit:confirm: No + No, keep the current value + prod/actions/edit_default.html.twig + + + prod::edit:confirm: Yes + Yes, update geolocation + prod/actions/edit_default.html.twig + + + prod::edit:story select all + Select all stories' records + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11176,32 +11447,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,77 +11487,87 @@ 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 Base - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:collection_label Collection - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:doctype_label Document type - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php + + + prod::feedback:feedback_set_title + Feedback Title : + prod/templates/push.html.twig + + + prod::push:push_set_title + Name of Push Basket + prod/templates/push.html.twig prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee. @@ -11408,60 +11689,55 @@ See documentation for more examples https://docs.phraseanet.com Replace with term ? web/prod/tab_thesaurus.html.twig - + prod::toolbar : video editor - video tool - web/prod/toolbar.html.twig + video tools + web/prod/toolbar.html.twig prod::tools: document Document - Controller/Prod/ToolsController.php Controller/Prod/ShareController.php + Controller/Prod/ToolsController.php - - prod:app trash: also-move-record - Also move to Trash the records that rely on stories - prod/actions/delete_records_confirm.html.twig - - - prod:app trash: record-delete - record delete - prod/actions/delete_records_confirm.html.twig - - + prod:app trash: record-move-to-trash - move record to trash - prod/actions/delete_records_confirm.html.twig + move record to trash + prod/actions/delete_records_confirm_form.html.twig + + + prod:app trash: record-to-delete + prod:app trash: record-to-delete + prod/actions/delete_records_confirm_form.html.twig prod:app trash: title-trash prod:app trash: title-trash Controller/Prod/LanguageController.php - + prod:edit: chapters - Edit chapters - Controller/Prod/LanguageController.php - - - prod:edit: no overlaps for chapters - No overlaps for chapters + Edit chapters Controller/Prod/LanguageController.php - + + prod:edit: no overlaps for chapters + No overlap for chapters + Controller/Prod/LanguageController.php + + prod:edit: only a media of type video can be edited - Only a media of type video can be edited - Controller/Prod/LanguageController.php + Only video type record can be edited + Controller/Prod/LanguageController.php prod:edit: suggested_values Suggested values - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php - + prod:edit: video-editor - Video tools + Video tools Controller/Prod/LanguageController.php @@ -11470,28 +11746,59 @@ See documentation for more examples https://docs.phraseanet.com Click on the zone to delete. Use grip for resize or move the area. It is possible to place several search areas - Controller/Prod/LanguageController.php - - - prod:mapboxgl: title map dialog - Geographic Search Controller/Prod/LanguageController.php - - prod:mapboxgl: title notice - Geographic Search - Controller/Prod/LanguageController.php - - - prod:push: create new user - prod:push: create new user + + prod:mapboxgl: title map dialog + Geoloc Search Controller/Prod/LanguageController.php - + + prod:mapboxgl: title notice + Help + Controller/Prod/LanguageController.php + + + prod:push: create new user + Create new user + Controller/Prod/LanguageController.php + + prod:push: delete selection - prod:push: delete selection + Delete Selection prod/actions/Push.html.twig + + prod:workzone:basket:creation-date + Creation + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + Feedback closure date updated + prod/WorkZone/Basket.html.twig + + + prod:workzone:facetstab:search_and_facets_sort_options + Facets sorting + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + Include in results + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + Exclude from results + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + Remove filter + web/prod/index.html.twig + public Public @@ -11503,32 +11810,32 @@ It is possible to place several search areas publication : autheur Author - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : email autheur Author's e-mail - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : sous titre Sub Title - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : titre Title - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications. This is your personnal rss flow, it will inform you about publications - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications:: s'abonner aux publications @@ -11539,14 +11846,14 @@ It is possible to place several search areas publications::Ne le partagez pas, il est strictement confidentiel Don't share it, it's yours only - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications::votre rss personnel Your own rss - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php push::mail:: Rapport de validation de %user% pour %title% @@ -11566,19 +11873,19 @@ 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 Refresh - prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Story.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -11592,39 +11899,39 @@ It is possible to place several search areas Recreate subviews actions/Tools/index.html.twig - + registration:collection.accepted - registration:collection.accepted + Granted web/account/access.html.twig - + registration:collection.active - registration:collection.active + Active web/account/access.html.twig - + registration:collection.in-time - registration:collection.in-time + Access is time limited (active) web/account/access.html.twig - + registration:collection.out-dated - registration:collection.out-dated + Out dated web/account/access.html.twig - + registration:collection.pending - registration:collection.pending + Pending web/account/access.html.twig - + registration:collection.registrable - registration:collection.registrable + Make a registration request web/account/access.html.twig - + registration:collection.rejected - registration:collection.rejected + Request denied web/account/access.html.twig @@ -11640,17 +11947,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,12 +11979,12 @@ 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 Untitled - classes/record/adapter.php + classes/record/adapter.php report:: 1 - Periode @@ -11860,21 +12167,21 @@ It is possible to place several search areas report:: non-renseigne Not filled - module/report/add.php - module/report/question.php - module/report/download.php + module/report/validate.php module/report/activity.php module/report/activity.php module/report/activity.php + module/report/question.php + module/report/edit.php module/report/connexion.php module/report/connexion.php module/report/connexion.php - module/report/push.php - module/report/sent.php - module/report/validate.php + module/report/add.php module/report/nav.php - module/report/edit.php + module/report/download.php + module/report/sent.php module/report/filter.php + module/report/push.php report:: page d'accueil @@ -12108,8 +12415,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% @@ -12129,17 +12436,17 @@ It is possible to place several search areas same UUID A file with the same UUID already exists in the database - Border/Checker/UUID.php + Border/Checker/UUID.php same checksum A file with the same checksum already exists in the database - Border/Checker/Sha256.php + Border/Checker/Sha256.php same filename A file with the same filename already exists in the database - Border/Checker/Filename.php + Border/Checker/Filename.php scheduled status @@ -12149,7 +12456,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 @@ -12206,9 +12513,9 @@ It is possible to place several search areas E-mails send test web/admin/dashboard.html.twig - + setup::custom-link:add-link - Add link + Add link web/admin/setup.html.twig @@ -12221,14 +12528,14 @@ It is possible to place several search areas Show in language web/admin/setup.html.twig - + setup::custom-link:link-url - Destination URL + Destination URL web/admin/setup.html.twig - + setup::custom-link:location - setup::custom-link:location + Select a position Form/Configuration/CustomLinkFormType.php @@ -12236,15 +12543,15 @@ It is possible to place several search areas Placement web/admin/setup.html.twig - + setup::custom-link:name-link - Name of link + Name of link Form/Configuration/CustomLinkFormType.php web/admin/setup.html.twig - + setup::custom-link:navigation-bar - Navigation Bar + Navigation Bar Form/Configuration/CustomLinkFormType.php @@ -12252,14 +12559,14 @@ It is possible to place several search areas Display order web/admin/setup.html.twig - + setup::custom-link:placeholder-link-url - eg: https://docs.phraseanet.com + eg: https://docs.phraseanet.com Form/Configuration/CustomLinkFormType.php - + setup::custom-link:select-language - Select Language + Select Language Form/Configuration/CustomLinkFormType.php @@ -12341,12 +12648,12 @@ It is possible to place several search areas task::archive:Archivage Archive in collection - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:Archiving files found into a 'hotfolder' Archiving file(s) from hotfolder - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:archivage sur base/collection/ @@ -12412,8 +12719,8 @@ It is possible to place several search areas task::ftp:Status about your FTP transfert from %application% to %server% FTP transfert status from %application% to %server% - Notification/Mail/MailSuccessFTPSender.php Notification/Mail/MailSuccessFTPReceiver.php + Notification/Mail/MailSuccessFTPSender.php task::ftp:TENTATIVE no %number%, %date% @@ -12458,8 +12765,8 @@ It is possible to place several search areas task::ftp:proxy Proxy - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy password @@ -12469,8 +12776,8 @@ It is possible to place several search areas task::ftp:proxy port Port - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy user @@ -12565,8 +12872,8 @@ It is possible to place several search areas thesaurus:: Lier la branche de thesaurus Link branch ? - web/thesaurus/link-field-step2.html.twig web/thesaurus/link-field-step3.html.twig + web/thesaurus/link-field-step2.html.twig thesaurus:: Lier la branche de thesaurus au champ @@ -12581,8 +12888,8 @@ It is possible to place several search areas thesaurus:: Nouveau synonyme New Synonym - web/thesaurus/thesaurus.html.twig web/thesaurus/new-term.html.twig + web/thesaurus/thesaurus.html.twig thesaurus:: Nouveau terme @@ -12727,8 +13034,8 @@ It is possible to place several search areas thesaurus:: export en topics Topics - web/thesaurus/export-topics-dialog.html.twig web/thesaurus/export-topics.html.twig + web/thesaurus/export-topics-dialog.html.twig thesaurus:: exporter @@ -13013,14 +13320,14 @@ It is possible to place several search areas thesaurus::menu: supprimer Delete - web/thesaurus/properties.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig + web/thesaurus/properties.html.twig thumbnail validation Confirm thumbnail - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13056,7 +13363,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) : @@ -13068,6 +13375,7 @@ It is possible to place several search areas upload:: Status : Apply status prod/upload/upload.html.twig + prod/upload/lazaret.html.twig prod/upload/upload-flash.html.twig @@ -13078,7 +13386,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 @@ -13087,24 +13395,24 @@ It is possible to place several search areas validation:: NON NO - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: OUI YES - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: editer ma note Modify my notes - mobile/lightbox/basket_element.html.twig + mobile/lightbox/basket_element.html.twig validation:: note Comments - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13114,10 +13422,10 @@ 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 web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig version @@ -13132,25 +13440,157 @@ It is possible to place several search areas video Video - web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig - + video range extractor - Video Chapter Editing + Video Chapter Editing actions/Tools/videoEditor.html.twig video tool - Video Tools + Thumbnail Tools actions/Tools/videoEditor.html.twig + + workzone:datepicker:april + April + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:august + August + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:closeText + Close + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:currentText + Current + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:december + December + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:february + February + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:friday + Friday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:january + January + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:july + July + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:june + June + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:march + March + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:may + May + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:monday + Monday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:nextText + Next + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:november + November + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:october + October + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:prevText + Previous + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:saturday + Saturday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:september + September + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:sunday + Sunday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:thursday + Thursday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:tuesday + Tuesday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:wednesday + Wednesday + prod/WorkZone/Basket.html.twig + + + workzone:feedback:expiration-closed + Feedback closed on + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + Feedback open until + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:update + Update Date + prod/WorkZone/Basket.html.twig + yes Yes - web/account/sessions.html.twig web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig you are about to change the representation thumbnail of your video diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index ee69b1cc05..2ca281125a 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.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. @@ -23,8 +23,15 @@ This avoids anonymous users to access to the content of the push if they were able to get the display url through a forwarded mail for example. - 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 + 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 @@ -105,15 +112,14 @@ %Total% results %Total% résultats - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents %basket_length% documents - mobile/lightbox/validate.html.twig - web/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/validate.html.twig %countable% documents can not be modified. @@ -186,8 +192,9 @@ %nb_records% records %nb_records% enregistrement(s) + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -206,7 +213,7 @@ selectionnes]]> sélectionnés]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -247,7 +254,7 @@ %quantity% records added %quantity% enregistrements ajoutés Controller/Prod/BasketController.php - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php %quantity% records moved @@ -271,8 +278,8 @@ %record_count% records match the unique identifier : - %record_count% enregistrements correspondent à des identifiants uniques existants : - prod/upload/lazaret.html.twig + %record_count% enregistrements correspondent à des identifiants uniques existants: + prod/upload/lazaret.html.twig %s field has been created with success. @@ -287,12 +294,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% @@ -331,7 +338,7 @@ %user% s'est enregistre sur une ou plusieurs %before_link% scollections %after_link% - %user% souhaite accéder à une ou plusieurs %before_link% scollections %after_link% + %user% souhaite accéder à une ou plusieurs %before_link% collections %after_link% eventsmanager/notify/autoregister.php @@ -342,7 +349,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 @@ -377,17 +384,17 @@ (validation) a envoyer Rapport de validation à envoyer - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) envoyee Rapport de validation envoyé - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) session terminee Session terminée - web/lightbox/index.html.twig + web/lightbox/index.html.twig *Phraseanet Navigator* is a smartphone application that allow user to connect on this instance @@ -402,8 +409,7 @@ 1 result 1 résultat - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -448,8 +454,8 @@ A A - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig A document has been quarantined @@ -469,22 +475,22 @@ A file with the same UUID already exists in database Un fichier avec le même UUID existe déjà dans la base de données - Border/Checker/UUID.php + Border/Checker/UUID.php A file with the same checksum already exists in database Un fichier avec la même somme de contrôle existe déjà dans la base de données - Border/Checker/Sha256.php + Border/Checker/Sha256.php A file with the same filename already exists in database Un fichier avec le même nom existe déjà dans la base de données - Border/Checker/Filename.php + Border/Checker/Filename.php 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 @@ -513,7 +519,7 @@ A value exceeds the maximum allowable length - Le contenu saisi dépasse la quantité maximum de caractères autorisés + Le contenu saisi dépasse la quantité maximum de caractères autorisée Bridge/Api/Youtube.php @@ -526,9 +532,9 @@ Webhook API TaskManager/Job/WebhookJob.php - + AR - AR + AR Form/Configuration/CustomLinkFormType.php @@ -544,8 +550,8 @@ Access Accès - actions/Feedback/List-Share.html.twig web/admin/editusers.html.twig + actions/Feedback/List-Share.html.twig Access code @@ -612,32 +618,32 @@ Accuse de reception Accusé de réception Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Accuse de reception indisponible, vous n'avez pas declare d'adresse email - Accusé de récéption indisponible ; vous n'avez pas déclaré d'adresse e-mail + Accusé de réception indisponible; vous n'avez pas déclaré d'adresse e-mail web/common/dialog_export.html.twig Action Forbidden : You are not the publisher Action non autorisée: Vous n'êtes pas la personne qui a publié - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php Actions Actions - Bridge/Dailymotion/actionelements.html.twig Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig + Bridge/Dailymotion/actionelements.html.twig Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig + Bridge/Youtube/actionelements.html.twig Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig Activate highlight Activer le surlignage (beta). Impacte les performances de recherche - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -649,8 +655,8 @@ Activer Activer admin/databox/databox.html.twig - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Activer le grant_type de type password pour votre application @@ -671,19 +677,19 @@ Add Ajouter prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig - prod/User/Add.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/User/Add.html.twig - + Add a new field - Ajouter un champ + Ajouter un champ admin/fields/templates.html.twig - + Add a list - Add a list + Ajouter une liste actions/Feedback/lists-all.html.twig @@ -691,9 +697,9 @@ Ajouter un nouveau champ admin/fields/templates.html.twig - + Add a position - Ajouter un position + Ajouter une position Controller/Prod/LanguageController.php @@ -701,19 +707,19 @@ Ajouter un administrateur Phraseanet web/admin/dashboard.html.twig - + Add an end point - Ajout point de sortie + Ajout point de sortie Controller/Prod/LanguageController.php - + Add an entry point - Ajout point d'entré + Ajout point d'entrée Controller/Prod/LanguageController.php - + Add new range - Nouveaux Chapitre + Nouveau Chapitre Controller/Prod/LanguageController.php @@ -755,67 +761,73 @@ Advanced Search Recherche avancée - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig - + Advanced mode - Advanced mode + Mode avancé actions/Feedback/list.html.twig - + Advanced settings - Réglages avancé + Réglages avancés web/admin/subdefs.html.twig Affichage Affichage - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Afficher au démarrage - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive Afficher la notice - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre Afficher le titre - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status Afficher les Status - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Afficher une icône - web/prod/index.html.twig + web/prod/index.html.twig After metadata Dans l'infobulle de description, après les métadonnées - web/prod/index.html.twig + web/prod/index.html.twig + + + Aggregated + Agrégé + admin/search-engine/general-aggregation.html.twig Aggregation 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 @@ -827,9 +839,9 @@ Ajouter ma selection courrante Ajouter ma sélection courante + prod/orders/order_item.html.twig prod/Baskets/Create.html.twig prod/Story/Create.html.twig - prod/orders/order_item.html.twig Ajouter un nouvel utilisateur @@ -850,6 +862,7 @@ All Tout Form/Configuration/CustomLinkFormType.php + task-manager/task-editor/subdefs.html.twig WorkZone/Browser/Browser.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig @@ -857,17 +870,11 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - task-manager/task-editor/subdefs.html.twig All these conditions Toutes les conditions - web/prod/index.html.twig - - - All values - Toutes les valeurs - admin/fields/templates.html.twig + web/prod/index.html.twig Aller a @@ -877,7 +884,7 @@ Allow the website to be indexed by search engines like Google Permettre l'indexation du site par des moteurs de recherche (comme Google) - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Allowed @@ -929,39 +936,32 @@ Autoriser à faire des diffusions web/admin/editusers.html.twig - + Alphabetic asc - Alphabétique asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + Alphabétique asc + 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 + Alphabétique desc + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. Supprimer également les enregistrements appartenant à des reportages - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm.html.twig An error occured Une erreur est survenue. - Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxesController.php + Controller/Prod/MoveCollectionController.php + Controller/Prod/BasketController.php + Controller/Prod/ToolsController.php + Controller/Prod/LazaretController.php + Controller/Prod/StoryController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php @@ -973,17 +973,30 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php - Controller/Prod/StoryController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxesController.php + Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php web/admin/users.html.twig - admin/databox/databox.html.twig web/admin/databases.html.twig + admin/databox/databox.html.twig + task-manager/task-editor/task.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - task-manager/task-editor/task.html.twig + + + An error occured when wanting to change status! + Une erreur est survenue lors de la modification du status-bit! + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists @@ -1019,13 +1032,14 @@ An error occurred Une erreur est survenue - Order/Controller/ProdOrderController.php - Controller/Admin/DataboxController.php - Controller/Admin/SearchEngineController.php - Controller/Admin/CollectionController.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Admin/SearchEngineController.php + Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Order/Controller/ProdOrderController.php web/admin/statusbit.html.twig @@ -1056,7 +1070,7 @@ Aperture Ouverture - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -1117,8 +1131,8 @@ Apply a template Appliquer un modèle - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Apply changes @@ -1144,8 +1158,8 @@ Archive Archiver - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Are you sure you want delete users rights ? @@ -1197,7 +1211,7 @@ Aucun Aucun - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1212,7 +1226,7 @@ Aucun statut editable Aucun status à éditer - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1253,7 +1267,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1266,20 +1280,20 @@ Media/Subdef/Audio.php Media/Subdef/Video.php - + Audio Samplerate - Fréquence d'échantillonnage - SearchEngine/Elastic/ElasticsearchOptions.php + Fréquence d'échantillonnage + SearchEngine/Elastic/ElasticsearchOptions.php Audio channel Canal audio Media/Subdef/Audio.php - + Audio codec - Audio codec - SearchEngine/Elastic/ElasticsearchOptions.php + Encodeur Audio + SearchEngine/Elastic/ElasticsearchOptions.php AudioSamplerate @@ -1355,20 +1369,20 @@ Autorisation d'acces Autorisation d'accès - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autoriser Autoriser - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autorisez-vous l'application %application_name% a acceder a votre contenu sur %home_title% ? Autorisez-vous l'application %application_name% a accéder à votre contenu sur %home_title% ? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Available in multi-export tab @@ -1383,11 +1397,11 @@ Back Retour - mobile/lightbox/basket_element.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/basket_element.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Back to Feedback @@ -1425,9 +1439,9 @@ Base %base% Base %base% + web/admin/editusers_timelimit_sbas.html.twig web/admin/editusers_quotas.html.twig web/admin/editusers_timelimit.html.twig - web/admin/editusers_timelimit_sbas.html.twig Base could not be created @@ -1439,6 +1453,11 @@ Base vidée avec succès Controller/Admin/DataboxController.php + + Basket + Basket + prod/WorkZone/Macros.html.twig + Basket created Panier créé @@ -1467,7 +1486,7 @@ Basket is not found Panier non trouvé - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1507,9 +1526,9 @@ Browse Baskets Parcourir les paniers - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1519,7 +1538,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% @@ -1531,13 +1550,13 @@ By default it is available for admins - Par défaut cette option est disponible pour les administrateurs. + Par défaut, cette option est disponible pour les administrateurs. Form/Configuration/FtpExportFormType.php By field Par champ - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1547,20 +1566,20 @@ Camera Model Type d'appareil numérique - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig Cancel Annuler Controller/Prod/LanguageController.php - prod/actions/delete_records_confirm.html.twig + user/import/view.html.twig + task-manager/task-editor/task.html.twig + admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig actions/Property/type.html.twig actions/Property/index.html.twig - prod/User/Add.html.twig - task-manager/task-editor/task.html.twig - user/import/view.html.twig - admin/fields/templates.html.twig + prod/User/Add.html.twig Cancel all @@ -1581,7 +1600,7 @@ Carousel Carrousel - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Categorie @@ -1671,7 +1690,7 @@ Certaines donnees du panier ont change Certaines données du panier ont changé - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -1685,7 +1704,7 @@ Certains champs sont obligatoires, veuillez les remplir - Certains champs sont obligatoires, veuillez les completer + Certains champs sont obligatoires, veuillez les compléter web/common/dialog_export.html.twig @@ -1698,15 +1717,15 @@ Changer mon adresse e-mail web/account/reset-email.html.twig - + Change play speed - Vitesse de lecture + Vitesse de lecture Controller/Prod/LanguageController.php - + Changes for rotation will be applied only on the sub-definitions of "image" type. - Les rotations s'applique uniquement au fichier de type "Image". + Les rotations s'appliquent uniquement aux fichiers au format PNG et JPEG. actions/Tools/index.html.twig @@ -1727,8 +1746,6 @@ Choisir Choisir - prod/Baskets/Reorder.html.twig - prod/Story/Reorder.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -1736,23 +1753,20 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig + prod/Baskets/Reorder.html.twig + prod/Story/Reorder.html.twig Choose a new password Choisissez un nouveau mot de passe - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Choose the title of the document to export Choix du nom de fichier à l'export du document Form/Configuration/ActionsFormType.php - - City - Ville - prod/User/Add.html.twig - Civility Civilité @@ -1761,8 +1775,8 @@ Clear Effacer - admin/task-manager/log_task.html.twig admin/task-manager/log_scheduler.html.twig + admin/task-manager/log_task.html.twig Clear list @@ -1798,7 +1812,7 @@ Codec Audio Codec audio - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1809,9 +1823,9 @@ Collection Collection - prod/Story/Create.html.twig - prod/upload/lazaret.html.twig admin/databox/details.html.twig + prod/Story/Create.html.twig + prod/upload/lazaret.html.twig Collection %collection% @@ -1827,7 +1841,7 @@ Collection order Ordre des collections - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1839,16 +1853,16 @@ Espace colorimétrique web/common/technical_datas.html.twig - + Colorspace - Espace colorimétrique - SearchEngine/Elastic/ElasticsearchOptions.php + Espace colorimétrique + SearchEngine/Elastic/ElasticsearchOptions.php Commande Commande + eventsmanager/notify/orderdeliver.php eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1858,13 +1872,13 @@ Commandes Commandes - web/common/menubar.html.twig + web/common/menubar.html.twig Company Entreprise - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig prod/User/Add.html.twig @@ -1898,7 +1912,7 @@ Configuration Configuration - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1907,7 +1921,7 @@ Confirm reset users rights before applying template - Confirmez la réinitialisation les droits utilisateurs avant d'appliquer le modèle. + Confirmez la réinitialisation des droits utilisateur avant d'appliquer le modèle. web/admin/index.html.twig @@ -1923,13 +1937,13 @@ Connection Connexion - login/providers/mapping.html.twig - login/providers/mapping.html.twig + login/oauth/login.html.twig + web/login/index.html.twig + web/login/index.html.twig login/providers/bind.html.twig login/providers/bind.html.twig - web/login/index.html.twig - web/login/index.html.twig - login/oauth/login.html.twig + login/providers/mapping.html.twig + login/providers/mapping.html.twig Connection is OK but database does not exists or can not be accessed @@ -1944,7 +1958,7 @@ Connection to FTP succeed Connexion au serveur FTP effectuée. - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Consultez en ligne les pré-requis et la configuration du serveur web @@ -1954,7 +1968,7 @@ Contains Contient - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -1974,7 +1988,7 @@ Cooliris Cooliris - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Copiez le code ci-dessous, retournez dans votre application et collez-le a l'endroit requis : @@ -2009,17 +2023,17 @@ Couleur de selection Couleur de sélection - web/prod/index.html.twig + web/prod/index.html.twig Country Pays - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig - + Create a user - Create a user + Ajouter un utilisateur actions/Feedback/list.html.twig @@ -2030,7 +2044,7 @@ Create index Créer les index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Creation date @@ -2105,9 +2119,9 @@ Créer une application pour commencer à utiliser l'API Phraseanet web/developers/applications.html.twig - + Ctrl - Ctrl + Ctrl Controller/Prod/LanguageController.php @@ -2115,11 +2129,11 @@ Total cumulé admin/databox/details.html.twig - + Current configuration contains some errors - La configuration contient des erreurs - admin/fields/templates.html.twig + La configuration contient des erreurs + 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 @@ -2136,9 +2150,9 @@ Session en cours web/account/sessions.html.twig - + Custom - Custom + Personnaliser web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -2147,14 +2161,14 @@ Entrée/Sortie Dublin Core admin/fields/templates.html.twig - + DE - DE + DE Form/Configuration/CustomLinkFormType.php - + DU - DU + DU Form/Configuration/CustomLinkFormType.php @@ -2217,31 +2231,31 @@ 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 Date de Création admin/publications/list.html.twig - + Date Updated - Date Updated - web/prod/index.html.twig + Date de modification + web/prod/index.html.twig Date de connexion Date de connexion web/account/sessions.html.twig - + Date de création - Date de création + Date de création prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig @@ -2252,22 +2266,22 @@ prod/orders/order_box.html.twig prod/orders/order_box.html.twig - + Date de modification - Date de modification + Date de modification prod/Baskets/Reorder.html.twig prod/Story/Reorder.html.twig Date(s) from field(s) Date(s) - web/prod/index.html.twig + web/prod/index.html.twig De De - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Deadline @@ -2289,7 +2303,7 @@ Deconnexion Déconnexion - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Decouvrez la documentation @@ -2298,13 +2312,13 @@ Default TTL in seconds of sub-definition url - Durée de validité, en secondes, des URL JWT pour les sous-définition et documents - Form/Configuration/GeneralFormType.php + Durée de validité, en secondes, des URL JWT pour les sous-définitions et documents + Form/Configuration/GeneralFormType.php Default basket Panier par défaut - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2323,7 +2337,7 @@ Default searched type - Type de média recherchés par défaut + Type de média recherché par défaut Form/Configuration/SearchEngineFormType.php @@ -2338,12 +2352,12 @@ Defined by admin - Définit par l'admin - web/prod/index.html.twig + Défini par l'admin + web/prod/index.html.twig Defined in Apache configuration - Définie dans la configuration de Apache. + Défini dans la configuration de Apache. Form/Configuration/ExecutablesFormType.php @@ -2359,9 +2373,9 @@ Delete Supprimer - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Delete account successfull @@ -2371,17 +2385,17 @@ Delete all users rights Supprimer tous les droits de l'utilisateur - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Delete basket Supprimer le panier - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig - + Delete current - Delete current + Supprimer la sélection Controller/Prod/LanguageController.php @@ -2389,14 +2403,14 @@ Suppression d'enregistrements Controller/Prod/LanguageController.php - + Delete the selection - Delete the selection + Supprimer la sélection actions/Feedback/list.html.twig - + Delete the subview ? - Delete the subview ? + Supprimer la sous définition ? web/admin/subdefs.html.twig @@ -2407,9 +2421,9 @@ Deny Refuser + login/oauth/authorize-access.html.twig prod/orders/order_item.html.twig prod/orders/order_item.html.twig - login/oauth/authorize-access.html.twig Deplacement %n_element% elements @@ -2429,9 +2443,9 @@ prod/results/feeds_entry.html.twig prod/results/entry.html.twig - + Derniers envois - Derniers envois + Derniers envois web/developers/application.html.twig @@ -2442,29 +2456,29 @@ Description Description + web/developers/application_form.html.twig Bridge/Dailymotion/upload.html.twig Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/upload.html.twig Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig prod/Tooltip/DCESFieldInfo.html.twig - web/developers/application_form.html.twig Deselect all Tout désélectionner - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig - + Design of personalization logo section - Design de la section de personnalisation du logo - Form/Configuration/GeneralFormType.php + Logo + Form/Configuration/GeneralFormType.php Detailed view URL @@ -2491,8 +2505,8 @@ Dimension Dimensions Media/Subdef/Image.php - Media/Subdef/Unknown.php Media/Subdef/Video.php + Media/Subdef/Unknown.php Disable document type sharing @@ -2517,17 +2531,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 @@ -2553,13 +2567,12 @@ Do you want to send your report ? Souhaitez-vous envoyer votre rapport ? Phrasea/Controller/LightboxController.php - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2574,7 +2587,7 @@ Document has been successfully substitued Le document a été substitué - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% @@ -2627,7 +2640,7 @@ Drop index Supprimer les index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Duree @@ -2715,7 +2728,7 @@ Edition impossible Edition impossible - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -2735,19 +2748,19 @@ ElasticSearch index name Nom de l'index Elasticsearch - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch server host Hôte du serveur Elasticsearch - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch service port Port de service Elasticsearch - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -2758,7 +2771,7 @@ Email '%email%' for login '%login%' already exists in database - L'adresse e-mail '%email%' pour l'identifiant '%login%' existe déjà dans le base + L'adresse e-mail '%email%' pour l'identifiant '%login%' existe déjà dans la base Controller/Admin/UserController.php @@ -2854,7 +2867,7 @@ En cliquant sur "ajouter" vous certifiez que vous possedez les droits pour le contenu ou que vous etes autorisé par le proprietaire à rendre le contenu accessible au public sur YouTube, et qu'il est autrement conforme aux Conditions d'utilisation de YouTubesitue a %lien_term_youtube% - En cliquant sur "Ajouter" vous certifiez que vous possédez les droits pour le contenu ou que vous êtes autorisé par le propriétaire à rendre le contenu accessible sur YouTube. Ce contenu est également conforme aux Conditions d'utilisation YouTube situées à l'adresse %lien_term_youtube% + En cliquant sur "Ajouter", vous certifiez que vous possédez les droits pour le contenu ou que vous êtes autorisé par le propriétaire à rendre le contenu accessible sur YouTube. Ce contenu est également conforme aux Conditions d'utilisation YouTube situées à l'adresse %lien_term_youtube% Bridge/Youtube/upload.html.twig @@ -2936,7 +2949,7 @@ Enable this setting to share on Facebook and Twitter - Activer le partage par permalien et ou sur les reseaux sociaux Facebook et Twitter etc ... + Activer le partage par permalien et/ou sur les réseaux sociaux Facebook, Twitter, etc ... Form/Configuration/ActionsFormType.php @@ -2955,10 +2968,10 @@ web/account/sessions.html.twig web/account/sessions.html.twig - + End Range - End Range - Controller/Prod/LanguageController.php + End Range + Controller/Prod/LanguageController.php End session activity @@ -2998,7 +3011,7 @@ Equals Egale - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3008,8 +3021,8 @@ Erreur ! Erreur - mobile/lightbox/error.html.twig web/lightbox/error.html.twig + mobile/lightbox/error.html.twig Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas @@ -3086,12 +3099,12 @@ Error while connecting to FTP Erreur de connexion FTP - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php 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 @@ -3102,8 +3115,8 @@ Error while sending the file Erreur lors de l'envoi du fichier - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Error while uploading @@ -3134,14 +3147,14 @@ Etes vous sur de supprimer %number% videos ? - Etes vous certain de vouloir supprimer %number% video(s )? + Etes vous certain de vouloir supprimer %number% vidéo(s )? Bridge/Dailymotion/video_deleteelement.html.twig Bridge/Youtube/video_deleteelement.html.twig Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3153,6 +3166,11 @@ Paramètres d'exécutables Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + La date d'expiration a été mise à jour avec succès! + Controller/Prod/PushController.php + Export Exporter @@ -3160,15 +3178,15 @@ Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php - + Export ranges - Export ranges - Controller/Prod/LanguageController.php + Export ranges + Controller/Prod/LanguageController.php Export saved in the waiting queue Export ajouté dans la file d'attente. - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php FR @@ -3199,10 +3217,10 @@ Feedback Validation Controller/Prod/LanguageController.php + prod/WorkZone/Macros.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig Feeds @@ -3256,12 +3274,12 @@ File is not present in quarantine anymore, please refresh - Ce fichier n'est plus en quarantaine, rafraichissez la page + Ce fichier n'est plus en quarantaine, rafraîchissez la page + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php - Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php File is too big : 64k max @@ -3291,13 +3309,13 @@ Filename Nom du fichier - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles Fils disponibles - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig Filter @@ -3317,20 +3335,20 @@ First/Last Name Prénom / Nom - actions/Feedback/ListsMacros.html.twig web/admin/users.html.twig web/admin/users.html.twig + actions/Feedback/ListsMacros.html.twig Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig - + FlashFired - Avec Flash - SearchEngine/Elastic/ElasticsearchOptions.php + Avec Flash + SearchEngine/Elastic/ElasticsearchOptions.php Flatten layers @@ -3346,7 +3364,7 @@ Force authentication Forcer l'authentification - prod/templates/push.html.twig + prod/templates/push.html.twig Force sending of the document ? @@ -3366,10 +3384,10 @@ Forgot password? Mot de passe oublié ? - login/providers/mapping.html.twig - login/providers/bind.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig Forgot your password? @@ -3386,10 +3404,10 @@ Nombre d'images par seconde Media/Subdef/Video.php - + FrameRate - Cadence - SearchEngine/Elastic/ElasticsearchOptions.php + Cadence + SearchEngine/Elastic/ElasticsearchOptions.php Frequence d'echantillonage @@ -3409,7 +3427,7 @@ Gallery Galerie - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php General configuration @@ -3421,6 +3439,11 @@ Paramètres généraux web/admin/dashboard.html.twig + + Generate-cterms + Générer les termes candidats + admin/fields/templates.html.twig + Generates a flexpaper flash file Générer un fichier flexpaper flash @@ -3448,14 +3471,14 @@ Generates an image - Generates an image + Génère une image Media/Subdef/Image.php Media/Subdef/Unknown.php Geo Search Recherche géolocalisée - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3467,35 +3490,35 @@ Obtenir une notification quand un export par e-mail échoue eventsmanager/notify/downloadmailfail.php - + Get setting form index - Obtenir des Réglages de l'index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + Obtenir les réglages de l'index + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side. Donne la possibilité à votre application de communiquer avec Phraseanet. Ce Webhook peut être utilisé pour déclencher des actions sur l'application distante. web/developers/application.html.twig - + Go 1 frame backward - Reculer d'une image - Controller/Prod/LanguageController.php - - - Go 1 frame forward - Avancer d'une Image + Reculer d'une image Controller/Prod/LanguageController.php - - Go to end point - Aller au point de sortie + + Go 1 frame forward + Avancer d'une image Controller/Prod/LanguageController.php - + + Go to end point + Aller au point de sortie + Controller/Prod/LanguageController.php + + Go to start point - Aller au point d'entrée - Controller/Prod/LanguageController.php + Aller au point d'entrée + Controller/Prod/LanguageController.php Good @@ -3530,7 +3553,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 +3568,9 @@ Guest Invité - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + mobile/common/menubar.html.twig Guest access @@ -3558,6 +3582,16 @@ Vous devez vous authentifier pour télécharger. web/common/dialog_export.html.twig + + Gui-editable + Editable dans l'interface Graphique (Prod) + admin/fields/templates.html.twig + + + Gui-visible + Visible dans l'interface graphique + admin/fields/templates.html.twig + HD Download Téléchargement HD @@ -3566,14 +3600,14 @@ Hello %username% Bonjour %username%, - api/auth/end_user_authorization.html.twig - api/auth/native_app_access_token.html.twig api/auth/end_user_authorization.html.twig + api/auth/native_app_access_token.html.twig + api/auth/end_user_authorization.html.twig Help Aide - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3588,16 +3622,16 @@ Home Accueil - mobile/lightbox/basket_element.html.twig - 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 + mobile/lightbox/basket_element.html.twig + mobile/lightbox/feed.html.twig + mobile/lightbox/validate.html.twig Homepage slideshow Diaporama de page d'accueil - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Hyperfocal distance @@ -3618,7 +3652,7 @@ ISO ISO - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php ISO sensibility @@ -3628,7 +3662,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 @@ -3652,7 +3686,7 @@ If you plan to store large files, be sure it will fit in these directories. - Si vous prévoyez de stocker des fichiers volumineux, assurez vous que les répertoires de stockages sont prévus pour. + Si vous prévoyez de stocker des fichiers volumineux, assurez-vous que les répertoires de stockage sont prévus pour. web/setup/step2.html.twig @@ -3673,7 +3707,7 @@ Image Image - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3683,7 +3717,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 +3733,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 +3745,7 @@ Incorrect please try again Incorrect. Veuillez réessayer - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3731,9 +3765,9 @@ Informations Informations - web/account/base.html.twig web/admin/dashboard.html.twig admin/user/registrations.html.twig + web/account/base.html.twig Informations personnelles @@ -3769,14 +3803,14 @@ Invalid file format Format de fichier incorrect - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid file type Type de fichier non valide - prod/upload/upload-flash.html.twig admin/collection/collection.html.twig + prod/upload/upload-flash.html.twig Invalid file type, only (%supported_file_types%) file formats are supported @@ -3793,8 +3827,8 @@ Invalid labels parameter Paramètre de label incorrect - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid link. @@ -3803,7 +3837,7 @@ Invalid password provided - Mot de passe fournis invalide. + Mot de passe fourni invalide. Controller/Root/AccountController.php @@ -3867,17 +3901,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 @@ -3920,10 +3954,10 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language + + Language selection Langue - web/prod/index.html.twig + web/prod/index.html.twig Last Name @@ -3953,7 +3987,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 +4089,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 @@ -4070,14 +4104,14 @@ Lightbox Lightbox - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Limite temporelle Liste temporelle - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Limited vocabulary @@ -4155,10 +4189,10 @@ Login Identifiant Form/Login/PhraseaAuthenticationForm.php - actions/Feedback/ListsMacros.html.twig - login/providers/mapping.html.twig - login/providers/bind.html.twig login/oauth/login.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig + actions/Feedback/ListsMacros.html.twig Login %login% already exists in database @@ -4178,8 +4212,8 @@ Login to link your account Connectez-vous pour lier votre compte - login/providers/mapping.html.twig login/providers/bind.html.twig + login/providers/mapping.html.twig Logs @@ -4190,7 +4224,7 @@ Ma derniere question Ma dernière question - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4257,6 +4291,16 @@ Masque web/admin/editusers_masks.html.twig + + Matomo Analytics identifier + Propriétés Matomo Analytics (site id) + Form/Configuration/GeneralFormType.php + + + Matomo Analytics url + URL Matomo Analytics + Form/Configuration/GeneralFormType.php + Maximum megabytes allowed for download Limite maximale autorisée par téléchargement en Megaoctet (Mo) @@ -4276,7 +4320,7 @@ Message Message Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Message automatique de Phraseanet @@ -4296,7 +4340,7 @@ MimeType MimeType - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Minimum number of letters before truncation @@ -4311,8 +4355,8 @@ Missing labels parameter Paramètre de label manquant - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Missing mandatory parameter %parameter% @@ -4347,7 +4391,7 @@ Mode de presentation Mode de présentation - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4357,8 +4401,8 @@ Models Modèles - actions/Feedback/list.html.twig admin/user/registrations.html.twig + actions/Feedback/list.html.twig Modify @@ -4386,10 +4430,10 @@ Déplacer les %countable% enregistrements sélectionnés vers la collection choisie dans la liste. prod/actions/collection_default.html.twig - + Move down range - Déplacer le chapitre vers le bas - Controller/Prod/LanguageController.php + Déplacer le chapitre vers le bas + Controller/Prod/LanguageController.php Move one record to the chosen collection in the list. @@ -4399,7 +4443,7 @@ Move up range Déplacer le chapitre vers le haut - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Moves records @@ -4431,31 +4475,31 @@ Name Nom Controller/Prod/LanguageController.php - Bridge/Dailymotion/playlist_createcontainer.html.twig - actions/Download/prepare.html.twig - prod/templates/push.html.twig admin/fields/templates.html.twig + actions/Download/prepare.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + prod/templates/push.html.twig Name or email Nom ou e-mail admin/publications/fiche.html.twig - + Navigate to end point - Aller au point de sortie + Aller au point de sortie Controller/Prod/LanguageController.php - + Navigate to entry point - Aller au point d'entrée + Aller au point d'entrée Controller/Prod/LanguageController.php Ne pas autoriser Ne pas autoriser - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Ne pas creer de DataBox maintenant @@ -4471,14 +4515,14 @@ New password Nouveau mot de passe - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New password (confirmation) Confirmer le nouveau mot de passe - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New task @@ -4488,15 +4532,15 @@ Next Suivants - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig No Non - web/account/account.html.twig web/developers/applications.html.twig + web/account/account.html.twig No URL available @@ -4531,7 +4575,7 @@ No document selected Aucun document sélectionné - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig No elements to push @@ -4566,7 +4610,7 @@ No preview available Pas de prévisualisation disponible - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4581,8 +4625,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 @@ -4617,8 +4660,8 @@ Nom du nouveau panier Nom du nouveau panier - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig Non-Restreinte (publique) @@ -4641,11 +4684,11 @@ None of the selected records can be printed Aucun des documents sélectionnés ne peut être imprimé - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig None of the selected records can be pushed. - Aucun des enregistrements sélectionnés ne peut être envoyés par Push. + Aucun des enregistrements sélectionnés ne peut être envoyé par Push. prod/actions/Push.html.twig @@ -4661,7 +4704,8 @@ Not aggregated Non agrégé - admin/fields/templates.html.twig + admin/search-engine/general-aggregation.html.twig + admin/fields/templates.html.twig Notification par email @@ -4671,13 +4715,13 @@ Notifications Notifications - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales Notifications globales - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4727,13 +4771,13 @@ Number of replicas Nombre de répliques (Replica Shards) - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Number of shards Nombre de Shards Elastic - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -4750,28 +4794,28 @@ Ok Ok - prod/actions/delete_records_confirm.html.twig admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig One document can not be modified. Un document ne peut être modifié. prod/actions/collection_default.html.twig - + One frame backward - Reculer d'une image + Reculer d'une image Controller/Prod/LanguageController.php - + One frame forward - Avancer d'une image + Avancer d'une image Controller/Prod/LanguageController.php One of these conditions Une de ces conditions - web/prod/index.html.twig + web/prod/index.html.twig Only %nbEditableDocuments% records can be modified. @@ -4796,9 +4840,9 @@ Or login with Ou se connecter avec - web/login/register.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + web/login/register.html.twig api/auth/end_user_authorization.html.twig @@ -4824,7 +4868,7 @@ Orders manager Gestionnaire des commandes eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -4834,7 +4878,7 @@ Orientation Orientation - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Original name @@ -4871,19 +4915,19 @@ Paniers Paniers - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - web/account/account.html.twig - web/lightbox/index.html.twig + web/lightbox/validate.html.twig + web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/account/account.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Par %author% Par %author% - mobile/lightbox/feed.html.twig prod/results/feeds_entry.html.twig prod/results/entry.html.twig + mobile/lightbox/feed.html.twig Password @@ -4922,11 +4966,6 @@ Pause Controller/Prod/LanguageController.php - - Pays - Pays - prod/User/Add.html.twig - Periodically fetches an FTP repository content locally Récupère en local le contenu d'un répertoire FTP @@ -4985,7 +5024,7 @@ Play - Play + Lecture Controller/Prod/LanguageController.php @@ -5119,10 +5158,10 @@ Preferences Préférences - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5137,24 +5176,24 @@ 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 - Presets + Réglages prédéfinis web/admin/subdefs.html.twig Previous Précédent - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig Print @@ -5164,8 +5203,8 @@ Problemes de connexion ? Problème de connexion ? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Process the registration @@ -5195,10 +5234,10 @@ Publications Publications - web/prod/index.html.twig - admin/publications/wrapper.html.twig web/admin/tree.html.twig - web/common/menubar.html.twig + admin/publications/wrapper.html.twig + web/prod/index.html.twig + web/common/menubar.html.twig Publier @@ -5219,8 +5258,9 @@ Push Push - eventsmanager/notify/push.php Controller/Prod/LanguageController.php + eventsmanager/notify/push.php + prod/WorkZone/Macros.html.twig Push configuration @@ -5235,26 +5275,26 @@ Push::filter on companies Société - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on countries Pays - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on emails E-mail - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on login Identifiant - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on name @@ -5269,8 +5309,8 @@ Push::filter starts Commence par - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::une validation est une demande d'appreciation a d'autres personnes @@ -5309,80 +5349,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,25 +5437,25 @@ 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 Ordonner prod/Baskets/Reorder.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod/Story/Reorder.html.twig @@ -5452,22 +5492,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 +5547,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 +5567,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 @@ -5537,7 +5577,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Record removed from story Enregistrement supprimé du reportage - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Record_id @@ -5552,7 +5592,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 @@ -5568,10 +5608,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Register Inscription - web/login/register-classic.html.twig - web/login/register.html.twig - web/login/register-provider.html.twig login/include/register-link-block.html.twig + web/login/register-classic.html.twig + web/login/register-provider.html.twig + web/login/register.html.twig Register approbation @@ -5586,19 +5626,19 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Reglages:: reglages d acces guest Réglages d'accès invité - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Reglages:: reglages d inscitpition automatisee Réglages d'auto-inscription - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Relevance Pertinence - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5616,10 +5656,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Media/Subdef/Image.php Media/Subdef/Unknown.php - + Remove current Range - Supprimer le chapitre - Controller/Prod/LanguageController.php + Supprimer le chapitre + Controller/Prod/LanguageController.php Remove from basket @@ -5640,8 +5680,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Renew password Renouveler le mot de passe Notification/Mail/MailRequestPasswordUpdate.php - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Reorder collections @@ -5662,7 +5702,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 @@ -5875,20 +5915,25 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Save Sauvegarder - actions/Feedback/list.html.twig - web/account/change-password.html.twig - admin/search-engine/general-aggregation.html.twig + web/login/renew-password.html.twig + admin/search-engine/general-aggregation.html.twig admin/search-engine/elastic-search.html.twig task-manager/task-editor/task.html.twig web/developers/application.html.twig web/developers/application.html.twig - web/login/renew-password.html.twig + actions/Feedback/list.html.twig + web/account/change-password.html.twig Save all changes Sauvegarder toutes les modifications admin/fields/templates.html.twig + + Save as VTT + Sauvegarder + Controller/Prod/LanguageController.php + Save the list Sauvegarder la liste @@ -5922,8 +5967,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis SearchEngine settings Paramètres du moteur de recherche - web/setup/step2.html.twig web/admin/tree.html.twig + web/setup/step2.html.twig Security @@ -5934,6 +5979,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis See Voir WorkZone/Browser/Browser.html.twig + prod/WorkZone/Macros.html.twig See documentation about structure manipulation. @@ -5949,8 +5995,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis See my order Voir ma commande - Notification/Mail/MailInfoOrderCancelled.php Notification/Mail/MailInfoOrderDelivered.php + Notification/Mail/MailInfoOrderCancelled.php See others @@ -5970,7 +6016,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 ! @@ -5980,10 +6026,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Select all Tout sélectionner - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Select all collections @@ -5993,19 +6039,19 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Select files... Sélectionner des fichiers - prod/upload/upload.html.twig - prod/upload/upload-flash.html.twig + user/import/file.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig - user/import/file.html.twig admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig + prod/upload/upload.html.twig + prod/upload/upload-flash.html.twig Selected base(s) Sélectionner les Bases : - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6016,14 +6062,14 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Send Envoyer Controller/Prod/LanguageController.php + web/login/forgot-password.html.twig + web/admin/dashboard.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod/actions/Push.html.twig prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - web/admin/dashboard.html.twig - web/login/forgot-password.html.twig Send an email to the user to setup his password @@ -6056,7 +6102,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 @@ -6125,9 +6171,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Partager cette liste actions/Feedback/list.html.twig - + Shift - Shift + Shift Controller/Prod/LanguageController.php @@ -6139,7 +6185,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Shutter speed Vitesse d'obturateur - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -6165,7 +6211,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Single image Image seule - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Site web @@ -6175,14 +6221,14 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Size Taille - actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig Slide show Diaporama - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Some files are being downloaded @@ -6197,7 +6243,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Something went wrong Quelque chose s'est mal passé - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Something went wrong, please contact an administrator @@ -6232,9 +6278,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Source Source - prod/Tooltip/DataboxField.html.twig admin/fields/templates.html.twig admin/fields/templates.html.twig + prod/Tooltip/DataboxField.html.twig Sous-titre @@ -6258,10 +6304,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig - + Start Range - Start Range - Controller/Prod/LanguageController.php + Début de l'extrait + Controller/Prod/LanguageController.php Start by creating one by using the "add" button on the left ! @@ -6282,7 +6328,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 @@ -6302,10 +6348,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Stop Arrêter - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Stopped @@ -6316,16 +6362,18 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Stories Reportages Form/Configuration/SearchEngineFormType.php + prod/WorkZone/Macros.html.twig Story Not Found Reportage inconnu - Controller/Api/V1Controller.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php Story created Reportage créé - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story detached from the WorkZone @@ -6340,7 +6388,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Story updated Reportage mis à jour - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story_id @@ -6375,8 +6423,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 @@ -6397,16 +6445,22 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Successful removal Suppression effectuée - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php Successful update Mise à jour réussie + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -6414,16 +6468,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig + actions/Tools/videoEditor.html.twig Successfull connection @@ -6435,9 +6483,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Valeurs suggérées admin/collection/suggested_value.html.twig - + Suppr - Suppr + Suppression Controller/Prod/LanguageController.php @@ -6559,9 +6607,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Terms of use Conditions d'utilisation Controller/Prod/TOUController.php - web/admin/tree.html.twig + login/layout/base-layout.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + web/admin/tree.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6571,7 +6619,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis The URL you used is out of date, please login L'URL utilisée est périmé. Veuillez vous identifier. - Phrasea/ControllerProvider/Lightbox.php + Phrasea/ControllerProvider/Lightbox.php The Youtube servers have received too many calls from the same caller in a short amount of time. @@ -6582,7 +6630,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 +6650,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 @@ -6642,8 +6690,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis The file is too big Le fichier est trop gros - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The file was moved to the quarantine @@ -6655,11 +6703,16 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Les erreurs suivantes ont été détectées. user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped La publication a été suspendue - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The record was successfully created @@ -6700,7 +6753,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 @@ -6720,13 +6773,13 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Thesaurus Min score Hits minimum du Thésaurus - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Thesaurus branch Branche de thésaurus - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6756,8 +6809,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis This feed is public Ce flux est public - actions/publish/publish.html.twig admin/publications/list.html.twig + actions/publish/publish.html.twig This field is required @@ -6793,7 +6846,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 @@ -6813,7 +6866,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Thumbnail has been successfully substitued La vignette a été substituée - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Thumbnails directory is mounted to be accessible via HTTP, while other files are not. @@ -6829,23 +6882,23 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Titre Titre - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/upload.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/upload.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig - Bridge/Flickr/upload.html.twig - Bridge/Flickr/photo_modify.html.twig - prod/Story/Reorder.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/publications/list.html.twig + prod/Baskets/Reorder.html.twig + Bridge/Dailymotion/upload.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Youtube/upload.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig - + Toggle loop - Boucle + Activer la répétition Controller/Prod/LanguageController.php @@ -6872,12 +6925,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 +6956,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 +6981,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 @@ -6943,8 +6996,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis URL de callback Url de Callback - web/developers/application_form.html.twig web/developers/application.html.twig + web/developers/application_form.html.twig Un document commande @@ -6959,8 +7012,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Unable to add file to Phraseanet Impossible d'ajouter des fichiers à Phraseanet - Controller/Admin/FeedController.php Controller/Prod/UploadController.php + Controller/Admin/FeedController.php Unable to add usr to list @@ -6970,8 +7023,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Unable to authenticate with %provider_name% Impossible de s'authentifier avec %provider_name% - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php Unable to connect to MySQL server @@ -7013,8 +7066,13 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Unable to retrieve provider identity Impossible de récupérer l'identité auprès du fournisseur. - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php + + + Unable to save the expiration date + Impossible de sauvegarder la date d'expiration + Controller/Prod/PushController.php Unable to send the documents @@ -7051,15 +7109,15 @@ 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 une sélection "sans titre" - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php Unhandled Error @@ -7118,7 +7176,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 +7201,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 @@ -7155,15 +7213,15 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Utiliser un serveur SMTP Form/Configuration/EmailFormType.php - + Use an existing index - Use an existing index + Utiliser un index existant web/setup/step2.html.twig 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 @@ -7220,10 +7278,10 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Controller/Prod/LanguageController.php prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig + prod/templates/push.html.twig prod/templates/push.html.twig + prod/templates/push.html.twig User can see others choices @@ -7242,16 +7300,16 @@ 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 Utilisateurs Vocabulary/ControlProvider/UserProvider.php - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/admin/users.html.twig user/import/view.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Users must accept Terms of Use for each export @@ -7271,8 +7329,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis VALIDATION Validation - web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig + web/lightbox/agreement_box.html.twig Validate e-mail address @@ -7282,11 +7340,11 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Validation Validation - eventsmanager/notify/validationdone.php - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationdone.php lightbox/IE6/validate.html.twig @@ -7302,11 +7360,11 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Validations Validations - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + web/lightbox/validate.html.twig web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Validations received @@ -7341,17 +7399,17 @@ 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 Codec Vidéos Media/Subdef/Video.php - + Video codec - Video codec - SearchEngine/Elastic/ElasticsearchOptions.php + Codec vidéo + SearchEngine/Elastic/ElasticsearchOptions.php Videos @@ -7367,24 +7425,24 @@ 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 Paniers disponibles - mobile/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Voici vos validations en cours Demandes de validations en cours - mobile/lightbox/index.html.twig web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Votre adresse email @@ -7419,7 +7477,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Vous avez envoye une demande de validation de document sur ce panier Vous avez envoyé ce panier pour validation - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Vous avez recu des documents @@ -7431,11 +7489,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 +7596,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 ! @@ -7563,8 +7616,8 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Watch my access requests status Consulter l'état de ma demande d'accès - Notification/Mail/MailSuccessAccessRequest.php Notification/Mail/MailSuccessEmailConfirmationUnregistered.php + Notification/Mail/MailSuccessAccessRequest.php Watermark @@ -7644,15 +7697,15 @@ 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 Oui - web/account/account.html.twig user/import/view.html.twig web/developers/applications.html.twig + web/account/account.html.twig You are Admin @@ -7739,7 +7792,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You can not edit this story Vous ne disposez pas des droits suffisants pour éditer ce reportage - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php You can not upload files @@ -7765,17 +7818,17 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You do not have required rights to send these documents over FTP Vous ne disposez pas des droits requis pour transmettre ces documents par un export FTP. - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php You do not have rights to remove all selected documents. Are you sure ? Vous n'avez pas les droits nécessaires pour supprimer tous les documents sélectionnés. Etes-vous sûr ? - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have rights to remove selected documents Vous n'avez pas les droits pour supprimer les documents sélectionnés - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have the permission to move records to %collection% @@ -7800,7 +7853,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. @@ -7815,7 +7868,7 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You have to give your feedback at least on one document to send a report Vous devez donner au moins un avis pour envoyer un report - Phrasea/Controller/LightboxController.php + Phrasea/Controller/LightboxController.php You have to wait for an administrator approval for your access request @@ -7840,7 +7893,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 @@ -7861,12 +7914,12 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis You will no longer receive notifications at %old_email% Vous ne recevrez plus de notifications à l'adresse %old_email%. - Helper/User/Edit.php + Helper/User/Edit.php You will now receive notifications at %new_email% Vous recevrez désormais les notifications à l'adresse %new_email%. - Helper/User/Edit.php + Helper/User/Edit.php Your %provider_name% account matchs a Phraseanet account @@ -7952,150 +8005,148 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis a propos A propos - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig action : ajouter au panier Ajouter au panier + prod/preview/tools.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection Déplacer prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : editer Editer prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig prod/preview/caption.html.twig + web/prod/toolbar.html.twig action : exporter Exporter + web/lightbox/feed.html.twig + web/lightbox/validate.html.twig + lightbox/IE6/feed.html.twig + lightbox/IE6/validate.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig - web/prod/index.html.twig - web/lightbox/feed.html.twig - lightbox/IE6/feed.html.twig - lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/prod/index.html.twig action : outils Outils prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : print Imprimer prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : publier Publier 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 + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push Push prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : status Propriétés prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : supprimer Supprimer - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + web/prod/toolbar.html.twig action:: nouveau panier Nouveau panier - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Nouveau reportage - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider Valider - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::detacher Détacher - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::editer Editer - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::exporter Exporter - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::renommer Renommer - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig actual status @@ -8345,9 +8396,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Êtes-vous sûr de vouloir vider la collection ? admin/collection/collection.html.twig - + admin::base:collection: identifiant - Collection id ("base_id" coté API) + Collection id ("base_id" coté API) admin/collection/collection.html.twig @@ -8448,19 +8499,19 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Activité Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig + web/account/account.html.twig admin::compte-utilisateur adresse Adresse Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur changer mon mot de passe @@ -8472,9 +8523,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Code postal Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur confirmer la nouvelle adresse email @@ -8496,21 +8547,21 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis E-mail Controller/Admin/UserController.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur fax Fax Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur id utilisateur @@ -8521,35 +8572,35 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis admin::compte-utilisateur identifiant Identifiant Core/Provider/RegistrationServiceProvider.php + web/admin/users.html.twig + web/admin/editusers.html.twig + admin/user/registrations.html.twig api/auth/end_user_authorization.html.twig - web/account/reset-email.html.twig + web/common/dialog_export.html.twig web/account/account.html.twig web/account/account.html.twig - web/admin/editusers.html.twig - web/admin/users.html.twig - admin/user/registrations.html.twig - web/common/dialog_export.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur mot de passe Mot de passe api/auth/end_user_authorization.html.twig web/setup/step2.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur nom Nom Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur nouvelle adresse email @@ -8567,40 +8618,40 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Poste Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur prenom Prénom Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur sexe Civilité Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig + web/account/account.html.twig admin::compte-utilisateur societe Société Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur tel @@ -8611,11 +8662,11 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis admin::compte-utilisateur telephone Téléphone Controller/Admin/UserController.php - web/account/account.html.twig web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur un email de confirmation vient de vous etre envoye. Veuillez suivre les instructions contenue pour continuer @@ -8627,9 +8678,9 @@ Pour les utilisateurs authentifiés, la demande de validation est également dis Ville Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur: L'email a correctement ete mis a jour @@ -8680,8 +8731,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:ftp: repertoire de destination ftp Dossier distant - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Activer le compte FTP @@ -8696,14 +8747,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:ftp: Nombre d'essais max Nombre d'essais - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Utiliser le mode passif Utiliser le mode passif - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: creer un dossier @@ -8724,25 +8775,25 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:sexe: madame Mme Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: mademoiselle Mlle Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: monsieur M. Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::monitor: bases sur lesquelles l'utilisateur est connecte : @@ -8762,26 +8813,26 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::monitor: module admin Admin - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module client Classic - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module comparateur Lightbox - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig @@ -8792,44 +8843,44 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::monitor: module production Production - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module report Report - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module thesaurus Thesaurus - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module upload Upload - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + lib/classes/phrasea.php + web/common/menubar.html.twig admin::monitor: module validation Lightbox - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/common/menubar.html.twig @@ -8865,8 +8916,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::plugins: plugins Plugins - admin/plugins/index.html.twig web/admin/tree.html.twig + admin/plugins/index.html.twig admin::plugins: retrieveConfigurationError @@ -9012,7 +9063,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::userlist: filterguestuser - Filtrer les utilisateurs invité + Filtrer les utilisateurs invités web/admin/users.html.twig @@ -9046,7 +9097,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 @@ -9057,12 +9108,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le an error occured une erreur est survenue - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% Une erreur est survenue : %message% - Phrasea/Controller/SetupController.php + Phrasea/Controller/SetupController.php an error occured while exporting records @@ -9087,9 +9138,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le audio audios - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig avril @@ -9111,17 +9162,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Ré-indexer la base maintenant (selon le nombre de documents, cette opération peut durer plusieurs heures) admin/databox/databox.html.twig - + basket:action:delete record form basket - basket:action:delete record form basket + Retirer du panier prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig - + basket:action:delete record form database - basket:action:delete record form database + Supprimer l'enregistrement de la base prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig be notified when a document is placed in quarantine @@ -9131,54 +9182,54 @@ 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 admin/collection/suggested_value.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::annuler Annuler Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php + admin/publications/fiche.html.twig + web/admin/index.html.twig + admin/collection/create.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/link-field-step1.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/export-topics-dialog.html.twig + web/report/all_content.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Youtube/video_modify.html.twig 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 - web/thesaurus/export-text-dialog.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/import-dialog.html.twig - web/thesaurus/link-field-step2.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/link-field-step1.html.twig - web/account/reset-email.html.twig - admin/publications/fiche.html.twig - admin/collection/create.html.twig - web/admin/index.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig - web/report/all_content.html.twig + web/account/reset-email.html.twig boutton::appliquer @@ -9188,16 +9239,16 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::chercher Chercher - web/prod/index.html.twig + web/admin/users.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig - web/admin/users.html.twig + web/prod/index.html.twig boutton::choisir Choisir - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig boutton::commander @@ -9247,17 +9298,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::fermer Fermer Controller/Prod/LanguageController.php - prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig - web/thesaurus/properties.html.twig + web/lightbox/sc_note.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig web/thesaurus/export-topics.html.twig web/thesaurus/link-field-step3.html.twig - web/lightbox/sc_note.html.twig - web/common/dialog_export.html.twig + web/thesaurus/properties.html.twig web/report/all_content.html.twig + prod/actions/Push.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + web/common/dialog_export.html.twig boutton::generer @@ -9267,15 +9318,15 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::imprimer Imprimer - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig boutton::modifier Modifier + web/admin/users.html.twig Bridge/Dailymotion/actionelement.html.twig Bridge/Youtube/actionelement.html.twig Bridge/Flickr/actionelement.html.twig - web/admin/users.html.twig boutton::monter @@ -9291,22 +9342,22 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::precedent précédent + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::rechercher Rechercher Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9321,7 +9372,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 @@ -9331,26 +9382,26 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::retour Retour + web/admin/editusers.html.twig + admin/databox/details.html.twig + user/import/file.html.twig + admin/publications/fiche.html.twig + admin/collection/details.html.twig + admin/statusbit/edit.html.twig + web/developers/application.html.twig + web/developers/application_form.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig Bridge/Dailymotion/video_deleteelement.html.twig Bridge/Dailymotion/playlist_createcontainer.html.twig Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Youtube/video_deleteelement.html.twig Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/databox/details.html.twig - admin/collection/details.html.twig - user/import/file.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig - web/developers/application.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig boutton::retry @@ -9360,32 +9411,22 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::suivant suivant + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::supprimer Supprimer Controller/Prod/LanguageController.php - actions/Bridge/disconnected.html.twig - Bridge/Dailymotion/actionelements.html.twig - Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig - Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig - Bridge/Flickr/actioncontainers.html.twig - prod/results/feeds_entry.html.twig - prod/results/entry.html.twig - web/prod/index.html.twig - web/thesaurus/presets.html.twig + web/admin/subdefs.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/collection/collection.html.twig @@ -9393,7 +9434,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig + web/thesaurus/presets.html.twig + Bridge/Dailymotion/actioncontainers.html.twig + Bridge/Dailymotion/actionelements.html.twig + actions/Bridge/disconnected.html.twig + Bridge/Youtube/actioncontainers.html.twig + Bridge/Youtube/actionelements.html.twig + Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig + prod/results/feeds_entry.html.twig + prod/results/entry.html.twig + web/prod/index.html.twig boutton::telecharger @@ -9406,9 +9457,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::telecharger tous les documents Tout télécharger web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig boutton::tester @@ -9420,69 +9471,69 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::valider Valider Controller/Prod/LanguageController.php - mobile/lightbox/note_form.html.twig - prod/Baskets/Update.html.twig - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/video_deleteelement.html.twig - Bridge/Dailymotion/playlist_createcontainer.html.twig - Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig - Bridge/Youtube/video_deleteelement.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig - Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig - 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/Story/Reorder.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 - web/thesaurus/link-field-step2.html.twig + web/admin/structure.html.twig + web/admin/setup.html.twig + web/admin/editusers.html.twig + web/admin/dashboard.html.twig + admin/user/registrations.html.twig + user/import/view.html.twig + web/admin/subdefs.html.twig + admin/publications/fiche.html.twig + admin/publications/list.html.twig + admin/collection/collection.html.twig + admin/collection/reorder.html.twig + admin/collection/create.html.twig + admin/collection/suggested_value.html.twig + admin/statusbit/edit.html.twig web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/index.html.twig web/thesaurus/new-term.html.twig web/thesaurus/new-term.html.twig web/thesaurus/link-field-step1.html.twig - web/account/access.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig - web/admin/dashboard.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/publications/list.html.twig - web/admin/setup.html.twig - admin/collection/create.html.twig - admin/collection/reorder.html.twig - admin/collection/collection.html.twig - admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig - web/admin/structure.html.twig - user/import/view.html.twig - admin/user/registrations.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/index.html.twig + web/thesaurus/export-topics-dialog.html.twig web/report/all_content.html.twig + web/developers/application_form.html.twig + prod/Baskets/Update.html.twig + prod/Baskets/Reorder.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Dailymotion/video_deleteelement.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + Bridge/Dailymotion/video_moveinto_playlist.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig + Bridge/Youtube/video_deleteelement.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Youtube/video_moveinto_playlist.html.twig + Bridge/Flickr/photo_deleteelement.html.twig + Bridge/Flickr/photo_moveinto_photoset.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig + web/prod/index.html.twig + web/account/access.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig + mobile/lightbox/note_form.html.twig boutton::vue graphique Vue Graphique - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig boutton::vue xml Vue XML - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig button::Install @@ -9562,14 +9613,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le charger d'avantages de notifications Charger davantage de notifications - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir Choisir - web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig + web/prod/index.html.twig classe @@ -9596,10 +9647,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le copyClipboardLabel Copier dans le presse-papier - prod/results/infos.html.twig prod/Share/record.html.twig prod/Share/record.html.twig prod/Share/record.html.twig + prod/results/infos.html.twig create_subdef_button_label @@ -9608,17 +9659,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le create_subdef_modal_access_class - Réglage de la sous definition + Réglage de la sous définition web/admin/subdefs.html.twig - + create_subdef_modal_access_class_document - Droits Document + Droits Document web/admin/subdefs.html.twig - + create_subdef_modal_access_class_no_restriction - Libre accès + Libre accès web/admin/subdefs.html.twig @@ -9626,30 +9677,30 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Droits sous-définition web/admin/subdefs.html.twig - + create_subdef_modal_presets - create_subdef_modal_presets + Réglage prédéfini web/admin/subdefs.html.twig - + create_subdef_modal_preview_mediatype - create_subdef_modal_preview_mediatype + Format de fichier pour la sous définition web/admin/subdefs.html.twig - + create_subdef_modal_record_phraseanet_type - create_subdef_modal_record_phraseanet_type + Sous définition définie pour le type web/admin/subdefs.html.twig - + create_subdef_modal_subdefinition_name - create_subdef_modal_subdefinition_name + Nom de la sous définition web/admin/subdefs.html.twig created_on créé le - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9680,7 +9731,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le delete Supprimer - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig descendant @@ -9695,10 +9746,10 @@ 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 + task-manager/task-editor/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - task-manager/task-editor/subdefs.html.twig document original @@ -9709,7 +9760,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le edit Editer - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig web/account/account.html.twig web/account/account.html.twig web/account/account.html.twig @@ -9752,7 +9803,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) ? @@ -9789,7 +9840,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export:: erreur : aucun document selectionne Erreur : aucun document sélectionné - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig export:: telechargement @@ -9797,15 +9848,15 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le web/common/dialog_export.html.twig web/common/dialog_export.html.twig - + export::export-email: email-invalid - export::export-email: email-invalid + Email invalide web/common/dialog_export.html.twig export::ftp: reglages manuels Réglages manuels - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9846,17 +9897,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le file is not valid Le fichier n'est pas valide - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash Flash - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig for the following reasons : %reasons% @@ -9920,24 +9971,35 @@ 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 - + + help::help-search: OR + Ou + prod/results/help.html.twig + + + help::help-search: relaunch search without filter + Supprimer tous les filtres et relancer la recherche + prod/results/help.html.twig + web/prod/index.html.twig + + help::help-section-bullet: check-spelling - help::help-section-bullet: check-spelling + Vérifier l'orthographe ou les erreurs de frappe prod/results/help.html.twig - + help::help-section-bullet: default-operator-between-terms - help::help-section-bullet: default-operator-between-terms + L'opérateur par défaut entre les termes est un ET, exemple: voiture rouge, cherchera le terme «voiture» ET le terme «rouge» prod/results/help.html.twig - + help::help-section-bullet: expand search - help::help-section-bullet: expand search + Elargir la recherche en utilisant moins de mots clefs prod/results/help.html.twig - + help::help-section-bullet: quotation-marks-allow - help::help-section-bullet: quotation-marks-allow + Ajouter des guillemets pour chercher une expression exacte, cela permet aussi d'exclure un opérateur de la recherche, exemple : « Pile Ou face » , «Sain et sauf» prod/results/help.html.twig @@ -9945,9 +10007,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Supprimer les filtres de recherche avancée prod/results/help.html.twig - + help::help-section-bullet: search-in-a-specific-field - help::help-section-bullet: search-in-a-specific-field + Pour limiter la recherche à un champ spécifique, utiliser la syntaxe Nom du champ suivi du signe «:» pour contient ou du signe «=» pour une correspondance exacte. Exemple: Titre="Et on tuera tous les affreux" ou Auteur:"Sullivan" prod/results/help.html.twig @@ -9978,9 +10040,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le image images - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig image rotation @@ -9995,42 +10057,47 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le index::advance_search: disable-facet Ne pas afficher les facettes contenant un seul résultat (expérimental) - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet Préférences sur les facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order Ordre d'affichage des facettes - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order Ordre par défaut - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order Ordre des valeurs de facettes - web/prod/index.html.twig + web/prod/index.html.twig - + index::advance_search: hidden-facet-values-order - Facettes Masquées - web/prod/index.html.twig + Facettes masquées + web/prod/index.html.twig index::advance_search: order-by-hits - Trier les facettes par hits - web/prod/index.html.twig + Par occurrences + web/prod/index.html.twig + + + index::advance_search: order-by-hits-asc + Par occurrences asc + 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,11 +10129,79 @@ 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::See_less_feedback + Voir moins de validations + web/lightbox/index.html.twig + + + lightbox::See_more_feedback + Voir plus de Validations + web/lightbox/index.html.twig + + + lightbox::list + Vignette + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Récapitulatif + web/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/validate.html.twig + + + lightbox::see_less_basket + Voir moins de Paniers + web/lightbox/index.html.twig + + + lightbox::see_more_basket + Voir plus de paniers + web/lightbox/index.html.twig + + + lightbox:feedback:sendreport:warnwindows:cancel + Annuler l'envoi et continuer la validation + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:message + Récapitulatif des choix de la validation + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_approved + Approuvés + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_rejected + Refusés + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_unexpressed + Non exprimés + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:title + Résumé de la validation web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:validate + Confirmer l'envoi du rapport + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig login:: Changer mon adresse email @@ -10086,9 +10221,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login:: Mon compte Mon Compte + web/common/menubar.html.twig + web/common/menubar.html.twig web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + mobile/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 @@ -10103,8 +10239,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login::erreur: Erreur d'authentification Erreur d'authentification - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php login::erreur: No available connection - Please contact sys-admin @@ -10124,8 +10260,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login::notification: Mise a jour du mot de passe avec succes Mise à jour du mot de passe effectuée - Controller/Root/LoginController.php Controller/Root/AccountController.php + Controller/Root/LoginController.php login::notification: demande de confirmation par mail envoyee @@ -10147,8 +10283,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le login::register: sujet email : confirmation de votre adresse email Confirmation de votre adresse e-mail - Notification/Mail/MailRequestEmailUpdate.php Notification/Mail/MailRequestEmailConfirmation.php + Notification/Mail/MailRequestEmailUpdate.php login::register:email: Voici un compte rendu du traitement de vos demandes d'acces : @@ -10214,15 +10350,15 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le no Non - web/account/sessions.html.twig - web/admin/subdefs.html.twig user/import/view.html.twig + web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig no image selected Aucune image sélectionnée - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10235,9 +10371,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le notice Notice web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig nouveau @@ -10264,9 +10400,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Votre commande du : prod/orders/order_item.html.twig - + order-manager::order-item: accepted-item - order-manager::order-item: accepted-item + Média délivré prod/orders/order_item.html.twig @@ -10356,9 +10492,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/orders/order_item.html.twig prod/orders/order_item.html.twig - + order-manager::order-item: rejected-item - order-manager::order-item: rejected-item + Média non délivré prod/orders/order_item.html.twig @@ -10373,9 +10509,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Tout sélectionner prod/orders/order_item.html.twig - + order-manager::order-item: selected-item - order-manager::order-item: selected-item + Média sélectionné prod/orders/order_item.html.twig @@ -10540,17 +10676,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le panier:: ordre Validation ascendante Mieux noté - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre Validation descendante Moins noté - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre du panier Ordre du panier - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: renommer le panier @@ -10575,7 +10711,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le paniers:: panier recu de %pusher% Panier reçu de %pusher% - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ? @@ -10585,8 +10721,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le paniers::description du nouveau panier Donner une description au nouveau panier - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig par %user_name% @@ -10636,7 +10772,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: Preferences Préférences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10646,23 +10782,33 @@ 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 Adresse - web/setup/step2.html.twig - web/account/account.html.twig - admin/collection/collection.html.twig web/admin/connected-users.html.twig + admin/collection/collection.html.twig + web/setup/step2.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig phraseanet:: aide Aide - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: basket feedback + Rapport de validation avec Notice + prod/actions/printer_default.html.twig + + + phraseanet:: baskets + Zone de travail + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10684,8 +10830,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,14 +10859,14 @@ 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 Port - web/setup/step2.html.twig web/admin/databases.html.twig web/admin/databases.html.twig + web/setup/step2.html.twig phraseanet:: prereglages @@ -10730,13 +10876,13 @@ 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/printer_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/printer_default.html.twig phraseanet:: propositions @@ -10747,8 +10893,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,13 +10905,13 @@ 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 - web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/index.html.twig + prod/actions/edit_default.html.twig + web/prod/tab_headers.html.twig phraseanet:: tri @@ -10775,17 +10921,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: tri par date Tri par date - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: tri par nom Tri alphabétique - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -10806,7 +10952,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,9 +10998,9 @@ 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 - web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig + web/thesaurus/thesaurus.html.twig + prod/actions/edit_default.html.twig phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible @@ -10872,15 +11018,20 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier Votre session a expiré. Veuillez vous ré-authentifier Controller/Prod/LanguageController.php - web/thesaurus/thesaurus.html.twig web/admin/index.html.twig + web/thesaurus/thesaurus.html.twig phraseanet::erreur: echec du serveur de mail 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 + Erreur pendant la révocation de droits utilisateur + Controller/Root/AccountController.php phraseanet::jours:: dimanche @@ -10935,42 +11086,42 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet::temps:: a l'instant A l'instant - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: hier Hier - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% heures Il y a %quantity% heures - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% minutes Il y a %quantity% minutes - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une heure Il y a une heure - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une minute Il y a une minute - lib/classes/phraseadate.php + lib/classes/phraseadate.php 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 +11132,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 +11142,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,49 +11167,49 @@ 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 Arrêter prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig preview:: demarrer le diaporama Diaporama prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig 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 +11224,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 @@ -11083,40 +11234,135 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod/Share/record.html.twig prod/Share/record.html.twig - + + print:: basket feedback + Rapport de validation avec description + prod/actions/printer_default.html.twig + + + print:: basket feedback only + Rapport de validation + prod/actions/printer_default.html.twig + + print:: description - Description - prod/actions/printer_default.html.twig + Notice seule + prod/actions/printer_default.html.twig print:: image de choix et description - Prévisualisation et Légende - prod/actions/printer_default.html.twig + Prévisualisation et notice d'indexation + prod/actions/printer_default.html.twig print:: image de choix et description avec planche contact - Prévisualisation et Légende avec planche contact - prod/actions/printer_default.html.twig + Prévisualisation et notice avec planche contact + prod/actions/printer_default.html.twig print:: image de choix seulement Prévisualisation - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: imagette - Imagette - prod/actions/printer_default.html.twig + Vignette + prod/actions/printer_default.html.twig print:: liste d'imagettes - Liste de vignettes - prod/actions/printer_default.html.twig + Liste de vignette(s) avec notice(s) + prod/actions/printer_default.html.twig print:: planche contact (mosaique) Planche contact - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig + + + print_feedback:: Document generated on : + Impression générée le : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback active + Validation en cours + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expired + Validation Fermée + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expiring on : + Expire le : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated by : + Validation envoyée par : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated on : + Début de validation le : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback on basket %name% + Rapport de validation de : %name% + Out/Module/PDFRecords.php + + + print_feedback:: Non + Non + Out/Module/PDFRecords.php + + + print_feedback:: Oui + Oui + Out/Module/PDFRecords.php + + + print_feedback:: Participants : + Participants : + Out/Module/PDFRecords.php + + + print_feedback:: Votes : + Approbations : + Out/Module/PDFRecords.php + + + print_feedback:: base name: + Base : + Out/Module/PDFRecords.php + + + print_feedback:: document Uuid: + Id unique de document : + Out/Module/PDFRecords.php + + + print_feedback:: non voté + Non exprimé + Out/Module/PDFRecords.php + + + print_feedback:: originale filename: + Nom de fichier : + Out/Module/PDFRecords.php + + + print_feedback:: record id: + Record id: + Out/Module/PDFRecords.php + + + print_feedback:: record title: + Titre : + Out/Module/PDFRecords.php prive @@ -11133,7 +11379,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,22 +11396,48 @@ 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 + Effectuer une recherche sur le contenu d'un champ documentaire de type texte + web/prod/index.html.twig prod::collection deplacer egalement les documents rattaches a ce(s) regroupement(s) Déplacer également les documents de ces reportages ? prod/actions/collection_default.html.twig + + prod::edit: Confirmation Edition latitude longitude + Confirmation de longitude et de latitude + prod/actions/edit_default.html.twig + 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::edit:confirm: Edition latitude longitude + Souhaitez-vous régler les champs longitude et latitude avec les données retournées par Geoname Service? +Attention: les valeurs actuellement en place seront écrasées par ces nouvelles valeurs + prod/actions/edit_default.html.twig + + + prod::edit:confirm: No + Non, conserver les valeurs actuelles + prod/actions/edit_default.html.twig + + + prod::edit:confirm: Yes + Oui, mettre à jour la géolocalisation + prod/actions/edit_default.html.twig + + + prod::edit:story select all + Sélectionner tous les enregistrements du reportage + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11175,32 +11447,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,77 +11487,87 @@ 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 Bases - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:collection_label Collections - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:doctype_label Types de documents - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php + + + prod::feedback:feedback_set_title + Nom de la validation + prod/templates/push.html.twig + + + prod::push:push_set_title + Nom du panier de Push + prod/templates/push.html.twig prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee. @@ -11410,84 +11692,116 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::toolbar : video editor Outils vidéo - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig prod::tools: document Document - Controller/Prod/ToolsController.php Controller/Prod/ShareController.php + Controller/Prod/ToolsController.php - - prod:app trash: also-move-record - Déplacer à la corbeille les enregistrements liés à ces reportages - prod/actions/delete_records_confirm.html.twig - - - prod:app trash: record-delete - enregistrement(s) définitivement supprimé(s) ! - prod/actions/delete_records_confirm.html.twig - - + prod:app trash: record-move-to-trash - prod:app trash: record-move-to-trash - prod/actions/delete_records_confirm.html.twig + Enregistrement(s) déplacé(s) dans la corbeille. + prod/actions/delete_records_confirm_form.html.twig - + + prod:app trash: record-to-delete + prod:app trash: record-to-delete + prod/actions/delete_records_confirm_form.html.twig + + prod:app trash: title-trash - prod:app trash: title-trash + prod:app trash: title-trash Controller/Prod/LanguageController.php - + prod:edit: chapters - prod:edit: chapters - Controller/Prod/LanguageController.php - - - prod:edit: no overlaps for chapters - prod:edit: no overlaps for chapters + Edition des chapitres Controller/Prod/LanguageController.php - - prod:edit: only a media of type video can be edited - prod:edit: only a media of type video can be edited - Controller/Prod/LanguageController.php - - - prod:edit: suggested_values - prod:edit: suggested_values + + prod:edit: no overlaps for chapters + Pas de recouvrement entre les chapitres Controller/Prod/LanguageController.php - - prod:edit: video-editor - prod:edit: video-editor - Controller/Prod/LanguageController.php + + prod:edit: only a media of type video can be edited + Seuls les enregistrements de type vidéo peuvent être édités + Controller/Prod/LanguageController.php - - prod:mapboxgl: description notice - prod:mapboxgl: description notice - Controller/Prod/LanguageController.php - - - prod:mapboxgl: title map dialog - prod:mapboxgl: title map dialog - Controller/Prod/LanguageController.php - - - prod:mapboxgl: title notice - prod:mapboxgl: title notice + + prod:edit: suggested_values + Valeurs suggérées Controller/Prod/LanguageController.php - - prod:push: create new user - prod:push: create new user + + prod:edit: video-editor + Outils vidéo + Controller/Prod/LanguageController.php + + + prod:mapboxgl: description notice + — Faire un clic droit pour ajouter une zone de recherche, il est possible de cumuler plusieurs zones. + +— Un simple clic sur une zone de recherche permet de la supprimer. + +— Utiliser les poignées sur le périmètre de la zone pour agrandir ou réduire la zone de recherche. + +— Utiliser la poignée centrale pour déplacer la zone de recherche sur la carte. + Controller/Prod/LanguageController.php + + + prod:mapboxgl: title map dialog + Recherche géolocalisée. Controller/Prod/LanguageController.php - + + prod:mapboxgl: title notice + Fonctionnement des zones de recherche + Controller/Prod/LanguageController.php + + + prod:push: create new user + Créer un nouvel utilisateur. + Controller/Prod/LanguageController.php + + prod:push: delete selection - prod:push: delete selection + Supprimer la selection prod/actions/Push.html.twig + + prod:workzone:basket:creation-date + Date de création + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + Date de clôture de la validation mise à jour + prod/WorkZone/Basket.html.twig + + + prod:workzone:facetstab:search_and_facets_sort_options + Tri des facettes + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + Inclure dans les résultats + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + Exclure les résultats + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + Supprimer le filtre + web/prod/index.html.twig + public Public @@ -11499,32 +11813,32 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le publication : autheur Auteur - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : email autheur Adresse e-mail de l'auteur - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : sous titre Sous-titre - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : titre Titre de la publication - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications. Voici votre fil RSS personnel. Il vous permettra d'être tenu informé des publications. - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications:: s'abonner aux publications @@ -11535,14 +11849,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le publications::Ne le partagez pas, il est strictement confidentiel Ne le partagez pas, il est strictement confidentiel - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications::votre rss personnel Votre rss personnel - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php push::mail:: Rapport de validation de %user% pour %title% @@ -11562,19 +11876,19 @@ 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 Rafraîchir - prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Story.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -11588,39 +11902,39 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Régénération des sous-définitions actions/Tools/index.html.twig - + registration:collection.accepted - registration:collection.accepted + Accepté web/account/access.html.twig - + registration:collection.active - registration:collection.active + Active web/account/access.html.twig - + registration:collection.in-time - registration:collection.in-time + Accès limité dans le temps (actif) web/account/access.html.twig - + registration:collection.out-dated - registration:collection.out-dated + Date dépassée web/account/access.html.twig - + registration:collection.pending - registration:collection.pending + En attente web/account/access.html.twig - + registration:collection.registrable - registration:collection.registrable + Faire une demande web/account/access.html.twig - + registration:collection.rejected - registration:collection.rejected + Demande refusée web/account/access.html.twig @@ -11636,17 +11950,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,12 +11982,12 @@ 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 Sans titre - classes/record/adapter.php + classes/record/adapter.php report:: 1 - Periode @@ -11856,21 +12170,21 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le report:: non-renseigne Non-Renseigné - module/report/add.php - module/report/question.php - module/report/download.php + module/report/validate.php module/report/activity.php module/report/activity.php module/report/activity.php + module/report/question.php + module/report/edit.php module/report/connexion.php module/report/connexion.php module/report/connexion.php - module/report/push.php - module/report/sent.php - module/report/validate.php + module/report/add.php module/report/nav.php - module/report/edit.php + module/report/download.php + module/report/sent.php module/report/filter.php + module/report/push.php report:: page d'accueil @@ -12104,8 +12418,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% @@ -12125,17 +12439,17 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le same UUID Un fichier avec le même UUID existe déjà dans la base de données - Border/Checker/UUID.php + Border/Checker/UUID.php same checksum Un fichier avec la même somme de contrôle existe déjà dans la base de données - Border/Checker/Sha256.php + Border/Checker/Sha256.php same filename Un fichier avec le même nom existe déjà dans la base de données - Border/Checker/Filename.php + Border/Checker/Filename.php scheduled status @@ -12145,7 +12459,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 @@ -12202,65 +12516,65 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Tests d'envois d'e-mails web/admin/dashboard.html.twig - + setup::custom-link:add-link - setup::custom-link:add-link + Ajouter un lien web/admin/setup.html.twig - + setup::custom-link:help-menu - setup::custom-link:help-menu + Menu «Aide» Form/Configuration/CustomLinkFormType.php - + setup::custom-link:language-link - setup::custom-link:language-link + Affiché en web/admin/setup.html.twig - + setup::custom-link:link-url - setup::custom-link:link-url + Url de destination web/admin/setup.html.twig - + setup::custom-link:location - setup::custom-link:location + Sélectionner un emplacement Form/Configuration/CustomLinkFormType.php - + setup::custom-link:location-link - setup::custom-link:location-link + Emplacement web/admin/setup.html.twig - + setup::custom-link:name-link - setup::custom-link:name-link + Nom du lien Form/Configuration/CustomLinkFormType.php web/admin/setup.html.twig - + setup::custom-link:navigation-bar - setup::custom-link:navigation-bar + Barre de navigation Form/Configuration/CustomLinkFormType.php - + setup::custom-link:order-link - setup::custom-link:order-link + Ordre d'affichage web/admin/setup.html.twig - + setup::custom-link:placeholder-link-url - setup::custom-link:placeholder-link-url + ex: https://docs.phraseanet.com Form/Configuration/CustomLinkFormType.php - + setup::custom-link:select-language - setup::custom-link:select-language + Choisir une langue d'affichage Form/Configuration/CustomLinkFormType.php - + setup::custom-link:title-custom-link - setup::custom-link:title-custom-link + Nom du lien web/admin/setup.html.twig @@ -12268,9 +12582,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Réglage avancé prod/Share/record.html.twig - + share::share-record: select-shared-def - share::share-record: select-shared-def + Sélectionnez la sous-définition à partager prod/Share/record.html.twig @@ -12337,12 +12651,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le task::archive:Archivage Archive dans la collection - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:Archiving files found into a 'hotfolder' Archiver les fichiers déposés dans le dossier - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:archivage sur base/collection/ @@ -12408,8 +12722,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le task::ftp:Status about your FTP transfert from %application% to %server% Etat du transfert FTP depuis l'application %application% vers le serveur %server% - Notification/Mail/MailSuccessFTPSender.php Notification/Mail/MailSuccessFTPReceiver.php + Notification/Mail/MailSuccessFTPSender.php task::ftp:TENTATIVE no %number%, %date% @@ -12454,8 +12768,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le task::ftp:proxy Proxy - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy password @@ -12465,8 +12779,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le task::ftp:proxy port Port - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy user @@ -12561,8 +12875,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le thesaurus:: Lier la branche de thesaurus Lier la branche - web/thesaurus/link-field-step2.html.twig web/thesaurus/link-field-step3.html.twig + web/thesaurus/link-field-step2.html.twig thesaurus:: Lier la branche de thesaurus au champ @@ -12577,8 +12891,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le thesaurus:: Nouveau synonyme Nouveau synonyme - web/thesaurus/thesaurus.html.twig web/thesaurus/new-term.html.twig + web/thesaurus/thesaurus.html.twig thesaurus:: Nouveau terme @@ -12723,8 +13037,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le thesaurus:: export en topics Thèmes - web/thesaurus/export-topics-dialog.html.twig web/thesaurus/export-topics.html.twig + web/thesaurus/export-topics-dialog.html.twig thesaurus:: exporter @@ -13009,14 +13323,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le thesaurus::menu: supprimer Supprimer - web/thesaurus/properties.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig + web/thesaurus/properties.html.twig thumbnail validation Validation de la vignette - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13052,7 +13366,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) : @@ -13064,6 +13378,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le upload:: Status : Appliquer les status prod/upload/upload.html.twig + prod/upload/lazaret.html.twig prod/upload/upload-flash.html.twig @@ -13074,7 +13389,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 @@ -13083,24 +13398,24 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le validation:: NON Non - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: OUI Oui - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: editer ma note Modifier mon annotation - mobile/lightbox/basket_element.html.twig + mobile/lightbox/basket_element.html.twig validation:: note Annotation - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13110,10 +13425,10 @@ 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 web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig version @@ -13128,12 +13443,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le video vidéo - web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig - + video range extractor - video range extractor + Chapitrage actions/Tools/videoEditor.html.twig @@ -13141,12 +13456,144 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Outils vidéos actions/Tools/videoEditor.html.twig + + workzone:datepicker:april + Avril + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:august + Aout + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:closeText + Clore + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:currentText + courant + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:december + Décembre + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:february + Février + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:friday + Vendredi + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:january + Janvier + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:july + Juillet + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:june + Juin + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:march + Mars + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:may + Mai + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:monday + Lundi + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:nextText + Suivant + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:november + Novembre + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:october + Octobre + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:prevText + Précédent + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:saturday + Samedi + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:september + Septembre + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:sunday + Dimanche + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:thursday + Jeudi + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:tuesday + Mardi + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:wednesday + Mercredi + prod/WorkZone/Basket.html.twig + + + workzone:feedback:expiration-closed + Validation clôturée le + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + Validation ouverte jusqu'au + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:update + Valider + prod/WorkZone/Basket.html.twig + yes Oui - web/account/sessions.html.twig web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig you are about to change the representation thumbnail of your video diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index f0fbeeb0b7..1ec74f45ab 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. @@ -28,7 +28,14 @@ This avoids anonymous users to access to the content of the push if they were able to get the display url through a forwarded mail for example. - prod/templates/push.html.twig + 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 @@ -109,15 +116,14 @@ %Total% results %Total% resultaten - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig %basket_length% documents %basket_length% documenten - mobile/lightbox/validate.html.twig - web/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/validate.html.twig %countable% documents can not be modified. @@ -190,8 +196,9 @@ %nb_records% records %nb_records% records + prod/WorkZone/Basket.html.twig prod/Tooltip/Story.html.twig - prod/Tooltip/Basket.html.twig + prod/Tooltip/Basket.html.twig %nb_view% vue @@ -210,7 +217,7 @@ selectionnes]]> selectionnes]]> - Controller/Prod/QueryController.php + Controller/Prod/QueryController.php %quantity% Stories attached to the WorkZone @@ -251,7 +258,7 @@ %quantity% records added %quantity% records added Controller/Prod/BasketController.php - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php %quantity% records moved @@ -276,7 +283,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 +298,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 +353,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 @@ -381,17 +388,17 @@ (validation) a envoyer te versturen - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) envoyee verstuurd - web/lightbox/index.html.twig + web/lightbox/index.html.twig (validation) session terminee sessie beïndigd - web/lightbox/index.html.twig + web/lightbox/index.html.twig *Phraseanet Navigator* is a smartphone application that allow user to connect on this instance @@ -406,8 +413,7 @@ 1 result 1 resultaat - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig 10 tags maximum @@ -452,8 +458,8 @@ A A - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig A document has been quarantined @@ -473,22 +479,22 @@ A file with the same UUID already exists in database Een bestand met dezelfde UUID bestaat al in de database - Border/Checker/UUID.php + Border/Checker/UUID.php A file with the same checksum already exists in database Een bestand met dezelfde checksum bestaat al in de database - Border/Checker/Sha256.php + Border/Checker/Sha256.php A file with the same filename already exists in database Een bestand met dezelfde bestandsnaam bestaat al in de database - Border/Checker/Filename.php + Border/Checker/Filename.php 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 @@ -548,8 +554,8 @@ Access Toegang - actions/Feedback/List-Share.html.twig web/admin/editusers.html.twig + actions/Feedback/List-Share.html.twig Access code @@ -616,7 +622,7 @@ Accuse de reception Ontvangstbevestiging Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Accuse de reception indisponible, vous n'avez pas declare d'adresse email @@ -626,22 +632,22 @@ Action Forbidden : You are not the publisher Verboden actie : U bent niet de publisher - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php Actions Acties - Bridge/Dailymotion/actionelements.html.twig Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig + Bridge/Dailymotion/actionelements.html.twig Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig + Bridge/Youtube/actionelements.html.twig Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig Activate highlight Activate highlight - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -653,8 +659,8 @@ Activer Activeren admin/databox/databox.html.twig - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Activer le grant_type de type password pour votre application @@ -675,9 +681,9 @@ Add Toevoegen prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig - prod/User/Add.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/User/Add.html.twig Add a @@ -760,7 +766,8 @@ Advanced Search Geavanceerd zoeken - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Advanced mode @@ -775,52 +782,57 @@ Affichage Tonen - web/prod/index.html.twig + web/prod/index.html.twig Affichage au demarrage Tonen bij opstart - web/prod/index.html.twig + web/prod/index.html.twig Afficher la fiche descriptive De beschrijvingsfiche tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher le titre De titel tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher les status De statussen tonen - web/prod/index.html.twig + web/prod/index.html.twig Afficher une icone Pictogram tonen - web/prod/index.html.twig + web/prod/index.html.twig After metadata After metadata - web/prod/index.html.twig + web/prod/index.html.twig + + + Aggregated + Aggregated + admin/search-engine/general-aggregation.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 @@ -832,9 +844,9 @@ Ajouter ma selection courrante Voeg mijn huidige selectie toe + prod/orders/order_item.html.twig prod/Baskets/Create.html.twig prod/Story/Create.html.twig - prod/orders/order_item.html.twig Ajouter un nouvel utilisateur @@ -855,6 +867,7 @@ All Alle Form/Configuration/CustomLinkFormType.php + task-manager/task-editor/subdefs.html.twig WorkZone/Browser/Browser.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig @@ -862,17 +875,11 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - task-manager/task-editor/subdefs.html.twig All these conditions All these conditions - web/prod/index.html.twig - - - All values - All values - admin/fields/templates.html.twig + web/prod/index.html.twig Aller a @@ -882,7 +889,7 @@ Allow the website to be indexed by search engines like Google Sta toe om de website te indexeren voor zoek robots zoals Google - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Allowed @@ -937,36 +944,29 @@ Alphabetic asc Alphabetic asc - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Alphabetic desc Alphabetic desc - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Also delete records that rely on groupings. Verwijder ook de records die in de groepen voorkomen? - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm.html.twig An error occured Er is een fout opgetreden - Model/Manipulator/LazaretManipulator.php - Model/Manipulator/LazaretManipulator.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php - Controller/Admin/DataboxesController.php + Controller/Prod/MoveCollectionController.php + Controller/Prod/BasketController.php + Controller/Prod/ToolsController.php + Controller/Prod/LazaretController.php + Controller/Prod/StoryController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php @@ -978,17 +978,30 @@ Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php - Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php - Controller/Prod/LazaretController.php - Controller/Prod/MoveCollectionController.php - Controller/Prod/StoryController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxesController.php + Model/Manipulator/LazaretManipulator.php + Model/Manipulator/LazaretManipulator.php web/admin/users.html.twig - admin/databox/databox.html.twig web/admin/databases.html.twig + admin/databox/databox.html.twig + task-manager/task-editor/task.html.twig admin/collection/collection.html.twig 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 @@ -1024,13 +1037,14 @@ An error occurred Er is een fout opgetreden - Order/Controller/ProdOrderController.php - Controller/Admin/DataboxController.php - Controller/Admin/SearchEngineController.php - Controller/Admin/CollectionController.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Admin/SearchEngineController.php + Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Order/Controller/ProdOrderController.php web/admin/statusbit.html.twig @@ -1061,7 +1075,7 @@ Aperture Diafragma - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -1122,8 +1136,8 @@ Apply a template Pas een sjabloon toe - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Apply changes @@ -1149,8 +1163,8 @@ Archive Archief - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Are you sure you want delete users rights ? @@ -1202,7 +1216,7 @@ Aucun Geen enkele - admin/fields/templates.html.twig + admin/fields/templates.html.twig Aucun bridge disponible. Veuillez contacter un administrateur. @@ -1217,7 +1231,7 @@ Aucun statut editable Geen enkele bewerkbare status - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Aucune @@ -1258,7 +1272,7 @@ Audio Audio - web/prod/index.html.twig + web/prod/index.html.twig Audio Birate @@ -1274,7 +1288,7 @@ Audio Samplerate Audio Samplerate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Audio channel @@ -1284,7 +1298,7 @@ Audio codec Audio codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php AudioSamplerate @@ -1360,20 +1374,20 @@ Autorisation d'acces Autorisation d'acces - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autoriser Toestaan - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Autorisez-vous l'application %application_name% a acceder a votre contenu sur %home_title% ? Autorisez-vous l'application %application_name% a acceder a votre contenu sur %home_title% ? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Available in multi-export tab @@ -1388,11 +1402,11 @@ Back Terug - mobile/lightbox/basket_element.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/basket_element.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Back to Feedback @@ -1430,9 +1444,9 @@ Base %base% Database %base% + web/admin/editusers_timelimit_sbas.html.twig web/admin/editusers_quotas.html.twig web/admin/editusers_timelimit.html.twig - web/admin/editusers_timelimit_sbas.html.twig Base could not be created @@ -1444,6 +1458,11 @@ Database met succes geledigd Controller/Admin/DataboxController.php + + Basket + Basket + prod/WorkZone/Macros.html.twig + Basket created Mandje werd aangemaakt @@ -1472,7 +1491,7 @@ Basket is not found Basket is not found - Model/Repositories/BasketRepository.php + Model/Repositories/BasketRepository.php Basket updated @@ -1512,9 +1531,9 @@ Browse Baskets Mandjes doorbladeren - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Browser @@ -1524,7 +1543,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 +1561,7 @@ By field By field - web/prod/index.html.twig + web/prod/index.html.twig CHAMPS @@ -1552,20 +1571,20 @@ Camera Model Cameramodel - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig Cancel Annuleren Controller/Prod/LanguageController.php - prod/actions/delete_records_confirm.html.twig + user/import/view.html.twig + task-manager/task-editor/task.html.twig + admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig actions/Property/type.html.twig actions/Property/index.html.twig - prod/User/Add.html.twig - task-manager/task-editor/task.html.twig - user/import/view.html.twig - admin/fields/templates.html.twig + prod/User/Add.html.twig Cancel all @@ -1586,7 +1605,7 @@ Carousel Carousel - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Categorie @@ -1676,7 +1695,7 @@ Certaines donnees du panier ont change Sommige gegevens in het mandje zijn veranderd - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig Certaines donnees du reportage ont change @@ -1733,8 +1752,6 @@ Choisir Kiezen - prod/Baskets/Reorder.html.twig - prod/Story/Reorder.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig @@ -1742,23 +1759,20 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig + prod/Baskets/Reorder.html.twig + prod/Story/Reorder.html.twig Choose a new password Kies een nieuw paswoord - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Choose the title of the document to export Kies een naam voor het document bij de export Form/Configuration/ActionsFormType.php - - City - Stad - prod/User/Add.html.twig - Civility Beleefdheid @@ -1767,8 +1781,8 @@ Clear Wis - admin/task-manager/log_task.html.twig admin/task-manager/log_scheduler.html.twig + admin/task-manager/log_task.html.twig Clear list @@ -1804,7 +1818,7 @@ Codec Audio Audio Codec - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig @@ -1815,9 +1829,9 @@ Collection Collectie - prod/Story/Create.html.twig - prod/upload/lazaret.html.twig admin/databox/details.html.twig + prod/Story/Create.html.twig + prod/upload/lazaret.html.twig Collection %collection% @@ -1833,7 +1847,7 @@ Collection order Collection order - web/prod/index.html.twig + web/prod/index.html.twig Color Depth @@ -1848,13 +1862,13 @@ Colorspace Colorspace - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Commande Bestelling + eventsmanager/notify/orderdeliver.php eventsmanager/notify/ordernotdelivered.php - eventsmanager/notify/orderdeliver.php Commande du %date% @@ -1864,13 +1878,13 @@ Commandes Commandos - web/common/menubar.html.twig + web/common/menubar.html.twig Company Bedrijf - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig prod/User/Add.html.twig @@ -1904,7 +1918,7 @@ Configuration Configuratie - web/prod/index.html.twig + web/prod/index.html.twig Confirm new email address @@ -1929,13 +1943,13 @@ Connection Verbinding - login/providers/mapping.html.twig - login/providers/mapping.html.twig + login/oauth/login.html.twig + web/login/index.html.twig + web/login/index.html.twig login/providers/bind.html.twig login/providers/bind.html.twig - web/login/index.html.twig - web/login/index.html.twig - login/oauth/login.html.twig + login/providers/mapping.html.twig + login/providers/mapping.html.twig Connection is OK but database does not exists or can not be accessed @@ -1950,7 +1964,7 @@ Connection to FTP succeed De verbinding met de FTP is geslaagd - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Consultez en ligne les pré-requis et la configuration du serveur web @@ -1960,7 +1974,7 @@ Contains Contains - web/prod/index.html.twig + web/prod/index.html.twig Continuer ? @@ -1980,7 +1994,7 @@ Cooliris Cooliris - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Copiez le code ci-dessous, retournez dans votre application et collez-le a l'endroit requis : @@ -2015,13 +2029,13 @@ Couleur de selection Kleur van de selectie - web/prod/index.html.twig + web/prod/index.html.twig Country Land - actions/Feedback/list.html.twig actions/Feedback/ListsMacros.html.twig + actions/Feedback/list.html.twig Create a user @@ -2036,7 +2050,7 @@ Create index Create index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Creation date @@ -2126,7 +2140,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 +2238,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 +2253,7 @@ Date Updated Date Updated - web/prod/index.html.twig + web/prod/index.html.twig Date de connexion @@ -2268,13 +2282,13 @@ Date(s) from field(s) Date(s) from field(s) - web/prod/index.html.twig + web/prod/index.html.twig De De - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Deadline @@ -2296,7 +2310,7 @@ Deconnexion Log out - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Decouvrez la documentation @@ -2306,12 +2320,12 @@ Default TTL in seconds of sub-definition url Default TTL in seconds of sub-definition url - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Default basket Standaard mandje - Phrasea/Helper/WorkZone.php + Phrasea/Helper/WorkZone.php Default export title @@ -2346,7 +2360,7 @@ Defined by admin Defined by admin - web/prod/index.html.twig + web/prod/index.html.twig Defined in Apache configuration @@ -2366,9 +2380,9 @@ Delete Verwijder - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Delete account successfull @@ -2378,13 +2392,13 @@ Delete all users rights Verwijder alle gebruikersrechten - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Delete basket Verwijder mandje - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig Delete current @@ -2414,9 +2428,9 @@ Deny Weiger + login/oauth/authorize-access.html.twig prod/orders/order_item.html.twig prod/orders/order_item.html.twig - login/oauth/authorize-access.html.twig Deplacement %n_element% elements @@ -2449,29 +2463,29 @@ Description Beschrijving + web/developers/application_form.html.twig Bridge/Dailymotion/upload.html.twig Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/upload.html.twig Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig Bridge/Flickr/photo_modify.html.twig prod/Tooltip/DCESFieldInfo.html.twig - web/developers/application_form.html.twig Deselect all Alles deselecteren - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Design of personalization logo section Design of personalization logo section - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Detailed view URL @@ -2498,8 +2512,8 @@ Dimension Afmeting Media/Subdef/Image.php - Media/Subdef/Unknown.php Media/Subdef/Video.php + Media/Subdef/Unknown.php Disable document type sharing @@ -2524,17 +2538,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 @@ -2560,13 +2574,12 @@ Do you want to send your report ? Wenst u uw rapport te sturen ? Phrasea/Controller/LightboxController.php - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig Document Document - web/prod/index.html.twig + web/prod/index.html.twig Document Type Sharing @@ -2581,7 +2594,7 @@ Document has been successfully substitued Document werd met succes vervangen - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% @@ -2634,7 +2647,7 @@ Drop index Drop index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Duree @@ -2722,7 +2735,7 @@ Edition impossible Kan niet worden bewerkt - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Editor @@ -2742,19 +2755,19 @@ ElasticSearch index name ElasticSearch index name - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch server host ElasticSearch server host - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig ElasticSearch service port ElasticSearch service port - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -2968,7 +2981,7 @@ End Range End Range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php End session activity @@ -3008,7 +3021,7 @@ Equals Equals - web/prod/index.html.twig + web/prod/index.html.twig Erreur @@ -3018,8 +3031,8 @@ Erreur ! Fout ! - mobile/lightbox/error.html.twig web/lightbox/error.html.twig + mobile/lightbox/error.html.twig Erreur : soit les parametres sont incorrects, soit le serveur distant ne repond pas @@ -3096,12 +3109,12 @@ Error while connecting to FTP Error while connecting to FTP - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Error while creating user Fout tijdens het aanmaken van gebruiker - Controller/Prod/PushController.php + Controller/Prod/PushController.php Error while saving preference @@ -3112,8 +3125,8 @@ Error while sending the file Fout bij het versturen van het bestaan - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Error while uploading @@ -3151,7 +3164,7 @@ Ex : Paris, bleu, montagne Ex : Paris, bleu, montagne - web/prod/index.html.twig + web/prod/index.html.twig Executables externes @@ -3163,6 +3176,11 @@ Executables instellingen Form/Configuration/MainConfigurationFormType.php + + Expiration date successfully updated! + Expiration date successfully updated! + Controller/Prod/PushController.php + Export Exporteer @@ -3173,12 +3191,12 @@ Export ranges Export ranges - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Export saved in the waiting queue Export werd in de wachtrij geplaatst - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php FR @@ -3209,10 +3227,10 @@ Feedback Feedback Controller/Prod/LanguageController.php + prod/WorkZone/Macros.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig Feeds @@ -3267,11 +3285,11 @@ File is not present in quarantine anymore, please refresh Bestand is niet meer in de quarantiane aanwezig, gelieve te vernieuwen + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php - Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php File is too big : 64k max @@ -3301,13 +3319,13 @@ Filename Bestandsnaam - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles Beschikbare paden - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig Filter @@ -3327,20 +3345,20 @@ First/Last Name Voor/Achter naam - actions/Feedback/ListsMacros.html.twig web/admin/users.html.twig web/admin/users.html.twig + actions/Feedback/ListsMacros.html.twig Flash Flash - web/prod/index.html.twig + web/prod/index.html.twig web/common/technical_datas.html.twig FlashFired FlashFired - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Flatten layers @@ -3356,7 +3374,7 @@ Force authentication Force authentication - prod/templates/push.html.twig + prod/templates/push.html.twig Force sending of the document ? @@ -3376,10 +3394,10 @@ Forgot password? Wachtwoord vergeten? - login/providers/mapping.html.twig - login/providers/bind.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig Forgot your password? @@ -3399,7 +3417,7 @@ FrameRate FrameRate - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Frequence d'echantillonage @@ -3419,7 +3437,7 @@ Gallery Galerij - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php General configuration @@ -3431,6 +3449,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 +3488,7 @@ Geo Search Geo Search - web/prod/index.html.twig + web/prod/index.html.twig Geonames server address @@ -3480,7 +3503,7 @@ Get setting form index Get setting form index - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php Gives the option to your application to communicate with Phraseanet. This webhook can be used to trigger some actions on your application side. @@ -3490,22 +3513,22 @@ Go 1 frame backward Go 1 frame backward - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go 1 frame forward Go 1 frame forward - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go to end point Go to end point - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Go to start point Go to start point - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Good @@ -3540,7 +3563,7 @@ Graphiste (preview au rollover) Graficus (preview au rollover) - web/prod/index.html.twig + web/prod/index.html.twig Great @@ -3555,8 +3578,9 @@ Guest Gast - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + mobile/common/menubar.html.twig Guest access @@ -3568,6 +3592,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 @@ -3576,14 +3610,14 @@ Hello %username% Hallo %username% - api/auth/end_user_authorization.html.twig - api/auth/native_app_access_token.html.twig api/auth/end_user_authorization.html.twig + api/auth/native_app_access_token.html.twig + api/auth/end_user_authorization.html.twig Help Help - login/layout/base-layout.html.twig + login/layout/base-layout.html.twig Hi, Please log in @@ -3598,16 +3632,16 @@ Home Startpagina - mobile/lightbox/basket_element.html.twig - 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 + mobile/lightbox/basket_element.html.twig + mobile/lightbox/feed.html.twig + mobile/lightbox/validate.html.twig Homepage slideshow Startpagina diavoorstelling - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Hyperfocal distance @@ -3628,7 +3662,7 @@ ISO ISO - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php ISO sensibility @@ -3638,7 +3672,7 @@ Iconographe (description au rollover) Iconographe (beschrijving bij de rollover) - web/prod/index.html.twig + web/prod/index.html.twig Id @@ -3683,7 +3717,7 @@ Image Beeld - web/prod/index.html.twig + web/prod/index.html.twig ImageMagick @@ -3693,7 +3727,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 +3743,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 +3755,7 @@ Incorrect please try again Fout gelieve opnieuw te proberen - web/common/macros.html.twig + web/common/macro_captcha.html.twig Indexable @@ -3741,9 +3775,9 @@ Informations Informatie - web/account/base.html.twig web/admin/dashboard.html.twig admin/user/registrations.html.twig + web/account/base.html.twig Informations personnelles @@ -3779,14 +3813,14 @@ Invalid file format Ongeldige bestandsindeling - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid file type Ongeldig bestandstype - prod/upload/upload-flash.html.twig admin/collection/collection.html.twig + prod/upload/upload-flash.html.twig Invalid file type, only (%supported_file_types%) file formats are supported @@ -3803,8 +3837,8 @@ Invalid labels parameter Ongeldige parameter voor labels - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Invalid link. @@ -3877,17 +3911,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 @@ -3930,10 +3964,10 @@ admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig - - Language - Language - web/prod/index.html.twig + + Language selection + Language selection + web/prod/index.html.twig Last Name @@ -3963,7 +3997,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 +4099,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 @@ -4080,14 +4114,14 @@ Lightbox Lightbox - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Limite temporelle Tijdelijk limiet - web/admin/editusers_timelimit.html.twig web/admin/editusers_timelimit_sbas.html.twig + web/admin/editusers_timelimit.html.twig Limited vocabulary @@ -4165,10 +4199,10 @@ Login Login Form/Login/PhraseaAuthenticationForm.php - actions/Feedback/ListsMacros.html.twig - login/providers/mapping.html.twig - login/providers/bind.html.twig login/oauth/login.html.twig + login/providers/bind.html.twig + login/providers/mapping.html.twig + actions/Feedback/ListsMacros.html.twig Login %login% already exists in database @@ -4188,8 +4222,8 @@ Login to link your account Login om uw gebruiker te linken - login/providers/mapping.html.twig login/providers/bind.html.twig + login/providers/mapping.html.twig Logs @@ -4200,7 +4234,7 @@ Ma derniere question Mijn laatste vraag - web/prod/index.html.twig + web/prod/index.html.twig Mail line %line% is empty @@ -4267,6 +4301,16 @@ Masks web/admin/editusers_masks.html.twig + + Matomo Analytics identifier + Matomo Analytics identifier + Form/Configuration/GeneralFormType.php + + + Matomo Analytics url + Matomo Analytics url + Form/Configuration/GeneralFormType.php + Maximum megabytes allowed for download Maximum toegestaan megabytes voor de download @@ -4286,7 +4330,7 @@ Message Bericht Controller/Prod/LanguageController.php - prod/templates/push.html.twig + prod/templates/push.html.twig Message automatique de Phraseanet @@ -4306,7 +4350,7 @@ MimeType MimeType - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Minimum number of letters before truncation @@ -4321,8 +4365,8 @@ Missing labels parameter Ontbrekende parameter voor labels - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php Missing mandatory parameter %parameter% @@ -4357,7 +4401,7 @@ Mode de presentation Presentatie mode - web/prod/index.html.twig + web/prod/index.html.twig Modele de donnees @@ -4367,8 +4411,8 @@ Models Modellen - actions/Feedback/list.html.twig admin/user/registrations.html.twig + actions/Feedback/list.html.twig Modify @@ -4399,7 +4443,7 @@ Move down range Move down range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Move one record to the chosen collection in the list. @@ -4409,7 +4453,7 @@ Move up range Move up range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Moves records @@ -4441,10 +4485,10 @@ Name Naam Controller/Prod/LanguageController.php - Bridge/Dailymotion/playlist_createcontainer.html.twig - actions/Download/prepare.html.twig - prod/templates/push.html.twig admin/fields/templates.html.twig + actions/Download/prepare.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + prod/templates/push.html.twig Name or email @@ -4464,8 +4508,8 @@ Ne pas autoriser Niet toestaan - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Ne pas creer de DataBox maintenant @@ -4481,14 +4525,14 @@ New password Nieuw wachtwoord - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New password (confirmation) Nieuw wachtwoord (bevestiging) - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php New task @@ -4498,15 +4542,15 @@ Next Volgende - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig No Nee - web/account/account.html.twig web/developers/applications.html.twig + web/account/account.html.twig No URL available @@ -4541,7 +4585,7 @@ No document selected Geen document geselecteerd - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig No elements to push @@ -4576,7 +4620,7 @@ No preview available Geen voorvertoning beschikbaar - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig No receivers specified @@ -4591,8 +4635,7 @@ No results Geen resultaten - WorkZone/Browser/Results.html.twig - WorkZone/Browser/Results.html.twig + WorkZone/Browser/Results.html.twig No thesaurus concept query @@ -4627,8 +4670,8 @@ Nom du nouveau panier Naam van het nieuwe mandje - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig Non-Restreinte (publique) @@ -4651,7 +4694,7 @@ None of the selected records can be printed Geen enkele van de geselecteerde records kunnen geprint worden - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig None of the selected records can be pushed. @@ -4671,7 +4714,8 @@ Not aggregated Not aggregated - admin/fields/templates.html.twig + admin/search-engine/general-aggregation.html.twig + admin/fields/templates.html.twig Notification par email @@ -4681,13 +4725,13 @@ Notifications Mededelingen - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig Notifications globales Algemene meldingen - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php Notify third party application when an event occurs in Phraseanet @@ -4737,13 +4781,13 @@ Number of replicas Number of replicas - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Number of shards Number of shards - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig @@ -4760,8 +4804,8 @@ Ok Ok - prod/actions/delete_records_confirm.html.twig admin/fields/templates.html.twig + prod/actions/delete_records_confirm_form.html.twig One document can not be modified. @@ -4781,7 +4825,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. @@ -4806,9 +4850,9 @@ Or login with Of meld aan met - web/login/register.html.twig - web/login/index.html.twig login/oauth/login.html.twig + web/login/index.html.twig + web/login/register.html.twig api/auth/end_user_authorization.html.twig @@ -4834,7 +4878,7 @@ Orders manager Beheerder bestellingen eventsmanager/notify/order.php - web/common/menubar.html.twig + web/common/menubar.html.twig Ordinary @@ -4844,7 +4888,7 @@ Orientation Orientation - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Original name @@ -4881,19 +4925,19 @@ Paniers Mandjes - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig - web/account/account.html.twig - web/lightbox/index.html.twig + web/lightbox/validate.html.twig + web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/account/account.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Par %author% Per %author% - mobile/lightbox/feed.html.twig prod/results/feeds_entry.html.twig prod/results/entry.html.twig + mobile/lightbox/feed.html.twig Password @@ -4932,11 +4976,6 @@ Pause Controller/Prod/LanguageController.php - - Pays - Pays - prod/User/Add.html.twig - Periodically fetches an FTP repository content locally Periodically fetches an FTP repository content locally @@ -5129,10 +5168,10 @@ Preferences Voorkeuren - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig Prefix for notification emails @@ -5147,12 +5186,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 @@ -5162,9 +5201,9 @@ Previous Vorige - actions/Feedback/ListsMacros.html.twig prod/orders/order_box.html.twig prod/orders/order_box.html.twig + actions/Feedback/ListsMacros.html.twig Print @@ -5174,8 +5213,8 @@ Problemes de connexion ? Problemes de connexion ? - api/auth/end_user_authorization.html.twig api/auth/end_user_authorization.html.twig + api/auth/end_user_authorization.html.twig Process the registration @@ -5205,10 +5244,10 @@ Publications Publicaties - web/prod/index.html.twig - admin/publications/wrapper.html.twig web/admin/tree.html.twig - web/common/menubar.html.twig + admin/publications/wrapper.html.twig + web/prod/index.html.twig + web/common/menubar.html.twig Publier @@ -5229,8 +5268,9 @@ Push Push - eventsmanager/notify/push.php Controller/Prod/LanguageController.php + eventsmanager/notify/push.php + prod/WorkZone/Macros.html.twig Push configuration @@ -5245,26 +5285,26 @@ Push::filter on companies filter op bedrijven - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on countries filter op landen - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on emails filter op emails - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on login filter bij login - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::filter on name @@ -5279,8 +5319,8 @@ Push::filter starts filter starts - actions/Feedback/list.html.twig web/admin/users.html.twig + actions/Feedback/list.html.twig Push::une validation est une demande d'appreciation a d'autres personnes @@ -5317,80 +5357,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,25 +5445,25 @@ 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 Hersorteren prod/Baskets/Reorder.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod/Story/Reorder.html.twig @@ -5460,22 +5500,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 +5555,7 @@ Rechercher dans un champ date Zoeken in een datum veld - web/prod/index.html.twig + web/prod/index.html.twig Recommendations @@ -5535,7 +5575,7 @@ Record Not Found Document niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -5545,7 +5585,7 @@ Record removed from story Record uit de story verwijderd - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Record_id @@ -5560,7 +5600,7 @@ Records have been successfuly moved Records werden met succes verplaatst - Controller/Prod/MoveCollectionController.php + Controller/Prod/MoveCollectionController.php Records type @@ -5576,10 +5616,10 @@ Register Aanmelden - web/login/register-classic.html.twig - web/login/register.html.twig - web/login/register-provider.html.twig login/include/register-link-block.html.twig + web/login/register-classic.html.twig + web/login/register-provider.html.twig + web/login/register.html.twig Register approbation @@ -5594,19 +5634,19 @@ Reglages:: reglages d acces guest instellingen voor gasttoegang - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Reglages:: reglages d inscitpition automatisee instellingen voor automatisch inschrijven - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig Relevance Relevance - web/prod/index.html.twig + web/prod/index.html.twig Remember me @@ -5627,7 +5667,7 @@ Remove current Range Remove current Range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Remove from basket @@ -5648,8 +5688,8 @@ Renew password Vernieuw password Notification/Mail/MailRequestPasswordUpdate.php - web/account/change-password.html.twig web/login/renew-password.html.twig + web/account/change-password.html.twig Reorder collections @@ -5670,7 +5710,7 @@ Report Overzicht - admin/fields/templates.html.twig + admin/fields/templates.html.twig Request access @@ -5883,20 +5923,25 @@ Save Opslaan - actions/Feedback/list.html.twig - web/account/change-password.html.twig - admin/search-engine/general-aggregation.html.twig + web/login/renew-password.html.twig + admin/search-engine/general-aggregation.html.twig admin/search-engine/elastic-search.html.twig task-manager/task-editor/task.html.twig web/developers/application.html.twig web/developers/application.html.twig - web/login/renew-password.html.twig + actions/Feedback/list.html.twig + web/account/change-password.html.twig Save all changes Alle wijzigingen opslaan admin/fields/templates.html.twig + + Save as VTT + Save as VTT + Controller/Prod/LanguageController.php + Save the list Save the list @@ -5930,8 +5975,8 @@ SearchEngine settings Instellingen zoek motor - web/setup/step2.html.twig web/admin/tree.html.twig + web/setup/step2.html.twig Security @@ -5942,6 +5987,7 @@ See Zie WorkZone/Browser/Browser.html.twig + prod/WorkZone/Macros.html.twig See documentation about structure manipulation. @@ -5957,8 +6003,8 @@ See my order Bekijk mijn opdracht - Notification/Mail/MailInfoOrderCancelled.php Notification/Mail/MailInfoOrderDelivered.php + Notification/Mail/MailInfoOrderCancelled.php See others @@ -5978,7 +6024,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 ! @@ -5988,10 +6034,10 @@ Select all Alles selecteren - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/report/report_layout_child.html.twig web/report/form_date_and_base.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Select all collections @@ -6001,19 +6047,19 @@ Select files... Selecteer files... - prod/upload/upload.html.twig - prod/upload/upload-flash.html.twig + user/import/file.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/collection.html.twig - user/import/file.html.twig admin/statusbit/edit.html.twig admin/statusbit/edit.html.twig + prod/upload/upload.html.twig + prod/upload/upload-flash.html.twig Selected base(s) Selected base(s) - web/prod/index.html.twig + web/prod/index.html.twig Selected files @@ -6024,14 +6070,14 @@ Send Versturen Controller/Prod/LanguageController.php + web/login/forgot-password.html.twig + web/admin/dashboard.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod/actions/Push.html.twig prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - web/admin/dashboard.html.twig - web/login/forgot-password.html.twig Send an email to the user to setup his password @@ -6064,7 +6110,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 @@ -6147,7 +6193,7 @@ Shutter speed Sluitersnelheid - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php web/common/technical_datas.html.twig @@ -6173,7 +6219,7 @@ Single image Enkel beeld - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Site web @@ -6183,14 +6229,14 @@ Size Grootte - actions/Tools/videoEditor.html.twig actions/Download/prepare.html.twig + actions/Tools/videoEditor.html.twig web/common/technical_datas.html.twig Slide show Diavoorstelling - Form/Configuration/GeneralFormType.php + Form/Configuration/GeneralFormType.php Some files are being downloaded @@ -6205,7 +6251,7 @@ Something went wrong Er is iets fout gegaan - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php Something went wrong, please contact an administrator @@ -6240,9 +6286,9 @@ Source Bron - prod/Tooltip/DataboxField.html.twig admin/fields/templates.html.twig admin/fields/templates.html.twig + prod/Tooltip/DataboxField.html.twig Sous-titre @@ -6269,7 +6315,7 @@ Start Range Start Range - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php Start by creating one by using the "add" button on the left ! @@ -6290,7 +6336,7 @@ Status des documents a rechercher Status van de te zoeken documenten - web/prod/index.html.twig + web/prod/index.html.twig Status edition @@ -6310,10 +6356,10 @@ Stop Stop - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig admin/task-manager/templates.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Stopped @@ -6324,16 +6370,18 @@ Stories Verhalen Form/Configuration/SearchEngineFormType.php + prod/WorkZone/Macros.html.twig Story Not Found Artikel niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V3Controller.php + Controller/Api/V1Controller.php Story created Story gemaakt - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story detached from the WorkZone @@ -6348,7 +6396,7 @@ Story updated Story updated - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php Story_id @@ -6383,8 +6431,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 @@ -6405,16 +6453,22 @@ Successful removal Met succes verwijderd - Controller/Admin/DataboxController.php - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php + Controller/Admin/DataboxController.php Successful update Geslaagde update + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php + Controller/Admin/CollectionController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php @@ -6422,16 +6476,10 @@ Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php Controller/Admin/DataboxController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - Controller/Admin/CollectionController.php - actions/Tools/videoEditor.html.twig web/admin/databases.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig + actions/Tools/videoEditor.html.twig Successfull connection @@ -6567,9 +6615,9 @@ Terms of use Gebruikersvoorwaarden Controller/Prod/TOUController.php - web/admin/tree.html.twig + login/layout/base-layout.html.twig web/login/cgus.html.twig - login/layout/base-layout.html.twig + web/admin/tree.html.twig The Phraseanet Web API allows other web application to rely on this instance @@ -6579,7 +6627,7 @@ The URL you used is out of date, please login De gebruikte URL is niet meer geldig, gelieve u aan te melden - Phrasea/ControllerProvider/Lightbox.php + Phrasea/ControllerProvider/Lightbox.php The Youtube servers have received too many calls from the same caller in a short amount of time. @@ -6590,7 +6638,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 +6658,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 @@ -6650,8 +6698,8 @@ The file is too big Het bestand is te groot - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The file was moved to the quarantine @@ -6663,11 +6711,16 @@ De volgende fouten werden opgemerkt user/import/view.html.twig + + The provided date is null! + The provided date is null! + Controller/Prod/PushController.php + The publication has been stopped Het programma is gestopt - Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php + Controller/Admin/DataboxController.php The record was successfully created @@ -6708,7 +6761,7 @@ Theme Thema - web/prod/index.html.twig + web/prod/index.html.twig There is no one to validate orders, please contact an administrator @@ -6728,13 +6781,13 @@ Thesaurus Min score Thesaurus Min score - SearchEngine/Elastic/ElasticsearchSettingsFormType.php + SearchEngine/Elastic/ElasticsearchSettingsFormType.php web/setup/step2.html.twig Thesaurus branch Thesaurus tak - admin/fields/templates.html.twig + admin/fields/templates.html.twig Thesaurus ou CTerms invalide @@ -6764,8 +6817,8 @@ This feed is public Deze feed is publiek - actions/publish/publish.html.twig admin/publications/list.html.twig + actions/publish/publish.html.twig This field is required @@ -6801,7 +6854,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 @@ -6821,7 +6874,7 @@ Thumbnail has been successfully substitued Thumbnail werd met succes vervangen - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Thumbnails directory is mounted to be accessible via HTTP, while other files are not. @@ -6837,19 +6890,19 @@ Titre Titel - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/upload.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/upload.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Flickr/photoset_createcontainer.html.twig - Bridge/Flickr/upload.html.twig - Bridge/Flickr/photo_modify.html.twig - prod/Story/Reorder.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/publications/list.html.twig + prod/Baskets/Reorder.html.twig + Bridge/Dailymotion/upload.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Youtube/upload.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Flickr/upload.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig Toggle loop @@ -6880,12 +6933,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 +6964,7 @@ Trier par Sorteren op - web/prod/index.html.twig + web/prod/index.html.twig Try to extract embedded thumbnails @@ -6936,7 +6989,7 @@ Type de documents Type van de documenten - web/prod/index.html.twig + web/prod/index.html.twig Type nombre @@ -6951,8 +7004,8 @@ URL de callback callback URL - web/developers/application_form.html.twig web/developers/application.html.twig + web/developers/application_form.html.twig Un document commande @@ -6967,8 +7020,8 @@ Unable to add file to Phraseanet Onmogelijk om een bestand aan Phraseanet toe te voegen - Controller/Admin/FeedController.php Controller/Prod/UploadController.php + Controller/Admin/FeedController.php Unable to add usr to list @@ -6978,8 +7031,8 @@ Unable to authenticate with %provider_name% Unable to authenticate with %provider_name% - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php Unable to connect to MySQL server @@ -7021,8 +7074,13 @@ Unable to retrieve provider identity Het is niet mogelijk om de identiteit van de provider te ontvangen - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php + + + Unable to save the expiration date + Unable to save the expiration date + Controller/Prod/PushController.php Unable to send the documents @@ -7059,15 +7117,15 @@ Une question personnelle Een persoonlijke vraag - web/prod/index.html.twig + web/prod/index.html.twig Une selection Een selectie - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php Unhandled Error @@ -7126,7 +7184,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 +7209,7 @@ Uploaded by : %username% Opgeladen door : %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7171,7 +7229,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 @@ -7228,10 +7286,10 @@ Controller/Prod/LanguageController.php prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig prod/templates/push.html.twig - prod/templates/push.html.twig + prod/templates/push.html.twig prod/templates/push.html.twig + prod/templates/push.html.twig User can see others choices @@ -7250,16 +7308,16 @@ User successfully created Gebruiker met succes aangemaakt - Controller/Prod/PushController.php + Controller/Prod/PushController.php Users Gebruikers Vocabulary/ControlProvider/UserProvider.php - prod/actions/Push.html.twig - actions/Feedback/list.html.twig web/admin/users.html.twig user/import/view.html.twig + prod/actions/Push.html.twig + actions/Feedback/list.html.twig Users must accept Terms of Use for each export @@ -7279,8 +7337,8 @@ VALIDATION VALIDATIE - web/lightbox/agreement_box.html.twig web/lightbox/validate.html.twig + web/lightbox/agreement_box.html.twig Validate e-mail address @@ -7290,11 +7348,11 @@ Validation Goedkeuring - eventsmanager/notify/validationdone.php - eventsmanager/notify/validationreminder.php - eventsmanager/notify/validationreminder.php eventsmanager/notify/validate.php eventsmanager/notify/validate.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationreminder.php + eventsmanager/notify/validationdone.php lightbox/IE6/validate.html.twig @@ -7310,11 +7368,11 @@ Validations Controles - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + web/lightbox/validate.html.twig web/lightbox/index.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig Validations received @@ -7349,7 +7407,7 @@ Video Video - web/prod/index.html.twig + web/prod/index.html.twig Video Codec @@ -7359,7 +7417,7 @@ Video codec Video codec - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php Videos @@ -7375,24 +7433,24 @@ 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 Uw mandjes - mobile/lightbox/index.html.twig - web/lightbox/index.html.twig + web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Voici vos validations en cours Een controle in proces - mobile/lightbox/index.html.twig web/lightbox/index.html.twig + mobile/lightbox/index.html.twig Votre adresse email @@ -7427,7 +7485,7 @@ Vous avez envoye une demande de validation de document sur ce panier U hebt een aanvraag tot goedkeuring van documenten in dit mandje verstuurd - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig Vous avez recu des documents @@ -7439,11 +7497,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 +7604,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 ! @@ -7571,8 +7624,8 @@ Watch my access requests status Bekijk de status van mijn toegangsaanvraag - Notification/Mail/MailSuccessAccessRequest.php Notification/Mail/MailSuccessEmailConfirmationUnregistered.php + Notification/Mail/MailSuccessAccessRequest.php Watermark @@ -7652,15 +7705,15 @@ 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 Ja - web/account/account.html.twig user/import/view.html.twig web/developers/applications.html.twig + web/account/account.html.twig You are Admin @@ -7747,7 +7800,7 @@ You can not edit this story U kan deze story niet bewerken - Controller/Prod/StoryController.php + Controller/Prod/StoryController.php You can not upload files @@ -7773,17 +7826,17 @@ You do not have required rights to send these documents over FTP U hebt niet de nodige rechten om deze documenten te versturen over FTP - Controller/Prod/ExportController.php + Controller/Prod/ExportController.php You do not have rights to remove all selected documents. Are you sure ? U hebt geen rechten om alle geselecteerde document te verwijderen. Bent u zeker? - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have rights to remove selected documents U hebt geen rechten om de geselecteerde documenten te verwijderen - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig You do not have the permission to move records to %collection% @@ -7808,7 +7861,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. @@ -7823,7 +7876,7 @@ You have to give your feedback at least on one document to send a report U moet op tenminste één document feedback geven om een rapport te versturen - Phrasea/Controller/LightboxController.php + Phrasea/Controller/LightboxController.php You have to wait for an administrator approval for your access request @@ -7848,7 +7901,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 @@ -7869,12 +7922,12 @@ You will no longer receive notifications at %old_email% You will no longer receive notifications at %old_email% - Helper/User/Edit.php + Helper/User/Edit.php You will now receive notifications at %new_email% You will now receive notifications at %new_email% - Helper/User/Edit.php + Helper/User/Edit.php Your %provider_name% account matchs a Phraseanet account @@ -7960,150 +8013,148 @@ a propos Over - mobile/lightbox/index.html.twig - mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig + mobile/lightbox/index.html.twig action : ajouter au panier aan mandje toevoegen + prod/preview/tools.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : bridge Bridge - web/prod/index.html.twig + web/prod/index.html.twig action : collection Collectie prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : editer Wijzigen prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig prod/preview/caption.html.twig + web/prod/toolbar.html.twig action : exporter Exporteer + web/lightbox/feed.html.twig + web/lightbox/validate.html.twig + lightbox/IE6/feed.html.twig + lightbox/IE6/validate.html.twig prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig - web/prod/index.html.twig - web/lightbox/feed.html.twig - lightbox/IE6/feed.html.twig - lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig + web/prod/index.html.twig action : outils Gereedschappen prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : print Print prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + prod/preview/tools.html.twig + web/prod/toolbar.html.twig prod/results/record.html.twig prod/results/record.html.twig prod/results/record.html.twig - prod/preview/tools.html.twig action : publier Publiceren 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 + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig + web/prod/index.html.twig action : push Push prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : status Status prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Basket.html.twig + web/prod/toolbar.html.twig action : supprimer Verwijderen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - web/prod/toolbar.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + web/prod/toolbar.html.twig action:: nouveau panier Nieuw mandje - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action:: nouveau reportage Nieuwe reportage - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig action::Valider Valideren - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::detacher Ontkoppelen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::editer Aanpassen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::exporter Exporteren - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig action::renommer Hernoemen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig actual status @@ -8456,19 +8507,19 @@ Activiteit Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig + web/account/account.html.twig admin::compte-utilisateur adresse Adres Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur changer mon mot de passe @@ -8480,9 +8531,9 @@ Postcode Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur confirmer la nouvelle adresse email @@ -8504,21 +8555,21 @@ Email Controller/Admin/UserController.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur fax Fax Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur id utilisateur @@ -8529,35 +8580,35 @@ admin::compte-utilisateur identifiant Identificatie Core/Provider/RegistrationServiceProvider.php + web/admin/users.html.twig + web/admin/editusers.html.twig + admin/user/registrations.html.twig api/auth/end_user_authorization.html.twig - web/account/reset-email.html.twig + web/common/dialog_export.html.twig web/account/account.html.twig web/account/account.html.twig - web/admin/editusers.html.twig - web/admin/users.html.twig - admin/user/registrations.html.twig - web/common/dialog_export.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur mot de passe Paswoord api/auth/end_user_authorization.html.twig web/setup/step2.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig admin::compte-utilisateur nom Naam Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur nouvelle adresse email @@ -8575,40 +8626,40 @@ Postcode Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur prenom Voornaam Controller/Admin/UserController.php - Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php - web/account/account.html.twig + Core/Provider/RegistrationServiceProvider.php web/admin/editusers.html.twig admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur sexe Geslacht Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig + web/account/account.html.twig admin::compte-utilisateur societe Bedrijf Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig - web/admin/editusers.html.twig web/admin/users.html.twig - admin/user/registrations.html.twig + web/admin/editusers.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur tel @@ -8619,11 +8670,11 @@ admin::compte-utilisateur telephone Telefoon Controller/Admin/UserController.php - web/account/account.html.twig web/admin/editusers.html.twig - admin/user/registrations.html.twig web/admin/connected-users.html.twig + admin/user/registrations.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur un email de confirmation vient de vous etre envoye. Veuillez suivre les instructions contenue pour continuer @@ -8635,9 +8686,9 @@ Star Controller/Admin/UserController.php Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur: L'email a correctement ete mis a jour @@ -8687,8 +8738,8 @@ admin::compte-utilisateur:ftp: repertoire de destination ftp Bestemmings ftp-map - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Activer le compte FTP @@ -8703,14 +8754,14 @@ admin::compte-utilisateur:ftp: Nombre d'essais max Aantal max probeersels - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: Utiliser le mode passif Gebruik de passive mode - web/account/account.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:ftp: creer un dossier @@ -8731,25 +8782,25 @@ admin::compte-utilisateur:sexe: madame Mevrouw Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: mademoiselle Jufrouw Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::compte-utilisateur:sexe: monsieur De heer Core/Provider/RegistrationServiceProvider.php - web/account/account.html.twig web/admin/editusers.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig admin::monitor: bases sur lesquelles l'utilisateur est connecte : @@ -8769,26 +8820,26 @@ admin::monitor: module admin Beheerder - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module client Klant module - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module comparateur Vergelijkings module - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig @@ -8799,44 +8850,44 @@ admin::monitor: module production Productie - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php classes/record/preview.php classes/record/preview.php classes/record/preview.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig admin::monitor: module report Rapport - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module thesaurus Thesaurus - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/admin/connected-users.html.twig web/common/menubar.html.twig admin::monitor: module upload Upload - lib/classes/phrasea.php Controller/Admin/ConnectedUsersController.php - web/common/menubar.html.twig + lib/classes/phrasea.php + web/common/menubar.html.twig admin::monitor: module validation Lightbox - lib/classes/phrasea.php + Controller/Admin/ConnectedUsersController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php Phrasea/Controller/LightboxController.php - Controller/Admin/ConnectedUsersController.php + lib/classes/phrasea.php web/common/menubar.html.twig @@ -8872,8 +8923,8 @@ admin::plugins: plugins admin::plugins: plugins - admin/plugins/index.html.twig web/admin/tree.html.twig + admin/plugins/index.html.twig admin::plugins: retrieveConfigurationError @@ -9053,7 +9104,7 @@ alert alert - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -9064,12 +9115,12 @@ an error occured een fout geeft zich voorgedaan - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% an error occured : %message% - Phrasea/Controller/SetupController.php + Phrasea/Controller/SetupController.php an error occured while exporting records @@ -9094,9 +9145,9 @@ audio Audio - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig avril @@ -9122,13 +9173,13 @@ basket:action:delete record form basket basket:action:delete record form basket prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig basket:action:delete record form database basket:action:delete record form database prod/WorkZone/Story.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Basket.html.twig be notified when a document is placed in quarantine @@ -9138,54 +9189,54 @@ 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 admin/collection/suggested_value.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::annuler Annuleer Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php + admin/publications/fiche.html.twig + web/admin/index.html.twig + admin/collection/create.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/accept.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/new-term.html.twig + web/thesaurus/link-field-step1.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/export-topics-dialog.html.twig + web/report/all_content.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Dailymotion/video_modify.html.twig Bridge/Youtube/video_modify.html.twig 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 - web/thesaurus/export-text-dialog.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/thesaurus.html.twig - web/thesaurus/import-dialog.html.twig - web/thesaurus/link-field-step2.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/new-term.html.twig - web/thesaurus/link-field-step1.html.twig - web/account/reset-email.html.twig - admin/publications/fiche.html.twig - admin/collection/create.html.twig - web/admin/index.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig web/common/dialog_export.html.twig - web/report/all_content.html.twig + web/account/reset-email.html.twig boutton::appliquer @@ -9195,16 +9246,16 @@ boutton::chercher zoeken - web/prod/index.html.twig + web/admin/users.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig - web/admin/users.html.twig + web/prod/index.html.twig boutton::choisir kiezen - web/admin/editusers.html.twig web/admin/users.html.twig + web/admin/editusers.html.twig boutton::commander @@ -9254,17 +9305,17 @@ boutton::fermer Sluiten Controller/Prod/LanguageController.php - prod/actions/Push.html.twig - prod/actions/edit_default.html.twig - prod/actions/edit_default.html.twig - web/thesaurus/properties.html.twig + web/lightbox/sc_note.html.twig web/thesaurus/accept.html.twig web/thesaurus/accept.html.twig web/thesaurus/export-topics.html.twig web/thesaurus/link-field-step3.html.twig - web/lightbox/sc_note.html.twig - web/common/dialog_export.html.twig + web/thesaurus/properties.html.twig web/report/all_content.html.twig + prod/actions/Push.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + web/common/dialog_export.html.twig boutton::generer @@ -9274,15 +9325,15 @@ boutton::imprimer Print - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig boutton::modifier bewerken + web/admin/users.html.twig Bridge/Dailymotion/actionelement.html.twig Bridge/Youtube/actionelement.html.twig Bridge/Flickr/actionelement.html.twig - web/admin/users.html.twig boutton::monter @@ -9298,22 +9349,22 @@ boutton::precedent vorige + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::rechercher zoeken Controller/Prod/LanguageController.php - web/prod/index.html.twig + web/prod/index.html.twig boutton::refresh @@ -9328,7 +9379,7 @@ boutton::remplacer Vervangen - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig boutton::renouveller @@ -9338,26 +9389,26 @@ boutton::retour terug + web/admin/editusers.html.twig + admin/databox/details.html.twig + user/import/file.html.twig + admin/publications/fiche.html.twig + admin/collection/details.html.twig + admin/statusbit/edit.html.twig + web/developers/application.html.twig + web/developers/application_form.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig Bridge/Dailymotion/video_deleteelement.html.twig Bridge/Dailymotion/playlist_createcontainer.html.twig Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Youtube/video_deleteelement.html.twig Bridge/Youtube/playlist_createcontainer.html.twig Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig Bridge/Flickr/photo_moveinto_photoset.html.twig Bridge/Flickr/photoset_createcontainer.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/databox/details.html.twig - admin/collection/details.html.twig - user/import/file.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig - web/developers/application.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig boutton::retry @@ -9367,32 +9418,22 @@ boutton::suivant volgende + web/lightbox/sc_options_box.html.twig + web/lightbox/sc_options_box.html.twig + web/lightbox/feed_options_box.html.twig + web/lightbox/feed_options_box.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig web/setup/step2.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/sc_options_box.html.twig - web/lightbox/feed_options_box.html.twig - web/lightbox/feed_options_box.html.twig boutton::supprimer verwijderen Controller/Prod/LanguageController.php - actions/Bridge/disconnected.html.twig - Bridge/Dailymotion/actionelements.html.twig - Bridge/Dailymotion/actioncontainers.html.twig - Bridge/Youtube/actionelements.html.twig - Bridge/Youtube/actioncontainers.html.twig - Bridge/Flickr/actionelements.html.twig - Bridge/Flickr/actioncontainers.html.twig - prod/results/feeds_entry.html.twig - prod/results/entry.html.twig - web/prod/index.html.twig - web/thesaurus/presets.html.twig + web/admin/subdefs.html.twig admin/publications/fiche.html.twig admin/publications/list.html.twig admin/collection/collection.html.twig @@ -9400,7 +9441,17 @@ admin/collection/collection.html.twig admin/collection/collection.html.twig admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig + web/thesaurus/presets.html.twig + Bridge/Dailymotion/actioncontainers.html.twig + Bridge/Dailymotion/actionelements.html.twig + actions/Bridge/disconnected.html.twig + Bridge/Youtube/actioncontainers.html.twig + Bridge/Youtube/actionelements.html.twig + Bridge/Flickr/actioncontainers.html.twig + Bridge/Flickr/actionelements.html.twig + prod/results/feeds_entry.html.twig + prod/results/entry.html.twig + web/prod/index.html.twig boutton::telecharger @@ -9413,9 +9464,9 @@ boutton::telecharger tous les documents Alle documenten downloaden web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig boutton::tester @@ -9427,69 +9478,69 @@ boutton::valider bevestigen Controller/Prod/LanguageController.php - mobile/lightbox/note_form.html.twig - prod/Baskets/Update.html.twig - prod/Baskets/Reorder.html.twig - Bridge/Dailymotion/video_deleteelement.html.twig - Bridge/Dailymotion/playlist_createcontainer.html.twig - Bridge/Dailymotion/video_moveinto_playlist.html.twig - Bridge/Dailymotion/video_modify.html.twig - Bridge/Dailymotion/playlist_deleteelement.html.twig - Bridge/Youtube/video_deleteelement.html.twig - Bridge/Youtube/playlist_createcontainer.html.twig - Bridge/Youtube/video_moveinto_playlist.html.twig - Bridge/Youtube/video_modify.html.twig - Bridge/Youtube/playlist_deleteelement.html.twig - Bridge/Flickr/photo_deleteelement.html.twig - Bridge/Flickr/photoset_deleteelement.html.twig - 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/Story/Reorder.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 - web/thesaurus/link-field-step2.html.twig + web/admin/structure.html.twig + web/admin/setup.html.twig + web/admin/editusers.html.twig + web/admin/dashboard.html.twig + admin/user/registrations.html.twig + user/import/view.html.twig + web/admin/subdefs.html.twig + admin/publications/fiche.html.twig + admin/publications/list.html.twig + admin/collection/collection.html.twig + admin/collection/reorder.html.twig + admin/collection/create.html.twig + admin/collection/suggested_value.html.twig + admin/statusbit/edit.html.twig web/thesaurus/accept.html.twig - web/thesaurus/export-topics-dialog.html.twig - web/thesaurus/index.html.twig web/thesaurus/new-term.html.twig web/thesaurus/new-term.html.twig web/thesaurus/link-field-step1.html.twig - web/account/access.html.twig - web/account/reset-email.html.twig - web/account/account.html.twig - web/admin/dashboard.html.twig - web/admin/editusers.html.twig - admin/publications/fiche.html.twig - admin/publications/list.html.twig - web/admin/setup.html.twig - admin/collection/create.html.twig - admin/collection/reorder.html.twig - admin/collection/collection.html.twig - admin/collection/suggested_value.html.twig - web/admin/subdefs.html.twig - web/admin/structure.html.twig - user/import/view.html.twig - admin/user/registrations.html.twig - admin/statusbit/edit.html.twig - web/developers/application_form.html.twig + web/thesaurus/export-text-dialog.html.twig + web/thesaurus/thesaurus.html.twig + web/thesaurus/link-field-step2.html.twig + web/thesaurus/import-dialog.html.twig + web/thesaurus/index.html.twig + web/thesaurus/export-topics-dialog.html.twig web/report/all_content.html.twig + web/developers/application_form.html.twig + prod/Baskets/Update.html.twig + prod/Baskets/Reorder.html.twig + prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig + Bridge/Dailymotion/playlist_deleteelement.html.twig + Bridge/Dailymotion/video_deleteelement.html.twig + Bridge/Dailymotion/video_modify.html.twig + Bridge/Dailymotion/playlist_createcontainer.html.twig + Bridge/Dailymotion/video_moveinto_playlist.html.twig + Bridge/Youtube/playlist_deleteelement.html.twig + Bridge/Youtube/video_deleteelement.html.twig + Bridge/Youtube/video_modify.html.twig + Bridge/Youtube/playlist_createcontainer.html.twig + Bridge/Youtube/video_moveinto_playlist.html.twig + Bridge/Flickr/photo_deleteelement.html.twig + Bridge/Flickr/photo_moveinto_photoset.html.twig + Bridge/Flickr/photoset_createcontainer.html.twig + Bridge/Flickr/photoset_deleteelement.html.twig + Bridge/Flickr/photo_modify.html.twig + prod/Story/Reorder.html.twig + web/prod/index.html.twig + web/account/access.html.twig + web/account/account.html.twig + web/account/reset-email.html.twig + mobile/lightbox/note_form.html.twig boutton::vue graphique grafische weergave - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig boutton::vue xml xml weergave - admin/collection/suggested_value.html.twig task-manager/task-editor/task.html.twig + admin/collection/suggested_value.html.twig button::Install @@ -9569,14 +9620,14 @@ charger d'avantages de notifications voordelen van meldingen laden - classes/eventsmanager/broker.php + classes/eventsmanager/broker.php choisir kiezen - web/prod/index.html.twig admin/databox/databox.html.twig admin/collection/create.html.twig + web/prod/index.html.twig classe @@ -9603,10 +9654,10 @@ copyClipboardLabel copyClipboardLabel - prod/results/infos.html.twig prod/Share/record.html.twig prod/Share/record.html.twig prod/Share/record.html.twig + prod/results/infos.html.twig create_subdef_button_label @@ -9656,7 +9707,7 @@ created_on created_on - web/prod/index.html.twig + web/prod/index.html.twig dans %category% @@ -9687,7 +9738,7 @@ delete Verwijderen - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig descendant @@ -9702,10 +9753,10 @@ document document - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + task-manager/task-editor/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - task-manager/task-editor/subdefs.html.twig document original @@ -9716,7 +9767,7 @@ edit edit - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig web/account/account.html.twig web/account/account.html.twig web/account/account.html.twig @@ -9759,7 +9810,7 @@ edit::preset:: titre Titel - prod/actions/edit_default.html.twig + prod/actions/edit_default.html.twig effacer (OK) ou quitter (Annuler) ? @@ -9796,7 +9847,7 @@ export:: erreur : aucun document selectionne Erreur : geen enkel document geslecteerd - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig export:: telechargement @@ -9812,7 +9863,7 @@ export::ftp: reglages manuels Manuele instellingen - classes/set/export.php + classes/set/export.php export::mail: contenu du mail @@ -9853,17 +9904,17 @@ file is not valid bestand is niet geldig - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash flash - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig for the following reasons : %reasons% @@ -9927,6 +9978,17 @@ Bewerking correct uitgevoerd admin/databox/databox.html.twig + + help::help-search: OR + help::help-search: OR + prod/results/help.html.twig + + + help::help-search: relaunch search without filter + help::help-search: relaunch search without filter + prod/results/help.html.twig + web/prod/index.html.twig + help::help-section-bullet: check-spelling help::help-section-bullet: check-spelling @@ -9985,9 +10047,9 @@ image Beeld - Phrasea/Twig/PhraseanetExtension.php - web/admin/subdefs.html.twig + Phrasea/Twig/PhraseanetExtension.php task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig image rotation @@ -10002,42 +10064,47 @@ index::advance_search: disable-facet index::advance_search: disable-facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet index::advance_search: facet - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-order index::advance_search: facet-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-tech-order index::advance_search: facet-tech-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: facet-values-order index::advance_search: facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: hidden-facet-values-order index::advance_search: hidden-facet-values-order - web/prod/index.html.twig + web/prod/index.html.twig index::advance_search: order-by-hits index::advance_search: order-by-hits - web/prod/index.html.twig + web/prod/index.html.twig + + + index::advance_search: order-by-hits-asc + index::advance_search: order-by-hits-asc + web/prod/index.html.twig 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,11 +10136,79 @@ de service zal binnen enkele minuten opnieuw beschibaar zijn actions/Bridge/deactivated.html.twig + + lightbox::See_less_feedback + lightbox::See_less_feedback + web/lightbox/index.html.twig + + + lightbox::See_more_feedback + lightbox::See_more_feedback + web/lightbox/index.html.twig + + + lightbox::list + lightbox::list + mobile/lightbox/validate.html.twig + lightbox::recaptitulatif Beknopt + web/lightbox/validate.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/validate.html.twig + + + lightbox::see_less_basket + lightbox::see_less_basket + web/lightbox/index.html.twig + + + lightbox::see_more_basket + lightbox::see_more_basket + web/lightbox/index.html.twig + + + lightbox:feedback:sendreport:warnwindows:cancel + lightbox:feedback:sendreport:warnwindows:cancel + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:message + lightbox:feedback:sendreport:warnwindows:message + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_approved + lightbox:feedback:sendreport:warnwindows:record_approved + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_rejected + lightbox:feedback:sendreport:warnwindows:record_rejected + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:record_unexpressed + lightbox:feedback:sendreport:warnwindows:record_unexpressed + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:title + lightbox:feedback:sendreport:warnwindows:title web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig + + + lightbox:feedback:sendreport:warnwindows:validate + lightbox:feedback:sendreport:warnwindows:validate + web/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig login:: Changer mon adresse email @@ -10093,9 +10228,10 @@ login:: Mon compte Mijn account + web/common/menubar.html.twig + web/common/menubar.html.twig web/account/account.html.twig - web/common/menubar.html.twig - web/common/menubar.html.twig + mobile/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 @@ -10110,8 +10246,8 @@ login::erreur: Erreur d'authentification Verificatiefout - Controller/Root/LoginController.php Controller/Api/OAuth2Controller.php + Controller/Root/LoginController.php login::erreur: No available connection - Please contact sys-admin @@ -10131,8 +10267,8 @@ login::notification: Mise a jour du mot de passe avec succes Update van het paswoord met succes uitgevoerd - Controller/Root/LoginController.php Controller/Root/AccountController.php + Controller/Root/LoginController.php login::notification: demande de confirmation par mail envoyee @@ -10154,8 +10290,8 @@ login::register: sujet email : confirmation de votre adresse email Onderwerp email: bevestiging van uw email adres - Notification/Mail/MailRequestEmailUpdate.php Notification/Mail/MailRequestEmailConfirmation.php + Notification/Mail/MailRequestEmailUpdate.php login::register:email: Voici un compte rendu du traitement de vos demandes d'acces : @@ -10221,15 +10357,15 @@ no Nee - web/account/sessions.html.twig - web/admin/subdefs.html.twig user/import/view.html.twig + web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig no image selected geen beeld geselecteerd - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -10242,9 +10378,9 @@ notice mededeling web/lightbox/feed.html.twig + web/lightbox/validate.html.twig lightbox/IE6/feed.html.twig lightbox/IE6/validate.html.twig - web/lightbox/validate.html.twig nouveau @@ -10547,17 +10683,17 @@ panier:: ordre Validation ascendante Oplopende validatie volgorde - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre Validation descendante Aflopende validatie volgorde - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: ordre du panier Volgordre van het mandje - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig panier:: renommer le panier @@ -10582,7 +10718,7 @@ paniers:: panier recu de %pusher% Mandje ontvangen van %pusher% - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig paniers::Vous etes sur le point de supprimer ce panier. Cette action est irreversible. Souhaitez-vous continuer ? @@ -10592,8 +10728,8 @@ paniers::description du nouveau panier Beschrijving van het nieuwe mandje - prod/Baskets/Create.html.twig prod/orders/order_item.html.twig + prod/Baskets/Create.html.twig par %user_name% @@ -10643,7 +10779,7 @@ phraseanet:: Preferences phraseanet:: Preferences - web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: Un email vient de vous etre envoye @@ -10653,23 +10789,33 @@ 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 Adres - web/setup/step2.html.twig - web/account/account.html.twig - admin/collection/collection.html.twig web/admin/connected-users.html.twig + admin/collection/collection.html.twig + web/setup/step2.html.twig web/common/dialog_export.html.twig + web/account/account.html.twig phraseanet:: aide Help - web/common/menubar.html.twig - web/common/menubar.html.twig + web/common/menubar.html.twig + web/common/menubar.html.twig + + + phraseanet:: basket feedback + phraseanet:: basket feedback + prod/actions/printer_default.html.twig + + + phraseanet:: baskets + phraseanet:: baskets + web/prod/tab_headers.html.twig phraseanet:: choisir @@ -10691,8 +10837,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,14 +10866,14 @@ phraseanet:: plugin.workzone phraseanet:: plugin.workzone - web/prod/tab_headers.html.twig + web/prod/tab_headers.html.twig phraseanet:: port Poort - web/setup/step2.html.twig web/admin/databases.html.twig web/admin/databases.html.twig + web/setup/step2.html.twig phraseanet:: prereglages @@ -10737,13 +10883,13 @@ 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/printer_default.html.twig + prod/actions/edit_default.html.twig + prod/actions/printer_default.html.twig phraseanet:: propositions @@ -10754,8 +10900,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,13 +10912,13 @@ phraseanet:: thesaurus Thesaurus - prod/actions/edit_default.html.twig - web/prod/tab_headers.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/load-thesaurus.html.twig web/thesaurus/index.html.twig + prod/actions/edit_default.html.twig + web/prod/tab_headers.html.twig phraseanet:: tri @@ -10782,17 +10928,17 @@ phraseanet:: tri par date Op datum sorteren - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig web/thesaurus/export-topics-dialog.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: tri par nom Op naam sorteren - web/prod/index.html.twig - web/prod/index.html.twig - web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig + web/prod/index.html.twig phraseanet:: user @@ -10813,7 +10959,7 @@ phraseanet::account The account has been deleted phraseanet::account The account has been deleted - Controller/Root/AccountController.php + Controller/Root/AccountController.php > ]]> @@ -10859,9 +11005,9 @@ phraseanet::chargement Laden Controller/Prod/LanguageController.php - prod/actions/edit_default.html.twig - web/thesaurus/thesaurus.html.twig admin/collection/suggested_value.html.twig + web/thesaurus/thesaurus.html.twig + prod/actions/edit_default.html.twig phraseanet::erreur: La connection au serveur Phraseanet semble etre indisponible @@ -10879,15 +11025,20 @@ phraseanet::erreur: Votre session est fermee, veuillez vous re-authentifier Uw sessile werd afgesloten, gelieve opnieuw in te loggen Controller/Prod/LanguageController.php - web/thesaurus/thesaurus.html.twig web/admin/index.html.twig + web/thesaurus/thesaurus.html.twig phraseanet::erreur: echec du serveur de mail 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 @@ -10942,42 +11093,42 @@ phraseanet::temps:: a l'instant op dit moment - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: hier gisteren - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% heures phraseanet::temps:: il y a %quantity% heures - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a %quantity% minutes phraseanet::temps:: il y a %quantity% minutes - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une heure een uur geleden - lib/classes/phraseadate.php + lib/classes/phraseadate.php phraseanet::temps:: il y a une minute één minuut geleden - lib/classes/phraseadate.php + lib/classes/phraseadate.php 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 +11139,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 +11149,7 @@ phraseanet::type:: reportages Reportages - web/prod/index.html.twig + web/prod/index.html.twig phraseanet::type:: videos @@ -11023,49 +11174,49 @@ 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 stop de slideshow prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig preview:: demarrer le diaporama start de slideshow prod/preview/basket_train.html.twig prod/preview/result_train.html.twig + prod/preview/feed_train.html.twig prod/preview/reg_train.html.twig prod/preview/result_train_options.html.twig - prod/preview/feed_train.html.twig 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 +11231,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 @@ -11090,40 +11241,135 @@ prod/Share/record.html.twig prod/Share/record.html.twig + + print:: basket feedback + print:: basket feedback + prod/actions/printer_default.html.twig + + + print:: basket feedback only + print:: basket feedback only + prod/actions/printer_default.html.twig + print:: description print:: description - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix et description Het gekozen beeld en de beschrijving - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix et description avec planche contact Het gekozen beeld en de beschrijving met de contact fiche - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: image de choix seulement Enkel het gekozen beeld - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: imagette Thumbnail - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: liste d'imagettes Thumbnail lijst - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig print:: planche contact (mosaique) Contact fiche (mosaic) - prod/actions/printer_default.html.twig + prod/actions/printer_default.html.twig + + + print_feedback:: Document generated on : + print_feedback:: Document generated on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback active + print_feedback:: Feedback active + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expired + print_feedback:: Feedback expired + Out/Module/PDFRecords.php + + + print_feedback:: Feedback expiring on : + print_feedback:: Feedback expiring on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated by : + print_feedback:: Feedback initiated by : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback initiated on : + print_feedback:: Feedback initiated on : + Out/Module/PDFRecords.php + + + print_feedback:: Feedback on basket %name% + print_feedback:: Feedback on basket %name% + Out/Module/PDFRecords.php + + + print_feedback:: Non + print_feedback:: Non + Out/Module/PDFRecords.php + + + print_feedback:: Oui + print_feedback:: Oui + Out/Module/PDFRecords.php + + + print_feedback:: Participants : + print_feedback:: Participants : + Out/Module/PDFRecords.php + + + print_feedback:: Votes : + print_feedback:: Votes : + Out/Module/PDFRecords.php + + + print_feedback:: base name: + print_feedback:: base name: + Out/Module/PDFRecords.php + + + print_feedback:: document Uuid: + print_feedback:: document Uuid: + Out/Module/PDFRecords.php + + + print_feedback:: non voté + print_feedback:: non voté + Out/Module/PDFRecords.php + + + print_feedback:: originale filename: + print_feedback:: originale filename: + Out/Module/PDFRecords.php + + + print_feedback:: record id: + print_feedback:: record id: + Out/Module/PDFRecords.php + + + print_feedback:: record title: + print_feedback:: record title: + Out/Module/PDFRecords.php prive @@ -11140,7 +11386,7 @@ processing verwerken - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -11157,22 +11403,47 @@ 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) De collectie en de bijhorende documenten werden verplaats bij deze hergroepering prod/actions/collection_default.html.twig + + prod::edit: Confirmation Edition latitude longitude + prod::edit: Confirmation Edition latitude longitude + prod/actions/edit_default.html.twig + 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::edit:confirm: Edition latitude longitude + prod::edit:confirm: Edition latitude longitude + prod/actions/edit_default.html.twig + + + prod::edit:confirm: No + prod::edit:confirm: No + prod/actions/edit_default.html.twig + + + prod::edit:confirm: Yes + prod::edit:confirm: Yes + prod/actions/edit_default.html.twig + + + prod::edit:story select all + prod::edit:story select all + prod/actions/edit_default.html.twig prod::editing valeurs heterogenes, choisir 'remplacer', 'ajouter' ou 'annuler' @@ -11182,32 +11453,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,77 +11493,87 @@ 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 prod::facet:base_label - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:collection_label prod::facet:collection_label - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php prod::facet:doctype_label prod::facet:doctype_label - SearchEngine/Elastic/ElasticsearchOptions.php + SearchEngine/Elastic/ElasticsearchOptions.php + + + prod::feedback:feedback_set_title + prod::feedback:feedback_set_title + prod/templates/push.html.twig + + + prod::push:push_set_title + prod::push:push_set_title + prod/templates/push.html.twig prod::recherche: Attention : la liste des bases selectionnees pour la recherche a ete changee. @@ -11417,28 +11698,23 @@ prod::toolbar : video editor prod::toolbar : video editor - web/prod/toolbar.html.twig + web/prod/toolbar.html.twig prod::tools: document prod::tools: document - Controller/Prod/ToolsController.php Controller/Prod/ShareController.php - - - prod:app trash: also-move-record - prod:app trash: also-move-record - prod/actions/delete_records_confirm.html.twig - - - prod:app trash: record-delete - prod:app trash: record-delete - prod/actions/delete_records_confirm.html.twig + Controller/Prod/ToolsController.php prod:app trash: record-move-to-trash prod:app trash: record-move-to-trash - prod/actions/delete_records_confirm.html.twig + prod/actions/delete_records_confirm_form.html.twig + + + prod:app trash: record-to-delete + prod:app trash: record-to-delete + prod/actions/delete_records_confirm_form.html.twig prod:app trash: title-trash @@ -11448,22 +11724,22 @@ prod:edit: chapters prod:edit: chapters - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:edit: no overlaps for chapters prod:edit: no overlaps for chapters - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:edit: only a media of type video can be edited prod:edit: only a media of type video can be edited - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:edit: suggested_values prod:edit: suggested_values - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:edit: video-editor @@ -11473,28 +11749,59 @@ prod:mapboxgl: description notice prod:mapboxgl: description notice - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:mapboxgl: title map dialog prod:mapboxgl: title map dialog - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:mapboxgl: title notice prod:mapboxgl: title notice - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:push: create new user prod:push: create new user - Controller/Prod/LanguageController.php + Controller/Prod/LanguageController.php prod:push: delete selection prod:push: delete selection prod/actions/Push.html.twig + + prod:workzone:basket:creation-date + prod:workzone:basket:creation-date + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + prod:workzone:basket:updated-message + prod:workzone:basket:updated-message + prod/WorkZone/Basket.html.twig + + + prod:workzone:facetstab:search_and_facets_sort_options + prod:workzone:facetstab:search_and_facets_sort_options + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_and_filter + prod:workzone:facetstab:tooltips:facet_and_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:facet_except_filter + prod:workzone:facetstab:tooltips:facet_except_filter + web/prod/index.html.twig + + + prod:workzone:facetstab:tooltips:remove_facet_filter + prod:workzone:facetstab:tooltips:remove_facet_filter + web/prod/index.html.twig + public publiek @@ -11506,32 +11813,32 @@ publication : autheur Auteur - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : email autheur Email auteur - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : sous titre Onder titel - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication : titre Titel - actions/publish/publish.html.twig actions/publish/publish_edit.html.twig + actions/publish/publish.html.twig publication::Voici votre fil RSS personnel. Il vous permettra d'etre tenu au courrant des publications. Hier uw persoonlijke RSS feed. Deze laat u toe om op de hoogte te blijven van de publicaties. - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications:: s'abonner aux publications @@ -11542,14 +11849,14 @@ publications::Ne le partagez pas, il est strictement confidentiel Deel deze niet, hij is strikt confidentieel - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php publications::votre rss personnel Uw persoonlijke rss feed - Controller/Prod/FeedController.php - Controller/Prod/FeedController.php + Controller/Prod/FeedController.php + Controller/Prod/FeedController.php push::mail:: Rapport de validation de %user% pour %title% @@ -11569,19 +11876,19 @@ 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 vernieuwen - prod/WorkZone/Story.html.twig prod/WorkZone/Macros.html.twig - prod/WorkZone/Basket.html.twig + prod/WorkZone/Story.html.twig + prod/WorkZone/Basket.html.twig prod/results/feeds.html.twig prod/results/feeds.html.twig @@ -11643,17 +11950,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,12 +11982,12 @@ reponses:: taille des images : Grootte van de beelden : - web/prod/index.html.twig + web/prod/index.html.twig reponses::document sans titre Documenten zonder titel - classes/record/adapter.php + classes/record/adapter.php report:: 1 - Periode @@ -11863,21 +12170,21 @@ report:: non-renseigne Niet-informatief - module/report/add.php - module/report/question.php - module/report/download.php + module/report/validate.php module/report/activity.php module/report/activity.php module/report/activity.php + module/report/question.php + module/report/edit.php module/report/connexion.php module/report/connexion.php module/report/connexion.php - module/report/push.php - module/report/sent.php - module/report/validate.php + module/report/add.php module/report/nav.php - module/report/edit.php + module/report/download.php + module/report/sent.php module/report/filter.php + module/report/push.php report:: page d'accueil @@ -12111,8 +12418,8 @@ reportage Reportage - Phrasea/Twig/PhraseanetExtension.php - Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php + Phrasea/Twig/PhraseanetExtension.php resultat numero %number% @@ -12132,17 +12439,17 @@ same UUID same UUID - Border/Checker/UUID.php + Border/Checker/UUID.php same checksum same checksum - Border/Checker/Sha256.php + Border/Checker/Sha256.php same filename same filename - Border/Checker/Filename.php + Border/Checker/Filename.php scheduled status @@ -12152,7 +12459,7 @@ screenshot video schermafbeelding video - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig select at least one user @@ -12344,12 +12651,12 @@ task::archive:Archivage Archivering - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:Archiving files found into a 'hotfolder' Archivering files gevonden in een 'hotfolder' - TaskManager/Job/ArchiveJob.php + TaskManager/Job/ArchiveJob.php task::archive:archivage sur base/collection/ @@ -12415,8 +12722,8 @@ task::ftp:Status about your FTP transfert from %application% to %server% task::ftp:Status about your FTP transfert from %application% to %server% - Notification/Mail/MailSuccessFTPSender.php Notification/Mail/MailSuccessFTPReceiver.php + Notification/Mail/MailSuccessFTPSender.php task::ftp:TENTATIVE no %number%, %date% @@ -12461,8 +12768,8 @@ task::ftp:proxy task::ftp:proxy - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy password @@ -12472,8 +12779,8 @@ task::ftp:proxy port task::ftp:proxy poort - task-manager/task-editor/ftp.html.twig task-manager/task-editor/ftp-pull.html.twig + task-manager/task-editor/ftp.html.twig task::ftp:proxy user @@ -12568,8 +12875,8 @@ thesaurus:: Lier la branche de thesaurus Link de tak van de thesaurus - web/thesaurus/link-field-step2.html.twig web/thesaurus/link-field-step3.html.twig + web/thesaurus/link-field-step2.html.twig thesaurus:: Lier la branche de thesaurus au champ @@ -12584,8 +12891,8 @@ thesaurus:: Nouveau synonyme Nieuw synoniem - web/thesaurus/thesaurus.html.twig web/thesaurus/new-term.html.twig + web/thesaurus/thesaurus.html.twig thesaurus:: Nouveau terme @@ -12730,8 +13037,8 @@ thesaurus:: export en topics Exporteer in topics - web/thesaurus/export-topics-dialog.html.twig web/thesaurus/export-topics.html.twig + web/thesaurus/export-topics-dialog.html.twig thesaurus:: exporter @@ -13016,14 +13323,14 @@ thesaurus::menu: supprimer verwijderen - web/thesaurus/properties.html.twig web/thesaurus/thesaurus.html.twig web/thesaurus/thesaurus.html.twig + web/thesaurus/properties.html.twig thumbnail validation thumbnail goedkeuring - actions/Tools/videoEditor.html.twig + actions/Tools/videoEditor.html.twig actions/Tools/index.html.twig @@ -13059,7 +13366,7 @@ updated_on updated_on - web/prod/index.html.twig + web/prod/index.html.twig upload:: Destination (collection) : @@ -13071,6 +13378,7 @@ upload:: Status : Status prod/upload/upload.html.twig + prod/upload/lazaret.html.twig prod/upload/upload-flash.html.twig @@ -13081,7 +13389,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 @@ -13090,24 +13398,24 @@ validation:: NON NEE - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: OUI JA - mobile/lightbox/basket_element.html.twig web/lightbox/agreement_box.html.twig + mobile/lightbox/basket_element.html.twig validation:: editer ma note bewerk mijn mededeling - mobile/lightbox/basket_element.html.twig + mobile/lightbox/basket_element.html.twig validation:: note Nota - mobile/lightbox/sc_note.html.twig + mobile/lightbox/sc_note.html.twig validation:: votre note @@ -13117,10 +13425,10 @@ validation::envoyer mon rapport stuur mijn rapport - mobile/lightbox/validate.html.twig - mobile/lightbox/validate.html.twig web/lightbox/basket_options.html.twig web/lightbox/basket_options.html.twig + mobile/lightbox/validate.html.twig + mobile/lightbox/validate.html.twig version @@ -13135,8 +13443,8 @@ video video - web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig + web/admin/subdefs.html.twig video range extractor @@ -13148,12 +13456,144 @@ video tool actions/Tools/videoEditor.html.twig + + workzone:datepicker:april + workzone:datepicker:april + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:august + workzone:datepicker:august + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:closeText + workzone:datepicker:closeText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:currentText + workzone:datepicker:currentText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:december + workzone:datepicker:december + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:february + workzone:datepicker:february + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:friday + workzone:datepicker:friday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:january + workzone:datepicker:january + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:july + workzone:datepicker:july + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:june + workzone:datepicker:june + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:march + workzone:datepicker:march + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:may + workzone:datepicker:may + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:monday + workzone:datepicker:monday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:nextText + workzone:datepicker:nextText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:november + workzone:datepicker:november + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:october + workzone:datepicker:october + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:prevText + workzone:datepicker:prevText + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:saturday + workzone:datepicker:saturday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:september + workzone:datepicker:september + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:sunday + workzone:datepicker:sunday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:thursday + workzone:datepicker:thursday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:tuesday + workzone:datepicker:tuesday + prod/WorkZone/Basket.html.twig + + + workzone:datepicker:wednesday + workzone:datepicker:wednesday + prod/WorkZone/Basket.html.twig + + + workzone:feedback:expiration-closed + workzone:feedback:expiration-closed + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:expiration-open + workzone:feedback:expiration-open + prod/WorkZone/Basket.html.twig + prod/Tooltip/Basket.html.twig + + + workzone:feedback:update + workzone:feedback:update + prod/WorkZone/Basket.html.twig + yes Ja - web/account/sessions.html.twig web/admin/subdefs.html.twig web/common/technical_datas.html.twig + web/account/sessions.html.twig you are about to change the representation thumbnail of your video diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index 352466f945..92e7a13414 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. @@ -9,8 +9,8 @@ Please provide the same passwords. Bitte geben Sie diesselbe Passwörter ein. - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRegisterForm.php diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index d25324b360..6056c7393b 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. @@ -9,8 +9,8 @@ Please provide the same passwords. Please provide the same passwords. - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRegisterForm.php diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index e03b531b2f..37499c9762 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. @@ -9,8 +9,8 @@ Please provide the same passwords. Veuillez indiquer des mots de passe identiques. - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRegisterForm.php diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index b6aa595998..a0d0d88d7b 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. @@ -9,8 +9,8 @@ Please provide the same passwords. Please provide the same passwords. - Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRecoverPasswordForm.php + Form/Login/PhraseaRenewPasswordForm.php Form/Login/PhraseaRegisterForm.php diff --git a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php index aedc9247ff..318a58e2cf 100644 --- a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php +++ b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesBasket.php @@ -474,6 +474,17 @@ class Basket extends \Alchemy\Phrasea\Model\Entities\Basket implements \Doctrine return parent::hasRecord($app, $record); } + /** + * {@inheritDoc} + */ + public function getElementByRecord(\Alchemy\Phrasea\Application $app, \record_adapter $record) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getElementByRecord', [$app, $record]); + + return parent::getElementByRecord($app, $record); + } + /** * {@inheritDoc} */ diff --git a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php index dab6e47808..57cb4cd042 100644 --- a/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php +++ b/resources/proxies/__CG__AlchemyPhraseaModelEntitiesLazaretFile.php @@ -518,4 +518,15 @@ class LazaretFile extends \Alchemy\Phrasea\Model\Entities\LazaretFile implements return parent::getRecordsToSubstitute($app, $includeReason); } + /** + * {@inheritDoc} + */ + public function getStatus(\Alchemy\Phrasea\Application $app) + { + + $this->__initializer__ && $this->__initializer__->__invoke($this, 'getStatus', [$app]); + + return parent::getStatus($app); + } + } diff --git a/resources/www/account/styles/main.scss b/resources/www/account/styles/main.scss index dbdf9dfa4d..42dd129b82 100644 --- a/resources/www/account/styles/main.scss +++ b/resources/www/account/styles/main.scss @@ -16,4 +16,158 @@ $mainMenuMarginBottom: 30px; #mainContent { padding-top: $mainMenuHeight; -} \ No newline at end of file +} + + +/*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; +} + +.phraseanet_logo { + background: url(../../common/images/logo_phraseanet.png) no-repeat center center /contain; + height: 75px; + width: 230px; + display: inline-block; +} + +.phraseanet_version { + font-size: 15px; + font-family: Roboto; + font-weight: 500; + color: #b7b7b7; + padding-left: 58px; + a { + color: #b7b7b7; + &:hover { + color: #FFFFFF; + } + } +} + +.phraseanet_about_top { + background: #4e4e4e; + padding: 30px 20px; +} +.phraseanet_about_bottom { + padding: 25px 20px; + min-height: 150px; + background: #c8c8c8; + a { + font-family: Roboto; + line-height: 1.2; + font-size: 15px!important; + font-weight: 500; + color: #000000!important; + text-decoration: underline; + } + +} +.phraseanet_gpl { + img { + position: absolute; + width: 84px; + } + span { + padding-top: 26px; + display: inline-block; + padding-left: 100px; + padding-bottom: 20px; + text-decoration: underline; + } + a { + text-decoration: underline; + } + +} + + + +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 21px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; + text-indent: -9999999px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} + +.overlay, +.ui-widget-overlay { + background-color: #000; + opacity: 0.7; + filter: alpha(opacity=70); + height: 100%; + width: 100% +} + + +.ui-icon, .ui-widget-content .ui-icon { + background-image: url(/assets/vendors/jquery-ui/images/ui-lightness/ui-icons_222222_256x240.png)!important; + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + background-position: -96px -128px; + width: 16px; + height: 16px; + position: absolute; + top: 50%; + left: 50%; + margin-left: -8px; + margin-top: -8px; +} diff --git a/resources/www/admin/styles/main.scss b/resources/www/admin/styles/main.scss index ee13922f56..cff7851f82 100644 --- a/resources/www/admin/styles/main.scss +++ b/resources/www/admin/styles/main.scss @@ -325,6 +325,7 @@ div.switch_right.unchecked { .ui-dialog-titlebar-close { border: none; margin-right: 4px; + text-indent: -9999999px; } .ui-icon.ui-icon-closethick { background-image: url("/assets/common/images/icons/cross-white.png"); @@ -841,6 +842,76 @@ span.simplecolorpicker.picker { } } +.help-trigger { + display:inline-block; + cursor:pointer; + padding: 0 4px; + border:none; + margin-left: -12px; +} + +.phraseanet_logo { + background: url(../../common/images/logo_phraseanet.png) no-repeat center center /contain; + height: 75px; + width: 230px; + display: inline-block; +} + +.phraseanet_version { + font-size: 15px; + font-family: Roboto; + font-weight: 500; + color: #b7b7b7; + padding-left: 58px; + a { + color: #b7b7b7; + &:hover { + color: #FFFFFF; + } + } +} + +.phraseanet_about_top { + background: #4e4e4e; + padding: 30px 20px; +} +.phraseanet_about_bottom { + padding: 25px 20px; + min-height: 150px; + background: #c8c8c8; + a { + font-family: Roboto; + line-height: 1.2; + font-size: 15px!important; + font-weight: 500; + color: #000000!important; + text-decoration: underline; + } + +} +.phraseanet_gpl { + img { + position: absolute; + width: 84px; + } + span { + padding-top: 26px; + display: inline-block; + padding-left: 100px; + padding-bottom: 20px; + text-decoration: underline; + } + a { + text-decoration: underline; + } + +} +.ui-icon, .ui-widget-content .ui-icon { + background-image: url(/assets/vendors/jquery-ui/images/ui-lightness/ui-icons_222222_256x240.png)!important; +} +.ui-dialog-titlebar-close { + text-indent: -9999999px; +} @import './databases'; @import './fields'; @import './tables'; diff --git a/resources/www/common/images/GPLv3_Logo.png b/resources/www/common/images/GPLv3_Logo.png new file mode 100644 index 0000000000..25611f87d6 Binary files /dev/null and b/resources/www/common/images/GPLv3_Logo.png differ 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/images/logo_phraseanet.png b/resources/www/common/images/logo_phraseanet.png new file mode 100644 index 0000000000..373d529be3 Binary files /dev/null and b/resources/www/common/images/logo_phraseanet.png differ diff --git a/resources/www/common/js/components/common.js b/resources/www/common/js/components/common.js index 39c6ddf3c8..059db6c044 100644 --- a/resources/www/common/js/components/common.js +++ b/resources/www/common/js/components/common.js @@ -94,7 +94,7 @@ var commonModule = (function ($, p4) { .empty() .append(el.attr('infos')) .dialog({ - + title: 'About', autoOpen: false, closeOnEscape: true, resizable: false, @@ -106,7 +106,7 @@ var commonModule = (function ($, p4) { backgroundColor: '#000', opacity: 0.7 } - }).dialog('open').css({'overflow-x': 'auto', 'overflow-y': 'auto'}); + }).dialog('open').css({'overflow-x': 'auto', 'overflow-y': 'hidden', 'padding': '0'}); } 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..e232bde41c 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; @@ -105,3 +107,60 @@ $mainMenuLinkBackgroundHoverColor: transparent; margin-left: -12px; } +.phraseanet_logo { + background: url(../images/logo_phraseanet.png) no-repeat center center /contain; + height: 75px; + width: 230px; + display: inline-block; +} + +.phraseanet_version { + font-size: 15px; + font-family: Roboto; + font-weight: 500; + color: #b7b7b7; + padding-left: 58px; + a { + color: #b7b7b7; + &:hover { + color: #FFFFFF; + } + } +} + +.phraseanet_about_top { + background: #4e4e4e; + padding: 30px 20px; +} +.phraseanet_about_bottom { + padding: 25px 20px; + min-height: 150px; + background: #c8c8c8; + a { + font-family: Roboto; + line-height: 1.2; + font-size: 15px!important; + font-weight: 500; + color: #000000!important; + text-decoration: underline; + } + +} +.phraseanet_gpl { + img { + position: absolute; + width: 84px; + } + span { + padding-top: 26px; + display: inline-block; + padding-left: 100px; + padding-bottom: 20px; + text-decoration: underline; + } + a { + text-decoration: underline; + } + +} + diff --git a/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss b/resources/www/lightbox/styles/jquery-mobile/_jquery-validator.scss index 67e49407ee..67a0ad85cd 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,216 @@ 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; +} + +.pdf-iframe { + background: #1a1a1a; + padding-bottom: 10px; +} diff --git a/resources/www/lightbox/styles/main-mobile.scss b/resources/www/lightbox/styles/main-mobile.scss index a3476342d9..bc34f81762 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,697 @@ #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; +} + +.modal-footer .btn-primary { + color: #fff!important; + background-color: #007bff!important; + border-color: #007bff!important; +} +.modal-header .close { + display: inline-block; + float: right; + width: 25px; + opacity: 1; + background: #e1e1e1; +} + +.hide { + display: none; +} + +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; + .ui-mobile & { + width: 100%; + } + } +} + +/*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/resources/www/report/styles/main.scss b/resources/www/report/styles/main.scss index 218fce1f28..1c2dc70c33 100644 --- a/resources/www/report/styles/main.scss +++ b/resources/www/report/styles/main.scss @@ -360,3 +360,86 @@ $select-height: 26px; #mainMenu li .context-menu-item-inner a:hover { color: #000; } + +.ui-dialog-titlebar-close { + text-indent: -9999999px; +} + + +/*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; +} + +.phraseanet_logo { + background: url(../../common/images/logo_phraseanet.png) no-repeat center center /contain; + height: 75px; + width: 230px; + display: inline-block; +} + +.phraseanet_version { + font-size: 15px; + font-family: Roboto; + font-weight: 500; + color: #b7b7b7; + padding-left: 58px; + a { + color: #b7b7b7; + &:hover { + color: #FFFFFF; + } + } +} + +.phraseanet_about_top { + background: #4e4e4e; + padding: 30px 20px; +} +.phraseanet_about_bottom { + padding: 25px 20px; + min-height: 150px; + background: #c8c8c8; + a { + font-family: Roboto; + line-height: 1.2; + font-size: 15px!important; + font-weight: 500; + color: #000000!important; + text-decoration: underline; + } + +} +.phraseanet_gpl { + img { + position: absolute; + width: 84px; + } + span { + padding-top: 26px; + display: inline-block; + padding-left: 100px; + padding-bottom: 20px; + text-decoration: underline; + } + a { + text-decoration: underline; + } + +} + +.ui-icon, .ui-widget-content .ui-icon { + background-image: url(/assets/vendors/jquery-ui/images/ui-lightness/ui-icons_222222_256x240.png)!important; +} diff --git a/templates/mobile/common/index.html.twig b/templates/mobile/common/index.html.twig index 32a08cc094..c5b68592da 100644 --- a/templates/mobile/common/index.html.twig +++ b/templates/mobile/common/index.html.twig @@ -24,5 +24,6 @@ {% block content %}{% endblock %} {% include 'common/analytics.html.twig' %} + {% include 'common/matomo_analytics.html.twig' %} diff --git a/templates/mobile/common/matomo_analytics.html.twig b/templates/mobile/common/matomo_analytics.html.twig new file mode 100644 index 0000000000..5c1e3251ac --- /dev/null +++ b/templates/mobile/common/matomo_analytics.html.twig @@ -0,0 +1,18 @@ +{% if app['conf'].get(['registry', 'general', 'matomo-analytics-url']) != '' %} +{% if app['conf'].get(['registry', 'general', 'matomo-analytics-id']) != '' %} + + + +{% endif %} +{% endif %} diff --git a/templates/mobile/common/menubar.html.twig b/templates/mobile/common/menubar.html.twig new file mode 100644 index 0000000000..b6e0101500 --- /dev/null +++ b/templates/mobile/common/menubar.html.twig @@ -0,0 +1,19 @@ +{% set configuration = app['conf'].get(['registry', 'custom-links']) %} + +{% if app.getAuthenticator().isAuthenticated() %} + + + +{% endif %} + diff --git a/templates/mobile/common/thumbnail.html.twig b/templates/mobile/common/thumbnail.html.twig index 250e8f0e98..9d5b132cd3 100644 --- a/templates/mobile/common/thumbnail.html.twig +++ b/templates/mobile/common/thumbnail.html.twig @@ -57,9 +57,13 @@ {% set url = app.getAuthenticator().isAuthenticated() ? thumbnail.get_url() : thumbnail.get_permalink().get_url() %} {% set record_type = thumbnail.get_type() %} {% if record_type == 'VIDEO_MP4' or record_type == 'VIDEO_FLV' %} + {% set thumbnail_height = thumbnail.get_height() > 0 ? thumbnail.get_height() : 120 %} + {% set thumbnail_width = thumbnail.get_width() > 0 ? thumbnail.get_width() : 120 %} + + + frameborder="0" allowfullscreen class="video-iframe"> {% elseif record_type == 'FLEXPAPER' %} + {% elseif record_type == 'PDF' %} + {% else %} -
- {{ '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 %} +
- {% endblock %} 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..6bb64d68db 100644 --- a/templates/mobile/lightbox/index.html.twig +++ b/templates/mobile/lightbox/index.html.twig @@ -4,10 +4,12 @@ {# #} + {% endblock %} {% block stylesheet %} + {% endblock %} {% block icon %} @@ -40,18 +42,21 @@

{{module_name}}

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

{{ 'a propos' | trans }}

+

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

@@ -83,27 +90,39 @@

{{ '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,34 +132,44 @@
{{ '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 %} +
+
- + {% endblock %} {% block stylesheet %} + {% endblock %} {% block content %} @@ -32,36 +35,111 @@

{{basket.getName()}}

{{ 'Home' | trans }}
+

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

-
    - {% for basket_element in basket.getElements() %} -
  • - {% if basket_element.getBasket().getValidation() and basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %} -
    -
    + + + {% if basket.getValidation() %} + + +
     
    +
     
    {% endif %} - - {{thumbnail.format(basket_element.getRecord(app).get_thumbnail(), 80, 80, '', true, false)}} - - -
  • - {% endfor %} -
-
-
- {% 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/account/account.html.twig b/templates/web/account/account.html.twig index 887b29ec03..8dea3e8726 100644 --- a/templates/web/account/account.html.twig +++ b/templates/web/account/account.html.twig @@ -107,7 +107,7 @@
- +

@@ -121,7 +121,7 @@
- +

diff --git a/templates/web/admin/fields/index.html.twig b/templates/web/admin/fields/index.html.twig index e8198a324f..531ef168eb 100644 --- a/templates/web/admin/fields/index.html.twig +++ b/templates/web/admin/fields/index.html.twig @@ -27,3 +27,17 @@ {# bootstrap admin field backbone application #} + + diff --git a/templates/web/admin/fields/templates.html.twig b/templates/web/admin/fields/templates.html.twig index c785a9a701..73106dbafb 100644 --- a/templates/web/admin/fields/templates.html.twig +++ b/templates/web/admin/fields/templates.html.twig @@ -189,6 +189,22 @@ + + + + + + + + + +