diff --git a/.env b/.env index 17212c16f4..f75c0a2115 100644 --- a/.env +++ b/.env @@ -200,9 +200,12 @@ GATEWAY_USERS= GATEWAY_FASTCGI_HTTPS=off # Content Security Policy (CSP) -# security that helps to detect and mitigate certain types of attacks, including Cross-Site Scripting +# helps to detect and mitigate some types of attacks, including Cross-Site Scripting (XSS). +# CSP default values are included in the "Gateway" container entrypoint. +# Use GATEWAY_CSP env var if you want to define yours and/or override Gateway CSP values. +# GATEWAY_CSP="default-src 'self' 127.0.0.1 https://sockjs-eu.pusher.com:443 wss://ws-eu.pusher.com https://apiws.carrick-skills.com:8443 https://apiws.carrick-flow.com:8443 https://fonts.gstatic.com *.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com *.axept.io *.matomo.cloud *.newrelic.com *.nr-data.net https://www.googletagmanager.com *.google-analytics.com *.phrasea.io https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: ; script-src 'unsafe-inline' 'unsafe-eval' 'self' https://www.gstatic.com *.alchemyasp.com *.axept.io *.matomo.cloud *.newrelic.com https://www.googletagmanager.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: blob: ; style-src 'self' 'unsafe-inline' https://fonts.gstatic.com https://fonts.googleapis.com https://www.google.com https://www.gstatic.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com ; img-src 'self' data: blob: *.tiles.mapbox.com https://axeptio.imgix.net *.cloudfront.net *.phrasea.io *.amazonaws.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com https://www.gnu.org/graphics/ ; object-src 'self'; frame-ancestors 'self'" # @run -GATEWAY_CSP="default-src 'self' 127.0.0.1 https://sockjs-eu.pusher.com:443 wss://ws-eu.pusher.com https://apiws.carrick-skills.com:8443 https://apiws.carrick-flow.com:8443 https://fonts.gstatic.com *.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com *.axept.io *.matomo.cloud *.newrelic.com *.nr-data.net https://www.googletagmanager.com *.google-analytics.com *.phrasea.io https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 data: ;script-src 'unsafe-inline' 'unsafe-eval' 'self' https://www.gstatic.com *.alchemyasp.com *.axept.io *.matomo.cloud *.newrelic.com https://www.googletagmanager.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 ;style-src 'self' 'unsafe-inline' https://fonts.gstatic.com https://fonts.googleapis.com https://www.google.com https://www.gstatic.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443;img-src 'self' data: blob: *.tiles.mapbox.com https://axeptio.imgix.net *.cloudfront.net *.phrasea.io *.amazonaws.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 ; object-src 'self';frame-ancestors 'self'" +GATEWAY_CSP= # --- RabbitMQ settings ------------------------------------------------------------------------------------------------ diff --git a/Phraseanet-production-client/config/config.js b/Phraseanet-production-client/config/config.js index c3d24a407b..d04c1782b9 100644 --- a/Phraseanet-production-client/config/config.js +++ b/Phraseanet-production-client/config/config.js @@ -13,5 +13,5 @@ module.exports = { setupDir: _root + 'tests/setup/node.js', karmaConf: _root + 'config/karma.conf.js', // change this version when you change JS file for lazy loading - assetFileVersion: 97 + assetFileVersion: 98 }; diff --git a/Phraseanet-production-client/dist/authenticate.js b/Phraseanet-production-client/dist/authenticate.js index d084afdad9..fcdd066040 100644 --- a/Phraseanet-production-client/dist/authenticate.js +++ b/Phraseanet-production-client/dist/authenticate.js @@ -96,7 +96,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".js?v=97"; +/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".js?v=98"; /******/ var timeout = setTimeout(onScriptComplete, 120000); /******/ script.onerror = script.onload = onScriptComplete; /******/ function onScriptComplete() { diff --git a/Phraseanet-production-client/dist/authenticate.min.js b/Phraseanet-production-client/dist/authenticate.min.js index 7c597982c8..b3bab31079 100644 --- a/Phraseanet-production-client/dist/authenticate.min.js +++ b/Phraseanet-production-client/dist/authenticate.min.js @@ -96,7 +96,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".min.js?v=97"; +/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".min.js?v=98"; /******/ var timeout = setTimeout(onScriptComplete, 120000); /******/ script.onerror = script.onload = onScriptComplete; /******/ function onScriptComplete() { diff --git a/Phraseanet-production-client/dist/commons.js b/Phraseanet-production-client/dist/commons.js index d55e728c02..bd3663400e 100644 --- a/Phraseanet-production-client/dist/commons.js +++ b/Phraseanet-production-client/dist/commons.js @@ -91,7 +91,7 @@ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".js?v=97"; +/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".js?v=98"; /******/ var timeout = setTimeout(onScriptComplete, 120000); /******/ script.onerror = script.onload = onScriptComplete; /******/ function onScriptComplete() { diff --git a/Phraseanet-production-client/dist/commons.min.js b/Phraseanet-production-client/dist/commons.min.js index 6f271a5ec8..df88311e87 100644 --- a/Phraseanet-production-client/dist/commons.min.js +++ b/Phraseanet-production-client/dist/commons.min.js @@ -91,7 +91,7 @@ /******/ if (__webpack_require__.nc) { /******/ script.setAttribute("nonce", __webpack_require__.nc); /******/ } -/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".min.js?v=97"; +/******/ script.src = __webpack_require__.p + "lazy-" + ({}[chunkId]||chunkId) + ".min.js?v=98"; /******/ var timeout = setTimeout(onScriptComplete, 120000); /******/ script.onerror = script.onload = onScriptComplete; /******/ function onScriptComplete() { diff --git a/Phraseanet-production-client/dist/lightbox.js b/Phraseanet-production-client/dist/lightbox.js index aac0a3a98f..5f1b857913 100644 --- a/Phraseanet-production-client/dist/lightbox.js +++ b/Phraseanet-production-client/dist/lightbox.js @@ -1249,6 +1249,11 @@ var download = function download(services) { success: function success(data) { $dialog.setContent(data); _onDownloadReady($dialog, window.exportConfig); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/dist/lightbox.min.js b/Phraseanet-production-client/dist/lightbox.min.js index aac0a3a98f..5f1b857913 100644 --- a/Phraseanet-production-client/dist/lightbox.min.js +++ b/Phraseanet-production-client/dist/lightbox.min.js @@ -1249,6 +1249,11 @@ var download = function download(services) { success: function success(data) { $dialog.setContent(data); _onDownloadReady($dialog, window.exportConfig); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/dist/production.js b/Phraseanet-production-client/dist/production.js index 2241df118c..7bcf382bfa 100644 --- a/Phraseanet-production-client/dist/production.js +++ b/Phraseanet-production-client/dist/production.js @@ -1617,7 +1617,6 @@ function setPref(name, value) { }, dataType: 'json', timeout: _jquery2.default.data[prefName] = false, - error: _jquery2.default.data[prefName] = false, success: function success(data) { if (data.success) { humane.info(data.message); @@ -1626,6 +1625,12 @@ function setPref(name, value) { } _jquery2.default.data[prefName] = false; return data; + }, + error: function error(data) { + _jquery2.default.data[prefName] = false; + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); return _jquery2.default.data[prefName]; @@ -3503,6 +3508,10 @@ var publication = function publication(services) { _jquery2.default.post(url + 'prod/feeds/requestavailable/', options, function (data) { return openModal(data); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return; @@ -4391,6 +4400,10 @@ var sharebasketModal = function sharebasketModal(services, datas) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -5543,8 +5556,11 @@ var editRecord = function editRecord(services) { (0, _jquery2.default)('#tooltip').hide(); return; }, - error: function error(XHR, textStatus, errorThrown) { - if (XHR.status === 0) { + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + if (data.status === 0) { return false; } } @@ -7487,6 +7503,11 @@ var exportRecord = function exportRecord(services) { } else { _onExportReady($dialog, window.exportConfig); } + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -7911,6 +7932,11 @@ var printRecord = function printRecord(services) { success: function success(data) { (0, _jquery2.default)('#DIALOG').removeClass('loading').empty().append(data); return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } @@ -10464,6 +10490,11 @@ var workzone = function workzone(services) { }, success: function success(data) { return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }); @@ -11100,6 +11131,11 @@ var workzone = function workzone(services) { if ('error' in data) { (0, _jquery2.default)('.publication-list').empty().html(data.error); } + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -17919,6 +17955,11 @@ var deleteBasket = function deleteBasket(services) { } return false; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; @@ -19869,6 +19910,11 @@ var archiveBasket = function archiveBasket(services) { alert(data.message); } return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } @@ -19944,6 +19990,10 @@ var basketCreate = function basketCreate(services) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20076,6 +20126,11 @@ var storyCreate = function storyCreate(services) { _onDialogReady(); return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; @@ -20283,6 +20338,10 @@ var basketUpdate = function basketUpdate(services) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20706,7 +20765,12 @@ var basketReorderContent = function basketReorderContent(services) { return _jquery2.default.get(url + 'prod/baskets/' + basketId + '/reorder/', function (data) { $dialog.setContent(data); _onDialogReady(); + return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20984,7 +21048,12 @@ var storyReorderContent = function storyReorderContent(services) { return _jquery2.default.get(url + 'prod/story/' + dbId + '/' + recordId + '/reorder/', function (data) { $dialog.setContent(data); _onDialogReady(); + return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -22086,7 +22155,12 @@ var moveRecord = function moveRecord(services) { return _jquery2.default.ajax({ type: 'POST', url: url + 'prod/records/movecollection/', - data: datas + data: datas, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + } }); }; @@ -62266,6 +62340,11 @@ var deleteRecord = function deleteRecord(services) { //reset top position of dialog $dialog.getDomElement().offsetParent().css('top', ((0, _jquery2.default)(window).height() - $dialog.getDomElement()[0].clientHeight) / 2); _onDialogReady(); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -62469,6 +62548,11 @@ var propertyRecord = function propertyRecord(services) { success: function success(data) { $dialog.setContent(data); _onPropertyReady($dialog); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -62627,6 +62711,10 @@ var pushbasketModal = function pushbasketModal(services, datas) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -62686,6 +62774,10 @@ var recordPublishModal = function recordPublishModal(services, datas) { _jquery2.default.post(url + 'prod/feeds/requestavailable/', datas, function (data) { return (0, _publication2.default)(services).openModal(data); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -62761,6 +62853,10 @@ var recordToolsModal = function recordToolsModal(services, datas) { $dialog.setOption('contextArgs', datas); _onModalReady(data, window.toolsConfig, activeTab); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -65169,6 +65265,11 @@ var preferences = function preferences(services) { (0, _jquery2.default)('body').removeClass().addClass('PNB ' + color); /* console.log('saved:' + color);*/ return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }); diff --git a/Phraseanet-production-client/dist/production.min.js b/Phraseanet-production-client/dist/production.min.js index 2241df118c..7bcf382bfa 100644 --- a/Phraseanet-production-client/dist/production.min.js +++ b/Phraseanet-production-client/dist/production.min.js @@ -1617,7 +1617,6 @@ function setPref(name, value) { }, dataType: 'json', timeout: _jquery2.default.data[prefName] = false, - error: _jquery2.default.data[prefName] = false, success: function success(data) { if (data.success) { humane.info(data.message); @@ -1626,6 +1625,12 @@ function setPref(name, value) { } _jquery2.default.data[prefName] = false; return data; + }, + error: function error(data) { + _jquery2.default.data[prefName] = false; + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); return _jquery2.default.data[prefName]; @@ -3503,6 +3508,10 @@ var publication = function publication(services) { _jquery2.default.post(url + 'prod/feeds/requestavailable/', options, function (data) { return openModal(data); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return; @@ -4391,6 +4400,10 @@ var sharebasketModal = function sharebasketModal(services, datas) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -5543,8 +5556,11 @@ var editRecord = function editRecord(services) { (0, _jquery2.default)('#tooltip').hide(); return; }, - error: function error(XHR, textStatus, errorThrown) { - if (XHR.status === 0) { + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + if (data.status === 0) { return false; } } @@ -7487,6 +7503,11 @@ var exportRecord = function exportRecord(services) { } else { _onExportReady($dialog, window.exportConfig); } + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -7911,6 +7932,11 @@ var printRecord = function printRecord(services) { success: function success(data) { (0, _jquery2.default)('#DIALOG').removeClass('loading').empty().append(data); return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } @@ -10464,6 +10490,11 @@ var workzone = function workzone(services) { }, success: function success(data) { return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }); @@ -11100,6 +11131,11 @@ var workzone = function workzone(services) { if ('error' in data) { (0, _jquery2.default)('.publication-list').empty().html(data.error); } + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -17919,6 +17955,11 @@ var deleteBasket = function deleteBasket(services) { } return false; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; @@ -19869,6 +19910,11 @@ var archiveBasket = function archiveBasket(services) { alert(data.message); } return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } @@ -19944,6 +19990,10 @@ var basketCreate = function basketCreate(services) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20076,6 +20126,11 @@ var storyCreate = function storyCreate(services) { _onDialogReady(); return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; @@ -20283,6 +20338,10 @@ var basketUpdate = function basketUpdate(services) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20706,7 +20765,12 @@ var basketReorderContent = function basketReorderContent(services) { return _jquery2.default.get(url + 'prod/baskets/' + basketId + '/reorder/', function (data) { $dialog.setContent(data); _onDialogReady(); + return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -20984,7 +21048,12 @@ var storyReorderContent = function storyReorderContent(services) { return _jquery2.default.get(url + 'prod/story/' + dbId + '/' + recordId + '/reorder/', function (data) { $dialog.setContent(data); _onDialogReady(); + return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -22086,7 +22155,12 @@ var moveRecord = function moveRecord(services) { return _jquery2.default.ajax({ type: 'POST', url: url + 'prod/records/movecollection/', - data: datas + data: datas, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + } }); }; @@ -62266,6 +62340,11 @@ var deleteRecord = function deleteRecord(services) { //reset top position of dialog $dialog.getDomElement().offsetParent().css('top', ((0, _jquery2.default)(window).height() - $dialog.getDomElement()[0].clientHeight) / 2); _onDialogReady(); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -62469,6 +62548,11 @@ var propertyRecord = function propertyRecord(services) { success: function success(data) { $dialog.setContent(data); _onPropertyReady($dialog); + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); @@ -62627,6 +62711,10 @@ var pushbasketModal = function pushbasketModal(services, datas) { $dialog.setContent(data); _onDialogReady(); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -62686,6 +62774,10 @@ var recordPublishModal = function recordPublishModal(services, datas) { _jquery2.default.post(url + 'prod/feeds/requestavailable/', datas, function (data) { return (0, _publication2.default)(services).openModal(data); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); return true; @@ -62761,6 +62853,10 @@ var recordToolsModal = function recordToolsModal(services, datas) { $dialog.setOption('contextArgs', datas); _onModalReady(data, window.toolsConfig, activeTab); return; + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } }); }; @@ -65169,6 +65265,11 @@ var preferences = function preferences(services) { (0, _jquery2.default)('body').removeClass().addClass('PNB ' + color); /* console.log('saved:' + color);*/ return; + }, + error: function error(data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }); diff --git a/Phraseanet-production-client/src/components/basket/archive.js b/Phraseanet-production-client/src/components/basket/archive.js index 20b889264f..c80fb25318 100644 --- a/Phraseanet-production-client/src/components/basket/archive.js +++ b/Phraseanet-production-client/src/components/basket/archive.js @@ -45,6 +45,11 @@ const archiveBasket = (services) => { alert(data.message); } return; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } diff --git a/Phraseanet-production-client/src/components/basket/create.js b/Phraseanet-production-client/src/components/basket/create.js index f32d125b58..45a4438b50 100644 --- a/Phraseanet-production-client/src/components/basket/create.js +++ b/Phraseanet-production-client/src/components/basket/create.js @@ -40,7 +40,13 @@ const basketCreate = (services) => { $dialog.setContent(data); _onDialogReady(); return; - }); + }) + .fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; }; const _onDialogReady = () => { diff --git a/Phraseanet-production-client/src/components/basket/delete.js b/Phraseanet-production-client/src/components/basket/delete.js index f32261d247..6085bffa35 100644 --- a/Phraseanet-production-client/src/components/basket/delete.js +++ b/Phraseanet-production-client/src/components/basket/delete.js @@ -139,6 +139,11 @@ const deleteBasket = (services) => { } return false; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; diff --git a/Phraseanet-production-client/src/components/basket/reorderContent.js b/Phraseanet-production-client/src/components/basket/reorderContent.js index bc99add63a..f30e1b60e3 100644 --- a/Phraseanet-production-client/src/components/basket/reorderContent.js +++ b/Phraseanet-production-client/src/components/basket/reorderContent.js @@ -41,8 +41,14 @@ const basketReorderContent = (services) => { return $.get(`${url}prod/baskets/${basketId}/reorder/`, function (data) { $dialog.setContent(data); _onDialogReady(); + return; - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; }; const _onDialogReady = () => { diff --git a/Phraseanet-production-client/src/components/basket/update.js b/Phraseanet-production-client/src/components/basket/update.js index a6d08e2750..ebbb1d666a 100644 --- a/Phraseanet-production-client/src/components/basket/update.js +++ b/Phraseanet-production-client/src/components/basket/update.js @@ -43,7 +43,12 @@ const basketUpdate = (services) => { $dialog.setContent(data); _onDialogReady(); return; - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; }; const _onDialogReady = () => { diff --git a/Phraseanet-production-client/src/components/lightbox/download.js b/Phraseanet-production-client/src/components/lightbox/download.js index 6c88005555..3059e7c1fb 100644 --- a/Phraseanet-production-client/src/components/lightbox/download.js +++ b/Phraseanet-production-client/src/components/lightbox/download.js @@ -32,6 +32,11 @@ const download = (services) => { success: function (data) { $dialog.setContent(data); _onDownloadReady($dialog, window.exportConfig); + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/components/preferences/index.js b/Phraseanet-production-client/src/components/preferences/index.js index 05ea6ecb4c..40b20d8d4d 100644 --- a/Phraseanet-production-client/src/components/preferences/index.js +++ b/Phraseanet-production-client/src/components/preferences/index.js @@ -207,6 +207,11 @@ const preferences = services => { $('body').removeClass().addClass('PNB ' + color); /* console.log('saved:' + color);*/ return; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/components/publication/index.js b/Phraseanet-production-client/src/components/publication/index.js index 748032471b..9e57aca8ff 100644 --- a/Phraseanet-production-client/src/components/publication/index.js +++ b/Phraseanet-production-client/src/components/publication/index.js @@ -472,7 +472,11 @@ const publication = (services) => { , function (data) { return openModal(data); - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }); return; }; diff --git a/Phraseanet-production-client/src/components/record/delete.js b/Phraseanet-production-client/src/components/record/delete.js index e6ed7eddc3..827289b92e 100644 --- a/Phraseanet-production-client/src/components/record/delete.js +++ b/Phraseanet-production-client/src/components/record/delete.js @@ -24,6 +24,11 @@ const deleteRecord = (services) => { //reset top position of dialog $dialog.getDomElement().offsetParent().css('top', ($(window).height() - $dialog.getDomElement()[0].clientHeight) / 2); _onDialogReady(); + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/components/record/edit.js b/Phraseanet-production-client/src/components/record/edit.js index 0a234334b1..7e060e60da 100644 --- a/Phraseanet-production-client/src/components/record/edit.js +++ b/Phraseanet-production-client/src/components/record/edit.js @@ -74,8 +74,11 @@ const editRecord = (services) => { $('#tooltip').hide(); return; }, - error: function (XHR, textStatus, errorThrown) { - if (XHR.status === 0) { + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + if (data.status === 0) { return false; } } diff --git a/Phraseanet-production-client/src/components/record/export.js b/Phraseanet-production-client/src/components/record/export.js index 324d33e0df..11ce48e163 100644 --- a/Phraseanet-production-client/src/components/record/export.js +++ b/Phraseanet-production-client/src/components/record/export.js @@ -64,6 +64,11 @@ const exportRecord = services => { else { _onExportReady($dialog, window.exportConfig); } + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/components/record/move.js b/Phraseanet-production-client/src/components/record/move.js index 3e2d840b34..1fe740cb0f 100644 --- a/Phraseanet-production-client/src/components/record/move.js +++ b/Phraseanet-production-client/src/components/record/move.js @@ -86,7 +86,12 @@ const moveRecord = (services) => { return $.ajax({ type: 'POST', url: `${url}prod/records/movecollection/`, - data: datas + data: datas, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + } }); }; diff --git a/Phraseanet-production-client/src/components/record/print.js b/Phraseanet-production-client/src/components/record/print.js index 720eb2f2d3..8eafcda41f 100644 --- a/Phraseanet-production-client/src/components/record/print.js +++ b/Phraseanet-production-client/src/components/record/print.js @@ -69,6 +69,11 @@ const printRecord = (services) => { $('#DIALOG').removeClass('loading').empty() .append(data); return; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); } diff --git a/Phraseanet-production-client/src/components/record/property.js b/Phraseanet-production-client/src/components/record/property.js index 6d54af95b1..e069c6f08b 100644 --- a/Phraseanet-production-client/src/components/record/property.js +++ b/Phraseanet-production-client/src/components/record/property.js @@ -22,6 +22,11 @@ const propertyRecord = (services) => { success: function (data) { $dialog.setContent(data); _onPropertyReady($dialog); + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/components/record/publish.js b/Phraseanet-production-client/src/components/record/publish.js index 049cf61918..f54d20716e 100644 --- a/Phraseanet-production-client/src/components/record/publish.js +++ b/Phraseanet-production-client/src/components/record/publish.js @@ -13,7 +13,12 @@ const recordPublishModal = (services, datas) => { , function (data) { return publication(services).openModal(data); - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; return true; }; diff --git a/Phraseanet-production-client/src/components/record/pushbasketModal.js b/Phraseanet-production-client/src/components/record/pushbasketModal.js index 70f762dd7a..4b0f151788 100644 --- a/Phraseanet-production-client/src/components/record/pushbasketModal.js +++ b/Phraseanet-production-client/src/components/record/pushbasketModal.js @@ -23,7 +23,12 @@ const pushbasketModal = (services, datas) => { $dialog.setContent(data); _onDialogReady(); return; - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; return true; }; diff --git a/Phraseanet-production-client/src/components/record/sharebasketModal.js b/Phraseanet-production-client/src/components/record/sharebasketModal.js index 3ea16070be..751f954331 100644 --- a/Phraseanet-production-client/src/components/record/sharebasketModal.js +++ b/Phraseanet-production-client/src/components/record/sharebasketModal.js @@ -25,7 +25,12 @@ const sharebasketModal = (services, datas) => { $dialog.setContent(data); _onDialogReady(); return; - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; return true; }; diff --git a/Phraseanet-production-client/src/components/record/tools/index.js b/Phraseanet-production-client/src/components/record/tools/index.js index 1793fe8f55..f44d53ee04 100644 --- a/Phraseanet-production-client/src/components/record/tools/index.js +++ b/Phraseanet-production-client/src/components/record/tools/index.js @@ -36,7 +36,11 @@ const recordToolsModal = (services, datas, activeTab = false) => { _onModalReady(data, window.toolsConfig, activeTab); return; } - ); + ).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }); }; diff --git a/Phraseanet-production-client/src/components/story/create.js b/Phraseanet-production-client/src/components/story/create.js index aceb208888..48a7f92c34 100644 --- a/Phraseanet-production-client/src/components/story/create.js +++ b/Phraseanet-production-client/src/components/story/create.js @@ -50,6 +50,11 @@ const storyCreate = (services) => { _onDialogReady(); return; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }; diff --git a/Phraseanet-production-client/src/components/story/reorderContent.js b/Phraseanet-production-client/src/components/story/reorderContent.js index 7b60847975..26c6c3c3c0 100644 --- a/Phraseanet-production-client/src/components/story/reorderContent.js +++ b/Phraseanet-production-client/src/components/story/reorderContent.js @@ -36,8 +36,14 @@ const storyReorderContent = (services) => { return $.get(`${url}prod/story/${dbId}/${recordId}/reorder/`, function (data) { $dialog.setContent(data); _onDialogReady(); + return; - }); + }).fail(function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } + }) + ; }; const _onDialogReady = () => { diff --git a/Phraseanet-production-client/src/components/ui/workzone/index.js b/Phraseanet-production-client/src/components/ui/workzone/index.js index 1eeacf5633..d9a8cc2f86 100644 --- a/Phraseanet-production-client/src/components/ui/workzone/index.js +++ b/Phraseanet-production-client/src/components/ui/workzone/index.js @@ -538,6 +538,11 @@ const workzone = (services) => { }, success: function (data) { return; + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); }); @@ -1186,6 +1191,11 @@ const workzone = (services) => { if ('error' in data) { $('.publication-list').empty().html(data.error); } + }, + error: function (data) { + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); diff --git a/Phraseanet-production-client/src/phraseanet-common/components/user.js b/Phraseanet-production-client/src/phraseanet-common/components/user.js index 96880da53b..f987377934 100644 --- a/Phraseanet-production-client/src/phraseanet-common/components/user.js +++ b/Phraseanet-production-client/src/phraseanet-common/components/user.js @@ -22,7 +22,6 @@ function setPref(name, value) { }, dataType: 'json', timeout: $.data[prefName] = false, - error: $.data[prefName] = false, success: (data) => { if (data.success) { humane.info(data.message); @@ -31,6 +30,12 @@ function setPref(name, value) { } $.data[prefName] = false; return data; + }, + error: function (data) { + $.data[prefName] = false; + if (data.status === 403 && data.getResponseHeader('x-phraseanet-end-session')) { + self.location.replace(self.location.href); // refresh will redirect to login + } } }); return $.data[prefName]; diff --git a/docker/nginx/root/entrypoint.sh b/docker/nginx/root/entrypoint.sh index a002bb9112..48d554b577 100755 --- a/docker/nginx/root/entrypoint.sh +++ b/docker/nginx/root/entrypoint.sh @@ -30,7 +30,7 @@ if [ ! -z "$GATEWAY_CSP" ]; then envsubst < "/securitycontentpolicies.sample.conf" > /etc/nginx/conf.d/securitycontentpolicies.conf else echo "Content Security policies is defined" - export GATEWAY_CSP="default-src 'self' 127.0.0.1 https://apiws.carrick-skills.com:8443 https://apiws.carrick-flow.com:8443 https://fonts.gstatic.com *.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com *.axept.io *.matomo.cloud *.newrelic.com *.nr-data.net https://www.googletagmanager.com *.google-analytics.com *.phrasea.io https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: ; script-src 'unsafe-inline' 'unsafe-eval' 'self' https://www.gstatic.com *.alchemyasp.com *.axept.io *.matomo.cloud *.newrelic.com https://www.googletagmanager.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: blob: ; style-src 'self' 'unsafe-inline' https://fonts.gstatic.com https://fonts.googleapis.com https://www.google.com https://www.gstatic.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com ; img-src 'self' data: blob: *.tiles.mapbox.com https://axeptio.imgix.net *.cloudfront.net *.phrasea.io *.amazonaws.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com https://www.gnu.org/graphics/ ; object-src 'self'; frame-ancestors 'self'" + export GATEWAY_CSP="default-src 'self' 127.0.0.1 https://sockjs-eu.pusher.com:443 wss://ws-eu.pusher.com https://apiws.carrick-skills.com:8443 https://apiws.carrick-flow.com:8443 https://fonts.gstatic.com *.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com *.axept.io *.matomo.cloud *.newrelic.com *.nr-data.net https://www.googletagmanager.com *.google-analytics.com *.phrasea.io https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: ; script-src 'unsafe-inline' 'unsafe-eval' 'self' https://www.gstatic.com *.alchemyasp.com *.axept.io *.matomo.cloud *.newrelic.com https://www.googletagmanager.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com data: blob: ; style-src 'self' 'unsafe-inline' https://fonts.gstatic.com https://fonts.googleapis.com https://www.google.com https://www.gstatic.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com ; img-src 'self' data: blob: *.tiles.mapbox.com https://axeptio.imgix.net *.cloudfront.net *.phrasea.io *.amazonaws.com https://apiws.carrick-flow.com:8443 https://apiws.carrick-skills.com:8443 https://maxcdn.bootstrapcdn.com https://www.gnu.org/graphics/ ; object-src 'self'; frame-ancestors 'self'" echo "setting Security policies to : " $GATEWAY_CSP envsubst < "/securitycontentpolicies.sample.conf" > /etc/nginx/conf.d/securitycontentpolicies.conf fi diff --git a/lib/Alchemy/Phrasea/Command/Maintenance/CleanUsersCommand.php b/lib/Alchemy/Phrasea/Command/Maintenance/CleanUsersCommand.php index 76d0169a0b..7f92475738 100644 --- a/lib/Alchemy/Phrasea/Command/Maintenance/CleanUsersCommand.php +++ b/lib/Alchemy/Phrasea/Command/Maintenance/CleanUsersCommand.php @@ -93,7 +93,7 @@ protected function doExecute(InputInterface $input, OutputInterface $output) return 1; } - $clauses[] = sprintf("`last_connection` < DATE_SUB(NOW(), INTERVAL %d day)", $inactivityPeriod); + $clauses[] = sprintf("((`last_connection` IS NULL AND `Users`.`created` < DATE_SUB(NOW(), INTERVAL %d day)) OR (`last_connection` < DATE_SUB(NOW(), INTERVAL %d day)))", $inactivityPeriod, $inactivityPeriod); $sql_where_u = 1; $sql_where_ub = 1; @@ -249,7 +249,7 @@ protected function doExecute(InputInterface $input, OutputInterface $output) $usersList[] = [ $user->getId(), $user->getLogin(), - $user->getLastConnection()->format('Y-m-d h:m:s'), + ($user->getLastConnection() == null) ? 'never connected' : $user->getLastConnection()->format('Y-m-d h:m:s'), $action ]; } @@ -280,7 +280,7 @@ private function relanceUser(User $user, $graceDuration) $mail->setLogin($user->getLogin()); $mail->setLocale($user->getLocale()); - $mail->setLastConnection($user->getLastConnection()->format('Y-m-d')); + $mail->setLastConnection(($user->getLastConnection() == null) ? 'never connected': $user->getLastConnection()->format('Y-m-d')); $mail->setDeleteDate((new \DateTime("+{$graceDuration} day"))->format('Y-m-d')); // return 0 on failure @@ -296,7 +296,7 @@ private function doDelete(User $user, UserManipulator $userManipulator, $validMa if ($validMail && !empty($maxRelances)) { $receiver = Receiver::fromUser($user); $mail = MailSuccessAccountInactifDelete::create($this->container, $receiver); - $mail->setLastConnection($user->getLastConnection()->format('Y-m-d')); + $mail->setLastConnection(($user->getLastConnection() == null) ? 'never connected' : $user->getLastConnection()->format('Y-m-d')); // if --max_relances=0 there is no inactivity email if ($user->getLastInactivityEmail() !== null) { diff --git a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Action.php b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Action.php new file mode 100644 index 0000000000..dacf75727f --- /dev/null +++ b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Action.php @@ -0,0 +1,303 @@ +job = $job; + $this->unicode = $unicode; + $this->output = $output; + $this->reportFormat = $this->job->getGlobalConfiguration()->getReportFormat(); + + if (array_key_exists('active', $action_conf) && $action_conf['active'] === false) { + $this->active = false; + return; + } + + + // get infos about the "source_field" + // + if (!($f = $job->getDataboxField($action_conf['source_field'])) ) { + $this->errors[] = sprintf("source field (%s) not found.", $action_conf['source_field']); + } + if (trim($f->get_tbranch()) === '') { + $this->errors[] = sprintf("source field (%s) not linked to thesaurus.", $action_conf['source_field']); + } + $this->tbranches = $job->getXpathTh()->query($f->get_tbranch()); + if (!$this->tbranches || $this->tbranches->length <= 0) { + $this->errors[] = sprintf("thesaurus branch(es) of source field (%s) not found.", $this->source_field['tbranch']); + } + $this->source_field = [ + 'id' => $f->get_id(), + 'name' => $f->get_name(), + 'tbranch' => $f->get_tbranch(), + 'lng' => array_key_exists('source_lng', $action_conf) ? $action_conf['source_lng'] : null + ]; + $this->selectRecordFieldIds[] = $this->source_field['id']; + + + // get infos about the "destination_fields" + // + $this->destination_fields = []; + foreach ($action_conf['destination_fields'] as $tf) { + list($lng, $fname) = explode(':', $tf); + if(!($f = $job->getDataboxField($fname)) ) { + $this->output->writeln(sprintf("undefined field (%s) (ignored).", $fname)); + continue; + } + $this->destination_fields[$lng] = [ + 'id' => $f->get_id(), + 'name' => $f->get_name(), + ]; + + $this->selectRecordFieldIds[] = $this->destination_fields[$lng]['id']; + } + + if (empty($this->destination_fields)) { + $this->errors[] = sprintf("no \"destination_field\" found."); + } + + // misc settings + $this->cleanupDestination = array_key_exists('cleanup_destination', $action_conf) && $action_conf['cleanup_destination'] === true; + $this->cleanupSource = array_key_exists('cleanup_source', $action_conf) ? $action_conf['cleanup_source'] : self::NEVER_CLEANUP_SOURCE; + } + + public function doAction(array $metas, array &$meta_to_delete, array&$meta_to_add) + { + if ($this->cleanupDestination) { + foreach ($this->destination_fields as $lng => $destination_field) { + $destination_field_id = $destination_field['id']; + if(array_key_exists($destination_field_id, $metas)) { + foreach ($metas[$destination_field_id] as $meta_id => $value) { + $meta_to_delete[$meta_id] = $value; + } + } + unset($meta_id, $value); + } + unset($lng, $destination_field, $destination_field_id); + } + + $source_field_id = $this->source_field['id']; + + if(!array_key_exists($source_field_id, $metas)) { + // no source field value for this record: nothing to do + return; + } + + // loop on every value of the "source_field" + // + foreach ($metas[$source_field_id] as $source_meta_id => $source_value) { + + $t = $this->splitTermAndContext($source_value); + $q = '@w=\'' . thesaurus::xquery_escape($this->unicode->remove_indexer_chars($t[0])) . '\''; + if ($t[1]) { + $q .= ' and @k=\'' . thesaurus::xquery_escape($this->unicode->remove_indexer_chars($t[1])) . '\''; + } + if(!is_null($this->source_field['lng'])) { + $q .= ' and @lng=\'' . thesaurus::xquery_escape($this->source_field['lng']) . '\''; + } + $q = '//sy[' . $q . ']/../sy'; + unset($t); + + // loop on every tbranch (one field may be linked to many branches) + // + $translations = []; // ONE translation per lng (first found in th) + /** @var DOMNode $tbranch */ + foreach ($this->tbranches as $tbranch) { + if (!($nodes = $this->job->getXpathTh()->query($q, $tbranch))) { + $this->output->writeln(sprintf("\t\t\t- \"%s\" xpath error on (%s), ignored.", $source_value, $q)); + continue; + } + + // loop on every synonym + // + /** @var DOMElement $node */ + foreach ($nodes as $node) { + $lng = $node->getAttribute('lng'); + + // ignore synonyms not in one of the "destination_field" languages + // + if (!array_key_exists($lng, $this->destination_fields)) { + continue; + } + + $translated_value = $node->getAttribute('v'); + + $destination_field_id = $this->destination_fields[$lng]['id']; + if (!array_key_exists($lng, $translations)) { + if ( + !array_key_exists($destination_field_id, $metas) + || ($destination_meta_id = array_search($translated_value, $metas[$destination_field_id])) === false + ) { + $translations[$lng] = [ + 'val' => $translated_value, + 'id' => null, + 'msg' => sprintf(" --> %s", $this->destination_fields[$lng]['name']) + ]; + $meta_to_add[$destination_field_id][] = $translated_value; + } + else { + $translations[$lng] = [ + 'val' => $translated_value, + 'id' => $destination_meta_id, + 'msg' => sprintf("already in %s", $this->destination_fields[$lng]['name']) + ]; + unset($meta_to_delete[$destination_meta_id]); + } + unset($destination_meta_id); + } + unset($lng, $destination_field_id, $translated_value); + } + unset($nodes, $node, $tbranch); + } + unset($q); + + // cleanup source + // + if (empty($translations)) { + if($this->reportFormat === GlobalConfiguration::REPORT_FORMAT_ALL) { + $this->output->writeln(sprintf("\t\t\t- \"%s\" : no translation found.", $source_value)); + } + $this->job->addToCondensedReport($source_value, job::CONDENSED_REPORT_NOT_TRANSLATED); + } + else if (count($translations) < count($this->destination_fields)) { + if(in_array($this->reportFormat, [GlobalConfiguration::REPORT_FORMAT_ALL, GlobalConfiguration::REPORT_FORMAT_TRANSLATED])) { + $this->output->writeln(sprintf("\t\t\t- \"%s\" : incomplete translation.", $source_value)); + } + $this->job->addToCondensedReport($source_value, job::CONDENSED_REPORT_INCOMPLETELY_TRANSLATED); + } + else { + // complete translation (all target lng) + if(in_array($this->reportFormat, [GlobalConfiguration::REPORT_FORMAT_ALL, GlobalConfiguration::REPORT_FORMAT_TRANSLATED])) { + $this->output->writeln(sprintf("\t\t\t- \"%s\" :", $source_value)); + } + $this->job->addToCondensedReport($source_value, job::CONDENSED_REPORT_FULLY_TRANSLATED); + + if ($this->cleanupSource === self::CLEANUP_SOURCE_IF_TRANSLATED) { + // do NOT delete the source term if one translation found it as already present as destination (possible if source=destination) + $used = false; + foreach($translations as $l => $t) { + if($t['id'] === $source_meta_id) { + $used = true; + break; + } + } + if(!$used) { + $meta_to_delete[$source_meta_id] = $metas[$source_field_id][$source_meta_id]; + } + } + } + + if(in_array($this->reportFormat, [GlobalConfiguration::REPORT_FORMAT_ALL, GlobalConfiguration::REPORT_FORMAT_TRANSLATED])) { + foreach ($translations as $lng => $translation) { + $this->output->writeln(sprintf("\t\t\t\t- [%s] \"%s\" %s", $lng, $translation['val'], $translation['msg'])); + } + } + + if ($this->cleanupSource === self::ALWAYS_CLEANUP_SOURCE) { + // do NOT delete the source term if one translation found it as already present as destination (possible if source=destination) + $used = false; + foreach($translations as $l => $t) { + if($t['id'] === $source_meta_id) { + $used = true; + break; + } + } + if(!$used) { + $meta_to_delete[$source_meta_id] = $metas[$source_field_id][$source_meta_id]; + } + } + + unset($lng, $translations, $translation); + } + } + + private function splitTermAndContext($word) + { + $term = trim($word); + $context = ''; + if (($po = strpos($term, '(')) !== false) { + if (($pc = strpos($term, ')', $po)) !== false) { + $context = trim(substr($term, $po + 1, $pc - $po - 1)); + $term = trim(substr($term, 0, $po)); + } + else { + $context = trim(substr($term, $po + 1)); + $term = trim(substr($term, 0, $po)); + } + } + + return [$term, $context]; + } + + /** + * @return bool + */ + public function isActive(): bool + { + return $this->active; + } + + /** + * @return array + */ + public function getErrors(): array + { + return $this->errors; + } + + /** + * @return array + */ + public function getSelectRecordFieldIds(): array + { + return $this->selectRecordFieldIds; + } + +} diff --git a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/GlobalConfiguration.php b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/GlobalConfiguration.php index c097c63634..e989c69380 100644 --- a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/GlobalConfiguration.php +++ b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/GlobalConfiguration.php @@ -5,6 +5,7 @@ use appbox; use collection; use databox; +use databox_field; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Yaml\Yaml; use Unicode; @@ -13,6 +14,8 @@ { const CONFIG_DIR = "/config/translator/"; const CONFIG_FILE = "configuration.yml"; + const REPORT_FORMAT_ALL = "all"; + const REPORT_FORMAT_TRANSLATED = "translated"; private $configuration = null; @@ -47,7 +50,8 @@ private function __construct($appBox, Unicode $unicode, $global_conf, bool $dryR $sbas_name = $databox->get_dbname(); $this->databoxes[$sbas_id] = [ 'dbox' => $databox, - 'collections' => [] + 'collections' => [], + 'fields' => [], ]; $this->databoxes[$sbas_name] = &$this->databoxes[$sbas_id]; // list all collections @@ -57,16 +61,44 @@ private function __construct($appBox, Unicode $unicode, $global_conf, bool $dryR $this->databoxes[$sbas_id]['collections'][$coll_id] = $collection; $this->databoxes[$sbas_id]['collections'][$coll_name] = &$this->databoxes[$sbas_id]['collections'][$coll_id]; } + // list all fields + /** @var databox_field $dbf */ + foreach($databox->get_meta_structure() as $dbf) { + $field_id = $dbf->get_id(); + $field_name = $dbf->get_name(); + $this->databoxes[$sbas_id]['fields'][$field_id] = $dbf; + $this->databoxes[$sbas_id]['fields'][$field_name] = &$this->databoxes[$sbas_id]['fields'][$field_id]; + } } foreach($global_conf['jobs'] as $job_name => $job_conf) { - $this->jobs[$job_name] = new Job($this, $job_conf, $unicode, $output); + $job = new Job($this, $job_name, $job_conf, $unicode, $output); + if($job->isActive()) { + if($job->isValid()) { + $this->jobs[$job_name] = $job; + } + else { + $output->writeln("Configuration error(s)... :"); + foreach ($job->getErrors() as $err) { + $output->writeln(sprintf(" - %s", $err)); + } + $output->writeln("...Job ignored"); + } + } + else { + unset($job); + $output->writeln(sprintf("job \"%s\" is inactive: ignored.", $job_name)); + } } } /** * @param appbox $appBox + * @param Unicode $unicode * @param string $root + * @param bool $dryRun + * @param string $reportFormat + * @param OutputInterface $output * @return GlobalConfiguration * @throws ConfigurationException */ @@ -109,6 +141,25 @@ public function getCollection($sbasIdOrName, $collIdOrName) return $this->databoxes[$sbasIdOrName]['collections'][$collIdOrName] ?? null; } + /** + * @param string|int $sbasIdOrName + * @return databox_field[]|null + */ + public function getFields($sbasIdOrName) + { + return $this->databoxes[$sbasIdOrName] ?? null; + } + + /** + * @param string|int $sbasIdOrName + * @param string|int $collIdOrName + * @return databox_field|null + */ + public function getField($sbasIdOrName, $fieldIdOrName) + { + return $this->databoxes[$sbasIdOrName]['fields'][$fieldIdOrName] ?? null; + } + /** * @return bool */ diff --git a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Job.php b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Job.php index e8d408d057..1d67e79db4 100644 --- a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Job.php +++ b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/Job.php @@ -2,9 +2,8 @@ namespace Alchemy\Phrasea\Command\Thesaurus\Translator; +use collection; use databox; -use DOMElement; -use DOMNode; use DOMNodeList; use DOMXpath; use PDO; @@ -14,13 +13,20 @@ class Job { - const NEVER_CLEANUP_SOURCE = 'never'; - const ALWAYS_CLEANUP_SOURCE = 'always'; - const CLEANUP_SOURCE_IF_TRANSLATED = 'if_translated'; + const CONDENSED_REPORT_NOT_TRANSLATED = 'notTranslated'; + const CONDENSED_REPORT_INCOMPLETELY_TRANSLATED = 'incompletelyTranslated'; + const CONDENSED_REPORT_FULLY_TRANSLATED = 'fullyTranslated'; private $active = true; + /** @var array[] */ + private $condensedReportCounts = [ + self::CONDENSED_REPORT_NOT_TRANSLATED => [], + self::CONDENSED_REPORT_INCOMPLETELY_TRANSLATED => [], + self::CONDENSED_REPORT_FULLY_TRANSLATED => [] + ]; + /** @var string[] */ private $errors = []; // error messages while parsing conf @@ -32,188 +38,127 @@ class Job private $selectRecordsSql = null; - /** @var array list of field ids of "source_field" (unique) and "destination_fields" (many) */ - private $selectRecordFieldIds; - - /** - * @var OutputInterface - */ + /** @var OutputInterface */ private $output; - private $source_field; // infos about the "source_field" - private $destination_fields; // infos about the "destination_fields" (key=lng) - - /** - * @var Unicode - */ - private $unicode; - /** @var DOMXpath|false|thesaurus_xpath */ private $xpathTh; - /** - * @var DOMNodeList - * The thesaurus branch(es) linked to the "source_field" - */ - private $tbranches; - - /** @var bool */ - private $cleanupDestination; + /** @var int flush every n records */ + private $bulk = 10; - /** @var string */ - private $cleanupSource = self::NEVER_CLEANUP_SOURCE; - /** - * @var GlobalConfiguration - */ + /** @var GlobalConfiguration */ private $globalConfiguration; - /** - * @var array - */ - private $job_conf; - /** - * @var \collection|null - */ + + /** @var collection|null */ private $setCollection = null; - /** - * @var string - */ + /** @var string */ private $setStatus = null; // format 0xx1100xx01xxxx - /** - * @var array - */ - private $notTranslated; // for condensed report - /** - * @var array - */ - private $incompletelyTranslated; // for condensed report - /** - * @var array - */ - private $fullyTranslated; // for condensed report - /** - * @var int - */ + /** @var Action[] */ + private $actions; + + /** @var array */ + private $selectRecordFieldIds = []; // ids of fields required by actions + + /** @var int */ private $recordsDone; // for condensed report + /** * @param GlobalConfiguration $globalConfiguration + * @param string $job_name * @param array $job_conf + * @param Unicode $unicode + * @param OutputInterface $output */ - public function __construct($globalConfiguration, $job_conf, Unicode $unicode, OutputInterface $output) + public function __construct(GlobalConfiguration $globalConfiguration, string $job_name, array $job_conf, Unicode $unicode, OutputInterface $output) { $this->globalConfiguration = $globalConfiguration; - $this->job_conf = $job_conf; - $this->unicode = $unicode; $this->output = $output; + $this->actions = []; + $this->errors = []; + if (array_key_exists('active', $job_conf) && $job_conf['active'] === false) { $this->active = false; - return; } - $this->errors = []; - foreach (['active', 'databox', 'source_field', 'destination_fields'] as $mandatory) { + foreach (['active', 'databox', 'actions'] as $mandatory) { if (!isset($job_conf[$mandatory])) { $this->errors[] = sprintf("Missing mandatory setting (%s).", $mandatory); } } - if (!empty($this->errors)) { - return; - } - if (!($this->databox = $globalConfiguration->getDatabox($job_conf['databox']))) { $this->errors[] = sprintf("unknown databox (%s).", $job_conf['databox']); - - return; } - + $ifCollection = null; + if(array_key_exists('if_collection', $job_conf)) { + if(!($ifCollection = $globalConfiguration->getCollection($this->databox->get_sbas_id(), $job_conf['if_collection']))) { + $this->errors[] = sprintf("unknown setCollection (%s).", $job_conf['if_collection']); + } + } if(array_key_exists('set_collection', $job_conf)) { if(!($this->setCollection = $globalConfiguration->getCollection($this->databox->get_sbas_id(), $job_conf['set_collection']))) { $this->errors[] = sprintf("unknown setCollection (%s).", $job_conf['set_collection']); - - return; } } - if(array_key_exists('set_status', $job_conf)) { $this->setStatus = $job_conf['set_status']; } - - - $cnx = $this->databox->get_connection(); - - // get infos about the "source_field" - // - $sql = "SELECT `id`, `tbranch` FROM `metadatas_structure` WHERE `name` = :name AND `tbranch` != ''"; - $stmt = $cnx->executeQuery($sql, [':name' => $job_conf['source_field']]); - $this->source_field = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - if (!$this->source_field) { - $this->errors[] = sprintf("field (%s) not found or not linked to thesaurus.", $job_conf['source_field']); - - return; + if(array_key_exists('bulk', $job_conf)) { + if( ($this->bulk = (int) $job_conf['bulk']) < 1) { + $this->errors[] = sprintf("bulk should be >= 1."); + } } - $this->source_field['lng'] = array_key_exists('source_lng', $job_conf) ? $job_conf['source_lng'] : null; - $this->selectRecordFieldIds[] = $this->source_field['id']; + $this->xpathTh = $this->databox->get_xpath_thesaurus(); - $this->tbranches = $this->xpathTh->query($this->source_field['tbranch']); - if (!$this->tbranches || $this->tbranches->length <= 0) { - $this->errors[] = sprintf("thesaurus branch(es) (%s) not found.", $this->source_field['tbranch']); - return; - } - // get infos about the "destination_fields" + + // load actions // - $this->destination_fields = []; - $sql = "SELECT `id`, `name` FROM `metadatas_structure` WHERE `name` = :name "; - $stmt = $cnx->prepare($sql); - foreach ($job_conf['destination_fields'] as $tf) { - list($lng, $fname) = explode(':', $tf); - $stmt->execute([':name' => $fname]); - if (!($row = $stmt->fetch(PDO::FETCH_ASSOC))) { - $this->output->writeln(sprintf("undefined field (%s) (ignored).", $fname)); - continue; + $this->selectRecordFieldIds = []; + foreach($job_conf['actions'] as $action_name => $action_conf) { + $action = new Action($this, $action_conf, $unicode, $this->output); + if($action->isActive()) { + $this->selectRecordFieldIds = array_merge($this->selectRecordFieldIds, $action->getSelectRecordFieldIds()); + $this->errors = array_merge($this->errors, $action->getErrors()); + $this->actions[$action_name] = $action; + } + else { + unset($action); + $output->writeln(sprintf("action \"%s\" of job \"%s\" is inactive: ignored.", $action_name, $job_name)); } - $this->destination_fields[$lng] = $row; - $stmt->closeCursor(); - - $this->selectRecordFieldIds[] = $row['id']; } + $this->selectRecordFieldIds = array_unique($this->selectRecordFieldIds); - if (empty($this->destination_fields)) { - $this->errors[] = sprintf("no \"destination_field\" found."); - + if (!empty($this->errors)) { return; } - // misc settings - $this->cleanupDestination = array_key_exists('cleanup_destination', $job_conf) && $job_conf['cleanup_destination'] === true; - $this->cleanupSource = array_key_exists('cleanup_source', $job_conf) ? $job_conf['cleanup_source'] : self::NEVER_CLEANUP_SOURCE; // build records select sql // - $selectRecordClauses = []; - $this->selectRecordParams = []; - if (array_key_exists('if_collection', $job_conf)) { - if (!($coll = $globalConfiguration->getCollection($job_conf['databox'], $job_conf['if_collection']))) { - $this->errors[] = sprintf("unknown collection (%s)", $job_conf['if_collection']); - - return; - } - $selectRecordClauses[] = "`coll_id` = :coll_id"; - $this->selectRecordParams[':coll_id'] = $coll->get_coll_id(); + $selectRecordsClauses = [ + '`record_id` > :minrid' + ]; + $this->selectRecordParams = [ + ':minrid' => 0 + ]; + if ($ifCollection) { + $selectRecordsClauses[] = "`coll_id` = " . (int)($ifCollection->get_coll_id()); } if (array_key_exists('if_status', $job_conf)) { - $selectRecordClauses[] = "`status` & b:sb_and = b:sb_equ"; - $this->selectRecordParams[':sb_and'] = str_replace(['0', 'x'], ['1', '0'], $job_conf['if_status']); - $this->selectRecordParams[':sb_equ'] = str_replace('x', '0', $job_conf['if_status']); + $_and = '0b'.str_replace(['0', 'x'], ['1', '0'], $job_conf['if_status']); + $_equ = '0b'.str_replace('x', '0', $job_conf['if_status']); + $selectRecordsClauses[] = "`status` & " . $_and . " = " . $_equ; } - $selectRecordClauses[] = "`meta_struct_id` IN (" + $cnx = $this->databox->get_connection(); + $selectFieldsClause = "`meta_struct_id` IN (" . join( ',', array_map(function ($id) use ($cnx) { @@ -222,222 +167,109 @@ public function __construct($globalConfiguration, $job_conf, Unicode $unicode, O ) . ")"; - $sql = "SELECT `record_id`, `meta_struct_id`, `metadatas`.`id` AS meta_id, `value` FROM"; - $sql .= " `record` INNER JOIN `metadatas` USING(`record_id`)"; - $sql .= " WHERE " . join(" AND ", $selectRecordClauses); + $sql = "SELECT `r1`.`record_id`, `meta_struct_id`, `metadatas`.`id` AS meta_id, `value` FROM\n"; + $sql .= " (SELECT `record_id` FROM `record` WHERE ".join(" AND ", $selectRecordsClauses)." LIMIT ".$this->bulk.") AS `r1`\n"; + $sql .= " LEFT JOIN `metadatas` ON(`metadatas`.`record_id`=`r1`.`record_id`\n"; + $sql .= " AND " . $selectFieldsClause . ")\n"; $sql .= " ORDER BY `record_id` ASC"; $this->selectRecordsSql = $sql; } public function run() { - $cnx = $this->databox->get_connection(); - $stmt = $cnx->executeQuery($this->selectRecordsSql, $this->selectRecordParams); - - $currentRid = '?'; $this->recordsDone = 0; - $this->notTranslated = []; - $this->incompletelyTranslated = []; - $this->fullyTranslated = []; - - $metas = $emptyValues = array_map(function () { - return []; - }, array_flip($this->selectRecordFieldIds)); - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - if ($currentRid == '?') { - $currentRid = $row['record_id']; + + $stmt = $this->databox->get_connection()->prepare($this->selectRecordsSql); + + +// $metas = $emptyValues = array_map(function () { +// return []; +// }, array_flip($this->selectRecordFieldIds)); + + $minrid = 0; + do { + $nrows = 0; + $currentRid = '?'; + $metas = []; + + $this->selectRecordParams[':minrid'] = $minrid; + $stmt->execute($this->selectRecordParams); + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $nrows++; + if ($currentRid == '?') { + $currentRid = $row['record_id']; + } + if ($row['record_id'] !== $currentRid) { + // change record + $this->doRecord($currentRid, $metas); // flush previous record + $currentRid = $row['record_id']; + // $metas = $emptyValues; + $metas = []; + } + if ($row['meta_struct_id'] !== null) { // left join : a record may not have any required field + if (!array_key_exists($row['meta_struct_id'], $metas)) { + $metas[$row['meta_struct_id']] = []; + } + $metas[$row['meta_struct_id']][$row['meta_id']] = $row['value']; + } } - if ($row['record_id'] !== $currentRid) { - // change record - $this->doRecord($currentRid, $metas); // flush previous record - $currentRid = $row['record_id']; - $metas = $emptyValues; + if ($currentRid !== '?') { + $this->doRecord($currentRid, $metas); // flush last record } - $metas[$row['meta_struct_id']][$row['meta_id']] = $row['value']; - } - if($currentRid !== '?') { - $this->doRecord($currentRid, $metas); // flush last record + $stmt->closeCursor(); + $minrid = $currentRid; } - - $stmt->closeCursor(); + while($nrows > 0); // condensed report // if($this->globalConfiguration->getReportFormat() === 'condensed') { $this->output->writeln(sprintf("%d records done.", $this->recordsDone)); - if(!empty($this->notTranslated)) { - ksort($this->notTranslated, SORT_STRING|SORT_FLAG_CASE); + if(!empty($this->condensedReportCounts[self::CONDENSED_REPORT_NOT_TRANSLATED])) { + ksort($this->condensedReportCounts[self::CONDENSED_REPORT_NOT_TRANSLATED], SORT_STRING|SORT_FLAG_CASE); $this->output->writeln("Not translated terms:"); - foreach ($this->notTranslated as $term => $n) { + foreach ($this->condensedReportCounts[self::CONDENSED_REPORT_NOT_TRANSLATED] as $term => $n) { $this->output->writeln(sprintf(" - \"%s\" (%d times)", $term, $n)); } } - if(!empty($this->incompletelyTranslated)) { - ksort($this->incompletelyTranslated, SORT_STRING|SORT_FLAG_CASE); + if(!empty($this->condensedReportCounts[self::CONDENSED_REPORT_INCOMPLETELY_TRANSLATED])) { + ksort($this->condensedReportCounts[self::CONDENSED_REPORT_INCOMPLETELY_TRANSLATED], SORT_STRING|SORT_FLAG_CASE); $this->output->writeln("Incompletely translated terms:"); - foreach ($this->incompletelyTranslated as $term => $n) { + foreach ($this->condensedReportCounts[self::CONDENSED_REPORT_INCOMPLETELY_TRANSLATED] as $term => $n) { $this->output->writeln(sprintf(" - \"%s\" (%d times)", $term, $n)); } } - if(!empty($this->fullyTranslated)) { - ksort($this->fullyTranslated, SORT_STRING|SORT_FLAG_CASE); + if(!empty($this->condensedReportCounts[self::CONDENSED_REPORT_FULLY_TRANSLATED])) { + ksort($this->condensedReportCounts[self::CONDENSED_REPORT_FULLY_TRANSLATED], SORT_STRING|SORT_FLAG_CASE); $this->output->writeln("Fully translated terms:"); - foreach ($this->fullyTranslated as $term => $n) { + foreach ($this->condensedReportCounts[self::CONDENSED_REPORT_FULLY_TRANSLATED] as $term => $n) { $this->output->writeln(sprintf(" - \"%s\" (%d times)", $term, $n)); } } } } - private function doRecord($record_id, $metas) + private function doRecord(string $record_id, array $metas) { $reportFormat = $this->globalConfiguration->getReportFormat(); - if($reportFormat !== 'condensed') { - $this->output->writeln(sprintf("record id: %s", $record_id)); + $this->output->writeln(sprintf("\trecord id: %s", $record_id)); } - $source_field_id = $this->source_field['id']; $meta_to_delete = []; // key = id, to easily keep unique $meta_to_add = []; - if ($this->cleanupDestination) { - foreach ($this->destination_fields as $lng => $destination_field) { - $destination_field_id = $destination_field['id']; - foreach ($metas[$destination_field_id] as $meta_id => $value) { - $meta_to_delete[$meta_id] = $value; - } - unset($meta_id, $value); - } - unset($lng, $destination_field, $destination_field_id); - } - - // loop on every value of the "source_field" + // play all actions // - foreach ($metas[$source_field_id] as $source_meta_id => $source_value) { - - $t = $this->splitTermAndContext($source_value); - $q = '@w=\'' . \thesaurus::xquery_escape($this->unicode->remove_indexer_chars($t[0])) . '\''; - if ($t[1]) { - $q .= ' and @k=\'' . \thesaurus::xquery_escape($this->unicode->remove_indexer_chars($t[1])) . '\''; - } - if(!is_null($this->source_field['lng'])) { - $q .= ' and @lng=\'' . \thesaurus::xquery_escape($this->source_field['lng']) . '\''; - } - $q = '//sy[' . $q . ']/../sy'; - unset($t); - - // loop on every tbranch (one field may be linked to many branches) - // - $translations = []; // ONE translation per lng (first found in th) - /** @var DOMNode $tbranch */ - foreach ($this->tbranches as $tbranch) { - if (!($nodes = $this->xpathTh->query($q, $tbranch))) { - $this->output->writeln(sprintf(" - \"%s\" xpath error on (%s), ignored.", $source_value, $q)); - continue; - } - - // loop on every synonym - // - /** @var DOMElement $node */ - foreach ($nodes as $node) { - $lng = $node->getAttribute('lng'); - - // ignore synonyms not in one of the "destination_field" languages - // - if (!array_key_exists($lng, $this->destination_fields)) { - continue; - } - - $translated_value = $node->getAttribute('v'); - - $destination_field_id = $this->destination_fields[$lng]['id']; - if (!array_key_exists($lng, $translations)) { - if (($destination_meta_id = array_search($translated_value, $metas[$destination_field_id])) === false) { - $translations[$lng] = [ - 'val' => $translated_value, - 'id' => null, - 'msg' => sprintf(" --> %s", $this->destination_fields[$lng]['name']) - ]; - $meta_to_add[$destination_field_id][] = $translated_value; - } - else { - $translations[$lng] = [ - 'val' => $translated_value, - 'id' => $destination_meta_id, - 'msg' => sprintf("already in %s", $this->destination_fields[$lng]['name']) - ]; - unset($meta_to_delete[$destination_meta_id]); - } - unset($destination_meta_id); - } - unset($lng, $destination_field_id, $translated_value); - } - unset($nodes, $node, $tbranch); - } - unset($q); - - // cleanup source - // - if (empty($translations)) { - if($reportFormat === 'all') { - $this->output->writeln(sprintf(" - \"%s\" : no translation found.", $source_value)); - } - $this->addToCondensedReport($source_value, $this->notTranslated); + foreach($this->actions as $action_name => $action) { + if($reportFormat !== 'condensed') { + $this->output->writeln(sprintf("\t\tplaying action \"%s\"", $action_name)); } - else if (count($translations) < count($this->destination_fields)) { - if(in_array($reportFormat, ['all', 'translated'])) { - $this->output->writeln(sprintf(" - \"%s\" : incomplete translation.", $source_value)); - } - $this->addToCondensedReport($source_value, $this->incompletelyTranslated); - } - else { - // complete translation (all target lng) - if(in_array($reportFormat, ['all', 'translated'])) { - $this->output->writeln(sprintf(" - \"%s\" :", $source_value)); - } - $this->addToCondensedReport($source_value, $this->fullyTranslated); - - if ($this->cleanupSource === self::CLEANUP_SOURCE_IF_TRANSLATED) { - // do NOT delete the source term if one translation found it as already present as destination (possible if source=destination) - $used = false; - foreach($translations as $l => $t) { - if($t['id'] === $source_meta_id) { - $used = true; - break; - } - } - if(!$used) { - $meta_to_delete[$source_meta_id] = $metas[$source_field_id][$source_meta_id]; - } - } - } - - if(in_array($reportFormat, ['all', 'translated'])) { - foreach ($translations as $lng => $translation) { - $this->output->writeln(sprintf(" - [%s] \"%s\" %s", $lng, $translation['val'], $translation['msg'])); - } - } - - if ($this->cleanupSource === self::ALWAYS_CLEANUP_SOURCE) { - // do NOT delete the source term if one translation found it as already present as destination (possible if source=destination) - $used = false; - foreach($translations as $l => $t) { - if($t['id'] === $source_meta_id) { - $used = true; - break; - } - } - if(!$used) { - $meta_to_delete[$source_meta_id] = $metas[$source_field_id][$source_meta_id]; - } - } - - unset($lng, $translations, $translation); + $action->doAction($metas, $meta_to_delete, $meta_to_add); } - unset($metas, $source_meta_id, $source_value); + unset($metas); $actions = []; @@ -494,36 +326,29 @@ private function doRecord($record_id, $metas) $this->recordsDone++; } - private function addToCondensedReport($term, &$where) + public function addToCondensedReport(string $term, string $where) { if($this->globalConfiguration->getReportFormat() !== 'condensed') { return; } - if(!array_key_exists($term, $where)) { - $where[$term] = 0; + if(!array_key_exists($where, $this->condensedReportCounts)) { + $this->condensedReportCounts[$where] = []; } - $where[$term]++; + if(!array_key_exists($term, $this->condensedReportCounts[$where])) { + $this->condensedReportCounts[$where][$term] = 0; + } + $this->condensedReportCounts[$where][$term]++; } - private function splitTermAndContext($word) - { - $term = trim($word); - $context = ''; - if (($po = strpos($term, '(')) !== false) { - if (($pc = strpos($term, ')', $po)) !== false) { - $context = trim(substr($term, $po + 1, $pc - $po - 1)); - $term = trim(substr($term, 0, $po)); - } - else { - $context = trim(substr($term, $po + 1)); - $term = trim(substr($term, 0, $po)); - } - } - return [$term, $context]; + /** + * @return GlobalConfiguration + */ + public function getGlobalConfiguration(): GlobalConfiguration + { + return $this->globalConfiguration; } - /** * @return string[] */ @@ -553,5 +378,16 @@ public function isActive(): bool return $this->active; } + public function getDataboxField(string $fieldIdOrName) + { + return $this->globalConfiguration->getField($this->databox->get_sbas_id(), $fieldIdOrName); + } + /** + * @return DOMXpath|false|thesaurus_xpath + */ + public function getXpathTh() + { + return $this->xpathTh; + } } diff --git a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/TranslateCommand.php b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/TranslateCommand.php index 1758d50c82..b5a43ac9cb 100644 --- a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/TranslateCommand.php +++ b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/TranslateCommand.php @@ -94,22 +94,7 @@ protected function doExecute(InputInterface $input, OutputInterface $output) */ foreach ($this->config->getJobs() as $jobName => $job) { $output->writeln(""); - $output->writeln(sprintf("======== Playing job %s ========", $jobName)); - - if(!$job->isValid()) { - $output->writeln("Configuration error(s)... :"); - foreach ($job->getErrors() as $err) { - $output->writeln(sprintf(" - %s", $err)); - } - $output->writeln("...Job ignored"); - - continue; - } - - if(!$job->isActive()) { - $output->writeln(sprintf("job is inactive, skipped.")); - continue; - } + $output->writeln(sprintf("Playing job \"%s\"", $jobName)); $job->run(); } diff --git a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/doc/configuration-sample.yml b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/doc/configuration-sample.yml index dd4dfe5224..96afbcb37a 100644 --- a/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/doc/configuration-sample.yml +++ b/lib/Alchemy/Phrasea/Command/Thesaurus/Translator/doc/configuration-sample.yml @@ -3,45 +3,40 @@ translator: jobs: # - # first job : translate EN keywords to FR and DE - # then change status-bit to elect record for job 2 - keywords_EN_to_FR_DE: + # - translate EN keywords to FR and EN + # nb: since we clean the destination fields, we MUST (re)write EN to EN + # - add country to keywords, both FR/EN + keywords: active: true databox: my_databox if_collection: to_translate - if_status: xx1xxxx - source_field: KeywordsEN - source_lng: en - destination_fields: - - fr:keywordsFR - - de:keywordsDE - cleanup_source: if_translated - # job 1 cleans the destination fields - cleanup_destination: true - # do NOT change collection because job 2 looks here... - #-- set_collection: online - # ... but change status - set_status: 010xxxx + if_status: x1xxxx + actions: - # - # second (last) job : translate EN country to FR and DE, add also as keywords ! - # - country_EN_to_FR_DE: - active: true - databox: my_databox - # same collection as job 1 - if_collection: to_translate - # status was changet by job 1 - if_status: 010xxxx - source_field: CountryEN - source_lng: en - # add translated country to the keywords - destination_fields: - - fr:keywordsFR - - de:keywordsDE - cleanup_source: if_translated - # job 2 must NOT erase what job 1 did - cleanup_destination: false - # the last job will change collection + KeywordsENtoFREN: + active: true + source_field: KeywordsEN + source_lng: en + destination_fields: + - fr:keywordsFR + - en:keywordsEN + cleanup_source: if_translated + # action 1 cleans the destination fields + cleanup_destination: true + + CountryENtoKeywordsFREN: + active: true + source_field: CountryEN + source_lng: en + # add translated country to the keywords + destination_fields: + - fr:keywordsFR + - en:keywordsEN + cleanup_source: if_translated + # action 2 must NOT erase what action 1 did + cleanup_destination: false + + # end of job : change coll status + set_status: 10xxxx set_collection: online - set_status: 100xxxx + diff --git a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php index 728cb743a3..25263d96ff 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V1Controller.php @@ -1665,10 +1665,12 @@ private function listRecord(Request $request, record_adapter $record) $technicalInformation[] = ['name' => $name, 'value' => $value]; } + $resourceId = $this->getResourceIdResolver()($record); + $data = [ 'databox_id' => $record->getDataboxId(), 'record_id' => $record->getRecordId(), - 'resource_id' => ($this->getResourceIdResolver())($record), + 'resource_id' => $resourceId, 'mime_type' => $record->getMimeType(), 'title' => $record->get_title(['encode'=> record_adapter::ENCODE_NONE]), 'original_name' => $record->get_original_name(), @@ -1722,11 +1724,13 @@ private function listStory(Request $request, record_adapter $story) return $field->get_serialized_values(); }; + $resourceId = $this->getResourceIdResolver()($story); + return [ '@entity@' => self::OBJECT_TYPE_STORY, 'databox_id' => $story->getDataboxId(), 'story_id' => $story->getRecordId(), - 'resource_id' => ($this->getResourceIdResolver())($story), + 'resource_id' => $resourceId, 'cover_record_id' => $story->getCoverRecordId(), 'updated_on' => $story->getUpdated()->format(DATE_ATOM), 'created_on' => $story->getCreated()->format(DATE_ATOM), diff --git a/lib/Alchemy/Phrasea/Controller/Api/V3/V3ResultHelpers.php b/lib/Alchemy/Phrasea/Controller/Api/V3/V3ResultHelpers.php index f2cc28e482..51183f7bfc 100644 --- a/lib/Alchemy/Phrasea/Controller/Api/V3/V3ResultHelpers.php +++ b/lib/Alchemy/Phrasea/Controller/Api/V3/V3ResultHelpers.php @@ -151,10 +151,12 @@ public function listRecord(Request $request, record_adapter $record, ACL $aclfor $technicalInformation[] = ['name' => $name, 'value' => $value]; } + $resourceId = $this->getResourceIdResolver()($record); + $data = [ 'databox_id' => $record->getDataboxId(), 'record_id' => $record->getRecordId(), - 'resource_id' => ($this->getResourceIdResolver())($record), + 'resource_id' => $resourceId, 'mime_type' => $record->getMimeType(), 'title' => $record->get_title(['encode'=> record_adapter::ENCODE_NONE]), 'original_name' => $record->get_original_name(), diff --git a/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php b/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php index 85cf5195d0..29cfe6d77e 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/LazaretController.php @@ -132,6 +132,38 @@ public function addElement(Request $request, $file_id) /** @var LazaretManipulator $lazaretManipulator */ $lazaretManipulator = $this->app['manipulator.lazaret']; + //Check if the chosen record is eligible to the substitution + $recordId = $request->request->get('record_id'); + /** @var LazaretFile $lazaretFile */ + $metadatasToSet = []; + if($recordId !== "" && !!$request->request->get('copy_meta', false)) { + + $substitutedRecord = null; + + $lazaretFile = $this->getLazaretFileRepository()->find($file_id); + foreach ($lazaretFile->getRecordsToSubstitute($this->app) as $r) { + if ($r->getRecordId() === (int)$recordId) { + $substitutedRecord = $r; + break; + } + } + if (!$substitutedRecord) { + $ret['message'] = $this->app->trans('The destination record provided is not allowed'); + + return $this->app->json($ret); + } + + $fieldsToCopy = []; + foreach ($substitutedRecord->getDatabox()->get_meta_structure() as $df) { + if(!$df->is_readonly()) { + $fieldsToCopy[] = $df->get_name(); + } + } + foreach ($substitutedRecord->getCaption($fieldsToCopy) as $k=>$v) { + $metadatasToSet[] = ['field_name' => $k, 'value' => $v]; + } + } + $ret = $lazaretManipulator->add($file_id, $keepAttributes, $attributesToKeep); try{ @@ -140,7 +172,13 @@ public function addElement(Request $request, $file_id) $postStatus = (array) $request->request->get('status'); // update status $this->updateRecordStatus($record, $postStatus); - }catch(\Exception $e){ + + if(!empty($metadatasToSet)) { + $actions = json_decode(json_encode(['metadatas' => $metadatasToSet])); + $record->setMetadatasByActions($actions); + } + } + catch(\Exception $e){ $ret['message'] = $this->app->trans('An error occured when wanting to change status!'); } @@ -229,16 +267,14 @@ public function acceptElement(Request $request, $file_id) return $this->app->json($ret); } - $found = false; //Check if the chosen record is eligible to the substitution + $found = false; foreach ($lazaretFile->getRecordsToSubstitute($this->app) as $record) { - if ($record->getRecordId() !== (int) $recordId) { - continue; + if ($record->getRecordId() === (int) $recordId) { + $found = true; + break; } - - $found = true; - break; } if (!$found) { diff --git a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php index 9c522a6ee5..d6eb522fb7 100644 --- a/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php +++ b/lib/Alchemy/Phrasea/Controller/Prod/ToolsController.php @@ -552,25 +552,13 @@ public function autoSubtitleAction(Request $request) (int)$request->request->get("record_id") ); - $permalinkUrl = ''; - $conf = $this->getConf(); - - // if subdef_source not set, by default use the preview permalink - $subdefSource = $conf->get(['externalservice', 'ginger', 'AutoSubtitling', 'subdef_source']) ?: 'preview'; - - if ($this->isPhysicallyPresent($record, $subdefSource) && ($previewLink = $record->get_subdef($subdefSource)->get_permalink()) != null) { - $permalinkUrl = $previewLink->get_url()->__toString(); - } $this->dispatch( PhraseaEvents::RECORD_AUTO_SUBTITLE, new RecordAutoSubtitleEvent( $record, - $permalinkUrl, $request->request->get("subtitle_language_source"), - $request->request->get("meta_struct_id_source"), - $request->request->get("subtitle_language_destination"), - $request->request->get("meta_struct_id_destination") + json_decode($request->request->get("subtitle_destination"), true) ) ); @@ -629,7 +617,8 @@ public function videoEditorAction(Request $request) 'videoEditorConfig' => $conf->get(['video-editor']), 'metadatas' => $metadatas, 'JSonFields' => json_encode($JSFields), - 'videoTextTrackFields' => $videoTextTrackFields + 'videoTextTrackFields' => $videoTextTrackFields, + 'languages' => $this->languageList() ]); } @@ -644,4 +633,42 @@ private function isPhysicallyPresent(record_adapter $record, $subdefName) return false; } + + private function languageList() + { + return [ + 'af-ZA' => 'af-ZA Afrikaans (South Africa)', 'am-ET' => 'am-ET Amharic (Ethiopia)', + 'ar-DZ' => 'ar-DZ Arabic (Algeria)', 'ar-BH' => 'ar-BH Arabic (Bahrain)', + 'ar-EG' => 'ar-EG Arabic (Egypt)', 'ar-IQ' => 'ar-IQ Arabic (Iraq)', + 'ar-IL' => 'ar-IL Arabic (Israel)', 'ar-YE' => 'ar-YE Arabic (Yemen)', + 'eu-ES' => 'eu-ES Basque (Spain)', 'bn-BD' => 'bn-BD Bengali (Bangladesh)', + 'bn-IN' => 'bn-IN Bengali (India)', 'bg-BG' => 'bg-BG Bulgarian (Bulgaria)', + 'ca-ES' => 'ca-ES Catalan (Spain)', 'yue-Hant-HK' => 'yue-Hant-HK Chinese, Cantonese (Traditional, Hong Kong)', + 'cmn-Hans-CN' => 'cmn-Hans-CN Chinese, Mandarin (Simplified, China)', 'hr-HR' => 'hr-HR Croatian (Croatia)', + 'cs-CZ' => 'cs-CZ Czech (Czech Republic)', 'da-DK' => 'da-DK Danish (Denmark)', + 'nl-NL' => 'nl-NL Dutch (Netherlands)', 'nl-BE' => 'nl-BE Dutch (Belgium)', + 'en-AU' => 'en-AU English (Australia)', 'en-CA' => 'en-CA English (Canada)', + 'en-GB' => 'en-GB English (United Kingdom)', 'en-US' => 'en-US English (United States)', + 'fr-CA' => 'fr-CA French (Canada)', 'fr-FR' => 'fr-FR French (France)', + 'fr-BE' => 'fr-BE French (Belgium)', 'fr-CH' => 'fr-CH French (Switzerland)', + 'ka-GE' => 'ka-GE Georgian (Georgia)', 'de-DE' => 'de-DE German (Germany)', + 'el-GR' => 'el-GR Greek (Greece)', 'he-IL' => 'he-IL Hebrew (Israel)', + 'hi-IN' => 'hi-IN Hindi (India)', 'hu-HU' => 'hu-HU Hungarian (Hungary)', + 'is-IS' => 'is-IS Icelandic (Iceland)', 'id-ID' => 'id-ID Indonesian (Indonesia)', + 'it-IT' => 'it-IT Italian (Italy)', 'ja-JP' => 'ja-JP Japanese (Japan)', + 'ko-KR' => 'ko-KR Korean (South Korea)', 'lo-LA' => 'lo-LA Lao (Laos)', + 'lt-LT' => 'lt-LT Lithuanian (Lithuania)', 'ms-MY' => 'ms-MY Malay (Malaysia)', + 'ne-NP' => 'ne-NP Nepali (Nepal)', 'nb-NO' => 'nb-NO Norwegian Bokmål (Norway)', + 'pl-PL' => 'pl-PL Polish (Poland)', 'pt-BR' => 'pt-BR Portuguese (Brazil)', + 'pt-PT' => 'pt-PT Portuguese (Portugal)', 'ro-RO' => 'ro-RO Romanian (Romania)', + 'ru-RU' => 'ru-RU Russian (Russia)', 'sr-RS' => 'sr-RS Serbian (Serbia)', + 'sk-SK' => 'sk-SK Slovak (Slovakia)', 'sl-SI' => 'sl-SI Slovenian (Slovenia)', + 'es-ES' => 'es-ES Spanish (Spain)', 'sv-SE' => 'sv-SE Swedish (Sweden)', + 'th-TH' => 'th-TH Thai (Thailand)', 'tr-TR' => 'tr-TR Turkish (Turkey)', + 'uk-UA' => 'uk-UA Ukrainian (Ukraine)', 'vi-VN' => 'vi-VN Vietnamese (Vietnam)', + 'et-EE' => 'et-EE Estonian (Estonia)', 'mn-MN' => 'mn-MN Mongolian (Mongolia)', + 'uz-UZ' => 'uz-UZ Uzbek (Uzbekistan)' + + ]; + } } diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php b/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php index 7ff511332a..3ca74cac8d 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Api/V2.php @@ -104,13 +104,16 @@ public function connect(Application $app) $controllers->match('/search/', 'controller.api.v2.search:searchAction'); + /** @uses LazaretController::quarantineItemEmptyAction */ $controllers->delete('/quarantine/', 'controller.api.v2.lazaret:quarantineItemEmptyAction') ->bind('api_v2_quarantine_empty'); + /** @uses LazaretController::quarantineItemDeleteAction */ $controller = $controllers->delete('/quarantine/item/{lazaret_id}/', 'controller.api.v2.lazaret:quarantineItemDeleteAction') ->bind('api_v2_quarantine_item_delete'); $this->addQuarantineMiddleware($controller); + /** @uses LazaretController::quarantineItemAddAction */ $controller = $controllers->post('/quarantine/item/{lazaret_id}/add/', 'controller.api.v2.lazaret:quarantineItemAddAction') ->bind('api_v2_quarantine_item_add'); $this->addQuarantineMiddleware($controller); diff --git a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php index 53c2804fce..4b9e1d1932 100644 --- a/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php +++ b/lib/Alchemy/Phrasea/ControllerProvider/Prod/Lazaret.php @@ -56,32 +56,40 @@ public function connect(Application $app) $firewall->requireRight(\ACL::CANADDRECORD); }); + /** @uses LazaretController::listElement */ $controllers->get('/', 'controller.prod.lazaret:listElement') ->bind('lazaret_elements'); + /** @uses LazaretController::getElement */ $controllers->get('/{file_id}/', 'controller.prod.lazaret:getElement') ->assert('file_id', '\d+') ->bind('lazaret_element'); + /** @uses LazaretController::addElement */ $controllers->post('/{file_id}/force-add/', 'controller.prod.lazaret:addElement') ->assert('file_id', '\d+') ->bind('lazaret_force_add'); + /** @uses LazaretController::denyElement */ $controllers->post('/{file_id}/deny/', 'controller.prod.lazaret:denyElement') ->assert('file_id', '\d+') ->bind('lazaret_deny_element'); + /** @uses LazaretController::emptyLazaret */ $controllers->post('/empty/', 'controller.prod.lazaret:emptyLazaret') ->bind('lazaret_empty'); + /** @uses LazaretController::acceptElement */ $controllers->post('/{file_id}/accept/', 'controller.prod.lazaret:acceptElement') ->assert('file_id', '\d+') ->bind('lazaret_accept'); + /** @uses LazaretController::thumbnailElement */ $controllers->get('/{file_id}/thumbnail/', 'controller.prod.lazaret:thumbnailElement') ->assert('file_id', '\d+') ->bind('lazaret_thumbnail'); + /** @uses LazaretController::getDestinationStatus */ $controllers->get('/{databox_id}/{record_id}/status', 'controller.prod.lazaret:getDestinationStatus') ->assert('databox_id', '\d+') ->assert('record_id', '\d+') diff --git a/lib/Alchemy/Phrasea/Core/Event/Record/RecordAutoSubtitleEvent.php b/lib/Alchemy/Phrasea/Core/Event/Record/RecordAutoSubtitleEvent.php index 307a54e474..37b12fb4e0 100644 --- a/lib/Alchemy/Phrasea/Core/Event/Record/RecordAutoSubtitleEvent.php +++ b/lib/Alchemy/Phrasea/Core/Event/Record/RecordAutoSubtitleEvent.php @@ -10,24 +10,17 @@ class RecordAutoSubtitleEvent extends RecordEvent private $metaStructureIdSource; private $languageDestination; private $metaStructureIdDestination; - private $permalinkUrl; public function __construct( RecordInterface $record, - $permalinkUrl, $languageSource, - $metaStructureIdSource, - $languageDestination, - $metaStructureIdDestination + $languageDestination ) { parent::__construct($record); $this->languageSource = $languageSource; - $this->metaStructureIdSource = $metaStructureIdSource; $this->languageDestination = $languageDestination; - $this->metaStructureIdDestination = $metaStructureIdDestination; - $this->permalinkUrl = $permalinkUrl; } public function getLanguageSource() @@ -35,11 +28,6 @@ public function getLanguageSource() return $this->languageSource; } - public function getMetaStructureIdSource() - { - return $this->metaStructureIdSource; - } - public function getLanguageDestination() { return $this->languageDestination; @@ -49,9 +37,4 @@ public function getMetaStructureIdDestination() { return $this->metaStructureIdDestination; } - - public function getPermalinkUrl() - { - return $this->permalinkUrl; - } } diff --git a/lib/Alchemy/Phrasea/Search/RecordTransformer.php b/lib/Alchemy/Phrasea/Search/RecordTransformer.php index 9f6a715e93..51fecf87de 100644 --- a/lib/Alchemy/Phrasea/Search/RecordTransformer.php +++ b/lib/Alchemy/Phrasea/Search/RecordTransformer.php @@ -58,10 +58,13 @@ public function transform($recordView) /** @var RecordView $recordView */ $record = $recordView->getRecord(); + $resolver = $this->resourceIdResolver; + $resourceId = $resolver($record); + return [ 'databox_id' => $record->getDataboxId(), 'record_id' => $record->getRecordId(), - 'resource_id' => ($this->resourceIdResolver)($record), + 'resource_id' => $resourceId, 'mime_type' => $record->getMimeType(), 'title' => $record->get_title(['encode'=> record_adapter::ENCODE_NONE]), 'original_name' => $record->get_original_name(), diff --git a/lib/Alchemy/Phrasea/Search/StoryTransformer.php b/lib/Alchemy/Phrasea/Search/StoryTransformer.php index 4fb17274b6..f2e7739854 100644 --- a/lib/Alchemy/Phrasea/Search/StoryTransformer.php +++ b/lib/Alchemy/Phrasea/Search/StoryTransformer.php @@ -49,11 +49,13 @@ public function transform(StoryView $storyView) { $story = $storyView->getStory(); + $resourceId = $this->recordTransformer->getResourceIdResolver()($story); + return [ '@entity@' => 'http://api.phraseanet.com/api/objects/story', 'databox_id' => $story->getDataboxId(), 'story_id' => $story->getRecordId(), - 'resource_id' => ($this->recordTransformer->getResourceIdResolver())($story), + 'resource_id' => $resourceId, 'cover_record_id' => $story->getCoverRecordId(), 'updated_on' => NullableDateTime::format($story->getUpdated()), 'created_on' => NullableDateTime::format($story->getUpdated()), diff --git a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php index 1f84f0c4ec..f211cf8734 100644 --- a/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php +++ b/lib/Alchemy/Phrasea/Twig/PhraseanetExtension.php @@ -62,7 +62,7 @@ public function getGlobals() { return [ // change this version when you change JS file to force the navigation to reload js file - 'assetFileVersion' => 97 + 'assetFileVersion' => 98 ]; } diff --git a/lib/Alchemy/Phrasea/WorkerManager/Subscriber/SubtitleSubscriber.php b/lib/Alchemy/Phrasea/WorkerManager/Subscriber/SubtitleSubscriber.php index 83318bcbb4..b6ab7c4b28 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Subscriber/SubtitleSubscriber.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Subscriber/SubtitleSubscriber.php @@ -27,23 +27,25 @@ public function __construct(callable $repoWorkerJobLocator, MessagePublisher $me public function onRecordAutoSubtitle(RecordAutoSubtitleEvent $event) { - $data = [ - "databoxId" => $event->getRecord()->getDataboxId(), - "recordId" => $event->getRecord()->getRecordId(), - "permalinkUrl" => $event->getPermalinkUrl(), - "languageSource" => $event->getLanguageSource(), - "metaStructureIdSource" => $event->getMetaStructureIdSource(), - "languageDestination" => $event->getLanguageDestination(), - "metaStructureIdDestination" => $event->getMetaStructureIdDestination(), - "type" => MessagePublisher::SUBTITLE_TYPE // used to specify the final Q to publish message - ]; + if (!empty($event->getLanguageDestination())) { + $data = [ + "databoxId" => $event->getRecord()->getDataboxId(), + "recordId" => $event->getRecord()->getRecordId(), + "languageSource" => $event->getLanguageSource(), + "languageDestination" => $event->getLanguageDestination(), + "type" => MessagePublisher::SUBTITLE_TYPE // used to specify the final Q to publish message + ]; - $payload = [ - 'message_type' => MessagePublisher::MAIN_QUEUE_TYPE, - 'payload' => $data - ]; + $payload = [ + 'message_type' => MessagePublisher::MAIN_QUEUE_TYPE, + 'payload' => $data + ]; + + $this->messagePublisher->publishMessage($payload, MessagePublisher::MAIN_QUEUE_TYPE); + } else { + $this->messagePublisher->pushLog("There is no language destination selected when trying do do autosubtitle!"); + } - $this->messagePublisher->publishMessage($payload, MessagePublisher::MAIN_QUEUE_TYPE); } public static function getSubscribedEvents() diff --git a/lib/Alchemy/Phrasea/WorkerManager/Worker/SubtitleWorker.php b/lib/Alchemy/Phrasea/WorkerManager/Worker/SubtitleWorker.php index 753b9c4c16..d170e6d694 100644 --- a/lib/Alchemy/Phrasea/WorkerManager/Worker/SubtitleWorker.php +++ b/lib/Alchemy/Phrasea/WorkerManager/Worker/SubtitleWorker.php @@ -29,6 +29,14 @@ class SubtitleWorker implements WorkerInterface private $repoWorker; private $dispatcher; + /** + * @var Client + */ + private $happyscribeClient; + private $happyscribeToken; + private $extension; + private $workerRunningJob; + private $transcriptionsId; public function __construct(WorkerRunningJobRepository $repoWorker, PropertyAccess $conf, callable $appboxLocator, LoggerInterface $logger, EventDispatcherInterface $dispatcher) { @@ -41,16 +49,17 @@ public function __construct(WorkerRunningJobRepository $repoWorker, PropertyAcce public function process(array $payload) { - $gingaBaseurl = $this->conf->get(['externalservice', 'ginger', 'AutoSubtitling', 'service_base_url']); - $gingaToken = $this->conf->get(['externalservice', 'ginger', 'AutoSubtitling', 'token']); - $gingaTranscriptFormat = $this->conf->get(['externalservice', 'ginger', 'AutoSubtitling', 'transcript_format']); + $this->happyscribeToken = $this->conf->get(['externalservice', 'happyscribe', 'token']); + $organizationId = $this->conf->get(['externalservice', 'happyscribe', 'organization_id']); + $happyscribeTranscriptFormat = $this->conf->get(['externalservice', 'happyscribe', 'transcript_format'], 'vtt'); - if (!$gingaBaseurl || !$gingaToken || !$gingaTranscriptFormat) { + if (!$organizationId || !$this->happyscribeToken ) { $this->logger->error("External service Ginga not set correctly in configuration.yml"); return 0; } - $workerRunningJob = null; + + $this->workerRunningJob = null; $em = $this->repoWorker->getEntityManager(); $em->beginTransaction(); @@ -62,8 +71,8 @@ public function process(array $payload) ]; $date = new \DateTime(); - $workerRunningJob = new WorkerRunningJob(); - $workerRunningJob + $this->workerRunningJob = new WorkerRunningJob(); + $this->workerRunningJob ->setDataboxId($payload['databoxId']) ->setRecordId($payload['recordId']) ->setWork(MessagePublisher::SUBTITLE_TYPE) @@ -73,7 +82,7 @@ public function process(array $payload) ->setPayload($message) ; - $em->persist($workerRunningJob); + $em->persist($this->workerRunningJob); $em->flush(); $em->commit(); @@ -81,223 +90,171 @@ public function process(array $payload) $em->rollback(); } - switch ($gingaTranscriptFormat) { - case 'text/srt,': - $extension = 'srt'; - break; - case 'text/plain': - $extension = 'txt'; - break; - case 'application/json': - $extension = 'json'; - break; - case 'text/vtt': - default: - $extension = 'vtt'; - break; + if (in_array(strtolower($happyscribeTranscriptFormat), ['srt', 'txt', 'json', 'vtt'])) { + $this->extension = strtolower($happyscribeTranscriptFormat); + } else { + $this->extension = 'vtt'; } - $languageSource = $this->getLanguageFormat($payload['languageSource']); - $languageDestination = $this->getLanguageFormat($payload['languageDestination']); - $record = $this->getApplicationBox()->get_databox($payload['databoxId'])->get_record($payload['recordId']); - $languageSourceFieldName = $record->getDatabox()->get_meta_structure()->get_element($payload['metaStructureIdSource'])->get_name(); - - $subtitleSourceTemporaryFile = $this->getTemporaryFilesystem()->createTemporaryFile("subtitle", null, $extension); - $gingerClient = new Client(); - - // if the languageSourceFieldName do not yet exist, first generate subtitle for it - if ($payload['permalinkUrl'] != '' && !$record->get_caption()->has_field($languageSourceFieldName)) { - try { - $response = $gingerClient->post($gingaBaseurl.'/media/', [ - 'headers' => [ - 'Authorization' => 'token '.$gingaToken - ], - 'json' => [ - 'url' => $payload['permalinkUrl'], - 'language' => $languageSource - ] - ]); - } catch(\Exception $e) { - $this->logger->error($e->getMessage()); - $this->jobFinished($workerRunningJob); - - return 0; - } - if ($response->getStatusCode() !== 201) { - $this->logger->error("response status /media/ : ". $response->getStatusCode()); - $this->jobFinished($workerRunningJob); + // if subdef_source not set, by default use the preview permalink + $subdefSource = $this->conf->get(['externalservice', 'happyscribe', 'subdef_source']) ?: 'preview'; - return 0; - } + $tmpUrl = ''; + if ($this->isPhysicallyPresent($record, $subdefSource) && ($previewLink = $record->get_subdef($subdefSource)->get_permalink()) != null) { + $tmpUrl = $previewLink->get_url()->__toString(); + } - $responseMediaBody = $response->getBody()->getContents(); - $responseMediaBody = json_decode($responseMediaBody,true); + $this->happyscribeClient = new Client(); - $checkStatus = true; - do { - // first wait 5 second before check subtitling status - sleep(5); - $this->logger->info("bigin to check status"); - try { - $response = $gingerClient->get($gingaBaseurl.'/task/'.$responseMediaBody['task_id'].'/', [ - 'headers' => [ - 'Authorization' => 'token '.$gingaToken - ] - ]); - } catch (\Exception $e) { - $checkStatus = false; + if (!$this->isRemoteFileExist($tmpUrl)) { + $fileName = $record->get_subdef($subdefSource)->get_file(); - break; - } + // first get a signed URL + $responseUpload = $this->happyscribeClient->get('https://www.happyscribe.com/api/v1/uploads/new?filename=' . $fileName, [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ] + ]); - if ($response->getStatusCode() !== 200) { - $checkStatus = false; + if ($responseUpload->getStatusCode() !== 200) { + $this->logger->error("error when uploading file to transcript,response status : ". $responseUpload->getStatusCode()); + $this->jobFinished(); - break; - } + return 0; + } - $responseTaskBody = $response->getBody()->getContents(); - $responseTaskBody = json_decode($responseTaskBody,true); + $responseUploadBody = $responseUpload->getBody()->getContents(); + $responseUploadBody = json_decode($responseUploadBody,true); - } while($responseTaskBody['status'] != 'SUCCESS'); + $tmpUrl = $responseUploadBody['signedUrl']; + $res = $this->happyscribeClient->put($tmpUrl, [ + 'body' => fopen($record->get_subdef($subdefSource)->getRealPath(), 'r') + ]); - if (!$checkStatus) { - $this->logger->error("can't check status"); - $this->jobFinished($workerRunningJob); + if ($res->getStatusCode() !== 200) { + $this->logger->error("error when uploading file to signed url,response status : ". $res->getStatusCode()); + $this->jobFinished(); return 0; } + } - try { - $response = $gingerClient->get($gingaBaseurl.'/media/'.$responseMediaBody['media']['uuid'].'/', [ - 'headers' => [ - 'Authorization' => 'token '.$gingaToken, - 'ACCEPT' => $gingaTranscriptFormat - ], - 'query' => [ - 'language' => $languageSource - ] - ]); - } catch (\Exception $e) { - $this->logger->error($e->getMessage()); - $this->jobFinished($workerRunningJob); + // create a transcription - return 0; - } + try { + $responseTranscription = $this->happyscribeClient->post('https://www.happyscribe.com/api/v1/transcriptions', [ + 'headers' => [ + 'Authorization' => 'Bearer '. $this->happyscribeToken + ], + 'json' => [ + 'transcription' => [ + 'name' => $record->get_title(), + 'is_subtitle' => true, + 'language' => $payload['languageSource'], + 'organization_id' => $organizationId, + 'tmp_url' => $tmpUrl + ] + ] + ]); - if ($response->getStatusCode() !== 200) { - $this->logger->error("response status /media/uuid : ". $response->getStatusCode()); - $this->jobFinished($workerRunningJob); + } catch (\Exception $e) { + $this->logger->error("error when creating transcript : " . $e->getMessage()); + $this->jobFinished(); - return 0; - } + return 0; + } - $transcriptContent = $response->getBody()->getContents(); + if ($responseTranscription->getStatusCode() !== 200) { + $this->logger->error("error when creating transcript,response status : ". $responseTranscription->getStatusCode()); + $this->jobFinished(); - $transcriptContent = preg_replace('/WEBVTT/', 'WEBVTT - with cue identifier', $transcriptContent, 1); + return 0; + } - // save subtitle on temporary file to use to translate if needed - file_put_contents($subtitleSourceTemporaryFile, $transcriptContent); + $responseTranscriptionBody = $responseTranscription->getBody()->getContents(); + $responseTranscriptionBody = json_decode($responseTranscriptionBody,true); + $this->transcriptionsId[] = $transcriptionId = $responseTranscriptionBody['id']; - $metadatas[0] = [ - 'meta_struct_id' => (int)$payload['metaStructureIdSource'], - 'meta_id' => '', - 'value' => $transcriptContent - ]; + // check transcription status + $failureTranscriptMessage = ''; - try { - $record->set_metadatas($metadatas); + do { + // first wait 5 second before check transcript status + sleep(5); + $resCheckTranscript = $this->happyscribeClient->get('https://www.happyscribe.com/api/v1/transcriptions/' . $transcriptionId, [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ] + ]); - // order to write meta in file - $this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META, - new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId())); - } catch (\Exception $e) { - $this->logger->error($e->getMessage()); - $this->jobFinished($workerRunningJob); + if ($resCheckTranscript->getStatusCode() !== 200) { + $this->logger->error("error when checking transcript,response status : ". $responseTranscription->getStatusCode()); + $this->jobFinished(); return 0; } - $this->logger->info("Generate subtitle on language source SUCCESS"); - } elseif ($record->get_caption()->has_field($languageSourceFieldName)) { - // get the source subtitle and save it to a temporary file - $fieldValues = $record->get_caption()->get_field($languageSourceFieldName)->get_values(); - $fieldValue = array_pop($fieldValues); + $resCheckTranscriptBody = $resCheckTranscript->getBody()->getContents(); + $resCheckTranscriptBody = json_decode($resCheckTranscriptBody,true); + $transcriptStatus = $resCheckTranscriptBody['state']; + if (isset($resCheckTranscriptBody['failureMessage'])) { + $failureTranscriptMessage = $resCheckTranscriptBody['failureMessage']; + } - file_put_contents($subtitleSourceTemporaryFile, $fieldValue->getValue()); + } while(!in_array($transcriptStatus, ['automatic_done', 'locked', 'failed'])); + + if ($transcriptStatus != "automatic_done") { + $this->logger->error("error when checking transcript, : " . $failureTranscriptMessage); + $this->jobFinished(); + + return 0; } - if ($payload['metaStructureIdSource'] !== $payload['metaStructureIdDestination']) { - try { - $response = $gingerClient->post($gingaBaseurl.'/translate/', [ - 'headers' => [ - 'Authorization' => 'token '.$gingaToken, - 'ACCEPT' => $gingaTranscriptFormat - ], - 'multipart' => [ - [ - 'name' => 'transcript', - 'contents' => fopen($subtitleSourceTemporaryFile, 'r') - ], - [ - 'name' => 'transcript_format', - 'contents' => $gingaTranscriptFormat, - - ], - [ - 'name' => 'language_in', - 'contents' => $languageSource, - - ], - [ - 'name' => 'language_out', - 'contents' => $languageDestination, - - ] - ] - ]); - } catch(\Exception $e) { - $this->logger->error($e->getMessage()); - $this->jobFinished($workerRunningJob); - return 0; - } + $metadatas = []; - if ($response->getStatusCode() !== 200) { - $this->logger->error("response status /translate/ : ". $response->getStatusCode()); - $this->jobFinished($workerRunningJob); + foreach ($payload['languageDestination'] as $language => $metaStructureIdDestination) { + $languageDestination = strtolower($language); - return 0; + if ($this->getTargetLanguageByCode($payload['languageSource']) == $languageDestination) { + $metadatas[] = [ + 'meta_struct_id' => (int)$metaStructureIdDestination, + 'meta_id' => '', + 'value' => $this->exportTranscription($transcriptionId) + ]; + } else { + $metadatas[] = [ + 'meta_struct_id' => (int)$metaStructureIdDestination, + 'meta_id' => '', + 'value' => $this->translate($transcriptionId, $languageDestination) + ]; } + } - $transcriptContent = $response->getBody()->getContents(); - $transcriptContent = preg_replace('/WEBVTT/', 'WEBVTT - with cue identifier', $transcriptContent, 1); + try { + $record->set_metadatas($metadatas); - $metadatas[0] = [ - 'meta_struct_id' => (int)$payload['metaStructureIdDestination'], - 'meta_id' => '', - 'value' => $transcriptContent - ]; + // order to write meta in file + $this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META, + new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId())); + } catch (\Exception $e) { + $this->logger->error($e->getMessage()); + $this->jobFinished(); - try { - $record->set_metadatas($metadatas); + return 0; + } - // order to write meta in file - $this->dispatcher->dispatch(WorkerEvents::RECORDS_WRITE_META, - new RecordsWriteMetaEvent([$record->getRecordId()], $record->getDataboxId())); - } catch (\Exception $e) { - $this->logger->error($e->getMessage()); - $this->jobFinished($workerRunningJob); + $this->logger->info("Translate subtitle on language destination SUCCESS"); - return 0; - } + // delete transcription - $this->logger->info("Translate subtitle on language destination SUCCESS"); - } +// foreach ($this->transcriptionsId as $transcriptionId) { +// $this->deleteTranscription($transcriptionId); +// } - $this->jobFinished($workerRunningJob); + $this->jobFinished(); return 0; } @@ -312,30 +269,211 @@ private function getApplicationBox() return $callable(); } - private function jobFinished(WorkerRunningJob $workerRunningJob) + private function jobFinished() { - if ($workerRunningJob != null) { - $workerRunningJob->setStatus(WorkerRunningJob::FINISHED) + if ($this->workerRunningJob != null) { + $this->workerRunningJob->setStatus(WorkerRunningJob::FINISHED) ->setFinished(new \DateTime('now')); $em = $this->repoWorker->getEntityManager(); $this->repoWorker->reconnect(); - $em->persist($workerRunningJob); + $em->persist($this->workerRunningJob); $em->flush(); } } - private function getLanguageFormat($language) + private function isRemoteFileExist($fileUrl) + { + $client = new Client(); + + try { + $client->head($fileUrl); + return true; + } catch (\Exception $e) { + return false; + } + } + + private function isPhysicallyPresent(\record_adapter $record, $subdefName) + { + try { + return $record->get_subdef($subdefName)->is_physically_present(); + } + catch (\Exception $e) { + unset($e); + } + + return false; + } + + private function exportTranscription($transcriptionId) + { + $subtitleTranscriptTemporaryFile = $this->getTemporaryFilesystem()->createTemporaryFile("subtitle", null, $this->extension); + + $resExport = $this->happyscribeClient->post('https://www.happyscribe.com/api/v1/exports', [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ], + 'json' => [ + 'export' => [ + 'format' => $this->extension, + 'transcription_ids' => [ + $transcriptionId + ] + ] + ] + ]); + + if ($resExport->getStatusCode() !== 200) { + $this->logger->error("error when creating transcript export, response status : ". $resExport->getStatusCode()); + $this->jobFinished(); + + return 0; + } + + $resExportBody = $resExport->getBody()->getContents(); + $resExportBody = json_decode($resExportBody,true); + + $exportId = $resExportBody['id']; + $failureExportMessage = ''; + + // retrieve transcript export when ready + do { + sleep(3); + $resCheckExport = $this->happyscribeClient->get('https://www.happyscribe.com/api/v1/exports/' . $exportId, [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ] + ]); + + if ($resCheckExport->getStatusCode() !== 200) { + $this->logger->error("error when checking transcript export ,response status : ". $resCheckExport->getStatusCode()); + $this->jobFinished(); + + return 0; + } + + $resCheckExportBody = $resCheckExport->getBody()->getContents(); + $resCheckExportBody = json_decode($resCheckExportBody,true); + $exportStatus = $resCheckExportBody['state']; + if (isset($resCheckExportBody['failureMessage'])) { + $failureExportMessage = $resCheckExportBody['failureMessage']; + } + + } while(!in_array($exportStatus, ['ready', 'expired', 'failed'])); + + + if ($exportStatus != 'ready') { + $this->logger->error("error when exporting transcript : " . $failureExportMessage); + $this->jobFinished(); + + return 0; + } + + $this->happyscribeClient->get($resCheckExportBody['download_link'], [ + 'sink' => $subtitleTranscriptTemporaryFile + ]); + + $transcriptContent = file_get_contents($subtitleTranscriptTemporaryFile); + + return $transcriptContent; + } + + private function translate($sourceTranscriptionId, $targetLanguage) { - switch ($language) { - case 'En': - return 'en-GB'; - case 'De': - return 'de-DE'; - case 'Fr': - default: - return 'fr-FR'; + // translate + try { + $resTranslate = $this->happyscribeClient->post('https://www.happyscribe.com/api/v1/task/transcription_translation', [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ], + 'json' => [ + 'source_transcription_id' => $sourceTranscriptionId, + 'target_language' => strtolower($targetLanguage) + ] + ]); + } catch (\Exception $e) { + $this->logger->error("error when translate : ". $e->getMessage()); + $this->jobFinished(); + + return 0; } + + + if ($resTranslate->getStatusCode() !== 200) { + $this->logger->error("error when translate, response status : ". $resTranslate->getStatusCode()); + $this->jobFinished(); + + return 0; + } + + $resTranslateBody = $resTranslate->getBody()->getContents(); + $resTranslateBody = json_decode($resTranslateBody,true); + + if ($resTranslateBody['state'] == 'failed') { + $this->logger->error("failed when translate, : " . $resTranslateBody['failureReason']); + $this->jobFinished(); + + return 0; + } + + $translateId = $resTranslateBody['id']; + $this->transcriptionsId[] = $translatedTranscriptionId = $resTranslateBody['translatedTranscriptionId']; + + // check translation + $failureTranslateMessage = ''; + + do { + sleep(5); + + $resCheckTranslate = $this->happyscribeClient->get('https://www.happyscribe.com/api/v1/task/transcription_translation/' . $translateId, [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ] + ]); + + if ($resCheckTranslate->getStatusCode() !== 200) { + $this->logger->error("error when checking translation task ,response status : " . $resCheckTranslate->getStatusCode()); + $this->jobFinished(); + + return 0; + } + + $resCheckTranslateBody = $resCheckTranslate->getBody()->getContents(); + $resCheckTranslateBody = json_decode($resCheckTranslateBody,true); + $checkTranslateStatus = $resCheckTranslateBody['state']; + if (isset($resCheckTranslateBody['failureReason'])) { + $failureTranslateMessage = $resCheckTranslateBody['failureReason']; + } + + } while(!in_array($checkTranslateStatus, ['done', 'failed'])); + + if ($checkTranslateStatus != 'done') { + $this->logger->error("error when translate : " . $failureTranslateMessage); + $this->jobFinished(); + + return 0; + } + + // export the translation now + + return $this->exportTranscription($translatedTranscriptionId); + } + + private function deleteTranscription($transcriptionId) + { + $this->happyscribeClient->delete('https://www.happyscribe.com/api/v1/transcriptions/' . $transcriptionId, [ + 'headers' => [ + 'Authorization' => 'Bearer ' . $this->happyscribeToken + ] + ]); + } + + private function getTargetLanguageByCode($code) + { + $t = explode('-', $code); + + return $t[0]; } } diff --git a/resources/locales/messages.de.xlf b/resources/locales/messages.de.xlf index a756ef083f..958b48ead0 100644 --- a/resources/locales/messages.de.xlf +++ b/resources/locales/messages.de.xlf @@ -1,14 +1,15 @@ - + - +
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.
- - + + + WorkerManager/Worker/DownloadAsyncWorker.php Form/Configuration/EmailFormType.php Form/Login/PhraseaAuthenticationForm.php @@ -129,12 +130,12 @@ %docs_not_orderable% documents ne peuvent pas etre commandes %docs_not_orderable% Dokumente können nicht bestellt werden - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %docs_orderable% documents commandes %docs_orderable% bestellte Dokumente - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %entry_length% documents @@ -195,7 +196,7 @@ Bridge/Dailymotion/element_informations.html.twig - selectionnes]]> + %number% documents<br/>selectionnes ausgewählt]]> Controller/Prod/QueryController.php @@ -263,7 +264,7 @@ %record_count% records match the unique identifier : %record_count% Datensätze entsprechen dem eindeutigen Bezeichner: - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig %s field has been created with success. @@ -520,7 +521,7 @@ A record matches the unique identifier : Ein Datensatz entspricht dem eindeutigen Bezeichner : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig A required field is missing or has an empty value @@ -644,7 +645,7 @@ Accuse de reception indisponible, vous n'avez pas declare d'adresse email Es ist nicht möglich, eine Empfangsbestätigung zu erhalten. Grund: eine fehlende E-Mail Adresse - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Action Forbidden : You are not the publisher @@ -699,8 +700,9 @@ Hinzufügen prod/User/Add.html.twig prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Add a new field @@ -753,6 +755,11 @@ actions/Feedback/list.html.twig prod/actions/Push.html.twig + + Add with caption + Add with caption + prod/upload/lazaret.html.twig + Additionnal modules Zusatzmodule @@ -807,7 +814,7 @@ Advanced settings Erweiterte Einstellungen - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Affichage @@ -908,7 +915,7 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig WorkZone/Browser/Browser.html.twig admin/worker-manager/worker_searchengine.html.twig task-manager/task-editor/subdefs.html.twig @@ -1002,9 +1009,9 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/MoveCollectionController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Controller/Prod/StoryController.php Controller/Admin/DataboxesController.php Controller/Admin/DataboxController.php @@ -1037,18 +1044,18 @@ An error occured when wanting to change status! Beim Ändern des Status ist ein Fehler aufgetreten! - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists Ein Fehler ist aufgetreten bei der Verweigerung. Bitte versuchen Sie es erneut oder wenden Sie sich an Ihren Systemadministrator - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while sending, please retry or contact an admin if problem persists Ein Fehler ist aufgetreten beim Senden. Bitte versuchen Sie es erneut oder wenden Sie sich an Ihren Systemadministrator - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while upload the file. Please retry @@ -1069,15 +1076,15 @@ An error occured, please retry or contact an admin if problem persists Ein Fehler ist aufgetreten, bitte wiederholen Sie oder wenden Sie sich an Ihren Systemadministrator prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig An error occurred Ein Fehler ist aufgetreten Order/Controller/ProdOrderController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Admin/SearchEngineController.php Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php @@ -1231,7 +1238,7 @@ Are you sure you want to rebuild the sub-definitions of selected records? Sind Sie sicher, dass Sie die Unterauflösungen von ausgewählte Datensätzen wiederherstellen möchten? - actions/Tools/index.html.twig + actions/Tools/index.html.twig Are you sure you want to reset rights? @@ -1252,7 +1259,7 @@ Attention, certain documents ont des sous-definitions substituees Vorsicht, einige Dokumente haben ersetzte Unterauflösungen - actions/Tools/index.html.twig + actions/Tools/index.html.twig Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci @@ -1476,6 +1483,7 @@ Base Datenbank + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -1590,10 +1598,10 @@ By checking this box, you accept %beginning_link% Terms of Use %end_link% Wenn Sie dieses Kästchen anwählen, akzeptieren Sie die %beginning_link% Nutzungsbedingungen %end_link% - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig By default it is available for admins @@ -1751,7 +1759,7 @@ Certains champs sont obligatoires, veuillez les remplir Bitte füllen Sie die erforderlichen Felder aus - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Ces informations sont directement fournies par la norme de metadonnees de ce champ : %norm_name% @@ -1768,10 +1776,11 @@ Wiedergabegeschwindigkeit ändern Controller/Prod/LanguageController.php - + Changes for rotation will be applied only on the sub-definitions of "image" type. - Änderungen für Drehung werden nur auf "Bilder" Unterauflösungen verwendet. - actions/Tools/index.html.twig + Changes for rotation will be applied only on + the sub-definitions of "image" type. + actions/Tools/index.html.twig Channels @@ -1798,8 +1807,8 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Choose a new password @@ -1815,7 +1824,7 @@ Civility Anrede - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Clear @@ -1869,7 +1878,7 @@ Collection Kollektion prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -2178,7 +2187,7 @@ Custom benutzerdefiniert web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig DCES @@ -2255,7 +2264,7 @@ Date Datum - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Date Added @@ -2288,7 +2297,7 @@ Abfrage Datum prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Date de modification @@ -2312,7 +2321,7 @@ Termin prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Dear %user%, @@ -2397,8 +2406,8 @@ Delete Löschen - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig @@ -2446,8 +2455,8 @@ Deny verweigern login/oauth/authorize-access.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Deplacement %n_element% elements @@ -2536,7 +2545,7 @@ Disable document type sharing Sharing-Link deaktivieren - actions/Tools/index.html.twig + actions/Tools/index.html.twig Disabled @@ -2549,7 +2558,7 @@ Form/Configuration/ActionsFormType.php - + Display & action settings Anzeige und Handlung-Einstellungen admin/fields/templates.html.twig @@ -2607,17 +2616,17 @@ Document envoye par %name% Dokument wurde von %name% gesendet - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document has been successfully substitued Dokument wurde erfolgreich ersetzt - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% Dokument wurde von %name% abgelehnt - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document title @@ -2632,10 +2641,10 @@ Documents indisponibles Dokument(e) nicht verfügbar - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Don't worry, You can modify your configuration later @@ -2650,6 +2659,7 @@ Download of documents Download von Dokumenten + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -2879,7 +2889,7 @@ Empty quarantine will remove all items, are you sure you want to continue ? Wenn Sie die Quarantäne leeren, werden Sie alle Dokumente löschen. Fortfahren? - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Empty the collection before removing @@ -2952,7 +2962,7 @@ Enable document type sharing Dokumenttyp Teilen aktivieren - actions/Tools/index.html.twig + actions/Tools/index.html.twig Enable maintenance message broadcast @@ -3197,8 +3207,10 @@ Export Exportieren - Controller/Prod/DoDownloadController.php + Controller/Prod/DownloadController.php + Controller/Prod/DownloadController.php Controller/Prod/DoDownloadController.php + Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php @@ -3309,7 +3321,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3339,7 +3351,7 @@ Filename Dateiname - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3416,12 +3428,12 @@ Forcer l'envoi du document Senden des Dokumentes außer Kraft setzen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Forcer la reconstruction sur les enregistrements ayant des thumbnails substituees Wiederaufbau auf Datensätze, die ersetzte Miniaturansichten haben, zwingen - actions/Tools/index.html.twig + actions/Tools/index.html.twig Forgot password? @@ -3765,9 +3777,9 @@ Include Business-fields in caption Geschäftsfelder in Beschriftung enthalten - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Indexable @@ -3942,9 +3954,9 @@ La sous resolution n'est pas disponible pour les documents suivants Unterauflösung für die folgende Dokumente ist nicht verfügbar - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig La taille maximale d'une video est de %duration% minutes. @@ -4008,7 +4020,7 @@ Last uploaded version zuletzte geladene Version - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4083,7 +4095,7 @@ Les documents ne peuvent pas etre exportes Dokumente können nicht heruntergeladen werden web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Les elements ne peuvent etre uploades (problemes de type ou de droit) @@ -4504,6 +4516,7 @@ Name Controller/Prod/LanguageController.php Bridge/Dailymotion/playlist_createcontainer.html.twig + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig prod/templates/push.html.twig admin/fields/templates.html.twig @@ -4598,7 +4611,7 @@ No document in quarantine Kein Dokument in der Quarantäne - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig No document selected @@ -4869,22 +4882,22 @@ Order has been canceled Die Bestellung wurde storniert - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php Order has been denied Angewandte Auswahl(en). - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Order has been sent Angewandte Auswahl(en). - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Orders manager @@ -5148,6 +5161,7 @@ Please wait while your files are being gathered for the download, this operation may take a few minutes. Bitte warten Sie, während Dateien, die für den Download versammelt sind, kann dieser Vorgang einige Minuten dauern. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -5202,7 +5216,7 @@ Presets Voreinstellungen - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Previous @@ -5558,7 +5572,7 @@ Recevoir un accuse de reception a %my_email% Empfangsbestätigung zu %my_email% bekommen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Rechercher dans un champ date @@ -5583,7 +5597,7 @@ Record Not Found Datensatz wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -6083,8 +6097,8 @@ prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig web/admin/dashboard.html.twig @@ -6392,7 +6406,7 @@ Story Not Found Bericht wurde nicht gefunden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6432,6 +6446,7 @@ Sub definition Unterauflösung + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6439,6 +6454,11 @@ Unterauflösung admin/databox/details.html.twig + + Subdef "%s" has been successfully substitued + Subdef "%s" has been successfully substitued + Controller/Prod/ToolsController.php + Submit Einreichen @@ -6447,18 +6467,18 @@ Substitute Ersetzung - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Substitution is not possible for this kind of record Für diesen Typ von Aufnahme ist die Ersetzung nicht verfügbar - actions/Tools/index.html.twig + actions/Tools/index.html.twig Success Erfolg - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig api/auth/native_app_access_token.html.twig @@ -6549,9 +6569,14 @@ Bitte trennen Sie die Tags durch ein Leerzeichen: Paris Urlaub Restaurant Bridge/Dailymotion/upload.html.twig - - TLS - TLS + + TLSV1.1 + TLSV1.1 + Form/Configuration/EmailFormType.php + + + TLSV1.2 + TLSV1.2 Form/Configuration/EmailFormType.php @@ -6571,7 +6596,7 @@ Target Device Zielgerät - classes/databox/subdef.php + classes/databox/subdef.php Task Edition @@ -6615,7 +6640,7 @@ Terms of Use Nutzungsbedingungen Form/Login/PhraseaRegisterForm.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Terms of service @@ -6670,7 +6695,8 @@ The destination record provided is not allowed Zieldatensatz wird nicht erlaubt - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6680,6 +6706,7 @@ The file contains the following elements Die Datei enthält folgende Elemente + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6876,13 +6903,9 @@ Thumbnail Miniaturansicht + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig - - Thumbnail has been successfully substitued - Vorschau wurde erfolgreich ersetzt - Controller/Prod/ToolsController.php - Thumbnails directory is mounted to be accessible via HTTP, while other files are not. Miniaturansichtenverzeichnis wird befestigt, um durch HTTP erreichbar zu werden, aber andere Dateien nicht. @@ -7029,12 +7052,12 @@ Un document commande Ein bestelltes Dokument - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Un document ne peut etre commande Ein Dokument kann nicht bestellt werden - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Unable to add file to Phraseanet @@ -7224,7 +7247,7 @@ Uploaded by : %username% von: %username% hochgeladen - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7342,7 +7365,7 @@ Utilisation prevue: Verwendungszweck: - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig VALIDATION @@ -7528,7 +7551,7 @@ Vous devez selectionner un type de sous definitions Sie müssen einen Typ von Unterauflösungen auswählen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Vous devez specifier une adresse email et un mot de passe valides @@ -7622,7 +7645,7 @@ Warning ! Warnung ! - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Warning, this database is not empty @@ -7718,7 +7741,7 @@ Write Metas Meta schreiben - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig YYYY-MM-DD @@ -7784,7 +7807,7 @@ You can alternatively receive an email when the download is ready. Alternativ können Sie ein Download Link durch Email erhalten. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can choose only one record @@ -7799,7 +7822,7 @@ You can not directly download more than %max_download% Mo ; time to package all documents is too long Sie können nicht mehr als %max_download% Mo herunterladen. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can not edit this story @@ -7825,7 +7848,7 @@ You do not have enough rights to access quarantine Kein Zugriff auf die Quarantäne : fehlende Rechte - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig You do not have required rights to send these documents over FTP @@ -7885,7 +7908,7 @@ You must agree to the Terms of Use to continue. Sie müssen die Nutzungsbedingungen akzeptieren, um fortzufahren - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You must give a destination collection @@ -7895,7 +7918,7 @@ You must give a destination record Geben Sie bitte einen Zieldatensatz - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7961,6 +7984,7 @@ Your documents are ready. If the download does not start, %before_link%click here%after_link% Ihre Dokumente sind fertig. Falls das Herunterladen nicht startet, bitte %before_link% klicken Sie hier %after_link% + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -8580,7 +8604,7 @@ Adresse Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8595,7 +8619,7 @@ PLZ Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8625,7 +8649,7 @@ E-Mail Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8673,7 +8697,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8695,7 +8719,7 @@ Beruf Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8706,7 +8730,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8723,7 +8747,7 @@ Unternehmen Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8739,7 +8763,7 @@ admin::compte-utilisateur telephone Telefon Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8755,7 +8779,7 @@ Ort Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8845,7 +8869,7 @@ admin::compte-utilisateur:sexe: madame Frau Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8853,7 +8877,7 @@ admin::compte-utilisateur:sexe: mademoiselle Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8861,7 +8885,7 @@ admin::compte-utilisateur:sexe: monsieur Herr Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9779,7 +9803,7 @@ admin:expose Retrieve configuration error Unmöglich, die Expose Einstellungen wiederzuherstellen - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab-title:: Page title @@ -9789,32 +9813,32 @@ admin:phrasea-service-setting:tab:: Auth Auth Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Expose Expose Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Notify Notify Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Report Report Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Uploader Uploader Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:expose:: Activate this expose Diese Expose Aktivieren - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Auth Client ID @@ -9829,7 +9853,7 @@ admin:phrasea-service-setting:tab:expose:: Connection Kind Verbindungsmethode - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Delete @@ -9877,8 +9901,8 @@ admin/phraseanet-service/expose.html.twig - admin:phrasea-service-setting:tab:expose:: OAuth token URI - admin:phrasea-service-setting:tab:expose:: OAuth token URI + admin:phrasea-service-setting:tab:expose:: OAuth token URI + OAuth token URI PhraseanetService/Form/PSExposeConnectionType.php @@ -9894,12 +9918,12 @@ admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: verify ssl Gültigkeit des SSL-Zertifikats prüfen - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:uploader:: Client ID @@ -9969,7 +9993,7 @@ admin:phraseanet-service Retrieve configuration error Phrasea Konfigurationserror - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:searchengine:aggregates:New field, please confirm setting. @@ -9990,7 +10014,7 @@ alert Vorsicht - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -10011,7 +10035,7 @@ an error occured Ein Fehler ist aufgetreten - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% @@ -10130,10 +10154,10 @@ Abbrechen Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/import-dialog.html.twig web/thesaurus/thesaurus.html.twig @@ -10191,7 +10215,7 @@ boutton::commander Bestellen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::creer @@ -10219,13 +10243,13 @@ boutton::envoyer Senden - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::essayer probieren - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::fermer @@ -10381,7 +10405,7 @@ boutton::telecharger Download - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/lightbox/sc_options_box.html.twig web/lightbox/feed_options_box.html.twig @@ -10504,10 +10528,9 @@ cancel Abbrechen - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig caption XML @@ -10581,13 +10604,13 @@ classe Klasse - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig client_credentials client_credentials - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php client_id @@ -10602,13 +10625,13 @@ commande::deadline Termin - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig commande::utilisation prevue Verwendungszweck - web/common/dialog_export.html.twig - prod/orders/order_item.html.twig + web/common/dialog_export.html.twig + prod/orders/order_item.html.twig copyClipboardLabel @@ -10824,7 +10847,7 @@ Dokument Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -10900,7 +10923,7 @@ export:: FTP FTP web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: commande @@ -10911,7 +10934,7 @@ export:: envoi par mail E-Mail web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: erreur : aucun document selectionne @@ -10922,12 +10945,12 @@ export:: telechargement Download web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::export-email: email-invalid Das Format der Email Adresse scheint falsch zu sein - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::ftp: reglages manuels @@ -10937,18 +10960,18 @@ export::mail: contenu du mail Textinhalt - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: destinataire zu - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: fichiers joint E-Mail Anhänge - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::titre: nom original du document @@ -10963,12 +10986,12 @@ export:email:: acknowledgement info Empfangbestätigungen schaffen nur, wenn der Empfänger diese Funktion zulässt - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:email:info:: email addresses separated by commas E-Mail Adressen durch Kommas getrennt - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig expose:: Choose a profile where to store mapping @@ -11011,7 +11034,7 @@ expose:: logout Abmeldung - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig expose:: poster @@ -11157,10 +11180,10 @@ file is not valid Datei ist nicht gültig - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash @@ -11317,7 +11340,7 @@ image rotation Bilddrehung - actions/Tools/index.html.twig + actions/Tools/index.html.twig image tool @@ -11722,7 +11745,7 @@ mediatype Media Typ - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig meta-datas @@ -11732,7 +11755,7 @@ mettre a jour le nom original de fichier apres substitution ursprüngliche Dateiname nach Ersetzung aktualisieren - actions/Tools/index.html.twig + actions/Tools/index.html.twig name @@ -11748,14 +11771,14 @@ no Nein web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig user/import/view.html.twig web/account/sessions.html.twig no image selected Kein Bild wurde ausgewählt - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -11774,7 +11797,7 @@ notification:: Basket '%title%' shared from %user% - Sammelkorb '%title%' wurde geteilt von %user% + Sammelkorb '%title%' wurde geteilt von %user% eventsmanager/notify/validate.php @@ -11830,198 +11853,198 @@ order-manager:: all document treated Alle Dokumente wurden behandelt - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: cancel Die Bestellung stornieren (endgültig) prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: canceled on %canceled_on% by %canceled_by%, with %n% items not treated Abgebrochen am %canceled_on% von %canceled_by%, mit %n% unbehandelte Dokumente prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::mail: your-order-of Ihre Bestellung von : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: accepted-item akzeptiert - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: address Adresse - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: already-validated Schon gesendet - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: by von - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: company Unternehmen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: country Land - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create OK - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create-basket Neuer Sammelkorb - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: for-non-sent-items Für die Dokumente, die nicht gesendet wurden - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: information Information - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: item Dokument - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-already-sent Dokument(e) schon gesendet - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-waiting-validation Dokumente, die auf eine Bestätigung warten - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: less weniger sehen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: more mehr sehen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: number Nummer - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: of Von - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: refused-previously zuvor abgelehnt - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: rejected-item abgelehnt - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: reset zurücksetzen - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: select-all Alle auswählen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-item ausgewählt - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-records ausgewählte Datensätze - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: submit Senden - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: tel Telefon - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: validate Die Auswahl bestätigen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: warning-message-close Ausstenhende Auswahl abbrechen? - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-denied-items Mit der abgelehnten Datensätzen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-selected-items Mit der Auswahl - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-validated-items Mit gesendete(r) Dokument(en) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-denied Dokument(e) abgelehnt - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-validated Dokument(e) gesendet - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Create-Basket Sammelkorb erstellen - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Validation Bestellübersicht - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: after @@ -12065,8 +12088,8 @@ Bestellung Nummer prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: pending @@ -12088,7 +12111,7 @@ Verarbeitete(r) Datensatz(¨e) prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig original logo @@ -12193,7 +12216,7 @@ password Passwort - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php personalize logo @@ -12327,7 +12350,7 @@ phraseanet:: prereglages Voreinstellungen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig phraseanet:: presse-papier @@ -12411,7 +12434,7 @@ Controller/Root/AccountController.php - >]]> + phraseanet::account: << your account can be deleted via admin interface >> Ihr Benutzerkonto kann nur durch die Administration Anwendung gelöscht werden. web/account/account.html.twig @@ -12618,7 +12641,7 @@ preview Voransicht - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig preview:: Description @@ -12997,7 +13020,7 @@ processing verarbeitend - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -13099,7 +13122,12 @@ prod::download: delete-marking-stamp prod::download: delete-marking-stamp - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + + + prod::download: report as spreadsheet + prod::download: report as spreadsheet + web/common/dialog_export.html.twig prod::edit cannot edit multiple stories @@ -13351,7 +13379,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod::order-manager download expire on Download verfügbar bis - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod::publication:title @@ -13654,12 +13682,12 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod::tool:recreatesubviews: warning for rebuild sub-definitions Erstellung Abfrage von Auflösungen wird bearbeitet - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tool:select subdef Datei auswählen - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tools: document @@ -13776,22 +13804,22 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod:expose Editable only Bearbeitbar - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose Mine only Meine - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose field mapping Mapping - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose next nächste - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose preview @@ -13801,7 +13829,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod:expose previous letzte - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose: disabled @@ -13816,13 +13844,13 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod:expose:Add publication Eine Veröffentlichung hinzufügen - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:Refresh Aktualisieren - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:connection:Auth connexion @@ -14111,7 +14139,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben prod:expose:select expose Expose auswählen - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:mapbox Change position @@ -15056,12 +15084,12 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben rotation 90 degres anti-horaires 90° entgegen dem Uhrzeigersinn drehen - actions/Tools/index.html.twig + actions/Tools/index.html.twig rotation 90 degres horaire 90° im Uhrzeigersinn drehen - actions/Tools/index.html.twig + actions/Tools/index.html.twig same UUID @@ -15260,20 +15288,20 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben Kann bestellt werden web/admin/subdefs.html.twig + + subdef.substituable + subdef.substituable + web/admin/subdefs.html.twig + substitution Ersetzung actions/Tools/index.html.twig - - substitution HD - Dokument Ersetzung - actions/Tools/index.html.twig - - - substitution SD - Miniaturansicht Ersetzung - actions/Tools/index.html.twig + + substitution of %sd% + substitution of %sd% + actions/Tools/index.html.twig task::_common_:hotfolder @@ -15561,7 +15589,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben web/thesaurus/thesaurus.html.twig - + thesaurus:: Supprimer cette branche ?&#10;(les termes concernes remonteront en candidats a la prochaine indexation) web/thesaurus/thesaurus.html.twig @@ -16077,13 +16105,13 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben thumbnail validation Miniaturansicht Validierung - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig tout le monde Alle - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig toutes les notifications @@ -16115,6 +16143,11 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben aktualisiert am Phrasea/Helper/Prod.php + + upload:: Copy meta + upload:: Copy meta + prod/upload/lazaret.html.twig + upload:: Destination (collection) : Kollektion @@ -16126,12 +16159,12 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben Status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig upload:: checkers for this file is disabled in configuration or deleted Checker ist deaktiviert oder gelöscht - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -16141,10 +16174,9 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben validate Bestätigen - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -16391,7 +16423,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben yes Ja web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig web/account/sessions.html.twig diff --git a/resources/locales/messages.en.xlf b/resources/locales/messages.en.xlf index 2f3d8faaed..49229c4fe8 100644 --- a/resources/locales/messages.en.xlf +++ b/resources/locales/messages.en.xlf @@ -1,14 +1,15 @@ - + - +
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.
- - + + + WorkerManager/Worker/DownloadAsyncWorker.php Form/Configuration/EmailFormType.php Form/Login/PhraseaAuthenticationForm.php @@ -129,12 +130,12 @@ %docs_not_orderable% documents ne peuvent pas etre commandes %docs_not_orderable% document(s) can't be ordered - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %docs_orderable% documents commandes %docs_orderable% ordered document(s) - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %entry_length% documents @@ -195,7 +196,7 @@ Bridge/Dailymotion/element_informations.html.twig - selectionnes]]> + %number% documents<br/>selectionnes selected]]> Controller/Prod/QueryController.php @@ -263,7 +264,7 @@ %record_count% records match the unique identifier : %record_count% records match the unique identifier: - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig %s field has been created with success. @@ -520,7 +521,7 @@ A record matches the unique identifier : A record matches the unique identifier: - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig A required field is missing or has an empty value @@ -644,7 +645,7 @@ Accuse de reception indisponible, vous n'avez pas declare d'adresse email Unable to send an acknowledgement: Missing e-mail address. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Action Forbidden : You are not the publisher @@ -699,8 +700,9 @@ Add prod/User/Add.html.twig prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Add a new field @@ -754,6 +756,11 @@ actions/Feedback/list.html.twig prod/actions/Push.html.twig + + Add with caption + Add with caption + prod/upload/lazaret.html.twig + Additionnal modules Additional modules @@ -808,7 +815,7 @@ Advanced settings Advanced settings - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Affichage @@ -909,7 +916,7 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig WorkZone/Browser/Browser.html.twig admin/worker-manager/worker_searchengine.html.twig task-manager/task-editor/subdefs.html.twig @@ -1003,9 +1010,9 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/MoveCollectionController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Controller/Prod/StoryController.php Controller/Admin/DataboxesController.php Controller/Admin/DataboxController.php @@ -1038,18 +1045,18 @@ An error occured when wanting to change status! An error occured when wanting to change status! - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists An error occurred while denying. Please retry or contact an administrator if problem persists. - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while sending, please retry or contact an admin if problem persists An error occured while sending. Please retry or contact an administrator if problem persists. - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while upload the file. Please retry @@ -1070,15 +1077,15 @@ An error occured, please retry or contact an admin if problem persists An error occurred. Please retry or contact an administrator if problem persists. prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig An error occurred An error occurred Order/Controller/ProdOrderController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Admin/SearchEngineController.php Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php @@ -1232,7 +1239,7 @@ Are you sure you want to rebuild the sub-definitions of selected records? Are you sure you want to rebuild the subviews of the selected records? - actions/Tools/index.html.twig + actions/Tools/index.html.twig Are you sure you want to reset rights? @@ -1253,7 +1260,7 @@ Attention, certain documents ont des sous-definitions substituees Caution! Some documents have substituted subviews. - actions/Tools/index.html.twig + actions/Tools/index.html.twig Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci @@ -1477,6 +1484,7 @@ Base Base + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -1591,10 +1599,10 @@ By checking this box, you accept %beginning_link% Terms of Use %end_link% By checking this box, you have read and agree to the %beginning_link% Terms of Use %end_link% - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig By default it is available for admins @@ -1752,7 +1760,7 @@ Certains champs sont obligatoires, veuillez les remplir Some fields must be completed - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Ces informations sont directement fournies par la norme de metadonnees de ce champ : %norm_name% @@ -1769,11 +1777,11 @@ Change play speed Controller/Prod/LanguageController.php - + Changes for rotation will be applied only on the sub-definitions of "image" type. - Changes for rotation will be applied only on - the sub-definitions of "image" type. - actions/Tools/index.html.twig + Changes for rotation will be applied only on + the sub-definitions of "image" type. + actions/Tools/index.html.twig Channels @@ -1800,8 +1808,8 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Choose a new password @@ -1817,7 +1825,7 @@ Civility Title - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Clear @@ -1871,7 +1879,7 @@ Collection Collection prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -2181,7 +2189,7 @@ Custom Custom web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig DCES @@ -2258,7 +2266,7 @@ Date Date - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Date Added @@ -2291,7 +2299,7 @@ Request date prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Date de modification @@ -2315,7 +2323,7 @@ Deadline prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Dear %user%, @@ -2400,8 +2408,8 @@ Delete Delete - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig @@ -2449,8 +2457,8 @@ Deny Deny login/oauth/authorize-access.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Deplacement %n_element% elements @@ -2539,7 +2547,7 @@ Disable document type sharing Disable document type sharing - actions/Tools/index.html.twig + actions/Tools/index.html.twig Disabled @@ -2552,7 +2560,7 @@ Form/Configuration/ActionsFormType.php - + Display & action settings Display and action settings admin/fields/templates.html.twig @@ -2610,17 +2618,17 @@ Document envoye par %name% Document sent by - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document has been successfully substitued Document has been successfully substituted - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% Document denied by %name% - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document title @@ -2635,10 +2643,10 @@ Documents indisponibles Document(s) unavailable - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Don't worry, You can modify your configuration later @@ -2653,6 +2661,7 @@ Download of documents Documents downloads + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -2882,7 +2891,7 @@ Empty quarantine will remove all items, are you sure you want to continue ? Empty quarantine will delete all its contents. This action is irreversible. Are you sure you want to continue? - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Empty the collection before removing @@ -2955,7 +2964,7 @@ Enable document type sharing Enable document type sharing - actions/Tools/index.html.twig + actions/Tools/index.html.twig Enable maintenance message broadcast @@ -3200,8 +3209,10 @@ Export Export - Controller/Prod/DoDownloadController.php + Controller/Prod/DownloadController.php + Controller/Prod/DownloadController.php Controller/Prod/DoDownloadController.php + Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php @@ -3312,7 +3323,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3342,7 +3353,7 @@ Filename File Name - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3419,12 +3430,12 @@ Forcer l'envoi du document Force document delivery - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Forcer la reconstruction sur les enregistrements ayant des thumbnails substituees Force re-creation for substituted subviews - actions/Tools/index.html.twig + actions/Tools/index.html.twig Forgot password? @@ -3768,9 +3779,9 @@ Include Business-fields in caption Include Business fields in captions - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Indexable @@ -3945,9 +3956,9 @@ La sous resolution n'est pas disponible pour les documents suivants Subviews unavailable for the following document(s) - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig La taille maximale d'une video est de %duration% minutes. @@ -4011,7 +4022,7 @@ Last uploaded version Last uploaded version - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4086,7 +4097,7 @@ Les documents ne peuvent pas etre exportes Documents can not be downloaded web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Les elements ne peuvent etre uploades (problemes de type ou de droit) @@ -4507,6 +4518,7 @@ Name Controller/Prod/LanguageController.php Bridge/Dailymotion/playlist_createcontainer.html.twig + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig prod/templates/push.html.twig admin/fields/templates.html.twig @@ -4601,7 +4613,7 @@ No document in quarantine No document in quarantine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig No document selected @@ -4872,22 +4884,22 @@ Order has been canceled Order has been canceled - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php Order has been denied Choice(s) applied. - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Order has been sent Choice(s) applied. - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Orders manager @@ -5151,6 +5163,7 @@ Please wait while your files are being gathered for the download, this operation may take a few minutes. Please wait while files are being gathered for download. This operation may take a few minutes. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -5205,7 +5218,7 @@ Presets Presets - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Previous @@ -5561,7 +5574,7 @@ Recevoir un accuse de reception a %my_email% Receive an acknowledgement at %my_email% - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Rechercher dans un champ date @@ -5586,7 +5599,7 @@ Record Not Found Record not found - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -6086,8 +6099,8 @@ prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig web/admin/dashboard.html.twig @@ -6395,7 +6408,7 @@ Story Not Found Story not found - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6435,6 +6448,7 @@ Sub definition Subviews + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6442,6 +6456,11 @@ Subview admin/databox/details.html.twig + + Subdef "%s" has been successfully substitued + Subdef "%s" has been successfully substitued + Controller/Prod/ToolsController.php + Submit Submit @@ -6450,18 +6469,18 @@ Substitute Substitute - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Substitution is not possible for this kind of record Substitution is not possible for this record type - actions/Tools/index.html.twig + actions/Tools/index.html.twig Success Success - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig api/auth/native_app_access_token.html.twig @@ -6552,9 +6571,14 @@ Use space character between tags or keywords : Paris Holidays Restaurant Bridge/Dailymotion/upload.html.twig - - TLS - TLS + + TLSV1.1 + TLSV1.1 + Form/Configuration/EmailFormType.php + + + TLSV1.2 + TLSV1.2 Form/Configuration/EmailFormType.php @@ -6574,7 +6598,7 @@ Target Device Target device - classes/databox/subdef.php + classes/databox/subdef.php Task Edition @@ -6618,7 +6642,7 @@ Terms of Use Terms of use Form/Login/PhraseaRegisterForm.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Terms of service @@ -6673,7 +6697,8 @@ The destination record provided is not allowed The targeted record choosen is not allowed - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6683,6 +6708,7 @@ The file contains the following elements The file contains the following items. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6879,13 +6905,9 @@ Thumbnail Thumbnail + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig - - Thumbnail has been successfully substitued - Thumbnail has been successfully substituted - Controller/Prod/ToolsController.php - Thumbnails directory is mounted to be accessible via HTTP, while other files are not. Thumbnails directory is mounted to be accessible via HTTP, while others directories are not. @@ -7032,12 +7054,12 @@ Un document commande One document ordered. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Un document ne peut etre commande One document can not be ordered. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Unable to add file to Phraseanet @@ -7227,7 +7249,7 @@ Uploaded by : %username% Uploaded by: %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7345,7 +7367,7 @@ Utilisation prevue: Intended use: - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig VALIDATION @@ -7531,7 +7553,7 @@ Vous devez selectionner un type de sous definitions Select type of subviews - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Vous devez specifier une adresse email et un mot de passe valides @@ -7625,7 +7647,7 @@ Warning ! Warning! - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Warning, this database is not empty @@ -7721,7 +7743,7 @@ Write Metas Write Metadatas - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig YYYY-MM-DD @@ -7787,7 +7809,7 @@ You can alternatively receive an email when the download is ready. Alternatively, you can receive a download link by email? - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can choose only one record @@ -7802,7 +7824,7 @@ You can not directly download more than %max_download% Mo ; time to package all documents is too long You can't directly download more than %max_download% Mo. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can not edit this story @@ -7828,7 +7850,7 @@ You do not have enough rights to access quarantine You do not have enough rights to access the quarantine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig You do not have required rights to send these documents over FTP @@ -7888,7 +7910,7 @@ You must agree to the Terms of Use to continue. You must accept the Terms of Use to continue. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You must give a destination collection @@ -7898,7 +7920,7 @@ You must give a destination record You must select one target record - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7964,6 +7986,7 @@ Your documents are ready. If the download does not start, %before_link%click here%after_link% Your documents are ready. If the download doesn't start automatically, please %before_link%click here%after_link%. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -8583,7 +8606,7 @@ Address Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8598,7 +8621,7 @@ Zip code Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8628,7 +8651,7 @@ E-mail Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8676,7 +8699,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8698,7 +8721,7 @@ Job Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8709,7 +8732,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8726,7 +8749,7 @@ Company Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8742,7 +8765,7 @@ admin::compte-utilisateur telephone Phone Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8758,7 +8781,7 @@ City Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8848,7 +8871,7 @@ admin::compte-utilisateur:sexe: madame Mrs. Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8856,7 +8879,7 @@ admin::compte-utilisateur:sexe: mademoiselle Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8864,7 +8887,7 @@ admin::compte-utilisateur:sexe: monsieur Mr. Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9782,7 +9805,7 @@ admin:expose Retrieve configuration error Expose Retrieval configuration error - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab-title:: Page title @@ -9792,32 +9815,32 @@ admin:phrasea-service-setting:tab:: Auth Auth Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Expose Expose Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Notify Notify Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Report Report Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Uploader Uploader Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:expose:: Activate this expose Activate this expose - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Auth Client ID @@ -9832,7 +9855,7 @@ admin:phrasea-service-setting:tab:expose:: Connection Kind Interconnection method - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Delete @@ -9880,8 +9903,8 @@ admin/phraseanet-service/expose.html.twig - admin:phrasea-service-setting:tab:expose:: OAuth token URI - admin:phrasea-service-setting:tab:expose:: OAuth token URI + admin:phrasea-service-setting:tab:expose:: OAuth token URI + OAuth token URI PhraseanetService/Form/PSExposeConnectionType.php @@ -9896,13 +9919,13 @@ admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - PhraseanetService/Form/PSExposeConnectionType.php + Auth provider name with type ps-auth + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: verify ssl Check SSL certificate validity - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:uploader:: Client ID @@ -9972,7 +9995,7 @@ admin:phraseanet-service Retrieve configuration error Phrasea configuration error - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:searchengine:aggregates:New field, please confirm setting. @@ -9993,7 +10016,7 @@ alert Warning - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -10014,7 +10037,7 @@ an error occured an error occured - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% @@ -10133,10 +10156,10 @@ Cancel Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/import-dialog.html.twig web/thesaurus/thesaurus.html.twig @@ -10194,7 +10217,7 @@ boutton::commander Order - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::creer @@ -10222,13 +10245,13 @@ boutton::envoyer Send - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::essayer Try - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::fermer @@ -10384,7 +10407,7 @@ boutton::telecharger Download - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/lightbox/sc_options_box.html.twig web/lightbox/feed_options_box.html.twig @@ -10507,10 +10530,9 @@ cancel Cancel - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig caption XML @@ -10584,13 +10606,13 @@ classe Class - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig client_credentials client_credentials - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php client_id @@ -10605,13 +10627,13 @@ commande::deadline Deadline - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig commande::utilisation prevue Intended use - web/common/dialog_export.html.twig - prod/orders/order_item.html.twig + web/common/dialog_export.html.twig + prod/orders/order_item.html.twig copyClipboardLabel @@ -10827,7 +10849,7 @@ document Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -10903,7 +10925,7 @@ export:: FTP FTP web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: commande @@ -10914,7 +10936,7 @@ export:: envoi par mail E-Mail web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: erreur : aucun document selectionne @@ -10925,12 +10947,12 @@ export:: telechargement Download web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::export-email: email-invalid The email address format seems incorrect - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::ftp: reglages manuels @@ -10940,18 +10962,18 @@ export::mail: contenu du mail Content - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: destinataire To - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: fichiers joint Attachment(s) - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::titre: nom original du document @@ -10966,12 +10988,12 @@ export:email:: acknowledgement info Acknowledgments only work if the recipient allows this feature - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:email:info:: email addresses separated by commas Email addresses must be separated by commas - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig expose:: Choose a profile where to store mapping @@ -11014,7 +11036,7 @@ expose:: logout Logout - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig expose:: poster @@ -11160,10 +11182,10 @@ file is not valid file is not valid - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash @@ -11320,7 +11342,7 @@ image rotation Image rotation - actions/Tools/index.html.twig + actions/Tools/index.html.twig image tool @@ -11725,7 +11747,7 @@ mediatype Media type - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig meta-datas @@ -11735,7 +11757,7 @@ mettre a jour le nom original de fichier apres substitution Update the filename - actions/Tools/index.html.twig + actions/Tools/index.html.twig name @@ -11751,14 +11773,14 @@ no No web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig user/import/view.html.twig web/account/sessions.html.twig no image selected No Document selected - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -11777,7 +11799,7 @@ notification:: Basket '%title%' shared from %user% - The basket '%title%' has been shared from %user% + The basket '%title%' has been shared from %user% eventsmanager/notify/validate.php @@ -11833,198 +11855,198 @@ order-manager:: all document treated All documents have been treated - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: cancel Cancel the order (definitively) prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: canceled on %canceled_on% by %canceled_by%, with %n% items not treated Canceled on %canceled_on% by %canceled_by%, with %n% untreated documents prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::mail: your-order-of Your Order Of : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: accepted-item Accepted item(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: address Address - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: already-validated Already sent - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: by by - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: company Company - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: country Country - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create OK - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create-basket Create a basket - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: for-non-sent-items For no sent documents: - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: information Informations about the media: - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: item Document - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-already-sent Sent Document(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-waiting-validation Documents waiting for validation - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: less less - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: more More - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: number Number - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: of of - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: refused-previously Previously denied - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: rejected-item Rejected item(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: reset Cancel - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: select-all Select All - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-item Selected item(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-records Selected document(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: submit Submit - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: tel Tel - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: validate Validate choices - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: warning-message-close Cancel pending choices? - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-denied-items With denied document(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-selected-items With selected document(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-validated-items With validated document(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-denied Documents you have denied - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-validated Documents you have sent - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Create-Basket Create Basket - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Validation Order review - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: after @@ -12068,8 +12090,8 @@ Order Number prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: pending @@ -12091,7 +12113,7 @@ Treated Document(s) prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig original logo @@ -12196,7 +12218,7 @@ password Password - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php personalize logo @@ -12330,7 +12352,7 @@ phraseanet:: prereglages Presets - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig phraseanet:: presse-papier @@ -12414,7 +12436,7 @@ Controller/Root/AccountController.php - >]]> + phraseanet::account: << your account can be deleted via admin interface >> Your rights do not allow to perform this action. Your account can only be deleted via the Administration interface. web/account/account.html.twig @@ -12621,7 +12643,7 @@ preview Preview - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig preview:: Description @@ -13000,7 +13022,7 @@ processing Processing... - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -13102,7 +13124,12 @@ prod::download: delete-marking-stamp prod::download: delete-marking-stamp - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + + + prod::download: report as spreadsheet + Export as spreadsheet + web/common/dialog_export.html.twig prod::edit cannot edit multiple stories @@ -13354,7 +13381,7 @@ Warning: The current values will be overwritten by these new values prod::order-manager download expire on Download available until - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod::publication:title @@ -13657,12 +13684,12 @@ Warning: The current values will be overwritten by these new values prod::tool:recreatesubviews: warning for rebuild sub-definitions Subdefinition build request has been submitted - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tool:select subdef Select a file - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tools: document @@ -13779,22 +13806,22 @@ Warning: The current values will be overwritten by these new values prod:expose Editable only Editable - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose Mine only Mine - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose field mapping Mapping - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose next next - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose preview @@ -13804,7 +13831,7 @@ Warning: The current values will be overwritten by these new values prod:expose previous previous - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose: disabled @@ -13819,13 +13846,13 @@ Warning: The current values will be overwritten by these new values prod:expose:Add publication Add publication - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:Refresh Refresh - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:connection:Auth connexion @@ -14114,7 +14141,7 @@ Warning: The current values will be overwritten by these new values prod:expose:select expose Choose Expose - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:mapbox Change position @@ -15062,12 +15089,12 @@ It is possible to place several search areas rotation 90 degres anti-horaires Rotate 90 degrees counter clockwise - actions/Tools/index.html.twig + actions/Tools/index.html.twig rotation 90 degres horaire Rotate 90 degrees clockwise - actions/Tools/index.html.twig + actions/Tools/index.html.twig same UUID @@ -15266,20 +15293,20 @@ It is possible to place several search areas Orderable web/admin/subdefs.html.twig + + subdef.substituable + Substituable subdef + web/admin/subdefs.html.twig + substitution Substitution actions/Tools/index.html.twig - - substitution HD - Document substitution - actions/Tools/index.html.twig - - - substitution SD - Thumbnail substitution - actions/Tools/index.html.twig + + substitution of %sd% + substitution of %sd% + actions/Tools/index.html.twig task::_common_:hotfolder @@ -15567,7 +15594,7 @@ It is possible to place several search areas web/thesaurus/thesaurus.html.twig - + thesaurus:: Supprimer cette branche ?&#10;(les termes concernes remonteront en candidats a la prochaine indexation) web/thesaurus/thesaurus.html.twig @@ -16083,13 +16110,13 @@ It is possible to place several search areas thumbnail validation Confirm thumbnail - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig tout le monde Everyone - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig toutes les notifications @@ -16121,6 +16148,11 @@ It is possible to place several search areas updated on Phrasea/Helper/Prod.php + + upload:: Copy meta + upload:: Copy meta + prod/upload/lazaret.html.twig + upload:: Destination (collection) : Collection @@ -16132,12 +16164,12 @@ It is possible to place several search areas Apply status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig upload:: checkers for this file is disabled in configuration or deleted Checker is disabled or deleted - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -16147,10 +16179,9 @@ It is possible to place several search areas validate Validate - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -16397,7 +16428,7 @@ It is possible to place several search areas yes Yes web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig web/account/sessions.html.twig diff --git a/resources/locales/messages.fr.xlf b/resources/locales/messages.fr.xlf index d73a2c04ba..309639daf1 100644 --- a/resources/locales/messages.fr.xlf +++ b/resources/locales/messages.fr.xlf @@ -1,14 +1,15 @@ - + - +
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.
- - + + + WorkerManager/Worker/DownloadAsyncWorker.php Form/Configuration/EmailFormType.php Form/Login/PhraseaAuthenticationForm.php @@ -129,12 +130,12 @@ %docs_not_orderable% documents ne peuvent pas etre commandes %docs_not_orderable% documents ne peuvent être commandés - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %docs_orderable% documents commandes %docs_orderable% documents commandés - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %entry_length% documents @@ -195,7 +196,7 @@ Bridge/Dailymotion/element_informations.html.twig - selectionnes]]> + %number% documents<br/>selectionnes sélectionnés]]> Controller/Prod/QueryController.php @@ -263,7 +264,7 @@ %record_count% records match the unique identifier : %record_count% enregistrements correspondent à des identifiants uniques existants: - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig %s field has been created with success. @@ -347,7 +348,7 @@ %user% vous demande de valider %title% - %user% vous demande de valider %title% + %user% vous demande de valider %title% eventsmanager/notify/validate.php @@ -520,7 +521,7 @@ A record matches the unique identifier : Un enregistrement correspond à un identifiant unique existant : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig A required field is missing or has an empty value @@ -644,7 +645,7 @@ Accuse de reception indisponible, vous n'avez pas declare d'adresse email Accusé de réception indisponible; vous n'avez pas déclaré d'adresse e-mail - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Action Forbidden : You are not the publisher @@ -699,8 +700,9 @@ Ajouter prod/User/Add.html.twig prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Add a new field @@ -753,6 +755,11 @@ actions/Feedback/list.html.twig prod/actions/Push.html.twig + + Add with caption + Add with caption + prod/upload/lazaret.html.twig + Additionnal modules Modules additionnels @@ -807,7 +814,7 @@ Advanced settings Réglages avancés - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Affichage @@ -908,7 +915,7 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig WorkZone/Browser/Browser.html.twig admin/worker-manager/worker_searchengine.html.twig task-manager/task-editor/subdefs.html.twig @@ -1002,9 +1009,9 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/MoveCollectionController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Controller/Prod/StoryController.php Controller/Admin/DataboxesController.php Controller/Admin/DataboxController.php @@ -1037,18 +1044,18 @@ An error occured when wanting to change status! Une erreur est survenue lors de la modification du status-bit! - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists Une erreur s'est produite lors du refus. Veuillez réessayer ou contacter un administrateur si le problème persiste - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while sending, please retry or contact an admin if problem persists Une erreur s'est produite lors de l'envoi. Veuillez réessayer ou contacter un administrateur si le problème persiste. - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while upload the file. Please retry @@ -1069,15 +1076,15 @@ An error occured, please retry or contact an admin if problem persists Une erreur est survenue. Veuillez réessayer et si le problème persiste, contactez un administrateur. prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig An error occurred Une erreur est survenue Order/Controller/ProdOrderController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Admin/SearchEngineController.php Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php @@ -1231,7 +1238,7 @@ Are you sure you want to rebuild the sub-definitions of selected records? Êtes-vous sûr de vouloir reconstruire les fichiers de sous-définitions des enregistrements sélectionnés ? - actions/Tools/index.html.twig + actions/Tools/index.html.twig Are you sure you want to reset rights? @@ -1252,7 +1259,7 @@ Attention, certain documents ont des sous-definitions substituees Attention, certains documents ont des sous-définitions substituées. - actions/Tools/index.html.twig + actions/Tools/index.html.twig Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci @@ -1343,7 +1350,7 @@ Auth failure - Auth failure + Auth failure web/admin/tree.html.twig @@ -1457,7 +1464,7 @@ Background Color - Background Color + Background Color Media/Subdef/Image.php @@ -1476,6 +1483,7 @@ Base Base + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -1590,10 +1598,10 @@ By checking this box, you accept %beginning_link% Terms of Use %end_link% En cochant cette case, vous acceptez les %beginning_link% conditions générales d'utilisation %end_link% - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig By default it is available for admins @@ -1751,7 +1759,7 @@ Certains champs sont obligatoires, veuillez les remplir Certains champs sont obligatoires, veuillez les compléter - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Ces informations sont directement fournies par la norme de metadonnees de ce champ : %norm_name% @@ -1768,10 +1776,11 @@ Vitesse de lecture Controller/Prod/LanguageController.php - + Changes for rotation will be applied only on the sub-definitions of "image" type. - Les rotations s'appliquent uniquement aux fichiers au format PNG et JPEG. - actions/Tools/index.html.twig + Changes for rotation will be applied only on + the sub-definitions of "image" type. + actions/Tools/index.html.twig Channels @@ -1798,8 +1807,8 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Choose a new password @@ -1815,7 +1824,7 @@ Civility Civilité - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Clear @@ -1869,7 +1878,7 @@ Collection Collection prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -2178,7 +2187,7 @@ Custom Personnaliser web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig DCES @@ -2255,7 +2264,7 @@ Date Date - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Date Added @@ -2288,7 +2297,7 @@ Date de la demande prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Date de modification @@ -2312,7 +2321,7 @@ Date limite prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Dear %user%, @@ -2397,8 +2406,8 @@ Delete Supprimer - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig @@ -2446,8 +2455,8 @@ Deny Refuser login/oauth/authorize-access.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Deplacement %n_element% elements @@ -2536,7 +2545,7 @@ Disable document type sharing Désactiver le lien de partage - actions/Tools/index.html.twig + actions/Tools/index.html.twig Disabled @@ -2549,7 +2558,7 @@ Form/Configuration/ActionsFormType.php - + Display & action settings Paramétrage d'affichage et d'action admin/fields/templates.html.twig @@ -2607,17 +2616,17 @@ Document envoye par %name% Document envoyé par %name% - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document has been successfully substitued Le document a été substitué - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% Document refusé par %name% - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document title @@ -2632,10 +2641,10 @@ Documents indisponibles Documents indisponibles - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Don't worry, You can modify your configuration later @@ -2650,6 +2659,7 @@ Download of documents Téléchargement de documents + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -2879,7 +2889,7 @@ Empty quarantine will remove all items, are you sure you want to continue ? Vider la quarantaine efface son contenu. Cette action est irréversible. Etes-vous certain de vouloir continuer ? - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Empty the collection before removing @@ -2952,7 +2962,7 @@ Enable document type sharing Activer le lien de partage - actions/Tools/index.html.twig + actions/Tools/index.html.twig Enable maintenance message broadcast @@ -3197,8 +3207,10 @@ Export Exporter - Controller/Prod/DoDownloadController.php + Controller/Prod/DownloadController.php + Controller/Prod/DownloadController.php Controller/Prod/DoDownloadController.php + Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php @@ -3309,7 +3321,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3339,7 +3351,7 @@ Filename Nom du fichier - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3416,12 +3428,12 @@ Forcer l'envoi du document Forcer l'envoi du document - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Forcer la reconstruction sur les enregistrements ayant des thumbnails substituees Forcer la reconstruction sur les enregistrements ayant des vignettes substituées - actions/Tools/index.html.twig + actions/Tools/index.html.twig Forgot password? @@ -3765,9 +3777,9 @@ Include Business-fields in caption Inclure les champs métier dans la notice - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Indexable @@ -3942,9 +3954,9 @@ La sous resolution n'est pas disponible pour les documents suivants La sous-résolution n'est pas disponible pour les documents suivants - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig La taille maximale d'une video est de %duration% minutes. @@ -4008,7 +4020,7 @@ Last uploaded version Dernière version ajoutée - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4083,7 +4095,7 @@ Les documents ne peuvent pas etre exportes Les documents ne peuvent pas être exportés web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Les elements ne peuvent etre uploades (problemes de type ou de droit) @@ -4504,6 +4516,7 @@ Nom Controller/Prod/LanguageController.php Bridge/Dailymotion/playlist_createcontainer.html.twig + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig prod/templates/push.html.twig admin/fields/templates.html.twig @@ -4598,7 +4611,7 @@ No document in quarantine Aucun document dans la quarantaine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig No document selected @@ -4869,22 +4882,22 @@ Order has been canceled La commande a été annulée - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php Order has been denied Choix appliqué(s). - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Order has been sent Choix appliqué(s). - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Orders manager @@ -5148,6 +5161,7 @@ Please wait while your files are being gathered for the download, this operation may take a few minutes. Veuillez patienter pendant que vos fichiers sont rassemblés pour le téléchargement. Cette opération peut prendre quelques minutes. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -5202,7 +5216,7 @@ Presets Réglages prédéfinis - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Previous @@ -5558,7 +5572,7 @@ Recevoir un accuse de reception a %my_email% Demander un accusé de réception à transmettre à l'adresse %my_email% - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Rechercher dans un champ date @@ -5583,7 +5597,7 @@ Record Not Found Enregistrement non trouvé - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -6083,8 +6097,8 @@ prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig web/admin/dashboard.html.twig @@ -6392,7 +6406,7 @@ Story Not Found Reportage inconnu - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6432,6 +6446,7 @@ Sub definition Sous-définitions + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6439,6 +6454,11 @@ Sous-définition admin/databox/details.html.twig + + Subdef "%s" has been successfully substitued + Subdef "%s" has been successfully substitued + Controller/Prod/ToolsController.php + Submit Envoyer @@ -6447,18 +6467,18 @@ Substitute Substituer - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Substitution is not possible for this kind of record La substitution de ce type d'enregistrement n'est pas possible - actions/Tools/index.html.twig + actions/Tools/index.html.twig Success Succès - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig api/auth/native_app_access_token.html.twig @@ -6549,9 +6569,14 @@ Séparez les mots clés ou tags par un espace : Paris vacances restaurant Bridge/Dailymotion/upload.html.twig - - TLS - TLS + + TLSV1.1 + TLSV1.1 + Form/Configuration/EmailFormType.php + + + TLSV1.2 + TLSV1.2 Form/Configuration/EmailFormType.php @@ -6571,7 +6596,7 @@ Target Device Dispositif ciblé - classes/databox/subdef.php + classes/databox/subdef.php Task Edition @@ -6615,7 +6640,7 @@ Terms of Use Conditions générales d'utilisation Form/Login/PhraseaRegisterForm.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Terms of service @@ -6670,7 +6695,8 @@ The destination record provided is not allowed L'enregistrement de destination fourni n'est pas autorisé - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6680,6 +6706,7 @@ The file contains the following elements Le fichier contient les éléments suivants : + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6876,13 +6903,9 @@ Thumbnail Vignette + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig - - Thumbnail has been successfully substitued - La vignette a été substituée - Controller/Prod/ToolsController.php - Thumbnails directory is mounted to be accessible via HTTP, while other files are not. Le répertoire des vignettes est monté pour être accessible en HTTP, les autres non. @@ -7029,12 +7052,12 @@ Un document commande Un document commandé. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Un document ne peut etre commande Un document ne peut être commandé. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Unable to add file to Phraseanet @@ -7224,7 +7247,7 @@ Uploaded by : %username% Ajouté par : %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7342,7 +7365,7 @@ Utilisation prevue: Utilisation prévue : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig VALIDATION @@ -7528,7 +7551,7 @@ Vous devez selectionner un type de sous definitions Vous devez sélectionner un type de sous-définitions - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Vous devez specifier une adresse email et un mot de passe valides @@ -7622,7 +7645,7 @@ Warning ! Attention ! - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Warning, this database is not empty @@ -7718,7 +7741,7 @@ Write Metas Ecriture des métadonnées - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig YYYY-MM-DD @@ -7784,7 +7807,7 @@ You can alternatively receive an email when the download is ready. Alternativement, vous pouvez recevoir un lien de téléchargement par email ? - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can choose only one record @@ -7799,7 +7822,7 @@ You can not directly download more than %max_download% Mo ; time to package all documents is too long Vous ne pouvez pas télécharger directement plus de %max_download% Mo de données. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can not edit this story @@ -7825,7 +7848,7 @@ You do not have enough rights to access quarantine Vous ne disposez pas des autorisations suffisantes pour accéder à la quarantaine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig You do not have required rights to send these documents over FTP @@ -7885,7 +7908,7 @@ You must agree to the Terms of Use to continue. Vous devez accepter les conditions générales d'utilisation pour poursuivre. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You must give a destination collection @@ -7895,7 +7918,7 @@ You must give a destination record Vous devez spécifier un enregistrement de destination - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7961,6 +7984,7 @@ Your documents are ready. If the download does not start, %before_link%click here%after_link% Vos documents sont prêts. Si le téléchargement ne démarre pas, %before_link%cliquez ici%after_link%. + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -8182,7 +8206,7 @@ admin:: auth failure list - admin:: auth failure list + liste des erreurs d'indentification web/admin/auth-failure.html.twig @@ -8211,7 +8235,7 @@ admin:: object inspector - Inspecteur + Inspecteur web/admin/tree.html.twig @@ -8580,7 +8604,7 @@ Adresse Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8595,7 +8619,7 @@ Code postal Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8625,7 +8649,7 @@ E-mail Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8673,7 +8697,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8695,7 +8719,7 @@ Poste Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8706,7 +8730,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8723,7 +8747,7 @@ Société Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8739,7 +8763,7 @@ admin::compte-utilisateur telephone Téléphone Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8755,7 +8779,7 @@ Ville Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8846,7 +8870,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:sexe: madame Mme Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8854,7 +8878,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:sexe: mademoiselle Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8862,7 +8886,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::compte-utilisateur:sexe: monsieur M. Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9224,7 +9248,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: delete auth failure - Supprimer l'échec d'authentification + Supprimer l'échec d'authentification web/admin/auth-failure.html.twig @@ -9234,7 +9258,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: erase auth failure table - Supprimer toutes les erreurs d'authentification + Supprimer toutes les erreurs d'authentification web/admin/auth-failure.html.twig @@ -9261,7 +9285,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::users: locked - locked + locked web/admin/auth-failure.html.twig @@ -9532,7 +9556,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin::workermanager:tab:queueMonitor: consumed queues - Afficher uniquement les files de messages consommées + Afficher uniquement les files de messages consommées admin/worker-manager/worker_queue_monitor.html.twig @@ -9780,7 +9804,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin:expose Retrieve configuration error Impossible de récupérer les réglages de Expose - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab-title:: Page title @@ -9790,32 +9814,32 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin:phrasea-service-setting:tab:: Auth Auth Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Expose Expose Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Notify Notify Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Report Report Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Uploader Uploader Service - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:expose:: Activate this expose Activer cet Expose - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Auth Client ID @@ -9830,7 +9854,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin:phrasea-service-setting:tab:expose:: Connection Kind Méthode d'interconnexion - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Delete @@ -9878,8 +9902,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin/phraseanet-service/expose.html.twig - admin:phrasea-service-setting:tab:expose:: OAuth token URI - admin:phrasea-service-setting:tab:expose:: OAuth token URI + admin:phrasea-service-setting:tab:expose:: OAuth token URI + OAuth token URI PhraseanetService/Form/PSExposeConnectionType.php @@ -9894,13 +9918,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - PhraseanetService/Form/PSExposeConnectionType.php + Nom du Auth provider de type ps-auth + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: verify ssl Vérifier la validité du certificat SSL - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:uploader:: Client ID @@ -9970,7 +9994,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le admin:phraseanet-service Retrieve configuration error Erreur de configuration de Phrasea - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:searchengine:aggregates:New field, please confirm setting. @@ -9991,7 +10015,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le alert Alerte - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -10012,7 +10036,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le an error occured une erreur est survenue - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% @@ -10131,10 +10155,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Annuler Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/import-dialog.html.twig web/thesaurus/thesaurus.html.twig @@ -10192,7 +10216,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::commander Commander - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::creer @@ -10220,13 +10244,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::envoyer Envoyer - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::essayer Essayer - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::fermer @@ -10382,7 +10406,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le boutton::telecharger Télécharger - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/lightbox/sc_options_box.html.twig web/lightbox/feed_options_box.html.twig @@ -10505,10 +10529,9 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le cancel Annuler - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig caption XML @@ -10582,13 +10605,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le classe Classe - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig client_credentials client_credentials - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php client_id @@ -10603,13 +10626,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le commande::deadline Date limite - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig commande::utilisation prevue Utilisation prévue - web/common/dialog_export.html.twig - prod/orders/order_item.html.twig + web/common/dialog_export.html.twig + prod/orders/order_item.html.twig copyClipboardLabel @@ -10825,7 +10848,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le documents Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -10901,7 +10924,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export:: FTP FTP web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: commande @@ -10912,7 +10935,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export:: envoi par mail E-Mail web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: erreur : aucun document selectionne @@ -10923,12 +10946,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export:: telechargement Téléchargement web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::export-email: email-invalid Email invalide - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::ftp: reglages manuels @@ -10938,18 +10961,18 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export::mail: contenu du mail Texte - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: destinataire A - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: fichiers joint Fichier(s) joint(s) - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::titre: nom original du document @@ -10964,12 +10987,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le export:email:: acknowledgement info Les accusés de réception ne fonctionnent que si le destinataire autorise cette fonctionnalité - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:email:info:: email addresses separated by commas Ajouter les adresses email en les séparant par une virgule - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig expose:: Choose a profile where to store mapping @@ -11012,7 +11035,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le expose:: logout Déconnexion - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig expose:: poster @@ -11158,10 +11181,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le file is not valid Le fichier n'est pas valide - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash @@ -11318,7 +11341,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le image rotation Rotation d'images - actions/Tools/index.html.twig + actions/Tools/index.html.twig image tool @@ -11723,7 +11746,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le mediatype Type média - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig meta-datas @@ -11733,7 +11756,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le mettre a jour le nom original de fichier apres substitution Mettre à jour le nom original du fichier après substitution - actions/Tools/index.html.twig + actions/Tools/index.html.twig name @@ -11749,14 +11772,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le no Non web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig user/import/view.html.twig web/account/sessions.html.twig no image selected Aucune image sélectionnée - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -11775,7 +11798,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le notification:: Basket '%title%' shared from %user% - Le panier '%title%' a été partagé par %user% + Le panier '%title%' a été partagé par %user% eventsmanager/notify/validate.php @@ -11831,198 +11854,198 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le order-manager:: all document treated Tous les documents ont été traités - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: cancel Annuler la commande (définitif) prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: canceled on %canceled_on% by %canceled_by%, with %n% items not treated Annulé le %canceled_on% par %canceled_by%, avec %n% documents non traités prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::mail: your-order-of Votre commande du : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: accepted-item Média délivré - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: address Adresse : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: already-validated Envoyé - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: by par - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: company Société : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: country Pays : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create Valider - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create-basket Créer un Panier - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: for-non-sent-items Pour le(s) document(s) non envoyé(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: information Informations sur le média : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: item Document - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-already-sent Document(s) déjà envoyé(s) : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-waiting-validation Document(s) en attente de validation - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: less Voir moins - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: more Voir plus - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: number Numéro - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: of du - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: refused-previously Précédemment refusé - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: rejected-item Média non délivré - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: reset Annuler - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: select-all Tout sélectionner - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-item Média sélectionné - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-records Document(s) sélectionné(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: submit Envoyer - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: tel Téléphone : - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: validate Valider les choix - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: warning-message-close Annuler les choix en attente? - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-denied-items Avec le(s) document(s) refusé(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-selected-items Avec la sélection - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-validated-items Avec le(s) document(s) envoyé(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-denied Document(s) refusé(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-validated Document(s) envoyé(s) - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Create-Basket Créer un panier - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Validation Récapitulatif de la commande - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: after @@ -12066,8 +12089,8 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Commande Numéro prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: pending @@ -12089,7 +12112,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Média(s) traité(s) prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig original logo @@ -12194,7 +12217,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le password Mot de passe - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php personalize logo @@ -12328,7 +12351,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le phraseanet:: prereglages Préréglages - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig phraseanet:: presse-papier @@ -12412,7 +12435,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le Controller/Root/AccountController.php - >]]> + phraseanet::account: << your account can be deleted via admin interface >> Vos droits ne vous permettent pas de réaliser cette action, votre compte ne peut être supprimé que via l'interface d'Administration. web/account/account.html.twig @@ -12619,7 +12642,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le preview Sous-définition - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig preview:: Description @@ -12998,7 +13021,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le processing En cours... - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -13024,7 +13047,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::advancesearch: Add - Ajouter + Ajouter web/prod/index.html.twig @@ -13100,7 +13123,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le prod::download: delete-marking-stamp prod::download: delete-marking-stamp - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + + + prod::download: report as spreadsheet + liste de l'export dans un tableau excel + web/common/dialog_export.html.twig prod::edit cannot edit multiple stories @@ -13354,7 +13382,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod::order-manager download expire on Téléchargement disponible jusqu'au - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod::publication:title @@ -13657,12 +13685,12 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod::tool:recreatesubviews: warning for rebuild sub-definitions Fabrication des sous définitions en cours de traitement - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tool:select subdef Sélectionner un fichier - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tools: document @@ -13688,7 +13716,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod::workzone:facet see more - Plus + Plus Controller/Prod/LanguageController.php @@ -13779,22 +13807,22 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod:expose Editable only Editable - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose Mine only Mes publications - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose field mapping Mapping - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose next suivante - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose preview @@ -13804,7 +13832,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod:expose previous précédente - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose: disabled @@ -13819,13 +13847,13 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod:expose:Add publication Ajouter une publication - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:Refresh Actualiser - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:connection:Auth connexion @@ -14114,7 +14142,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles prod:expose:select expose Choisir l'Expose - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:mapbox Change position @@ -15065,12 +15093,12 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles rotation 90 degres anti-horaires Rotation de 90 degrés anti-horaire - actions/Tools/index.html.twig + actions/Tools/index.html.twig rotation 90 degres horaire Rotation de 90 degrés horaire - actions/Tools/index.html.twig + actions/Tools/index.html.twig same UUID @@ -15269,20 +15297,20 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles Peut être commandé web/admin/subdefs.html.twig + + subdef.substituable + Sous définition substituable + web/admin/subdefs.html.twig + substitution Substitution actions/Tools/index.html.twig - - substitution HD - Substitution de document - actions/Tools/index.html.twig - - - substitution SD - Substitution de la vignette thumbnail - actions/Tools/index.html.twig + + substitution of %sd% + Substitution de %sd% + actions/Tools/index.html.twig task::_common_:hotfolder @@ -15570,7 +15598,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles web/thesaurus/thesaurus.html.twig - + thesaurus:: Supprimer cette branche ?&#10;(les termes concernes remonteront en candidats a la prochaine indexation) web/thesaurus/thesaurus.html.twig @@ -16086,13 +16114,13 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles thumbnail validation Validation de la vignette - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig tout le monde Tout le monde - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig toutes les notifications @@ -16124,6 +16152,11 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles mis à jour le Phrasea/Helper/Prod.php + + upload:: Copy meta + Copier les métadonnées de l'enregistrement sélectionné + prod/upload/lazaret.html.twig + upload:: Destination (collection) : Destination @@ -16135,12 +16168,12 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles Appliquer les status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig upload:: checkers for this file is disabled in configuration or deleted Checker désactivé ou supprimé - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -16150,10 +16183,9 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles validate Valider - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -16400,7 +16432,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles yes Oui web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig web/account/sessions.html.twig diff --git a/resources/locales/messages.nl.xlf b/resources/locales/messages.nl.xlf index 648499e103..9bc725af3a 100644 --- a/resources/locales/messages.nl.xlf +++ b/resources/locales/messages.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. @@ -9,6 +9,7 @@ + WorkerManager/Worker/DownloadAsyncWorker.php Form/Configuration/EmailFormType.php Form/Login/PhraseaAuthenticationForm.php @@ -129,12 +130,12 @@ %docs_not_orderable% documents ne peuvent pas etre commandes %docs_not_orderable% documenten kunnen niet worden besteld - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %docs_orderable% documents commandes %docs_orderable% documenten besteld - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig %entry_length% documents @@ -263,7 +264,7 @@ %record_count% records match the unique identifier : %record_count% records zijn gelijk aan de unieke id : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig %s field has been created with success. @@ -520,7 +521,7 @@ A record matches the unique identifier : Een record is gelijk aan de unieke id : - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig A required field is missing or has an empty value @@ -644,7 +645,7 @@ Accuse de reception indisponible, vous n'avez pas declare d'adresse email Ontvangstbevestiging niet beschikbaar is, u hebt geen emailadres opgegeven - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Action Forbidden : You are not the publisher @@ -699,8 +700,9 @@ Toevoegen prod/User/Add.html.twig prod/actions/Push.html.twig - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Add a new field @@ -754,6 +756,11 @@ actions/Feedback/list.html.twig prod/actions/Push.html.twig + + Add with caption + Add with caption + prod/upload/lazaret.html.twig + Additionnal modules Bijkomende modules @@ -808,7 +815,7 @@ Advanced settings Advanced settings - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Affichage @@ -909,7 +916,7 @@ actions/Feedback/list.html.twig actions/Feedback/list.html.twig actions/Feedback/list.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig WorkZone/Browser/Browser.html.twig admin/worker-manager/worker_searchengine.html.twig task-manager/task-editor/subdefs.html.twig @@ -1003,9 +1010,9 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/MoveCollectionController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php Controller/Prod/BasketController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Controller/Prod/StoryController.php Controller/Admin/DataboxesController.php Controller/Admin/DataboxController.php @@ -1038,18 +1045,18 @@ An error occured when wanting to change status! An error occured when wanting to change status! - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php An error occured while denying, please retry or contact an admin if problem persists Er heeft zich een fout voorgedaan tijdens het weigeren, gelieve opnieuw te proberen of contact op te nemen met een beheerder als het probleem blijft bestaan - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while sending, please retry or contact an admin if problem persists Er heeft zich een fout voorgedaan tijdens het versturen, gelieve opnieuw te proberen of contact op te nemen met een beheerder als het probleem blijft bestaan - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php An error occured while upload the file. Please retry @@ -1070,15 +1077,15 @@ An error occured, please retry or contact an admin if problem persists Een fout heeft zich voorgedaan, gelieve opnieuw te proberen of contact op te nemen met een beheerder als het probleem zich blijft voordoen prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig An error occurred Er is een fout opgetreden Order/Controller/ProdOrderController.php Controller/Prod/BasketController.php - Controller/Api/V1Controller.php - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Controller/Admin/SearchEngineController.php Controller/Admin/DataboxController.php Controller/Admin/CollectionController.php @@ -1232,7 +1239,7 @@ Are you sure you want to rebuild the sub-definitions of selected records? Are you sure you want to rebuild the sub-definitions of selected records? - actions/Tools/index.html.twig + actions/Tools/index.html.twig Are you sure you want to reset rights? @@ -1253,7 +1260,7 @@ Attention, certain documents ont des sous-definitions substituees Opgelet, sommige documenten bevatten thumbnails - actions/Tools/index.html.twig + actions/Tools/index.html.twig Attention, en supprimant ce preregalge, vous ne pourrez plus modifier ou supprimer de publications prealablement effectues avec celui-ci @@ -1477,6 +1484,7 @@ Base Databank + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -1591,10 +1599,10 @@ By checking this box, you accept %beginning_link% Terms of Use %end_link% Door deze optie aan te klikken aanvaardt u %beginning_link% Gebruiksvoorwaarden %end_link% - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig By default it is available for admins @@ -1752,7 +1760,7 @@ Certains champs sont obligatoires, veuillez les remplir Sommige velden zijn verplicht, wilt u ze invullen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Ces informations sont directement fournies par la norme de metadonnees de ce champ : %norm_name% @@ -1769,11 +1777,12 @@ Change play speed Controller/Prod/LanguageController.php - - Changes for rotation will be applied only on the sub-definitions of "image" type. + + Changes for rotation will be applied only on + the sub-definitions of "image" type. Changes for rotation will be applied only on - the sub-definitions of "image" type. - actions/Tools/index.html.twig + the sub-definitions of "image" type. + actions/Tools/index.html.twig Channels @@ -1800,8 +1809,8 @@ web/admin/subdefs.html.twig web/admin/subdefs.html.twig web/admin/subdefs.html.twig - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Choose a new password @@ -1817,7 +1826,7 @@ Civility Beleefdheid - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Clear @@ -1871,7 +1880,7 @@ Collection Collectie prod/Story/Create.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/databox/details.html.twig @@ -2181,7 +2190,7 @@ Custom Custom web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig DCES @@ -2258,7 +2267,7 @@ Date Datum - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Date Added @@ -2291,7 +2300,7 @@ Datum van de aanvraag prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Date de modification @@ -2315,7 +2324,7 @@ Deadline prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Dear %user%, @@ -2400,8 +2409,8 @@ Delete Verwijder - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig admin/task-manager/templates.html.twig @@ -2449,8 +2458,8 @@ Deny Weiger login/oauth/authorize-access.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Deplacement %n_element% elements @@ -2539,7 +2548,7 @@ Disable document type sharing Disable document type sharing - actions/Tools/index.html.twig + actions/Tools/index.html.twig Disabled @@ -2610,17 +2619,17 @@ Document envoye par %name% Document verstuurd door %name% - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document has been successfully substitued Document werd met succes vervangen - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php Document refuse par %name% Document geweigerd door %name% - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Document title @@ -2635,10 +2644,10 @@ Documents indisponibles Documenten niet beschikbaar - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Don't worry, You can modify your configuration later @@ -2653,6 +2662,7 @@ Download of documents Download van documenten + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -2885,7 +2895,7 @@ Empty quarantine will remove all items, are you sure you want to continue ? De quarantaine ledigen zal alle elementen verwijderen, bent u zeker dat u wilt doorgaan ? - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Empty the collection before removing @@ -2958,7 +2968,7 @@ Enable document type sharing Enable document type sharing - actions/Tools/index.html.twig + actions/Tools/index.html.twig Enable maintenance message broadcast @@ -3203,8 +3213,10 @@ Export Exporteer - Controller/Prod/DoDownloadController.php + Controller/Prod/DownloadController.php + Controller/Prod/DownloadController.php Controller/Prod/DoDownloadController.php + Controller/Prod/DoDownloadController.php Controller/Prod/LanguageController.php @@ -3315,7 +3327,7 @@ Model/Manipulator/LazaretManipulator.php Model/Manipulator/LazaretManipulator.php Controller/Prod/LazaretController.php - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php File is too big : 64k max @@ -3345,7 +3357,7 @@ Filename Bestandsnaam - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Fils disponibles @@ -3422,12 +3434,12 @@ Forcer l'envoi du document Forceer het versturen van het document - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Forcer la reconstruction sur les enregistrements ayant des thumbnails substituees Forceer de recontstructie op de record die verloren thumbnails hebben - actions/Tools/index.html.twig + actions/Tools/index.html.twig Forgot password? @@ -3771,9 +3783,9 @@ Include Business-fields in caption Business-fields opnemen in caption - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Indexable @@ -3948,9 +3960,9 @@ La sous resolution n'est pas disponible pour les documents suivants De onder resolutie is niet beschikbaar voor de volgende documenten - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig La taille maximale d'une video est de %duration% minutes. @@ -4014,7 +4026,7 @@ Last uploaded version Laatst opgeladen versie - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Le bridge Dailymotion ne prend en charge que les videos @@ -4089,7 +4101,7 @@ Les documents ne peuvent pas etre exportes De documenten kunnen niet worden geëxporteerd web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Les elements ne peuvent etre uploades (problemes de type ou de droit) @@ -4510,6 +4522,7 @@ Naam Controller/Prod/LanguageController.php Bridge/Dailymotion/playlist_createcontainer.html.twig + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig prod/templates/push.html.twig admin/fields/templates.html.twig @@ -4604,7 +4617,7 @@ No document in quarantine Geen documenten in quarantaine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig No document selected @@ -4875,22 +4888,22 @@ Order has been canceled Order has been canceled - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php Order has been denied Bestelling werd geweigerd - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Order has been sent Bestelling is verstuurd - Order/Controller/ProdOrderController.php - Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php + Order/Controller/ProdOrderController.php prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig Orders manager @@ -5154,6 +5167,7 @@ Please wait while your files are being gathered for the download, this operation may take a few minutes. Gelieve te wachten tot uw documenten worden verzameld voor de download, dit kan enkele minuten duren + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -5208,7 +5222,7 @@ Presets Presets - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig Previous @@ -5564,7 +5578,7 @@ Recevoir un accuse de reception a %my_email% Ontvangen van een bevestigingsmail van ontvangst van %my_email% - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Rechercher dans un champ date @@ -5589,7 +5603,7 @@ Record Not Found Document niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Record removed from basket @@ -6089,8 +6103,8 @@ prod/actions/Push.html.twig prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig web/admin/dashboard.html.twig @@ -6398,7 +6412,7 @@ Story Not Found Artikel niet gevonden - Controller/Api/V1Controller.php + Controller/Api/V1Controller.php Story created @@ -6438,6 +6452,7 @@ Sub definition Thumbnail + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6445,6 +6460,11 @@ Thumbnail admin/databox/details.html.twig + + Subdef "%s" has been successfully substitued + Subdef "%s" has been successfully substitued + Controller/Prod/ToolsController.php + Submit Submit @@ -6453,18 +6473,18 @@ Substitute Vervangen - prod/upload/lazaret.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Substitution is not possible for this kind of record Vervanging is niet mogelijk voor dit soort van record - actions/Tools/index.html.twig + actions/Tools/index.html.twig Success Gelukt - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig api/auth/native_app_access_token.html.twig @@ -6555,9 +6575,14 @@ Scheid de tags met een spate: Paris vakantie restaurant Bridge/Dailymotion/upload.html.twig - - TLS - TLS + + TLSV1.1 + TLSV1.1 + Form/Configuration/EmailFormType.php + + + TLSV1.2 + TLSV1.2 Form/Configuration/EmailFormType.php @@ -6577,7 +6602,7 @@ Target Device Doelapparaat - classes/databox/subdef.php + classes/databox/subdef.php Task Edition @@ -6621,7 +6646,7 @@ Terms of Use Gebruiksvoorwaarden Form/Login/PhraseaRegisterForm.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Terms of service @@ -6676,7 +6701,8 @@ The destination record provided is not allowed De opgegeven bestemmingsrecord is niet toegestaan - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php The document %name% has been quarantined @@ -6686,6 +6712,7 @@ The file contains the following elements Dit document bevat de volgende elementen + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -6882,13 +6909,9 @@ Thumbnail Thumbnail + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig - - Thumbnail has been successfully substitued - Thumbnail werd met succes vervangen - Controller/Prod/ToolsController.php - Thumbnails directory is mounted to be accessible via HTTP, while other files are not. Thumbnails mappen zijn zichtbaar via HTTP, andere files niet. @@ -7035,12 +7058,12 @@ Un document commande Een document bestelling - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Un document ne peut etre commande Eén document kan niet worden besteld - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Unable to add file to Phraseanet @@ -7230,7 +7253,7 @@ Uploaded by : %username% Opgeladen door : %username% - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig Use Google Chart API @@ -7348,7 +7371,7 @@ Utilisation prevue: Utilisation prevue: - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig VALIDATION @@ -7534,7 +7557,7 @@ Vous devez selectionner un type de sous definitions U moet een type thumbnail selecteren - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Vous devez specifier une adresse email et un mot de passe valides @@ -7628,7 +7651,7 @@ Warning ! Waarschuwing ! - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig Warning, this database is not empty @@ -7724,7 +7747,7 @@ Write Metas Schrijf Metas - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig YYYY-MM-DD @@ -7790,7 +7813,7 @@ You can alternatively receive an email when the download is ready. Als alternatief kunt u een email ontvangen wanneer de download klaar is. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can choose only one record @@ -7805,7 +7828,7 @@ You can not directly download more than %max_download% Mo ; time to package all documents is too long U kan niet meer dan %max_download% Mb downloaded ; tijd om alle documenten compresseren is te lang - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You can not edit this story @@ -7831,7 +7854,7 @@ You do not have enough rights to access quarantine U hebt niet voldoende rechten voor de toegang van de quarantaine - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig You do not have required rights to send these documents over FTP @@ -7891,7 +7914,7 @@ You must agree to the Terms of Use to continue. U moet de gebruiksvoorwaarden aanvaarden. - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig You must give a destination collection @@ -7901,7 +7924,7 @@ You must give a destination record U moet een bestemmingsrecord opgeven - Controller/Prod/LazaretController.php + Controller/Prod/LazaretController.php You need define a model before importing a list of users @@ -7967,6 +7990,7 @@ Your documents are ready. If the download does not start, %before_link%click here%after_link% Uw documenten zijn klaar. Als het downloaden niet start, %before_link%klik hier%after_link% + actions/Download/prepare_async.html.twig actions/Download/prepare.html.twig @@ -8586,7 +8610,7 @@ Adres Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8601,7 +8625,7 @@ Postcode Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8631,7 +8655,7 @@ Email Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8679,7 +8703,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8701,7 +8725,7 @@ Postcode Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8712,7 +8736,7 @@ Core/Provider/RegistrationServiceProvider.php Event/Subscriber/RegistrationSubscriber.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig web/account/account.html.twig @@ -8729,7 +8753,7 @@ Bedrijf Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/users.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig @@ -8745,7 +8769,7 @@ admin::compte-utilisateur telephone Telefoon Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/connected-users.html.twig web/admin/editusers.html.twig admin/user/registrations.html.twig @@ -8761,7 +8785,7 @@ Star Core/Provider/RegistrationServiceProvider.php Controller/Admin/UserController.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8851,7 +8875,7 @@ admin::compte-utilisateur:sexe: madame Mevrouw Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8859,7 +8883,7 @@ admin::compte-utilisateur:sexe: mademoiselle Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -8867,7 +8891,7 @@ admin::compte-utilisateur:sexe: monsieur De heer Core/Provider/RegistrationServiceProvider.php - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/admin/editusers.html.twig web/account/account.html.twig @@ -9785,7 +9809,7 @@ admin:expose Retrieve configuration error admin:expose Retrieve configuration error - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab-title:: Page title @@ -9795,32 +9819,32 @@ admin:phrasea-service-setting:tab:: Auth admin:phrasea-service-setting:tab:: Auth - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Expose admin:phrasea-service-setting:tab:: Expose - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Notify admin:phrasea-service-setting:tab:: Notify - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Report admin:phrasea-service-setting:tab:: Report - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:: Uploader admin:phrasea-service-setting:tab:: Uploader - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:phrasea-service-setting:tab:expose:: Activate this expose admin:phrasea-service-setting:tab:expose:: Activate this expose - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Auth Client ID @@ -9835,7 +9859,7 @@ admin:phrasea-service-setting:tab:expose:: Connection Kind admin:phrasea-service-setting:tab:expose:: Connection Kind - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: Delete @@ -9900,12 +9924,12 @@ admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth admin:phrasea-service-setting:tab:expose:: auth provider name with type ps-auth - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:expose:: verify ssl admin:phrasea-service-setting:tab:expose:: verify ssl - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php admin:phrasea-service-setting:tab:uploader:: Client ID @@ -9975,7 +9999,7 @@ admin:phraseanet-service Retrieve configuration error admin:phraseanet-service Retrieve configuration error - admin/phraseanet-service/index.html.twig + admin/phraseanet-service/index.html.twig admin:searchengine:aggregates:New field, please confirm setting. @@ -9996,7 +10020,7 @@ alert alert - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -10017,7 +10041,7 @@ an error occured een fout geeft zich voorgedaan - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php an error occured : %message% @@ -10136,10 +10160,10 @@ Annuleer Controller/Prod/LanguageController.php Controller/Prod/LanguageController.php - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/thesaurus/export-text-dialog.html.twig web/thesaurus/import-dialog.html.twig web/thesaurus/thesaurus.html.twig @@ -10197,7 +10221,7 @@ boutton::commander Bestellen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::creer @@ -10225,13 +10249,13 @@ boutton::envoyer Verzenden - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::essayer Proberen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig boutton::fermer @@ -10387,7 +10411,7 @@ boutton::telecharger Downloaden - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig web/lightbox/sc_options_box.html.twig web/lightbox/feed_options_box.html.twig @@ -10510,10 +10534,9 @@ cancel annuleren - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig caption XML @@ -10587,13 +10610,13 @@ classe klasse - web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig + web/admin/subdefs.html.twig client_credentials client_credentials - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php client_id @@ -10608,13 +10631,13 @@ commande::deadline Deadline - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig commande::utilisation prevue Utilisation gepland - web/common/dialog_export.html.twig - prod/orders/order_item.html.twig + web/common/dialog_export.html.twig + prod/orders/order_item.html.twig copyClipboardLabel @@ -10830,7 +10853,7 @@ document Phrasea/Twig/PhraseanetExtension.php web/admin/subdefs.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig task-manager/task-editor/subdefs.html.twig @@ -10906,7 +10929,7 @@ export:: FTP FTP web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: commande @@ -10917,7 +10940,7 @@ export:: envoi par mail Verstuur per mail web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:: erreur : aucun document selectionne @@ -10928,12 +10951,12 @@ export:: telechargement Download web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::export-email: email-invalid export::export-email: email-invalid - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::ftp: reglages manuels @@ -10943,18 +10966,18 @@ export::mail: contenu du mail Inhoud van de mail - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: destinataire Bestemmeling - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::mail: fichiers joint Toegevoegde bestanden - web/common/dialog_export.html.twig - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export::titre: nom original du document @@ -10969,12 +10992,12 @@ export:email:: acknowledgement info export:email:: acknowledgement info - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig export:email:info:: email addresses separated by commas export:email:info:: email addresses separated by commas - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig expose:: Choose a profile where to store mapping @@ -11017,7 +11040,7 @@ expose:: logout expose:: logout - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig expose:: poster @@ -11163,10 +11186,10 @@ file is not valid bestand is niet geldig - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php - Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php + Controller/Prod/ToolsController.php flash @@ -11323,7 +11346,7 @@ image rotation beeld rotatie - actions/Tools/index.html.twig + actions/Tools/index.html.twig image tool @@ -11728,7 +11751,7 @@ mediatype mediatype - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig meta-datas @@ -11738,7 +11761,7 @@ mettre a jour le nom original de fichier apres substitution de naam van het bestand up to date zetten na vervanging - actions/Tools/index.html.twig + actions/Tools/index.html.twig name @@ -11754,14 +11777,14 @@ no Nee web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig user/import/view.html.twig web/account/sessions.html.twig no image selected geen beeld geselecteerd - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -11836,198 +11859,198 @@ order-manager:: all document treated order-manager:: all document treated - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: cancel order-manager:: cancel prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager:: canceled on %canceled_on% by %canceled_by%, with %n% items not treated order-manager:: canceled on %canceled_on% by %canceled_by%, with %n% items not treated prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::mail: your-order-of order-manager::mail: your-order-of - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: accepted-item order-manager::order-item: accepted-item - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: address order-manager::order-item: address - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: already-validated order-manager::order-item: already-validated - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: by order-manager::order-item: by - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: company order-manager::order-item: company - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: country order-manager::order-item: country - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create order-manager::order-item: create - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: create-basket order-manager::order-item: create-basket - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: for-non-sent-items order-manager::order-item: for-non-sent-items - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: information order-manager::order-item: information - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: item order-manager::order-item: item - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-already-sent order-manager::order-item: items-already-sent - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: items-waiting-validation order-manager::order-item: items-waiting-validation - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: less order-manager::order-item: less - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: more order-manager::order-item: more - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: number order-manager::order-item: number - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: of order-manager::order-item: of - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: refused-previously order-manager::order-item: refused-previously - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: rejected-item order-manager::order-item: rejected-item - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: reset order-manager::order-item: reset - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: select-all order-manager::order-item: select-all - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-item order-manager::order-item: selected-item - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: selected-records order-manager::order-item: selected-records - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: submit order-manager::order-item: submit - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: tel order-manager::order-item: tel - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: validate order-manager::order-item: validate - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: warning-message-close order-manager::order-item: warning-message-close - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-denied-items order-manager::order-item: with-denied-items - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-selected-items order-manager::order-item: with-selected-items - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: with-validated-items order-manager::order-item: with-validated-items - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-denied order-manager::order-item: you-have-denied - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item: you-have-validated order-manager::order-item: you-have-validated - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Create-Basket order-manager::order-item:Create-Basket - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-item:Validation order-manager::order-item:Validation - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: after @@ -12071,8 +12094,8 @@ order-manager::order-list: order-id prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig + prod/orders/order_item.html.twig order-manager::order-list: pending @@ -12094,7 +12117,7 @@ order-manager::order-list: treated-documents prod/orders/order_box.html.twig prod/orders/order_box.html.twig - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig original logo @@ -12199,7 +12222,7 @@ password password - PhraseanetService/Form/PSExposeConnectionType.php + PhraseanetService/Form/PSExposeConnectionType.php personalize logo @@ -12333,7 +12356,7 @@ phraseanet:: prereglages Voorinstellingen - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig phraseanet:: presse-papier @@ -12624,7 +12647,7 @@ preview voorvertoning - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig preview:: Description @@ -13003,7 +13026,7 @@ processing verwerken - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -13105,7 +13128,12 @@ prod::download: delete-marking-stamp prod::download: delete-marking-stamp - web/common/dialog_export.html.twig + web/common/dialog_export.html.twig + + + prod::download: report as spreadsheet + prod::download: report as spreadsheet + web/common/dialog_export.html.twig prod::edit cannot edit multiple stories @@ -13356,7 +13384,7 @@ prod::order-manager download expire on prod::order-manager download expire on - prod/orders/order_item.html.twig + prod/orders/order_item.html.twig prod::publication:title @@ -13659,12 +13687,12 @@ prod::tool:recreatesubviews: warning for rebuild sub-definitions prod::tool:recreatesubviews: warning for rebuild sub-definitions - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tool:select subdef prod::tool:select subdef - actions/Tools/index.html.twig + actions/Tools/index.html.twig prod::tools: document @@ -13781,22 +13809,22 @@ prod:expose Editable only prod:expose Editable only - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose Mine only prod:expose Mine only - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose field mapping prod:expose field mapping - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose next prod:expose next - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose preview @@ -13806,7 +13834,7 @@ prod:expose previous prod:expose previous - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose: disabled @@ -13821,13 +13849,13 @@ prod:expose:Add publication prod:expose:Add publication - prod/WorkZone/Macros.html.twig - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:Refresh prod:expose:Refresh - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:expose:connection:Auth connexion @@ -14116,7 +14144,7 @@ prod:expose:select expose prod:expose:select expose - prod/WorkZone/Macros.html.twig + prod/WorkZone/Macros.html.twig prod:mapbox Change position @@ -15061,12 +15089,12 @@ rotation 90 degres anti-horaires 90 graden niet kloksgewijs draaien - actions/Tools/index.html.twig + actions/Tools/index.html.twig rotation 90 degres horaire 90 graden kloksgewijs draaien - actions/Tools/index.html.twig + actions/Tools/index.html.twig same UUID @@ -15265,20 +15293,20 @@ subdef.orderable web/admin/subdefs.html.twig + + subdef.substituable + subdef.substituable + web/admin/subdefs.html.twig + substitution vervanging actions/Tools/index.html.twig - - substitution HD - vervanging HD - actions/Tools/index.html.twig - - - substitution SD - vervanging SD - actions/Tools/index.html.twig + + substitution of %sd% + substitution of %sd% + actions/Tools/index.html.twig task::_common_:hotfolder @@ -16082,13 +16110,13 @@ thumbnail validation thumbnail goedkeuring - actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig tout le monde iedereen - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig toutes les notifications @@ -16120,6 +16148,11 @@ updated_on Phrasea/Helper/Prod.php + + upload:: Copy meta + upload:: Copy meta + prod/upload/lazaret.html.twig + upload:: Destination (collection) : Bestemming @@ -16131,12 +16164,12 @@ Status prod/upload/upload.html.twig prod/upload/upload-flash.html.twig - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig upload:: checkers for this file is disabled in configuration or deleted upload:: checkers for this file is disabled in configuration or deleted - prod/upload/lazaret.html.twig + prod/upload/lazaret.html.twig users rights have been reseted @@ -16146,10 +16179,9 @@ validate OK - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig - actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig + actions/Tools/index.html.twig actions/Tools/videoEditor.html.twig @@ -16396,7 +16428,7 @@ yes Ja web/common/technical_datas.html.twig - web/admin/subdefs.html.twig + web/admin/subdefs.html.twig web/account/sessions.html.twig diff --git a/resources/locales/validators.de.xlf b/resources/locales/validators.de.xlf index 95e5fa420c..dfe7e2dbd4 100644 --- a/resources/locales/validators.de.xlf +++ b/resources/locales/validators.de.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.en.xlf b/resources/locales/validators.en.xlf index f2dcb55859..8225571e97 100644 --- a/resources/locales/validators.en.xlf +++ b/resources/locales/validators.en.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.fr.xlf b/resources/locales/validators.fr.xlf index 3c95cc0f4b..df7372f566 100644 --- a/resources/locales/validators.fr.xlf +++ b/resources/locales/validators.fr.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/resources/locales/validators.nl.xlf b/resources/locales/validators.nl.xlf index f83ae7c464..9ff948c492 100644 --- a/resources/locales/validators.nl.xlf +++ b/resources/locales/validators.nl.xlf @@ -1,6 +1,6 @@ - +
The source node in most cases contains the sample message as written by the developer. If it looks like a dot-delimitted string such as "form.label.firstname", then the developer has not provided a default message. diff --git a/templates/web/prod/actions/Tools/videoEditor.html.twig b/templates/web/prod/actions/Tools/videoEditor.html.twig index 50719f5eb3..f3fc5ee52c 100644 --- a/templates/web/prod/actions/Tools/videoEditor.html.twig +++ b/templates/web/prod/actions/Tools/videoEditor.html.twig @@ -229,7 +229,7 @@

@@ -241,18 +241,16 @@

- + {% for videoTextTrackField in videoTextTrackFields %} + + {% endfor %}


@@ -359,6 +357,15 @@ $('#submit-subtitle-request').on('click', function (e) { e.preventDefault(); console.log("auto-subtitle process"); + + var destination = {}; + $.each($('input[name=subtitle_language_destination]'), function(k, input){ + let inputEl = $(input); + if (inputEl.prop('checked')) { + destination[inputEl.data('label')] = inputEl.val(); + } + }); + $.ajax({ type: 'POST', url: '/prod/tools/auto-subtitle/', @@ -366,10 +373,8 @@ data: { databox_id: {{ record.getDataboxId }}, record_id: {{ record.getRecordId }}, - subtitle_language_source: $('#subtitle_language_source option:selected').text(), - meta_struct_id_source: $('#subtitle_language_source').val(), - subtitle_language_destination: $('#subtitle_language_destination option:selected').text(), - meta_struct_id_destination: $('#subtitle_language_destination').val() + subtitle_language_source: $('#subtitle_language_source').val(), + subtitle_destination: JSON.stringify(destination), }, success: function success(data) { console.log(data); diff --git a/templates/web/prod/upload/lazaret.html.twig b/templates/web/prod/upload/lazaret.html.twig index 74cdce9c19..62b84a5a0d 100644 --- a/templates/web/prod/upload/lazaret.html.twig +++ b/templates/web/prod/upload/lazaret.html.twig @@ -33,8 +33,9 @@
    + {# @var file \Alchemy\Phrasea\Model\Entities\LazaretFile #} {% for file in lazaretFiles %} -
  • +
  • {{ _self.lazaretElement(app, file) }}
  • {% endfor %} @@ -73,6 +74,7 @@ button.closest(".btn-group").removeClass('loading'); } + function reloadContent(force) { var nbItems = scope.find(".wrapper-item").length; @@ -92,16 +94,16 @@ } } - /* $(".records-subititution .diapo", scope) + /* $(".record-proposal .diapo", scope) .bind('click', function(e){ $(this).closest('.lazaret-proposals').find('.diapo').removeClass('selected'); $(this).addClass('selected'); } );*/ - $(".records-subititution .captionTips", scope).tooltip(); - $(".records-subititution .infoTips", scope).tooltip(); - $(".records-subititution .previewTips", scope).tooltip(); + $(".record-proposal .captionTips", scope).tooltip(); + $(".record-proposal .infoTips", scope).tooltip(); + $(".record-proposal .previewTips", scope).tooltip(); var emptying = false; // true=emptying, set to false to stop @@ -176,17 +178,36 @@ emptying = true; f(); }); + + var data; + + //add lazaret file click action $("button.add-lazaret", scope).bind('click', function () { - var that = $(this); - var lazaretId = getLazaretId(that); + const that = $(this); + const $elementRow = that.closest(".lazaretElement"); + let $form = $("FORM", $elementRow); + const lazaretId = getLazaretId(that); + + let $selectedProposals = $(".record-proposal .selected"); + if($selectedProposals.length > 1) { + alert(language.onlyOneRecord); + return false; + } + if($selectedProposals.length === 1) { + let recordId = $selectedProposals.first().attr("data-record_id"); + $(".record_id", $form).val(recordId); + } + else { + $(".record_id", $form).val(''); + } + var destinationCollectionId = getDestinationId(that); var container = $(this).closest('.wrapper-item'); - var form = $(this).closest("form"); /*fix POST on firefox*/ - data = form.serializeArray(); + data = $form.serializeArray(); var allData = that.parent().closest('.wrapper-item').find(".change-record-wrapper").html(); that.closest(".form-backup ").append(allData); that.parent().closest('.wrapper-item').find(".change-record ").remove(); @@ -268,25 +289,66 @@ //update status list - function resetStatus(that) { - that.removeClass('selected'); - var html = that.parent().closest('.wrapper-item').find(".status-backup").html(); - that.parent().closest('.wrapper-item').find(".status-container").html(''); - that.parent().closest('.wrapper-item').find(".status-container").append(html); - }; - $(".span12 img, .reset-status").click(function () { - var that = $(this).closest('.wrapper-item').find('.lazaret-proposals .diapo'); - resetStatus(that); + function resetStatus($elementRow) { + let html = $(".status-backup", $elementRow).html(); + $(".status-container", $elementRow).html(''); + $(".status-container", $elementRow).append(html); + } + + + + + function isRecordSelected($elementRow, selected) { + if(selected) { + $elementRow.attr("hasSelected", true); +// $('BUTTON.subtitute-lazaret', $elementRow).removeAttr('disabled'); +// $('BUTTON.subtitute-lazaret', $elementRow).show(); + $('.copy_meta', $elementRow).show(); + } + else { + $elementRow.removeAttr("hasSelected"); +// $('BUTTON.subtitute-lazaret', $elementRow).attr('disabled', "true"); +// $('BUTTON.subtitute-lazaret', $elementRow).hide(); +// $('.copy_meta', $elementRow).hide(); + $("INPUT[name=copy_meta]", $elementRow).removeAttr("checked"); + checkCopyMeta($elementRow, false); + } + } + + function checkCopyMeta($elementRow, checked) { + const $b = $("BUTTON.add-lazaret .b_label", $elementRow); + if (checked) { + $b.text("{{ "Add with caption" | trans }}") + } + else { + $b.text("{{ "Add" | trans }}") + } + } + + + + + // $(".span12 img, .reset-status").click(function () { + $(".reset-status").click(function () { + let $elementRow = $(this).closest(".lazaretElement"); + resetStatus($elementRow); }); - $(".records-subititution .diapo", scope).bind('click', function () { + + $(".record-proposal .diapo", scope).bind('click', function () { var that = $(this); + let $elementRow = that.closest(".lazaretElement"); + var diapo = that.closest('.lazaret-proposals').find('.diapo'); var container = that.closest('.wrapper-item'); + diapo.not(this).removeClass('selected'); /*Set selected or not to check for sending ajax request*/ if (that.hasClass("selected")) { - resetStatus(that); - } else { + that.removeClass('selected'); + resetStatus($elementRow); + isRecordSelected($elementRow, false); + } + else { that.addClass('selected'); var elements = $(".selected", container); var recordId = elements.first().attr("data-record_id"); @@ -320,9 +382,9 @@ html += ''; html += ''; if (value['img_off'] != null) { - html += ' '; + html += ' '; } - ; + html += '' + labelOff + ''; html += ''; html += ''; @@ -332,13 +394,15 @@ if (value['img_on'] != null) { html += ''; } - ; + html += ''; html += ''; } - ; - that.parent().closest('.wrapper-item').find(".status-container").html(''); - that.parent().closest('.wrapper-item').find(".status-container").append(html); + + $(".status-container", $elementRow).html(''); + $(".status-container", $elementRow).append(html); + + isRecordSelected($elementRow, true); } }, complete: function () { @@ -349,43 +413,39 @@ } }); - //substitute lazaret file click action - $("button.subtitute-lazaret", scope).bind('click', function () { - var that = $(this); - var lazaretId = getLazaretId(that); - var container = $(this).closest('.wrapper-item'); - - var nbProposals = $('.records-subititution', container).length; - var elements = []; - var nbElement = 0; - + $("INPUT[name=copy_meta]", scope).click( + function(event) { + const that = $(this); + const $elementRow = that.closest(".lazaretElement"); + if(!$elementRow.attr("hasSelected")) { + return false; + } + checkCopyMeta($elementRow, event.target.checked); + } + ); - if (nbProposals > 1) { - elements = $(".selected", container); - nbElement = elements.length; - } else if (nbProposals == 1) { - elements = $(".records-subititution > div", container); - } else { - return false; + //substitute lazaret file click action + $("button.subtitute-lazaret", scope).bind('click', function (event) { + const that = $(this); + const $elementRow = that.closest(".lazaretElement"); + if(!$elementRow.attr("hasSelected")) { + return false; } - if (nbElement === 0 && nbProposals > 1) { - alert(language.selectOneRecord); + var lazaretId = getLazaretId(that); - return false; - } else if (nbElement > 1) { + let $selectedProposals = $(".record-proposal .selected"); + if($selectedProposals.length !== 1) { alert(language.onlyOneRecord); return false; } + let recordId = $selectedProposals.first().attr("data-record_id"); + let $form = $("FORM", $elementRow); - var recordId = elements.first().attr("data-record_id"); - var form = $(this).closest("form"); - $(".record_id").val(recordId); - + $(".record_id", $form).val(recordId); - var form = $(this).closest("form"); - data = form.serializeArray(); + data = $form.serializeArray(); var allData = that.parent().closest('.wrapper-item').find(".change-record-wrapper").html(); that.closest(".form-backup ").append(allData); that.parent().closest('.wrapper-item').find(".change-record ").remove(); @@ -424,9 +484,11 @@ $(".toggle-status").click(function () { $(this).nextAll('.status-wrapper').first().toggleClass('hidden'); }); + }); +{# @var file \Alchemy\Phrasea\Model\Entities\LazaretFile #} {% macro lazaretElement(app, file) %} {% import "common/thumbnail.html.twig" as thumb %} {% set records = file.getRecordsToSubstitute(app, true) %} @@ -467,7 +529,9 @@
    Reset status +
    {{ 'upload:: Status :' | trans }}
    + + +
    +   + +
    +
    {% endif %} - -
    - - {% if records|length > 0 %} - {% endif %} @@ -603,10 +673,11 @@
      {% for record in records %} {% set reasons = record['reasons'] %} + {# @var record \record_adapter #} {% set record = record['record'] %} {% if app.getAclForUser(app.getAuthenticatedUser()).has_right_on_base(record.get_base_id(), constant('\\ACL::CANADDRECORD')) and app.getAclForUser(app.getAuthenticatedUser()).has_right_on_base(record.get_base_id(), constant('\\ACL::CANDELETERECORD')) %} -
    • +
    • {% include 'prod/results/record.html.twig' with { 'record': record, 'settings': { @@ -632,6 +703,11 @@ {% endmacro %}