2005-01-05 16:26:05 +01:00
< ? php
2009-01-25 23:04:55 +01:00
/* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
2016-11-11 14:03:57 +01:00
* Copyright ( C ) 2005 - 2016 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2009 Regis Houssin < regis . houssin @ inodbox . com >
2005-01-05 16:26:05 +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
2005-01-05 16:26:05 +01:00
* ( 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
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2005-01-05 16:26:05 +01:00
*/
2005-05-14 02:36:01 +02:00
/**
2010-06-05 17:32:18 +02:00
* \file htdocs / comm / mailing / class / mailing . class . php
2008-12-04 18:37:28 +01:00
* \ingroup mailing
2012-03-31 15:42:33 +02:00
* \brief File of class to manage emailings module
2008-11-10 15:20:02 +01:00
*/
2005-01-05 16:26:05 +01:00
2020-04-10 10:59:32 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php' ;
2008-12-04 18:37:28 +01:00
2005-01-05 16:26:05 +01:00
2005-05-14 02:36:01 +02:00
/**
2012-03-31 15:42:33 +02:00
* Class to manage emailings module
2008-11-10 15:20:02 +01:00
*/
2008-12-04 18:37:28 +01:00
class Mailing extends CommonObject
2005-01-05 16:26:05 +01:00
{
2018-08-23 17:07:27 +02:00
/**
* @ var string ID to identify managed object
*/
2020-04-10 10:59:32 +02:00
public $element = 'mailing' ;
2018-09-02 11:12:07 +02:00
2018-08-22 18:12:44 +02:00
/**
* @ var string Name of table without prefix where object is stored
*/
2020-04-10 10:59:32 +02:00
public $table_element = 'mailing' ;
2018-09-02 11:12:07 +02:00
2018-09-04 14:46:10 +02:00
/**
* @ var string String with name of icon for myobject . Must be the part after the 'object_' into object_myobject . png
*/
2020-04-10 10:59:32 +02:00
public $picto = 'email' ;
2018-01-29 12:46:07 +01:00
2020-11-27 00:15:07 +01:00
/**
* @ var string title
*/
2020-10-07 17:41:36 +02:00
public $title ;
2020-11-27 00:15:07 +01:00
/**
* @ var string subject
*/
2018-09-04 14:46:10 +02:00
public $sujet ;
2020-11-27 00:15:07 +01:00
/**
* @ var string body
*/
2018-09-04 14:46:10 +02:00
public $body ;
2020-11-27 00:15:07 +01:00
/**
* @ var int number of email
*/
2018-09-04 14:46:10 +02:00
public $nbemail ;
2020-11-27 00:15:07 +01:00
/**
* @ var string background color
*/
2018-09-04 14:46:10 +02:00
public $bgcolor ;
2020-11-27 00:15:07 +01:00
/**
* @ var string background image
*/
2018-09-04 14:46:10 +02:00
public $bgimage ;
2005-01-05 16:26:05 +01:00
2020-11-27 00:15:07 +01:00
/**
* @ var int status
*/
2020-04-10 10:59:32 +02:00
public $statut ; // Status 0=Draft, 1=Validated, 2=Sent partially, 3=Sent completely
2018-01-29 12:46:07 +01:00
2020-11-27 00:15:07 +01:00
/**
* @ var string email from
*/
2018-09-04 14:46:10 +02:00
public $email_from ;
2020-11-27 00:15:07 +01:00
/**
* @ var string email reply to
*/
2018-09-04 14:46:10 +02:00
public $email_replyto ;
2020-11-27 00:15:07 +01:00
/**
* @ var string email errors to
*/
2018-09-04 14:46:10 +02:00
public $email_errorsto ;
2005-01-05 16:26:05 +01:00
2020-11-27 00:15:07 +01:00
/**
* @ var string first joined file
*/
2018-09-04 14:46:10 +02:00
public $joined_file1 ;
2020-11-27 00:15:07 +01:00
/**
* @ var string second joined file
*/
2018-09-04 14:46:10 +02:00
public $joined_file2 ;
2020-11-27 00:15:07 +01:00
/**
* @ var string third joined file
*/
2018-09-04 14:46:10 +02:00
public $joined_file3 ;
2020-11-27 00:15:07 +01:00
/**
* @ var string fourth joined file
*/
2018-09-04 14:46:10 +02:00
public $joined_file4 ;
2010-04-17 11:47:25 +02:00
2020-11-27 00:15:07 +01:00
/**
* @ var int id of user create
*/
public $user_creation ;
/**
* @ var int id of user create
2020-11-27 20:33:40 +01:00
* @ deprecated
2020-11-27 00:15:07 +01:00
*/
2018-09-04 14:46:10 +02:00
public $user_creat ;
2020-11-27 00:15:07 +01:00
/**
* @ var int id of user validate
*/
public $user_validation ;
/**
* @ var int id of user validate
2020-11-27 20:33:40 +01:00
* @ deprecated
2020-11-27 00:15:07 +01:00
*/
2018-09-04 14:46:10 +02:00
public $user_valid ;
2008-11-10 15:20:02 +01:00
2019-11-01 10:38:58 +01:00
/**
2020-10-31 14:32:18 +01:00
* @ var integer | string date_creation
2020-11-27 20:33:40 +01:00
* @ deprecated
2020-10-31 14:32:18 +01:00
*/
2018-09-04 14:46:10 +02:00
public $date_creat ;
2019-11-01 10:44:29 +01:00
2020-11-27 20:33:40 +01:00
/**
* @ var integer | string date_creation
*/
public $date_creation ;
2020-11-27 00:15:07 +01:00
/**
* @ var int date validate
2020-11-27 20:33:40 +01:00
* @ deprecated
2020-11-27 00:15:07 +01:00
*/
2018-09-04 14:46:10 +02:00
public $date_valid ;
2015-02-26 13:03:17 +01:00
2020-11-27 20:33:40 +01:00
/**
* @ var int date validate
*/
public $date_validation ;
2020-11-27 00:15:07 +01:00
/**
* @ var array extraparams
*/
2020-04-10 10:59:32 +02:00
public $extraparams = array ();
2008-11-10 15:20:02 +01:00
2020-11-27 00:15:07 +01:00
/**
* @ var array statut dest
*/
2020-04-10 10:59:32 +02:00
public $statut_dest = array ();
2020-11-27 00:15:07 +01:00
/**
* @ var array statuts
*/
2020-04-10 10:59:32 +02:00
public $statuts = array ();
2014-05-29 14:26:27 +02:00
2008-11-10 15:20:02 +01:00
2020-10-31 14:32:18 +01:00
/**
* Constructor
*
* @ param DoliDb $db Database handler
*/
public function __construct ( $db )
{
2012-02-16 18:39:22 +01:00
$this -> db = $db ;
2008-11-10 15:20:02 +01:00
2009-12-17 16:52:37 +01:00
// List of language codes for status
$this -> statuts [ 0 ] = 'MailingStatusDraft' ;
$this -> statuts [ 1 ] = 'MailingStatusValidated' ;
$this -> statuts [ 2 ] = 'MailingStatusSentPartialy' ;
$this -> statuts [ 3 ] = 'MailingStatusSentCompletely' ;
2015-02-26 13:03:17 +01:00
2014-05-29 14:26:27 +02:00
$this -> statut_dest [ - 1 ] = 'MailingStatusError' ;
2017-05-04 13:41:37 +02:00
$this -> statut_dest [ 0 ] = 'MailingStatusNotSent' ;
2014-05-29 14:26:27 +02:00
$this -> statut_dest [ 1 ] = 'MailingStatusSent' ;
$this -> statut_dest [ 2 ] = 'MailingStatusRead' ;
2020-04-10 10:59:32 +02:00
$this -> statut_dest [ 3 ] = 'MailingStatusReadAndUnsubscribe' ; // Read but ask to not be contacted anymore
2020-10-31 14:32:18 +01:00
}
2005-02-12 00:41:42 +01:00
2008-11-10 15:20:02 +01:00
/**
2012-03-18 19:23:01 +01:00
* Create an EMailing
*
* @ param User $user Object of user making creation
* @ return int - 1 if error , Id of created object if OK
2008-11-10 15:20:02 +01:00
*/
2019-02-27 20:45:07 +01:00
public function create ( $user )
2005-01-05 16:26:05 +01:00
{
2009-04-28 22:35:01 +02:00
global $conf , $langs ;
2008-11-10 15:20:02 +01:00
2021-07-06 01:44:05 +02:00
// Check properties
if ( $this -> body === 'InvalidHTMLString' ) {
$this -> error = 'InvalidHTMLString' ;
return - 1 ;
}
2008-11-10 15:20:02 +01:00
$this -> db -> begin ();
2020-10-07 17:41:36 +02:00
$this -> title = trim ( $this -> title );
2020-04-10 10:59:32 +02:00
$this -> email_from = trim ( $this -> email_from );
2008-11-10 15:20:02 +01:00
2020-11-27 00:15:07 +01:00
if ( ! $this -> email_from ) {
2008-11-10 15:20:02 +01:00
$this -> error = $langs -> trans ( " ErrorMailFromRequired " );
return - 1 ;
}
2012-05-09 17:14:46 +02:00
2020-04-10 10:59:32 +02:00
$now = dol_now ();
2008-11-10 15:20:02 +01:00
2010-05-17 14:43:36 +02:00
$sql = " INSERT INTO " . MAIN_DB_PREFIX . " mailing " ;
2009-04-28 22:35:01 +02:00
$sql .= " (date_creat, fk_user_creat, entity) " ;
2021-08-27 22:42:04 +02:00
$sql .= " VALUES (' " . $this -> db -> idate ( $now ) . " ', " . (( int ) $user -> id ) . " , " . (( int ) $conf -> entity ) . " ) " ;
2008-11-10 15:20:02 +01:00
2020-11-27 00:15:07 +01:00
if ( ! $this -> title ) {
2020-10-07 17:41:36 +02:00
$this -> title = $langs -> trans ( " NoTitle " );
2008-11-10 15:20:02 +01:00
}
2014-06-12 11:31:53 +02:00
dol_syslog ( " Mailing::Create " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$result = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $result ) {
2010-05-17 14:43:36 +02:00
$this -> id = $this -> db -> last_insert_id ( MAIN_DB_PREFIX . " mailing " );
2008-11-10 15:20:02 +01:00
2020-11-27 00:15:07 +01:00
if ( $this -> update ( $user ) > 0 ) {
2008-11-10 15:20:02 +01:00
$this -> db -> commit ();
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2008-11-10 15:20:02 +01:00
$this -> db -> rollback ();
return - 1 ;
}
return $this -> id ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2008-11-10 15:20:02 +01:00
$this -> db -> rollback ();
return - 1 ;
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
/**
2012-03-18 19:23:01 +01:00
* Update emailing record
*
2021-02-23 18:59:19 +01:00
* @ param User $user Object of user making change
2012-03-18 19:23:01 +01:00
* @ return int < 0 if KO , > 0 if OK
2008-11-10 15:20:02 +01:00
*/
2019-02-27 20:45:07 +01:00
public function update ( $user )
2005-01-05 16:26:05 +01:00
{
2021-07-06 01:44:05 +02:00
// Check properties
if ( $this -> body === 'InvalidHTMLString' ) {
$this -> error = 'InvalidHTMLString' ;
return - 1 ;
}
2008-11-10 15:20:02 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " mailing " ;
2020-10-07 17:41:36 +02:00
$sql .= " SET titre = ' " . $this -> db -> escape ( $this -> title ) . " ' " ;
2011-02-24 19:11:12 +01:00
$sql .= " , sujet = ' " . $this -> db -> escape ( $this -> sujet ) . " ' " ;
$sql .= " , body = ' " . $this -> db -> escape ( $this -> body ) . " ' " ;
2017-05-12 16:55:11 +02:00
$sql .= " , email_from = ' " . $this -> db -> escape ( $this -> email_from ) . " ' " ;
$sql .= " , email_replyto = ' " . $this -> db -> escape ( $this -> email_replyto ) . " ' " ;
$sql .= " , email_errorsto = ' " . $this -> db -> escape ( $this -> email_errorsto ) . " ' " ;
2020-04-10 10:59:32 +02:00
$sql .= " , bgcolor = ' " . ( $this -> bgcolor ? $this -> db -> escape ( $this -> bgcolor ) : null ) . " ' " ;
$sql .= " , bgimage = ' " . ( $this -> bgimage ? $this -> db -> escape ( $this -> bgimage ) : null ) . " ' " ;
2020-11-27 00:15:07 +01:00
$sql .= " WHERE rowid = " . ( int ) $this -> id ;
2008-11-10 15:20:02 +01:00
2014-06-12 11:31:53 +02:00
dol_syslog ( " Mailing::Update " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$result = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $result ) {
2008-11-10 15:20:02 +01:00
return 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2008-11-10 15:20:02 +01:00
return - 1 ;
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
2006-11-02 02:42:49 +01:00
/**
2012-03-18 19:23:01 +01:00
* Get object from database
*
* @ param int $rowid Id of emailing
* @ return int < 0 if KO , > 0 if OK
2008-11-10 15:20:02 +01:00
*/
2019-02-27 20:45:07 +01:00
public function fetch ( $rowid )
2005-01-05 16:26:05 +01:00
{
2013-02-22 15:02:06 +01:00
global $conf ;
2015-02-26 13:03:17 +01:00
2020-10-07 17:41:36 +02:00
$sql = " SELECT m.rowid, m.titre as title, m.sujet, m.body, m.bgcolor, m.bgimage " ;
2020-04-10 10:59:32 +02:00
$sql .= " , m.email_from, m.email_replyto, m.email_errorsto " ;
$sql .= " , m.statut, m.nbemail " ;
$sql .= " , m.fk_user_creat, m.fk_user_valid " ;
$sql .= " , m.date_creat " ;
$sql .= " , m.date_valid " ;
$sql .= " , m.date_envoi " ;
$sql .= " , m.extraparams " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " mailing as m " ;
$sql .= " WHERE m.rowid = " . ( int ) $rowid ;
2008-11-10 15:20:02 +01:00
2014-06-12 11:31:53 +02:00
dol_syslog ( get_class ( $this ) . " ::fetch " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$result = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $result ) {
if ( $this -> db -> num_rows ( $result )) {
2006-11-02 02:42:49 +01:00
$obj = $this -> db -> fetch_object ( $result );
2008-11-10 15:20:02 +01:00
2019-02-27 20:45:07 +01:00
$this -> id = $obj -> rowid ;
$this -> ref = $obj -> rowid ;
$this -> statut = $obj -> statut ;
$this -> nbemail = $obj -> nbemail ;
2020-10-07 17:41:36 +02:00
$this -> title = $obj -> title ;
2015-02-26 13:03:17 +01:00
2019-02-27 20:45:07 +01:00
$this -> sujet = $obj -> sujet ;
2020-10-31 14:32:18 +01:00
if ( ! empty ( $conf -> global -> FCKEDITOR_ENABLE_MAILING ) && dol_textishtml ( dol_html_entity_decode ( $obj -> body , ENT_COMPAT | ENT_HTML5 ))) {
$this -> body = dol_html_entity_decode ( $obj -> body , ENT_COMPAT | ENT_HTML5 );
2020-04-10 10:59:32 +02:00
} else {
2019-02-27 20:45:07 +01:00
$this -> body = $obj -> body ;
2013-02-22 15:02:06 +01:00
}
2015-02-26 13:03:17 +01:00
2019-02-27 20:45:07 +01:00
$this -> bgcolor = $obj -> bgcolor ;
$this -> bgimage = $obj -> bgimage ;
2012-06-13 09:26:29 +02:00
2019-02-27 20:45:07 +01:00
$this -> email_from = $obj -> email_from ;
$this -> email_replyto = $obj -> email_replyto ;
$this -> email_errorsto = $obj -> email_errorsto ;
2012-06-13 09:26:29 +02:00
2019-02-27 20:45:07 +01:00
$this -> user_creat = $obj -> fk_user_creat ;
2020-11-27 20:33:40 +01:00
$this -> user_creation = $obj -> fk_user_creat ;
2019-02-27 20:45:07 +01:00
$this -> user_valid = $obj -> fk_user_valid ;
2020-11-27 20:33:40 +01:00
$this -> user_validation = $obj -> fk_user_valid ;
2012-06-13 09:26:29 +02:00
2019-02-27 20:45:07 +01:00
$this -> date_creat = $this -> db -> jdate ( $obj -> date_creat );
2020-11-27 20:33:40 +01:00
$this -> date_creation = $this -> db -> jdate ( $obj -> date_creat );
2019-02-27 20:45:07 +01:00
$this -> date_valid = $this -> db -> jdate ( $obj -> date_valid );
2020-11-27 20:33:40 +01:00
$this -> date_validation = $this -> db -> jdate ( $obj -> date_valid );
2019-02-27 20:45:07 +01:00
$this -> date_envoi = $this -> db -> jdate ( $obj -> date_envoi );
2015-02-26 13:03:17 +01:00
2019-02-27 20:45:07 +01:00
$this -> extraparams = ( array ) json_decode ( $obj -> extraparams , true );
2008-11-10 15:20:02 +01:00
2006-11-02 02:42:49 +01:00
return 1 ;
2020-05-21 15:05:19 +02:00
} else {
2012-05-09 17:14:46 +02:00
dol_syslog ( get_class ( $this ) . " ::fetch Erreur -1 " );
2006-11-02 02:42:49 +01:00
return - 1 ;
}
2020-05-21 15:05:19 +02:00
} else {
2012-05-09 17:14:46 +02:00
dol_syslog ( get_class ( $this ) . " ::fetch Erreur -2 " );
2006-11-02 02:42:49 +01:00
return - 2 ;
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
/**
2012-03-18 19:23:01 +01:00
* Load an object from its id and create a new one in database
*
2019-04-25 12:11:32 +02:00
* @ param User $user User making the clone
2012-03-18 19:23:01 +01:00
* @ param int $fromid Id of object to clone
2020-04-03 02:29:10 +02:00
* @ param int $option1 1 = Clone content , 0 = Forget content
* @ param int $option2 1 = Clone recipients
2012-03-18 19:23:01 +01:00
* @ return int New id of clone
2008-11-10 15:20:02 +01:00
*/
2019-04-25 12:11:32 +02:00
public function createFromClone ( User $user , $fromid , $option1 , $option2 )
2008-11-10 15:20:02 +01:00
{
2019-04-25 12:11:32 +02:00
global $langs ;
2009-01-25 23:04:55 +01:00
2020-04-10 10:59:32 +02:00
$error = 0 ;
2009-01-25 23:04:55 +01:00
2020-04-10 10:59:32 +02:00
$object = new Mailing ( $this -> db );
2005-01-05 16:26:05 +01:00
2008-11-10 15:20:02 +01:00
$this -> db -> begin ();
2005-01-05 16:26:05 +01:00
2008-11-10 15:20:02 +01:00
// Load source object
$object -> fetch ( $fromid );
2020-04-10 10:59:32 +02:00
$object -> id = 0 ;
$object -> statut = 0 ;
2008-11-20 22:30:23 +01:00
// Clear fields
2020-10-07 17:41:36 +02:00
$object -> title = $langs -> trans ( " CopyOf " ) . ' ' . $object -> title . ' ' . dol_print_date ( dol_now ());
2008-11-10 15:20:02 +01:00
// If no option copy content
2020-11-27 00:15:07 +01:00
if ( empty ( $option1 )) {
2009-01-25 23:04:55 +01:00
// Clear values
2008-11-20 22:30:23 +01:00
$object -> nbemail = 0 ;
$object -> sujet = '' ;
$object -> body = '' ;
2009-05-19 19:14:17 +02:00
$object -> bgcolor = '' ;
$object -> bgimage = '' ;
2008-11-10 15:20:02 +01:00
2020-04-03 02:29:10 +02:00
//$object->email_from = ''; // We do not reset from email because it is a mandatory value
2008-11-20 22:30:23 +01:00
$object -> email_replyto = '' ;
$object -> email_errorsto = '' ;
2008-11-10 15:20:02 +01:00
2008-11-20 22:30:23 +01:00
$object -> user_creat = $user -> id ;
$object -> user_valid = '' ;
2008-11-10 15:20:02 +01:00
2008-11-20 22:30:23 +01:00
$object -> date_creat = '' ;
$object -> date_valid = '' ;
$object -> date_envoi = '' ;
2008-11-10 15:20:02 +01:00
}
// Create clone
2020-04-10 10:59:32 +02:00
$object -> context [ 'createfromclone' ] = 'createfromclone' ;
$result = $object -> create ( $user );
2008-11-10 15:20:02 +01:00
// Other options
2020-11-27 00:15:07 +01:00
if ( $result < 0 ) {
2020-04-10 10:59:32 +02:00
$this -> error = $object -> error ;
$this -> errors = array_merge ( $this -> errors , $object -> errors );
2008-11-10 15:20:02 +01:00
$error ++ ;
}
2009-01-25 23:04:55 +01:00
2020-11-27 00:15:07 +01:00
if ( ! $error ) {
2020-04-03 02:29:10 +02:00
// Clone recipient targets
2014-04-28 17:18:11 +02:00
if ( ! empty ( $option2 )) {
2020-04-10 10:59:32 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/modules/mailings/modules_mailings.php' ;
2015-02-26 13:03:17 +01:00
2014-04-28 17:18:11 +02:00
$mailing_target = new MailingTargets ( $this -> db );
2015-02-26 13:03:17 +01:00
2020-04-10 10:59:32 +02:00
$target_array = array ();
2015-02-26 13:03:17 +01:00
2019-09-09 13:31:14 +02:00
$sql = " SELECT fk_contact, " ;
2020-04-10 10:59:32 +02:00
$sql .= " lastname, " ;
$sql .= " firstname, " ;
$sql .= " email, " ;
$sql .= " other, " ;
$sql .= " source_url, " ;
$sql .= " source_id , " ;
$sql .= " source_type " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " mailing_cibles " ;
2021-03-30 17:53:25 +02:00
$sql .= " WHERE fk_mailing = " . (( int ) $fromid );
2020-04-10 10:59:32 +02:00
$result = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $result ) {
if ( $this -> db -> num_rows ( $result )) {
2014-04-28 17:18:11 +02:00
while ( $obj = $this -> db -> fetch_object ( $result )) {
2020-04-10 10:59:32 +02:00
$target_array [] = array (
2019-09-09 13:31:14 +02:00
'fk_contact' => $obj -> fk_contact ,
'lastname' => $obj -> lastname ,
'firstname' => $obj -> firstname ,
'email' => $obj -> email ,
'other' => $obj -> other ,
'source_url' => $obj -> source_url ,
'source_id' => $obj -> source_id ,
'source_type' => $obj -> source_type
);
2014-04-28 17:18:11 +02:00
}
}
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2014-04-28 17:18:11 +02:00
return - 1 ;
}
2015-02-26 13:03:17 +01:00
2019-09-09 14:18:25 +02:00
$mailing_target -> addTargetsToDatabase ( $object -> id , $target_array );
2014-04-28 17:18:11 +02:00
}
2008-11-10 15:20:02 +01:00
}
2009-01-25 23:04:55 +01:00
2015-02-26 13:03:17 +01:00
unset ( $object -> context [ 'createfromclone' ]);
2008-11-10 15:20:02 +01:00
// End
2020-11-27 00:15:07 +01:00
if ( ! $error ) {
2008-11-10 15:20:02 +01:00
$this -> db -> commit ();
return $object -> id ;
2020-05-21 15:05:19 +02:00
} else {
2008-11-10 15:20:02 +01:00
$this -> db -> rollback ();
return - 1 ;
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
/**
2012-03-18 19:23:01 +01:00
* Validate emailing
*
* @ param User $user Objet user qui valide
* @ return int < 0 if KO , > 0 if OK
2008-11-10 15:20:02 +01:00
*/
2019-02-27 20:45:07 +01:00
public function valid ( $user )
2005-01-05 16:26:05 +01:00
{
2020-04-10 10:59:32 +02:00
$now = dol_now ();
2012-03-31 15:42:33 +02:00
2008-11-10 15:20:02 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " mailing " ;
2014-03-15 23:12:00 +01:00
$sql .= " SET statut = 1, date_valid = ' " . $this -> db -> idate ( $now ) . " ', fk_user_valid= " . $user -> id ;
2021-08-27 16:33:03 +02:00
$sql .= " WHERE rowid = " . (( int ) $this -> id );
2008-11-10 15:20:02 +01:00
2014-06-12 11:31:53 +02:00
dol_syslog ( " Mailing::valid " , LOG_DEBUG );
2020-11-27 00:15:07 +01:00
if ( $this -> db -> query ( $sql )) {
2009-02-18 22:48:07 +01:00
return 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2009-02-18 22:48:07 +01:00
return - 1 ;
2008-11-10 15:20:02 +01:00
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
2009-02-18 22:48:07 +01:00
2008-11-10 15:20:02 +01:00
/**
2012-03-18 19:23:01 +01:00
* Delete emailing
*
2021-06-17 22:06:26 +02:00
* @ param int $rowid Id if emailing to delete
* @ param int $notrigger Disable triggers
* @ return int > 0 if OK , < 0 if KO
2008-11-10 15:20:02 +01:00
*/
2021-06-17 10:41:55 +02:00
public function delete ( $rowid , $notrigger = 0 )
2005-01-05 16:26:05 +01:00
{
2021-06-17 10:41:03 +02:00
global $user ;
$this -> db -> begin ();
2008-11-10 15:20:02 +01:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " mailing " ;
2021-03-30 17:53:25 +02:00
$sql .= " WHERE rowid = " . (( int ) $rowid );
2008-11-10 15:20:02 +01:00
2014-06-12 11:31:53 +02:00
dol_syslog ( " Mailing::delete " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$resql = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $resql ) {
2021-06-17 10:41:03 +02:00
$res = $this -> delete_targets ();
2021-06-17 21:35:31 +02:00
if ( $res <= 0 ) {
2021-06-17 10:41:03 +02:00
$this -> db -> rollback ();
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
2020-05-21 15:05:19 +02:00
} else {
2021-06-17 10:41:03 +02:00
$this -> db -> rollback ();
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2009-02-18 22:48:07 +01:00
return - 1 ;
}
2021-06-17 10:41:03 +02:00
2021-06-17 21:35:31 +02:00
if ( ! $notrigger ) {
2021-06-17 10:41:03 +02:00
$result = $this -> call_trigger ( 'MAILING_DELETE' , $user );
2021-06-17 22:06:26 +02:00
if ( $result < 0 ) {
2021-06-17 10:41:03 +02:00
$this -> db -> rollback ();
return - 1 ;
}
}
$this -> db -> commit ();
return 1 ;
2009-02-18 22:48:07 +01:00
}
2018-01-29 12:46:07 +01:00
2020-10-31 14:32:18 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2015-06-01 12:29:10 +02:00
/**
* Delete targets emailing
*
* @ return int 1 if OK , 0 if error
*/
2019-02-27 20:45:07 +01:00
public function delete_targets ()
2015-06-01 12:29:10 +02:00
{
2020-10-31 14:32:18 +01:00
// phpcs:enable
2015-06-01 12:29:10 +02:00
$sql = " DELETE FROM " . MAIN_DB_PREFIX . " mailing_cibles " ;
2021-08-27 16:33:03 +02:00
$sql .= " WHERE fk_mailing = " . (( int ) $this -> id );
2015-06-01 12:29:10 +02:00
dol_syslog ( " Mailing::delete_targets " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$resql = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $resql ) {
2020-12-24 12:32:34 +01:00
$this -> refreshNbOfTargets ();
2015-06-01 12:29:10 +02:00
return 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2015-06-01 12:29:10 +02:00
return 0 ;
}
}
2009-02-18 22:48:07 +01:00
2020-10-31 14:32:18 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2009-02-18 22:48:07 +01:00
/**
2012-03-18 19:23:01 +01:00
* Change status of each recipient
*
* @ param User $user Objet user qui valide
* @ return int < 0 if KO , > 0 if OK
2009-02-18 22:48:07 +01:00
*/
2019-02-27 20:45:07 +01:00
public function reset_targets_status ( $user )
2009-02-18 22:48:07 +01:00
{
2020-10-31 14:32:18 +01:00
// phpcs:enable
2009-02-18 22:48:07 +01:00
$sql = " UPDATE " . MAIN_DB_PREFIX . " mailing_cibles " ;
2020-04-10 10:59:32 +02:00
$sql .= " SET statut = 0 " ;
2021-08-27 16:33:03 +02:00
$sql .= " WHERE fk_mailing = " . (( int ) $this -> id );
2009-02-18 22:48:07 +01:00
2014-06-12 11:31:53 +02:00
dol_syslog ( " Mailing::reset_targets_status " , LOG_DEBUG );
2020-04-10 10:59:32 +02:00
$resql = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $resql ) {
2009-02-18 22:48:07 +01:00
return 1 ;
2020-05-21 15:05:19 +02:00
} else {
2020-04-10 10:59:32 +02:00
$this -> error = $this -> db -> lasterror ();
2009-02-18 22:48:07 +01:00
return - 1 ;
}
2005-01-05 16:26:05 +01:00
}
2008-11-10 15:20:02 +01:00
2018-01-29 12:46:07 +01:00
2016-02-12 14:21:44 +01:00
/**
* Count number of target with status
*
2018-01-29 12:46:07 +01:00
* @ param string $mode Mode ( 'alreadysent' = Sent success or error , 'alreadysentok' = Sent success , 'alreadysentko' = Sent error )
2016-02-13 08:10:13 +01:00
* @ return int Nb of target with status
2016-02-12 14:21:44 +01:00
*/
2019-02-27 20:45:07 +01:00
public function countNbOfTargets ( $mode )
2016-02-12 14:21:44 +01:00
{
2020-10-31 14:32:18 +01:00
$sql = " SELECT COUNT(rowid) as nb FROM " . MAIN_DB_PREFIX . " mailing_cibles " ;
2021-08-27 16:33:03 +02:00
$sql .= " WHERE fk_mailing = " . (( int ) $this -> id );
2020-11-27 00:15:07 +01:00
if ( $mode == 'alreadysent' ) {
$sql .= " AND statut <> 0 " ;
} elseif ( $mode == 'alreadysentok' ) {
$sql .= " AND statut > 0 " ;
} elseif ( $mode == 'alreadysentko' ) {
$sql .= " AND statut = -1 " ;
} else {
2020-10-31 14:32:18 +01:00
$this -> error = 'BadValueForParameterMode' ;
return - 2 ;
}
$resql = $this -> db -> query ( $sql );
2020-11-27 00:15:07 +01:00
if ( $resql ) {
2020-10-31 14:32:18 +01:00
$obj = $this -> db -> fetch_object ( $resql );
2020-11-27 00:15:07 +01:00
if ( $obj ) {
return $obj -> nb ;
}
2020-10-31 14:32:18 +01:00
} else {
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
return 0 ;
2016-02-12 14:21:44 +01:00
}
2018-01-29 12:46:07 +01:00
2020-12-24 12:32:34 +01:00
/**
* Refresh denormalized value -> nbemail into emailing record
* Note : There is also the method update_nb into modules_mailings that is used for this .
*
* @ return int < 0 if KO , > 0 if OK
*/
public function refreshNbOfTargets ()
{
$sql = " SELECT COUNT(rowid) as nb FROM " . MAIN_DB_PREFIX . " mailing_cibles " ;
2021-08-27 16:33:03 +02:00
$sql .= " WHERE fk_mailing = " . (( int ) $this -> id );
2020-12-24 12:32:34 +01:00
$resql = $this -> db -> query ( $sql );
if ( $resql ) {
$obj = $this -> db -> fetch_object ( $resql );
if ( $obj ) {
$nbforupdate = $obj -> nb ;
$sql = 'UPDATE ' . MAIN_DB_PREFIX . 'mailing SET nbemail = ' . (( int ) $nbforupdate );
2021-08-27 22:42:04 +02:00
$sql .= ' WHERE rowid = ' . (( int ) $this -> id );
2020-12-24 12:32:34 +01:00
$resqlupdate = $this -> db -> query ( $sql );
if ( ! $resqlupdate ) {
$this -> error = $this -> db -> lasterror ();
return - 1 ;
2020-12-28 12:36:36 +01:00
} else {
$this -> nbemail = ( int ) $nbforupdate ;
2020-12-24 12:32:34 +01:00
}
}
} else {
$this -> error = $this -> db -> lasterror ();
return - 1 ;
}
2020-12-28 12:36:36 +01:00
2020-12-24 12:32:34 +01:00
return 1 ;
}
2008-11-10 15:20:02 +01:00
2018-09-23 15:58:33 +02:00
/**
2019-02-10 12:59:09 +01:00
* Return a link to the object card ( with optionally the picto )
2018-09-23 15:58:33 +02:00
*
* @ param int $withpicto Include picto in link ( 0 = No picto , 1 = Include picto into link , 2 = Only picto )
* @ param string $option On what the link point to ( 'nolink' , ... )
* @ param int $notooltip 1 = Disable tooltip
* @ param string $morecss Add more css on link
* @ param int $save_lastsearch_value - 1 = Auto , 0 = No save of lastsearch_values when clicking , 1 = Save lastsearch_values whenclicking
* @ return string String with URL
*/
2019-02-27 20:45:07 +01:00
public function getNomUrl ( $withpicto = 0 , $option = '' , $notooltip = 0 , $morecss = '' , $save_lastsearch_value = - 1 )
2018-09-23 15:58:33 +02:00
{
global $db , $conf , $langs , $hookmanager ;
global $dolibarr_main_authentication , $dolibarr_main_demo ;
global $menumanager ;
2020-11-27 00:15:07 +01:00
if ( ! empty ( $conf -> dol_no_mouse_hover )) {
$notooltip = 1 ; // Force disable tooltips
}
2018-09-23 15:58:33 +02:00
$result = '' ;
$companylink = '' ;
2020-04-10 10:59:32 +02:00
$label = '<u>' . $langs -> trans ( " ShowEMailing " ) . '</u>' ;
$label .= '<br>' ;
$label .= '<b>' . $langs -> trans ( 'Ref' ) . ':</b> ' . $this -> ref ;
2018-09-23 15:58:33 +02:00
$url = DOL_URL_ROOT . '/comm/mailing/card.php?id=' . $this -> id ;
2020-11-27 00:15:07 +01:00
if ( $option != 'nolink' ) {
2018-09-23 15:58:33 +02:00
// Add param to save lastsearch_values or not
2020-04-10 10:59:32 +02:00
$add_save_lastsearch_values = ( $save_lastsearch_value == 1 ? 1 : 0 );
2020-11-27 00:15:07 +01:00
if ( $save_lastsearch_value == - 1 && preg_match ( '/list\.php/' , $_SERVER [ " PHP_SELF " ])) {
$add_save_lastsearch_values = 1 ;
}
if ( $add_save_lastsearch_values ) {
$url .= '&save_lastsearch_values=1' ;
}
2018-09-23 15:58:33 +02:00
}
2020-04-10 10:59:32 +02:00
$linkclose = '' ;
2020-11-27 00:15:07 +01:00
if ( empty ( $notooltip )) {
if ( ! empty ( $conf -> global -> MAIN_OPTIMIZEFORTEXTBROWSER )) {
2020-04-10 10:59:32 +02:00
$label = $langs -> trans ( " ShowEMailing " );
$linkclose .= ' alt="' . dol_escape_htmltag ( $label , 1 ) . '"' ;
2018-09-23 15:58:33 +02:00
}
2020-04-10 10:59:32 +02:00
$linkclose .= ' title="' . dol_escape_htmltag ( $label , 1 ) . '"' ;
$linkclose .= ' class="classfortooltip' . ( $morecss ? ' ' . $morecss : '' ) . '"' ;
2018-09-23 15:58:33 +02:00
/*
$hookmanager -> initHooks ( array ( 'myobjectdao' ));
$parameters = array ( 'id' => $this -> id );
$reshook = $hookmanager -> executeHooks ( 'getnomurltooltip' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
if ( $reshook > 0 ) $linkclose = $hookmanager -> resPrint ;
*/
2020-11-27 00:15:07 +01:00
} else {
$linkclose = ( $morecss ? ' class="' . $morecss . '"' : '' );
}
2018-09-23 15:58:33 +02:00
$linkstart = '<a href="' . $url . '"' ;
2020-04-10 10:59:32 +02:00
$linkstart .= $linkclose . '>' ;
$linkend = '</a>' ;
2018-09-23 15:58:33 +02:00
$result .= $linkstart ;
2020-11-27 00:15:07 +01:00
if ( $withpicto ) {
$result .= img_object (( $notooltip ? '' : $label ), ( $this -> picto ? $this -> picto : 'generic' ), ( $notooltip ? (( $withpicto != 2 ) ? 'class="paddingright"' : '' ) : 'class="' . (( $withpicto != 2 ) ? 'paddingright ' : '' ) . 'classfortooltip"' ), 0 , 0 , $notooltip ? 0 : 1 );
}
if ( $withpicto != 2 ) {
$result .= $this -> ref ;
}
2018-09-23 15:58:33 +02:00
$result .= $linkend ;
//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
global $action ;
$hookmanager -> initHooks ( array ( 'emailingdao' ));
2022-02-15 18:31:05 +01:00
$parameters = array ( 'id' => $this -> id , 'getnomurl' => & $result );
2020-04-10 10:59:32 +02:00
$reshook = $hookmanager -> executeHooks ( 'getNomUrl' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
2020-11-27 00:15:07 +01:00
if ( $reshook > 0 ) {
$result = $hookmanager -> resPrint ;
} else {
$result .= $hookmanager -> resPrint ;
}
2018-09-23 15:58:33 +02:00
return $result ;
}
2006-06-25 17:52:12 +02:00
/**
2018-01-29 12:46:07 +01:00
* Return label of status of emailing ( draft , validated , ... )
2012-03-18 19:23:01 +01:00
*
2022-01-18 13:44:52 +01:00
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Short label , 5 = Short label + Picto , 6 = Picto + Long label , 7 = Very short label + Picto
2012-03-18 19:23:01 +01:00
* @ return string Label
2006-06-25 17:52:12 +02:00
*/
2019-02-27 20:45:07 +01:00
public function getLibStatut ( $mode = 0 )
2006-06-25 17:52:12 +02:00
{
2019-01-27 11:55:16 +01:00
return $this -> LibStatut ( $this -> statut , $mode );
2006-06-25 17:52:12 +02:00
}
2020-10-31 14:32:18 +01:00
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
2006-06-25 17:52:12 +02:00
/**
2022-01-18 13:44:52 +01:00
* Return the label of a given status
2012-03-18 19:23:01 +01:00
*
2019-11-01 23:58:14 +01:00
* @ param int $status Id status
2022-01-18 13:44:52 +01:00
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Short label , 5 = Short label + Picto , 6 = Picto + Long label , 7 = Very short label + Picto
2012-03-18 19:23:01 +01:00
* @ return string Label
2006-06-25 17:52:12 +02:00
*/
2019-11-01 23:58:14 +01:00
public function LibStatut ( $status , $mode = 0 )
2006-06-25 17:52:12 +02:00
{
2020-10-31 14:32:18 +01:00
// phpcs:enable
2006-06-25 17:52:12 +02:00
global $langs ;
2019-11-01 23:58:14 +01:00
$langs -> load ( " mailing " );
2006-06-25 17:52:12 +02:00
2021-10-16 19:37:57 +02:00
$labelStatus = $langs -> transnoentitiesnoconv ( $this -> statuts [ $status ]);
$labelStatusShort = $langs -> transnoentitiesnoconv ( $this -> statuts [ $status ]);
2019-11-01 23:58:14 +01:00
$statusType = 'status' . $status ;
2020-11-27 00:15:07 +01:00
if ( $status == 2 ) {
$statusType = 'status3' ;
}
if ( $status == 3 ) {
$statusType = 'status6' ;
}
2019-11-01 23:58:14 +01:00
return dolGetStatus ( $labelStatus , $labelStatusShort , '' , $statusType , $mode );
2006-06-25 17:52:12 +02:00
}
2008-11-10 15:20:02 +01:00
2015-02-26 13:03:17 +01:00
2014-05-29 14:26:27 +02:00
/**
2022-01-18 13:44:52 +01:00
* Return the label of a given status of a recipient
2016-11-11 14:03:57 +01:00
* TODO Add class mailin_target . class . php
2014-05-29 14:26:27 +02:00
*
2019-11-01 23:58:14 +01:00
* @ param int $status Id status
2022-01-18 13:44:52 +01:00
* @ param int $mode 0 = Long label , 1 = Short label , 2 = Picto + Short label , 3 = Picto , 4 = Picto + Short label , 5 = Short label + Picto , 6 = Picto + Long label , 7 = Very short label + Picto
2019-04-08 16:04:15 +02:00
* @ param string $desc Desc error
2014-05-29 14:26:27 +02:00
* @ return string Label
*/
2019-11-01 23:58:14 +01:00
public static function libStatutDest ( $status , $mode = 0 , $desc = '' )
2014-05-29 14:26:27 +02:00
{
global $langs ;
2019-11-01 23:58:14 +01:00
$langs -> load ( " mails " );
$labelStatus = array ();
$labelStatusShort = array ();
2021-10-16 19:37:57 +02:00
$labelStatus [ - 1 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusError' );
$labelStatus [ 0 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusNotSent' );
$labelStatus [ 1 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusSent' );
$labelStatus [ 2 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusRead' );
$labelStatus [ 3 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusNotContact' );
$labelStatusShort [ - 1 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusError' );
$labelStatusShort [ 0 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusNotSent' );
$labelStatusShort [ 1 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusSent' );
$labelStatusShort [ 2 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusRead' );
$labelStatusShort [ 3 ] = $langs -> transnoentitiesnoconv ( 'MailingStatusNotContact' );
2019-11-01 23:58:14 +01:00
$statusType = 'status' . $status ;
2020-11-27 00:15:07 +01:00
if ( $status == - 1 ) {
$statusType = 'status8' ;
}
if ( $status == 1 ) {
$statusType = 'status6' ;
}
if ( $status == 2 ) {
$statusType = 'status4' ;
}
2019-11-01 23:58:14 +01:00
$param = array ();
if ( $status == - 1 ) {
$param = array ( 'badgeParams' => array ( 'attr' => array ( 'title' => $desc )));
}
return dolGetStatus ( $labelStatus [ $status ], $labelStatusShort [ $status ], '' , $statusType , $mode , '' , $param );
2014-05-29 14:26:27 +02:00
}
2005-01-05 16:26:05 +01:00
}