2004-10-20 23:06:45 +02:00
< ? php
2004-02-13 15:05:00 +01:00
/* Copyright ( C ) 2002 - 2004 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2011-09-22 01:41:42 +02:00
* Copyright ( C ) 2004 - 2011 Laurent Destailleur < eldy @ users . sourceforge . net >
2012-12-30 15:13:49 +01:00
* Copyright ( C ) 2005 - 2012 Regis Houssin < regis . houssin @ capnetworks . com >
2011-11-03 11:49:22 +01:00
* Copyright ( C ) 2011 Juanjo Menent < jmenent @ 2 byte . es >
2011-12-07 00:16:19 +01:00
*
2011-11-03 11:49:22 +01:00
* 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
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2011-11-03 11:49:22 +01:00
* ( at your option ) any later version .
2011-12-07 00:16:19 +01:00
*
2011-11-03 11:49:22 +01:00
* 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 .
2011-12-07 00:16:19 +01:00
*
2011-11-03 11:49:22 +01:00
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
2002-05-11 20:53:13 +02:00
2004-12-28 16:36:40 +01:00
/**
2010-06-05 17:32:18 +02:00
* \file htdocs / comm / action / class / actioncomm . class . php
2012-10-03 00:39:34 +02:00
* \ingroup agenda
2010-10-28 00:41:40 +02:00
* \brief File of class to manage agenda events ( actions )
2008-11-11 20:32:48 +01:00
*/
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/cactioncomm.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php' ;
2007-05-11 02:13:43 +02:00
2004-09-30 21:28:40 +02:00
2012-10-03 00:39:34 +02:00
/**
* Class to manage agenda events ( actions )
2008-11-11 20:32:48 +01:00
*/
2010-06-09 20:25:20 +02:00
class ActionComm extends CommonObject
2003-05-15 21:30:01 +02:00
{
2011-11-01 13:22:39 +01:00
public $element = 'action' ;
public $table_element = 'actioncomm' ;
public $table_rowid = 'id' ;
2013-04-26 16:07:35 +02:00
protected $ismultientitymanaged = 1 ; // 0=No test on entity, 1=Test with field entity, 2=Test with link by societe
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
var $id ;
2013-03-09 20:34:38 +01:00
2013-03-08 12:04:01 +01:00
var $type_id ; // id into parent table llx_c_actioncomm (will be deprecated into future, link should not be required)
2013-07-10 14:46:16 +02:00
var $type_code ; // code into parent table llx_c_actioncomm (will be deprecated into future, link should not be required). With defautl setup, should be AC_OTH_AUTO or AC_OTH
2013-03-08 12:04:01 +01:00
var $type ; // label into parent table llx_c_actioncomm (will be deprecated into future, link should not be required)
2013-07-10 14:46:16 +02:00
var $code ; // Free code to identify action. Ie: Agenda trigger add here AC_TRIGGERNAME ('AC_COMPANY_CREATE', 'AC_PROPAL_VALIDATE', ...)
2005-09-09 23:24:13 +02:00
var $label ;
2008-02-11 16:51:03 +01:00
2008-07-26 13:40:24 +02:00
var $datec ; // Date creation record (datec)
var $datem ; // Date modification record (tms)
2008-04-16 03:04:12 +02:00
var $author ; // Object user that create action
var $usermod ; // Object user that modified action
2008-02-11 16:51:03 +01:00
2008-07-26 13:40:24 +02:00
var $datep ; // Date action start (datep)
var $datef ; // Date action end (datep2)
2011-11-01 13:22:39 +01:00
var $durationp = - 1 ; // -1=Unkown duration
var $fulldayevent = 0 ; // 1=Event on full day
var $punctual = 1 ; // Milestone
var $percentage ; // Percentage
var $location ; // Location
2013-04-06 17:39:31 +02:00
var $transparency ; // Transparency (ical standard). Used to say if people assigned to event are busy or not by event. 0=available, 1=busy, 2=busy (refused events)
2014-02-06 16:57:45 +01:00
var $priority ; // Small int (0 By default)
2011-11-01 13:22:39 +01:00
var $note ; // Description
2009-05-04 22:39:17 +02:00
2008-04-16 03:04:12 +02:00
var $usertodo ; // Object user that must do action
var $userdone ; // Object user that did action
2009-05-04 22:39:17 +02:00
2008-07-26 13:40:24 +02:00
var $societe ; // Company linked to action (optionnal)
var $contact ; // Contact linked tot action (optionnal)
2010-01-05 00:33:23 +01:00
var $fk_project ; // Id of project (optionnal)
2009-05-04 22:39:17 +02:00
2011-06-06 13:37:59 +02:00
// Properties for links to other objects
var $fk_element ; // Id of record
var $elementtype ; // Type of record. This if property ->element of object linked to.
// Ical
2011-06-02 18:52:37 +02:00
var $icalname ;
var $icalcolor ;
2011-06-30 09:49:26 +02:00
2011-06-19 17:10:32 +02:00
var $actions = array ();
2010-09-12 22:27:40 +02:00
2009-05-04 22:39:17 +02:00
2005-09-09 23:24:13 +02:00
/**
2011-06-06 13:37:59 +02:00
* Constructor
2011-11-01 04:58:47 +01:00
*
* @ param DoliDB $db Database handler
2005-09-09 23:24:13 +02:00
*/
2012-07-30 17:17:33 +02:00
function __construct ( $db )
2003-05-15 21:30:01 +02:00
{
2005-09-09 23:24:13 +02:00
$this -> db = $db ;
2012-07-08 23:22:22 +02:00
2013-01-19 14:32:37 +01:00
$this -> author = new stdClass ();
$this -> usermod = new stdClass ();
$this -> usertodo = new stdClass ();
$this -> userdone = new stdClass ();
$this -> societe = new stdClass ();
$this -> contact = new stdClass ();
2003-08-03 14:49:38 +02:00
}
2004-10-30 00:31:33 +02:00
2005-09-09 23:24:13 +02:00
/**
2011-06-06 13:37:59 +02:00
* Add an action / event into database
2011-10-25 02:08:42 +02:00
*
2011-09-22 01:28:01 +02:00
* @ param User $user Object user making action
2011-11-01 13:22:39 +01:00
* @ param int $notrigger 1 = disable triggers , 0 = enable triggers
2011-09-22 01:28:01 +02:00
* @ return int Id of created event , < 0 if KO
2005-09-09 23:24:13 +02:00
*/
2008-04-10 01:07:13 +02:00
function add ( $user , $notrigger = 0 )
2003-05-15 21:31:07 +02:00
{
2013-01-25 19:12:54 +01:00
global $langs , $conf , $hookmanager ;
2013-03-09 20:34:38 +01:00
2011-11-01 13:22:39 +01:00
$error = 0 ;
$now = dol_now ();
2010-01-19 11:47:26 +01:00
2011-11-01 13:22:39 +01:00
// Clean parameters
$this -> label = dol_trunc ( trim ( $this -> label ), 128 );
$this -> location = dol_trunc ( trim ( $this -> location ), 128 );
$this -> note = dol_htmlcleanlastbr ( trim ( $this -> note ));
2010-11-18 23:17:44 +01:00
if ( empty ( $this -> percentage )) $this -> percentage = 0 ;
2014-02-06 16:57:45 +01:00
if ( empty ( $this -> priority ) || ! is_numeric ( $this -> priority )) $this -> priority = 0 ;
2012-12-13 17:33:53 +01:00
if ( empty ( $this -> fulldayevent )) $this -> fulldayevent = 0 ;
2010-11-18 23:17:44 +01:00
if ( empty ( $this -> punctual )) $this -> punctual = 0 ;
2013-04-06 17:39:31 +02:00
if ( empty ( $this -> transparency )) $this -> transparency = 0 ;
2008-03-02 19:47:42 +01:00
if ( $this -> percentage > 100 ) $this -> percentage = 100 ;
2013-06-24 16:41:31 +02:00
//if ($this->percentage == 100 && ! $this->dateend) $this->dateend = $this->date;
2012-09-02 22:12:56 +02:00
if ( ! empty ( $this -> datep ) && ! empty ( $this -> datef )) $this -> durationp = ( $this -> datef - $this -> datep );
2013-06-24 16:41:31 +02:00
//if (! empty($this->date) && ! empty($this->dateend)) $this->durationa=($this->dateend - $this->date);
2012-09-02 22:12:56 +02:00
if ( ! empty ( $this -> datep ) && ! empty ( $this -> datef ) && $this -> datep > $this -> datef ) $this -> datef = $this -> datep ;
2013-06-24 16:41:31 +02:00
//if (! empty($this->date) && ! empty($this->dateend) && $this->date > $this->dateend) $this->dateend=$this->date;
2012-09-02 22:12:56 +02:00
if ( ! isset ( $this -> fk_project ) || $this -> fk_project < 0 ) $this -> fk_project = 0 ;
2011-06-06 13:37:59 +02:00
if ( $this -> elementtype == 'facture' ) $this -> elementtype = 'invoice' ;
if ( $this -> elementtype == 'commande' ) $this -> elementtype = 'order' ;
if ( $this -> elementtype == 'contrat' ) $this -> elementtype = 'contract' ;
2008-03-02 19:47:42 +01:00
2011-11-01 13:22:39 +01:00
if ( ! $this -> type_id && $this -> type_code )
{
// Get id from code
$cactioncomm = new CActionComm ( $this -> db );
$result = $cactioncomm -> fetch ( $this -> type_code );
if ( $result > 0 )
{
$this -> type_id = $cactioncomm -> id ;
}
else if ( $result == 0 )
{
2011-12-07 00:16:19 +01:00
$this -> error = 'Failed to get record with code ' . $this -> type_code . ' from dictionnary "type of events"' ;
2011-11-01 13:22:39 +01:00
return - 1 ;
}
else
{
$this -> error = $cactioncomm -> error ;
return - 1 ;
}
}
// Check parameters
if ( ! $this -> type_id )
{
$this -> error = " ErrorWrongParameters " ;
return - 1 ;
}
$this -> db -> begin ();
2008-02-29 17:26:38 +01:00
2005-06-25 15:02:39 +02:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " actioncomm " ;
2006-02-25 01:38:31 +01:00
$sql .= " (datec, " ;
2008-02-29 17:26:38 +01:00
$sql .= " datep, " ;
$sql .= " datep2, " ;
$sql .= " durationp, " ;
2008-11-11 20:32:48 +01:00
$sql .= " fk_action, " ;
2013-03-08 12:04:01 +01:00
$sql .= " code, " ;
2008-11-11 20:32:48 +01:00
$sql .= " fk_soc, " ;
2010-01-05 00:33:23 +01:00
$sql .= " fk_project, " ;
2008-11-11 20:32:48 +01:00
$sql .= " note, " ;
2011-11-01 13:22:39 +01:00
$sql .= " fk_contact, " ;
$sql .= " fk_user_author, " ;
$sql .= " fk_user_action, " ;
$sql .= " fk_user_done, " ;
$sql .= " label,percent,priority,fulldayevent,location,punctual, " ;
2013-04-06 17:39:31 +02:00
$sql .= " transparency, " ;
2011-06-04 15:12:44 +02:00
$sql .= " fk_element, " ;
$sql .= " elementtype, " ;
2011-04-06 15:11:03 +02:00
$sql .= " entity " ;
$sql .= " ) VALUES ( " ;
2008-02-29 17:26:38 +01:00
$sql .= " ' " . $this -> db -> idate ( $now ) . " ', " ;
2008-07-29 06:49:36 +02:00
$sql .= ( strval ( $this -> datep ) != '' ? " ' " . $this -> db -> idate ( $this -> datep ) . " ' " : " null " ) . " , " ;
$sql .= ( strval ( $this -> datef ) != '' ? " ' " . $this -> db -> idate ( $this -> datef ) . " ' " : " null " ) . " , " ;
2012-09-02 22:12:56 +02:00
$sql .= ( isset ( $this -> durationp ) && $this -> durationp >= 0 && $this -> durationp != '' ? " ' " . $this -> durationp . " ' " : " null " ) . " , " ;
2013-05-19 18:47:14 +02:00
$sql .= ( isset ( $this -> type_id ) ? $this -> type_id : " null " ) . " , " ;
$sql .= ( isset ( $this -> code ) ? " ' " . $this -> code . " ' " : " null " ) . " , " ;
2012-09-02 22:12:56 +02:00
$sql .= ( isset ( $this -> societe -> id ) && $this -> societe -> id > 0 ? " ' " . $this -> societe -> id . " ' " : " null " ) . " , " ;
$sql .= ( isset ( $this -> fk_project ) && $this -> fk_project > 0 ? " ' " . $this -> fk_project . " ' " : " null " ) . " , " ;
2011-02-24 19:11:12 +01:00
$sql .= " ' " . $this -> db -> escape ( $this -> note ) . " ', " ;
2012-09-02 22:12:56 +02:00
$sql .= ( isset ( $this -> contact -> id ) && $this -> contact -> id > 0 ? " ' " . $this -> contact -> id . " ' " : " null " ) . " , " ;
$sql .= ( isset ( $user -> id ) && $user -> id > 0 ? " ' " . $user -> id . " ' " : " null " ) . " , " ;
$sql .= ( isset ( $this -> usertodo -> id ) && $this -> usertodo -> id > 0 ? " ' " . $this -> usertodo -> id . " ' " : " null " ) . " , " ;
$sql .= ( isset ( $this -> userdone -> id ) && $this -> userdone -> id > 0 ? " ' " . $this -> userdone -> id . " ' " : " null " ) . " , " ;
2011-11-01 13:22:39 +01:00
$sql .= " ' " . $this -> db -> escape ( $this -> label ) . " ',' " . $this -> percentage . " ',' " . $this -> priority . " ',' " . $this -> fulldayevent . " ',' " . $this -> db -> escape ( $this -> location ) . " ',' " . $this -> punctual . " ', " ;
2013-04-06 17:39:31 +02:00
$sql .= " ' " . $this -> transparency . " ', " ;
2012-09-02 22:12:56 +02:00
$sql .= ( ! empty ( $this -> fk_element ) ? $this -> fk_element : " null " ) . " , " ;
$sql .= ( ! empty ( $this -> elementtype ) ? " ' " . $this -> elementtype . " ' " : " null " ) . " , " ;
2011-04-06 15:11:03 +02:00
$sql .= $conf -> entity ;
2007-04-01 04:59:44 +02:00
$sql .= " ) " ;
2009-05-04 22:39:17 +02:00
2011-09-22 01:41:42 +02:00
dol_syslog ( get_class ( $this ) . " ::add sql= " . $sql );
2007-04-01 04:59:44 +02:00
$resql = $this -> db -> query ( $sql );
2011-11-01 13:22:39 +01:00
if ( $resql )
2005-06-25 15:02:39 +02:00
{
2009-10-28 18:37:40 +01:00
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . " actioncomm " , " id " );
2009-05-04 22:39:17 +02:00
2012-12-08 12:49:20 +01:00
// Actions on extra fields (by external module or standard code)
$hookmanager -> initHooks ( array ( 'actioncommdao' ));
$parameters = array ( 'actcomm' => $this -> id );
$reshook = $hookmanager -> executeHooks ( 'insertExtraFields' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( empty ( $reshook ))
{
if ( empty ( $conf -> global -> MAIN_EXTRAFIELDS_DISABLED )) // For avoid conflicts if trigger used
{
$result = $this -> insertExtraFields ();
if ( $result < 0 )
{
$error ++ ;
}
}
}
else if ( $reshook < 0 ) $error ++ ;
2012-12-10 19:06:59 +01:00
2012-12-30 13:49:37 +01:00
if ( ! $error && ! $notrigger )
2007-07-25 19:46:47 +02:00
{
2011-11-01 13:22:39 +01:00
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-11-01 13:22:39 +01:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ACTION_CREATE' , $this , $user , $langs , $conf );
if ( $result < 0 ) {
$error ++ ; $this -> errors = $interface -> errors ;
}
// Fin appel triggers
}
2012-12-30 13:49:37 +01:00
if ( ! $error )
{
$this -> db -> commit ();
return $this -> id ;
}
else
{
2013-01-10 08:27:12 +01:00
$this -> db -> rollback ();
return - 1 ;
2012-12-30 13:49:37 +01:00
}
2004-10-30 14:17:49 +02:00
}
2005-06-25 15:02:39 +02:00
else
{
2011-11-01 13:22:39 +01:00
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
dol_syslog ( get_class ( $this ) . " ::add " . $this -> error , LOG_ERR );
2005-06-25 15:02:39 +02:00
return - 1 ;
}
2009-05-04 22:39:17 +02:00
2002-05-11 20:53:13 +02:00
}
2004-10-30 00:31:33 +02:00
2011-11-01 13:22:39 +01:00
/**
* Load object from database
*
2011-11-01 15:05:42 +01:00
* @ param int $id Id of action to get
2011-11-01 13:22:39 +01:00
* @ return int < 0 if KO , > 0 if OK
*/
function fetch ( $id )
{
global $langs ;
$sql = " SELECT a.id, " ;
2011-11-01 15:05:42 +01:00
$sql .= " a.id as ref, " ;
$sql .= " a.ref_ext, " ;
2011-11-01 13:22:39 +01:00
$sql .= " a.datep, " ;
$sql .= " a.datep2, " ;
$sql .= " a.datec, " ;
2009-07-02 01:56:47 +02:00
$sql .= " a.durationp, " ;
2011-11-01 13:22:39 +01:00
$sql .= " a.tms as datem, " ;
2013-03-08 12:04:01 +01:00
$sql .= " a.code, a.label, a.note, " ;
2011-11-01 13:22:39 +01:00
$sql .= " a.fk_soc, " ;
$sql .= " a.fk_project, " ;
$sql .= " a.fk_user_author, a.fk_user_mod, " ;
$sql .= " a.fk_user_action, a.fk_user_done, " ;
$sql .= " a.fk_contact, a.percent as percentage, " ;
$sql .= " a.fk_element, a.elementtype, " ;
2013-04-06 17:39:31 +02:00
$sql .= " a.priority, a.fulldayevent, a.location, a.transparency, " ;
2011-11-01 13:22:39 +01:00
$sql .= " c.id as type_id, c.code as type_code, c.libelle, " ;
$sql .= " s.nom as socname, " ;
2013-02-23 12:30:01 +01:00
$sql .= " u.firstname, u.lastname as lastname " ;
2011-11-01 13:22:39 +01:00
$sql .= " FROM ( " . MAIN_DB_PREFIX . " c_actioncomm as c, " . MAIN_DB_PREFIX . " actioncomm as a) " ;
2009-07-02 01:56:47 +02:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " user as u on u.rowid = a.fk_user_author " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe as s on s.rowid = a.fk_soc " ;
2011-11-01 13:22:39 +01:00
$sql .= " WHERE a.id= " . $id . " AND a.fk_action=c.id " ;
dol_syslog ( get_class ( $this ) . " ::fetch sql= " . $sql );
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
if ( $this -> db -> num_rows ( $resql ))
{
$obj = $this -> db -> fetch_object ( $resql );
$this -> id = $obj -> id ;
$this -> ref = $obj -> ref ;
$this -> ref_ext = $obj -> ref_ext ;
2013-03-08 12:04:01 +01:00
// Properties of parent table llx_c_actioncomm (will be deprecated in future)
2011-11-01 13:22:39 +01:00
$this -> type_id = $obj -> type_id ;
$this -> type_code = $obj -> type_code ;
$transcode = $langs -> trans ( " Action " . $obj -> type_code );
$type_libelle = ( $transcode != " Action " . $obj -> type_code ? $transcode : $obj -> libelle );
$this -> type = $type_libelle ;
2013-03-09 20:34:38 +01:00
2013-03-08 12:04:01 +01:00
$this -> code = $obj -> code ;
2011-11-01 13:22:39 +01:00
$this -> label = $obj -> label ;
$this -> datep = $this -> db -> jdate ( $obj -> datep );
$this -> datef = $this -> db -> jdate ( $obj -> datep2 );
$this -> datec = $this -> db -> jdate ( $obj -> datec );
$this -> datem = $this -> db -> jdate ( $obj -> datem );
$this -> note = $obj -> note ;
$this -> percentage = $obj -> percentage ;
$this -> author -> id = $obj -> fk_user_author ;
$this -> author -> firstname = $obj -> firstname ;
$this -> author -> lastname = $obj -> lastname ;
$this -> usermod -> id = $obj -> fk_user_mod ;
$this -> usertodo -> id = $obj -> fk_user_action ;
$this -> userdone -> id = $obj -> fk_user_done ;
$this -> priority = $obj -> priority ;
2011-06-19 17:10:32 +02:00
$this -> fulldayevent = $obj -> fulldayevent ;
2011-11-01 13:22:39 +01:00
$this -> location = $obj -> location ;
2013-06-05 16:24:32 +02:00
$this -> transparency = $obj -> transparency ;
2011-11-01 13:22:39 +01:00
$this -> socid = $obj -> fk_soc ; // To have fetch_thirdparty method working
$this -> societe -> id = $obj -> fk_soc ;
$this -> contact -> id = $obj -> fk_contact ;
$this -> fk_project = $obj -> fk_project ;
$this -> fk_element = $obj -> fk_element ;
$this -> elementtype = $obj -> elementtype ;
}
$this -> db -> free ( $resql );
return 1 ;
}
else
{
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
}
/**
* Delete event from database
*
* @ param int $notrigger 1 = disable triggers , 0 = enable triggers
* @ return int < 0 if KO , > 0 if OK
*/
function delete ( $notrigger = 0 )
2009-05-04 22:39:17 +02:00
{
2011-11-01 13:22:39 +01:00
global $user , $langs , $conf ;
$error = 0 ;
$this -> db -> begin ();
2006-10-22 04:52:57 +02:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " actioncomm " ;
$sql .= " WHERE id= " . $this -> id ;
2011-09-22 01:41:42 +02:00
dol_syslog ( get_class ( $this ) . " ::delete sql= " . $sql , LOG_DEBUG );
2012-12-08 12:49:20 +01:00
$res = $this -> db -> query ( $sql );
if ( $res < 0 ) {
$this -> error = $this -> db -> lasterror ();
$error ++ ;
}
2012-12-10 19:06:59 +01:00
2012-12-08 12:49:20 +01:00
// Removed extrafields
if ( ! $error ) {
2012-12-10 19:06:59 +01:00
$result = $this -> deleteExtraFields ();
if ( $result < 0 )
{
$error ++ ;
dol_syslog ( get_class ( $this ) . " ::delete error -3 " . $this -> error , LOG_ERR );
}
2012-12-08 12:49:20 +01:00
}
2012-12-10 19:06:59 +01:00
2012-12-08 12:49:20 +01:00
if ( ! $error )
2004-10-30 00:31:33 +02:00
{
2011-11-01 13:22:39 +01:00
if ( ! $notrigger )
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-11-01 13:22:39 +01:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ACTION_DELETE' , $this , $user , $langs , $conf );
if ( $result < 0 ) {
$error ++ ; $this -> errors = $interface -> errors ;
}
// Fin appel triggers
}
if ( ! $error )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
return - 2 ;
}
2004-10-30 00:31:33 +02:00
}
2006-10-22 04:52:57 +02:00
else
{
2011-11-01 13:22:39 +01:00
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
dol_syslog ( get_class ( $this ) . " ::delete " . $this -> error , LOG_ERR );
return - 1 ;
2006-10-22 04:52:57 +02:00
}
2002-05-11 20:53:13 +02:00
}
2004-10-30 00:31:33 +02:00
2011-11-01 13:22:39 +01:00
/**
* Update action into database
* If percentage = 100 , on met a jour date 100 %
*
* @ param User $user Object user making change
* @ param int $notrigger 1 = disable triggers , 0 = enable triggers
* @ return int < 0 if KO , > 0 if OK
*/
function update ( $user , $notrigger = 0 )
2003-08-03 18:53:46 +02:00
{
2013-01-25 19:12:54 +01:00
global $langs , $conf , $hookmanager ;
2011-11-01 13:22:39 +01:00
$error = 0 ;
2008-02-26 19:34:53 +01:00
// Clean parameters
2011-11-01 13:22:39 +01:00
$this -> label = trim ( $this -> label );
2006-05-13 16:28:31 +02:00
$this -> note = trim ( $this -> note );
2011-11-01 13:22:39 +01:00
if ( empty ( $this -> percentage )) $this -> percentage = 0 ;
2014-02-06 16:57:45 +01:00
if ( empty ( $this -> priority ) || ! is_numeric ( $this -> priority )) $this -> priority = 0 ;
2013-04-06 17:39:31 +02:00
if ( empty ( $this -> transparency )) $this -> transparency = 0 ;
2010-11-18 23:17:44 +01:00
if ( empty ( $this -> fulldayevent )) $this -> fulldayevent = 0 ;
2007-09-02 12:20:07 +02:00
if ( $this -> percentage > 100 ) $this -> percentage = 100 ;
2013-06-24 16:41:31 +02:00
//if ($this->percentage == 100 && ! $this->dateend) $this->dateend = $this->date;
2011-11-01 13:22:39 +01:00
if ( $this -> datep && $this -> datef ) $this -> durationp = ( $this -> datef - $this -> datep );
2013-06-24 16:41:31 +02:00
//if ($this->date && $this->dateend) $this->durationa=($this->dateend - $this->date);
2011-11-01 13:22:39 +01:00
if ( $this -> datep && $this -> datef && $this -> datep > $this -> datef ) $this -> datef = $this -> datep ;
2013-06-24 16:41:31 +02:00
//if ($this->date && $this->dateend && $this->date > $this->dateend) $this->dateend=$this->date;
2010-01-05 00:33:23 +01:00
if ( $this -> fk_project < 0 ) $this -> fk_project = 0 ;
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
// Check parameters
if ( $this -> percentage == 0 && $this -> userdone -> id > 0 )
{
$this -> error = " ErrorCantSaveADoneUserWithZeroPercentage " ;
return - 1 ;
}
$this -> db -> begin ();
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " actioncomm " ;
2013-02-27 19:43:40 +01:00
$sql .= " SET percent = ' " . $this -> percentage . " ' " ;
if ( $this -> fk_action > 0 ) $sql .= " , fk_action = ' " . $this -> fk_action . " ' " ;
2011-02-24 19:11:12 +01:00
$sql .= " , label = " . ( $this -> label ? " ' " . $this -> db -> escape ( $this -> label ) . " ' " : " null " );
2008-07-28 23:20:23 +02:00
$sql .= " , datep = " . ( strval ( $this -> datep ) != '' ? " ' " . $this -> db -> idate ( $this -> datep ) . " ' " : 'null' );
$sql .= " , datep2 = " . ( strval ( $this -> datef ) != '' ? " ' " . $this -> db -> idate ( $this -> datef ) . " ' " : 'null' );
2011-02-24 19:11:12 +01:00
$sql .= " , note = " . ( $this -> note ? " ' " . $this -> db -> escape ( $this -> note ) . " ' " : " null " );
2008-04-16 03:04:12 +02:00
$sql .= " , fk_soc = " . ( $this -> societe -> id > 0 ? " ' " . $this -> societe -> id . " ' " : " null " );
2010-01-05 00:33:23 +01:00
$sql .= " , fk_project = " . ( $this -> fk_project > 0 ? " ' " . $this -> fk_project . " ' " : " null " );
2008-02-28 18:15:48 +01:00
$sql .= " , fk_contact = " . ( $this -> contact -> id > 0 ? " ' " . $this -> contact -> id . " ' " : " null " );
2008-02-11 16:51:03 +01:00
$sql .= " , priority = ' " . $this -> priority . " ' " ;
2010-11-18 23:17:44 +01:00
$sql .= " , fulldayevent = ' " . $this -> fulldayevent . " ' " ;
2011-02-24 19:11:12 +01:00
$sql .= " , location = " . ( $this -> location ? " ' " . $this -> db -> escape ( $this -> location ) . " ' " : " null " );
2013-06-05 16:24:32 +02:00
$sql .= " , transparency = ' " . $this -> transparency . " ' " ;
2008-02-11 16:51:03 +01:00
$sql .= " , fk_user_mod = ' " . $user -> id . " ' " ;
2011-11-01 13:22:39 +01:00
$sql .= " , fk_user_action= " . ( $this -> usertodo -> id > 0 ? " ' " . $this -> usertodo -> id . " ' " : " null " );
$sql .= " , fk_user_done= " . ( $this -> userdone -> id > 0 ? " ' " . $this -> userdone -> id . " ' " : " null " );
2006-05-23 23:15:33 +02:00
$sql .= " WHERE id= " . $this -> id ;
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
dol_syslog ( get_class ( $this ) . " ::update sql= " . $sql );
2006-02-25 01:38:31 +01:00
if ( $this -> db -> query ( $sql ))
2005-07-10 04:05:09 +02:00
{
2012-12-10 19:06:59 +01:00
2012-12-08 12:49:20 +01:00
// Actions on extra fields (by external module or standard code)
$hookmanager -> initHooks ( array ( 'actioncommdao' ));
$parameters = array ( 'actcomm' => $this -> id );
$reshook = $hookmanager -> executeHooks ( 'insertExtraFields' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( empty ( $reshook ))
{
if ( empty ( $conf -> global -> MAIN_EXTRAFIELDS_DISABLED )) // For avoid conflicts if trigger used
{
$result = $this -> insertExtraFields ();
if ( $result < 0 )
{
$error ++ ;
}
}
}
else if ( $reshook < 0 ) $error ++ ;
2012-12-10 19:06:59 +01:00
2011-11-01 13:22:39 +01:00
if ( ! $notrigger )
{
// Appel des triggers
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
2011-11-01 13:22:39 +01:00
$interface = new Interfaces ( $this -> db );
$result = $interface -> run_triggers ( 'ACTION_MODIFY' , $this , $user , $langs , $conf );
if ( $result < 0 ) {
$error ++ ; $this -> errors = $interface -> errors ;
}
// Fin appel triggers
}
if ( ! $error )
{
$this -> db -> commit ();
return 1 ;
}
else
{
$this -> db -> rollback ();
dol_syslog ( get_class ( $this ) . " ::update " . join ( ',' , $this -> errors ), LOG_ERR );
return - 2 ;
}
2005-07-10 04:05:09 +02:00
}
2006-02-25 01:38:31 +01:00
else
{
2011-11-01 13:22:39 +01:00
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
dol_syslog ( get_class ( $this ) . " ::update " . $this -> error , LOG_ERR );
return - 1 ;
}
2003-08-03 18:53:46 +02:00
}
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
/**
2012-01-08 00:15:36 +01:00
* Load all objects with filters
*
2012-12-19 20:59:08 +01:00
* @ param DoliDb $db Database handler
2012-01-08 00:52:07 +01:00
* @ param int $socid Filter by thirdparty
* @ param int $fk_element Id of element action is linked to
* @ param string $elementtype Type of element action is linked to
* @ param string $filter Other filter
2013-01-07 23:20:00 +01:00
* @ return array or string Error string if KO , array with actions if OK
2011-11-01 13:22:39 +01:00
*/
2012-12-01 15:45:05 +01:00
static function getActions ( $db , $socid = 0 , $fk_element = 0 , $elementtype = '' , $filter = '' )
2011-11-01 13:22:39 +01:00
{
global $conf , $langs ;
2012-12-01 15:45:05 +01:00
$resarray = array ();
2011-11-01 13:22:39 +01:00
$sql = " SELECT a.id " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " actioncomm as a " ;
$sql .= " WHERE a.entity = " . $conf -> entity ;
if ( ! empty ( $socid )) $sql .= " AND a.fk_soc = " . $socid ;
if ( ! empty ( $elementtype ))
{
if ( $elementtype == 'project' ) $sql .= ' AND a.fk_project = ' . $fk_element ;
else $sql .= " AND a.fk_element = " . $fk_element . " AND a.elementtype = ' " . $elementtype . " ' " ;
}
if ( ! empty ( $filter )) $sql .= $filter ;
2012-12-18 15:00:35 +01:00
dol_syslog ( get_class () . " ::getActions sql= " . $sql );
2012-12-01 15:45:05 +01:00
$resql = $db -> query ( $sql );
2011-11-01 13:22:39 +01:00
if ( $resql )
{
2012-12-01 15:45:05 +01:00
$num = $db -> num_rows ( $resql );
2011-11-01 13:22:39 +01:00
if ( $num )
{
for ( $i = 0 ; $i < $num ; $i ++ )
2011-06-19 17:10:32 +02:00
{
2012-12-01 15:45:05 +01:00
$obj = $db -> fetch_object ( $resql );
$actioncommstatic = new ActionComm ( $db );
2011-11-01 13:22:39 +01:00
$actioncommstatic -> fetch ( $obj -> id );
2012-12-01 15:45:05 +01:00
$resarray [ $i ] = $actioncommstatic ;
2011-06-19 17:10:32 +02:00
}
2011-11-01 13:22:39 +01:00
}
2012-12-01 15:45:05 +01:00
$db -> free ( $resql );
return $resarray ;
2011-11-01 13:22:39 +01:00
}
else
2013-01-07 23:20:00 +01:00
{
return $db -> lasterror ();
2011-11-01 13:22:39 +01:00
}
}
2009-05-04 22:39:17 +02:00
2005-07-15 00:29:49 +02:00
/**
2010-11-13 18:37:22 +01:00
* Load indicators for dashboard ( this -> nbtodo and this -> nbtodolate )
2012-01-08 00:15:36 +01:00
*
* @ param User $user Objet user
* @ return int < 0 if KO , > 0 if OK
2005-07-15 00:29:49 +02:00
*/
2005-08-30 23:07:53 +02:00
function load_board ( $user )
2005-07-15 00:29:49 +02:00
{
2006-03-31 18:26:48 +02:00
global $conf , $user ;
2009-05-04 22:39:17 +02:00
2011-01-26 23:32:11 +01:00
$now = dol_now ();
2009-01-07 16:21:16 +01:00
2005-07-15 00:29:49 +02:00
$this -> nbtodo = $this -> nbtodolate = 0 ;
2012-12-30 13:49:37 +01:00
2013-01-10 08:27:12 +01:00
$sql = " SELECT a.id, a.datep as dp " ;
$sql .= " FROM ( " . MAIN_DB_PREFIX . " actioncomm as a " ;
$sql .= " ) " ;
if ( ! $user -> rights -> societe -> client -> voir && ! $user -> societe_id ) $sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe_commerciaux as sc ON a.fk_soc = sc.fk_soc " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe as s ON a.fk_soc = s.rowid " ;
$sql .= " WHERE a.percent >= 0 AND a.percent < 100 " ;
$sql .= " AND a.entity = " . $conf -> entity ;
if ( ! $user -> rights -> societe -> client -> voir && ! $user -> societe_id ) $sql .= " AND (a.fk_soc IS NULL OR sc.fk_user = " . $user -> id . " ) " ;
if ( $user -> societe_id ) $sql .= " AND a.fk_soc = " . $user -> societe_id ;
if ( ! $user -> rights -> agenda -> allactions -> read ) $sql .= " AND (a.fk_user_author = " . $user -> id . " OR a.fk_user_action = " . $user -> id . " OR a.fk_user_done = " . $user -> id . " ) " ;
2009-05-04 22:39:17 +02:00
2005-07-15 00:29:49 +02:00
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
2013-11-07 20:51:30 +01:00
// This assignment in condition is not a bug. It allows walking the results.
2005-07-15 00:29:49 +02:00
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$this -> nbtodo ++ ;
2009-01-07 16:21:16 +01:00
if ( isset ( $obj -> dp ) && $this -> db -> jdate ( $obj -> dp ) < ( $now - $conf -> actions -> warning_delay )) $this -> nbtodolate ++ ;
2005-07-15 00:29:49 +02:00
}
return 1 ;
}
2009-05-04 22:39:17 +02:00
else
2005-07-15 00:29:49 +02:00
{
$this -> error = $this -> db -> error ();
return - 1 ;
}
}
2006-03-19 00:20:21 +01:00
2011-11-01 13:22:39 +01:00
/**
* Charge les informations d 'ordre info dans l' objet facture
*
* @ param int $id Id de la facture a charger
* @ return void
*/
function info ( $id )
{
$sql = 'SELECT ' ;
$sql .= ' a.id,' ;
$sql .= ' datec,' ;
$sql .= ' tms as datem,' ;
$sql .= ' fk_user_author,' ;
$sql .= ' fk_user_mod' ;
$sql .= ' FROM ' . MAIN_DB_PREFIX . 'actioncomm as a' ;
$sql .= ' WHERE a.id = ' . $id ;
dol_syslog ( get_class ( $this ) . " ::info sql= " . $sql );
$result = $this -> db -> query ( $sql );
if ( $result )
{
if ( $this -> db -> num_rows ( $result ))
{
$obj = $this -> db -> fetch_object ( $result );
$this -> id = $obj -> id ;
if ( $obj -> fk_user_author )
{
$cuser = new User ( $this -> db );
$cuser -> fetch ( $obj -> fk_user_author );
$this -> user_creation = $cuser ;
}
if ( $obj -> fk_user_mod )
{
$muser = new User ( $this -> db );
$muser -> fetch ( $obj -> fk_user_mod );
$this -> user_modification = $muser ;
}
$this -> date_creation = $this -> db -> jdate ( $obj -> datec );
$this -> date_modification = $this -> db -> jdate ( $obj -> datem );
}
$this -> db -> free ( $result );
}
else
{
dol_print_error ( $this -> db );
}
}
/**
* Return label of status
*
2012-01-08 00:15:36 +01:00
* @ param int $mode 0 = libelle long , 1 = libelle court , 2 = Picto + Libelle court , 3 = Picto , 4 = Picto + Libelle long , 5 = Libelle court + Picto
* @ param int $hidenastatus 1 = Show nothing if status is " Not applicable "
* @ return string String with status
2011-11-01 13:22:39 +01:00
*/
function getLibStatut ( $mode , $hidenastatus = 0 )
{
return $this -> LibStatut ( $this -> percentage , $mode , $hidenastatus );
}
/**
* Return label of action status
*
2012-01-08 00:15:36 +01:00
* @ param int $percent Percent
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Short label , 5 = Short label + Picto , 6 = Very short label + Picto
* @ param int $hidenastatus 1 = Show nothing if status is " Not applicable "
* @ return string Label
2011-11-01 13:22:39 +01:00
*/
function LibStatut ( $percent , $mode , $hidenastatus = 0 )
{
global $langs ;
2009-05-04 22:39:17 +02:00
2006-05-20 14:16:18 +02:00
if ( $mode == 0 )
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return $langs -> trans ( 'StatusNotApplicable' );
else if ( $percent == 0 ) return $langs -> trans ( 'StatusActionToDo' ) . ' (0%)' ;
else if ( $percent > 0 && $percent < 100 ) return $langs -> trans ( 'StatusActionInProcess' ) . ' (' . $percent . '%)' ;
else if ( $percent >= 100 ) return $langs -> trans ( 'StatusActionDone' ) . ' (100%)' ;
2011-11-01 13:22:39 +01:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 1 )
2006-05-20 14:16:18 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return $langs -> trans ( 'StatusNotApplicable' );
else if ( $percent == 0 ) return $langs -> trans ( 'StatusActionToDo' );
else if ( $percent > 0 && $percent < 100 ) return $percent . '%' ;
else if ( $percent >= 100 ) return $langs -> trans ( 'StatusActionDone' );
2006-05-20 14:16:18 +02:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 2 )
2006-05-20 14:16:18 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return img_picto ( $langs -> trans ( 'StatusNotApplicable' ), 'statut9' ) . ' ' . $langs -> trans ( 'StatusNotApplicable' );
else if ( $percent == 0 ) return img_picto ( $langs -> trans ( 'StatusActionToDo' ), 'statut1' ) . ' ' . $langs -> trans ( 'StatusActionToDo' );
else if ( $percent > 0 && $percent < 100 ) return img_picto ( $langs -> trans ( 'StatusActionInProcess' ), 'statut3' ) . ' ' . $percent . '%' ;
else if ( $percent >= 100 ) return img_picto ( $langs -> trans ( 'StatusActionDone' ), 'statut6' ) . ' ' . $langs -> trans ( 'StatusActionDone' );
2006-05-20 14:16:18 +02:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 3 )
2006-05-20 14:16:18 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return img_picto ( $langs -> trans ( " Status " ) . ': ' . $langs -> trans ( 'StatusNotApplicable' ), 'statut9' );
else if ( $percent == 0 ) return img_picto ( $langs -> trans ( " Status " ) . ': ' . $langs -> trans ( 'StatusActionToDo' ) . ' (0%)' , 'statut1' );
else if ( $percent > 0 && $percent < 100 ) return img_picto ( $langs -> trans ( " Status " ) . ': ' . $langs -> trans ( 'StatusActionInProcess' ) . ' (' . $percent . '%)' , 'statut3' );
else if ( $percent >= 100 ) return img_picto ( $langs -> trans ( " Status " ) . ': ' . $langs -> trans ( 'StatusActionDone' ) . ' (100%)' , 'statut6' );
2006-05-20 14:16:18 +02:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 4 )
2006-05-20 14:16:18 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return img_picto ( $langs -> trans ( 'StatusNotApplicable' ), 'statut9' ) . ' ' . $langs -> trans ( 'StatusNotApplicable' );
else if ( $percent == 0 ) return img_picto ( $langs -> trans ( 'StatusActionToDo' ), 'statut1' ) . ' ' . $langs -> trans ( 'StatusActionToDo' ) . ' (0%)' ;
else if ( $percent > 0 && $percent < 100 ) return img_picto ( $langs -> trans ( 'StatusActionInProcess' ), 'statut3' ) . ' ' . $langs -> trans ( 'StatusActionInProcess' ) . ' (' . $percent . '%)' ;
else if ( $percent >= 100 ) return img_picto ( $langs -> trans ( 'StatusActionDone' ), 'statut6' ) . ' ' . $langs -> trans ( 'StatusActionDone' ) . ' (100%)' ;
2006-05-20 14:16:18 +02:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 5 )
2006-05-20 14:16:18 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return img_picto ( $langs -> trans ( 'StatusNotApplicable' ), 'statut9' );
else if ( $percent == 0 ) return '0% ' . img_picto ( $langs -> trans ( 'StatusActionToDo' ), 'statut1' );
else if ( $percent > 0 && $percent < 100 ) return $percent . '% ' . img_picto ( $langs -> trans ( 'StatusActionInProcess' ) . ' - ' . $percent . '%' , 'statut3' );
else if ( $percent >= 100 ) return $langs -> trans ( 'StatusActionDone' ) . ' ' . img_picto ( $langs -> trans ( 'StatusActionDone' ), 'statut6' );
2006-05-20 14:16:18 +02:00
}
2011-11-03 11:49:22 +01:00
else if ( $mode == 6 )
2011-06-01 10:24:26 +02:00
{
2011-11-03 11:49:22 +01:00
if ( $percent ==- 1 && ! $hidenastatus ) return img_picto ( $langs -> trans ( 'StatusNotApplicable' ), 'statut9' );
else if ( $percent == 0 ) return '0% ' . img_picto ( $langs -> trans ( 'StatusActionToDo' ), 'statut1' );
else if ( $percent > 0 && $percent < 100 ) return $percent . '% ' . img_picto ( $langs -> trans ( 'StatusActionInProcess' ) . ' - ' . $percent . '%' , 'statut3' );
else if ( $percent >= 100 ) return img_picto ( $langs -> trans ( 'StatusActionDone' ), 'statut6' );
2011-06-01 10:24:26 +02:00
}
2011-03-20 15:38:54 +01:00
return '' ;
2011-11-01 13:22:39 +01:00
}
/**
* Renvoie nom clicable ( avec eventuellement le picto )
* Utilise $this -> id , $this -> code et $this -> label
*
2012-01-08 00:15:36 +01:00
* @ param int $withpicto 0 = Pas de picto , 1 = Inclut le picto dans le lien , 2 = Picto seul
* @ param int $maxlength Nombre de caracteres max dans libelle
* @ param string $classname Force style class on a link
* @ param string $option '' = Link to action , 'birthday' = Link to contact
* @ param int $overwritepicto 1 = Overwrite picto
* @ return string Chaine avec URL
2011-11-01 13:22:39 +01:00
*/
function getNomUrl ( $withpicto = 0 , $maxlength = 0 , $classname = '' , $option = '' , $overwritepicto = '' )
{
global $langs ;
$result = '' ;
if ( $option == 'birthday' ) $lien = '<a ' . ( $classname ? 'class="' . $classname . '" ' : '' ) . 'href="' . DOL_URL_ROOT . '/contact/perso.php?id=' . $this -> id . '">' ;
else $lien = '<a ' . ( $classname ? 'class="' . $classname . '" ' : '' ) . 'href="' . DOL_URL_ROOT . '/comm/action/fiche.php?id=' . $this -> id . '">' ;
$lienfin = '</a>' ;
2012-12-01 15:45:05 +01:00
$label = $this -> label ;
if ( empty ( $label )) $label = $this -> libelle ; // Fro backward compatibility
//print 'rrr'.$this->libelle;
2011-02-02 15:41:31 +01:00
if ( $withpicto == 2 )
{
2012-12-01 15:45:05 +01:00
$libelle = $label ;
if ( ! empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE )) $libelle = $langs -> trans ( " Action " . $this -> type_code );
2011-02-02 15:41:31 +01:00
$libelleshort = '' ;
}
2011-06-20 12:40:25 +02:00
else if ( empty ( $this -> libelle ))
2006-12-12 20:25:30 +01:00
{
2012-12-01 15:45:05 +01:00
$libelle = $label ;
if ( ! empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE )) $libelle = $langs -> trans ( " Action " . $this -> type_code );
$libelleshort = dol_trunc ( $label , $maxlength );
2006-12-12 20:25:30 +01:00
}
else
2012-12-01 15:45:05 +01:00
{
$libelle = $label ;
$libelleshort = dol_trunc ( $label , $maxlength );
2006-12-12 20:25:30 +01:00
}
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
if ( $withpicto )
{
2012-12-01 15:45:05 +01:00
if ( ! empty ( $conf -> global -> AGENDA_USE_EVENT_TYPE ))
{
$libelle .= (( $this -> type_code && $libelle != $langs -> trans ( " Action " . $this -> type_code ) && $langs -> trans ( " Action " . $this -> type_code ) != " Action " . $this -> type_code ) ? ' (' . $langs -> trans ( " Action " . $this -> type_code ) . ')' : '' );
}
2011-11-01 13:22:39 +01:00
$result .= $lien . img_object ( $langs -> trans ( " ShowAction " ) . ': ' . $libelle ,( $overwritepicto ? $overwritepicto : 'action' )) . $lienfin ;
}
if ( $withpicto == 1 ) $result .= ' ' ;
$result .= $lien . $libelleshort . $lienfin ;
return $result ;
}
2006-10-24 01:07:46 +02:00
2009-05-04 22:39:17 +02:00
2008-04-08 00:11:22 +02:00
/**
2010-11-20 00:50:27 +01:00
* Export events from database into a cal file .
2011-09-22 01:41:42 +02:00
*
2012-01-08 00:15:36 +01:00
* @ param string $format 'vcal' , 'ical/ics' , 'rss'
* @ param string $type 'event' or 'journal'
* @ param int $cachedelay Do not rebuild file if date older than cachedelay seconds
* @ param string $filename Force filename
2012-01-08 00:52:07 +01:00
* @ param array $filters Array of filters
2012-01-08 00:15:36 +01:00
* @ return int < 0 if error , nb of events in new file if ok
2008-10-31 03:03:26 +01:00
*/
2011-11-01 13:22:39 +01:00
function build_exportfile ( $format , $type , $cachedelay , $filename , $filters )
{
global $conf , $langs , $dolibarr_main_url_root , $mysoc ;
2008-10-31 03:03:26 +01:00
2011-11-01 13:22:39 +01:00
require_once ( DOL_DOCUMENT_ROOT . " /core/lib/xcal.lib.php " );
require_once ( DOL_DOCUMENT_ROOT . " /core/lib/date.lib.php " );
2013-11-28 12:58:02 +01:00
require_once ( DOL_DOCUMENT_ROOT . " /core/lib/files.lib.php " );
2011-11-01 13:22:39 +01:00
dol_syslog ( get_class ( $this ) . " ::build_exportfile Build export file format= " . $format . " , type= " . $type . " , cachedelay= " . $cachedelay . " , filename= " . $filename . " , filters size= " . count ( $filters ), LOG_DEBUG );
2008-04-08 00:11:22 +02:00
2011-11-01 13:22:39 +01:00
// Check parameters
if ( empty ( $format )) return - 1 ;
2008-04-08 00:11:22 +02:00
2011-11-01 13:22:39 +01:00
// Clean parameters
if ( ! $filename )
{
$extension = 'vcs' ;
if ( $format == 'ical' ) $extension = 'ics' ;
$filename = $format . '.' . $extension ;
}
2010-01-17 21:39:32 +01:00
2011-11-01 13:22:39 +01:00
// Create dir and define output file (definitive and temporary)
$result = dol_mkdir ( $conf -> agenda -> dir_temp );
$outputfile = $conf -> agenda -> dir_temp . '/' . $filename ;
2010-01-17 21:39:32 +01:00
2011-11-01 13:22:39 +01:00
$result = 0 ;
2008-04-08 03:09:10 +02:00
2011-11-01 13:22:39 +01:00
$buildfile = true ;
$login = '' ; $logina = '' ; $logind = '' ; $logint = '' ;
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
$now = dol_now ();
2010-05-22 11:50:32 +02:00
2011-11-01 13:22:39 +01:00
if ( $cachedelay )
{
$nowgmt = dol_now ();
2012-08-23 02:04:35 +02:00
include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2011-11-01 13:22:39 +01:00
if ( dol_filemtime ( $outputfile ) > ( $nowgmt - $cachedelay ))
{
dol_syslog ( get_class ( $this ) . " ::build_exportfile file " . $outputfile . " is not older than now - cachedelay ( " . $nowgmt . " - " . $cachedelay . " ). Build is canceled " );
$buildfile = false ;
}
}
if ( $buildfile )
{
2011-06-30 09:49:26 +02:00
// Build event array
2011-11-01 13:22:39 +01:00
$eventarray = array ();
$sql = " SELECT a.id, " ;
$sql .= " a.datep, " ; // Start
$sql .= " a.datep2, " ; // End
$sql .= " a.durationp, " ;
$sql .= " a.datec, a.tms as datem, " ;
2013-03-08 12:04:01 +01:00
$sql .= " a.label, a.code, a.note, a.fk_action as type_id, " ;
2011-11-01 13:22:39 +01:00
$sql .= " a.fk_soc, " ;
$sql .= " a.fk_user_author, a.fk_user_mod, " ;
$sql .= " a.fk_user_action, a.fk_user_done, " ;
$sql .= " a.fk_contact, a.percent as percentage, " ;
$sql .= " a.fk_element, a.elementtype, " ;
$sql .= " a.priority, a.fulldayevent, a.location, " ;
2013-02-23 17:40:28 +01:00
$sql .= " u.firstname, u.lastname, " ;
2011-11-01 13:22:39 +01:00
$sql .= " s.nom as socname, " ;
$sql .= " c.id as type_id, c.code as type_code, c.libelle " ;
$sql .= " FROM ( " . MAIN_DB_PREFIX . " c_actioncomm as c, " . MAIN_DB_PREFIX . " actioncomm as a) " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " user as u on u.rowid = a.fk_user_author " ;
2012-02-01 11:32:55 +01:00
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " societe as s on s.rowid = a.fk_soc " ;
2011-11-01 13:22:39 +01:00
$sql .= " WHERE a.fk_action=c.id " ;
$sql .= " AND a.entity = " . $conf -> entity ;
foreach ( $filters as $key => $value )
{
2013-11-23 19:28:41 +01:00
if ( $key == 'notolderthan' && $value != '' ) $sql .= " AND a.datep >= ' " . $this -> db -> idate ( $now - ( $value * 24 * 60 * 60 )) . " ' " ;
2011-11-01 13:22:39 +01:00
if ( $key == 'year' ) $sql .= " AND a.datep BETWEEN ' " . $this -> db -> idate ( dol_get_first_day ( $value , 1 )) . " ' AND ' " . $this -> db -> idate ( dol_get_last_day ( $value , 12 )) . " ' " ;
if ( $key == 'id' ) $sql .= " AND a.id= " . ( is_numeric ( $value ) ? $value : 0 );
2010-08-19 21:30:17 +02:00
if ( $key == 'idfrom' ) $sql .= " AND a.id >= " . ( is_numeric ( $value ) ? $value : 0 );
if ( $key == 'idto' ) $sql .= " AND a.id <= " . ( is_numeric ( $value ) ? $value : 0 );
if ( $key == 'login' )
2011-11-01 13:22:39 +01:00
{
$login = $value ;
$userforfilter = new User ( $this -> db );
$result = $userforfilter -> fetch ( '' , $value );
$sql .= " AND ( " ;
$sql .= " a.fk_user_author = " . $userforfilter -> id ;
$sql .= " OR a.fk_user_action = " . $userforfilter -> id ;
$sql .= " OR a.fk_user_done = " . $userforfilter -> id ;
$sql .= " ) " ;
}
if ( $key == 'logina' )
{
$logina = $value ;
$userforfilter = new User ( $this -> db );
$result = $userforfilter -> fetch ( '' , $value );
$sql .= " AND a.fk_user_author = " . $userforfilter -> id ;
}
if ( $key == 'logint' )
{
$logint = $value ;
$userforfilter = new User ( $this -> db );
$result = $userforfilter -> fetch ( '' , $value );
$sql .= " AND a.fk_user_action = " . $userforfilter -> id ;
}
if ( $key == 'logind' )
{
$logind = $value ;
$userforfilter = new User ( $this -> db );
$result = $userforfilter -> fetch ( '' , $value );
$sql .= " AND a.fk_user_done = " . $userforfilter -> id ;
}
}
$sql .= " AND a.datep IS NOT NULL " ; // To exclude corrupted events and avoid errors in lightning/sunbird import
$sql .= " ORDER by datep " ;
//print $sql;exit;
dol_syslog ( get_class ( $this ) . " ::build_exportfile select events sql= " . $sql );
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
// Note: Output of sql request is encoded in $conf->file->character_set_client
2013-11-07 20:51:30 +01:00
// This assignment in condition is not a bug. It allows walking the results.
2011-11-01 13:22:39 +01:00
while ( $obj = $this -> db -> fetch_object ( $resql ))
{
$qualified = true ;
// 'eid','startdate','duration','enddate','title','summary','category','email','url','desc','author'
$event = array ();
$event [ 'uid' ] = 'dolibarragenda-' . $this -> db -> database_name . '-' . $obj -> id . " @ " . $_SERVER [ " SERVER_NAME " ];
$event [ 'type' ] = $type ;
2013-11-28 12:58:02 +01:00
$datestart = $this -> db -> jdate ( $obj -> datep ) - ( empty ( $conf -> global -> AGENDA_EXPORT_FIX_TZ ) ? 0 : ( $conf -> global -> AGENDA_EXPORT_FIX_TZ * 3600 ));
$dateend = $this -> db -> jdate ( $obj -> datep2 ) - ( empty ( $conf -> global -> AGENDA_EXPORT_FIX_TZ ) ? 0 : ( $conf -> global -> AGENDA_EXPORT_FIX_TZ * 3600 ));
2011-11-01 13:22:39 +01:00
$duration = $obj -> durationp ;
2011-12-07 18:10:24 +01:00
$event [ 'summary' ] = $obj -> label . ( $obj -> socname ? " ( " . $obj -> socname . " ) " : " " );
$event [ 'desc' ] = $obj -> note ;
2011-11-01 13:22:39 +01:00
$event [ 'startdate' ] = $datestart ;
$event [ 'duration' ] = $duration ; // Not required with type 'journal'
$event [ 'enddate' ] = $dateend ; // Not required with type 'journal'
2013-03-11 15:54:01 +01:00
$event [ 'author' ] = dolGetFirstLastname ( $obj -> firstname , $obj -> lastname );
2011-11-01 13:22:39 +01:00
$event [ 'priority' ] = $obj -> priority ;
2010-11-20 00:50:27 +01:00
$event [ 'fulldayevent' ] = $obj -> fulldayevent ;
2011-12-07 18:10:24 +01:00
$event [ 'location' ] = $obj -> location ;
2013-04-06 17:39:31 +02:00
$event [ 'transparency' ] = (( $obj -> transparency > 0 ) ? 'OPAQUE' : 'TRANSPARENT' ); // OPAQUE (busy) or TRANSPARENT (not busy)
2011-12-07 18:10:24 +01:00
$event [ 'category' ] = $obj -> libelle ; // libelle type action
2012-12-12 14:46:13 +01:00
// Define $urlwithroot
$urlwithouturlroot = preg_replace ( '/' . preg_quote ( DOL_URL_ROOT , '/' ) . '$/i' , '' , trim ( $dolibarr_main_url_root ));
$urlwithroot = $urlwithouturlroot . DOL_URL_ROOT ; // This is to use external domain name found into config file
//$urlwithroot=DOL_MAIN_URL_ROOT; // This is to use same domain name than current
$url = $urlwithroot . '/comm/action/fiche.php?id=' . $obj -> id ;
2011-11-01 13:22:39 +01:00
$event [ 'url' ] = $url ;
2013-11-28 12:58:02 +01:00
$event [ 'created' ] = $this -> db -> jdate ( $obj -> datec ) - ( empty ( $conf -> global -> AGENDA_EXPORT_FIX_TZ ) ? 0 : ( $conf -> global -> AGENDA_EXPORT_FIX_TZ * 3600 ));
$event [ 'modified' ] = $this -> db -> jdate ( $obj -> datem ) - ( empty ( $conf -> global -> AGENDA_EXPORT_FIX_TZ ) ? 0 : ( $conf -> global -> AGENDA_EXPORT_FIX_TZ * 3600 ));
2009-05-04 22:39:17 +02:00
2011-11-01 13:22:39 +01:00
if ( $qualified && $datestart )
{
$eventarray [ $datestart ] = $event ;
}
}
}
else
{
$this -> error = $this -> db -> lasterror ();
dol_syslog ( get_class ( $this ) . " ::build_exportfile " . $this -> db -> lasterror (), LOG_ERR );
return - 1 ;
}
$langs -> load ( " agenda " );
// Define title and desc
$more = '' ;
2011-12-07 18:10:24 +01:00
if ( $login ) $more = $langs -> transnoentities ( " User " ) . ' ' . $login ;
if ( $logina ) $more = $langs -> transnoentities ( " ActionsAskedBy " ) . ' ' . $logina ;
if ( $logint ) $more = $langs -> transnoentities ( " ActionsToDoBy " ) . ' ' . $logint ;
if ( $logind ) $more = $langs -> transnoentities ( " ActionsDoneBy " ) . ' ' . $logind ;
2011-11-01 13:22:39 +01:00
if ( $more )
{
2011-12-07 18:10:24 +01:00
$title = 'Dolibarr actions ' . $mysoc -> name . ' - ' . $more ;
2011-11-01 13:22:39 +01:00
$desc = $more ;
2011-12-07 18:10:24 +01:00
$desc .= ' (' . $mysoc -> name . ' - built by Dolibarr)' ;
2011-11-01 13:22:39 +01:00
}
else
{
2011-12-07 18:10:24 +01:00
$title = 'Dolibarr actions ' . $mysoc -> name ;
2011-11-01 13:22:39 +01:00
$desc = $langs -> transnoentities ( 'ListOfActions' );
2011-12-07 18:10:24 +01:00
$desc .= ' (' . $mysoc -> name . ' - built by Dolibarr)' ;
2011-11-01 13:22:39 +01:00
}
// Create temp file
2011-06-30 09:49:26 +02:00
$outputfiletmp = tempnam ( $conf -> agenda -> dir_temp , 'tmp' ); // Temporary file (allow call of function by different threads
@ chmod ( $outputfiletmp , octdec ( $conf -> global -> MAIN_UMASK ));
// Write file
2010-11-20 19:41:09 +01:00
if ( $format == 'vcal' ) $result = build_calfile ( $format , $title , $desc , $eventarray , $outputfiletmp );
2011-11-01 13:22:39 +01:00
if ( $format == 'ical' ) $result = build_calfile ( $format , $title , $desc , $eventarray , $outputfiletmp );
if ( $format == 'rss' ) $result = build_rssfile ( $format , $title , $desc , $eventarray , $outputfiletmp );
if ( $result >= 0 )
{
2013-11-28 12:58:02 +01:00
if ( dol_move ( $outputfiletmp , $outputfile , 0 , 1 )) $result = 1 ;
2011-11-01 13:22:39 +01:00
else
{
2013-11-28 12:58:02 +01:00
$this -> error = 'Failed to rename ' . $outputfiletmp . ' into ' . $outputfile ;
dol_syslog ( get_class ( $this ) . " ::build_exportfile " . $this -> error , LOG_ERR );
2011-06-30 09:49:26 +02:00
dol_delete_file ( $outputfiletmp , 0 , 1 );
2011-11-01 13:22:39 +01:00
$result =- 1 ;
}
}
else
{
2011-09-22 01:41:42 +02:00
dol_syslog ( get_class ( $this ) . " ::build_exportfile build_xxxfile function fails to for format= " . $format . " outputfiletmp= " . $outputfile , LOG_ERR );
2011-11-01 13:22:39 +01:00
dol_delete_file ( $outputfiletmp , 0 , 1 );
$langs -> load ( " errors " );
$this -> error = $langs -> trans ( " ErrorFailToCreateFile " , $outputfile );
}
}
return $result ;
}
/**
* Initialise an instance with random values .
* Used to build previews or test instances .
* id must be 0 if object instance is a specimen .
*
* @ return void
*/
function initAsSpecimen ()
{
global $user , $langs , $conf ;
$now = dol_now ();
// Initialise parametres
$this -> id = 0 ;
$this -> specimen = 1 ;
$this -> type_code = 'AC_OTH' ;
2013-03-08 12:04:01 +01:00
$this -> code = 'AC_SPECIMEN_CODE' ;
2011-11-01 13:22:39 +01:00
$this -> label = 'Label of event Specimen' ;
$this -> datec = $now ;
$this -> datem = $now ;
$this -> datep = $now ;
$this -> datef = $now ;
$this -> author = $user ;
$this -> usermod = $user ;
$this -> fulldayevent = 0 ;
$this -> punctual = 0 ;
$this -> percentage = 0 ;
$this -> location = 'Location' ;
2013-04-06 17:39:31 +02:00
$this -> transparency = 0 ;
2014-02-06 16:57:45 +01:00
$this -> priority = 1 ;
2011-11-01 13:22:39 +01:00
$this -> note = 'Note' ;
}
2011-11-01 04:58:47 +01:00
2006-10-24 01:07:46 +02:00
}
2002-05-11 20:53:13 +02:00
?>