Changes

m
no edit summary
Line 44: Line 44:  
'''Note''': Il est aussi possible de placer les fichiers triggers dans un sous-dossier d'un module externe. Ex: si le module réside dans htdocs/custom/mymodule/, alors il est possible de placer les triggers dans htdocs/custom/mymodule/core/triggers/.
 
'''Note''': Il est aussi possible de placer les fichiers triggers dans un sous-dossier d'un module externe. Ex: si le module réside dans htdocs/custom/mymodule/, alors il est possible de placer les triggers dans htdocs/custom/mymodule/core/triggers/.
 
Mais dans ce cas, le trigger ne sera trouvé que si vous le déclarer dans le fichier descripteur de votre module. Pour cela, ajouter triggers->1 dans le tableau module_parts (ex: '''/monmodule/core/modules/modMonModule.class.php'''):
 
Mais dans ce cas, le trigger ne sera trouvé que si vous le déclarer dans le fichier descripteur de votre module. Pour cela, ajouter triggers->1 dans le tableau module_parts (ex: '''/monmodule/core/modules/modMonModule.class.php'''):
<source lang="php">
+
<syntaxhighlight lang="php">
 
// Defined all module parts (triggers, login, substitutions, menus, etc...) (0=disable,1=enable)
 
// Defined all module parts (triggers, login, substitutions, menus, etc...) (0=disable,1=enable)
 
   $this->module_parts = array('triggers' => 1);
 
   $this->module_parts = array('triggers' => 1);
Line 51: Line 51:  
   //              'substitutions' => 0,
 
   //              'substitutions' => 0,
 
   //              'menus' => 0);
 
   //              'menus' => 0);
</source>
+
</syntaxhighlight>
 
Puis désactiver et réactiver le module. Ceci aura pour effet d'ajouter une ligne dans la [[Table llx_const]] pour indiquer à Dolibarr qu'il faut aussi rechercher les triggers dans le répertoire de votre module '''htdocs/monmodule/core/triggers'''.
 
Puis désactiver et réactiver le module. Ceci aura pour effet d'ajouter une ligne dans la [[Table llx_const]] pour indiquer à Dolibarr qu'il faut aussi rechercher les triggers dans le répertoire de votre module '''htdocs/monmodule/core/triggers'''.
   Line 64: Line 64:  
Cette fonction est appelée à chaque évènement Dolibarr. Placer votre code en fonction du ou des évènements sur lesquels vous voulez réagir, chaque évènement étant identifié par un code (voir chapitres suivant pour la liste des codes), on peut réagir ou non à un évènement donné par un test sur la variable '''$action''':
 
Cette fonction est appelée à chaque évènement Dolibarr. Placer votre code en fonction du ou des évènements sur lesquels vous voulez réagir, chaque évènement étant identifié par un code (voir chapitres suivant pour la liste des codes), on peut réagir ou non à un évènement donné par un test sur la variable '''$action''':
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
public function runtrigger($action,$object,$user,$langs,$conf)
 
public function runtrigger($action,$object,$user,$langs,$conf)
 
{
 
{
Line 82: Line 82:  
       ...
 
       ...
 
}
 
}
</source>
+
</syntaxhighlight>
    
Vous pouvez faire ce que vous voulez dans cette portion de code du moment que la fonction runTrigger renvoie un code retour sur le principe suivant:
 
Vous pouvez faire ce que vous voulez dans cette portion de code du moment que la fonction runTrigger renvoie un code retour sur le principe suivant:
Line 115: Line 115:  
Pour gérer d'autres événements que ceux ci-dessus, il faut modifier le code Dolibarr pour y ajouter la séquence suivante dans les méthodes métiers des classes des objects manipulés:
 
Pour gérer d'autres événements que ceux ci-dessus, il faut modifier le code Dolibarr pour y ajouter la séquence suivante dans les méthodes métiers des classes des objects manipulés:
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
// Call trigger
 
// Call trigger
 
$result=$this->call_trigger('CODE_TRIGGER',$user);
 
$result=$this->call_trigger('CODE_TRIGGER',$user);
 
if ($result < 0) $error++;           
 
if ($result < 0) $error++;           
 
// End call triggers
 
// End call triggers
</source>
+
</syntaxhighlight>
    
Pour ajouter des informations de context (par exemple pour dissocier 2 cas différents appelés avec le même code Trigger), il est possible de placer ces informations dans la propriétés ->context de l'object sur lequel porte l'appel du trigger. Exemple:
 
Pour ajouter des informations de context (par exemple pour dissocier 2 cas différents appelés avec le même code Trigger), il est possible de placer ces informations dans la propriétés ->context de l'object sur lequel porte l'appel du trigger. Exemple:
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
// Call trigger
 
// Call trigger
 
$this->context = array('paramX'=>$valueX, 'anyparamofyourchoice'=>$anyvalue);
 
$this->context = array('paramX'=>$valueX, 'anyparamofyourchoice'=>$anyvalue);
Line 130: Line 130:  
if ($result < 0) $error++;           
 
if ($result < 0) $error++;           
 
// End call triggers
 
// End call triggers
</source>
+
</syntaxhighlight>
      Line 136: Line 136:  
Il sera alors possible d'ajouter dans la méthode runTrigger de tout fichier trigger, un if qui permet de gérer ce code. La méthode runTrigger serait alors de la forme :
 
Il sera alors possible d'ajouter dans la méthode runTrigger de tout fichier trigger, un if qui permet de gérer ce code. La méthode runTrigger serait alors de la forme :
   −
<source lang="php">
+
<syntaxhighlight lang="php">
 
function run_trigger($action,$object,$user,$lang,$conf)
 
function run_trigger($action,$object,$user,$lang,$conf)
 
{
 
{
Line 158: Line 158:  
       ...
 
       ...
 
}
 
}
</source>
+
</syntaxhighlight>
    
=Conclusion=
 
=Conclusion=