mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-12-18 14:33:49 +01:00
API: allow to execute LSobject's custom actions
This commit is contained in:
parent
2db4d0fbae
commit
118b784a5d
8 changed files with 284 additions and 107 deletions
|
@ -398,6 +398,35 @@ HTTP 404 sera générée.
|
|||
}
|
||||
```
|
||||
|
||||
- `/api/1.0/object/[object type]/[dn]/customAction/[customAction]`
|
||||
|
||||
Cette méthode permet d'exécuter une [action personnalisée](../conf/LSobject/customActions.md) sur
|
||||
un objet dans l'annuaire. Le nom de l'action ainsi que le type de l'objet et son DN sont précisés
|
||||
dans l'URL et doivent être encodés en conséquence.
|
||||
|
||||
**Exemple :**
|
||||
|
||||
```
|
||||
# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=foo.bar,ou=people,o=ls/customAction/action?pretty'
|
||||
{
|
||||
"dn": "uid=foo.bar,ou=people,o=ls",
|
||||
"type": "LSpeople",
|
||||
"name": "Foo Bar",
|
||||
"success": true,
|
||||
"messages": [
|
||||
"L'action personnalis\u00e9e action a \u00e9t\u00e9 correctement ex\u00e9cut\u00e9e sur Foo Bar.",
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
!!! note
|
||||
|
||||
Par défaut, une action personnalisée ne retourne qu'un booléen permettant de savoir si
|
||||
l'action a correctement été exécutée ou non. En outre, dans un contexte d'appel via l'API, il
|
||||
est possible de retourner des informations via un tableau associatif dont le contenu sera
|
||||
fusionné avec les données retournées par la requête. Pour plus d'informations à ce sujet,
|
||||
consultez la [documentation sur l'écriture d'une fonction implémentant une customAction](../conf/LSobject/customActions.md#ecriture-dune-fonction-implementant-une-customaction).
|
||||
|
||||
- `/api/1.0/object/[object type]/import`
|
||||
|
||||
Cette méthode permet d'importer des objets d'un type en particulier à partir de données d'import
|
||||
|
@ -634,7 +663,7 @@ HTTP 404 sera générée.
|
|||
**Exemple :**
|
||||
|
||||
```
|
||||
# curl -u username:secret 'https://ldapsaisie/api/api/1.0/search?pattern=LdapSaisie&pretty'
|
||||
# curl -u username:secret 'https://ldapsaisie/api/1.0/search?pattern=LdapSaisie&pretty'
|
||||
{
|
||||
"success": true,
|
||||
"objects": {
|
||||
|
|
|
@ -17,6 +17,10 @@ $GLOBALS['LSobjects']['[nom du type d'LSobject]']['customActions'] = array (
|
|||
'noConfirmation' => '[booléen]',
|
||||
'redirectToObjectList' => '[booléen]',
|
||||
'noRedirect' => '[booléen]',
|
||||
'accessMethods' => array(
|
||||
'web',
|
||||
'api',
|
||||
),
|
||||
'rights' => array(
|
||||
'LSprofile1',
|
||||
'LSprofile2',
|
||||
|
@ -87,6 +91,13 @@ $GLOBALS['LSobjects']['[nom du type d'LSobject]']['customActions'] = array (
|
|||
[LSprofiles](../global/ldap/LSprofile.md#profils-dutilisateurs) ayant le droit d'exécuter cette
|
||||
action.
|
||||
|
||||
- `accessMethods`
|
||||
|
||||
Tableau permetant de restreindre les moyens d'accès possibles à cette action. Par défaut, tous les
|
||||
moyens d'accès possibles sont autorisés. Valeurs possibles : `web` pour les accès via l'interface
|
||||
web et `api` pour les accès via l'API.
|
||||
|
||||
|
||||
## Écriture d'une fonction implémentant une customAction
|
||||
|
||||
Une fonction implémentant une *customAction* se déclare de la manière suivante :
|
||||
|
@ -101,6 +112,9 @@ Une fonction implémentant une *customAction* se déclare de la manière suivant
|
|||
* Valeurs retournées :
|
||||
* - True : Tout s'est bien passé
|
||||
* - False : Une erreur est survenue
|
||||
* - Cas particulier pour une exécution via l'API : un tableau des données
|
||||
* à retourner. Exemple :
|
||||
* ["success" => true, "extra_info1" => "...", "extra_info2" => "..."]
|
||||
*/
|
||||
function maFonction ($object) {
|
||||
|
||||
|
@ -114,6 +128,14 @@ Cette fonction doit prendre pour seul paramètre, le [LSobject](index.md#configu
|
|||
lequel l'action personnalisée doit être exécutée et doit retourner soit `True` si tout s'est bien
|
||||
passé, soit `False` en cas de problème.
|
||||
|
||||
Une *customAction* pourra également être appelé via l'API. Dans ce cas, il est possible de
|
||||
retourner un tableau associatif et non un simple booléen. Le résultat retourné sera alors
|
||||
fusionné avec les données retournées par la requête. Ce tableau devra contenir à minima la clé
|
||||
`success` qui indiquera via un booléen si l'exécution est un succès ou non. Il est possible de
|
||||
détecter si la méthode est appelée via l'API en appelant la méthode
|
||||
`LSsession :: get('api_mode')`. Vous pouvez prendre exemple sur le code de la méthode
|
||||
`showTechInfo()` fournie par le LSaddon [showTechInfo](../LSaddon/LSaddon_showTechInfo.md).
|
||||
|
||||
!!! note
|
||||
|
||||
Ces fonctions sont le plus couramment définies au sein d'
|
||||
|
|
|
@ -110,6 +110,17 @@ function showTechInfo($object) {
|
|||
// Sort other internal attributes by name
|
||||
ksort($internal_attrs);
|
||||
|
||||
// Handle API mode
|
||||
if (LSsession :: get('api_mode')) {
|
||||
return [
|
||||
"object_classes" => $object_classes,
|
||||
"structural_object_class" => $structural_object_class,
|
||||
"special_internal_attributes" => $special_internal_attributes,
|
||||
"other_internal_attrs" => $internal_attrs,
|
||||
"success" => true,
|
||||
];
|
||||
}
|
||||
|
||||
LStemplate :: assign('pagetitle', getFData(_('%{name}: Technical information'), $object -> getDisplayName()));
|
||||
|
||||
$LSview_actions=array();
|
||||
|
|
|
@ -3210,6 +3210,9 @@ class LSsession {
|
|||
LSerror :: defineError('LSsession_27',
|
||||
___("LSsession : You always seem to use %{old} in your custom code: Please upgrade it and use %{new}.<pre>\nContext:\n%{context}</pre>")
|
||||
);
|
||||
LSerror :: defineError('LSsession_28',
|
||||
___("LSsession : This custom action can not be executed by this way.")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1079,7 +1079,13 @@ function handle_LSobject_show($request) {
|
|||
$customActionsConfig = LSconfig :: get('LSobjects.'.$LSobject.'.customActions');
|
||||
if (is_array($customActionsConfig)) {
|
||||
foreach($customActionsConfig as $name => $config) {
|
||||
if (LSsession :: canExecuteCustomAction($dn, $LSobject, $name)) {
|
||||
if (
|
||||
LSsession :: canExecuteCustomAction($dn, $LSobject, $name)
|
||||
&& (
|
||||
! LSconfig :: get('accessMethods', [], 'array', $config)
|
||||
|| in_array('web', LSconfig :: get('accessMethods', [], 'array', $config))
|
||||
)
|
||||
) {
|
||||
$LSview_actions[] = array (
|
||||
'label' => ((isset($config['label']))?__($config['label']):__($name)),
|
||||
'hideLabel' => ((isset($config['hideLabel']) && $config['hideLabel'])?$config['hideLabel']:False),
|
||||
|
@ -1373,6 +1379,15 @@ function handle_LSobject_customAction($request) {
|
|||
$config = LSconfig :: get("LSobjects.$LSobject.customActions.$customAction");
|
||||
$title = isset($config['label'])?__($config['label']):$customAction;
|
||||
|
||||
if (
|
||||
LSconfig :: get('accessMethods', [], 'array', $config)
|
||||
&& !in_array('web', LSconfig :: get('accessMethods', [], 'array', $config))
|
||||
) {
|
||||
LSerror :: addErrorCode('LSsession_28');
|
||||
LSsession :: displayTemplate();
|
||||
return;
|
||||
}
|
||||
|
||||
// Check customAction function
|
||||
$function = LSconfig :: get('function', null, null, $config);
|
||||
if (!is_callable($function)) {
|
||||
|
@ -2191,6 +2206,94 @@ function handle_api_LSobject_remove($request) {
|
|||
}
|
||||
LSurl :: add_handler('#^api/1.0/object/(?P<LSobject>[^/]+)/(?P<dn>[^/]+)/remove/?$#', 'handle_api_LSobject_remove', true, false, true);
|
||||
|
||||
/*
|
||||
* Handle API LSobject custom action request
|
||||
*
|
||||
* @param LSurlRequest $request The request
|
||||
*
|
||||
* @return void
|
||||
**/
|
||||
function handle_api_LSobject_customAction($request) {
|
||||
$object = get_LSobject_from_API_request($request);
|
||||
if (!$object)
|
||||
return;
|
||||
|
||||
$data = array(
|
||||
'dn' => $object -> getDn(),
|
||||
'type' => $object -> getType(),
|
||||
'name' => $object -> getDisplayName(),
|
||||
'success' => false,
|
||||
);
|
||||
|
||||
$customAction = $request -> customAction;
|
||||
|
||||
if ( !LSsession :: canExecuteCustomAction($data["dn"], $data["type"], $customAction) ) {
|
||||
LSerror :: addErrorCode('LSsession_11');
|
||||
LSsession :: displayAjaxReturn($data);
|
||||
return;
|
||||
}
|
||||
|
||||
$config = LSconfig :: get("LSobjects.{$data["type"]}.customActions.$customAction");
|
||||
$title = isset($config['label'])?__($config['label']):$customAction;
|
||||
$objectname = $object -> getDisplayName();
|
||||
|
||||
if (
|
||||
LSconfig :: get('accessMethods', [], 'array', $config)
|
||||
&& !in_array('api', LSconfig :: get('accessMethods', [], 'array', $config))
|
||||
) {
|
||||
LSerror :: addErrorCode('LSsession_28');
|
||||
LSsession :: displayAjaxReturn($data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check customAction function
|
||||
$function = LSconfig :: get('function', null, null, $config);
|
||||
if (!is_callable($function)) {
|
||||
LSerror :: addErrorCode(
|
||||
'LSsession_13',
|
||||
array(
|
||||
'customAction' => $title,
|
||||
'function' => ($function?format_callable($function):_('undefined'))
|
||||
)
|
||||
);
|
||||
LSsession :: displayAjaxReturn($data);
|
||||
return;
|
||||
}
|
||||
|
||||
// Run customAction
|
||||
$result = call_user_func_array($function, array(&$object));
|
||||
|
||||
// Handle result: if its an array, merge it with returned data
|
||||
if (is_array($result))
|
||||
$data = array_merge($data, $result);
|
||||
|
||||
if ($result && (!is_array($result) || $data["success"])) {
|
||||
$data["success"] = true;
|
||||
if (!LSconfig :: get('disableOnSuccessMsg', false, 'bool', $config)) {
|
||||
$msg_format = LSconfig :: get('onSuccessMsgFormat', null, 'string', $config);
|
||||
if ($msg_format) {
|
||||
$msg = getFData(__($msg_format), $objectname);
|
||||
} else {
|
||||
$msg = getFData(
|
||||
_('The custom action %{customAction} have been successfully execute on %{objectname}.'),
|
||||
array('objectname' => $objectname, 'customAction' => $customAction)
|
||||
);
|
||||
}
|
||||
LSsession :: addInfo($msg);
|
||||
}
|
||||
}
|
||||
else {
|
||||
LSerror :: addErrorCode(
|
||||
'LSldapObject_31',
|
||||
array('objectname' => $objectname, 'customAction' => $customAction)
|
||||
);
|
||||
}
|
||||
LSsession :: displayAjaxReturn($data);
|
||||
}
|
||||
LSurl :: add_handler(
|
||||
'#^api/1.0/object/(?P<LSobject>[^/]+)/(?P<dn>[^/]+)/customAction/(?P<customAction>[^/]+)/?$#',
|
||||
'handle_api_LSobject_customAction', true, false, true);
|
||||
|
||||
/*
|
||||
* Handle API LSobject relation request
|
||||
*
|
||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: LdapSaisie\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2024-03-04 11:34+0100\n"
|
||||
"PO-Revision-Date: 2024-04-04 15:14+0200\n"
|
||||
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
|
||||
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
|
||||
"org>\n"
|
||||
|
@ -323,7 +323,7 @@ msgstr "Vos modifications ont été enregistrées."
|
|||
#: includes/addons/LSaddons.mail.php:565
|
||||
#: includes/addons/LSaddons.showSupportInfo.php:78
|
||||
#: includes/addons/LSaddons.accesslog.php:248
|
||||
#: includes/addons/LSaddons.showTechInfo.php:117
|
||||
#: includes/addons/LSaddons.showTechInfo.php:128
|
||||
msgid "Go back"
|
||||
msgstr "Retour"
|
||||
|
||||
|
@ -453,8 +453,8 @@ msgstr "Comparer"
|
|||
#: includes/class/class.LSrelation.php:679 includes/class/class.LSform.php:346
|
||||
#: includes/class/class.LSformElement_select_object.php:75
|
||||
#: includes/class/class.LSformElement_select_object.php:91
|
||||
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1075
|
||||
#: includes/routes.php:1219
|
||||
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1072
|
||||
#: includes/routes.php:1222
|
||||
msgid "Delete"
|
||||
msgstr "Supprimer"
|
||||
|
||||
|
@ -467,8 +467,8 @@ msgstr "Étendue"
|
|||
#: includes/class/class.LSrelation.php:736
|
||||
#: includes/class/class.LSformElement_select_object.php:74
|
||||
#: includes/class/class.LSformElement_supannLabeledValue.php:90
|
||||
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1059
|
||||
#: includes/routes.php:1227 includes/routes.php:1313 includes/routes.php:1460
|
||||
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1056
|
||||
#: includes/routes.php:1230 includes/routes.php:1315 includes/routes.php:1470
|
||||
msgid "Modify"
|
||||
msgstr "Modifier"
|
||||
|
||||
|
@ -476,7 +476,7 @@ msgstr "Modifier"
|
|||
msgid "Modify RDN"
|
||||
msgstr "Modifier le RDN"
|
||||
|
||||
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:521
|
||||
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:518
|
||||
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
|
||||
msgid "Search"
|
||||
msgstr "Rechercher"
|
||||
|
@ -504,7 +504,7 @@ msgstr "Voir les modifications d'LdapSaisie"
|
|||
|
||||
#: includes/addons/LSaddons.accesslog.php:243
|
||||
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
||||
#: includes/routes.php:478 templates/default/select.tpl:29
|
||||
#: includes/routes.php:475 templates/default/select.tpl:29
|
||||
msgid "Refresh"
|
||||
msgstr "Rafraîchir"
|
||||
|
||||
|
@ -750,7 +750,7 @@ msgstr "Oui"
|
|||
msgid "No"
|
||||
msgstr "Non"
|
||||
|
||||
#: includes/addons/LSaddons.showTechInfo.php:113
|
||||
#: includes/addons/LSaddons.showTechInfo.php:124
|
||||
msgid "%{name}: Technical information"
|
||||
msgstr "%{name} : Informations techniques"
|
||||
|
||||
|
@ -962,7 +962,7 @@ msgstr "Confirmez-vous votre choix ?"
|
|||
|
||||
#: includes/class/class.LSconfirmBox.php:37
|
||||
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175
|
||||
#: includes/routes.php:645 includes/routes.php:1300 includes/routes.php:1447
|
||||
#: includes/routes.php:642 includes/routes.php:1302 includes/routes.php:1457
|
||||
#: templates/default/recoverpassword.tpl:21
|
||||
msgid "Validate"
|
||||
msgstr "Valider"
|
||||
|
@ -1833,6 +1833,11 @@ msgstr ""
|
|||
"Context:\n"
|
||||
"%{context}</pre>"
|
||||
|
||||
#: includes/class/class.LSsession.php:3214
|
||||
msgid "LSsession : This custom action can not be executed by this way."
|
||||
msgstr ""
|
||||
"LSsession : Cette action personnalisée ne peut être exécutée par ce biais."
|
||||
|
||||
#: includes/class/class.LSformRule_mimetype.php:53
|
||||
#: includes/class/class.LSformRule_mimetype.php:57
|
||||
msgid "Invalid file type (%{type})."
|
||||
|
@ -2328,8 +2333,8 @@ msgstr "Attention"
|
|||
msgid "No object."
|
||||
msgstr "Aucun objet."
|
||||
|
||||
#: includes/class/class.LSrelation.php:747 includes/routes.php:460
|
||||
#: includes/routes.php:1004
|
||||
#: includes/class/class.LSrelation.php:747 includes/routes.php:457
|
||||
#: includes/routes.php:1001
|
||||
msgid "New"
|
||||
msgstr "Nouveau"
|
||||
|
||||
|
@ -2565,13 +2570,13 @@ msgstr ""
|
|||
"Une erreur est survenue en soumettant ce formulaire. Merci de ré-essayer ou "
|
||||
"de contacter le support."
|
||||
|
||||
#: includes/class/class.LSform.php:327 includes/routes.php:641
|
||||
#: includes/class/class.LSform.php:327 includes/routes.php:638
|
||||
msgid "Do you really want to execute custom action %{title} on this search ?"
|
||||
msgstr ""
|
||||
"Êtes-vous vraiment sûre de vouloir exécuter l'action personnalisée %{title} "
|
||||
"sur cette recherche ?"
|
||||
|
||||
#: includes/class/class.LSform.php:333 includes/routes.php:1441
|
||||
#: includes/class/class.LSform.php:333 includes/routes.php:1451
|
||||
msgid ""
|
||||
"Do you really want to execute custom action %{customAction} on "
|
||||
"%{objectname} ?"
|
||||
|
@ -2779,8 +2784,8 @@ msgstr "Réinitialiser le choix."
|
|||
msgid "Display RSS stack."
|
||||
msgstr "Afficher la file RSS."
|
||||
|
||||
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:594
|
||||
#: includes/routes.php:1388
|
||||
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:591
|
||||
#: includes/routes.php:1398 includes/routes.php:2256
|
||||
msgid "undefined"
|
||||
msgstr "non-définie"
|
||||
|
||||
|
@ -2899,39 +2904,39 @@ msgstr "Étape"
|
|||
msgid "Pedagogical element"
|
||||
msgstr "Élement pédagogique"
|
||||
|
||||
#: includes/class/class.LSsearch.php:1318
|
||||
#: includes/class/class.LSsearch.php:1321
|
||||
msgid "Actions"
|
||||
msgstr "Actions"
|
||||
|
||||
#: includes/class/class.LSsearch.php:1321
|
||||
#: includes/class/class.LSsearch.php:1324
|
||||
#: templates/default/global_search.tpl:16
|
||||
msgid "This search didn't get any result."
|
||||
msgstr "Cette recherche n'a retournée aucun résultat."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1963
|
||||
#: includes/class/class.LSsearch.php:1966
|
||||
msgid "LSsearch : Invalid filter : %{filter}."
|
||||
msgstr "LSsearch : Filtre invalide : %{filter}."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1966
|
||||
#: includes/class/class.LSsearch.php:1969
|
||||
msgid "LSsearch : Invalid basedn (%{basedn})."
|
||||
msgstr "LSsearch : Base DN invalide (%{basedn})."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1969
|
||||
#: includes/class/class.LSsearch.php:1972
|
||||
msgid "LSsearch : Invalid value for %{param} parameter."
|
||||
msgstr "LSsearch : La valeur du paramètre %{param} est incorrecte."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1972
|
||||
#: includes/class/class.LSsearch.php:1975
|
||||
msgid ""
|
||||
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
|
||||
msgstr ""
|
||||
"LSsearch : Limite de taille de recherche invalide. Elle doit être un entier "
|
||||
"supérieur ou égal à 0."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1975
|
||||
#: includes/class/class.LSsearch.php:1978
|
||||
msgid "LSsearch : Invalid parameter %{param}. Must be an boolean."
|
||||
msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1978
|
||||
#: includes/class/class.LSsearch.php:1981
|
||||
msgid ""
|
||||
"LSsearch : Invalid parameter attributes. Must be an string or an array of "
|
||||
"strings."
|
||||
|
@ -2939,13 +2944,13 @@ msgstr ""
|
|||
"LSsearch : Paramètre 'attributes' invalide. Il doit être une chaîne de "
|
||||
"caractères ou un tableau de chaînes de caractères."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1981
|
||||
#: includes/class/class.LSsearch.php:1984
|
||||
msgid "LSsearch : Can't build attributes list for make filter."
|
||||
msgstr ""
|
||||
"LSsearch : Impossible de construire la liste des attributs pour faire le "
|
||||
"filtre."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1984
|
||||
#: includes/class/class.LSsearch.php:1987
|
||||
msgid ""
|
||||
"LSsearch : Error building filter with attribute '%{attr}' and pattern "
|
||||
"'%{pattern}'"
|
||||
|
@ -2953,34 +2958,34 @@ msgstr ""
|
|||
"LSsearch : Problème en construisant le filtre avec l'attribut '%{attr}' et "
|
||||
"le mot clé '%{pattern}'"
|
||||
|
||||
#: includes/class/class.LSsearch.php:1987
|
||||
#: includes/class/class.LSsearch.php:1990
|
||||
msgid "LSsearch : Error combining filters."
|
||||
msgstr "LSsearch : Problème en combinant les filtres."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1990
|
||||
#: includes/class/class.LSsearch.php:1993
|
||||
msgid "LSsearch : Invalid pattern."
|
||||
msgstr "LSsearch : Mot clé invalide."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1993
|
||||
#: includes/class/class.LSsearch.php:1996
|
||||
msgid "LSsearch : Invalid attribute %{attr} in parameters."
|
||||
msgstr "LSsearch : Attribut %{attr} incorrect dans les paramètres."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1996
|
||||
#: includes/class/class.LSsearch.php:1999
|
||||
msgid "LSsearch : Error during the search."
|
||||
msgstr "LSsearch : Erreur pendant la recherche."
|
||||
|
||||
#: includes/class/class.LSsearch.php:1999
|
||||
#: includes/class/class.LSsearch.php:2002
|
||||
msgid "LSsearch : Error sorting the search."
|
||||
msgstr "LSsearch : Erreur pendant le trie de la recherche."
|
||||
|
||||
#: includes/class/class.LSsearch.php:2002
|
||||
#: includes/class/class.LSsearch.php:2005
|
||||
msgid ""
|
||||
"LSsearch : The function of the custum information %{name} is not callable."
|
||||
msgstr ""
|
||||
"LSsearch : La fonction de l'information personnalisée %{name} n'est pas "
|
||||
"exécutable."
|
||||
|
||||
#: includes/class/class.LSsearch.php:2005
|
||||
#: includes/class/class.LSsearch.php:2008
|
||||
msgid ""
|
||||
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
|
||||
"(filter : %{filter})."
|
||||
|
@ -2988,13 +2993,13 @@ msgstr ""
|
|||
"LSsearch : PredefinedFilter invalide pour le type d'LSobject %{type} : "
|
||||
"%{label} (filtre : %{filter})."
|
||||
|
||||
#: includes/class/class.LSsearch.php:2008
|
||||
#: includes/class/class.LSsearch.php:2011
|
||||
msgid "LSsearch : Error during execution of the custom action %{customAction}."
|
||||
msgstr ""
|
||||
"LSldapObject : Erreur durant l'exécution de l'action personnalisée "
|
||||
"%{customAction}."
|
||||
|
||||
#: includes/class/class.LSsearch.php:2011
|
||||
#: includes/class/class.LSsearch.php:2014
|
||||
msgid "LSsearch : Invalid search pattern."
|
||||
msgstr "LSsearch : Mot clé de recherche invalide."
|
||||
|
||||
|
@ -3312,12 +3317,12 @@ msgstr ""
|
|||
"LSformRule_gpg_pub_key : L'extension PHP GnuPG n'est pas installée, "
|
||||
"impossible de valider la valeur."
|
||||
|
||||
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1211
|
||||
#: includes/routes.php:1305 includes/routes.php:1452
|
||||
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1214
|
||||
#: includes/routes.php:1307 includes/routes.php:1462
|
||||
msgid "View"
|
||||
msgstr "Voir"
|
||||
|
||||
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1067
|
||||
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1064
|
||||
msgid "Copy"
|
||||
msgstr "Copier"
|
||||
|
||||
|
@ -3347,66 +3352,66 @@ msgstr "Accueil"
|
|||
msgid "You must provide pattern for global search."
|
||||
msgstr "Vous devez fournir un mot clé pour les recherches globales."
|
||||
|
||||
#: includes/routes.php:466 includes/routes.php:825
|
||||
#: includes/routes.php:463 includes/routes.php:822
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
|
||||
#: includes/routes.php:471 includes/routes.php:891
|
||||
#: includes/routes.php:468 includes/routes.php:888
|
||||
msgid "Export"
|
||||
msgstr "Exporter"
|
||||
|
||||
#: includes/routes.php:483
|
||||
#: includes/routes.php:480
|
||||
msgid "Reset"
|
||||
msgstr "Réinitialiser"
|
||||
|
||||
#: includes/routes.php:522 templates/default/select.tpl:31
|
||||
#: includes/routes.php:519 templates/default/select.tpl:31
|
||||
msgid "Approximative search"
|
||||
msgstr "Recherche approximative"
|
||||
|
||||
#: includes/routes.php:523 templates/default/select.tpl:32
|
||||
#: includes/routes.php:520 templates/default/select.tpl:32
|
||||
msgid "Recursive search"
|
||||
msgstr "Recherche récursive"
|
||||
|
||||
#: includes/routes.php:615
|
||||
#: includes/routes.php:612
|
||||
msgid ""
|
||||
"The custom action %{title} have been successfully execute on this search."
|
||||
msgstr ""
|
||||
"L'action personnalisée %{title} a été correctement exécutée sur cette "
|
||||
"recherche."
|
||||
|
||||
#: includes/routes.php:963
|
||||
#: includes/routes.php:960
|
||||
msgid "Data entry form"
|
||||
msgstr "Masque de saisie"
|
||||
|
||||
#: includes/routes.php:969 includes/routes.php:1746
|
||||
#: includes/routes.php:966 includes/routes.php:1984
|
||||
msgid "Object has been added."
|
||||
msgstr "L'objet a été ajouté."
|
||||
|
||||
#: includes/routes.php:1106
|
||||
#: includes/routes.php:1109
|
||||
msgid "My account"
|
||||
msgstr "Mon compte"
|
||||
|
||||
#: includes/routes.php:1169 includes/routes.php:1918
|
||||
#: includes/routes.php:1172 includes/routes.php:2156
|
||||
msgid "The object has been partially modified."
|
||||
msgstr "L'objet a été partiellement modifié."
|
||||
|
||||
#: includes/routes.php:1172 includes/routes.php:1921
|
||||
#: includes/routes.php:1175 includes/routes.php:2159
|
||||
msgid "The object has been modified successfully."
|
||||
msgstr "L'objet a bien été modifié."
|
||||
|
||||
#: includes/routes.php:1288 includes/routes.php:1961
|
||||
#: includes/routes.php:1290 includes/routes.php:2199
|
||||
msgid "%{objectname} has been successfully deleted."
|
||||
msgstr "%{objectname} a bien été supprimé."
|
||||
|
||||
#: includes/routes.php:1297
|
||||
#: includes/routes.php:1299
|
||||
msgid "Deleting : %{objectname}"
|
||||
msgstr "Suppression : %{objectname}"
|
||||
|
||||
#: includes/routes.php:1298
|
||||
#: includes/routes.php:1300
|
||||
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
|
||||
msgstr "Voulez-vous vraiment supprimer <strong>%{displayName}</strong> ?"
|
||||
|
||||
#: includes/routes.php:1409
|
||||
#: includes/routes.php:1419 includes/routes.php:2278
|
||||
msgid ""
|
||||
"The custom action %{customAction} have been successfully execute on "
|
||||
"%{objectname}."
|
||||
|
|
|
@ -251,7 +251,7 @@ msgstr ""
|
|||
#: includes/addons/LSaddons.mail.php:565
|
||||
#: includes/addons/LSaddons.showSupportInfo.php:78
|
||||
#: includes/addons/LSaddons.accesslog.php:248
|
||||
#: includes/addons/LSaddons.showTechInfo.php:117
|
||||
#: includes/addons/LSaddons.showTechInfo.php:128
|
||||
msgid "Go back"
|
||||
msgstr ""
|
||||
|
||||
|
@ -366,8 +366,8 @@ msgstr ""
|
|||
#: includes/class/class.LSrelation.php:679 includes/class/class.LSform.php:346
|
||||
#: includes/class/class.LSformElement_select_object.php:75
|
||||
#: includes/class/class.LSformElement_select_object.php:91
|
||||
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1075
|
||||
#: includes/routes.php:1219
|
||||
#: includes/class/class.LSsearchEntry.php:237 includes/routes.php:1072
|
||||
#: includes/routes.php:1222
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
|
@ -380,8 +380,8 @@ msgstr ""
|
|||
#: includes/class/class.LSrelation.php:736
|
||||
#: includes/class/class.LSformElement_select_object.php:74
|
||||
#: includes/class/class.LSformElement_supannLabeledValue.php:90
|
||||
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1059
|
||||
#: includes/routes.php:1227 includes/routes.php:1313 includes/routes.php:1460
|
||||
#: includes/class/class.LSsearchEntry.php:221 includes/routes.php:1056
|
||||
#: includes/routes.php:1230 includes/routes.php:1315 includes/routes.php:1470
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
|
@ -389,7 +389,7 @@ msgstr ""
|
|||
msgid "Modify RDN"
|
||||
msgstr ""
|
||||
|
||||
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:521
|
||||
#: includes/addons/LSaddons.accesslog.php:35 includes/routes.php:518
|
||||
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
@ -417,7 +417,7 @@ msgstr ""
|
|||
|
||||
#: includes/addons/LSaddons.accesslog.php:243
|
||||
#: includes/class/class.LSsession.php:1875 includes/routes.php:157
|
||||
#: includes/routes.php:478 templates/default/select.tpl:29
|
||||
#: includes/routes.php:475 templates/default/select.tpl:29
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
|
@ -633,7 +633,7 @@ msgstr ""
|
|||
msgid "No"
|
||||
msgstr ""
|
||||
|
||||
#: includes/addons/LSaddons.showTechInfo.php:113
|
||||
#: includes/addons/LSaddons.showTechInfo.php:124
|
||||
msgid "%{name}: Technical information"
|
||||
msgstr ""
|
||||
|
||||
|
@ -819,7 +819,7 @@ msgstr ""
|
|||
|
||||
#: includes/class/class.LSconfirmBox.php:37
|
||||
#: includes/class/class.LSsmoothbox.php:39 includes/class/class.LSform.php:175
|
||||
#: includes/routes.php:645 includes/routes.php:1300 includes/routes.php:1447
|
||||
#: includes/routes.php:642 includes/routes.php:1302 includes/routes.php:1457
|
||||
#: templates/default/recoverpassword.tpl:21
|
||||
msgid "Validate"
|
||||
msgstr ""
|
||||
|
@ -1552,6 +1552,10 @@ msgid ""
|
|||
"%{context}</pre>"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsession.php:3214
|
||||
msgid "LSsession : This custom action can not be executed by this way."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSformRule_mimetype.php:53
|
||||
#: includes/class/class.LSformRule_mimetype.php:57
|
||||
msgid "Invalid file type (%{type})."
|
||||
|
@ -1968,8 +1972,8 @@ msgstr ""
|
|||
msgid "No object."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSrelation.php:747 includes/routes.php:460
|
||||
#: includes/routes.php:1004
|
||||
#: includes/class/class.LSrelation.php:747 includes/routes.php:457
|
||||
#: includes/routes.php:1001
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2166,11 +2170,11 @@ msgid ""
|
|||
"support."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSform.php:327 includes/routes.php:641
|
||||
#: includes/class/class.LSform.php:327 includes/routes.php:638
|
||||
msgid "Do you really want to execute custom action %{title} on this search ?"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSform.php:333 includes/routes.php:1441
|
||||
#: includes/class/class.LSform.php:333 includes/routes.php:1451
|
||||
msgid ""
|
||||
"Do you really want to execute custom action %{customAction} on "
|
||||
"%{objectname} ?"
|
||||
|
@ -2360,8 +2364,8 @@ msgstr ""
|
|||
msgid "Display RSS stack."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:594
|
||||
#: includes/routes.php:1388
|
||||
#: includes/class/class.LSattr_ldap_password.php:108 includes/routes.php:591
|
||||
#: includes/routes.php:1398 includes/routes.php:2256
|
||||
msgid "undefined"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2469,88 +2473,88 @@ msgstr ""
|
|||
msgid "Pedagogical element"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1318
|
||||
#: includes/class/class.LSsearch.php:1321
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1321
|
||||
#: includes/class/class.LSsearch.php:1324
|
||||
#: templates/default/global_search.tpl:16
|
||||
msgid "This search didn't get any result."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1963
|
||||
#: includes/class/class.LSsearch.php:1966
|
||||
msgid "LSsearch : Invalid filter : %{filter}."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1966
|
||||
#: includes/class/class.LSsearch.php:1969
|
||||
msgid "LSsearch : Invalid basedn (%{basedn})."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1969
|
||||
#: includes/class/class.LSsearch.php:1972
|
||||
msgid "LSsearch : Invalid value for %{param} parameter."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1972
|
||||
#: includes/class/class.LSsearch.php:1975
|
||||
msgid ""
|
||||
"LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1975
|
||||
#: includes/class/class.LSsearch.php:1978
|
||||
msgid "LSsearch : Invalid parameter %{param}. Must be an boolean."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1978
|
||||
#: includes/class/class.LSsearch.php:1981
|
||||
msgid ""
|
||||
"LSsearch : Invalid parameter attributes. Must be an string or an array of "
|
||||
"strings."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1981
|
||||
#: includes/class/class.LSsearch.php:1984
|
||||
msgid "LSsearch : Can't build attributes list for make filter."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1984
|
||||
#: includes/class/class.LSsearch.php:1987
|
||||
msgid ""
|
||||
"LSsearch : Error building filter with attribute '%{attr}' and pattern "
|
||||
"'%{pattern}'"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1987
|
||||
#: includes/class/class.LSsearch.php:1990
|
||||
msgid "LSsearch : Error combining filters."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1990
|
||||
#: includes/class/class.LSsearch.php:1993
|
||||
msgid "LSsearch : Invalid pattern."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1993
|
||||
#: includes/class/class.LSsearch.php:1996
|
||||
msgid "LSsearch : Invalid attribute %{attr} in parameters."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1996
|
||||
#: includes/class/class.LSsearch.php:1999
|
||||
msgid "LSsearch : Error during the search."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:1999
|
||||
#: includes/class/class.LSsearch.php:2002
|
||||
msgid "LSsearch : Error sorting the search."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:2002
|
||||
#: includes/class/class.LSsearch.php:2005
|
||||
msgid ""
|
||||
"LSsearch : The function of the custum information %{name} is not callable."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:2005
|
||||
#: includes/class/class.LSsearch.php:2008
|
||||
msgid ""
|
||||
"LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
|
||||
"(filter : %{filter})."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:2008
|
||||
#: includes/class/class.LSsearch.php:2011
|
||||
msgid "LSsearch : Error during execution of the custom action %{customAction}."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearch.php:2011
|
||||
#: includes/class/class.LSsearch.php:2014
|
||||
msgid "LSsearch : Invalid search pattern."
|
||||
msgstr ""
|
||||
|
||||
|
@ -2813,12 +2817,12 @@ msgid ""
|
|||
"LSformRule_gpg_pub_key: PHP GnuPG extension is missing, can't validate value."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1211
|
||||
#: includes/routes.php:1305 includes/routes.php:1452
|
||||
#: includes/class/class.LSsearchEntry.php:213 includes/routes.php:1214
|
||||
#: includes/routes.php:1307 includes/routes.php:1462
|
||||
msgid "View"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1067
|
||||
#: includes/class/class.LSsearchEntry.php:229 includes/routes.php:1064
|
||||
msgid "Copy"
|
||||
msgstr ""
|
||||
|
||||
|
@ -2844,64 +2848,64 @@ msgstr ""
|
|||
msgid "You must provide pattern for global search."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:466 includes/routes.php:825
|
||||
#: includes/routes.php:463 includes/routes.php:822
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:471 includes/routes.php:891
|
||||
#: includes/routes.php:468 includes/routes.php:888
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:483
|
||||
#: includes/routes.php:480
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:522 templates/default/select.tpl:31
|
||||
#: includes/routes.php:519 templates/default/select.tpl:31
|
||||
msgid "Approximative search"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:523 templates/default/select.tpl:32
|
||||
#: includes/routes.php:520 templates/default/select.tpl:32
|
||||
msgid "Recursive search"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:615
|
||||
#: includes/routes.php:612
|
||||
msgid ""
|
||||
"The custom action %{title} have been successfully execute on this search."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:963
|
||||
#: includes/routes.php:960
|
||||
msgid "Data entry form"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:969 includes/routes.php:1746
|
||||
#: includes/routes.php:966 includes/routes.php:1984
|
||||
msgid "Object has been added."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1106
|
||||
#: includes/routes.php:1109
|
||||
msgid "My account"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1169 includes/routes.php:1918
|
||||
#: includes/routes.php:1172 includes/routes.php:2156
|
||||
msgid "The object has been partially modified."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1172 includes/routes.php:1921
|
||||
#: includes/routes.php:1175 includes/routes.php:2159
|
||||
msgid "The object has been modified successfully."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1288 includes/routes.php:1961
|
||||
#: includes/routes.php:1290 includes/routes.php:2199
|
||||
msgid "%{objectname} has been successfully deleted."
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1297
|
||||
#: includes/routes.php:1299
|
||||
msgid "Deleting : %{objectname}"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1298
|
||||
#: includes/routes.php:1300
|
||||
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
|
||||
msgstr ""
|
||||
|
||||
#: includes/routes.php:1409
|
||||
#: includes/routes.php:1419 includes/routes.php:2278
|
||||
msgid ""
|
||||
"The custom action %{customAction} have been successfully execute on "
|
||||
"%{objectname}."
|
||||
|
|
Loading…
Reference in a new issue