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% Dokumente können nicht bestellt werden
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
%docs_orderable% bestellte Dokumente
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -195,7 +196,7 @@
Bridge/Dailymotion/element_informations.html.twig
-
+
ausgewählt]]>
Controller/Prod/QueryController.php
@@ -263,7 +264,7 @@
%record_count% Datensätze entsprechen dem eindeutigen Bezeichner:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -520,7 +521,7 @@
Ein Datensatz entspricht dem eindeutigen Bezeichner :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -644,7 +645,7 @@
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
@@ -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
@@ -753,6 +755,11 @@
actions/Feedback/list.html.twig
prod/actions/Push.html.twig
+
+
+ Add with caption
+ prod/upload/lazaret.html.twig
+
Zusatzmodule
@@ -807,7 +814,7 @@
Erweiterte Einstellungen
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -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 @@
Beim Ändern des Status ist ein Fehler aufgetreten!
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
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
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
@@ -1069,15 +1076,15 @@
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
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 @@
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
@@ -1252,7 +1259,7 @@
Vorsicht, einige Dokumente haben ersetzte Unterauflösungen
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -1476,6 +1483,7 @@
Datenbank
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -1590,10 +1598,10 @@
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
@@ -1751,7 +1759,7 @@
Bitte füllen Sie die erforderlichen Felder aus
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -1768,10 +1776,11 @@
Wiedergabegeschwindigkeit ändern
Controller/Prod/LanguageController.php
-
+
- Ä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
@@ -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
@@ -1815,7 +1824,7 @@
Anrede
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -1869,7 +1878,7 @@
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 @@
benutzerdefiniert
web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -2255,7 +2264,7 @@
Datum
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -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
@@ -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
@@ -2397,8 +2406,8 @@
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 @@
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
@@ -2536,7 +2545,7 @@
Sharing-Link deaktivieren
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -2549,7 +2558,7 @@
Form/Configuration/ActionsFormType.php
-
+
Anzeige und Handlung-Einstellungen
admin/fields/templates.html.twig
@@ -2607,17 +2616,17 @@
Dokument wurde von %name% gesendet
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokument wurde erfolgreich ersetzt
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
Dokument wurde von %name% abgelehnt
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -2632,10 +2641,10 @@
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
@@ -2650,6 +2659,7 @@
Download von Dokumenten
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -2879,7 +2889,7 @@
Wenn Sie die Quarantäne leeren, werden Sie alle Dokumente löschen. Fortfahren?
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -2952,7 +2962,7 @@
Dokumenttyp Teilen aktivieren
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3197,8 +3207,10 @@
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
@@ -3339,7 +3351,7 @@
Dateiname
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -3416,12 +3428,12 @@
Senden des Dokumentes außer Kraft setzen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Wiederaufbau auf Datensätze, die ersetzte Miniaturansichten haben, zwingen
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3765,9 +3777,9 @@
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
@@ -3942,9 +3954,9 @@
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
@@ -4008,7 +4020,7 @@
zuletzte geladene Version
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4083,7 +4095,7 @@
Dokumente können nicht heruntergeladen werden
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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 @@
Kein Dokument in der Quarantäne
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4869,22 +4882,22 @@
Die Bestellung wurde storniert
- Order/Controller/ProdOrderController.php
+ Order/Controller/ProdOrderController.php
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
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
@@ -5148,6 +5161,7 @@
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 @@
Voreinstellungen
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -5558,7 +5572,7 @@
Empfangsbestätigung zu %my_email% bekommen
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -5583,7 +5597,7 @@
Datensatz wurde nicht gefunden
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -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 @@
Bericht wurde nicht gefunden
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -6432,6 +6446,7 @@
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
+ Controller/Prod/ToolsController.php
+
Einreichen
@@ -6447,18 +6467,18 @@
Ersetzung
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
Für diesen Typ von Aufnahme ist die Ersetzung nicht verfügbar
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
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
+
+
+ TLSV1.1
+ Form/Configuration/EmailFormType.php
+
+
+
+ TLSV1.2
Form/Configuration/EmailFormType.php
@@ -6571,7 +6596,7 @@
Zielgerät
- classes/databox/subdef.php
+ classes/databox/subdef.php
@@ -6615,7 +6640,7 @@
Nutzungsbedingungen
Form/Login/PhraseaRegisterForm.php
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -6670,7 +6695,8 @@
Zieldatensatz wird nicht erlaubt
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -6680,6 +6706,7 @@
Die Datei enthält folgende Elemente
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -6876,13 +6903,9 @@
Miniaturansicht
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
-
-
- Vorschau wurde erfolgreich ersetzt
- Controller/Prod/ToolsController.php
-
Miniaturansichtenverzeichnis wird befestigt, um durch HTTP erreichbar zu werden, aber andere Dateien nicht.
@@ -7029,12 +7052,12 @@
Ein bestelltes Dokument
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
Ein Dokument kann nicht bestellt werden
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7224,7 +7247,7 @@
von: %username% hochgeladen
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7342,7 +7365,7 @@
Verwendungszweck:
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -7528,7 +7551,7 @@
Sie müssen einen Typ von Unterauflösungen auswählen
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7622,7 +7645,7 @@
Warnung !
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7718,7 +7741,7 @@
Meta schreiben
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -7784,7 +7807,7 @@
Alternativ können Sie ein Download Link durch Email erhalten.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7799,7 +7822,7 @@
Sie können nicht mehr als %max_download% Mo herunterladen.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7825,7 +7848,7 @@
Kein Zugriff auf die Quarantäne : fehlende Rechte
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7885,7 +7908,7 @@
Sie müssen die Nutzungsbedingungen akzeptieren, um fortzufahren
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7895,7 +7918,7 @@
Geben Sie bitte einen Zieldatensatz
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -7961,6 +7984,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
Unmöglich, die Expose Einstellungen wiederzuherstellen
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9789,32 +9813,32 @@
Auth Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Expose Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Notify Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Report Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Uploader Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Diese Expose Aktivieren
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9829,7 +9853,7 @@
Verbindungsmethode
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9877,8 +9901,8 @@
admin/phraseanet-service/expose.html.twig
-
- 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
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
Gültigkeit des SSL-Zertifikats prüfen
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9969,7 +9993,7 @@
Phrasea Konfigurationserror
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9990,7 +10014,7 @@
Vorsicht
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
@@ -10011,7 +10035,7 @@
Ein Fehler ist aufgetreten
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
@@ -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 @@
Bestellen
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10219,13 +10243,13 @@
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
probieren
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10381,7 +10405,7 @@
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 @@
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
@@ -10581,13 +10604,13 @@
Klasse
- web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
client_credentials
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -10602,13 +10625,13 @@
Termin
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -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 @@
FTP
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10911,7 +10934,7 @@
E-Mail
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10922,12 +10945,12 @@
Download
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
Das Format der Email Adresse scheint falsch zu sein
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10937,18 +10960,18 @@
Textinhalt
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
zu
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -10963,12 +10986,12 @@
Empfangbestätigungen schaffen nur, wenn der Empfänger diese Funktion zulässt
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
E-Mail Adressen durch Kommas getrennt
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -11011,7 +11034,7 @@
Abmeldung
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -11157,10 +11180,10 @@
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
@@ -11317,7 +11340,7 @@
Bilddrehung
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11722,7 +11745,7 @@
Media Typ
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -11732,7 +11755,7 @@
ursprüngliche Dateiname nach Ersetzung aktualisieren
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11748,14 +11771,14 @@
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
Kein Bild wurde ausgewählt
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
@@ -11774,7 +11797,7 @@
- Sammelkorb '%title%' wurde geteilt von %user%
+ Sammelkorb '%title%' wurde geteilt von %user%
eventsmanager/notify/validate.php
@@ -11830,198 +11853,198 @@
Alle Dokumente wurden behandelt
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Die Bestellung stornieren (endgültig)
prod/orders/order_box.html.twig
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Ihre Bestellung von :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
akzeptiert
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Adresse
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Schon gesendet
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
von
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Unternehmen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Land
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
OK
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Neuer Sammelkorb
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Für die Dokumente, die nicht gesendet wurden
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Information
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokument
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokument(e) schon gesendet
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokumente, die auf eine Bestätigung warten
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
weniger sehen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
mehr sehen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Nummer
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
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
abgelehnt
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Alle auswählen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
ausgewählt
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
ausgewählte Datensätze
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Senden
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Telefon
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Die Auswahl bestätigen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Ausstenhende Auswahl abbrechen?
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Mit der abgelehnten Datensätzen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Mit der Auswahl
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Mit gesendete(r) Dokument(en)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokument(e) abgelehnt
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Dokument(e) gesendet
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Sammelkorb erstellen
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Bestellübersicht
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -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
@@ -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
@@ -12193,7 +12216,7 @@
Passwort
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -12327,7 +12350,7 @@
Voreinstellungen
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -12411,7 +12434,7 @@
Controller/Root/AccountController.php
-
+
Ihr Benutzerkonto kann nur durch die Administration Anwendung gelöscht werden.
web/account/account.html.twig
@@ -12618,7 +12641,7 @@
Voransicht
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -12997,7 +13020,7 @@
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
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
+
+
+
+ prod::download: report as spreadsheet
+ web/common/dialog_export.html.twig
@@ -13351,7 +13379,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Download verfügbar bis
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -13654,12 +13682,12 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Erstellung Abfrage von Auflösungen wird bearbeitet
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
Datei auswählen
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -13776,22 +13804,22 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Bearbeitbar
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Meine
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Mapping
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
nächste
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13801,7 +13829,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
letzte
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13816,13 +13844,13 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
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
Aktualisieren
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -14111,7 +14139,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Expose auswählen
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -15056,12 +15084,12 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
90° entgegen dem Uhrzeigersinn drehen
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
90° im Uhrzeigersinn drehen
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -15260,20 +15288,20 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Kann bestellt werden
web/admin/subdefs.html.twig
+
+
+ subdef.substituable
+ web/admin/subdefs.html.twig
+
Ersetzung
actions/Tools/index.html.twig
-
-
- Dokument Ersetzung
- actions/Tools/index.html.twig
-
-
-
- Miniaturansicht Ersetzung
- actions/Tools/index.html.twig
+
+
+ substitution of %sd%
+ actions/Tools/index.html.twig
@@ -15561,7 +15589,7 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
web/thesaurus/thesaurus.html.twig
-
+
web/thesaurus/thesaurus.html.twig
@@ -16077,13 +16105,13 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
Miniaturansicht Validierung
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
Alle
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -16115,6 +16143,11 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
aktualisiert am
Phrasea/Helper/Prod.php
+
+
+ upload:: Copy meta
+ prod/upload/lazaret.html.twig
+
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
Checker ist deaktiviert oder gelöscht
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -16141,10 +16174,9 @@ Vorsicht: die aktuelle Werte werden durch die neue Werte überschrieben
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
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% document(s) can't be ordered
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
%docs_orderable% ordered document(s)
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -195,7 +196,7 @@
Bridge/Dailymotion/element_informations.html.twig
-
+
selected]]>
Controller/Prod/QueryController.php
@@ -263,7 +264,7 @@
%record_count% records match the unique identifier:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -520,7 +521,7 @@
A record matches the unique identifier:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -644,7 +645,7 @@
Unable to send an acknowledgement: Missing e-mail address.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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
@@ -754,6 +756,11 @@
actions/Feedback/list.html.twig
prod/actions/Push.html.twig
+
+
+ Add with caption
+ prod/upload/lazaret.html.twig
+
Additional modules
@@ -808,7 +815,7 @@
Advanced settings
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -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!
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
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 administrator if problem persists.
- Order/Controller/ProdOrderController.php
- Order/Controller/ProdOrderController.php
+ Order/Controller/ProdOrderController.php
+ Order/Controller/ProdOrderController.php
@@ -1070,15 +1077,15 @@
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
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 subviews of the selected records?
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -1253,7 +1260,7 @@
Caution! Some documents have substituted subviews.
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -1477,6 +1484,7 @@
Base
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -1591,10 +1599,10 @@
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
@@ -1752,7 +1760,7 @@
Some fields must be completed
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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.
- actions/Tools/index.html.twig
+ Changes for rotation will be applied only on
+ the sub-definitions of "image" type.
+ actions/Tools/index.html.twig
@@ -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
@@ -1817,7 +1825,7 @@
Title
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -1871,7 +1879,7 @@
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
web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -2258,7 +2266,7 @@
Date
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -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
@@ -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
@@ -2400,8 +2408,8 @@
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
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
@@ -2539,7 +2547,7 @@
Disable document type sharing
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -2552,7 +2560,7 @@
Form/Configuration/ActionsFormType.php
-
+
Display and action settings
admin/fields/templates.html.twig
@@ -2610,17 +2618,17 @@
Document sent by
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document has been successfully substituted
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
Document denied by %name%
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -2635,10 +2643,10 @@
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
@@ -2653,6 +2661,7 @@
Documents downloads
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -2882,7 +2891,7 @@
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
@@ -2955,7 +2964,7 @@
Enable document type sharing
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3200,8 +3209,10 @@
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
@@ -3342,7 +3353,7 @@
File Name
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -3419,12 +3430,12 @@
Force document delivery
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Force re-creation for substituted subviews
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3768,9 +3779,9 @@
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
@@ -3945,9 +3956,9 @@
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
@@ -4011,7 +4022,7 @@
Last uploaded version
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4086,7 +4097,7 @@
Documents can not be downloaded
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4872,22 +4884,22 @@
Order has been canceled
- Order/Controller/ProdOrderController.php
+ Order/Controller/ProdOrderController.php
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
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
@@ -5151,6 +5163,7 @@
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
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -5561,7 +5574,7 @@
Receive an acknowledgement at %my_email%
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -5586,7 +5599,7 @@
Record not found
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -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
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -6435,6 +6448,7 @@
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
+ Controller/Prod/ToolsController.php
+
Submit
@@ -6450,18 +6469,18 @@
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 record type
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
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
+
+
+ TLSV1.1
+ Form/Configuration/EmailFormType.php
+
+
+
+ TLSV1.2
Form/Configuration/EmailFormType.php
@@ -6574,7 +6598,7 @@
Target device
- classes/databox/subdef.php
+ classes/databox/subdef.php
@@ -6618,7 +6642,7 @@
Terms of use
Form/Login/PhraseaRegisterForm.php
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -6673,7 +6697,8 @@
The targeted record choosen is not allowed
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -6683,6 +6708,7 @@
The file contains the following items.
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -6879,13 +6905,9 @@
Thumbnail
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
-
-
- Thumbnail has been successfully substituted
- Controller/Prod/ToolsController.php
-
Thumbnails directory is mounted to be accessible via HTTP, while others directories are not.
@@ -7032,12 +7054,12 @@
One document ordered.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
One document can not be ordered.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7227,7 +7249,7 @@
Uploaded by: %username%
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7345,7 +7367,7 @@
Intended use:
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -7531,7 +7553,7 @@
Select type of subviews
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7625,7 +7647,7 @@
Warning!
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7721,7 +7743,7 @@
Write Metadatas
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -7787,7 +7809,7 @@
Alternatively, you can receive a download link by email?
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7802,7 +7824,7 @@
You can't directly download more than %max_download% Mo.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7828,7 +7850,7 @@
You do not have enough rights to access the quarantine
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7888,7 +7910,7 @@
You must accept the Terms of Use to continue.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7898,7 +7920,7 @@
You must select one target record
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -7964,6 +7986,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
Expose Retrieval configuration error
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9792,32 +9815,32 @@
Auth Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Expose Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Notify Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Report Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Uploader Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Activate this expose
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9832,7 +9855,7 @@
Interconnection method
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9880,8 +9903,8 @@
admin/phraseanet-service/expose.html.twig
-
- 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
- PhraseanetService/Form/PSExposeConnectionType.php
+ Auth provider name with type ps-auth
+ PhraseanetService/Form/PSExposeConnectionType.php
Check SSL certificate validity
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9972,7 +9995,7 @@
Phrasea configuration error
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9993,7 +10016,7 @@
Warning
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
@@ -10014,7 +10037,7 @@
an error occured
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
@@ -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 @@
Order
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10222,13 +10245,13 @@
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
Try
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10384,7 +10407,7 @@
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
- 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
@@ -10584,13 +10606,13 @@
Class
- web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
client_credentials
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -10605,13 +10627,13 @@
Deadline
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -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 @@
FTP
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10914,7 +10936,7 @@
E-Mail
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10925,12 +10947,12 @@
Download
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
The email address format seems incorrect
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10940,18 +10962,18 @@
Content
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
To
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -10966,12 +10988,12 @@
Acknowledgments only work if the recipient allows this feature
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
Email addresses must be separated by commas
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -11014,7 +11036,7 @@
Logout
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -11160,10 +11182,10 @@
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
@@ -11320,7 +11342,7 @@
Image rotation
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11725,7 +11747,7 @@
Media type
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -11735,7 +11757,7 @@
Update the filename
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11751,14 +11773,14 @@
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 Document selected
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
@@ -11777,7 +11799,7 @@
- The basket '%title%' has been shared from %user%
+ The basket '%title%' has been shared from %user%
eventsmanager/notify/validate.php
@@ -11833,198 +11855,198 @@
All documents have been treated
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Cancel the order (definitively)
prod/orders/order_box.html.twig
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Your Order Of :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Accepted item(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Address
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Already sent
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
by
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Company
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Country
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
OK
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Create a basket
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
For no sent documents:
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Informations about the media:
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Sent Document(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Documents waiting for validation
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
less
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
More
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Number
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
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
Rejected item(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Select All
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Selected item(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Selected document(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Submit
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Tel
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Validate choices
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Cancel pending choices?
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
With denied document(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
With selected document(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
With validated document(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Documents you have denied
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Documents you have sent
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Create Basket
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Order review
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -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
@@ -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
@@ -12196,7 +12218,7 @@
Password
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -12330,7 +12352,7 @@
Presets
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -12414,7 +12436,7 @@
Controller/Root/AccountController.php
-
+
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
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -13000,7 +13022,7 @@
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
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
+
+
+
+ Export as spreadsheet
+ web/common/dialog_export.html.twig
@@ -13354,7 +13381,7 @@ Warning: The current values will be overwritten by these new values
Download available until
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -13657,12 +13684,12 @@ Warning: The current values will be overwritten by these new values
Subdefinition build request has been submitted
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
Select a file
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -13779,22 +13806,22 @@ Warning: The current values will be overwritten by these new values
Editable
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Mine
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Mapping
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
next
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13804,7 +13831,7 @@ Warning: The current values will be overwritten by these new values
previous
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13819,13 +13846,13 @@ Warning: The current values will be overwritten by these new values
Add publication
- prod/WorkZone/Macros.html.twig
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Refresh
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -14114,7 +14141,7 @@ Warning: The current values will be overwritten by these new values
Choose Expose
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -15062,12 +15089,12 @@ It is possible to place several search areas
Rotate 90 degrees counter clockwise
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
Rotate 90 degrees clockwise
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -15266,20 +15293,20 @@ It is possible to place several search areas
Orderable
web/admin/subdefs.html.twig
+
+
+ Substituable subdef
+ web/admin/subdefs.html.twig
+
Substitution
actions/Tools/index.html.twig
-
-
- Document substitution
- actions/Tools/index.html.twig
-
-
-
- Thumbnail substitution
- actions/Tools/index.html.twig
+
+
+ substitution of %sd%
+ actions/Tools/index.html.twig
@@ -15567,7 +15594,7 @@ It is possible to place several search areas
web/thesaurus/thesaurus.html.twig
-
+
web/thesaurus/thesaurus.html.twig
@@ -16083,13 +16110,13 @@ It is possible to place several search areas
Confirm thumbnail
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
Everyone
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -16121,6 +16148,11 @@ It is possible to place several search areas
updated on
Phrasea/Helper/Prod.php
+
+
+ upload:: Copy meta
+ prod/upload/lazaret.html.twig
+
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
Checker is disabled or deleted
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -16147,10 +16179,9 @@ It is possible to place several search areas
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
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 être commandés
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
%docs_orderable% documents commandés
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -195,7 +196,7 @@
Bridge/Dailymotion/element_informations.html.twig
-
+
sélectionnés]]>
Controller/Prod/QueryController.php
@@ -263,7 +264,7 @@
%record_count% enregistrements correspondent à des identifiants uniques existants:
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -347,7 +348,7 @@
- %user% vous demande de valider %title%
+ %user% vous demande de valider %title%
eventsmanager/notify/validate.php
@@ -520,7 +521,7 @@
Un enregistrement correspond à un identifiant unique existant :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -644,7 +645,7 @@
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
@@ -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
@@ -753,6 +755,11 @@
actions/Feedback/list.html.twig
prod/actions/Push.html.twig
+
+
+ Add with caption
+ prod/upload/lazaret.html.twig
+
Modules additionnels
@@ -807,7 +814,7 @@
Réglages avancés
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -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 @@
Une erreur est survenue lors de la modification du status-bit!
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
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
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
@@ -1069,15 +1076,15 @@
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
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 @@
Ê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
@@ -1252,7 +1259,7 @@
Attention, certains documents ont des sous-définitions substituées.
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -1343,7 +1350,7 @@
- Auth failure
+ Auth failure
web/admin/tree.html.twig
@@ -1457,7 +1464,7 @@
- Background Color
+ Background Color
Media/Subdef/Image.php
@@ -1476,6 +1483,7 @@
Base
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -1590,10 +1598,10 @@
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
@@ -1751,7 +1759,7 @@
Certains champs sont obligatoires, veuillez les compléter
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -1768,10 +1776,11 @@
Vitesse de lecture
Controller/Prod/LanguageController.php
-
+
- 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
@@ -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
@@ -1815,7 +1824,7 @@
Civilité
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -1869,7 +1878,7 @@
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 @@
Personnaliser
web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -2255,7 +2264,7 @@
Date
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -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
@@ -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
@@ -2397,8 +2406,8 @@
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 @@
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
@@ -2536,7 +2545,7 @@
Désactiver le lien de partage
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -2549,7 +2558,7 @@
Form/Configuration/ActionsFormType.php
-
+
Paramétrage d'affichage et d'action
admin/fields/templates.html.twig
@@ -2607,17 +2616,17 @@
Document envoyé par %name%
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Le document a été substitué
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
Document refusé par %name%
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -2632,10 +2641,10 @@
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
@@ -2650,6 +2659,7 @@
Téléchargement de documents
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -2879,7 +2889,7 @@
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
@@ -2952,7 +2962,7 @@
Activer le lien de partage
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3197,8 +3207,10 @@
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
@@ -3339,7 +3351,7 @@
Nom du fichier
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -3416,12 +3428,12 @@
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 vignettes substituées
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -3765,9 +3777,9 @@
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
@@ -3942,9 +3954,9 @@
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
@@ -4008,7 +4020,7 @@
Dernière version ajoutée
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4083,7 +4095,7 @@
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
@@ -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 @@
Aucun document dans la quarantaine
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -4869,22 +4882,22 @@
La commande a été annulée
- Order/Controller/ProdOrderController.php
+ Order/Controller/ProdOrderController.php
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
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
@@ -5148,6 +5161,7 @@
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 @@
Réglages prédéfinis
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -5558,7 +5572,7 @@
Demander un accusé de réception à transmettre à l'adresse %my_email%
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -5583,7 +5597,7 @@
Enregistrement non trouvé
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -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 @@
Reportage inconnu
- Controller/Api/V1Controller.php
+ Controller/Api/V1Controller.php
@@ -6432,6 +6446,7 @@
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
+ Controller/Prod/ToolsController.php
+
Envoyer
@@ -6447,18 +6467,18 @@
Substituer
- prod/upload/lazaret.html.twig
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
La substitution de ce type d'enregistrement n'est pas possible
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
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
+
+
+ TLSV1.1
+ Form/Configuration/EmailFormType.php
+
+
+
+ TLSV1.2
Form/Configuration/EmailFormType.php
@@ -6571,7 +6596,7 @@
Dispositif ciblé
- classes/databox/subdef.php
+ classes/databox/subdef.php
@@ -6615,7 +6640,7 @@
Conditions générales d'utilisation
Form/Login/PhraseaRegisterForm.php
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -6670,7 +6695,8 @@
L'enregistrement de destination fourni n'est pas autorisé
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -6680,6 +6706,7 @@
Le fichier contient les éléments suivants :
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
@@ -6876,13 +6903,9 @@
Vignette
+ actions/Download/prepare_async.html.twig
actions/Download/prepare.html.twig
-
-
- La vignette a été substituée
- Controller/Prod/ToolsController.php
-
Le répertoire des vignettes est monté pour être accessible en HTTP, les autres non.
@@ -7029,12 +7052,12 @@
Un document commandé.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
Un document ne peut être commandé.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7224,7 +7247,7 @@
Ajouté par : %username%
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7342,7 +7365,7 @@
Utilisation prévue :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -7528,7 +7551,7 @@
Vous devez sélectionner un type de sous-définitions
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7622,7 +7645,7 @@
Attention !
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7718,7 +7741,7 @@
Ecriture des métadonnées
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -7784,7 +7807,7 @@
Alternativement, vous pouvez recevoir un lien de téléchargement par email ?
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7799,7 +7822,7 @@
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
@@ -7825,7 +7848,7 @@
Vous ne disposez pas des autorisations suffisantes pour accéder à la quarantaine
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -7885,7 +7908,7 @@
Vous devez accepter les conditions générales d'utilisation pour poursuivre.
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -7895,7 +7918,7 @@
Vous devez spécifier un enregistrement de destination
- Controller/Prod/LazaretController.php
+ Controller/Prod/LazaretController.php
@@ -7961,6 +7984,7 @@
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
+ liste des erreurs d'indentification
web/admin/auth-failure.html.twig
@@ -8211,7 +8235,7 @@
- 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 @@
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
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
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
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
- 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
- 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
- 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
- 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
Impossible de récupérer les réglages de Expose
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9790,32 +9814,32 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Auth Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Expose Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Notify Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Report Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Uploader Service
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
Activer cet Expose
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9830,7 +9854,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Méthode d'interconnexion
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -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
+
+ 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
- PhraseanetService/Form/PSExposeConnectionType.php
+ Nom du Auth provider de type ps-auth
+ PhraseanetService/Form/PSExposeConnectionType.php
Vérifier la validité du certificat SSL
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -9970,7 +9994,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Erreur de configuration de Phrasea
- admin/phraseanet-service/index.html.twig
+ admin/phraseanet-service/index.html.twig
@@ -9991,7 +10015,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
une erreur est survenue
- Controller/Prod/ToolsController.php
+ Controller/Prod/ToolsController.php
@@ -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
Commander
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10220,13 +10244,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
Essayer
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10382,7 +10406,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
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
@@ -10582,13 +10605,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Classe
- web/admin/subdefs.html.twig
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
client_credentials
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -10603,13 +10626,13 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Date limite
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -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
FTP
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10912,7 +10935,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
E-Mail
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10923,12 +10946,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Téléchargement
web/common/dialog_export.html.twig
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
Email invalide
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -10938,18 +10961,18 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Texte
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
A
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
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
@@ -10964,12 +10987,12 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
Ajouter les adresses email en les séparant par une virgule
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -11012,7 +11035,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Déconnexion
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -11158,10 +11181,10 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
@@ -11318,7 +11341,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Rotation d'images
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11723,7 +11746,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Type média
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -11733,7 +11756,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Mettre à jour le nom original du fichier après substitution
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -11749,14 +11772,14 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
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
- 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
Tous les documents ont été traités
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Annuler la commande (définitif)
prod/orders/order_box.html.twig
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Votre commande du :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Média délivré
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Adresse :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Envoyé
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
par
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Société :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Pays :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Valider
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Créer un Panier
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Pour le(s) document(s) non envoyé(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Informations sur le média :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document(s) déjà envoyé(s) :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document(s) en attente de validation
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Voir moins
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Voir plus
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Numéro
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
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
Média non délivré
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
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
Tout sélectionner
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Média sélectionné
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document(s) sélectionné(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Envoyer
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Téléphone :
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Valider les choix
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Annuler les choix en attente?
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Avec le(s) document(s) refusé(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Avec la sélection
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Avec le(s) document(s) envoyé(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document(s) refusé(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Document(s) envoyé(s)
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Créer un panier
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
Récapitulatif de la commande
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -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
@@ -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
@@ -12194,7 +12217,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Mot de passe
- PhraseanetService/Form/PSExposeConnectionType.php
+ PhraseanetService/Form/PSExposeConnectionType.php
@@ -12328,7 +12351,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
Préréglages
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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
-
+
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
Sous-définition
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -12998,7 +13021,7 @@ Si vous recevez cet e-mail sans l'avoir sollicité, merci de l'ignorer ou de le
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
- 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
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
+
+
+
+ liste de l'export dans un tableau excel
+ web/common/dialog_export.html.twig
@@ -13354,7 +13382,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Téléchargement disponible jusqu'au
- prod/orders/order_item.html.twig
+ prod/orders/order_item.html.twig
@@ -13657,12 +13685,12 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Fabrication des sous définitions en cours de traitement
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
Sélectionner un fichier
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -13688,7 +13716,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
- Plus
+ Plus
Controller/Prod/LanguageController.php
@@ -13779,22 +13807,22 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Editable
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Mes publications
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Mapping
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
suivante
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13804,7 +13832,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
précédente
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -13819,13 +13847,13 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Ajouter une publication
- prod/WorkZone/Macros.html.twig
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
Actualiser
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -14114,7 +14142,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Choisir l'Expose
- prod/WorkZone/Macros.html.twig
+ prod/WorkZone/Macros.html.twig
@@ -15065,12 +15093,12 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Rotation de 90 degrés anti-horaire
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
Rotation de 90 degrés horaire
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
@@ -15269,20 +15297,20 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Peut être commandé
web/admin/subdefs.html.twig
+
+
+ Sous définition substituable
+ web/admin/subdefs.html.twig
+
Substitution
actions/Tools/index.html.twig
-
-
- Substitution de document
- actions/Tools/index.html.twig
-
-
-
- Substitution de la vignette thumbnail
- actions/Tools/index.html.twig
+
+
+ Substitution de %sd%
+ actions/Tools/index.html.twig
@@ -15570,7 +15598,7 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
web/thesaurus/thesaurus.html.twig
-
+
web/thesaurus/thesaurus.html.twig
@@ -16086,13 +16114,13 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
Validation de la vignette
- actions/Tools/index.html.twig
+ actions/Tools/index.html.twig
actions/Tools/videoEditor.html.twig
Tout le monde
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -16124,6 +16152,11 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
mis à jour le
Phrasea/Helper/Prod.php
+
+
+ Copier les métadonnées de l'enregistrement sélectionné
+ prod/upload/lazaret.html.twig
+
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
Checker désactivé ou supprimé
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -16150,10 +16183,9 @@ Attention: les valeurs actuellement en place seront écrasées par ces nouvelles
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
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% documenten kunnen niet worden besteld
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
%docs_orderable% documenten besteld
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -263,7 +264,7 @@
%record_count% records zijn gelijk aan de unieke id :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -520,7 +521,7 @@
Een record is gelijk aan de unieke id :
- prod/upload/lazaret.html.twig
+ prod/upload/lazaret.html.twig
@@ -644,7 +645,7 @@
Ontvangstbevestiging niet beschikbaar is, u hebt geen emailadres opgegeven
- web/common/dialog_export.html.twig
+ web/common/dialog_export.html.twig
@@ -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
@@ -754,6 +756,11 @@
actions/Feedback/list.html.twig
prod/actions/Push.html.twig
+
+
+ Add with caption
+ prod/upload/lazaret.html.twig
+
Bijkomende modules
@@ -808,7 +815,7 @@
Advanced settings
- web/admin/subdefs.html.twig
+ web/admin/subdefs.html.twig
@@ -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 @@