New: Nouvelle regle de nommage des triggers pour rendre dev plus simple

This commit is contained in:
Laurent Destailleur 2007-12-27 21:18:24 +00:00
parent a7a3f52788
commit 696eb14515
17 changed files with 215 additions and 162 deletions

View File

@ -39,6 +39,13 @@ print_fiche_titre("Dolibarr",'','setup');
print "<br>\n"; print "<br>\n";
print $langs->trans("Version").':';
print '<ul>';
print '<li>'.DOL_VERSION.'</li>';
print '</ul>';
print "<br>\n";
print $langs->trans("DolibarrLicense").':'; print $langs->trans("DolibarrLicense").':';
print '<ul>'; print '<ul>';
print '<li>GNU/GPL</li>'; print '<li>GNU/GPL</li>';
@ -108,7 +115,7 @@ if (eregi('^fr_',$langs->getDefaultLang()))
print 'Vente / Support'; print 'Vente / Support';
print '<ul>'; print '<ul>';
print '<li>'; print '<li>';
print 'Contactez Rodolphe Quiédeville sur <a target="blank" href="http://www.dolibarr.com/">www.dolibarr.com</a>'; print 'Contactez Rodolphe Quiédeville sur <a target="blank" href="http://rodolphe.quiedeville.org">www.dolibarr.com</a>';
print '</li>'; print '</li>';
print '</ul>'; print '</ul>';
} }

View File

@ -25,6 +25,7 @@
*/ */
require("./pre.inc.php"); require("./pre.inc.php");
include_once(DOL_DOCUMENT_ROOT ."/interfaces.class.php");
if (!$user->admin) if (!$user->admin)
accessforbidden(); accessforbidden();
@ -61,7 +62,7 @@ function Activate($value)
if ($modName) if ($modName)
{ {
$file = $modName . ".class.php"; $file = $modName . ".class.php";
include_once("../includes/modules/$file"); include_once("../includes/modules/".$file);
$objMod = new $modName($db); $objMod = new $modName($db);
$objMod->init(); $objMod->init();
} }
@ -88,7 +89,7 @@ function UnActivate($value)
if ($modName) if ($modName)
{ {
$file = $modName . ".class.php"; $file = $modName . ".class.php";
include_once("../includes/modules/$file"); include_once("../includes/modules/".$file);
$objMod = new $modName($db); $objMod = new $modName($db);
$objMod->remove(); $objMod->remove();
} }
@ -107,24 +108,26 @@ function UnActivate($value)
llxHeader("",""); llxHeader("","");
$html = new Form($db);
print_fiche_titre($langs->trans("TriggersAvailable"),'','setup'); print_fiche_titre($langs->trans("TriggersAvailable"),'','setup');
print "<br>\n";
print $langs->trans("TriggersDesc")."<br>"; print $langs->trans("TriggersDesc")."<br>";
print "<br>\n"; print "<br>\n";
print "<table class=\"noborder\" width=\"100%\">\n"; print "<table class=\"noborder\" width=\"100%\">\n";
print "<tr class=\"liste_titre\">\n"; print "<tr class=\"liste_titre\">\n";
print " <td colspan=\"2\">".$langs->trans("File")."</td>\n"; print " <td colspan=\"2\">".$langs->trans("File")."</td>\n";
print " <td>".$langs->trans("Description")."</td>\n"; //print " <td>".$langs->trans("Description")."</td>\n";
print " <td align=\"center\">".$langs->trans("Version")."</td>\n"; print " <td align=\"center\">".$langs->trans("Version")."</td>\n";
print " <td align=\"center\">".$langs->trans("Activated")."</td>\n"; print " <td align=\"center\">".$langs->trans("Active")."</td>\n";
//print " <td align=\"center\">".$langs->trans("Action")."</td>\n";
print " <td align=\"center\">&nbsp;</td>\n"; print " <td align=\"center\">&nbsp;</td>\n";
print "</tr>\n"; print "</tr>\n";
// Define dir directory
$dir = DOL_DOCUMENT_ROOT . "/includes/triggers/"; $interfaces=new Interfaces($db);
$dir = $interfaces->dir;
$handle=opendir($dir); $handle=opendir($dir);
$files = array(); $files = array();
@ -133,39 +136,38 @@ $orders = array();
$i = 0; $i = 0;
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (is_readable($dir.$file) && ereg('^interface_(.*)\.class\.php',$file,$reg)) if (is_readable($dir.'/'.$file) && ereg('^interface_([^_]+)_(.+)\.class\.php',$file,$reg))
{ {
$modName = 'Interface'.ucfirst($reg[1]); $modName = 'Interface'.ucfirst($reg[2]);
if ($modName) //print "file=$file"; print "modName=$modName"; exit;
{ if (in_array($modName,$modules))
if (in_array($modName,$modules)) {
{ $langs->load("errors");
$langs->load("errors"); print '<div class="error">'.$langs->trans("Error").' : '.$langs->trans("ErrorDuplicateTrigger",$modName,"/htdocs/includes/triggers/").'</div>';
print '<div class="error">'.$langs->trans("Error").' : '.$langs->trans("ErrorDuplicateTrigger",$modName,"/htdocs/includes/triggers/").'</div>'; $objMod = new $modName($db);
$objMod = new $modName($db);
$modules[$i] = $modName; $modules[$i] = $modName;
$files[$i] = $file; $files[$i] = $file;
$orders[$i] = "$objMod->family"; // Tri par famille $orders[$i] = $objMod->family; // Tri par famille
$i++; $i++;
} }
else else
{ {
include_once($dir.$file); include_once($dir.'/'.$file);
$objMod = new $modName($db); $objMod = new $modName($db);
$modules[$i] = $modName; $modules[$i] = $modName;
$files[$i] = $file; $files[$i] = $file;
$orders[$i] = "$objMod->family"; // Tri par famille $orders[$i] = $objMod->family; // Tri par famille
$i++; $i++;
} }
}
} }
} }
asort($orders); asort($orders);
$var=True; $var=True;
// Loop on each trigger
foreach ($orders as $key => $value) foreach ($orders as $key => $value)
{ {
$tab=split('_',$value); $tab=split('_',$value);
@ -181,45 +183,60 @@ foreach ($orders as $key => $value)
$var=!$var; $var=!$var;
// Define disabledbyname and disabledbymodule
$disabledbyname=0;
$disabledbymodule=1;
$module='';
if (eregi('NORUN$',$files[$key])) $disabledbyname=1;
if (eregi('^interface_([^_]+)_(.+)\.class\.php',$files[$key],$reg))
{
// Check if trigger file is for a particular module
$module=eregi_replace('^mod','',$reg[1]);
$constparam='MAIN_MODULE_'.strtoupper($module);
if (strtolower($reg[1]) == 'all') $disabledbymodule=0;
else if (empty($conf->global->$constparam)) $disabledbymodule=2;
}
// Show line for trigger file
print "<tr $bc[$var]>\n"; print "<tr $bc[$var]>\n";
print '<td valign="top" width="14" align="center">'; print '<td valign="top" width="14" align="center">';
print $objMod->picto?img_object('',$objMod->picto):img_object('','generic'); print $objMod->picto?img_object('',$objMod->picto):img_object('','generic');
print '</td>'; print '</td>';
print '<td valign="top">'.$files[$key]."</td>\n"; print '<td valign="top">'.$files[$key]."</td>\n";
print '<td valign="top">'.$objMod->getDesc()."</td>\n"; //print '<td valign="top">'.$objMod->getDesc()."</td>\n";
print "<td valign=\"top\" align=\"center\">".$objMod->getVersion()."</td>\n"; print "<td valign=\"top\" align=\"center\">".$objMod->getVersion()."</td>\n";
// \todo Activation trigger // Etat trigger
print "<td valign=\"top\" align=\"center\">"; print "<td valign=\"top\" align=\"center\">";
$statut_trigger=1; if ($disabledbyname > 0 || $disabledbymodule > 1)
if (eregi('NORUN$',$files[$key])) $statut_trigger=0;
if ($statut_trigger == 1)
{
print img_tick();
}
else
{ {
print "&nbsp;"; print "&nbsp;";
} }
else
{
print img_tick();
}
print "</td>\n"; print "</td>\n";
/* print '<td valign="top">';
print "<td valign=\"top\" align=\"center\">"; $text ='<b>'.$langs->trans("Description").':</b><br>';
if ($const_value == 1) $text.=$objMod->getDesc().'<br>';
{ $text.='<br><b>'.$langs->trans("Status").':</b><br>';
// Module actif if ($disabledbyname == 1)
print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=reset&amp;value=" . $modName . "&amp;spe=" . $_GET["spe"] . "\">" . $langs->trans("Disable") . "</a></td>\n"; {
} $text.=$langs->trans("TriggerDisabledByName").'<br>';
else if ($disabledbymodule == 2) $text.=$langs->trans("TriggerDisabledAsModuleDisabled",$module).'<br>';
{ }
// Module non actif else
print "<a href=\"modules.php?id=".$objMod->numero."&amp;action=set&amp;value=" . $modName . "&amp;spe=" . $_GET["spe"] . "\">" . $langs->trans("Activate") . "</a></td>\n"; {
} if ($disabledbymodule == 0) $text.=$langs->trans("TriggerAlwaysActive").'<br>';
*/ if ($disabledbymodule == 1) $text.=$langs->trans("TriggerActiveAsModuleActive",$module).'<br>';
print "<td>&nbsp;</td>\n"; if ($disabledbymodule == 2) $text.=$langs->trans("TriggerDisabledAsModuleDisabled",$module).'<br>';
}
print $html->textwithhelp('',$text);
print "</td>\n";
print "</tr>\n"; print "</tr>\n";
} }

View File

@ -20,7 +20,7 @@
*/ */
/** \defgroup webcalendar Module Webcalendar /** \defgroup webcalendar Module Webcalendar
\brief Module to include Webcalendar into Dolibarr and \brief Module to include Webcalendar GUI into Dolibarr menu and
add Dolibarr events directly inside a Webcalendar database. add Dolibarr events directly inside a Webcalendar database.
*/ */
@ -60,11 +60,11 @@ class modWebcalendar extends DolibarrModules
$this->family = "projects"; $this->family = "projects";
// Module title used if translation string 'ModuleXXXName' not found (XXX is id value) // Module title used if translation string 'ModuleXXXName' not found (XXX is id value)
$this->name = "Webcalendar"; $this->name = "Webcalendar";
// Module descriptoin used translation string 'ModuleXXXDesc' not found (XXX is id value) // Module description used if translation string 'ModuleXXXDesc' not found (XXX is id value)
$this->description = "Interfaçage avec le calendrier Webcalendar"; $this->description = "Interfaçage avec le calendrier Webcalendar";
// Possible values for version are: 'experimental' or 'dolibarr' or version // Possible values for version are: 'development', 'experimental', 'dolibarr' or version
$this->version = 'dolibarr'; $this->version = 'dolibarr';
// Id used in llx_const table to manage module status (enabled/disabled) // Key used in llx_const table to save module status enabled/disabled (XXX is id value)
$this->const_name = 'MAIN_MODULE_WEBCALENDAR'; $this->const_name = 'MAIN_MODULE_WEBCALENDAR';
// Where to store the module in setup page (0=common,1=interface,2=other) // Where to store the module in setup page (0=common,1=interface,2=other)
$this->special = 1; $this->special = 1;

View File

@ -1,8 +1,17 @@
Directory content
--------------------------------------------------------
This directory contains all available Dolibarr triggers. This directory contains all available Dolibarr triggers.
Name of some triggers ends with -NORUN. This means that they are not enabled and will Trigger file name syntax is:
never be launched. > interface_modModule_mytrigger.php[-NORUN]
If you want to use them, just rename the file name removing the -NORUN part in their name.
where:
> modModule is part of module descriptor file name found in includes/modules
directory or value 'all' if not enabled by a particular module.
> Mytrigger is name of the trigger. The PHP class inside the trigger file
would be named InterfaceMytrigger.
> -NORUN is optionnal and disable completely a trigger file if set. To use
a trigger with such a name, rename file to remove the -NORUN part.
$Id$ $Id$

View File

@ -1,9 +1,20 @@
Ce répertoire contient tous les triggers Dolibarr disponibles. Directory content
--------------------------------------------------------
Ce répertoire contient tous les triggers Dolibarr.
Le nom de certain trigger se termine par -NORUN ce qui signigie que ceux-ci La syntaxe d'un fichier Trigger est:
ne seront pas actifs et ne se seront jamais éxécutés. > interface_modModule_mytrigger.php[-NORUN]
Si vous souhiatez les utiliser il suffit de rennommer ceux-ci en supprimant
la partie -NORUN de leur nom. where:
> modModule est la partie du nom du descripteur de module trouve dans le
repertoire includes/modules pour lequel le trigger doit etre.
actiff ou la valeure 'all' si ne doit pas etre actif pour un
module particulier.
> Mytrigger est le nom du trigger. La classe PHP dans le fichier trigger
aura pour nom InterfaceMytrigger.
> -NORUN est optionnel et desactive le fichier trigger si defini. Pour
utiliser un tel fichier trigger, renommer le fichier afin
d'enlever la partie -NORUN.
$Id$ $Id$

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2005-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,17 +16,19 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_demo.class.php \file htdocs/includes/triggers/interface_all_Demo.class.php
\ingroup core \ingroup core
\brief Fichier de demo de personalisation des actions du workflow \brief Fichier de demo de personalisation des actions du workflow
\remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci: \remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci:
- Le nom du fichier doit etre interface_xxx.class.php - Le nom du fichier doit etre: interface_modMymodule_Mytrigger.class.php
ou: interface_all_Mytrigger.class.php
- Le fichier doit rester stocké dans includes/triggers - Le fichier doit rester stocké dans includes/triggers
- Le nom de la classe doit etre InterfaceXxx - Le nom de la classe doit etre InterfaceMytrigger
- Le nom de la methode constructeur doit etre InterfaceMytrigger
- Le nom de la propriete name doit etre Mytrigger
*/ */
@ -47,10 +49,10 @@ class InterfaceDemo
{ {
$this->db = $DB ; $this->db = $DB ;
$this->name = "Demo"; $this->name = "Demo"; // Put here same value than in file and class name
$this->family = "demo"; $this->family = "demo";
$this->description = "Les triggers de ce composant sont des fonctions vierges. Elles n'ont aucun effet. Ce composant est fourni à des fins de tutorial."; $this->description = "Les triggers de ce composant sont des fonctions vierges. Elles n'ont aucun effet. Ce composant est fourni à des fins de tutorial.";
$this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version $this->version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' or version
} }
/** /**

View File

@ -16,17 +16,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_ecotax.class.php \file htdocs/includes/triggers/interface_modCommande_Ecotax.class.php
\ingroup core \ingroup core
\brief Ecotax ajoute \brief Ajout Ecotax sur produit d'un certaine categorie
\remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci:
- Le nom du fichier doit etre interface_xxx.class.php
- Le fichier doit rester stocké dans includes/triggers
- Le nom de la classe doit etre InterfaceXxx
*/ */

View File

@ -16,22 +16,17 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_demo.class.php \file htdocs/includes/triggers/interface_modCommande_fraisport.class.php
\ingroup core \ingroup core
\brief Fichier de demo de personalisation des actions du workflow \brief Fichier trigger pour ajout frais port
\remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci:
- Le nom du fichier doit etre interface_xxx.class.php
- Le fichier doit rester stocké dans includes/triggers
- Le nom de la classe doit etre InterfaceXxx
*/ */
/** /**
\class InterfaceEditeur \class InterfaceFraisport
\brief Classe des fonctions triggers des actions personalisées du workflow \brief Classe des fonctions triggers des actions personalisées du workflow
*/ */
@ -48,7 +43,7 @@ class InterfaceFraisport
{ {
$this->db = $DB ; $this->db = $DB ;
$this->name = "Frais de port"; $this->name = "Fraisport";
$this->family = "facture"; $this->family = "facture";
$this->description = "Les triggers de ce composant calculent les frais de port."; $this->description = "Les triggers de ce composant calculent les frais de port.";
$this->revision = explode(' ','$Revision$'); $this->revision = explode(' ','$Revision$');

View File

@ -16,17 +16,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_demo.class.php \file htdocs/includes/triggers/interface_modEditeur_editeur.class.php
\ingroup core \ingroup core
\brief Fichier de demo de personalisation des actions du workflow \brief Fichier de demo de personalisation des actions du workflow
\remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci:
- Le nom du fichier doit etre interface_xxx.class.php
- Le fichier doit rester stocké dans includes/triggers
- Le nom de la classe doit etre InterfaceXxx
*/ */
@ -50,7 +45,7 @@ class InterfaceEditeur
$this->name = "Editeur"; $this->name = "Editeur";
$this->family = "editeur"; $this->family = "editeur";
$this->description = "Les triggers de ce composant s'appliquent sur les utilisateurs."; $this->description = "Les triggers de ce composant tri les lignes commandes par stock_loc.";
$this->revision = explode(' ','$Revision$'); $this->revision = explode(' ','$Revision$');
$this->version = $this->revision[1]; $this->version = $this->revision[1];
} }

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2005-2006 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2005-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,11 +16,10 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_ldap.class.php \file htdocs/includes/triggers/interface_modLdap_Ldapsynchro.class.php
\ingroup core \ingroup core
\brief Fichier de gestion des triggers LDAP \brief Fichier de gestion des triggers LDAP
*/ */
@ -29,11 +28,11 @@ require_once (DOL_DOCUMENT_ROOT."/lib/ldap.class.php");
/** /**
\class InterfaceLdap \class InterfaceLdapsynchro
\brief Classe des fonctions triggers des actions de synchro LDAP \brief Classe des fonctions triggers des actions de synchro LDAP
*/ */
class InterfaceLdap class InterfaceLdapsynchro
{ {
var $db; var $db;
var $error; var $error;
@ -43,11 +42,11 @@ class InterfaceLdap
* \brief Constructeur. * \brief Constructeur.
* \param DB Handler d'accès base * \param DB Handler d'accès base
*/ */
function InterfaceLdap($DB) function InterfaceLdapsynchro($DB)
{ {
$this->db = $DB ; $this->db = $DB ;
$this->name = "Ldap"; $this->name = "Ldapsynchro";
$this->family = "ldap"; $this->family = "ldap";
$this->description = "Les triggers de ce composant permettent d'effectuer les synchro de Dolibarr vers un annuaire LDAP."; $this->description = "Les triggers de ce composant permettent d'effectuer les synchro de Dolibarr vers un annuaire LDAP.";
$this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version $this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version

View File

@ -1,5 +1,5 @@
<?php <?php
/* Copyright (C) 2006 Laurent Destailleur <eldy@users.sourceforge.net> /* Copyright (C) 2006-2007 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -16,11 +16,10 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_notification.class.php \file htdocs/includes/triggers/interface_modNotification_notification.class.php
\ingroup notification \ingroup notification
\brief Fichier de gestion des notifications sur evenement Dolibarr \brief Fichier de gestion des notifications sur evenement Dolibarr
*/ */
@ -45,7 +44,7 @@ class InterfaceNotification
$this->name = "Notification"; $this->name = "Notification";
$this->family = "notification"; $this->family = "notification";
$this->description = "Les triggers de ce composant sont les fonctions qui gèrent les notifications par mail du module Notification."; $this->description = "Les triggers de ce composant envoie les notifications par mail selon configuration du module Notification.";
$this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version $this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version
} }

View File

@ -16,28 +16,23 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* *
* $Id$ * $Id$
* $Source$
*/ */
/** /**
\file htdocs/includes/triggers/interface_webcal.class.php \file htdocs/includes/triggers/interface_modWebcalendar_webcalsynchro.class.php
\ingroup webcalendar \ingroup webcalendar
\brief Fichier de demo de personalisation des actions du workflow \brief Fichier de gestion des triggers webcalendar
\remarks Son propre fichier d'actions peut etre créé par recopie de celui-ci:
- Le nom du fichier doit etre interface_xxx.class.php
- Le fichier doit rester stocké dans includes/triggers
- Le nom de la classe doit etre InterfaceXxx
*/ */
include_once(DOL_DOCUMENT_ROOT.'/lib/webcal.class.php'); include_once(DOL_DOCUMENT_ROOT.'/lib/webcal.class.php');
/** /**
\class InterfaceWebCal \class InterfaceWebcalsynchro
\brief Classe des fonctions triggers des actions webcalendar \brief Classe des fonctions triggers des actions webcalendar
*/ */
class InterfaceWebCal class InterfaceWebcalsynchro
{ {
var $db; var $db;
var $error; var $error;
@ -51,11 +46,11 @@ class InterfaceWebCal
* \brief Constructeur. * \brief Constructeur.
* \param DB Handler d'accès base * \param DB Handler d'accès base
*/ */
function InterfaceWebCal($DB) function InterfaceWebcalsynchro($DB)
{ {
$this->db = $DB ; $this->db = $DB ;
$this->name = "WebCal"; $this->name = "Webcalsynchro";
$this->family = "webcal"; $this->family = "webcal";
$this->description = "Les triggers de ce composant permettent d'insérer un évênement dans le calendrier webcalendar pour chaque grand évênement Dolibarr."; $this->description = "Les triggers de ce composant permettent d'insérer un évênement dans le calendrier webcalendar pour chaque grand évênement Dolibarr.";
$this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version $this->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version

View File

@ -54,67 +54,86 @@ class Interfaces
* \param user Objet user * \param user Objet user
* \param lang Objet lang * \param lang Objet lang
* \param conf Objet conf * \param conf Objet conf
* \return int Nb triggers déclenchés si pas d'erreurs, -Nb en erreur sinon. * \return int Nb triggers ayant agit si pas d'erreurs, -Nb en erreur sinon.
*/ */
function run_triggers($action,$object,$user,$lang,$conf) function run_triggers($action,$object,$user,$lang,$conf)
{ {
$handle=opendir($this->dir); $handle=opendir($this->dir);
$modules = array(); $modules = array();
$nbtotal = $nbok = $nbko = 0; $nbfile = $nbtotal = $nbok = $nbko = 0;
while (($file = readdir($handle))!==false) while (($file = readdir($handle))!==false)
{ {
if (is_readable($this->dir."/".$file) && eregi('interface_(.*).class.php$',$file,$reg)) if (is_readable($this->dir."/".$file) && eregi('^interface_([^_]+)_(.+)\.class\.php',$file,$reg))
{ {
$modName = "Interface".ucfirst($reg[1]); $nbfile++;
$modName = "Interface".ucfirst($reg[2]);
//print "file=$file"; print "modName=$modName"; exit; //print "file=$file"; print "modName=$modName"; exit;
if ($modName) if (in_array($modName,$modules))
{ {
if (in_array($modName,$modules)) $langs->load("errors");
dolibarr_syslog("Interface::run_triggers ".$langs->trans("ErrorDuplicateTrigger",$modName,"/htdocs/includes/triggers/"),LOG_ERR);
continue;
}
// Check if trigger file is disabled by name
if (eregi('NORUN$',$file))
{
continue;
}
// Check if trigger file is for a particular module
$qualified=true;
if (strtolower($reg[1]) != 'all')
{
$module=eregi_replace('^mod','',$reg[1]);
$constparam='MAIN_MODULE_'.strtoupper($module);
if (empty($conf->global->$constparam)) $qualified=false;
}
if (! $qualified)
{
dolibarr_syslog("Interfaces::run_triggers Triggers for file '".$file."' need module to be enabled",LOG_INFO);
continue;
}
include_once($this->dir."/".$file);
$objMod = new $modName($this->db);
if ($objMod)
{
$modules[$i] = $modName;
//dolibarr_syslog("Interfaces::run_triggers Launch triggers for file '".$file."'",LOG_INFO);
$result=$objMod->run_trigger($action,$object,$user,$lang,$conf);
if ($result > 0)
{ {
$langs->load("errors"); // Action OK
dolibarr_syslog($langs->trans("ErrorDuplicateTrigger",$modName,"/htdocs/includes/triggers/"),LOG_ERR); $nbtotal++;
$nbok++;
} }
else if ($result == 0)
{ {
include_once($this->dir."/".$file); // Aucune action faite
$objMod = new $modName($this->db); $nbtotal++;
if ($objMod)
{
$modules[$i] = $modName;
$result=$objMod->run_trigger($action,$object,$user,$lang,$conf);
if ($result > 0)
{
// Action OK
$nbtotal++;
$nbok++;
}
if ($result == 0)
{
// Aucune action faite
$nbtotal++;
}
if ($result < 0)
{
// Action KO
$nbtotal++;
$nbko++;
$this->errors[]=$objMod->error;
}
$i++;
}
} }
if ($result < 0)
{
// Action KO
$nbtotal++;
$nbko++;
$this->errors[]=$objMod->error;
}
$i++;
} }
} }
} }
if ($nbko) if ($nbko)
{ {
dolibarr_syslog("Interfaces::run_triggers Found: ".$nbtotal.", Done: ".$nbok.", Failed: ".$nbko); dolibarr_syslog("Interfaces::run_triggers Files found: ".$nbfile.", Files launched: ".$nbtotal.", Done: ".$nbok.", Failed: ".$nbko, LOG_ERR);
return -$nbko; return -$nbko;
} }
else else
{ {
//dolibarr_syslog("Interfaces::run_triggers Files found: ".$nbfile.", Files launched: ".$nbtotal.", Done: ".$nbok.", Failed: ".$nbko, LOG_DEBUG);
return $nbok; return $nbok;
} }
} }

View File

@ -48,6 +48,7 @@ MenuLimits=Limits and accuracy
NotConfigured=Not configured NotConfigured=Not configured
Setup=Setup Setup=Setup
Activation=Activation Activation=Activation
Active=Active
SetupShort=Setup SetupShort=Setup
OtherOptions=Other options OtherOptions=Other options
OtherSetup=Other setup OtherSetup=Other setup
@ -480,6 +481,10 @@ CompanyFundationDesc=Edit on this page all known information of the company or f
DisplayDesc=You can choose here all parameters related to the Dolibarr look and feel DisplayDesc=You can choose here all parameters related to the Dolibarr look and feel
TriggersAvailable=Triggers available TriggersAvailable=Triggers available
TriggersDesc=Triggers are files that, once copied into directory <b>htdocs/includes/triggers</b>, modify the behaviour of Dolibarr workflow. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...). TriggersDesc=Triggers are files that, once copied into directory <b>htdocs/includes/triggers</b>, modify the behaviour of Dolibarr workflow. They realised new actions, activated on Dolibarr events (new company creation, invoice validation, ...).
TriggerDisabledByName=Triggers in this file are disabled by <b>-NORUN</b> suffix in name.
TriggerDisabledAsModuleDisabled=Triggers in this file are disabled as module <b>%s</b> is disabled.
TriggerAlwaysActive=Triggers in this file are always active, whatever are the activated Dolibarr modules.
TriggerActiveAsModuleActive=Triggers in this file are active as module <b>%s</b> is enabled.
GeneratedPasswordDesc=Define here which rule you want to use to generate new password if you ask to have auto generated password GeneratedPasswordDesc=Define here which rule you want to use to generate new password if you ask to have auto generated password
DictionnaryDesc=Define here all reference datas. You can complete predefined value with yours DictionnaryDesc=Define here all reference datas. You can complete predefined value with yours
ConstDesc=All other parameters not available in previous pages ConstDesc=All other parameters not available in previous pages

View File

@ -1,5 +1,5 @@
# Dolibarr language file - en_US - errors # Dolibarr language file - en_US - errors
ErrorDuplicateTrigger=A trigger file named '<b>%s</b>' is already loaded. Remove duplicate trigger file in directory '<b>%s</b>'. ErrorDuplicateTrigger=A trigger file with class nam '<b>%s</b>' is present sevaral times. Remove duplicate trigger file in directory '<b>%s</b>'.
ErrorFailToDeleteFile=Failed to remove file '<b>%s</b>'. ErrorFailToDeleteFile=Failed to remove file '<b>%s</b>'.
ErrorThisContactIsAlreadyDefinedAsThisType=This contact is already defined as contact for this type. ErrorThisContactIsAlreadyDefinedAsThisType=This contact is already defined as contact for this type.
ErrorCashAccountAcceptsOnlyCashMoney=This bank account is a cash account, so it accepts payments of type cash only. ErrorCashAccountAcceptsOnlyCashMoney=This bank account is a cash account, so it accepts payments of type cash only.

View File

@ -48,6 +48,7 @@ MenuLimits=Limites et pr
NotConfigured=Non configuré NotConfigured=Non configuré
Setup=Configuration Setup=Configuration
Activation=Activation Activation=Activation
Active=Actif
SetupShort=Config SetupShort=Config
OtherOptions=Autres options OtherOptions=Autres options
OtherSetup=Divers OtherSetup=Divers
@ -479,6 +480,10 @@ CompanyFundationDesc=
DisplayDesc=Vous pouvez choisir ici tous les paramètres liés à l'apparence de Dolibarr DisplayDesc=Vous pouvez choisir ici tous les paramètres liés à l'apparence de Dolibarr
TriggersAvailable=Triggers disponibles TriggersAvailable=Triggers disponibles
TriggersDesc=Les triggers sont des fichiers qui, une fois déposés dans le répertoire <b>htdocs/includes/triggers</b>, modifient le comportement du workflow de Dolibarr. Ils réalisent des actions supplémentaires, déclenchées par les événements Dolibarr (création société, validation facture, clôture contrat...). TriggersDesc=Les triggers sont des fichiers qui, une fois déposés dans le répertoire <b>htdocs/includes/triggers</b>, modifient le comportement du workflow de Dolibarr. Ils réalisent des actions supplémentaires, déclenchées par les événements Dolibarr (création société, validation facture, clôture contrat...).
TriggerDisabledByName=Triggers de ce fichier désactivés par le suffix <b>-NORUN</b> dans le nom du fichier.
TriggerDisabledAsModuleDisabled=Triggers de ce fichier désactivés car le module <b>%s</b> n'est pas actif.
TriggerAlwaysActive=Triggers de ce fichier toujours actifs, quelque soient les modules Dolibarr activés.
TriggerActiveAsModuleActive=Triggers de ce fichier actifs car le module <b>%s</b> est actif.
GeneratedPasswordDesc=Definissez ici quelle règle vous voulez utilisez pour générer les mots de passe quand vous demander à fabriquer un nouveau mot de passe GeneratedPasswordDesc=Definissez ici quelle règle vous voulez utilisez pour générer les mots de passe quand vous demander à fabriquer un nouveau mot de passe
DictionnaryDesc=Definissez ici les données de référence. Vous pouvez compléter/modifier les données prédéfinies avec les votres DictionnaryDesc=Definissez ici les données de référence. Vous pouvez compléter/modifier les données prédéfinies avec les votres
ConstDesc=Tout autre parametre non editable dans les pages précédentes ConstDesc=Tout autre parametre non editable dans les pages précédentes

View File

@ -1,5 +1,5 @@
# Dolibarr language file - fr_FR - errors # Dolibarr language file - fr_FR - errors
ErrorDuplicateTrigger=Un fichier trigger du nom de '<b>%s</b>' est deja chargé. Supprimer le doublon du répertoire '<b>%s</b>'. ErrorDuplicateTrigger=Un fichier trigger de classe '<b>%s</b>' est present plusieurs fois. Supprimer le doublon du répertoire '<b>%s</b>'.
ErrorFailToDeleteFile=Echec de l'effacement du fichier '<b>%s</b>'. ErrorFailToDeleteFile=Echec de l'effacement du fichier '<b>%s</b>'.
ErrorThisContactIsAlreadyDefinedAsThisType=Ce contact est déjà défini comme contact pour ce type. ErrorThisContactIsAlreadyDefinedAsThisType=Ce contact est déjà défini comme contact pour ce type.
ErrorCashAccountAcceptsOnlyCashMoney=Ce compte bancaire est de type caisse et n'accepte que les mode de réglement de type <b>espèce</b>. ErrorCashAccountAcceptsOnlyCashMoney=Ce compte bancaire est de type caisse et n'accepte que les mode de réglement de type <b>espèce</b>.