12.5 Application héritée
Une application peut hériter d'une application déjà installée.
Un seul niveau d'héritage d'application est pris en compte.
La propriété childof
de la description de l'application permet
d'indiquer l'application parente.
La partie description ($app_desc
) de l'application ne fait pas partie des
caractéristiques héritées. Cette description complète est obligatoire même en
cas d'héritage.
Lorsqu'une application héritée est installée, toutes les déclarations des actions de l'application parente sont copiées dans l'application héritée au moment de l'installation ou de la mise à jour de l'application héritée.
Lorsque l'application parente est mise à jour, les applications héritant sont mise à jour également : les nouvelles actions sont ajoutées et les éventuelles actions qui ne sont plus décrites sont supprimés des applications. De même les actions modifiées sont aussi modifiés dans les applications héritant de l'application parente.
12.5.1 Surcharge des descriptions d'actions
Le fichier de description de l'application héritée peut modifier les caractéristiques des actions de l'application parente.
Pour modifier une action parente il faut la déclarer dans le tableau
$action_desc
en indiquant obligatoirement son nom (name
) pour l'identifier.
Les caractéristiques des actions nécessitant d'être modifiée doivent être
indiquées. Les caractéristiques non indiquées seront celles de l'application
parente au moment de l'installation ou de la mise à jour.
Extrait de l'application parente :
$action_desc = array( array( "name" => "ONEFAM_ROOT", "short_name" => N_("one family root"), "acl" => "ONEFAM_READ", "root" => "Y" ) );
Extrait de l'application héritée :
$action_desc = array ( array( "name" =>"ONEFAM_ROOT", "root" => "N" ) );
Dans cet exemple, l'action ONEFAM_ROOT
a les caractéristiques suivantes
provenant de l'application héritée :
- name : "ONEFAM_ROOT",
- short_name : N_("one family root"),
- acl : "ONEFAM_READ",
- root : "N"
- script : "onefam_root.php"
- function : "onefam_root"
- layout : "onefam_root.xml"
L'action ONEFAM_ROOT
n'est plus l'action principale dans ce cas.
12.5.1.1 Surcharge du contrôleur de l'action
Le contrôleur de l'action peut être changé en modifiant la description.
Extrait de l'application parente MY_FIRSTAPP
:
$action_desc = array( array( "name" => "MY_FIRSTACTION", "short_name" => N_("my action"), "acl" => "MY_ACL" ) );
Extrait de l'application héritée MY_SPEAPP
:
$action_desc = array ( array( "name" =>"MY_FIRSTACTION", "function" => "spe_firstaction" "script" => "spe_firstaction.php" ) );
Dans cet exemple, l'action MY_FIRSTACTION
a les caractéristiques suivantes
dans l'application héritée :
- name : "MY_FIRSTACTION",
- short_name : N_("my action"),
- acl : "MY_ACL",
- root : "N
- script : "spe_firstaction.php"
- function : "spe_firstaction"
- layout : "my_firstaction.xml"
Le fichier spe_firstaction.php
proviendra du répertoire MY_SPEAPP
, le
fichier my_firstaction.xml
proviendra du répertoire MY_FIRSTAPP/Layout
.
Note : la fonction surchargée peut appeler la fonction parente si les noms des fonctions sont différents.
spe_firstaction.php
require_once "MYAPP/my_firstaction.php"; function spe_firstaction(Action $action) { my_firstaction($action); // call parent action // ... do specific custom }
12.5.1.2 Surcharge du template de l'action
Le template de l'action peut être changé en modifiant la description.
Extrait de l'application parente MY_FIRSTAPP
:
$action_desc = array( array( "name" => "MY_FIRSTACTION", "short_name" => N_("my action"), "acl" => "MY_ACL" ) );
Extrait de l'application héritée MY_SPEAPP
:
$action_desc = array ( array( "name" =>"MY_FIRSTACTION", "layout" => "spe_firstaction.xml" ) );
Dans cet exemple, l'action MY_FIRSTACTION
a les caractéristiques suivantes
dans l'application héritée :
- name : "MY_FIRSTACTION",
- short_name : N_("my action"),
- acl : "MY_ACL",
- root : "N
- script : "my_firstaction.php"
- function : "my_firstaction"
- layout : "spe_firstaction.xml"
Le fichier my_firstaction.php
provient du répertoire MY_FIRSTAPP
, le
fichier spe_firstaction.xml
provient du répertoire MY_SPEAPP/Layout
.
12.5.2 Surcharge par publication
Les contrôleurs et les template peuvent aussi être surchargés si l'application dérivée contient un fichier PHP contrôleur de même nom que l'application parente ou si elle contient un template de même nom.
Le contrôleur est d'abord recherché dans le répertoire de l'application dérivée
et ensuite dans le répertoire de l'application parente. De même, le template est
d'abord recherché dans le répertoire Layout
de l'application dérivée et
ensuite dans le répertoire Layout
de l'application parente.
12.5.3 Ajouter de nouvelles actions
La description des nouvelles actions est insérée dans le tableau
$action_desc
comme pour la modification des actions hérités.
Ces actions peuvent utiliser les droits déclarés sur l'application parente.
12.5.4 Héritage des droits
Les déclarations des droits inscrits dans le tableau $app_acl
sont
copiés dans l'application héritée.
Au niveau de la pose des droits aux utilisateurs, groupes et rôles aucun héritage n'est effectué. Les droits d'une application parente et d'une application héritée sont totalement dissociés. Seuls les noms et description des droits sont réutilisés.
De nouveaux droits peuvent être indiqués dans le tableau $app_acl
. Lors de
l'installation ou de la mise à jour, ces nouveaux droits sont ajoutés aux
droits hérités. Il n'est pas possible d'enlever des descriptions de droits
fournies par l'application parente.
12.5.5 Modification des paramètres applicatifs
Pour les paramètres de l'application parente seuls les paramètres non globaux pourront être redéfinis par les applications filles. Les valeurs des paramètres globaux sont communs à l'ensemble des applications dérivées.
Paramètres de l'application parente :
$app_const = array( "VERSION" => "3.2.7-0", "ONEFAM_IDS" => array( "val" => "", "global" => "N", "user" => "Y", "kind" => "static", "descr" => N_("visible user families") ) , "ONEFAM_MIDS" => array( "val" => "", "global" => "N", "user" => "N", "descr" => N_("visible master families") ) , "ONEFAM_GLOBALMAX" => array( "val" => "", "global" => "Y", "user" => "N", "descr" => N_("Seuil maximum") ) );
Modification des paramètres sur l'application héritée
$app_const = array( "VERSION" => "1.0.1-0", "ONEFAM_IDS" => "MY_FAMILYONE,MY_FAMILYTWO", "ONEFAM_MIDS" => "MY_FAMILYTHREE" );
Dans cet exemple les paramètres "ONEFAM_IDS" et "ONEFAM_MIDS" peuvent être initialisés avec leur propre valeur. Le paramètre "ONEFAM_GLOBALMAX" lui ne peut faire l'objet d'une modification.
L'application héritée peut ajouter ces propres paramètres dans le tableau
$app_const
.
12.5.6 Créer une application pouvant être dérivée
Si une application n'a pas été prévue pour être dérivée alors il n'est pas possible à l'application hérité de modifier le comportement des actions et des interfaces. Seuls des ajouts d'actions seront possibles.
Pour réaliser une application dérivable, il faut utiliser le paramètre
applicatif APPNAME
pour construire l'ensemble des identifiants de zones et
d'actions. Ce paramètre applicatif contient le nom de l'application courante.
Exemple :
<h1>Application [APPNAME]</h1> <a href="?app=[APPNAME]&action=MY_ACTION">Entrez dans l'action</a> [ZONE [APPNAME]:MY_ZONE]
Le template ci-dessus, est différent en fonction des différentes applications
dérivées. Si une application dérivée modifie le comportement de l'action
MY_ACTION
alors dans ce cas l'url de l'ancre pointera sur l'action modifiée
et non sur l'originale. De même avec l'action MY_ZONE
qui est l'action
modifiée en cas de dérivation.