diff --git a/doc/src/api/index.md b/doc/src/api/index.md index dc557119..1eeffbd4 100644 --- a/doc/src/api/index.md +++ b/doc/src/api/index.md @@ -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": { diff --git a/doc/src/conf/LSobject/customActions.md b/doc/src/conf/LSobject/customActions.md index 7834e69c..3f7bc7e2 100644 --- a/doc/src/conf/LSobject/customActions.md +++ b/doc/src/conf/LSobject/customActions.md @@ -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' diff --git a/src/includes/addons/LSaddons.showTechInfo.php b/src/includes/addons/LSaddons.showTechInfo.php index 5361176a..144d16e9 100644 --- a/src/includes/addons/LSaddons.showTechInfo.php +++ b/src/includes/addons/LSaddons.showTechInfo.php @@ -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(); diff --git a/src/includes/class/class.LSsession.php b/src/includes/class/class.LSsession.php index e29abfea..3ee2c1f1 100644 --- a/src/includes/class/class.LSsession.php +++ b/src/includes/class/class.LSsession.php @@ -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}.
\nContext:\n%{context}
") ); + LSerror :: defineError('LSsession_28', + ___("LSsession : This custom action can not be executed by this way.") + ); } /** diff --git a/src/includes/routes.php b/src/includes/routes.php index 2614197a..f6580405 100644 --- a/src/includes/routes.php +++ b/src/includes/routes.php @@ -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[^/]+)/(?P[^/]+)/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[^/]+)/(?P[^/]+)/customAction/(?P[^/]+)/?$#', + 'handle_api_LSobject_customAction', true, false, true); + /* * Handle API LSobject relation request * diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo index b2d8080a..313ee993 100644 Binary files a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo and b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo differ diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po index d581ba06..08d7d951 100644 --- a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po +++ b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po @@ -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 \n" "Language-Team: LdapSaisie \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}" +#: 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 %{displayName} ?" msgstr "Voulez-vous vraiment supprimer %{displayName} ?" -#: includes/routes.php:1409 +#: includes/routes.php:1419 includes/routes.php:2278 msgid "" "The custom action %{customAction} have been successfully execute on " "%{objectname}." diff --git a/src/lang/ldapsaisie.pot b/src/lang/ldapsaisie.pot index 2d4be0aa..52ad4799 100644 --- a/src/lang/ldapsaisie.pot +++ b/src/lang/ldapsaisie.pot @@ -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}" 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 %{displayName} ?" msgstr "" -#: includes/routes.php:1409 +#: includes/routes.php:1419 includes/routes.php:2278 msgid "" "The custom action %{customAction} have been successfully execute on " "%{objectname}."