Merge branch 'master' of https://github.com/alchemy-fr/Phraseanet into PHRAS-2419_refacto_Icons_actions_under_Thumbnail

This commit is contained in:
Harrys Ravalomanana
2019-05-24 15:21:32 +04:00
37 changed files with 3286 additions and 4034 deletions

View File

@@ -1,6 +1,10 @@
version: 2.1
orbs:
aws-ecr: circleci/aws-ecr@4.0.1
executors:
docker_build:
machine:
docker_layer_caching: true
jobs:
build:
working_directory: ~/alchemy-fr/Phraseanet
@@ -56,7 +60,10 @@ jobs:
# This is based on your 1.0 configuration file or project settings
- run: node -v
- run: npm -v
- run: npm install
- run: npm install -g yarn
- run: rm ~/.yarn/bin/yarn
- run: ln -s /opt/circleci/nodejs/v10.12.0/bin/yarn ~/.yarn/bin/yarn
- run: yarn install
- run: if [[ ! -e elasticsearch-2.3.3 ]]; then wget --no-check-certificate https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-2.3.3.tar.gz && tar -xvf elasticsearch-2.3.3.tar.gz && elasticsearch-2.3.3/bin/plugin install analysis-icu; fi
- run:
command: elasticsearch-2.3.3/bin/elasticsearch
@@ -108,8 +115,6 @@ workflows:
oldfashion:
jobs:
- build
newfashion:
jobs:
- aws-ecr/build_and_push_image:
@@ -119,7 +124,18 @@ workflows:
context: "AWS London"
create-repo: true
dockerfile: Dockerfile
#profile-name: myProfileName
extra-build-args: "--target phraseanet"
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
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"

View File

@@ -1,4 +1,4 @@
FROM php:7.1-fpm-stretch as phraseanet_prod
FROM php:7.1-fpm-stretch as builder
RUN apt-get update \
&& apt-get install -y \
@@ -64,34 +64,100 @@ RUN mkdir /entrypoint /var/alchemy \
&& mkdir -p /home/app/.composer \
&& chown -R app: /home/app /var/alchemy
ADD ./docker/phraseanet/ /
WORKDIR /var/alchemy/
COPY config /var/alchemy/config
COPY grammar /var/alchemy/grammar
COPY lib /var/alchemy/lib
COPY resources /var/alchemy/resources
RUN ls -la
COPY templates-profiler /var/alchemy/templates-profiler
COPY templates /var/alchemy/templates
COPY tests /var/alchemy/tests
COPY tmp /var/alchemy/tmp
COPY www /var/alchemy/www
COPY composer.json /var/alchemy/
COPY composer.lock /var/alchemy/
COPY gulpfile.js /var/alchemy/
COPY Makefile /var/alchemy/
COPY package-lock.json /var/alchemy/
COPY package.json /var/alchemy/
COPY phpunit.xml.dist /var/alchemy/
COPY yarn.lock /var/alchemy/
RUN ls -la
COPY bin /var/alchemy/bin
COPY composer.json /var/alchemy/
COPY composer.lock /var/alchemy/
RUN make install_composer
COPY resources /var/alchemy/resources
COPY www /var/alchemy/www
RUN make clean_assets
RUN make install_asset_dependencies
RUN make install_assets
CMD ["php-fpm"]
COPY lib /var/alchemy/lib
COPY tmp /var/alchemy/tmp
COPY config /var/alchemy/config
COPY grammar /var/alchemy/grammar
COPY templates-profiler /var/alchemy/templates-profiler
COPY templates /var/alchemy/templates
COPY tests /var/alchemy/tests
# Phraseanet
FROM php:7.1-fpm-stretch as phraseanet
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 \
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 \
supervisor \
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/* \
&& mkdir -p /var/log/supervisor
RUN mkdir /entrypoint /var/alchemy \
&& useradd -u 1000 app \
&& mkdir -p /home/app/.composer \
&& chown -R app: /home/app /var/alchemy
COPY --from=builder --chown=app /var/alchemy /var/alchemy/Phraseanet
ADD ./docker/phraseanet/ /
RUN mkdir -p /var/alchemy/Phraseanet/logs \
&& chmod -R 777 /var/alchemy/Phraseanet/logs \
&& mkdir -p /var/alchemy/Phraseanet/cache \
&& chmod -R 777 /var/alchemy/Phraseanet/cache \
&& mkdir -p /var/alchemy/Phraseanet/datas \
&& chmod -R 777 /var/alchemy/Phraseanet/datas \
&& mkdir -p /var/alchemy/Phraseanet/tmp \
&& chmod -R 777 /var/alchemy/Phraseanet/tmp \
&& mkdir -p /var/alchemy/Phraseanet/www/custom \
&& chmod -R 777 /var/alchemy/Phraseanet/www/custom \
&& mkdir -p /var/alchemy/Phraseanet/config \
&& chmod -R 777 /var/alchemy/Phraseanet/config
WORKDIR /var/alchemy/Phraseanet
CMD ["/boot.sh"]
# phraseanet-nginx
FROM nginx:1.15 as phraseanet-nginx
RUN useradd -u 1000 app
ADD ./docker/nginx/ /
COPY --from=builder /var/alchemy/www /var/alchemy/Phraseanet/www

View File

@@ -1,7 +0,0 @@
FROM nginx:1.15
RUN useradd -u 1000 app
ADD ./docker/nginx/ /
COPY www /var/alchemy/Phraseanet/

View File

@@ -1,4 +1,4 @@
Phraseanet 4.0 - Digital Asset Management application
Phraseanet 4.1 - Digital Asset Management application
=====================================================
[![CircleCI](https://circleci.com/gh/alchemy-fr/Phraseanet/tree/master.svg?style=shield)](https://circleci.com/gh/alchemy-fr/Phraseanet/tree/master)
@@ -9,7 +9,7 @@ Phraseanet 4.0 - Digital Asset Management application
- RestFull APIS
- Elasticsearch search engine
- Multiple resolution assets generation
# Documentation :
https://docs.phraseanet.com/
@@ -32,8 +32,9 @@ https://www.phraseanet.com/download/
For development purpose Phraseanet is shipped with ready to use development environments using vagrant.
- git clone
- vagrant up
- git clone
- vagrant up
For development with Phraseanet API see https://docs.phraseanet.com/4.0/en/Devel/index.html
@@ -42,4 +43,22 @@ For development with Phraseanet API see https://docs.phraseanet.com/4.0/en/Devel
Phraseanet is licensed under GPL-v3 license.
# Docker build
WARNING : still in a work-in-progress status and can be used only for test purposes.
The docker distribution come with 2 differents containers :
* an nginx that act as the front http server.
* the php-fpm who serves the php files through nginx.
## How to build
The two images can be built respectively with these two commands :
# nginx server
docker build --target phraseanet-nginx -t phraseanet-nginx .
# php-fpm application
docker build --target phraseanet -t phraseanet .

5
Vagrantfile vendored
View File

@@ -123,6 +123,11 @@ Vagrant.configure("2") do |config|
config.vm.box = "alchemy/Phraseanet-vagrant-dev"
#config.vm.box = "ubuntu/trusty64"
# In case, Phraseanet box, choose the php version
# For php 7.0 use box 0.0.1
# For php 7.1 use box 0.0.2
config.vm.box_version = "0.0.1"
config.ssh.forward_agent = true
config_net(config)

View File

@@ -47,7 +47,7 @@
"php": ">=5.5.9",
"ext-intl": "*",
"alchemy-fr/tcpdf-clone": "~6.0",
"alchemy/embed-bundle": "^0.3.4",
"alchemy/embed-bundle": "^2.0.3",
"alchemy/geonames-api-consumer": "~0.1.0",
"alchemy/mediavorus": "^0.4.4",
"alchemy/oauth2php": "1.1.0",
@@ -123,7 +123,7 @@
"paragonie/random-lib": "^2.0"
},
"require-dev": {
"mikey179/vfsStream": "~1.5",
"mikey179/vfsstream": "~1.5",
"phpunit/phpunit": "^4.8|^5.0"
},
"autoload": {

18
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "7dd755dbcbdcf15e87b4e2e8967c1314",
"content-hash": "de1d9335418b121d0ede26765b0a9e7d",
"packages": [
{
"name": "alchemy-fr/tcpdf-clone",
@@ -131,16 +131,16 @@
},
{
"name": "alchemy/embed-bundle",
"version": "0.3.8",
"version": "2.0.3",
"source": {
"type": "git",
"url": "https://github.com/alchemy-fr/embed-bundle.git",
"reference": "8a9699bc51e2b2997ccfd357bb2892f3702c33ef"
"reference": "e02e25a04911210eaedff0adb9cf7589010c473b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/8a9699bc51e2b2997ccfd357bb2892f3702c33ef",
"reference": "8a9699bc51e2b2997ccfd357bb2892f3702c33ef",
"url": "https://api.github.com/repos/alchemy-fr/embed-bundle/zipball/e02e25a04911210eaedff0adb9cf7589010c473b",
"reference": "e02e25a04911210eaedff0adb9cf7589010c473b",
"shasum": ""
},
"require-dev": {
@@ -178,10 +178,10 @@
],
"description": "Embed resources bundle",
"support": {
"source": "https://github.com/alchemy-fr/embed-bundle/tree/0.3.8",
"source": "https://github.com/alchemy-fr/embed-bundle/tree/2.0.3",
"issues": "https://github.com/alchemy-fr/embed-bundle/issues"
},
"time": "2019-01-11T10:35:41+00:00"
"time": "2019-05-23T15:23:14+00:00"
},
{
"name": "alchemy/geonames-api-consumer",
@@ -7747,12 +7747,12 @@
"version": "v1.6.4",
"source": {
"type": "git",
"url": "https://github.com/mikey179/vfsStream.git",
"url": "https://github.com/bovigo/vfsStream.git",
"reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/mikey179/vfsStream/zipball/0247f57b2245e8ad2e689d7cee754b45fbabd592",
"url": "https://api.github.com/repos/bovigo/vfsStream/zipball/0247f57b2245e8ad2e689d7cee754b45fbabd592",
"reference": "0247f57b2245e8ad2e689d7cee754b45fbabd592",
"shasum": ""
},

3
docker/phraseanet/boot.sh Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
php-fpm

View File

@@ -92,9 +92,12 @@ use Alchemy\WorkerProvider\WorkerServiceProvider;
use Doctrine\DBAL\Event\ConnectionEventArgs;
use MediaVorus\Media\MediaInterface;
use MediaVorus\MediaVorus;
use Monolog\Handler\ErrorLogHandler;
use Monolog\Handler\RotatingFileHandler;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
use Neutron\ReCaptcha\ReCaptchaServiceProvider;
use Psr\Log\LoggerInterface;
use Silex\Application as SilexApplication;
use Silex\Application\TranslationTrait;
use Silex\Application\UrlGeneratorTrait;
@@ -253,6 +256,23 @@ class Application extends SilexApplication
$this->register(new OrderServiceProvider());
$this->register(new WebhookServiceProvider());
$this['monolog'] = $this->share(
$this->extend('monolog', function (LoggerInterface $logger, Application $app) {
$logger->pushHandler(new ErrorLogHandler(
ErrorLogHandler::SAPI,
Logger::ERROR
));
$logger->pushHandler(new StreamHandler(
fopen('php://stderr', 'w'),
Logger::ERROR
));
return $logger;
})
);
$this['phraseanet.exception_handler'] = $this->share(function ($app) {
/** @var PhraseaExceptionHandler $handler */
$handler = PhraseaExceptionHandler::register($app['debug']);

View File

@@ -73,9 +73,26 @@ class CLI extends Application
$this->bindRoutes();
$this['logger'] = $this->extend('logger', function () {
return new Console\Logger\ConsoleLogger(new Console\Output\ConsoleOutput(Console\Output\ConsoleOutput::VERBOSITY_DEBUG));
});
$logger = false;
if ($this['configuration.store']->isSetup()){
$config = $this['configuration.store']->getConfig();
if ((isset($config['console_logger_enabled_environments']) && in_array($environment, $config['console_logger_enabled_environments']))){
$logger = true;
}
}
if ($environment == self::ENV_DEV){
$logger = true;
}
if ($logger){
$this['logger'] = $this->extend('logger', function () {
return new Console\Logger\ConsoleLogger(new Console\Output\ConsoleOutput(Console\Output\ConsoleOutput::VERBOSITY_DEBUG));
});
}
error_reporting(-1);
ErrorHandler::register();

View File

@@ -74,10 +74,10 @@ class PermalinkController extends AbstractDelivery
public function deliverPermaview(Request $request, $sbas_id, $record_id, $subdef)
{
return $this->doDeliverPermaview($sbas_id, $record_id, $request->query->get('token'), $subdef);
return $this->doDeliverPermaview($sbas_id, $record_id, $request->query->get('token'), $subdef, $request->query->get('t'));
}
private function doDeliverPermaview($sbas_id, $record_id, $token, $subdefName)
private function doDeliverPermaview($sbas_id, $record_id, $token, $subdefName, $currentTime = null)
{
$databox = $this->findDataboxById($sbas_id);
$record = $this->retrieveRecord($databox, $token, $record_id, $subdefName);
@@ -105,6 +105,7 @@ class PermalinkController extends AbstractDelivery
'token' => $token,
'record' => $record,
'recordUrl' => $information->getUrl(),
'currentTime' => $currentTime
]);
}

View File

@@ -43,7 +43,7 @@ class SubdefsEditor extends AbstractEditor
<?xml version="1.0" encoding="UTF-8"?>
<tasksettings>
<embedded>1</embedded>
<sbas/>
<sbas>0</sbas>
<type_image>1</type_image>
<type_video>1</type_video>
<type_audio>1</type_audio>

View File

@@ -26,6 +26,7 @@ use PHPExiftool\Driver\Metadata\Metadata;
use PHPExiftool\Driver\Value\Mono as MonoValue;
use Symfony\Component\Filesystem\Exception\IOException;
class ArchiveJob extends AbstractJob
{
const MINCOLD = 5;
@@ -69,6 +70,10 @@ class ArchiveJob extends AbstractJob
protected function doJob(JobData $data)
{
$app = $data->getApplication();
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$task = $data->getTask();
$settings = simplexml_load_string($task->getSettings());
@@ -82,6 +87,9 @@ class ArchiveJob extends AbstractJob
$databox = $app->findDataboxById($sbasId);
// quick fix to reconnect if mysql is lost
$databox->get_connection();
$TColls = [];
$collection = null;
foreach ($databox->get_collections() as $coll) {
@@ -561,6 +569,10 @@ class ArchiveJob extends AbstractJob
private function archive(Application $app, \databox $databox, \DOMDOcument $dom, \DOMElement $node, $path, $path_archived, $path_error, $depth, $moveError, $moveArchived, $stat0, $stat1)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
if ($node->getAttribute('temperature') == 'hot') {
return;
}
@@ -819,6 +831,10 @@ class ArchiveJob extends AbstractJob
private function archiveGrp(Application $app, \databox $databox, \DOMDocument $dom, \DOMElement $node, $path, $path_archived, $path_error, array &$nodesToDel, $moveError, $moveArchived, $stat0, $stat1)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
$xpath = new \DOMXPath($dom);
// grp folders stay in place
@@ -983,6 +999,10 @@ class ArchiveJob extends AbstractJob
public function createStory(Application $app, \collection $collection, $pathfile, $captionFile, $stat0, $stat1)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
$status = \databox_status::operation_or($stat0, $stat1);
$media = $app->getMediaFromUri($pathfile);
@@ -1031,6 +1051,10 @@ class ArchiveJob extends AbstractJob
*/
public function createRecord(Application $app, \collection $collection, $pathfile, $captionFile, $grp_rid, $force, $stat0, $stat1)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$collection->get_connection();
$status = \databox_status::operation_or($stat0, $stat1);
$media = $app->getMediaFromUri($pathfile);
@@ -1096,6 +1120,10 @@ class ArchiveJob extends AbstractJob
*/
private function archiveFilesToGrp(Application $app, \databox $databox, \DOMDocument $dom, \DOMElement $node, $path, $path_archived, $path_error, $grp_rid, $stat0, $stat1, $moveError, $moveArchived)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
$nodesToDel = [];
for ($n = $node->firstChild; $n; $n = $n->nextSibling) {
if (!$this->isStarted()) {
@@ -1133,6 +1161,10 @@ class ArchiveJob extends AbstractJob
*/
private function archiveFile(Application $app, \databox $databox, \DOMDocument $dom, \DOMElement $node, $path, $path_archived, $path_error, array &$nodesToDel, $grp_rid, $stat0, $stat1, $moveError, $moveArchived)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
$match = $node->getAttribute('match');
if ($match == '*') {
@@ -1187,6 +1219,10 @@ class ArchiveJob extends AbstractJob
*/
private function archiveFileAndCaption(Application $app, \databox $databox, \DOMDocument $dom, \DOMElement $node, \DOMElement $captionFileNode = null, $path, $path_archived, $path_error, $grp_rid, array &$nodesToDel, $stat0, $stat1, $moveError, $moveArchived)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$databox->get_connection();
$file = $node->getAttribute('name');
$cid = $node->getAttribute('cid');
$captionFileName = $captionFileNode ? $captionFileNode->getAttribute('name') : null;
@@ -1360,6 +1396,9 @@ class ArchiveJob extends AbstractJob
*/
protected function getLazaretSession(Application $app)
{
// quick fix to reconnect if mysql is lost
$app->getApplicationBox()->get_connection();
$lazaretSession = new LazaretSession();
$app['orm.em']->persist($lazaretSession);

View File

@@ -70,12 +70,13 @@ class SubdefsJob extends AbstractJob
$app->getApplicationBox()->get_connection();
$allDb = count($settings->xpath('sbas[text()="0"]')) > 0;
foreach ($app->getDataboxes() as $databox) {
if (!$this->isStarted()) {
break;
}
if(count($settings->xpath("sbas[text()=".$databox->get_sbas_id() ."]")) == 0) {
if(!$allDb && count($settings->xpath("sbas[text()=".$databox->get_sbas_id() ."]")) == 0) {
continue;
}

View File

@@ -25,7 +25,7 @@ class Notifier implements NotifierInterface
private $logger;
/** @var integer */
private $timeout = 10;
private $timeout = 1;
public function __construct(\ZMQSocket $socket, LoggerInterface $logger)
{

View File

@@ -182,26 +182,26 @@
</subdefs>
<description>
<Title src="XMP-dc:Title" thumbtitle="1" report="1" />
<Creator src="XMP-dc:Creator" report="1" />
<Subject src="XMP-dc:Subject" multi="1"/>
<Description src="XMP-dc:Description" report="0" />
<Title src="XMP-dc:Title" type="string" thumbtitle="1" report="1" />
<Creator src="XMP-dc:Creator" type="string" report="1" />
<Subject src="XMP-dc:Subject" type="string" multi="1"/>
<Description src="XMP-dc:Description" type="string" report="0" />
<Publisher src="XMP-dc:Publisher" type="date" report="0" />
<Contributor src="XMP-dc:Contributor" report="0"/>
<Contributor src="XMP-dc:Contributor" type="string" report="0"/>
<Date src="XMP-dc:Date" type="date" report="0" />
<Type src="XMP-dc:Type" report="1" />
<Format src="XMP-dc:Format" report="0" />
<Identifier src="XMP-dc:Identifier" report="1" />
<Source src="XMP-dc:Source" report="0" />
<Language src="XMP-dc:Language" report="0" />
<Relation src="XMP-dc:Relation" report="0" />
<Coverage src="XMP-dc:Coverage" report="1" />
<Rights src="XMP-dc:Rights" report="0" />
<Comments src="" business="1" report="0" />
<Type src="XMP-dc:Type" type="string" report="1" />
<Format src="XMP-dc:Format" type="string" report="0" />
<Identifier src="XMP-dc:Identifier" type="string" report="1" />
<Source src="XMP-dc:Source" type="string" report="0" />
<Language src="XMP-dc:Language" type="string" report="0" />
<Relation src="XMP-dc:Relation" type="string" report="0" />
<Coverage src="XMP-dc:Coverage" type="string" report="1" />
<Rights src="XMP-dc:Rights" type="string" report="0" />
<Comments src="" business="1" type="string" report="0" />
<Filename src="Phraseanet:tf-basename" readonly="1" type="string" report="1"/>
<CameraDevice src="IFD0:Model" readonly="1" report="0" />
<Latitude src="GPS:GPSLatitude" readonly="1" report="0" />
<Longitude src="GPS:GPSLongitude" readonly="1" report="0"/>
<CameraDevice src="IFD0:Model" type="string" readonly="1" report="0" />
<Latitude src="GPS:GPSLatitude" type="number" readonly="1" report="0" />
<Longitude src="GPS:GPSLongitude" type="number" readonly="1" report="0"/>
<ArchiveDate src="Phraseanet:tf-archivedate" readonly="1" type="date" report="0" />
<LastEditDate src="Phraseanet:tf-editdate" readonly="1" type="date" report="0" />
</description>

View File

@@ -182,27 +182,27 @@
</subdefs>
<description>
<Object src="IPTC:ObjectName" />
<Category src="IPTC:Category"/>
<SupplCategory src="IPTC:SupplementalCategories" multi="1"/>
<Keywords src="IPTC:Keywords" multi="1"/>
<SpecialInstruct src="IPTC:SpecialInstructions"/>
<Object src="IPTC:ObjectName" type="string"/>
<Category src="IPTC:Category" type="string"/>
<SupplCategory src="IPTC:SupplementalCategories" type="string" multi="1"/>
<Keywords src="IPTC:Keywords" type="string" multi="1"/>
<SpecialInstruct src="IPTC:SpecialInstructions" type="string"/>
<Date src="IPTC:DateCreated" type="date" />
<Byline src="IPTC:By-line"/>
<BylineTitle src="IPTC:By-lineTitle"/>
<City src="IPTC:City" />
<Province src="IPTC:Province-State" />
<Country src="IPTC:Country-PrimaryLocationName" />
<OriginalRef src="IPTC:OriginalTransmissionReference" />
<Headline src="IPTC:Headline" report="1" thumbtitle="1" />
<Credit src="IPTC:Credit" report="1" />
<Source src="IPTC:Source" />
<Caption src="IPTC:Caption-Abstract" />
<CaptionWriter src="IPTC:Writer-Editor" />
<Longitude src="GPS:GPSLongitude" readonly="1"/>
<Latitude src="GPS:GPSLatitude" readonly="1"/>
<CameraModel src="IFD0:Model" readonly="1"/>
<FileName src="Phraseanet:tf-basename" readonly="1" type="string" />
<Byline src="IPTC:By-line" type="string"/>
<BylineTitle src="IPTC:By-lineTitle" type="string"/>
<City src="IPTC:City" type="string"/>
<Province src="IPTC:Province-State" type="string"/>
<Country src="IPTC:Country-PrimaryLocationName" type="string"/>
<OriginalRef src="IPTC:OriginalTransmissionReference" type="string"/>
<Headline src="IPTC:Headline" type="string" report="1" thumbtitle="1"/>
<Credit src="IPTC:Credit" type="string" report="1"/>
<Source src="IPTC:Source" type="string"/>
<Caption src="IPTC:Caption-Abstract" type="string"/>
<CaptionWriter src="IPTC:Writer-Editor" type="string"/>
<Longitude src="GPS:GPSLongitude" type="number" readonly="1"/>
<Latitude src="GPS:GPSLatitude" type="number" readonly="1"/>
<CameraModel src="IFD0:Model" type="string" readonly="1"/>
<FileName src="Phraseanet:tf-basename" type="string" readonly="1"/>
</description>
<statbits>

View File

@@ -182,27 +182,27 @@
</subdefs>
<description>
<Objet src="IPTC:ObjectName" />
<Categorie src="IPTC:Category"/>
<AutresCategories src="IPTC:SupplementalCategories" multi="1"/>
<MotsCles src="IPTC:Keywords" multi="1"/>
<Observations src="IPTC:SpecialInstructions"/>
<Date src="IPTC:DateCreated" type="date" />
<Signature src="IPTC:By-line"/>
<TitreCredits src="IPTC:By-lineTitle"/>
<Ville src="IPTC:City" />
<Province src="IPTC:Province-State" />
<Pays src="IPTC:Country-PrimaryLocationName" />
<ReferencesOriginales src="IPTC:OriginalTransmissionReference" />
<Titre src="IPTC:Headline" report="1" thumbtitle="1" />
<Credit src="IPTC:Credit" report="1" />
<Source src="IPTC:Source" />
<Legende src="IPTC:Caption-Abstract" />
<Redacteur src="IPTC:Writer-Editor" />
<Longitude src="GPS:GPSLongitude" readonly="1"/>
<Latitude src="GPS:GPSLatitude" readonly="1"/>
<AppareilPhoto src="IFD0:Model" readonly="1"/>
<NomDeFichier src="Phraseanet:tf-basename" readonly="1" type="string" />
<Objet src="IPTC:ObjectName" type="string"/>
<Categorie src="IPTC:Category" type="string"/>
<AutresCategories src="IPTC:SupplementalCategories" type="string" multi="1"/>
<MotsCles src="IPTC:Keywords" type="string" multi="1"/>
<Observations src="IPTC:SpecialInstructions" type="string"/>
<Date src="IPTC:DateCreated" type="date"/>
<Signature src="IPTC:By-line" type="string"/>
<TitreCredits src="IPTC:By-lineTitle" type="string"/>
<Ville src="IPTC:City" type="string" />
<Province src="IPTC:Province-State" type="string"/>
<Pays src="IPTC:Country-PrimaryLocationName" type="string"/>
<ReferencesOriginales src="IPTC:OriginalTransmissionReference" type="string"/>
<Titre src="IPTC:Headline" type="string" report="1" thumbtitle="1" />
<Credit src="IPTC:Credit" type="string" report="1" />
<Source src="IPTC:Source" type="string"/>
<Legende src="IPTC:Caption-Abstract" type="string"/>
<Redacteur src="IPTC:Writer-Editor" type="string"/>
<Longitude src="GPS:GPSLongitude" type="number" readonly="1"/>
<Latitude src="GPS:GPSLatitude" type="number" readonly="1"/>
<AppareilPhoto src="IFD0:Model" type="string" readonly="1"/>
<NomDeFichier src="Phraseanet:tf-basename" type="string" readonly="1"/>
</description>
<statbits>

View File

@@ -42,7 +42,6 @@
},
"dependencies": {
"JSON2": "^0.1.0",
"alchemy-embed-medias": "^0.5.1",
"backbone": "^1.3.3",
"blueimp-file-upload": "^8.3.0",
"blueimp-load-image": "^2.17.1",

View File

@@ -7,12 +7,12 @@
# - server
# - repositories
# - vagrant_local
# - nginx
- nginx
# - mariadb
# - elasticsearch
# - rabbitmq
# - php
# - xdebug
- xdebug
# - composer
# - mailcatcher
# - node

View File

@@ -11,12 +11,16 @@ gulp.task('copy-alchemy-embed-debug', function(){
gulp.task('copy-alchemy-embed', function(){
// copy all dist folder:
if( debugMode === true) {
return gulp.src('vendor/alchemy/embed-bundle/dist/**/*')
return gulp.src('vendor/alchemy/embed-bundle/dist/**/*')
.pipe(gulp.dest( config.paths.build + 'vendors/alchemy-embed-medias'));
/* if( debugMode === true) {
return gulp.src('vendor/alchemy/embed-bundle/dist/!**!/!*')
.pipe(gulp.dest( config.paths.build + 'vendors/alchemy-embed-medias'));
}
return gulp.src(config.paths.nodes + 'alchemy-embed-medias/dist/**/*')
.pipe(gulp.dest( config.paths.build + 'vendors/alchemy-embed-medias'));
return gulp.src(config.paths.nodes + 'alchemy-embed-medias/dist/!**!/!*')
.pipe(gulp.dest( config.paths.build + 'vendors/alchemy-embed-medias'));*/
});
gulp.task('watch-alchemy-embed-js', function() {
debugMode = true;

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

View File

@@ -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-04-05T07:11:41Z" source-language="en" target-language="de" datatype="plaintext" original="not.available">
<file date="2019-05-21T05:53:02Z" 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>
@@ -9,8 +9,8 @@
<trans-unit id="96f0767cb7ea65a7f86c8c9432e80d16cf9d8680" resname="Please provide the same passwords." approved="yes">
<source>Please provide the same passwords.</source>
<target state="translated">Bitte geben Sie diesselbe Passwörter ein.</target>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="36">Form/Login/PhraseaRenewPasswordForm.php</jms:reference-file>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="49">Form/Login/PhraseaRegisterForm.php</jms:reference-file>
</trans-unit>
<trans-unit id="90b8c9717bb7ed061dbf20fe1986c8b8593d43d4" resname="The token provided is not valid anymore" approved="yes">

View File

@@ -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-04-05T07:13:14Z" source-language="en" target-language="en" datatype="plaintext" original="not.available">
<file date="2019-05-21T05:54:16Z" 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>
@@ -9,8 +9,8 @@
<trans-unit id="96f0767cb7ea65a7f86c8c9432e80d16cf9d8680" resname="Please provide the same passwords." approved="yes">
<source>Please provide the same passwords.</source>
<target state="translated">Please provide the same passwords.</target>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="36">Form/Login/PhraseaRenewPasswordForm.php</jms:reference-file>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="49">Form/Login/PhraseaRegisterForm.php</jms:reference-file>
</trans-unit>
<trans-unit id="90b8c9717bb7ed061dbf20fe1986c8b8593d43d4" resname="The token provided is not valid anymore" approved="yes">

View File

@@ -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-04-05T07:14:53Z" source-language="en" target-language="fr" datatype="plaintext" original="not.available">
<file date="2019-05-21T05:55:28Z" 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>
@@ -9,8 +9,8 @@
<trans-unit id="96f0767cb7ea65a7f86c8c9432e80d16cf9d8680" resname="Please provide the same passwords." approved="yes">
<source>Please provide the same passwords.</source>
<target state="translated">Veuillez indiquer des mots de passe identiques.</target>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="36">Form/Login/PhraseaRenewPasswordForm.php</jms:reference-file>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="49">Form/Login/PhraseaRegisterForm.php</jms:reference-file>
</trans-unit>
<trans-unit id="90b8c9717bb7ed061dbf20fe1986c8b8593d43d4" resname="The token provided is not valid anymore" approved="yes">

View File

@@ -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-04-05T07:16:35Z" source-language="en" target-language="nl" datatype="plaintext" original="not.available">
<file date="2019-05-21T05:56:47Z" 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>
@@ -9,8 +9,8 @@
<trans-unit id="96f0767cb7ea65a7f86c8c9432e80d16cf9d8680" resname="Please provide the same passwords.">
<source>Please provide the same passwords.</source>
<target state="new">Please provide the same passwords.</target>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="36">Form/Login/PhraseaRenewPasswordForm.php</jms:reference-file>
<jms:reference-file line="44">Form/Login/PhraseaRecoverPasswordForm.php</jms:reference-file>
<jms:reference-file line="49">Form/Login/PhraseaRegisterForm.php</jms:reference-file>
</trans-unit>
<trans-unit id="90b8c9717bb7ed061dbf20fe1986c8b8593d43d4" resname="The token provided is not valid anymore">

View File

@@ -62,6 +62,7 @@ $mainMenuBottomBorder: none !default;
}
#mainLogo {
margin:0 5px;
vertical-align: middle;
}
li {
display: inline-block;

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

View File

@@ -5,16 +5,18 @@
{{ form_label(form.logoChoice[0]) }}
<div class="image-container">
<img id="original-image-placeholder" alt="gabari"
src="data:image/png;base64,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"/>
src="/assets/common/images/logo.png"/>
</div>
<a id="download-image-template" href="#">{{ 'prod::setup: download gabari' | trans }}</a>
</td>
<td>
{{ form_widget(form.logoChoice[1]) }}
{{ form_label(form.logoChoice[1]) }}
<br>
<span id="help-text">{{ 'prod::setup: help text' | trans }}</span>
<span id="error-text"></span>
<span id="help-text">{{ 'admin::setup:personalisation_logo: help text' | trans }}</span>
<br>
<a id="download-image-template" href="#">{{ 'admin::setup:personalisation_logo: download gabari' | trans }}</a>
<br>
<div class="image-container" id="personalize-image-container">
{% if app['conf'].get(['registry', 'general', 'personalize-logo-choice', 'personalizeFile']) == 'true' %}
{% set extension = app['conf'].get(['registry', 'general', 'personalize-logo-choice', 'fileType']) %}
@@ -26,8 +28,9 @@
<div>
{{ form_widget(form.personalizeLogoInput) }}
<label for="general_personalize-logo-choice_personalizeLogoInput"
id="select-logo-btn">{{ 'prod::setup: select file' | trans }}</label>
id="select-logo-btn">{{ 'admin::setup:personalisation_logo: select file' | trans }}</label>
</div>
<span id="error-text"></span>
</td>
{{ form_widget(form.personalizeFile) }}
{{ form_widget(form.fileType) }}
@@ -38,8 +41,8 @@
$(document).ready(function () {
var fileToUpload = null;
var errorDimension = '{{ 'prod::setup: error text dimension' | trans }}';
var errorFileType = '{{ 'prod::setup: error text file type' | trans }}';
var errorDimension = '{{ 'admin::setup:personalisation_logo: error text dimension' | trans }}';
var errorFileType = '{{ 'admin::setup:personalisation_logo: error text file type' | trans }}';
$('#help-text').show();
@@ -54,7 +57,7 @@
$("#download-image-template").on('click', function (event) {
event.preventDefault();
var imageInBase64 = $('#original-image-placeholder').attr('src');
var imageInBase64 = 'data:image/png;base64,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';
var mimeInfo = base64MimeType(imageInBase64);
var ext = mimeInfo.split('/').pop();
var filename = $('#original-image-placeholder').attr('alt') + "." + ext;
@@ -90,24 +93,26 @@
image.src = _file.target.result;
image.file = this.file;
image.data = this.data;
if (image.file.type != 'image/png' && image.file.type!= 'image/svg+xml') {
$('#general_personalize-logo-choice_personalizeLogoInput').val("");
$('#error-text').text(errorFileType);
$('#error-text').show();
/*$('#help-text').hide();*/
$('#personalize-image-container').hide();
return false;
}
image.onload = function () {
var w = this.width,
h = this.height;
var ext = this.file.type.split('/').pop().toLowerCase();
if (ext != 'png' && ext != 'svg+xml') {
$('#general_personalize-logo-choice_personalizeLogoInput').val("");
$('#error-text').text(errorFileType);
$('#error-text').show();
$('#help-text').hide();
$('#personalize-image-container').hide();
return false;
}
if (h > 41 || w > 120 ) {
$('#error-text').text(errorDimension);
$('#error-text').show();
$('#help-text').hide();
/*$('#help-text').hide();*/
$('#personalize-image-container').hide();
$('#general_personalize-logo-choice_personalizeLogoInput').val("");
return false;
@@ -119,7 +124,7 @@
loadImage(file, function (img) {
$('#personalize-image-container').show();
$('#error-text').hide();
$('#help-text').hide();
/*$('#help-text').hide();*/
$('#personalize-image-container').empty().append(img);
}, {
maxSize: 5242880, // 5MB
@@ -148,7 +153,7 @@
$('#general_personalize-logo-choice_personalizeFile').val(false);
}
console.log(data);
/* console.log(data);*/
}
});

View File

@@ -4,9 +4,12 @@
<div class="control-group">
<label class="control-label"> {{ 'Databox' | trans }}</label>
<div class="controls">
<label class="checkbox inline">
<input class="subdef_task_sbas" type="checkbox" name="sbas[]" value="0"> {{ 'All' | trans }}
</label>
{% for databox in app.getApplicationBox().get_databoxes() %}
<label class="checkbox inline">
<input type="checkbox" name="sbas[]" value="{{ databox.get_sbas_id() }}"> {{ databox.get_viewname() }}
<input class="subdef_task_sbas" type="checkbox" name="sbas[]" value="{{ databox.get_sbas_id() }}"> {{ databox.get_viewname() }}
({{ databox.get_sbas_id() }})
</label>
{% endfor %}
@@ -68,6 +71,10 @@
{% block javascript %}
<script type="text/javascript">
$(".subdef_task_sbas").change(function (e) {
checkSbas();
});
function minmax(v, _min, _max)
{
if(isNaN(v) || v < _min)
@@ -80,6 +87,16 @@
}
return v;
}
function checkSbas()
{
var alldb = $(".subdef_task_sbas[value=0]").prop('checked');
if(alldb) {
$(".subdef_task_sbas[value!=0]").prop('checked', true).attr('disabled', true);
}
else {
$(".subdef_task_sbas[value!=0]").attr('disabled', false);
}
}
function taskFillGraphic(xml)
{
if (xml) {
@@ -98,12 +115,14 @@
gform.flush.value = minmax(parseInt(xml.find("flush").text()), 1, 100);
gform.maxrecs.value = minmax(parseInt(xml.find("maxrecs").text()), 10, 100);
gform.maxmegs.value = minmax(parseInt(xml.find("maxmegs").text()), 64, 512);
var $databoxes = $(gform).find("input[name='sbas[]']");
for(i=0; i < $databoxes.length; i++) {
var sbid = $($databoxes[i]).attr('value');
$($databoxes[i]).prop('checked', (xml.find("sbas").filter(function(){return $(this).text()==sbid}).length > 0));
}
checkSbas();
}
}
</script>

View File

@@ -36,7 +36,7 @@
lang: "{{ app.locale }}",
baseUrl: '{{ app['request'].getUriForPath('/') }}',
basePath: '{{ app.request.basePath|e('js') }}',
recordUrl: '{{ url('alchemy_embed_view', {url: recordUrl|trim, autoplay: autoplay|default('false') }) }}',
recordUrl: '{{ url('alchemy_embed_view', {url: recordUrl|trim, autoplay: autoplay|default('false'), t: currentTime|trim }) | e('js')}}',
debug: {% if app.debug == true %}true{% else %}false{% endif %}
});
</script>

View File

@@ -33,6 +33,12 @@
</a>
</p>
<p>
<a id="linkedin-link" href="https://www.linkedin.com/shareArticle?url={{ subdefList[defKey].permaviewUrl | url_encode }}" target="_blank" title="{% trans %}Send to Linkedin{% endtrans %}" >
<img src="/assets/common/images/icons/linkedin.png" title="{% trans %}Send to Linkedin{% endtrans %}" style="width:25px;vertical-align:middle;padding:0 5px;"/>
{% trans %}Send to Linkedin{% endtrans %}</a>
</p>
<form action="#">
<div class="form-group clearfix">
<label style="display:inline-block;">{% trans %}Resource URL{% endtrans %}</label>

View File

@@ -86,7 +86,7 @@
{% endif %}
{% endif %}
{% if settings.rollover_thumbnail == 'preview' %}
<span class="fa-stack fa-lg captionRolloverTips"
<span class="fa-stack fa-lg captionRolloverTips" title="{{ macro.caption(record, can_see_business, false) | e }}"
tooltipsrc="{{ path('prod_tooltip_caption', { 'sbas_id' : record.databoxId, 'record_id' : record.recordId, 'context' : 'answer', 'number' : record.position|default(0) }) }}">
<i class="fa fa-circle fa-stack-2x" aria-hidden="true"></i>
<i class="fa fa-list fa-stack-1x fa-inverse" aria-hidden="true"></i>

1610
yarn.lock

File diff suppressed because it is too large Load Diff