mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 18:03:17 +00:00
Merge branch 'master' into PHRAS-2680-webhook-privacy-and-security
This commit is contained in:
@@ -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: "phraseanet-fpm"
|
||||
tag: "${CIRCLE_BRANCH}"
|
||||
- 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: "phraseanet-nginx"
|
||||
tag: "${CIRCLE_BRANCH}"
|
||||
- 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: "phraseanet-worker"
|
||||
tag: "${CIRCLE_BRANCH}"
|
||||
|
12
.dockerignore
Normal file
12
.dockerignore
Normal file
@@ -0,0 +1,12 @@
|
||||
.circleci
|
||||
.git
|
||||
.settings
|
||||
nodes_modules
|
||||
vendor
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
102
Dockerfile
102
Dockerfile
@@ -1,5 +1,10 @@
|
||||
FROM php:7.0-fpm-stretch as builder
|
||||
|
||||
#########################################################################
|
||||
# This image contains every build tools that will be used by the builder and
|
||||
# the app images (usefull in dev mode)
|
||||
#########################################################################
|
||||
|
||||
FROM php:7.0-fpm-stretch as phraseanet-system
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y \
|
||||
apt-transport-https \
|
||||
@@ -23,6 +28,7 @@ RUN apt-get update \
|
||||
libxslt-dev \
|
||||
libzmq3-dev \
|
||||
locales \
|
||||
gettext \
|
||||
mcrypt \
|
||||
swftools \
|
||||
unoconv \
|
||||
@@ -61,9 +67,19 @@ RUN mkdir /entrypoint /var/alchemy \
|
||||
&& mkdir -p /home/app/.composer \
|
||||
&& chown -R app: /home/app /var/alchemy
|
||||
|
||||
#########################################################################
|
||||
# This image is used to build the apps
|
||||
#########################################################################
|
||||
|
||||
FROM phraseanet-system as builder
|
||||
|
||||
WORKDIR /var/alchemy/
|
||||
|
||||
# Files that are needed at build stage
|
||||
|
||||
COPY gulpfile.js /var/alchemy/
|
||||
COPY www/include /var/alchemy/www/include
|
||||
COPY www/scripts/apps /var/alchemy/www/scripts/apps
|
||||
COPY Makefile /var/alchemy/
|
||||
COPY package.json /var/alchemy/
|
||||
COPY phpunit.xml.dist /var/alchemy/
|
||||
@@ -73,11 +89,16 @@ COPY composer.json /var/alchemy/
|
||||
COPY composer.lock /var/alchemy/
|
||||
RUN make install_composer
|
||||
COPY resources /var/alchemy/resources
|
||||
COPY www /var/alchemy/www
|
||||
|
||||
# Application build phase
|
||||
|
||||
RUN make clean_assets
|
||||
RUN make install_asset_dependencies
|
||||
RUN make install_assets
|
||||
|
||||
# Application code
|
||||
|
||||
COPY www /var/alchemy/www
|
||||
ADD ./docker/phraseanet/ /
|
||||
COPY lib /var/alchemy/lib
|
||||
COPY tmp /var/alchemy/tmp
|
||||
@@ -86,6 +107,9 @@ COPY grammar /var/alchemy/grammar
|
||||
COPY templates-profiler /var/alchemy/templates-profiler
|
||||
COPY templates /var/alchemy/templates
|
||||
COPY tests /var/alchemy/tests
|
||||
|
||||
# Create needed folders
|
||||
|
||||
RUN mkdir -p /var/alchemy/Phraseanet/logs \
|
||||
&& chmod -R 777 /var/alchemy/Phraseanet/logs \
|
||||
&& mkdir -p /var/alchemy/Phraseanet/cache \
|
||||
@@ -99,69 +123,11 @@ RUN mkdir -p /var/alchemy/Phraseanet/logs \
|
||||
&& mkdir -p /var/alchemy/Phraseanet/config \
|
||||
&& chmod -R 777 /var/alchemy/Phraseanet/config
|
||||
|
||||
# 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/*
|
||||
#########################################################################
|
||||
# Phraseanet web application image
|
||||
#########################################################################
|
||||
|
||||
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');"
|
||||
|
||||
# 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
|
||||
FROM phraseanet-system as phraseanet-fpm
|
||||
|
||||
COPY --from=builder --chown=app /var/alchemy /var/alchemy/Phraseanet
|
||||
ADD ./docker/phraseanet/ /
|
||||
@@ -169,11 +135,17 @@ WORKDIR /var/alchemy/Phraseanet
|
||||
ENTRYPOINT ["/phraseanet-entrypoint.sh"]
|
||||
CMD ["/boot.sh"]
|
||||
|
||||
# phraseanet-worker
|
||||
#########################################################################
|
||||
# Phraseanet worker application image
|
||||
#########################################################################
|
||||
|
||||
FROM phraseanet-fpm as phraseanet-worker
|
||||
CMD ["/worker-boot.sh"]
|
||||
|
||||
#########################################################################
|
||||
# phraseanet-nginx
|
||||
#########################################################################
|
||||
|
||||
FROM nginx:1.15 as phraseanet-nginx
|
||||
RUN useradd -u 1000 app
|
||||
ADD ./docker/nginx/ /
|
||||
|
@@ -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"]
|
2
build.sh
2
build.sh
@@ -1,5 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -xe
|
||||
|
||||
# nginx server
|
||||
docker build --target phraseanet-nginx -t local/phraseanet-nginx:$1 .
|
||||
|
||||
|
@@ -354,7 +354,7 @@ class SubdefsController extends Controller
|
||||
Subdef::TYPE_VIDEO => [
|
||||
"definitions" => [
|
||||
"video codec H264" => null,
|
||||
"144P H264 128 kbps ACC 128kbps" => [
|
||||
"144P H264 128 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "128",
|
||||
@@ -362,10 +362,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "256",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"240P H264 256 kbps ACC 128kbps" => [
|
||||
"240P H264 256 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "256",
|
||||
@@ -373,10 +373,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "426",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"360P H264 576 kbps ACC 128kbps" => [
|
||||
"360P H264 576 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "576",
|
||||
@@ -384,10 +384,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "480",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libtheora",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"480P H264 750 kbps ACC 128kbps" => [
|
||||
"480P H264 750 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "750",
|
||||
@@ -395,10 +395,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "854",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"720P H264 1492 kbps ACC 128kbps" => [
|
||||
"720P H264 1492 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "1492",
|
||||
@@ -406,10 +406,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "1280",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"1080P H264 2420 kbps ACC 128kbps" => [
|
||||
"1080P H264 2420 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "2420",
|
||||
@@ -417,11 +417,77 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "1920",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"144P H264 128 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "128",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "256",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"240P H264 256 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "256",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "426",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"360P H264 576 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "576",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "480",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libtheora",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"480P H264 750 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "750",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "854",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"720P H264 1492 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "1492",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "1280",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"1080P H264 2420 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "2420",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "1920",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libx264",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"video codec libvpx" => null,
|
||||
"144P webm 128 kbps ACC 128kbps" => [
|
||||
"144P webm 128 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "128",
|
||||
@@ -429,10 +495,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "256",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"240P webm 256 kbps ACC 128kbps" => [
|
||||
"240P webm 256 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "256",
|
||||
@@ -440,10 +506,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "426",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"360P webm 576 kbps ACC 128kbps" => [
|
||||
"360P webm 576 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "576",
|
||||
@@ -451,10 +517,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "480",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"480P webm 750 kbps ACC 128kbps" => [
|
||||
"480P webm 750 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "750",
|
||||
@@ -462,10 +528,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "854",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"720P webm 1492 kbps ACC 128kbps" => [
|
||||
"720P webm 1492 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "1492",
|
||||
@@ -473,10 +539,10 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "1280",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"1080P webm 2420 kbps ACC 128kbps" => [
|
||||
"1080P webm 2420 kbps MP3 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "2420",
|
||||
@@ -484,7 +550,73 @@ class SubdefsController extends Controller
|
||||
Video::OPTION_SIZE => "1920",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfaac",
|
||||
Video::OPTION_ACODEC => "libmp3lame",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"144P webm 128 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "128",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "256",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"240P webm 256 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "256",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "426",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"360P webm 576 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "576",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "480",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"480P webm 750 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "750",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "854",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"720P webm 1492 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "1492",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "1280",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
"1080P webm 2420 kbps AAC 128kbps" => [
|
||||
Video::OPTION_AUDIOBITRATE => "128",
|
||||
Video::OPTION_AUDIOSAMPLERATE => "44100",
|
||||
Video::OPTION_BITRATE => "2420",
|
||||
Video::OPTION_GOPSIZE => "25",
|
||||
Video::OPTION_SIZE => "1920",
|
||||
Video::OPTION_FRAMERATE => "25",
|
||||
Video::OPTION_VCODEC => "libvpx",
|
||||
Video::OPTION_ACODEC => "libfdk_aac",
|
||||
Subdef::OPTION_DEVICE => ["all"]
|
||||
],
|
||||
],
|
||||
|
@@ -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');
|
||||
|
||||
|
@@ -16,7 +16,7 @@ class Version
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $number = '4.1.0-alpha.18a';
|
||||
private $number = '4.1.0-alpha.19a';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
|
@@ -140,6 +140,7 @@ class LegacyRecordRepository implements RecordRepository
|
||||
's.rid_parent IN (:storyIds)',
|
||||
'r.parent_record_id = 0'
|
||||
)
|
||||
->orderBy('s.ord', 'ASC')
|
||||
->setParameter('storyIds', $storyIds, Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
|
||||
|
@@ -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()
|
||||
|
69
lib/classes/patch/410alpha19a.php
Normal file
69
lib/classes/patch/410alpha19a.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Phraseanet
|
||||
*
|
||||
* (c) 2005-2019 Alchemy
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Alchemy\Phrasea\Application;
|
||||
|
||||
class patch_410alpha19a implements patchInterface
|
||||
{
|
||||
/** @var string */
|
||||
private $release = '4.1.0-alpha.19a';
|
||||
|
||||
/** @var array */
|
||||
private $concern = [base::APPLICATION_BOX];
|
||||
|
||||
/**
|
||||
* Returns the release version.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_release()
|
||||
{
|
||||
return $this->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;
|
||||
}
|
||||
}
|
@@ -65,7 +65,7 @@
|
||||
"normalize-css": "^2.1.0",
|
||||
"npm": "^6.0.0",
|
||||
"npm-modernizr": "^2.8.3",
|
||||
"phraseanet-production-client": "0.34.80-d",
|
||||
"phraseanet-production-client": "^0.34.86-d",
|
||||
"requirejs": "^2.3.5",
|
||||
"tinymce": "^4.0.28",
|
||||
"underscore": "^1.8.3",
|
||||
|
BIN
resources/www/common/images/icons/basket_feedback_read.png
Normal file
BIN
resources/www/common/images/icons/basket_feedback_read.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
resources/www/common/images/icons/basket_feedback_unread.png
Normal file
BIN
resources/www/common/images/icons/basket_feedback_unread.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
@@ -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 */
|
||||
|
@@ -1,30 +1,34 @@
|
||||
$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;
|
||||
border:none;
|
||||
width: auto!important;
|
||||
|
||||
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{
|
||||
|
||||
li.image_box {
|
||||
width: 18%;
|
||||
position: relative;
|
||||
margin: 0 2.5% 15px 0;
|
||||
@@ -38,19 +42,20 @@ li.image_box{
|
||||
}
|
||||
.thumb_wrapper {
|
||||
background: #ededed;
|
||||
width: 100%!important;
|
||||
height: 160px!important;
|
||||
width: 100% !important;
|
||||
height: 160px !important;
|
||||
@media screen and (max-width: 767px) {
|
||||
height: 130px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 767px) {
|
||||
li.image_box{
|
||||
li.image_box {
|
||||
width: 32%;
|
||||
margin: 0 2% 15px 0;
|
||||
&:nth-child(5n) {
|
||||
margin-right: 2% ;
|
||||
margin-right: 2%;
|
||||
}
|
||||
&:nth-child(3n) {
|
||||
margin-right: 0;
|
||||
@@ -58,35 +63,37 @@ li.image_box{
|
||||
}
|
||||
}
|
||||
|
||||
a.no.active_choice{
|
||||
background-color:red;
|
||||
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{
|
||||
.valid_choice.agree {
|
||||
background: #7ed321;
|
||||
border-top-left-radius: 100px;
|
||||
}
|
||||
.valid_choice.disagree{
|
||||
|
||||
.valid_choice.disagree {
|
||||
background: #d0021b;
|
||||
border-top-left-radius: 100px;
|
||||
}
|
||||
|
||||
.thumb_wrapper {
|
||||
text-align:center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media screen and (orientation: landscape) {
|
||||
@@ -108,3 +115,207 @@ 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;
|
||||
}
|
||||
|
17
templates/mobile/common/menubar.html.twig
Normal file
17
templates/mobile/common/menubar.html.twig
Normal file
@@ -0,0 +1,17 @@
|
||||
{% set configuration = app['conf'].get(['registry', 'custom-links']) %}
|
||||
|
||||
{% if app.getAuthenticator().isAuthenticated() %}
|
||||
<div class="menu-bar-item">
|
||||
{% if app.getAuthenticatedUser().isGuest %}
|
||||
<span class="icomoon icon-agree"></span>
|
||||
<span class="text">{{ 'Guest' | trans }}</span>
|
||||
{% else %}
|
||||
<a target="_blank" href="{{ path('account') }}"
|
||||
title="{{ 'login:: Mon compte' | trans }}">
|
||||
<span class="icomoon icon-agree"></span>
|
||||
<span class="text">{{ app.getAuthenticatedUser().getDisplayName() }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
@@ -26,7 +26,7 @@
|
||||
|
||||
#content {
|
||||
position: fixed;
|
||||
top:50px;
|
||||
top:90px;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
@@ -40,7 +40,6 @@
|
||||
{% block content %}
|
||||
{% set record = basket_element.getRecord(app) %}
|
||||
|
||||
|
||||
<div data-role="page" id="page">
|
||||
<div data-role="header">
|
||||
<a href="{{ path('lightbox_validation', { 'basket' : basket_element.getBasket().getId() }) }}"
|
||||
@@ -49,6 +48,9 @@
|
||||
<a rel="external" href="{{ path('lightbox') }}" data-icon="home" data-iconpos="notext" data-direction="reverse"
|
||||
class="ui-btn-right jqm-home">{{ 'Home' | trans }}</a>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div id="content" data-role="content">
|
||||
<div class="nav_button">
|
||||
{% if prevId != NULL %}
|
||||
@@ -67,10 +69,10 @@
|
||||
{% if basket_element.getBasket().getValidation() %}
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %}
|
||||
<fieldset data-role="controlgroup" data-type="horizontal" style="text-align:center;">
|
||||
<input onclick="window.location.reload();" {% if basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == true%}checked="checked"{% endif %} type="radio" name="radio-view" id="radio-view-yes_{{basket_element.getId()}}" value="yes" />
|
||||
<input {% if basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == true%}checked="checked"{% endif %} type="radio" name="radio-view" id="radio-view-yes_{{basket_element.getId()}}" value="yes" />
|
||||
<label class="agreement_radio" style="width:110px;text-align:center;"
|
||||
for="radio-view-yes_{{ basket_element.getId() }}">{{ 'validation:: OUI' | trans }}</label>
|
||||
<input onclick="window.location.reload();" {% if basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == false and basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() is not null %}checked="checked"{% endif %} type="radio" name="radio-view" id="radio-view-no_{{basket_element.getId()}}" value="no" />
|
||||
<input {% if basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == false and basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() is not null %}checked="checked"{% endif %} type="radio" name="radio-view" id="radio-view-no_{{basket_element.getId()}}" value="no" />
|
||||
<label class="agreement_radio" style="width:110px;text-align:center;"
|
||||
for="radio-view-no_{{ basket_element.getId() }}">{{ 'validation:: NON' | trans }}</label>
|
||||
</fieldset>
|
||||
|
@@ -17,7 +17,7 @@
|
||||
|
||||
#content {
|
||||
position: fixed;
|
||||
top:50px;
|
||||
top:90px;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
@@ -35,6 +35,9 @@
|
||||
<a href="{{ path('lightbox_feed_entry', { 'entry_id' : feed_element.getEntry().getId() }) }}" data-rel="back" data-icon="arrow-l">Back</a>
|
||||
<h1>{{feed_element.getOrd()}} - {{record.get_title()}}</h1>
|
||||
<a rel="external" href="{{ path('lightbox') }}" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">Home</a>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div id="content" data-role="content">
|
||||
{{ thumbnail.format100percent(record.get_preview()) }}
|
||||
|
@@ -39,19 +39,22 @@
|
||||
<div data-role="header">
|
||||
<h1>{{module_name}}</h1>
|
||||
<a href="#about" class="ui-btn-right">{{ 'a propos' | trans }}</a>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<ul data-role="listview" style="width:100%;margin: 0;">
|
||||
<li>
|
||||
<ul id="lightbox-menu" data-role="listview" style="width:100%;margin: 0;">
|
||||
<li class="lightbox-item">
|
||||
<a href="#validation">{{ 'Validations' | trans }}</a>
|
||||
<span class="ui-li-count">{{_self.valid_baskets_length(baskets_collection)}}</span>
|
||||
</li>
|
||||
<li>
|
||||
<li class="lightbox-item">
|
||||
<a href="#baskets">{{ 'Paniers' | trans }}</a>
|
||||
<span class="ui-li-count">{{_self.baskets_length(baskets_collection)}}</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div style="margin:2em 0 0 0">
|
||||
<div class="lightbox-bottom-btn">
|
||||
<a href="{{ path ('logout') }}" data-role="button" rel="external">{{ 'Deconnexion' | trans }}</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,6 +67,9 @@
|
||||
<div data-role="header">
|
||||
<a href="#home" data-rel="back" data-icon="arrow-l">{{ 'Back' | trans }}</a>
|
||||
<h1>{{ 'a propos' | trans }}</h1>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<p>Phraseanet Version {{ app['phraseanet.version'].getName() }} - {{ app['phraseanet.version'].getNumber() }}</p>
|
||||
@@ -83,28 +89,39 @@
|
||||
<div id="validation" data-role="page">
|
||||
<div data-role="header">
|
||||
<a rel="external" href="#home" data-icon="arrow-l">{{ 'Back' | trans }}</a>
|
||||
<h1>{{ 'Validations' | trans }}</h1>
|
||||
<h1>{{ module_name }}</h1>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<p>
|
||||
<p class="basket-title">
|
||||
{{ 'Validations' | trans }}
|
||||
<span>{{_self.valid_baskets_length(baskets_collection)}}</span>
|
||||
</p>
|
||||
<p class="lightbox-msg">
|
||||
{{ 'Voici vos validations en cours' | trans }}
|
||||
</p>
|
||||
<div class="feed-list">
|
||||
<ul data-role="listview" style="width:100%;margin: 0;">
|
||||
{% for basket in baskets_collection %}
|
||||
{% for basket in baskets_collection | sort | reverse%}
|
||||
{% if basket.getValidation() %}
|
||||
{% set basket_length = basket.getElements().count() %}
|
||||
<li>
|
||||
{% if basket.getElements().first() %}
|
||||
<div class="lightbox-img">
|
||||
<img src="{{ basket.getElements().first().getRecord(app).get_thumbnail.get_url()}}" />
|
||||
</div>
|
||||
{% endif %}
|
||||
<h3><a href="{{ path('lightbox_validation', { 'basket' : basket.getId() }) }}">{{basket.getName()}}</a></h3>
|
||||
<p>{{ basket.getDescription() }}</p>
|
||||
<span class="ui-li-count">{{ basket_length }}</span>
|
||||
{#<p>{{ basket.getDescription() }}</p>#}
|
||||
<span class="ui-li-count validation">{{ basket_length }}</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="footer">
|
||||
|
||||
</div>
|
||||
@@ -113,28 +130,39 @@
|
||||
<div id="baskets" data-role="page">
|
||||
<div data-role="header">
|
||||
<a rel="external" href="#home" data-icon="arrow-l">{{ 'Back' | trans }}</a>
|
||||
<h1>{{ 'Paniers' | trans }}</h1>
|
||||
<h1>{{module_name}}</h1>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<p>
|
||||
<p class="basket-title">
|
||||
{{ 'Paniers' | trans }}
|
||||
<span>{{_self.baskets_length(baskets_collection)}}</span>
|
||||
</p>
|
||||
<p class="lightbox-msg">
|
||||
{{ 'Voici vos paniers' | trans }}
|
||||
</p>
|
||||
<div class="feed-list">
|
||||
<ul data-role="listview" style="width:100%;margin: 0;">
|
||||
{% for basket in baskets_collection %}
|
||||
{% for basket in baskets_collection | sort | reverse %}
|
||||
{% if basket.getValidation() is empty %}
|
||||
{% set basket_length = basket.getElements().count() %}
|
||||
<li>
|
||||
{% if basket.getElements().first() %}
|
||||
<div class="lightbox-img">
|
||||
<img src="{{ basket.getElements().first().getRecord(app).get_thumbnail.get_url()}}" />
|
||||
</div>
|
||||
{% endif %}
|
||||
<h3><a href="{{ path('lightbox_validation', { 'basket' : basket.getId() }) }}">{{ basket.getName() }}</a></h3>
|
||||
<p>{{ basket.getDescription() }}</p>
|
||||
<span class="ui-li-count">{{basket_length}}</span>
|
||||
{#<p>{{ basket.getDescription() }}</p>#}
|
||||
<span class="ui-li-count baskets">{{basket_length}}</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="footer">
|
||||
|
||||
</div>
|
||||
|
@@ -1,21 +1,19 @@
|
||||
{% for validationDatas in basket_element.getValidationDatas() %}
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
|
||||
<li>
|
||||
<div class="validate-icon">
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
{% if validationDatas.getAgreement() == true %}<span class="icomoon icon-agree"></span>{% endif %}
|
||||
{% if validationDatas.getAgreement() == false and validationDatas.getAgreement() is not null %}<span class="icomoon icon-disagree"> {{ validationDatas.getAgreement() }}</span>{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="validate-info">
|
||||
<h3>
|
||||
{{ validationDatas.getParticipant().getUser().getDisplayName() }}
|
||||
</h3>
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
{% if validationDatas.getNote() != '' %}
|
||||
<p style="text-align:left;">{{ 'validation:: note' | trans }} : {{ validationDatas.getNote()|nl2br }} </p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
@@ -31,6 +31,9 @@
|
||||
data-icon="arrow-l">{{ 'Back' | trans }}</a>
|
||||
<h1>{{basket.getName()}}</h1>
|
||||
<a rel="external" href="{{ path('lightbox') }}" data-icon="home" data-iconpos="notext" data-direction="reverse" class="ui-btn-right jqm-home">{{ 'Home' | trans }}</a>
|
||||
</div>
|
||||
<div class="lightbox-user-info">
|
||||
{% include 'common/menubar.html.twig' %}
|
||||
</div>
|
||||
<div data-role="content">
|
||||
<input type="hidden" id="basket_validation_id" value="{{ basket.getId() }}">
|
||||
|
@@ -17,6 +17,8 @@
|
||||
</div>
|
||||
<div class="chim-right">
|
||||
{% for validationDatas in basket_element.getValidationDatas()%}
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
|
||||
<div class="basket_report_user_wrapper ui-corner-all">
|
||||
{% if validationDatas.getAgreement() == true %}
|
||||
{% set imguser = '<span class="icomoon icon-agree"></span>' %}
|
||||
@@ -30,19 +32,16 @@
|
||||
{% endif %}
|
||||
|
||||
<div class="validate-icon">
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
{{imguser|raw}}
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="validate-info">
|
||||
<h3> {{validationDatas.getParticipant().getUser().getDisplayName()}}</h3>
|
||||
{% if validationDatas.getNote() != '' %}
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
<p> {{validationDatas.getNote()|nl2br}}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -16,9 +16,10 @@
|
||||
<a class="workzone-menu-title" href="{{ path('prod_baskets_basket', { 'basket' : basket.getId() }) }}">
|
||||
<span>
|
||||
{% if not basket.isRead() %}
|
||||
<img src='/assets/common/images/icons/basket_push_unread.png' title=''/>
|
||||
<img src='/assets/common/images/icons/basket_feedback_unread.png' title=''/>
|
||||
{% else %}
|
||||
<img src='/assets/common/images/icons/basket_feedback_read.png' title=''/>
|
||||
{% endif %}
|
||||
<img src='/assets/common/images/icons/basket.png' title=''/>
|
||||
{{basket.getName()|e}}
|
||||
</span>
|
||||
</a>
|
||||
@@ -26,11 +27,9 @@
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<img
|
||||
title="{{ basket.getDescription() }}"
|
||||
class="basketTips basket_title"
|
||||
src="/assets/common/images/icons/valid.png"
|
||||
/>
|
||||
<img title="{{ basket.getDescription()|e }}"
|
||||
class="basket_title"
|
||||
src="/assets/common/images/icons/valid.png" />
|
||||
</td>
|
||||
<td>
|
||||
<a class="contextMenuTrigger icon-display-grid" href="#"></a>
|
||||
|
@@ -218,8 +218,8 @@
|
||||
</span>
|
||||
</td>
|
||||
<td class="options">
|
||||
<button class="select-all round-blue-border-btn" style="width: 128px; margin-right: 10px;">{{ 'Select all' | trans }}</button>
|
||||
<button class="unselect-all round-blue-border-btn" style="width: 128px;">{{ 'Deselect all' | trans }}</button>
|
||||
<button class="select-all round-blue-border-btn" style="margin-right: 10px;">{{ 'Select all' | trans }}</button>
|
||||
<button class="unselect-all round-blue-border-btn">{{ 'Deselect all' | trans }}</button>
|
||||
<button class="delete-selection btn btn-inverse">{{ 'prod:push: delete selection' | trans }}</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
18
yarn.lock
18
yarn.lock
@@ -7565,10 +7565,10 @@ phantomjs-prebuilt@^2.1.3:
|
||||
request-progress "^2.0.1"
|
||||
which "^1.2.10"
|
||||
|
||||
phraseanet-common@^0.4.1:
|
||||
version "0.4.2"
|
||||
resolved "https://registry.yarnpkg.com/phraseanet-common/-/phraseanet-common-0.4.2.tgz#740de9bf254116adc506c9703015ab1533f89864"
|
||||
integrity sha512-uyKULVCV9df161A970mWnZtdxAb/ZWCuUdnSTn0T9AGvwsWvKf2p6+pgEVtBQ81LIGn1m5UlhiF7dUlc6nT7iQ==
|
||||
phraseanet-common@^0.4.5-d:
|
||||
version "0.4.5-d"
|
||||
resolved "https://registry.yarnpkg.com/phraseanet-common/-/phraseanet-common-0.4.5-d.tgz#193da1ab062f98e99729b7f98a7bbe32c495c7f3"
|
||||
integrity sha512-7mmPDg0pFnFYyY1eazmUcDa18SGXp90zEBYTNzVan6goPPBjUmA0YwzBiuvDnxlcwMX8x0kDIrOouOBfWG5E1w==
|
||||
dependencies:
|
||||
es6-promise "^4.1.1"
|
||||
humane-js "^3.2.2"
|
||||
@@ -7577,10 +7577,10 @@ phraseanet-common@^0.4.1:
|
||||
js-cookie "^2.1.0"
|
||||
pym.js "^1.3.1"
|
||||
|
||||
phraseanet-production-client@0.34.80-d:
|
||||
version "0.34.80-d"
|
||||
resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.80-d.tgz#1e54bee4306ab11528377cb63c19d8c7491ef0f3"
|
||||
integrity sha512-ilGs7ndDNztwlyeW9MA2TMiMhZC+P1/lNNeIsIuh+KuJH8M3Y3SWBcmsN2lqu5iM1Xg5FbWJ6iXcCSrLWHTqsw==
|
||||
phraseanet-production-client@^0.34.86-d:
|
||||
version "0.34.86-d"
|
||||
resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.86-d.tgz#51e6c6fb17fcd2695cee90fb3d972c781057fd78"
|
||||
integrity sha512-12o7pcRZAJ/5Ote4DbkaRxLz2GIZBUcZf53FB+GHVFxhds5ia6UNDCPhYP5vX4hhHtO/Y6Mj/BOlOjnoyi+k1g==
|
||||
dependencies:
|
||||
"@mapbox/mapbox-gl-language" "^0.9.2"
|
||||
"@turf/turf" "^5.1.6"
|
||||
@@ -7611,7 +7611,7 @@ phraseanet-production-client@0.34.80-d:
|
||||
mapbox-gl-circle "^1.6.5"
|
||||
mapbox.js "^2.4.0"
|
||||
nouislider "^9.2.0"
|
||||
phraseanet-common "^0.4.1"
|
||||
phraseanet-common "^0.4.5-d"
|
||||
pym.js "^1.3.1"
|
||||
rx "^4.1.0"
|
||||
sprintf-js "^1.1.1"
|
||||
|
Reference in New Issue
Block a user