Le code d'interfacage avec webcal est mis dans le trigger webcal.

This commit is contained in:
Laurent Destailleur 2005-09-09 21:18:12 +00:00
parent 5501665e65
commit 2b6438acef
5 changed files with 220 additions and 113 deletions

View File

@ -32,9 +32,6 @@ require_once("./pre.inc.php");
require_once(DOL_DOCUMENT_ROOT."/contact.class.php");
require_once("../../cactioncomm.class.php");
require_once("../../actioncomm.class.php");
if ($conf->webcal->enabled) {
require_once("../../lib/webcal.class.php");
}
$langs->load("companies");
$langs->load("commercial");
@ -96,88 +93,29 @@ if ($_POST["action"] == 'add_action')
}
}
$actioncomm->date = mktime($_POST["heurehour"],
$_POST["heuremin"],
0,
$_POST["acmonth"],
$_POST["acday"],
$_POST["acyear"]);
$_POST["heuremin"],
0,
$_POST["acmonth"],
$_POST["acday"],
$_POST["acyear"]);
$actioncomm->duree=(($_POST["dureehour"] * 60) + $_POST["dureemin"]) * 60;
$actioncomm->percent = isset($_POST["percentage"])?$_POST["percentage"]:0;
$actioncomm->user = $user;
if (isset($_POST["contactid"]))
{
$actioncomm->contact = $contact;
}
if (isset($_POST["socid"]))
{
$actioncomm->societe = $societe;
}
$actioncomm->note = $_POST["note"];
if (isset($_POST["contactid"])) $actioncomm->contact = $contact;
if (isset($_POST["socid"])) $actioncomm->societe = $societe;
if ($_POST["todo_webcal"] == 'on') $actioncomm->use_webcal=1;
// On definit la ressource webcal si le module webcal est actif
$webcal=0;
if ($conf->webcal->enabled && $_POST["todo_webcal"] == 'on')
{
// Si action complete ou si action de type rendez-vous
// if ($actioncomm->percent == 100 || $actioncomm->type_code == 'AC_RDV')
// {
// Crée objet webcal et connexion avec params $conf->webcal->db->xxx
$webcal = new Webcal();
if (! $webcal->localdb->ok)
{
// Si la creation de l'objet n'as pu se connecter
$error ="Dolibarr n'a pu se connecter à la base Webcalendar avec les identifiants définis (host=".$conf->webcal->db->host." dbname=".$conf->webcal->db->name." user=".$conf->webcal->db->user.").";
$error.=" L'option de mise a jour Webcalendar a été ignorée.";
$webcal->error=$error;
}
else
{
// Initialisation donnees webcal
if ($_POST["actionid"] == 5 && $contact->fullname)
{
$libellecal =$langs->trans("TaskRDVWith",$contact->fullname)."\n";
$libellecal.=$_POST["label"];
}
else
{
$libellecal="";
if ($langs->trans("Action".$actioncomm->type_code) != "Action".$actioncomm->type_code)
{
$libellecal.=$langs->trans("Action".$actioncomm->type_code)."\n";
}
$libellecal.=$_POST["label"];
}
$webcal->date=$actioncomm->date;
$webcal->duree=($_POST["dureehour"] * 60) + $_POST["dureemin"];
$webcal->texte=$societe->nom;
$webcal->desc=$libellecal;
}
// }
}
// On crée l'action (avec ajout eventuel dans webcal si défini)
$idaction=$actioncomm->add($user, ($webcal->localdb->ok?$webcal:0) );
// On crée l'action
$idaction=$actioncomm->add($user);
if ($idaction > 0)
{
if (! $actioncomm->error)
{
// Si pas d'erreur creation action
if (! $webcal->error)
{
// Pas d'erreur webcal
$db->commit();
Header("Location: ".$_POST["from"]);
return;
}
else
{
// Pas d'erreur action mais erreur webcal
$db->commit();
$_GET["id"]=$idaction;
}
$db->commit();
Header("Location: ".$_POST["from"]);
exit;
}
else
{
@ -195,7 +133,7 @@ if ($_POST["action"] == 'add_action')
}
else
{
print "Le type d'action n'a pas été choisi";
dolibarr_print_error('',"Le type d'action n'a pas été choisi");
}
}
@ -412,14 +350,14 @@ if ($_GET["action"] == 'create')
}
else if ($_GET["afaire"] == 2)
{
$html->select_date('','ac',1,1);
$html->select_date('','ac');
print '<tr><td>'.$langs->trans("Hour").'</td><td>';
print_heure_select("heure",8,20);
print '</td></tr>';
}
else
{
$html->select_date('','ac',1,1);
$html->select_date('','ac');
print '<tr><td>'.$langs->trans("Hour").'</td><td>';
print_heure_select("heure",8,20);
print '</td></tr>';
@ -594,7 +532,7 @@ function add_row_for_webcal_link()
$langs->load("other");
if (! $user->webcal_login)
{
print '<tr><td nowrap>'.$langs->trans("AddCalendarEntry").'</td>';
print '<tr><td width="25%" nowrap>'.$langs->trans("AddCalendarEntry").'</td>';
print '<td><input type="checkbox" disabled name="todo_webcal">';
print ' '.$langs->transnoentities("ErrorWebcalLoginNotDefined","<a href=\"".DOL_URL_ROOT."/user/fiche.php?id=".$user->id."\">".$user->login."</a>");
print '</td>';
@ -609,7 +547,7 @@ function add_row_for_webcal_link()
}
else
{
print '<tr><td width="10%">'.$langs->trans("AddCalendarEntry").'</td>';
print '<tr><td width="25%" nowrap>'.$langs->trans("AddCalendarEntry").'</td>';
print '<td><input type="checkbox" name="todo_webcal"'.(($conf->webcal->syncro=='always' || $conf->webcal->syncro=='yesbydefault')?' checked':'').'></td>';
print '</tr>';
$nbtr++;

View File

@ -0,0 +1,166 @@
<?php
/* Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id$
* $Source$
*
*/
/**
\file htdocs/includes/triggers/interface_webcal.class.php
\ingroup webcalendar
\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
*/
include_once(DOL_DOCUMENT_ROOT.'/lib/webcal.class.php');
/**
\class InterfaceWebCal
\brief Classe des fonctions triggers des actions personalisées du workflow
*/
class InterfaceWebCal
{
var $db;
var $error;
/**
* \brief Constructeur.
* \param DB handler d'accès base
*/
function InterfaceWebCal($DB)
{
$this->db = $DB ;
$this->name = "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->version = 'dolibarr'; // 'experimental' or 'dolibarr' or version
}
/**
* \brief Renvoi nom du lot de triggers
* \return string Nom du lot de triggers
*/
function getName()
{
return $this->name;
}
/**
* \brief Renvoi descriptif du lot de triggers
* \return string Descriptif du lot de triggers
*/
function getDesc()
{
return $this->description;
}
/**
* \brief Renvoi version du lot de triggers
* \return string Version du lot de triggers
*/
function getVersion()
{
global $langs;
$langs->load("admin");
if ($this->version == 'experimental') return $langs->trans("Experimental");
elseif ($this->version == 'dolibarr') return DOL_VERSION;
elseif ($this->version) return $this->version;
else return $langs->trans("Unknown");
}
/**
* \brief Fonction appelée lors du déclenchement d'un évènement Dolibarr.
* D'autres fonctions run_trigger peuvent etre présentes dans includes/triggers
* \param action Code de l'evenement
* \param object Objet concerné
* \param user Objet user
* \param lang Objet lang
* \param conf Objet conf
* \return int <0 si ko, >0 si ok
*/
function run_trigger($action,$object,$user,$langs,$conf)
{
// Mettre ici le code à exécuter en réaction de l'action
// Les données de l'action sont stockées dans $object
if (! $conf->webcal->enabled) return 0; // Module non actif
if (! $object->use_webcal) return 0; // Option syncro webcal non active
// Actions
if ($action == 'ACTION_CREATE')
{
dolibarr_syslog("Trigger '".$this->name."' for action '$action' launched. id=".$object->id);
// Crée objet webcal et connexion avec params $conf->webcal->db->xxx
$webcal = new Webcal();
if (! $webcal->localdb->ok)
{
// Si la creation de l'objet n'as pu se connecter
$error ="Dolibarr n'a pu se connecter à la base Webcalendar avec les identifiants définis (host=".$conf->webcal->db->host." dbname=".$conf->webcal->db->name." user=".$conf->webcal->db->user.").";
$error.=" L'option de mise a jour Webcalendar a été ignorée.";
$this->error=$error;
return -1;
}
// Initialisation donnees webcal
if ($object->type_id == 5 && $object->contact->fullname)
{
$libellecal =$langs->trans("TaskRDVWith",$object->contact->fullname)."\n";
$libellecal.=$object->note;
}
else
{
$libellecal="";
if ($langs->trans("Action".$object->type_code) != "Action".$object->type_code)
{
$libellecal.=$langs->trans("Action".$object->type_code)."\n";
}
$libellecal.=($object->label!=$libellecal?$object->label."\n":"");
$libellecal.=($object->note?$object->note:"");
}
$webcal->date=$object->date;
$webcal->duree=$object->duree;
$webcal->texte=$object->societe->nom;
$webcal->desc=$libellecal;
// Ajoute entrée dans webcal
$result=$webcal->add($user);
if ($result)
{
return 1;
}
else
{
$this->error="Echec insertion dans webcal: ".$webcal->error;
return -1;
}
}
}
}
?>

View File

@ -7,6 +7,7 @@ Customers=Customers
Prospect=Prospect
Prospects=Prospects
DeleteAction=Delete a task
NewAction=New action
AddAction=Add action
AddAnAction=Add an action
AddActionRendezVous=Add a Rendez-Vous task

View File

@ -7,6 +7,7 @@ Customers=Clients
Prospect=Prospect
Prospects=Prospects
DeleteAction=Effacer une action
NewAction=Nouvelle action
AddAction=Créer action
AddAnAction=Créer une action
AddActionRendezVous=Créer un Rendez-Vous

View File

@ -22,15 +22,13 @@
/**
\file htdocs/lib/webcal.class.php
\ingroup webcal
\ingroup webcalendar
\brief Ensemble des fonctions permettant d'acceder a la database webcalendar.
\author Rodolphe Quiedeville.
\author Laurent Destailleur.
\version $Revision$
*/
require_once (DOL_DOCUMENT_ROOT ."/lib/".$conf->webcal->db->type.".lib.php");
/**
\class Webcal
@ -42,9 +40,10 @@ class Webcal {
var $localdb;
var $date;
var $duree = 0;
var $duree = 0; // Secondes
var $texte;
var $desc;
var $error;
@ -56,6 +55,7 @@ class Webcal {
global $conf;
// On initie la connexion à la base Webcalendar
require_once (DOL_DOCUMENT_ROOT ."/lib/".$conf->webcal->db->type.".lib.php");
$this->localdb = new DoliDb(
$conf->webcal->db->type,
$conf->webcal->db->host,
@ -66,25 +66,24 @@ class Webcal {
/**
\brief Ajoute une entree dans le calendrier de l'utilisateur
\param[in] user le login de l'utilisateur
\param[in] date la date et l'heure de l'evenement dans le calendrier
\param[in] texte le titre a indiquer dans l'evenement
\param[in] desc la description a indiquer dans l'evenement
\brief Ajoute objet en tant qu'entree dans le calendrier de l'utilisateur
\param[in] user Le login de l'utilisateur
\return int 1 en cas de succès, -1,-2,-3 en cas d'erreur, -4 si login webcal non défini
*/
function add($user, $date, $texte, $desc)
function add($user)
{
global $langs;
dolibarr_syslog("Webcal::add user=$user date=$date texte=$texte desc=$desc");
dolibarr_syslog("Webcal::add user=$user");
// Test si login webcal défini pour le user
if (! $user->webcal_login) {
$this->error=$langs->trans("ErrorWebcalLoginNotDefined","<a href=\"/user/fiche.php?id=".$user->id."\">".$user->login."</a>");
return -4;
$this->error=$langs->trans("ErrorWebcalLoginNotDefined","<a href=\"".DOL_URL_ROOT."/user/fiche.php?id=".$user->id."\">".$user->login."</a>");
return -4;
}
$this->localdb->begin();
// Recupère l'id max+1 dans la base webcalendar
$id = $this->get_next_id();
@ -92,23 +91,20 @@ class Webcal {
{
$cal_id = $id;
$cal_create_by = $user->webcal_login;
$cal_date = strftime('%Y%m%d', $date);
$cal_time = strftime('%H%M%S', $date);
$cal_date = strftime('%Y%m%d', $this->date);
$cal_time = strftime('%H%M%S', $this->date);
$cal_mod_date = strftime('%Y%m%d', time());
$cal_mod_time = strftime('%H%M%S', time());
$cal_duration = $this->duree;
$cal_duration = round($this->duree / 60);
$cal_priority = 2;
$cal_type = "E";
$cal_access = "P";
$cal_name = $texte;
$cal_description = $desc;
$sql = "INSERT INTO webcal_entry (cal_id, cal_create_by,cal_date,cal_time,cal_mod_date,
cal_mod_time,cal_duration,cal_priority,cal_type, cal_access, cal_name,cal_description)";
$sql .= " VALUES ($cal_id, '$cal_create_by', '$cal_date', '$cal_time', '$cal_mod_date', '$cal_mod_time',
$cal_duration,$cal_priority,'$cal_type', '$cal_access', '$cal_name','$cal_description')";
$cal_name = $this->texte;
$cal_description = $this->desc;
$sql = "INSERT INTO webcal_entry (cal_id, cal_create_by,cal_date,cal_time,cal_mod_date, cal_mod_time,cal_duration,cal_priority,cal_type, cal_access, cal_name,cal_description)";
$sql.= " VALUES ($cal_id, '$cal_create_by', '$cal_date', '$cal_time', '$cal_mod_date', '$cal_mod_time', $cal_duration, $cal_priority, '$cal_type', '$cal_access', '$cal_name','$cal_description')";
if ($this->localdb->query($sql))
{
$sql = "INSERT INTO webcal_entry_user (cal_id, cal_login, cal_status)";
@ -117,22 +113,26 @@ class Webcal {
if ( $this->localdb->query($sql) )
{
// OK
$this->localdb->commit();
return 1;
}
else
{
$this->localdb->rollback();
$this->error = $this->localdb->error() . '<br>' .$sql;
return -1;
}
}
else
{
$this->localdb->rollback();
$this->error = $this->localdb->error() . '<br>' .$sql;
return -2;
}
}
else
{
$this->localdb->rollback();
$this->error = $this->localdb->error() . '<br>' .$sql;
return -3;
}
@ -141,20 +141,21 @@ class Webcal {
/**
\brief Obtient l'id suivant dans le webcalendar
\return int retourne l'id suivant dans le webcalendar ou -1 si erreur
\return int Retourne l'id suivant dans webcalendar, <0 si ko
*/
function get_next_id()
{
$sql = "SELECT max(cal_id) FROM webcal_entry";
$sql = "SELECT max(cal_id) as id FROM webcal_entry";
if ($this->localdb->query($sql))
$resql=$this->localdb->query($sql);
if ($resql)
{
$id = $this->localdb->result(0, 0) + 1;
return $id;
$obj=$this->localdb->fetch_object($resql);
return ($obj->id + 1);
}
else
{
print $this->localdb->error();
$this->error=$this->localdb->error();
return -1;
}
}