mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 18:03:17 +00:00
Merge branch 'master' into PHRAS-2739-incorporate-subdefwebhook
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: "${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"
|
||||
|
||||
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"]
|
||||
@@ -72,3 +72,7 @@ It will build and tag the following images :
|
||||
local/phraseanet-worker:<TAG>
|
||||
local/phraseanet-fpm:<TAG>
|
||||
local/phraseanet-nginx:<TAG>
|
||||
|
||||
# Deploy the application
|
||||
|
||||
Once the images are built, you can deploy the entire phraseanet stack using the repository : https://github.com/alchemy-fr/phraseanet-docker and follow the instruction inside its `README.md` file.
|
||||
|
||||
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 .
|
||||
|
||||
|
||||
@@ -128,7 +128,7 @@ key:
|
||||
| quoted_string()
|
||||
|
||||
group:
|
||||
::space::? ::parenthese_:: primary() ::_parenthese:: ::space::?
|
||||
::space::? ::parenthese_:: ::space::? primary() ::space::? ::_parenthese:: ::space::?
|
||||
|
||||
|
||||
// Thesaurus terms
|
||||
|
||||
@@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\Command\Setup;
|
||||
|
||||
use Alchemy\Phrasea\Command\Command;
|
||||
use Alchemy\Phrasea\Core\Configuration\StructureTemplate;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\ElasticsearchOptions;
|
||||
use Doctrine\DBAL\Driver\Connection;
|
||||
use Symfony\Component\Console\Helper\DialogHelper;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
@@ -51,7 +52,9 @@ class Install extends Command
|
||||
->addOption('db-template', null, InputOption::VALUE_OPTIONAL, 'Databox template (' . $this->structureTemplate->toString() . ')', null)
|
||||
->addOption('data-path', null, InputOption::VALUE_OPTIONAL, 'Path to data repository', realpath(__DIR__ . '/../../../../../datas'))
|
||||
->addOption('server-name', null, InputOption::VALUE_OPTIONAL, 'Server name')
|
||||
->addOption('indexer', null, InputOption::VALUE_OPTIONAL, 'Path to Phraseanet Indexer', 'auto')
|
||||
->addOption('es-host', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch server HTTP host', 'localhost')
|
||||
->addOption('es-port', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch server HTTP port', 9200)
|
||||
->addOption('es-index', null, InputOption::VALUE_OPTIONAL, 'ElasticSearch index name', null)
|
||||
->addOption('yes', 'y', InputOption::VALUE_NONE, 'Answer yes to all questions');
|
||||
|
||||
return $this;
|
||||
@@ -121,6 +124,21 @@ class Install extends Command
|
||||
list($email, $password) = $this->getCredentials($input, $output, $dialog);
|
||||
$dataPath = $this->getDataPath($input, $output, $dialog);
|
||||
|
||||
if (! $input->getOption('yes')) {
|
||||
$output->writeln("<info>--- ElasticSearch connection settings ---</info>");
|
||||
}
|
||||
|
||||
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, "<question>Phraseanet is going to be installed, continue ? (N/y)</question>", false);
|
||||
|
||||
@@ -132,6 +150,7 @@ class Install extends Command
|
||||
}
|
||||
|
||||
$this->container['phraseanet.installer']->install($email, $password, $abConn, $serverName, $dataPath, $dbConn, $templateName, $this->detectBinaries());
|
||||
$this->container['conf']->set(['main', 'search-engine', 'options'], $esOptions->toArray());
|
||||
|
||||
if (null !== $this->getApplication()) {
|
||||
$command = $this->getApplication()->find('crossdomain:generate');
|
||||
@@ -339,6 +358,35 @@ class Install extends Command
|
||||
return $serverName;
|
||||
}
|
||||
|
||||
private function getESHost(InputInterface $input, OutputInterface $output, DialogHelper $dialog)
|
||||
{
|
||||
$host = $input->getOption('es-host');
|
||||
$port = (int) $input->getOption('es-port');
|
||||
|
||||
if (! $input->getOption('yes')) {
|
||||
while (! $host) {
|
||||
$host = $dialog->ask($output, 'ElasticSearch server host : ', null);
|
||||
};
|
||||
|
||||
while ($port <= 0 || $port >= 65535) {
|
||||
$port = (int) $dialog->ask($output, 'ElasticSearch server port : ', null);
|
||||
};
|
||||
}
|
||||
|
||||
return [ $host, $port ];
|
||||
}
|
||||
|
||||
private function getESIndexName(InputInterface $input, OutputInterface $output, DialogHelper $dialog)
|
||||
{
|
||||
$index = $input->getOption('es-index');
|
||||
|
||||
if (! $input->getOption('yes')) {
|
||||
$index = $dialog->ask($output, 'ElasticSearch server index name (blank to autogenerate) : ', null);
|
||||
}
|
||||
|
||||
return $index;
|
||||
}
|
||||
|
||||
private function detectBinaries()
|
||||
{
|
||||
return [
|
||||
|
||||
@@ -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');
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -463,8 +463,8 @@ class databox extends base implements ThumbnailedElement
|
||||
->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']) && (string) $field['gui_editable'] == 1))
|
||||
->set_gui_visible((isset($field['gui_editable']) && (string) $field['gui_visible'] == 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();
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -79,7 +79,7 @@
|
||||
<size>748</size>
|
||||
<mediatype>video</mediatype>
|
||||
<writeDatas>yes</writeDatas>
|
||||
<acodec>libfaac</acodec>
|
||||
<acodec>libmp3lame</acodec>
|
||||
<vcodec>libx264</vcodec>
|
||||
<devices>screen</devices>
|
||||
<bitrate>1000</bitrate>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<size>748</size>
|
||||
<mediatype>video</mediatype>
|
||||
<writeDatas>yes</writeDatas>
|
||||
<acodec>libfaac</acodec>
|
||||
<acodec>libmp3lame</acodec>
|
||||
<vcodec>libx264</vcodec>
|
||||
<devices>screen</devices>
|
||||
<bitrate>1000</bitrate>
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
<size>748</size>
|
||||
<mediatype>video</mediatype>
|
||||
<writeDatas>yes</writeDatas>
|
||||
<acodec>libfaac</acodec>
|
||||
<acodec>libmp3lame</acodec>
|
||||
<vcodec>libx264</vcodec>
|
||||
<devices>screen</devices>
|
||||
<bitrate>1000</bitrate>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
"normalize-css": "^2.1.0",
|
||||
"npm": "^6.0.0",
|
||||
"npm-modernizr": "^2.8.3",
|
||||
"phraseanet-production-client": "0.34.76-d",
|
||||
"phraseanet-production-client": "^0.34.86-d",
|
||||
"requirejs": "^2.3.5",
|
||||
"tinymce": "^4.0.28",
|
||||
"underscore": "^1.8.3",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:jms="urn:jms:translation" version="1.2">
|
||||
<file date="2019-05-21T05:53:02Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
|
||||
<file date="2019-11-19T08:48:53Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
|
||||
<header>
|
||||
<tool tool-id="JMSTranslationBundle" tool-name="JMSTranslationBundle" tool-version="1.1.0-DEV"/>
|
||||
<note>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.</note>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:jms="urn:jms:translation" version="1.2">
|
||||
<file date="2019-05-21T05:54:16Z" source-language="en" target-language="en" datatype="plaintext" original="not.available">
|
||||
<file date="2019-11-19T08:49:17Z" source-language="en" target-language="en" datatype="plaintext" original="not.available">
|
||||
<header>
|
||||
<tool tool-id="JMSTranslationBundle" tool-name="JMSTranslationBundle" tool-version="1.1.0-DEV"/>
|
||||
<note>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.</note>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:jms="urn:jms:translation" version="1.2">
|
||||
<file date="2019-05-21T05:55:28Z" source-language="en" target-language="fr" datatype="plaintext" original="not.available">
|
||||
<file date="2019-11-15T08:03:23Z" source-language="en" target-language="fr" datatype="plaintext" original="not.available">
|
||||
<header>
|
||||
<tool tool-id="JMSTranslationBundle" tool-name="JMSTranslationBundle" tool-version="1.1.0-DEV"/>
|
||||
<note>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.</note>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:jms="urn:jms:translation" version="1.2">
|
||||
<file date="2019-05-21T05:56:47Z" source-language="en" target-language="nl" datatype="plaintext" original="not.available">
|
||||
<file date="2019-11-19T08:50:13Z" source-language="en" target-language="nl" datatype="plaintext" original="not.available">
|
||||
<header>
|
||||
<tool tool-id="JMSTranslationBundle" tool-name="JMSTranslationBundle" tool-version="1.1.0-DEV"/>
|
||||
<note>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.</note>
|
||||
|
||||
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,4 +1,6 @@
|
||||
$iconsPath: '../../../assets/common/images/icons/';
|
||||
$feedbackColor : #8bc34a;
|
||||
$basketColor : #2196f3 ;
|
||||
ul.image_set {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
@@ -6,30 +8,66 @@ ul.image_set{
|
||||
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;
|
||||
width: auto !important;
|
||||
height: 100% !important;
|
||||
top: 0 !important;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
li.image_box a {
|
||||
padding: 0;
|
||||
text-shadow: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
li.image_box {
|
||||
width:80px;
|
||||
height:80px;
|
||||
width: 18%;
|
||||
position: relative;
|
||||
float:left;
|
||||
margin:0px 15px 15px 0px;
|
||||
padding:0px;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@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 {
|
||||
background-color: #53b401;
|
||||
color: #fff;
|
||||
@@ -45,10 +83,13 @@ a.active_choice{
|
||||
}
|
||||
|
||||
.valid_choice.agree {
|
||||
background-image: url('#{$iconsPath}ok.png');
|
||||
background: #7ed321;
|
||||
border-top-left-radius: 100px;
|
||||
}
|
||||
|
||||
.valid_choice.disagree {
|
||||
background-image: url('#{$iconsPath}delete.png');
|
||||
background: #d0021b;
|
||||
border-top-left-radius: 100px;
|
||||
}
|
||||
|
||||
.thumb_wrapper {
|
||||
@@ -70,3 +111,211 @@ a.active_choice{
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.ui-footer .ui-title, .ui-header .ui-title {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.ui-listview .ui-li-has-thumb .ui-li-thumb, .ui-listview .ui-li-has-thumb > .ui-btn > img:first-child, .ui-listview .ui-li-has-thumb > img:first-child {
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
/*user status*/
|
||||
.menu-bar-item {
|
||||
background: #f0f0f0;
|
||||
padding: 12px 15px;
|
||||
text-align: left;
|
||||
position: relative;
|
||||
.icomoon {
|
||||
font-size: 17px;
|
||||
position: absolute;
|
||||
left: 23px;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.ui-link {
|
||||
color: #4f4f4f !important;
|
||||
text-decoration: none !important;
|
||||
.text {
|
||||
padding-left: 31px;
|
||||
color: #4f4f4f !important;
|
||||
text-decoration: none !important;
|
||||
font-weight: 700;
|
||||
font-size: 13px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*new design of lightbox*/
|
||||
/*main nav */
|
||||
#lightbox-menu {
|
||||
li {
|
||||
margin-bottom: 30px;
|
||||
.ui-li-count {
|
||||
border-radius: 3px !important;
|
||||
border-top-left-radius: 0 !important;
|
||||
border-bottom-left-radius: 0 !important;
|
||||
border: 0;
|
||||
color: #fff;
|
||||
text-shadow: none;
|
||||
padding: 18px 23px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
font-size: 22px;
|
||||
min-width: 25px;
|
||||
background: $feedbackColor;
|
||||
}
|
||||
&.ui-first-child {
|
||||
margin-top: 15px;
|
||||
}
|
||||
&.ui-last-child {
|
||||
a {
|
||||
&:before {
|
||||
background: $basketColor;
|
||||
}
|
||||
&:hover, &:active, &:focus {
|
||||
color: $basketColor;
|
||||
}
|
||||
}
|
||||
.ui-li-count {
|
||||
background: $basketColor;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
a {
|
||||
padding: 22px 25px;
|
||||
font-size: 20px;
|
||||
border-radius: 3px !important;
|
||||
box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.19);
|
||||
background-color: #eeeeee;
|
||||
&:hover, &:active, &:focus {
|
||||
color: $feedbackColor;
|
||||
}
|
||||
&:after {
|
||||
content: none !important;
|
||||
}
|
||||
&:before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 4px;
|
||||
bottom: 0;
|
||||
background: $feedbackColor;
|
||||
left: 0;
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lightbox-bottom-btn {
|
||||
margin-top: 50px;
|
||||
.ui-btn {
|
||||
font-size: 15px;
|
||||
}
|
||||
}
|
||||
#validation, #baskets {
|
||||
.ui-content {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
.basket-title {
|
||||
background: $feedbackColor;
|
||||
padding: 12px 30px;
|
||||
font-size: 17px;
|
||||
margin: 0;
|
||||
text-shadow: none;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
#baskets & {
|
||||
background: $basketColor;
|
||||
}
|
||||
span {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
||||
.feed-list {
|
||||
li {
|
||||
height: 71px;
|
||||
padding-left: 109px!important;
|
||||
padding-right: 80px!important;
|
||||
border-color: #d4d4d4!important;
|
||||
text-overflow: inherit!important;
|
||||
white-space: inherit!important;
|
||||
}
|
||||
.lightbox-img {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
background-color: #ededed;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
img {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 90px;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
}
|
||||
h3 {
|
||||
display: flex!important;
|
||||
align-items: center;
|
||||
height: 71px;
|
||||
margin: 0!important;
|
||||
font-size: 15px;
|
||||
font-weight: bold!important;
|
||||
text-overflow: inherit!important;
|
||||
white-space: inherit!important;
|
||||
a {
|
||||
position: relative;
|
||||
color: #313131!important;
|
||||
width: 100%;
|
||||
padding-right: 18px;
|
||||
&:after {
|
||||
content: "\e96c";
|
||||
font-family: icomoon;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
font-size: 20px;
|
||||
line-height: 1;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
span {
|
||||
font-size: 17px;
|
||||
color: #fff!important;
|
||||
display: inline-block;
|
||||
text-shadow: none!important;
|
||||
top: 0;
|
||||
width: 52px;
|
||||
right: 0;
|
||||
line-height: 25px;
|
||||
padding: 31px 0px;
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
&.validation {
|
||||
background: $feedbackColor!important;
|
||||
}
|
||||
&.baskets {
|
||||
background: $basketColor!important;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.lightbox-msg {
|
||||
font-size: 14px;
|
||||
color: #313131;
|
||||
padding: 6px 0 6px 30px;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -25,3 +48,668 @@
|
||||
#right-btn {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.report-modal, .ui-dialog .ui-dialog-content {
|
||||
background: linear-gradient(#3c3c3c, #111);
|
||||
}
|
||||
|
||||
.ui-bar-c, .ui-body-c, .ui-btn-down-c, .ui-btn-hover-c, .ui-btn-up-c, .ui-overlay-c {
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
@import '../../_shared/styles/variables';
|
||||
$lightboxPath: '../images/';
|
||||
$imagesPath: '/assets/vendors/jquery-ui/images/dark-hive/';
|
||||
|
||||
$mainMenuBackgroundColor: #c7c7c7; //BFBFBF;
|
||||
$mainMenuBottomBorder: 1px solid #c7c7c7;
|
||||
$mainMenuLinkColor: #212121;
|
||||
$mainMenuLinkHoverColor: #000000;
|
||||
$mainMenuLinkActiveColor: #BFBFBF;
|
||||
$mainMenuLinkBackgroundHoverColor: transparent;
|
||||
|
||||
body {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
border: none;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.title15 {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.record_display_box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
table {
|
||||
vertical-align: middle;
|
||||
table-layout: fixed;
|
||||
}
|
||||
.title {
|
||||
margin: 0 10px;
|
||||
}
|
||||
.record {
|
||||
position: relative;
|
||||
max-width: none;
|
||||
max-height: none;
|
||||
}
|
||||
.header {
|
||||
color: #BFBFBF;
|
||||
height: 30px;
|
||||
bottom: auto;
|
||||
overflow: hidden;
|
||||
.title {
|
||||
overflow: hidden;
|
||||
line-height: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
}
|
||||
.lightbox_container {
|
||||
top: 30px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.display_id {
|
||||
top: 5px;
|
||||
margin: 0 0 0 5px;
|
||||
background: #bebebe;
|
||||
}
|
||||
}
|
||||
|
||||
#sc_wrapper {
|
||||
left: 20px;
|
||||
right: 20px;
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
}
|
||||
|
||||
#sc_container {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.basket_element_wrapper {
|
||||
position: relative;
|
||||
float: left;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.basket_element {
|
||||
position: relative;
|
||||
float: left;
|
||||
width: 114px;
|
||||
height: 130px;
|
||||
border: 1px solid #212121;
|
||||
text-align: left;
|
||||
padding: 5px 8px;
|
||||
&.selected {
|
||||
background-color: #212121;
|
||||
}
|
||||
.display_id {
|
||||
top: 4px;
|
||||
left: 8px;
|
||||
}
|
||||
.agreement {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: 8px;
|
||||
z-index: 99;
|
||||
}
|
||||
.image {
|
||||
position: relative;
|
||||
z-index: 90;
|
||||
}
|
||||
.previewTips {
|
||||
background-image: url('#{$iconsPath}zoom.gif');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
cursor: help;
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
right: 8px;
|
||||
height: 18px;
|
||||
width: 18px;
|
||||
z-index: 99;
|
||||
}
|
||||
}
|
||||
|
||||
#report .display_id {
|
||||
top: 0;
|
||||
left: 0;
|
||||
border-radius: 0;
|
||||
background-color: rgba(216, 216, 216, 0.7);
|
||||
font-weight: 700;
|
||||
z-index: 99;
|
||||
color: #333333;
|
||||
position: absolute;
|
||||
width: 22px;
|
||||
padding: 2px 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
#report .CHIM.diapo {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.display_id {
|
||||
background-color: #FFFFFF;
|
||||
padding: 3px 6px;
|
||||
font-weight: bold;
|
||||
z-index: 99;
|
||||
color: #212121;
|
||||
-moz-border-radius: 50%;
|
||||
-webkit-border-radius: 50%;
|
||||
border-radius: 50%;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.not_decided {
|
||||
opacity: 0.30;
|
||||
filter: alpha(opacity=30);
|
||||
}
|
||||
|
||||
#sc_wrapper .not_decided {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#right_scroller {
|
||||
width: 30px;
|
||||
right: -10px;
|
||||
left: auto;
|
||||
background-image: url('#{$lightboxPath}right_arrow.png');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
#left_scroller {
|
||||
width: 30px;
|
||||
left: -10px;
|
||||
right: auto;
|
||||
background-image: url('#{$lightboxPath}left_arrow.png');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
#basket_infos {
|
||||
overflow: hidden;
|
||||
background-color: #1F1E1B;
|
||||
color: #BFBFBF;
|
||||
}
|
||||
|
||||
#basket_options {
|
||||
height: 35px;
|
||||
top: auto;
|
||||
background-color: #1F1E1B;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#basket_options .confirm_report {
|
||||
margin: 5px auto;
|
||||
}
|
||||
|
||||
#basket_infos .user_infos {
|
||||
height: 120px;
|
||||
top: auto;
|
||||
}
|
||||
|
||||
#basket_infos {
|
||||
table {
|
||||
width: 100%;
|
||||
margin: 5px 0;
|
||||
.title {
|
||||
width: 100%;
|
||||
}
|
||||
.report_wrapper {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#right_column {
|
||||
left: auto;
|
||||
right: 0;
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
#right_column_validation_toggle {
|
||||
bottom: 45px;
|
||||
background-color: #1F1E1B;
|
||||
height: 30px;
|
||||
top: auto;
|
||||
text-align: center;
|
||||
display: none;
|
||||
line-height: 25px;
|
||||
color: #BFBFBF;
|
||||
}
|
||||
|
||||
#right_column .right_column_title {
|
||||
height: 30px;
|
||||
bottom: auto;
|
||||
}
|
||||
|
||||
#right_column .right_column_title img.expanded {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#right_column .right_column_title img.collapsed {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#right_column .right_column_title.expanded img.expanded {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#right_column .right_column_title.expanded img.collapsed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#right_column .right_column_wrapper {
|
||||
top: 30px;
|
||||
bottom: 45px;
|
||||
}
|
||||
|
||||
#right_column .right_column_wrapper.caption {
|
||||
bottom: 85px;
|
||||
}
|
||||
|
||||
#record_infos {
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
#record_compare {
|
||||
visibility: hidden;
|
||||
top: auto;
|
||||
left: auto;
|
||||
}
|
||||
|
||||
#record_compare .header, #record_compare .lightbox_container {
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
#record_wrapper.comparison #record_main .header, #record_wrapper.comparison #record_main .lightbox_container {
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
.agreement_selector {
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
.clickable {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.big_box.agree {
|
||||
border: 2px solid #35AC00;
|
||||
background-color: #35AC00;
|
||||
}
|
||||
|
||||
.big_box.disagree {
|
||||
border: 2px solid #DE1200;
|
||||
background-color: #DE1200;
|
||||
}
|
||||
|
||||
.big_box, .big_box.not_decided {
|
||||
width: 95px;
|
||||
margin: 0 auto;
|
||||
padding: 6px 10px;
|
||||
height: 30px;
|
||||
color: #1F1E1B;
|
||||
background-color: #353430;
|
||||
border: 2px solid #353430;
|
||||
text-align: center;
|
||||
opacity: 1;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
|
||||
.big_box span {
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
li.userchoice {
|
||||
margin: 5px 0 0px 20px;
|
||||
}
|
||||
|
||||
.userchoice.disagree {
|
||||
color: #DE1200;
|
||||
}
|
||||
|
||||
.userchoice.agree {
|
||||
color: #35AC00;
|
||||
}
|
||||
|
||||
.basket_report_user {
|
||||
padding: 7px 10px;
|
||||
}
|
||||
|
||||
.basket_report_user_wrapper {
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #b2b2b2;
|
||||
border-radius: 0;
|
||||
display: inline-block;
|
||||
padding: 10px 15px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
background: #e5e5e5;
|
||||
text-shadow: none;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text {
|
||||
padding: 0.2em 1em 0.2em 2.1em;
|
||||
}
|
||||
|
||||
/*******
|
||||
*
|
||||
* Index
|
||||
*
|
||||
* ******/
|
||||
#main_index {
|
||||
position: relative;
|
||||
width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#main_wrapper {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#main_wrapper h1 {
|
||||
font-weight: bold;
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
table th {
|
||||
text-align: right;
|
||||
vertical-align: bottom;
|
||||
height: 60px;
|
||||
border-bottom: 1px solid #8F8F8F;
|
||||
}
|
||||
|
||||
table th.title {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
table th h1 {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
table th i {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.ui-state-default.note_closer, .ui-state-default.note_saver {
|
||||
background-color: #353430;
|
||||
padding: 5px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.ui-state-default.note_saver {
|
||||
background-color: #1F1E1B;
|
||||
}
|
||||
|
||||
.record_display_box form .buttons {
|
||||
margin: 5px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.record_display_box form {
|
||||
margin: 15px 0;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.record_display_box form textarea {
|
||||
width: 100%;
|
||||
height: 75px;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.basket_downloader {
|
||||
background-color: #1F1E1B;
|
||||
margin: 0 10px;
|
||||
padding: 2px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
hr {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #212121;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.report {
|
||||
margin: 0 10px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Overrides JqueryUI
|
||||
*
|
||||
*/
|
||||
.ui-button {
|
||||
background: transparent;
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ui-button-text-only .ui-button-text {
|
||||
padding: 0.15em;
|
||||
}
|
||||
|
||||
.ui-dialog {
|
||||
.ui-dialog-titlebar {
|
||||
padding: 1em 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.videoTips {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#basket_infos {
|
||||
margin-bottom: 20px;
|
||||
.mobile_aggreement_box {
|
||||
padding: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.ui-button-icon.ui-icon.ui-icon-closethick {
|
||||
background-position: -73px 0px;
|
||||
background-color: rgba(0, 0, 0, .9);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.btn-container {
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
button.confirm_report {
|
||||
background: #38c !important;
|
||||
color: #fff !important;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
padding: 6px;
|
||||
display: inline-block;
|
||||
border: 1px solid #38c;
|
||||
text-shadow: 0 1px 0 #111;
|
||||
border-radius: 16px;
|
||||
font-family: Roboto, sans-serif;
|
||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2) !important;
|
||||
}
|
||||
|
||||
.report_wrapper {
|
||||
position: relative;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.report_btn {
|
||||
position: absolute;
|
||||
top: -41px;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
background: #8bc34a;
|
||||
border: 1px solid #8bc34a;
|
||||
box-sizing: border-box;
|
||||
padding: 8px 13px;
|
||||
min-width: 110px;
|
||||
border-radius: 4px;
|
||||
color: #fff !important;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
transition: all 0.3s;
|
||||
&:hover, &:focus {
|
||||
background: darken(#8bc34a, 0.2);
|
||||
border-color: darken(#8bc34a, 0.3);
|
||||
}
|
||||
&.report_list {
|
||||
background: #f44336;
|
||||
border-color: #f44336;
|
||||
&:hover, &:focus {
|
||||
background: darken(#f44336, 0.2);
|
||||
border-color: darken(#f44336, 0.3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.report_list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.report_summary_backup, .report_list_backup {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.chim-wrapper-block {
|
||||
margin-bottom: 15px;
|
||||
.chim-block {
|
||||
margin: 0;
|
||||
}
|
||||
.chim-inner {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
min-width: 296px;
|
||||
}
|
||||
.chim-left {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
background: #ededed;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
.diapo {
|
||||
display: inline-block;
|
||||
div {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.chim-right {
|
||||
width: 100%;
|
||||
.validate-icon {
|
||||
float: left;
|
||||
height: 25px;
|
||||
vertical-align: middle;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
margin: 0;
|
||||
padding-top: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.thumb_wrapper img.record_image {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
/*header lightbox*/
|
||||
.ui-footer .ui-title, .ui-header .ui-title {
|
||||
min-height: 26px;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.ui-listview.lightbox-list-view {
|
||||
& > .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;
|
||||
}
|
||||
|
||||
/*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;
|
||||
}
|
||||
|
||||
|
||||
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,8 +48,10 @@
|
||||
<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">
|
||||
{{ thumbnail.format100percent(record.get_preview()) }}
|
||||
<div class="nav_button">
|
||||
{% if prevId != NULL %}
|
||||
<a data-ajax="false" id="left-btn"
|
||||
@@ -64,6 +65,7 @@
|
||||
{% endif %}
|
||||
<div style="clear: both;"></div>
|
||||
</div>
|
||||
<div class="center-image">{{ thumbnail.format100percent(record.get_preview()) }}</div>
|
||||
{% 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;">
|
||||
@@ -81,7 +83,7 @@
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<ul data-role="listview" id="notes_{{basket_element.getId()}}">
|
||||
<ul data-role="listview" class="lightbox-list-view" id="notes_{{basket_element.getId()}}">
|
||||
{% include 'lightbox/sc_note.html.twig' %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -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,17 +1,19 @@
|
||||
{% for validationDatas in basket_element.getValidationDatas() %}
|
||||
{% set is_mine = validationDatas.getParticipant().getUser().getId() == app.getAuthenticatedUser().getId() %}
|
||||
{% if validationDatas.getNote() != '' or (validationDatas.getAgreement() is not null and is_mine) %}
|
||||
{% if basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanSeeOthers() or validationDatas.getParticipant().getUser() == app.getAuthenticatedUser() %}
|
||||
|
||||
<li>
|
||||
<h3 style="text-align:left;">
|
||||
{% if is_mine == false and validationDatas.getAgreement() is not null %}
|
||||
<img style="vertical-align:middle;"
|
||||
src="/assets/lightbox/images/{% if validationDatas.getAgreement() == true %}agree.png{% else %}disagree.png{% endif %}" />
|
||||
{% endif %}
|
||||
<div class="validate-icon">
|
||||
{% 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 %}
|
||||
</div>
|
||||
<div class="validate-info">
|
||||
<h3>
|
||||
{{ validationDatas.getParticipant().getUser().getDisplayName() }}
|
||||
</h3>
|
||||
{% if validationDatas.getNote() != '' %}
|
||||
<p style="text-align:left;">{{ 'validation:: note' | trans }} : {{ validationDatas.getNote()|nl2br }} </p>
|
||||
{% 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() }}">
|
||||
@@ -38,22 +41,56 @@
|
||||
{% set basket_length = basket.getElements().count() %}
|
||||
{% trans with {'%basket_length%' : basket_length} %}%basket_length% documents{% endtrans %}
|
||||
</p>
|
||||
{% if basket.getValidation() %}
|
||||
<div class="report_wrapper">
|
||||
<a id="report_summary" class="report_btn report_summary" href="#" onclick="$.ajax({
|
||||
type: 'GET',
|
||||
url: '/lightbox/ajax/LOAD_REPORT/' + $('#navigation').val() + '/',
|
||||
dataType: 'html',
|
||||
success: function (data) {
|
||||
$('#report_list_backup').empty().append($('#report').html());
|
||||
$('#report').empty().append(data);
|
||||
$('#report .record_image').css('height','auto');
|
||||
return;
|
||||
}
|
||||
});
|
||||
$(this).hide();
|
||||
$('#report_list').show();">
|
||||
{{ 'lightbox::recaptitulatif' | trans }}
|
||||
</a>
|
||||
<a id="report_list" class="report_btn report_list" href="#" onclick=" $(this).hide();
|
||||
$('#report_summary').show();
|
||||
$('#report').empty().append($('#report_list_backup').html());">
|
||||
{{ 'lightbox::list' | trans }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="report_list_backup" id="report_list_backup"> </div>
|
||||
<div class="report_summary_backup " id="report_summary_backup"> </div>
|
||||
{% endif %}
|
||||
<input type="hidden" id="navigation" value="{{ basket.getId() }}">
|
||||
<div id="report" class="summary_block">
|
||||
<ul class="image_set">
|
||||
{% for basket_element in basket.getElements() %}
|
||||
|
||||
<li class="image_box" id="sselcontid_{{basket_element.getId()}}">
|
||||
<div class="display_id">
|
||||
{{basket_element.getOrd()}}
|
||||
</div>
|
||||
{% if basket_element.getBasket().getValidation() and basket_element.getBasket().getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %}
|
||||
<div class="valid_choice valid_choice_{{basket_element.getId()}} {% if basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == true %}agree{% elseif basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() == false and basket_element.getUserValidationDatas(app.getAuthenticatedUser()).getAgreement() is not null %}disagree{% endif %}">
|
||||
</div>
|
||||
{% endif %}
|
||||
<a href="{{ path('lightbox_ajax_load_basketelement', { 'sselcont_id' : basket_element.getId() }) }}">
|
||||
{{thumbnail.format(basket_element.getRecord(app).get_thumbnail(), 80, 80, '', true, false)}}
|
||||
{{thumbnail.format(basket_element.getRecord(app).get_thumbnail(), 300, 300, '', true, false)}}
|
||||
</a>
|
||||
<input type="hidden" class="display_id" name="display_id" value="{{basket_element.getOrd()}}" />
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
<div data-role="footer">
|
||||
</div>
|
||||
|
||||
<div class="btn-container">
|
||||
{% if basket.getValidation() and basket.getValidation().getParticipant(app.getAuthenticatedUser()).getCanAgree() %}
|
||||
<button class="confirm_report" style="width:100%;" title="{{ 'validation::envoyer mon rapport' | trans }}">
|
||||
{{ 'validation::envoyer mon rapport' | trans }}
|
||||
@@ -62,6 +99,8 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
<td>
|
||||
<label for="gui_editable" class="checkbox">
|
||||
<input id="gui_editable" type="checkbox" <%= field.gui_editable ? "checked='checked'" : "" %> />
|
||||
{% trans %}gui_editable{% endtrans %}
|
||||
{% trans %}Gui-editable{% endtrans %}
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -201,7 +201,7 @@
|
||||
<td>
|
||||
<label for="gui_visible" class="checkbox">
|
||||
<input id="gui_visible" type="checkbox" <%= field.gui_visible ? "checked='checked'" : "" %> />
|
||||
{% trans %}gui_visible{% endtrans %}
|
||||
{% trans %}Gui-visible{% endtrans %}
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -264,7 +264,7 @@
|
||||
<td><input id="tbranch" type="text" value="<%= field.tbranch %>"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="generate_cterms" class="checkbox">{% trans %}generate_cterms{% endtrans %}</label></td>
|
||||
<td><label for="generate_cterms" class="checkbox">{% trans %}Generate-cterms{% endtrans %}</label></td>
|
||||
<td><input id="generate_cterms" type="checkbox" <%= field.generate_cterms ? "checked='checked'" : "" %> /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -4,48 +4,49 @@
|
||||
<div style="margin:0 7px;overflow:hidden;">
|
||||
{% for basket_element in basket.getElements() %}
|
||||
{% set record = basket_element.getRecord(app) %}
|
||||
<div class="chim-wrapper wrapCHIM_{{basket_element.getId()}} valid">
|
||||
<div style="margin:20px;">
|
||||
<table style="width: 100%; min-width: 330px;">
|
||||
<tr valign="top">
|
||||
<td style="width:165px;">
|
||||
<div id="CHIM_{{basket_element.getId()}}_{{record.get_serialize_key()}}"
|
||||
class="CHIM diapo">
|
||||
<div class="chim-wrapper-block chim-wrapper wrapCHIM_{{basket_element.getId()}} valid">
|
||||
<div class="chim-block">
|
||||
<div class="chim-inner">
|
||||
<div class="chim-left">
|
||||
<div id="CHIM_{{basket_element.getId()}}_{{record.get_serialize_key()}}" class="CHIM diapo">
|
||||
<div class="display_id">
|
||||
{{basket_element.getOrd()}}
|
||||
</div>
|
||||
{{thumbnail.format(record.get_thumbnail(),165, 125, '', true, false)}}
|
||||
</div>
|
||||
</td>
|
||||
<td style="width:10px;">
|
||||
</td>
|
||||
<td>
|
||||
</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">
|
||||
<div class="basket_report_user">
|
||||
{% if validationDatas.getAgreement() == true %}
|
||||
{% set imguser = '<img src="/assets/lightbox/images/agree.png" />' %}
|
||||
{% set imguser = '<span class="icomoon icon-agree"></span>' %}
|
||||
{% set styleuser = '' %}
|
||||
{% elseif validationDatas.getAgreement() is null %}
|
||||
{% set imguser = '' %}
|
||||
{% set imguser = ' ' %}
|
||||
{% set styleuser = 'margin-left:18px;' %}
|
||||
{% else %}
|
||||
{% set imguser = '<img src="/assets/lightbox/images/disagree.png" />' %}
|
||||
{% set imguser = '<span class="icomoon icon-disagree"></span>' %}
|
||||
{% set styleuser = '' %}
|
||||
{% endif %}
|
||||
<b style="{{styleuser}}">{{imguser|raw}} {{validationDatas.getParticipant().getUser().getDisplayName()}}</b>
|
||||
|
||||
<div class="validate-icon">
|
||||
{{imguser|raw}}
|
||||
</div>
|
||||
<div class="validate-info">
|
||||
<h3> {{validationDatas.getParticipant().getUser().getDisplayName()}}</h3>
|
||||
{% if validationDatas.getNote() != '' %}
|
||||
: {{validationDatas.getNote()|nl2br}}
|
||||
<p> {{validationDatas.getNote()|nl2br}}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div><hr/></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</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>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{% include 'prod/results/record.html.twig' with {
|
||||
'record': record,
|
||||
'settings': settings
|
||||
'settings': settings,
|
||||
'plugins': plugins
|
||||
} %}
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
<td valign="top" style='width:{{ settings.images_size + 50 }}px'>
|
||||
{% include 'prod/results/record.html.twig' with {
|
||||
'record': record,
|
||||
'settings': settings
|
||||
'settings': settings,
|
||||
'plugins': plugins
|
||||
} %}
|
||||
</td>
|
||||
<td valign="middle">
|
||||
|
||||
@@ -155,6 +155,29 @@
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{# add plugins entries #}
|
||||
{% for plugin in plugins.actionbar|default([]) %}
|
||||
{% set menu = plugin.ActionBar['_context_']|default([]) %}
|
||||
{% for k, action in menu %}
|
||||
{% if plugin.isContextMenuOptionAvailable(k, record) %}
|
||||
<div title="" class="context-menu-item"
|
||||
onclick="{{ plugin.getContextMenuJS(k) }}('{{ k }}', '{{record.baseId}}', '{{record.recordId}}', '{{ record.id }}');">
|
||||
<div class="context-menu-item-inner">
|
||||
{% set icon = (action.icon ?? false) ? plugin_asset(plugin.PluginName, action.icon) : null %}
|
||||
{% set label = (action.label ?? false) ? (action.label|trans({}, plugin.PluginLocale)) : 'undefined label' %}
|
||||
<a title="{{ label }}" href="#">
|
||||
{% if icon %}
|
||||
<img style="cursor:pointer;" src="{{ icon }}" alt="{{ label }}">
|
||||
{% endif %}
|
||||
<span>{{ label }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
'doctype_display': doctype_display,
|
||||
'handle_dblclick' : true,
|
||||
'show_context_menu': true
|
||||
}
|
||||
},
|
||||
'plugins': plugins
|
||||
} %}
|
||||
{% endblock %}
|
||||
{% endfor %}
|
||||
|
||||
@@ -44,270 +44,159 @@
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
<button id="TOOL_disktt" class="default_action TOOL_disktt_btn results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/disktt_history.png" height="16" width="16" class="btn-image"/> {{ 'action : exporter' | trans }}
|
||||
</button>
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a class="TOOL_print_btn results_window" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/print_history.png" height="16" width="16" class="btn-image"/>
|
||||
{{ 'action : print' | trans }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
{% set menus = {
|
||||
'export': [
|
||||
{
|
||||
'class':'TOOL_disktt_btn',
|
||||
'icon':'/assets/common/images/icons/disktt_history.png',
|
||||
'label':'action : exporter' | trans },
|
||||
{
|
||||
'class':'TOOL_print_btn',
|
||||
'icon':'/assets/common/images/icons/print_history.png',
|
||||
'label':'action : print' | trans }
|
||||
],
|
||||
'edit': [],
|
||||
'push': [],
|
||||
'tools': [],
|
||||
'delete': []
|
||||
} %}
|
||||
|
||||
{% set actions = {} %}
|
||||
{# menu "edit" #}
|
||||
{% set m = [] %}
|
||||
{% if acl.has_right(constant('\\ACL::CANMODIFRECORD')) %}
|
||||
{% set label %}
|
||||
{{ 'action : editer' | trans }}
|
||||
{% endset %}
|
||||
{% set actions = actions|merge( { 'edit' : {'icon': "/assets/common/images/icons/ppen_history.png", 'class':'TOOL_ppen_btn', 'label' : label} }) %}
|
||||
{% set label %}
|
||||
{{ 'prod::toolbar : video editor' | trans }}
|
||||
{% endset %}
|
||||
{% set actions = actions|merge( { 'video' : {'icon': "/assets/common/images/icons/icon-video-editor.png", 'class':'TOOL_videoeditor_btn', 'label' : label} }) %}
|
||||
{% set m = m|merge([
|
||||
{
|
||||
'class':'TOOL_ppen_btn',
|
||||
'icon':'/assets/common/images/icons/ppen_history.png',
|
||||
'label':'action : editer' | trans },
|
||||
{
|
||||
'class':'TOOL_videoeditor_btn',
|
||||
'icon':'/assets/common/images/icons/icon-video-editor.png',
|
||||
'label':'prod::toolbar : video editor' | trans }
|
||||
]) %}
|
||||
{% endif %}
|
||||
{% if acl.has_right(constant('\\ACL::CHGSTATUS')) %}
|
||||
{% set label %}
|
||||
{{ 'action : status' | trans }}
|
||||
{% endset %}
|
||||
{% set actions = actions|merge( { 'status' : {'icon': "/assets/common/images/icons/chgstatus_history.png", 'class':'TOOL_chgstatus_btn', 'label' : label} }) %}
|
||||
{% if acl.has_right(constant('\\\ACL::CHGSTATUS')) %}
|
||||
{% set m = m|merge([
|
||||
{
|
||||
'class':'TOOL_chgstatus_btn',
|
||||
'icon':'/assets/common/images/icons/chgstatus_history.png',
|
||||
'label':'action : status' | trans }
|
||||
]) %}
|
||||
{% endif %}
|
||||
{% if acl.has_right(constant('\\ACL::CANDELETERECORD')) and acl.has_right(constant('\\ACL::CANADDRECORD')) %}
|
||||
{% set label %}
|
||||
{{ 'action : collection' | trans }}
|
||||
{% endset %}
|
||||
{% set actions = actions|merge( { 'move' : {'icon': "/assets/common/images/icons/chgcoll_history.png", 'class':'TOOL_chgcoll_btn', 'label' : label} }) %}
|
||||
{% set m = m|merge([
|
||||
{
|
||||
'class':'TOOL_chgcoll_btn',
|
||||
'icon':'/assets/common/images/icons/chgcoll_history.png',
|
||||
'label':'action : collection' | trans }
|
||||
]) %}
|
||||
{% endif %}
|
||||
{% set menus = menus|merge({'edit' : m}) %}
|
||||
|
||||
{% set n_actions = actions|length %}
|
||||
{% if n_actions > 1 %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
{% for action in actions %}
|
||||
{% if loop.first %}
|
||||
<button class="default_action {{ action.class }} results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="{{ action.icon }}" height="16" width="16" class="btn-image"/> {{ action.label }}
|
||||
</button>
|
||||
{# menu "push" #}
|
||||
{% set m = [] %}
|
||||
{% if acl.has_right(constant('\\ACL::CANPUSH')) %}
|
||||
{% set m = m|merge([
|
||||
{
|
||||
'class':'TOOL_pushdoc_btn',
|
||||
'icon':'/assets/common/images/icons/push16.png',
|
||||
'label':'action : push' | trans },
|
||||
{
|
||||
'class':'TOOL_feedback_btn',
|
||||
'icon':'/assets/common/images/icons/feedback16.png',
|
||||
'label':'Feedback' | trans }
|
||||
]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
{% for action in actions %}
|
||||
{% if not loop.first %}
|
||||
<li>
|
||||
<a class="{{ action.class }} results_window" data-selection-source="search-result">
|
||||
<img src="{{ action.icon }}" height="16" width="16" class="btn-image"/>
|
||||
{{ action.label }}
|
||||
</a>
|
||||
</li>
|
||||
{% if not loop.last %}
|
||||
<li class="divider"></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
{% elseif n_actions == 1 %}
|
||||
<span class="classicButton">
|
||||
<div class="btn-group">
|
||||
{% for action in actions %}
|
||||
<button class="{{ action.class }} results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="{{ action.icon }}" height="16" width="16" class="btn-image"/> {{ action.label }}
|
||||
</button>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
{% if acl.has_right(constant('\\ACL::CANPUSH')) and acl.has_right(constant('\\ACL::BAS_CHUPUB')) %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
<button class="TOOL_pushdoc_btn default_action results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/push16.png" height="16" width="16" class="btn-image"/> {{ 'action : push' | trans }}
|
||||
</button>
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
<li>
|
||||
<a class="TOOL_feedback_btn results_window" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/feedback16.png" height="16" width="16" class="btn-image"/>
|
||||
{{ 'Feedback' | trans }}
|
||||
</a>
|
||||
</li>
|
||||
{#<li class="divider"></li>#}
|
||||
{#<li>#}
|
||||
{#<a class="TOOL_bridge_btn results_window" href="{{ path("prod_bridge_manager") }}" data-selection-source="search-result">#}
|
||||
{#<img src="/assets/common/images/icons/door.png" height="16" width="16" class="btn-image"/>#}
|
||||
{#{{ 'action : bridge' | trans }}#}
|
||||
{#</a>#}
|
||||
{#</li>#}
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<a class="TOOL_publish_btn results_window" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/rss16.png" height="16" width="16" class="btn-image"/>
|
||||
{{ 'action : publier' | trans }}
|
||||
</a>
|
||||
</li>
|
||||
{% if plugins.actionbar is not empty %}
|
||||
{% for plugin in plugins.actionbar %}
|
||||
<li class="divider"></li>
|
||||
{% for key, action in plugin.getActionBar().push|default([]) %}
|
||||
<li>
|
||||
<a class="results_window {{ action.classes|default('') }}" data-selection-source="search-result">
|
||||
{% if action.icon %}
|
||||
<img src="{{ plugin_asset(plugin.PluginName, action.icon) }}" height="16" width="16" class="btn-image"/>
|
||||
{% endif %}
|
||||
{{ action.label|trans({}, plugin.PluginLocale) }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
{% elseif acl.has_right(constant('\\ACL::CANPUSH')) %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
<button class="TOOL_pushdoc_btn default_action results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/push16.png" height="16" width="16" class="btn-image"/> {{ 'action : push' | trans }}
|
||||
</button>
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
<ul class="submenu dropdown-menu">
|
||||
<li>
|
||||
<a class="TOOL_feedback_btn results_window" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/feedback16.png" height="16" width="16" class="btn-image"/>
|
||||
{{ 'Feedback' | trans }}
|
||||
</a>
|
||||
</li>
|
||||
{% if plugins.actionbar is not empty %}
|
||||
{% for plugin in plugins.actionbar %}
|
||||
<li class="divider"></li>
|
||||
{% for key, action in plugin.getActionBar().push|default([]) %}
|
||||
<li>
|
||||
<a class="results_window {{ action.classes|default('') }}" data-selection-source="search-result">
|
||||
{% if action.icon %}
|
||||
<img src="{{ plugin_asset(plugin.PluginName, action.icon) }}" height="16" width="16" class="btn-image"/>
|
||||
{% endif %}
|
||||
{{ action.label|trans({}, plugin.PluginLocale) }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
{% elseif acl.has_right(constant('\\ACL::BAS_CHUPUB')) %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
{#<button class="TOOL_pushdoc_btn default_action results_window btn btn-inverse" data-selection-source="search-result">#}
|
||||
{#<img src="/assets/common/images/icons/door.png" height="16" width="16" class="btn-image"/> {{ 'action : bridge' | trans }}#}
|
||||
{#</button>#}
|
||||
<button class="TOOL_publish_btn results_window btn btn-inverse">
|
||||
<img src="/assets/common/images/icons/rss16.png" height="16" width="16" class="btn-image"/>
|
||||
{{ 'action : publier' | trans }}
|
||||
</button>
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
{% if plugins.actionbar is not empty %}
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
<ul class="submenu dropdown-menu">
|
||||
{% for plugin in plugins.actionbar %}
|
||||
<li class="divider"></li>
|
||||
{% for key, action in plugin.getActionBar().push|default([]) %}
|
||||
<li>
|
||||
<a class="results_window {{ action.classes|default('') }}">
|
||||
{% if action.icon %}
|
||||
<img src="{{ plugin_asset(plugin.PluginName, action.icon) }}"
|
||||
height="16" width="16" class="btn-image"/>
|
||||
{% endif %}
|
||||
{{ action.label|trans({}, plugin.PluginLocale) }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</span>
|
||||
{% elseif plugins.actionbar is not empty %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
{% set firstButton = true %}
|
||||
{% for plugin in plugins.actionbar %}
|
||||
{% for key, action in plugin.getActionBar().push|default([]) %}
|
||||
{% if firstButton %}
|
||||
<button class="default_action results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<a class="results_window {{ action.classes|default('') }}" data-selection-source="search-result">
|
||||
{% if action.icon %}
|
||||
<img src="{{ plugin_asset(plugin.PluginName, action.icon) }}" height="16" width="16"/>
|
||||
{% endif %}
|
||||
{{ action.label|trans({}, plugin.PluginLocale) }}
|
||||
</a>
|
||||
</button>
|
||||
{% if not (loop.last and loop.parent.loop.last) %}
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>
|
||||
<ul class="submenu dropdown-menu">
|
||||
{% endif %}
|
||||
{% if not loop.first %}<li class="divider"></li>{% endif %}
|
||||
{% if not firstButton %}
|
||||
<li>
|
||||
<a class="results_window {{ action.classes|default('') }}" data-selection-source="search-result">
|
||||
{% if action.icon %}
|
||||
<img src="{{ plugin_asset(plugin.PluginName, action.icon) }}" height="16" width="16" class="btn-image"/>
|
||||
{% endif %}
|
||||
{{ action.label|trans({}, plugin.PluginLocale) }}
|
||||
</a>
|
||||
</li>
|
||||
{% else %}
|
||||
{% set firstButton = false %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% if not firstButton %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</span>
|
||||
{% if acl.has_right(constant('\\ACL::BAS_CHUPUB')) %}
|
||||
{% set m = m|merge([
|
||||
{
|
||||
'class':'TOOL_publish_btn',
|
||||
'icon':'/assets/common/images/icons/rss16.png',
|
||||
'label':'action : publier' | trans }
|
||||
]) %}
|
||||
{% endif %}
|
||||
{% set menus = menus|merge({'push' : m}) %}
|
||||
|
||||
{# menu "tools" #}
|
||||
{% if acl.has_right(constant('\\ACL::IMGTOOLS')) %}
|
||||
<span class="classicButton">
|
||||
<div class="btn-group">
|
||||
<button class="TOOL_imgtools_btn results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/imgtools_history.png" height="16" width="16" class="btn-image"/> {{ 'action : outils' | trans }}
|
||||
</button>
|
||||
</div>
|
||||
</span>
|
||||
{% set menus = menus|merge({'tools' : [
|
||||
{
|
||||
'class':'TOOL_imgtools_btn',
|
||||
'icon':'/assets/common/images/icons/imgtools_history.png',
|
||||
'label':'action : outils' | trans }
|
||||
]}) %}
|
||||
{% endif %}
|
||||
|
||||
{# menu "delete" #}
|
||||
{% if acl.has_right(constant('\\ACL::CANDELETERECORD')) %}
|
||||
<span class="classicButton">
|
||||
{% set menus = menus|merge({'delete' : [
|
||||
{
|
||||
'class':'TOOL_trash_btn',
|
||||
'icon':'/assets/common/images/icons/delete.png',
|
||||
'label':'action : supprimer' | trans }
|
||||
]}) %}
|
||||
{% endif %}
|
||||
|
||||
{# add plugins entries #}
|
||||
{% if plugins.actionbar is not empty %}
|
||||
{% for plugin in plugins.actionbar %}
|
||||
{% for k, menu in plugin.getActionBar() %}
|
||||
{% if k != '_context_' %}
|
||||
{% set m = menus[k]|default([]) %}
|
||||
{% for action in menu %}
|
||||
{% set m = m|merge([{
|
||||
'class':action.classes|default(''),
|
||||
'icon':plugin_asset(plugin.PluginName, action.icon),
|
||||
'label':action.label|trans({}, plugin.PluginLocale) }])
|
||||
%}
|
||||
{% endfor %}
|
||||
{% set menus = menus|merge({(k) : m}) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{# print #}
|
||||
{% for menu_entries in menus %}
|
||||
{% if menu_entries|length > 0 %}
|
||||
<span class="dropdownButton">
|
||||
<div class="btn-group">
|
||||
<button class="TOOL_trash_btn results_window btn btn-inverse" data-selection-source="search-result">
|
||||
<img src="/assets/common/images/icons/delete.png" height="16" width="16" class="btn-image"/> {{ 'action : supprimer' | trans }}
|
||||
{% set menu_entry = menu_entries[0] %}
|
||||
<button class="results_window btn btn-inverse {{ menu_entry.class }}" data-selection-source="search-result">
|
||||
<img src="{{ menu_entry.icon }}" class="btn-image"/>
|
||||
{{ menu_entry.label }}
|
||||
</button>
|
||||
{% set menu_entries = menu_entries|slice(1) %}
|
||||
{% if menu_entries|length > 0 %}
|
||||
<button class="trigger btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span
|
||||
class="caret"></span></button>
|
||||
<ul class="dropdown-menu">
|
||||
{% for menu_entry in menu_entries %}
|
||||
<li>
|
||||
<a class="results_window {{ menu_entry.class }}" data-selection-source="search-result">
|
||||
<img src="{{ menu_entry.icon }}" class="btn-image"/>
|
||||
{{ menu_entry.label }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block toolbarJS %}
|
||||
{% if plugins.actionbar is not empty %}
|
||||
{% for plugin in plugins.actionbar %}
|
||||
{{ (plugin.JS|default(''))|raw }}
|
||||
{% for pluginId, plugin in plugins.actionbar %}
|
||||
{% if plugin.getActionBarTemplate is defined %}
|
||||
{% set template = plugin.getActionBarTemplate() %}
|
||||
{% if template %}
|
||||
{% include template with {'app': app, 'plugin_id': pluginId, 'plugin': plugin} only %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
78
yarn.lock
78
yarn.lock
@@ -3815,9 +3815,9 @@ fsevents@^1.0.0, fsevents@^1.1.2, fsevents@^1.2.7:
|
||||
node-pre-gyp "^0.12.0"
|
||||
|
||||
fstream@^1.0.0, fstream@^1.0.2:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
|
||||
integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
|
||||
version "1.0.12"
|
||||
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045"
|
||||
integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
inherits "~2.0.0"
|
||||
@@ -4049,7 +4049,7 @@ glob@^5.0.15:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
|
||||
version "7.1.4"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
|
||||
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
|
||||
@@ -4061,6 +4061,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.1.3:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@~3.1.21:
|
||||
version "3.1.21"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
|
||||
@@ -4166,10 +4178,10 @@ graceful-fs@^3.0.0:
|
||||
dependencies:
|
||||
natives "^1.1.0"
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@~4.1.4:
|
||||
version "4.1.15"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
||||
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
||||
|
||||
graceful-fs@~1.2.0:
|
||||
version "1.2.3"
|
||||
@@ -4181,6 +4193,11 @@ graceful-fs@~2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-2.0.3.tgz#7cd2cdb228a4a3f36e95efa6cc142de7d1a136d0"
|
||||
integrity sha1-fNLNsiiko/Nule+mzBQt59GhNtA=
|
||||
|
||||
graceful-fs@~4.1.4:
|
||||
version "4.1.15"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||
|
||||
"graceful-readlink@>= 1.0.0":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
@@ -4757,7 +4774,12 @@ inherits@1:
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
|
||||
integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=
|
||||
|
||||
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
inherits@2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||
@@ -5283,14 +5305,10 @@ jquery-simplecolorpicker@^0.3.1:
|
||||
resolved "https://registry.yarnpkg.com/jquery-simplecolorpicker/-/jquery-simplecolorpicker-0.3.1.tgz#4f6befd380ab05470f585d5482e5180556e460eb"
|
||||
integrity sha1-T2vv04CrBUcPWF1UguUYBVbkYOs=
|
||||
|
||||
"jquery-treeview@git+https://github.com/alchemy-fr/jquery-treeview.git#1e9e5a49d2875b878801e904cd08c2d25e85af1e":
|
||||
version "1.4.2"
|
||||
resolved "git+https://github.com/alchemy-fr/jquery-treeview.git#1e9e5a49d2875b878801e904cd08c2d25e85af1e"
|
||||
|
||||
"jquery-treeview@https://github.com/alchemy-fr/jquery-treeview.git":
|
||||
"jquery-treeview@git+https://github.com/alchemy-fr/jquery-treeview.git", "jquery-treeview@git+https://github.com/alchemy-fr/jquery-treeview.git#1e9e5a49d2875b878801e904cd08c2d25e85af1e":
|
||||
version "1.4.2"
|
||||
uid "1e9e5a49d2875b878801e904cd08c2d25e85af1e"
|
||||
resolved "https://github.com/alchemy-fr/jquery-treeview.git#1e9e5a49d2875b878801e904cd08c2d25e85af1e"
|
||||
resolved "git+https://github.com/alchemy-fr/jquery-treeview.git#1e9e5a49d2875b878801e904cd08c2d25e85af1e"
|
||||
|
||||
jquery-ui-datepicker-with-i18n@^1.10.4:
|
||||
version "1.10.4"
|
||||
@@ -6487,9 +6505,9 @@ mitt@^1.1.3:
|
||||
integrity sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==
|
||||
|
||||
mixin-deep@^1.2.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
|
||||
integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
|
||||
integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==
|
||||
dependencies:
|
||||
for-in "^1.0.2"
|
||||
is-extendable "^1.0.1"
|
||||
@@ -7547,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"
|
||||
@@ -7559,10 +7577,10 @@ phraseanet-common@^0.4.1:
|
||||
js-cookie "^2.1.0"
|
||||
pym.js "^1.3.1"
|
||||
|
||||
phraseanet-production-client@0.34.76-d:
|
||||
version "0.34.76-d"
|
||||
resolved "https://registry.yarnpkg.com/phraseanet-production-client/-/phraseanet-production-client-0.34.76-d.tgz#641e9bc4379725ee06669c7cefe0bc78996342e0"
|
||||
integrity sha512-/SYoQrhVHfvtchjwmVm0/QkuWBTcmbPpNlepCKvjTMZBBPLepe+eUNHJh/vcnd+tCZkeYWu16kQvvdjs92dn5Q==
|
||||
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"
|
||||
@@ -7593,7 +7611,7 @@ phraseanet-production-client@0.34.76-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"
|
||||
@@ -8300,9 +8318,9 @@ right-align@^0.1.1:
|
||||
align-text "^0.1.1"
|
||||
|
||||
rimraf@2, rimraf@^2.2.8, rimraf@^2.5.0, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
|
||||
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
|
||||
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user