12.2 Écrire une action
Une action est le déroulement d'une fonction PHP.
12.2.1 Principe et spécification
12.2.1.1 Introduction
Toutes les actions sont définies au sein d'une application.
La description de l'action se fait dans le fichier MYAPP.app
dans la variable $action_desc
.
Une action est définie à l'aide d'un fichier PHP et/ou d'un template XML/HTML. Le fichier PHP ou le template est optionnel, mais il faut au moins un des deux. Chaque action peut définir son droit d'accès (ACL). Si l'utilisateur n'a pas le droit défini, l'exécution de l'action est interdite. Si l'action n'a pas d'ACL, l'action est considérée comme libre ainsi tout utilisateur a le droit de l'exécuter.
Le nom du fichier PHP, du template et de la fonction, doivent être définis dans
MYAPP.app
.
Exemple:
Pour la définition de $app_desc
se reporter au chapitre applications.
Fichier MYAPP.app:
<?php $app_desc = array(...);// voir le chapitre sur les applications $action_desc = array( array( "name" => "MYACTION1", "short_name" => N_("action one"), "acl" => ... "root" => "Y" ), array( "name" => "MYACTION2", "short_name" => N_("action two"), "acl" => .. "root" => "N", "script" => "myaction1.php", "function" => "mafonctionpouraction2", "layout" => "monlayoutpouraction2.xml" ) ); ?>
12.2.1.2 Contenu possible pour $action_desc
- name (obligatoire)
-
Indique le nom de référence de l'action.
L'appel de l'action se fait en utilisant la valeur de ce paramètre.
attention : Il ne doit pas dépasser 30 caractères.
- short_name (obligatoire)
- Description courte de l'action
- long_name (facultatif)
-
Description longue de l'action.
S'il est omis le long_name est égal au short_name.
- script (facultatif)
-
Nom du fichier PHP qui est inclus lors de l'exécution de l'action.
S'il est omis, le nom du script est le nom (name) de l'action en minuscules, suivi de l'extension
.php
. - function (facultatif)
-
Nom de la fonction PHP qui est appelée lors de l'exécution de l'action. Elle doit se trouver dans le fichier défini par script.
S'il est omis, le nom de la fonction est le nom (name) de l'action en minuscules.
- layout (facultatif)
-
Nom du fichier template utilisé lors de l'exécution de l'action.
S'il est omis, le nom du template est le nom (name) de l'action en minuscules suivi de l'extension
.xml
. - available (facultatif)
-
Indique si l'action est disponible. Deux valeurs possibles :
-
Y
: action disponible (valeur par défaut) -
N
: action non disponible.
Une action indisponible ne peut pas être exécutée. Dans le cas d'une requête HTTP, le status "503 Action unavalaible" est renvoyé.
-
- acl (facultatif)
-
Nom du droit nécessaire pour exécuter l'action.
Le nom du droit doit être une des valeurs définies par la variable
$app_acl
. Une absence de valeur indique qu'il n'est pas nécessaire d'avoir un droit particulier pour exécuter l'action. Si un utilisateur tente d'exécuter une action dont il n'a pas le droit alors dans le cas d'une requête HTTP, le status "503 Action forbidden" est renvoyé.Note : l'utilisateur "admin" peut exécuter toutes les actions sans restriction de droits.
- root (facultatif)
-
Indique que cette action est l'action principale de l'application. Deux valeurs possibles:
-
Y
action principale. Dans ce cas l'action est lancée avec l'URL?app=MYAPP
; -
N
action non principale (valeur par défaut).
Une seule action peut être notée "root". Dans le cas où plusieurs actions sont notées "root", aucune erreur n'est levée, mais, le résultat n'est pas garanti : l'action qui est lancée est la première trouvée par la requête sql.
-
- openaccess (facultatif)
-
(
Y
ouN
) Indique que l'action est exécutable avec un jeton d'authentification.Par défaut, une action n'est pas accessible en via une authentifiactin par jeton. Pour autoriser, l'action à être exécutée, il faut mettre
Y
dans ce paramètre.
12.2.1.3 Contenu d'un fichier exemple d'action: myaction1.php
Le fichier myaction1.php
contient une fonction du même nom que l'action avec
comme paramètre une référence à l'objet [Action][class_action].
Fichier myaction1.php
function myaction1(Action &$action) { // … }
12.2.1.3.1 Récupération de valeurs d'environnement
Pour récupérer :
-
la valeur d'un paramètre applicatif :
$parameterValue = $action->getParam("nom_du_paramètre");
-
le service d'accès à la base de données :
$dbaccess = $action->dbaccess;
-
l'utilisateur courant :
$user = $action->user; // Objet de type `Account`
-
l'application liée à l'action (retourne une instance d'objet de la classe Application :
$application = $action->parent; // Objet de type `Application`
-
les valeurs passées dans l'URL :
Une action peut être lancée par l'activation d'un lien hypertexte ou la soumission d'un formulaire. L'URL appelée peut contenir des paramètres, dont les valeurs sont récupérées par l'intermédiaire de la méthode
Action::getArgument
. Toutefois, il faut préférer l'utilisation de la classe ActionUsage pour la récupération des paramètres.$val = $action->getArgument("url_val", "val_par_defaut");
12.2.1.3.2 Vérifier les arguments et donner l'usage
La classe ActionUsage permet de valider que les arguments reçus sont valides (attribut obligatoire/optionnel).
Si l'option strict est mise à true
(valeur par défaut), tout argument non
compris dans l'usage provoquera une erreur et l'action sera déroutée dès l'appel
à verify()
.
Exemple d'utilisation de ActionUsage
:
function my_color(Action &$action) { $usage = new ActionUsage($action); $usage->setText(_("Get color map")); $red = $usage->addOptionalParameter("red", "red level", array(), 128); $quality = $usage->addOptionalParameter("quality", "quality", array(), 20); $usage->verify(); if (!is_numeric($red)) $usage->exitError('red must be a integer'); if (!is_numeric($quality)) $usage->exitError('quality must be a integer'); }
12.2.1.3.3 Afficher/Transmettre des données dans le template
Il faut utiliser l'attribut lay
de l'objet $action
qui est passé en
paramètre. L'attribut lay
est un objet de la classe Layout
:
$action->lay->set("mydata", "val_to_be_sent");
Plus d'informations sur les templates sont disponibles ici.
12.2.1.3.4 Mise en garde et astuces
- Pour sortir de la fonction et afficher un message d'erreur à l'utilisateur,
il faut utiliser la méthode
exitError()
:
$action->exitError("Message d'erreur");
12.2.1.4 Contenu d'un fichier exemple de template d'action : myaction1.xml
Le template de l'action peut faire référence à ou plusieurs zones.
Le reste de la page entre les deux balises doit être du code HTML valide ou utiliser le système de template de Dynacase.
Note : Bien que la plupart des templates produisent des pages
HTML, le template peut aussi produire tout type de données textuelles
(HTML, JS, CSS, JSON, XML, CSV, etc.).
Une action peut aussi retourner des fichiers binaires mais dans ce cas ce n'est
pas l'objet lay
qui sera utilisé pour le retour.
12.2.2 Exécuter une action
Une action est exécutée sur le serveur en indiquant le nom de l'application et le nom de l'action dans l'url d'accès.
Le nom de l'application est indiqué dans le paramètre app
et le nom de
l'action dans le paramètre action
.
Exemple :
?app=MY_APP&action=MY_ACTION
Les actions peuvent aussi être exécutées en mode console avec wsh.