mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-24 02:49:07 +01:00
Compare commits
No commits in common. "961740c85538291f59b25e1caef6439976d6f0c2" and "05519c543276f8f06d24628d29598b75f40c732f" have entirely different histories.
961740c855
...
05519c5432
6 changed files with 77 additions and 177 deletions
|
@ -25,7 +25,6 @@ serveur LDAP.</para>
|
||||||
'[object type 1]',
|
'[object type 1]',
|
||||||
'[object type 2]' => array(
|
'[object type 2]' => array(
|
||||||
'filter' => '[LDAP filter]',
|
'filter' => '[LDAP filter]',
|
||||||
'filter_function' => [callable],
|
|
||||||
'password_attribute' => '[attribute name]',
|
'password_attribute' => '[attribute name]',
|
||||||
'web_access' => [booléen],
|
'web_access' => [booléen],
|
||||||
'api_access' => [booléen],
|
'api_access' => [booléen],
|
||||||
|
@ -171,21 +170,6 @@ serveur LDAP.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term>filter_function</term>
|
|
||||||
<listitem>
|
|
||||||
<simpara><emphasis>Callable</emphasis> (au sens PHP) utilisé pour filtrer les utilisateurs
|
|
||||||
trouvés dans l'annuaire à partir des autres paramètres : cette fonction, si elle est définie,
|
|
||||||
sera appelée pour chaque utilisateur trouvé, avec pour unique paramètre, une référence à l'objet
|
|
||||||
LDAP correspondant (<literal>LSldapObject</literal>). Cette méthode devra alors retourner
|
|
||||||
<literal>true</literal> ou <literal>false</literal> pour respectivement autoriser ou interdire
|
|
||||||
l'accès à l'application à l'utilisateur.</simpara>
|
|
||||||
<note><simpara>Si un utilisateur est exclus par cette méthode et qu'aucun autre utilisateur
|
|
||||||
correspondant n'a été trouvé dans l'annuaire, une page d'erreur sera affichée et indiquera que
|
|
||||||
l'accès à l'application est refusée.</simpara></note>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>password_attribute</term>
|
<term>password_attribute</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
@ -132,7 +132,6 @@ class LSauth extends LSlog_staticLoggerClass {
|
||||||
|
|
||||||
$objTypes[$objType] = array(
|
$objTypes[$objType] = array(
|
||||||
'filter' => self :: getConfig("LSobjects.$objType.filter", null, 'string'),
|
'filter' => self :: getConfig("LSobjects.$objType.filter", null, 'string'),
|
||||||
'filter_function' => self :: getConfig("LSobjects.$objType.filter_function", null),
|
|
||||||
'password_attribute' => self :: getConfig("LSobjects.$objType.password_attribute", 'userPassword', 'string'),
|
'password_attribute' => self :: getConfig("LSobjects.$objType.password_attribute", 'userPassword', 'string'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -170,19 +169,11 @@ class LSauth extends LSlog_staticLoggerClass {
|
||||||
*/
|
*/
|
||||||
public static function username2LSobjects($username) {
|
public static function username2LSobjects($username) {
|
||||||
$user_objects = array();
|
$user_objects = array();
|
||||||
$excluded_objects = false;
|
|
||||||
foreach (self :: getAuthObjectTypes() as $objType => $objParams) {
|
foreach (self :: getAuthObjectTypes() as $objType => $objParams) {
|
||||||
if (!LSsession :: loadLSobject($objType)) {
|
if (!LSsession :: loadLSobject($objType)) {
|
||||||
LSerror :: addErrorCode('LSauth_03', $objType);
|
LSerror :: addErrorCode('LSauth_03', $objType);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (isset($objParams['filter_function']) && !is_callable($objParams['filter_function'])) {
|
|
||||||
LSerror :: addErrorCode(
|
|
||||||
'LSauth_09',
|
|
||||||
['objtype' => $objType, 'function' => format_callable($objParams['filter_function'])]
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$authobject = new $objType();
|
$authobject = new $objType();
|
||||||
$result = $authobject -> searchObject(
|
$result = $authobject -> searchObject(
|
||||||
$username,
|
$username,
|
||||||
|
@ -190,28 +181,12 @@ class LSauth extends LSlog_staticLoggerClass {
|
||||||
$objParams['filter'],
|
$objParams['filter'],
|
||||||
array('withoutCache' => true, 'onlyAccessible' => false)
|
array('withoutCache' => true, 'onlyAccessible' => false)
|
||||||
);
|
);
|
||||||
for($i=0; $i<count($result); $i++) {
|
for($i=0; $i<count($result); $i++)
|
||||||
if (
|
|
||||||
isset($objParams['filter_function'])
|
|
||||||
&& !call_user_func_array($objParams['filter_function'], [$result[$i]])
|
|
||||||
) {
|
|
||||||
self :: log_debug(
|
|
||||||
sprintf(
|
|
||||||
'username2LSobjects(%s): user %s filtered out by filter function %s',
|
|
||||||
$username, $result[$i]->getDn(), format_callable($objParams['filter_function'])
|
|
||||||
)
|
|
||||||
);
|
|
||||||
$excluded_objects = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$user_objects[$result[$i] -> getDn()] = $result[$i];
|
$user_objects[$result[$i] -> getDn()] = $result[$i];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$nbresult = count($user_objects);
|
$nbresult = count($user_objects);
|
||||||
if ($nbresult == 0) {
|
if ($nbresult == 0) {
|
||||||
if ($excluded_objects)
|
|
||||||
self :: accessDenied();
|
|
||||||
// incorrect login
|
// incorrect login
|
||||||
self :: log_debug('Invalid username');
|
self :: log_debug('Invalid username');
|
||||||
LSerror :: addErrorCode('LSauth_01');
|
LSerror :: addErrorCode('LSauth_01');
|
||||||
|
@ -331,29 +306,6 @@ class LSauth extends LSlog_staticLoggerClass {
|
||||||
return self :: $params['displayLoginForm'];
|
return self :: $params['displayLoginForm'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle access denied error
|
|
||||||
*
|
|
||||||
* @return never
|
|
||||||
**/
|
|
||||||
public static function accessDenied() {
|
|
||||||
http_response_code(401);
|
|
||||||
if (LSsession :: get('api_mode') || LSsession :: getAjaxDisplay()) {
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
$errors = array(_("You are not authorized to access this application."));
|
|
||||||
echo json_encode(
|
|
||||||
['errors' => [_("You are not authorized to access this application.")], 'success' => false],
|
|
||||||
(isset($_REQUEST['pretty'])?JSON_PRETTY_PRINT:0)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else if (class_exists('LStemplate')) {
|
|
||||||
LStemplate :: assign('pagetitle', _("Access denied."));
|
|
||||||
LStemplate :: assign('error', _("You are not authorized to access this application."));
|
|
||||||
LStemplate :: display("error.tpl");
|
|
||||||
}
|
|
||||||
exit();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -383,6 +335,3 @@ ___("LSauth : Failed to get authentication informations from provider.")
|
||||||
LSerror :: defineError('LSauth_08',
|
LSerror :: defineError('LSauth_08',
|
||||||
___("LSauth : Method %{method} configured doesn't support API mode.")
|
___("LSauth : Method %{method} configured doesn't support API mode.")
|
||||||
);
|
);
|
||||||
LSerror :: defineError('LSauth_09',
|
|
||||||
___("LSauth : The filter function speficied for %{objtype} is not callable (%{function}).")
|
|
||||||
);
|
|
||||||
|
|
|
@ -1963,7 +1963,7 @@ LSerror :: defineError('LSsearch_01',
|
||||||
___("LSsearch : Invalid filter : %{filter}.")
|
___("LSsearch : Invalid filter : %{filter}.")
|
||||||
);
|
);
|
||||||
LSerror :: defineError('LSsearch_02',
|
LSerror :: defineError('LSsearch_02',
|
||||||
___("LSsearch : Invalid basedn (%{basedn}).")
|
___("LSsearch : Invalid basedn : %{basedn}.")
|
||||||
);
|
);
|
||||||
LSerror :: defineError('LSsearch_03',
|
LSerror :: defineError('LSsearch_03',
|
||||||
___("LSsearch : Invalid value for %{param} parameter.")
|
___("LSsearch : Invalid value for %{param} parameter.")
|
||||||
|
@ -1972,7 +1972,7 @@ LSerror :: defineError('LSsearch_04',
|
||||||
___("LSsearch : Invalid size limit. Must be an integer greater or equal to 0.")
|
___("LSsearch : Invalid size limit. Must be an integer greater or equal to 0.")
|
||||||
);
|
);
|
||||||
LSerror :: defineError('LSsearch_05',
|
LSerror :: defineError('LSsearch_05',
|
||||||
___("LSsearch : Invalid parameter %{param}. Must be an boolean.")
|
___("LSsearch : Invalid parameter %{attr}. Must be an boolean.")
|
||||||
);
|
);
|
||||||
LSerror :: defineError('LSsearch_06',
|
LSerror :: defineError('LSsearch_06',
|
||||||
___("LSsearch : Invalid parameter attributes. Must be an string or an array of strings.")
|
___("LSsearch : Invalid parameter attributes. Must be an string or an array of strings.")
|
||||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgstr ""
|
||||||
"Project-Id-Version: LdapSaisie\n"
|
"Project-Id-Version: LdapSaisie\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: \n"
|
"POT-Creation-Date: \n"
|
||||||
"PO-Revision-Date: 2023-08-18 15:45+0200\n"
|
"PO-Revision-Date: 2023-07-19 12:07+0200\n"
|
||||||
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
|
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
|
||||||
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
|
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
|
||||||
"org>\n"
|
"org>\n"
|
||||||
|
@ -174,9 +174,7 @@ msgstr ""
|
||||||
#: includes/addons/LSaddons.ssh.php:59
|
#: includes/addons/LSaddons.ssh.php:59
|
||||||
msgid ""
|
msgid ""
|
||||||
"SSH : Unable to rename folder from %{old} to %{new} on the remote server."
|
"SSH : Unable to rename folder from %{old} to %{new} on the remote server."
|
||||||
msgstr ""
|
msgstr "SSH : Impossible de renommer le dossier %{dir} sur le serveur distant."
|
||||||
"SSH : Impossible de renommer le dossier de %{old} vers %{new} sur le serveur "
|
|
||||||
"distant."
|
|
||||||
|
|
||||||
#: includes/addons/LSaddons.exportSearchResultAsCSV.php:27
|
#: includes/addons/LSaddons.exportSearchResultAsCSV.php:27
|
||||||
msgid "ExportSearchResultAsCSV Support : function fputcsv is not available."
|
msgid "ExportSearchResultAsCSV Support : function fputcsv is not available."
|
||||||
|
@ -280,7 +278,7 @@ msgid "Download"
|
||||||
msgstr "Télécharger"
|
msgstr "Télécharger"
|
||||||
|
|
||||||
#: includes/addons/LSaddons.showSupportInfo.php:78
|
#: includes/addons/LSaddons.showSupportInfo.php:78
|
||||||
#: includes/addons/LSaddons.accesslog.php:248
|
#: includes/addons/LSaddons.accesslog.php:249
|
||||||
#: includes/addons/LSaddons.showTechInfo.php:117
|
#: includes/addons/LSaddons.showTechInfo.php:117
|
||||||
msgid "Go back"
|
msgid "Go back"
|
||||||
msgstr "Retour"
|
msgstr "Retour"
|
||||||
|
@ -428,15 +426,15 @@ msgstr "Remplacer"
|
||||||
msgid "Increment"
|
msgid "Increment"
|
||||||
msgstr "Incrémenter"
|
msgstr "Incrémenter"
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:238
|
#: includes/addons/LSaddons.accesslog.php:239
|
||||||
msgid "Hide LdapSaisie modifications"
|
msgid "Hide LdapSaisie modifications"
|
||||||
msgstr "Cacher les modifications d'LdapSaisie"
|
msgstr "Cacher les modifications d'LdapSaisie"
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:238
|
#: includes/addons/LSaddons.accesslog.php:239
|
||||||
msgid "Show LdapSaisie modifications"
|
msgid "Show LdapSaisie modifications"
|
||||||
msgstr "Voir les modifications d'LdapSaisie"
|
msgstr "Voir les modifications d'LdapSaisie"
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:243
|
#: includes/addons/LSaddons.accesslog.php:244
|
||||||
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
||||||
#: includes/routes.php:474 templates/default/select.tpl:29
|
#: includes/routes.php:474 templates/default/select.tpl:29
|
||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
|
@ -805,57 +803,57 @@ msgid "Error updating object on LDAP server."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP."
|
"Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:887
|
#: includes/class/class.LSio.php:883
|
||||||
msgid "LSio: Post data not found or not completed."
|
msgid "LSio: Post data not found or not completed."
|
||||||
msgstr "LSio : les données transmises sont introuvables ou incomplètes."
|
msgstr "LSio : les données transmises sont introuvables ou incomplètes."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:890
|
#: includes/class/class.LSio.php:886
|
||||||
msgid "LSio: object type invalid."
|
msgid "LSio: object type invalid."
|
||||||
msgstr "LSio : type d'objet invalide."
|
msgstr "LSio : type d'objet invalide."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:893
|
#: includes/class/class.LSio.php:889
|
||||||
msgid "LSio: input/output format %{format} invalid."
|
msgid "LSio: input/output format %{format} invalid."
|
||||||
msgstr "LSio : Le format d'entrée/sortie %{format} est invalide."
|
msgstr "LSio : Le format d'entrée/sortie %{format} est invalide."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:896
|
#: includes/class/class.LSio.php:892
|
||||||
msgid "LSio: Fail to initialize input/output driver."
|
msgid "LSio: Fail to initialize input/output driver."
|
||||||
msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie."
|
msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:899
|
#: includes/class/class.LSio.php:895
|
||||||
msgid "LSio: Fail to load objects's data from input file."
|
msgid "LSio: Fail to load objects's data from input file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSio: Impossible de charger les données des objets depuis le fichier "
|
"LSio: Impossible de charger les données des objets depuis le fichier "
|
||||||
"d'import."
|
"d'import."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:902
|
#: includes/class/class.LSio.php:898
|
||||||
msgid "LSio: Fail to load objects's data to export from LDAP directory."
|
msgid "LSio: Fail to load objects's data to export from LDAP directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSio: Impossible de charger les données des objets à exporter depuis "
|
"LSio: Impossible de charger les données des objets à exporter depuis "
|
||||||
"l'annuaire LDAP."
|
"l'annuaire LDAP."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:905
|
#: includes/class/class.LSio.php:901
|
||||||
msgid "LSio: Fail to export objects's data."
|
msgid "LSio: Fail to export objects's data."
|
||||||
msgstr "LSio: Impossible d'exporter les données des objets."
|
msgstr "LSio: Impossible d'exporter les données des objets."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:908
|
#: includes/class/class.LSio.php:904
|
||||||
msgid "LSio: An error occured running before import hooks. Stop the import."
|
msgid "LSio: An error occured running before import hooks. Stop the import."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant "
|
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant "
|
||||||
"import. Arrêt de l'import."
|
"import. Arrêt de l'import."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:911
|
#: includes/class/class.LSio.php:907
|
||||||
msgid "LSio: An error occured running after import hooks."
|
msgid "LSio: An error occured running after import hooks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'après "
|
"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'après "
|
||||||
"import."
|
"import."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:914
|
#: includes/class/class.LSio.php:910
|
||||||
msgid "LSio: Error occured loading objects's data from input file."
|
msgid "LSio: Error occured loading objects's data from input file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSio: Une erreur est survenue en chargeant les données des objets depuis le "
|
"LSio: Une erreur est survenue en chargeant les données des objets depuis le "
|
||||||
"fichier d'import."
|
"fichier d'import."
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:917
|
#: includes/class/class.LSio.php:913
|
||||||
msgid ""
|
msgid ""
|
||||||
"LSio: This input/output format only support update. You must check the "
|
"LSio: This input/output format only support update. You must check the "
|
||||||
"'Update objects if exists' box."
|
"'Update objects if exists' box."
|
||||||
|
@ -1050,7 +1048,7 @@ msgstr "Aucun résultat"
|
||||||
#: includes/class/class.LSformElement_supannCompositeAttribute.php:276
|
#: includes/class/class.LSformElement_supannCompositeAttribute.php:276
|
||||||
#: includes/class/class.LSformElement_supannCompositeAttribute.php:293
|
#: includes/class/class.LSformElement_supannCompositeAttribute.php:293
|
||||||
msgid "%{val} (unrecognized)"
|
msgid "%{val} (unrecognized)"
|
||||||
msgstr "%{val} (valeur non-reconnue)"
|
msgstr "%{value} (valeur non-reconnue)"
|
||||||
|
|
||||||
#: includes/class/class.LSformElement_supannCompositeAttribute.php:351
|
#: includes/class/class.LSformElement_supannCompositeAttribute.php:351
|
||||||
msgid "Fail to decode composite value #%{idx}."
|
msgid "Fail to decode composite value #%{idx}."
|
||||||
|
@ -1673,7 +1671,7 @@ msgid ""
|
||||||
"(Code : %{code})"
|
"(Code : %{code})"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSsession : Erreur durant la création de la liste des niveaux. Contacter les "
|
"LSsession : Erreur durant la création de la liste des niveaux. Contacter les "
|
||||||
"administrateurs. (Code : %{code})"
|
"administrateurs. (Code : %{type})"
|
||||||
|
|
||||||
#: includes/class/class.LSsession.php:3184
|
#: includes/class/class.LSsession.php:3184
|
||||||
msgid "LSsession : The password recovery is disabled for this LDAP server."
|
msgid "LSsession : The password recovery is disabled for this LDAP server."
|
||||||
|
@ -2010,7 +2008,7 @@ msgid ""
|
||||||
"standard relations (Method : %{meth})."
|
"standard relations (Method : %{meth})."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSrelation : Des paramètres sont manquants dans l'appel des méthodes de "
|
"LSrelation : Des paramètres sont manquants dans l'appel des méthodes de "
|
||||||
"manipulation des relations standards (méthode : %{meth})."
|
"manipulation des relations standards."
|
||||||
|
|
||||||
#: includes/class/class.LSformRule_password.php:58
|
#: includes/class/class.LSformRule_password.php:58
|
||||||
msgid "Password is too long (maximum: %{maxLength})."
|
msgid "Password is too long (maximum: %{maxLength})."
|
||||||
|
@ -2148,7 +2146,7 @@ msgstr "URI de serveur LDAP invalide (%{uri})"
|
||||||
|
|
||||||
#: includes/class/class.LSformRule_ldapSearchURI.php:75
|
#: includes/class/class.LSformRule_ldapSearchURI.php:75
|
||||||
msgid "Invalid LDAP host (%{host})"
|
msgid "Invalid LDAP host (%{host})"
|
||||||
msgstr "Hôte LDAP invalide (%{host})."
|
msgstr "Hôte LDAP invalide (%{type})."
|
||||||
|
|
||||||
#: includes/class/class.LSformRule_ldapSearchURI.php:79
|
#: includes/class/class.LSformRule_ldapSearchURI.php:79
|
||||||
msgid "Invalid LDAP port (%{port})"
|
msgid "Invalid LDAP port (%{port})"
|
||||||
|
@ -2247,7 +2245,7 @@ msgid ""
|
||||||
"LSrelation : Invalid parameter '%{parameter}' of the relation %{relation}: "
|
"LSrelation : Invalid parameter '%{parameter}' of the relation %{relation}: "
|
||||||
"objects %{LSobject} have no function '%{function}'."
|
"objects %{LSobject} have no function '%{function}'."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSrelation : Le paramètre '%{parameter}' de la relation %{relation} est "
|
"LSrelation : Le paramètre '%{parametre}' de la relation %{relation} est "
|
||||||
"invalide: les objets %{LSobject} n'ont pas de fonction '%{function}'."
|
"invalide: les objets %{LSobject} n'ont pas de fonction '%{function}'."
|
||||||
|
|
||||||
#: includes/class/class.LSrelation.php:1041
|
#: includes/class/class.LSrelation.php:1041
|
||||||
|
@ -2263,7 +2261,8 @@ msgstr "LSsession : Erreur durant la mise à jour de la relation %{relation}"
|
||||||
#: includes/class/class.LSrelation.php:1047
|
#: includes/class/class.LSrelation.php:1047
|
||||||
msgid "LSrelation : Object type %{LSobject} unknown (Relation : %{relation})."
|
msgid "LSrelation : Object type %{LSobject} unknown (Relation : %{relation})."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSrelation : Type d'objet %{LSobject} inconnu (relation : %{relation})."
|
"LSsession : La fonction de mise à jour de la relation %{relation} est "
|
||||||
|
"inconnue."
|
||||||
|
|
||||||
#: includes/class/class.LSrelation.php:1050
|
#: includes/class/class.LSrelation.php:1050
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -2419,11 +2418,11 @@ msgstr "Fichier trop gros."
|
||||||
msgid "File is too light."
|
msgid "File is too light."
|
||||||
msgstr "Fichier trop petit."
|
msgstr "Fichier trop petit."
|
||||||
|
|
||||||
#: includes/class/class.LSauthMethod_CAS.php:153
|
#: includes/class/class.LSauthMethod_CAS.php:137
|
||||||
msgid "LSauthMethod_CAS : Failed to load phpCAS."
|
msgid "LSauthMethod_CAS : Failed to load phpCAS."
|
||||||
msgstr "LSauthMethod_CAS : Impossible de charger phpCAS."
|
msgstr "LSauthMethod_CAS : Impossible de charger phpCAS."
|
||||||
|
|
||||||
#: includes/class/class.LSauthMethod_CAS.php:156
|
#: includes/class/class.LSauthMethod_CAS.php:140
|
||||||
msgid ""
|
msgid ""
|
||||||
"LSauthMethod_CAS : Please check your configuration : you must configure CAS "
|
"LSauthMethod_CAS : Please check your configuration : you must configure CAS "
|
||||||
"server SSL certificate validation using one of the following constant : "
|
"server SSL certificate validation using one of the following constant : "
|
||||||
|
@ -2709,60 +2708,43 @@ msgstr ""
|
||||||
"LSattr_ldap_password : La fonction d'encodage %{function} n'est pas "
|
"LSattr_ldap_password : La fonction d'encodage %{function} n'est pas "
|
||||||
"disponible. Le mot de passe sera stocké en clair."
|
"disponible. Le mot de passe sera stocké en clair."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:343 includes/class/class.LSauth.php:345
|
#: includes/class/class.LSauth.php:315
|
||||||
#: includes/class/class.LSauth.php:351
|
|
||||||
msgid "You are not authorized to access this application."
|
|
||||||
msgstr "Vous n'êtes pas autorisé à accéder à cette application."
|
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:350
|
|
||||||
msgid "Access denied."
|
|
||||||
msgstr "Accès interdit."
|
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:363
|
|
||||||
msgid "LSauth : Login or password incorrect."
|
msgid "LSauth : Login or password incorrect."
|
||||||
msgstr "LSauth : Identifiant ou mot de passe incorrects."
|
msgstr "LSauth : Identifiant ou mot de passe incorrects."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:366
|
#: includes/class/class.LSauth.php:318
|
||||||
msgid "LSauth : Impossible to identify you : Duplication of identities."
|
msgid "LSauth : Impossible to identify you : Duplication of identities."
|
||||||
msgstr "LSauth : Impossible de vous identifier : Duplication d'identité."
|
msgstr "LSauth : Impossible de vous identifier : Duplication d'identité."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:369
|
#: includes/class/class.LSauth.php:321
|
||||||
msgid "LSauth : Could not load type of identifiable objects %{type}."
|
msgid "LSauth : Could not load type of identifiable objects %{type}."
|
||||||
msgstr "LSauth : Impossible de charger le type d'objets identifiables %{type}."
|
msgstr "LSauth : Impossible de charger le type d'objets identifiables %{type}."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:372
|
#: includes/class/class.LSauth.php:324
|
||||||
msgid "LSauth : Can't load authentication method %{method}."
|
msgid "LSauth : Can't load authentication method %{method}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSauth : Impossible de charger la méthode d'authentification %{method}."
|
"LSauth : Impossible de charger la méthode d'authentification %{method}."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:375
|
#: includes/class/class.LSauth.php:327
|
||||||
msgid "LSauth : Failed to build the authentication provider %{method}."
|
msgid "LSauth : Failed to build the authentication provider %{method}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSauth : Impossible de construire le gestionnaire d'authentification "
|
"LSauth : Impossible de construire le gestionnaire d'authentification "
|
||||||
"%{method}."
|
"%{method}."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:378
|
#: includes/class/class.LSauth.php:330
|
||||||
msgid "LSauth : Not correctly initialized."
|
msgid "LSauth : Not correctly initialized."
|
||||||
msgstr "LSauth : Mauvaise initialisation."
|
msgstr "LSauth : Mauvaise initialisation."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:381
|
#: includes/class/class.LSauth.php:333
|
||||||
msgid "LSauth : Failed to get authentication informations from provider."
|
msgid "LSauth : Failed to get authentication informations from provider."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"LSauth : Impossible de récupérer les informations authentification auprès du "
|
"LSauth : Impossible de récupérer les informations authentification auprès du "
|
||||||
"gestionnaire."
|
"gestionnaire."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:384
|
#: includes/class/class.LSauth.php:336
|
||||||
msgid "LSauth : Method %{method} configured doesn't support API mode."
|
msgid "LSauth : Method %{method} configured doesn't support API mode."
|
||||||
msgstr "LSauth : La méthode %{method} configurée ne supporte pas le mode API."
|
msgstr "LSauth : La méthode %{method} configurée ne supporte pas le mode API."
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:387
|
|
||||||
msgid ""
|
|
||||||
"LSauth : The filter function speficied for %{objtype} is not callable "
|
|
||||||
"(%{function})."
|
|
||||||
msgstr ""
|
|
||||||
"LSauth : La fonction de filtrage pour les %{objtype} n'est pas exécutable "
|
|
||||||
"(%{function})."
|
|
||||||
|
|
||||||
#: includes/class/class.LSformElement_supannEtuInscription.php:41
|
#: includes/class/class.LSformElement_supannEtuInscription.php:41
|
||||||
msgid "Organism"
|
msgid "Organism"
|
||||||
msgstr "Etablissement"
|
msgstr "Etablissement"
|
||||||
|
@ -2822,8 +2804,8 @@ msgid "LSsearch : Invalid filter : %{filter}."
|
||||||
msgstr "LSsearch : Filtre invalide : %{filter}."
|
msgstr "LSsearch : Filtre invalide : %{filter}."
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1966
|
#: includes/class/class.LSsearch.php:1966
|
||||||
msgid "LSsearch : Invalid basedn (%{basedn})."
|
msgid "LSsearch : Invalid basedn : %{basedn}."
|
||||||
msgstr "LSsearch : Base DN invalide (%{basedn})."
|
msgstr "LSsearch : Base DN invalide."
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1969
|
#: includes/class/class.LSsearch.php:1969
|
||||||
msgid "LSsearch : Invalid value for %{param} parameter."
|
msgid "LSsearch : Invalid value for %{param} parameter."
|
||||||
|
@ -2837,7 +2819,7 @@ msgstr ""
|
||||||
"supérieur ou égal à 0."
|
"supérieur ou égal à 0."
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1975
|
#: includes/class/class.LSsearch.php:1975
|
||||||
msgid "LSsearch : Invalid parameter %{param}. Must be an boolean."
|
msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
|
||||||
msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen."
|
msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen."
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1978
|
#: includes/class/class.LSsearch.php:1978
|
||||||
|
@ -3500,15 +3482,15 @@ msgstr ""
|
||||||
"Compte verrouillé pour une raison technique (détection d'homonyme, suspicion "
|
"Compte verrouillé pour une raison technique (détection d'homonyme, suspicion "
|
||||||
"de compte piraté…)"
|
"de compte piraté…)"
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:172
|
#: conf/LSaddons/config.LSaddons.supann.php:166
|
||||||
msgid "Female"
|
msgid "Female"
|
||||||
msgstr "Femme"
|
msgstr "Femme"
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:173
|
#: conf/LSaddons/config.LSaddons.supann.php:167
|
||||||
msgid "Male"
|
msgid "Male"
|
||||||
msgstr "Homme"
|
msgstr "Homme"
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:174
|
#: conf/LSaddons/config.LSaddons.supann.php:168
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr "Autre"
|
msgstr "Autre"
|
||||||
|
|
||||||
|
@ -3630,7 +3612,7 @@ msgstr "Messages"
|
||||||
msgid "Nb / page :"
|
msgid "Nb / page :"
|
||||||
msgstr "Nb / page :"
|
msgstr "Nb / page :"
|
||||||
|
|
||||||
#: templates/default/showObjectAccessLogs.tpl:80
|
#: templates/default/showObjectAccessLogs.tpl:71
|
||||||
msgid "No access log found for this object."
|
msgid "No access log found for this object."
|
||||||
msgstr "Aucun log d'accès trouvé pour cet objet."
|
msgstr "Aucun log d'accès trouvé pour cet objet."
|
||||||
|
|
||||||
|
@ -3769,7 +3751,7 @@ msgstr "Valider"
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr "Valeur"
|
msgstr "Valeur"
|
||||||
|
|
||||||
#: templates/default/showObjectAccessLogs.tpl:85
|
#: templates/default/showObjectAccessLogs.tpl:76
|
||||||
msgid "event(s) found for this object."
|
msgid "event(s) found for this object."
|
||||||
msgstr "événement(s) trouvé(s) pour cet objet."
|
msgstr "événement(s) trouvé(s) pour cet objet."
|
||||||
|
|
||||||
|
|
|
@ -217,7 +217,7 @@ msgid "Download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/addons/LSaddons.showSupportInfo.php:78
|
#: includes/addons/LSaddons.showSupportInfo.php:78
|
||||||
#: includes/addons/LSaddons.accesslog.php:248
|
#: includes/addons/LSaddons.accesslog.php:249
|
||||||
#: includes/addons/LSaddons.showTechInfo.php:117
|
#: includes/addons/LSaddons.showTechInfo.php:117
|
||||||
msgid "Go back"
|
msgid "Go back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -350,15 +350,15 @@ msgstr ""
|
||||||
msgid "Increment"
|
msgid "Increment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:238
|
#: includes/addons/LSaddons.accesslog.php:239
|
||||||
msgid "Hide LdapSaisie modifications"
|
msgid "Hide LdapSaisie modifications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:238
|
#: includes/addons/LSaddons.accesslog.php:239
|
||||||
msgid "Show LdapSaisie modifications"
|
msgid "Show LdapSaisie modifications"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/addons/LSaddons.accesslog.php:243
|
#: includes/addons/LSaddons.accesslog.php:244
|
||||||
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
||||||
#: includes/routes.php:474 templates/default/select.tpl:29
|
#: includes/routes.php:474 templates/default/select.tpl:29
|
||||||
msgid "Refresh"
|
msgid "Refresh"
|
||||||
|
@ -683,47 +683,47 @@ msgstr ""
|
||||||
msgid "Error updating object on LDAP server."
|
msgid "Error updating object on LDAP server."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:887
|
#: includes/class/class.LSio.php:883
|
||||||
msgid "LSio: Post data not found or not completed."
|
msgid "LSio: Post data not found or not completed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:890
|
#: includes/class/class.LSio.php:886
|
||||||
msgid "LSio: object type invalid."
|
msgid "LSio: object type invalid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:893
|
#: includes/class/class.LSio.php:889
|
||||||
msgid "LSio: input/output format %{format} invalid."
|
msgid "LSio: input/output format %{format} invalid."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:896
|
#: includes/class/class.LSio.php:892
|
||||||
msgid "LSio: Fail to initialize input/output driver."
|
msgid "LSio: Fail to initialize input/output driver."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:899
|
#: includes/class/class.LSio.php:895
|
||||||
msgid "LSio: Fail to load objects's data from input file."
|
msgid "LSio: Fail to load objects's data from input file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:902
|
#: includes/class/class.LSio.php:898
|
||||||
msgid "LSio: Fail to load objects's data to export from LDAP directory."
|
msgid "LSio: Fail to load objects's data to export from LDAP directory."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:905
|
#: includes/class/class.LSio.php:901
|
||||||
msgid "LSio: Fail to export objects's data."
|
msgid "LSio: Fail to export objects's data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:908
|
#: includes/class/class.LSio.php:904
|
||||||
msgid "LSio: An error occured running before import hooks. Stop the import."
|
msgid "LSio: An error occured running before import hooks. Stop the import."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:911
|
#: includes/class/class.LSio.php:907
|
||||||
msgid "LSio: An error occured running after import hooks."
|
msgid "LSio: An error occured running after import hooks."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:914
|
#: includes/class/class.LSio.php:910
|
||||||
msgid "LSio: Error occured loading objects's data from input file."
|
msgid "LSio: Error occured loading objects's data from input file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSio.php:917
|
#: includes/class/class.LSio.php:913
|
||||||
msgid ""
|
msgid ""
|
||||||
"LSio: This input/output format only support update. You must check the "
|
"LSio: This input/output format only support update. You must check the "
|
||||||
"'Update objects if exists' box."
|
"'Update objects if exists' box."
|
||||||
|
@ -2041,11 +2041,11 @@ msgstr ""
|
||||||
msgid "File is too light."
|
msgid "File is too light."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauthMethod_CAS.php:153
|
#: includes/class/class.LSauthMethod_CAS.php:137
|
||||||
msgid "LSauthMethod_CAS : Failed to load phpCAS."
|
msgid "LSauthMethod_CAS : Failed to load phpCAS."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauthMethod_CAS.php:156
|
#: includes/class/class.LSauthMethod_CAS.php:140
|
||||||
msgid ""
|
msgid ""
|
||||||
"LSauthMethod_CAS : Please check your configuration : you must configure CAS "
|
"LSauthMethod_CAS : Please check your configuration : you must configure CAS "
|
||||||
"server SSL certificate validation using one of the following constant : "
|
"server SSL certificate validation using one of the following constant : "
|
||||||
|
@ -2299,53 +2299,38 @@ msgid ""
|
||||||
"password will be stored in clear text."
|
"password will be stored in clear text."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:343 includes/class/class.LSauth.php:345
|
#: includes/class/class.LSauth.php:315
|
||||||
#: includes/class/class.LSauth.php:351
|
|
||||||
msgid "You are not authorized to access this application."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:350
|
|
||||||
msgid "Access denied."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:363
|
|
||||||
msgid "LSauth : Login or password incorrect."
|
msgid "LSauth : Login or password incorrect."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:366
|
#: includes/class/class.LSauth.php:318
|
||||||
msgid "LSauth : Impossible to identify you : Duplication of identities."
|
msgid "LSauth : Impossible to identify you : Duplication of identities."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:369
|
#: includes/class/class.LSauth.php:321
|
||||||
msgid "LSauth : Could not load type of identifiable objects %{type}."
|
msgid "LSauth : Could not load type of identifiable objects %{type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:372
|
#: includes/class/class.LSauth.php:324
|
||||||
msgid "LSauth : Can't load authentication method %{method}."
|
msgid "LSauth : Can't load authentication method %{method}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:375
|
#: includes/class/class.LSauth.php:327
|
||||||
msgid "LSauth : Failed to build the authentication provider %{method}."
|
msgid "LSauth : Failed to build the authentication provider %{method}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:378
|
#: includes/class/class.LSauth.php:330
|
||||||
msgid "LSauth : Not correctly initialized."
|
msgid "LSauth : Not correctly initialized."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:381
|
#: includes/class/class.LSauth.php:333
|
||||||
msgid "LSauth : Failed to get authentication informations from provider."
|
msgid "LSauth : Failed to get authentication informations from provider."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:384
|
#: includes/class/class.LSauth.php:336
|
||||||
msgid "LSauth : Method %{method} configured doesn't support API mode."
|
msgid "LSauth : Method %{method} configured doesn't support API mode."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSauth.php:387
|
|
||||||
msgid ""
|
|
||||||
"LSauth : The filter function speficied for %{objtype} is not callable "
|
|
||||||
"(%{function})."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: includes/class/class.LSformElement_supannEtuInscription.php:41
|
#: includes/class/class.LSformElement_supannEtuInscription.php:41
|
||||||
msgid "Organism"
|
msgid "Organism"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2405,7 +2390,7 @@ msgid "LSsearch : Invalid filter : %{filter}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1966
|
#: includes/class/class.LSsearch.php:1966
|
||||||
msgid "LSsearch : Invalid basedn (%{basedn})."
|
msgid "LSsearch : Invalid basedn : %{basedn}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1969
|
#: includes/class/class.LSsearch.php:1969
|
||||||
|
@ -2418,7 +2403,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1975
|
#: includes/class/class.LSsearch.php:1975
|
||||||
msgid "LSsearch : Invalid parameter %{param}. Must be an boolean."
|
msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: includes/class/class.LSsearch.php:1978
|
#: includes/class/class.LSsearch.php:1978
|
||||||
|
@ -2994,15 +2979,15 @@ msgid ""
|
||||||
"a hacked account, etc.)"
|
"a hacked account, etc.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:172
|
#: conf/LSaddons/config.LSaddons.supann.php:166
|
||||||
msgid "Female"
|
msgid "Female"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:173
|
#: conf/LSaddons/config.LSaddons.supann.php:167
|
||||||
msgid "Male"
|
msgid "Male"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: conf/LSaddons/config.LSaddons.supann.php:174
|
#: conf/LSaddons/config.LSaddons.supann.php:168
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3124,7 +3109,7 @@ msgstr ""
|
||||||
msgid "Nb / page :"
|
msgid "Nb / page :"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/default/showObjectAccessLogs.tpl:80
|
#: templates/default/showObjectAccessLogs.tpl:71
|
||||||
msgid "No access log found for this object."
|
msgid "No access log found for this object."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3261,7 +3246,7 @@ msgstr ""
|
||||||
msgid "Value"
|
msgid "Value"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/default/showObjectAccessLogs.tpl:85
|
#: templates/default/showObjectAccessLogs.tpl:76
|
||||||
msgid "event(s) found for this object."
|
msgid "event(s) found for this object."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue