2
0
forked from Wavyzz/dolibarr

New: add extraparams, hooks and extrafields for emailing card

This commit is contained in:
Regis Houssin
2012-06-13 09:26:29 +02:00
parent 315fba37fc
commit 6246228544
4 changed files with 114 additions and 71 deletions

View File

@@ -58,13 +58,15 @@ class Mailing extends CommonObject
var $date_creat; var $date_creat;
var $date_valid; var $date_valid;
var $extraparams=array();
/** /**
* Constructor * Constructor
* *
* @param DoliDb $db Database handler * @param DoliDb $db Database handler
*/ */
function Mailing($db) function __construct($db)
{ {
$this->db = $db; $this->db = $db;
@@ -176,14 +178,15 @@ class Mailing extends CommonObject
function fetch($rowid) function fetch($rowid)
{ {
$sql = "SELECT m.rowid, m.titre, m.sujet, m.body, m.bgcolor, m.bgimage"; $sql = "SELECT m.rowid, m.titre, m.sujet, m.body, m.bgcolor, m.bgimage";
$sql .= ", m.email_from, m.email_replyto, m.email_errorsto"; $sql.= ", m.email_from, m.email_replyto, m.email_errorsto";
$sql .= ", m.statut, m.nbemail"; $sql.= ", m.statut, m.nbemail";
$sql .= ", m.fk_user_creat, m.fk_user_valid"; $sql.= ", m.fk_user_creat, m.fk_user_valid";
$sql .= ", m.date_creat"; $sql.= ", m.date_creat";
$sql .= ", m.date_valid"; $sql.= ", m.date_valid";
$sql .= ", m.date_envoi"; $sql.= ", m.date_envoi";
$sql .= " FROM ".MAIN_DB_PREFIX."mailing as m"; $sql.= ", m.extraparams";
$sql .= " WHERE m.rowid = ".$rowid; $sql.= " FROM ".MAIN_DB_PREFIX."mailing as m";
$sql.= " WHERE m.rowid = ".$rowid;
dol_syslog(get_class($this)."::fetch sql=".$sql); dol_syslog(get_class($this)."::fetch sql=".$sql);
$result=$this->db->query($sql); $result=$this->db->query($sql);
@@ -193,26 +196,28 @@ class Mailing extends CommonObject
{ {
$obj = $this->db->fetch_object($result); $obj = $this->db->fetch_object($result);
$this->id = $obj->rowid; $this->id = $obj->rowid;
$this->ref = $obj->rowid; $this->ref = $obj->rowid;
$this->statut = $obj->statut; $this->statut = $obj->statut;
$this->nbemail = $obj->nbemail; $this->nbemail = $obj->nbemail;
$this->titre = $obj->titre; $this->titre = $obj->titre;
$this->sujet = $obj->sujet; $this->sujet = $obj->sujet;
$this->body = $obj->body; $this->body = $obj->body;
$this->bgcolor = $obj->bgcolor; $this->bgcolor = $obj->bgcolor;
$this->bgimage = $obj->bgimage; $this->bgimage = $obj->bgimage;
$this->email_from = $obj->email_from; $this->email_from = $obj->email_from;
$this->email_replyto = $obj->email_replyto; $this->email_replyto = $obj->email_replyto;
$this->email_errorsto = $obj->email_errorsto; $this->email_errorsto = $obj->email_errorsto;
$this->user_creat = $obj->fk_user_creat; $this->user_creat = $obj->fk_user_creat;
$this->user_valid = $obj->fk_user_valid; $this->user_valid = $obj->fk_user_valid;
$this->date_creat = $this->db->jdate($obj->date_creat); $this->date_creat = $this->db->jdate($obj->date_creat);
$this->date_valid = $this->db->jdate($obj->date_valid); $this->date_valid = $this->db->jdate($obj->date_valid);
$this->date_envoi = $this->db->jdate($obj->date_envoi); $this->date_envoi = $this->db->jdate($obj->date_envoi);
$this->extraparams = (array) json_decode($obj->extraparams, true);
return 1; return 1;
} }

View File

@@ -30,6 +30,7 @@ require_once(DOL_DOCUMENT_ROOT."/core/class/CMailFile.class.php");
require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/functions2.lib.php");
require_once(DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php"); require_once(DOL_DOCUMENT_ROOT."/comm/mailing/class/mailing.class.php");
require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/class/html.formother.class.php");
require_once(DOL_DOCUMENT_ROOT."/core/class/extrafields.class.php");
$langs->load("mails"); $langs->load("mails");
@@ -41,10 +42,17 @@ $confirm=GETPOST('confirm','alpha');
$message = ''; $message = '';
$object=new Mailing($db); $object=new Mailing($db);
$result=$object->fetch($id);
$extrafields = new ExtraFields($db);
// Initialize technical object to manage hooks of thirdparties. Note that conf->hooks_modules contains array array
include_once(DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php');
$hookmanager=new HookManager($db);
$hookmanager->initHooks(array('mailingcard'));
// Tableau des substitutions possibles // Tableau des substitutions possibles
$substitutionarray=array( $object->substitutionarray=array(
'__ID__' => 'IdRecord', '__ID__' => 'IdRecord',
'__EMAIL__' => 'EMail', '__EMAIL__' => 'EMail',
'__LASTNAME__' => 'Lastname', '__LASTNAME__' => 'Lastname',
@@ -60,8 +68,8 @@ $substitutionarray=array(
); );
if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE) if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
{ {
$substitutionarray=array_merge( $object->substitutionarray=array_merge(
$substitutionarray, $object->substitutionarray,
array( array(
'__CHECK_READ__' => 'CheckMail', '__CHECK_READ__' => 'CheckMail',
'__UNSUSCRIBE__' => 'Unsubscribe' '__UNSUSCRIBE__' => 'Unsubscribe'
@@ -69,7 +77,7 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
); );
} }
$substitutionarrayfortest=array( $object->substitutionarrayfortest=array(
'__ID__' => 'TESTIdRecord', '__ID__' => 'TESTIdRecord',
'__EMAIL__' => 'TESTEMail', '__EMAIL__' => 'TESTEMail',
'__LASTNAME__' => 'TESTLastname', '__LASTNAME__' => 'TESTLastname',
@@ -85,8 +93,8 @@ $substitutionarrayfortest=array(
); );
if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE) if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
{ {
$substitutionarrayfortest=array_merge( $object->substitutionarrayfortest=array_merge(
$substitutionarrayfortest, $object->substitutionarrayfortest,
array( array(
'__CHECK_READ__' => 'TESTCheckMail', '__CHECK_READ__' => 'TESTCheckMail',
'__UNSUSCRIBE__' => 'TESTUnsubscribe' '__UNSUSCRIBE__' => 'TESTUnsubscribe'
@@ -94,6 +102,13 @@ if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE)
); );
} }
/*
* Actions
*/
$parameters=array();
$reshook=$hookmanager->executeHooks('doActions',$parameters,$object,$action); // Note that $action and $object may have been modified by some hooks
// Action clone object // Action clone object
if ($action == 'confirm_clone' && $confirm == 'yes') if ($action == 'confirm_clone' && $confirm == 'yes')
{ {
@@ -103,7 +118,7 @@ if ($action == 'confirm_clone' && $confirm == 'yes')
} }
else else
{ {
$result=$object->createFromClone($id,$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]); $result=$object->createFromClone($object->id,$_REQUEST["clone_content"],$_REQUEST["clone_receivers"]);
if ($result > 0) if ($result > 0)
{ {
header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result); header("Location: ".$_SERVER['PHP_SELF'].'?id='.$result);
@@ -125,7 +140,7 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
// Pour des raisons de securite, on ne permet pas cette fonction via l'IHM, // Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
// on affiche donc juste un message // on affiche donc juste un message
$message='<div class="warning">'.$langs->trans("MailingNeedCommand").'</div>'; $message='<div class="warning">'.$langs->trans("MailingNeedCommand").'</div>';
$message.='<br><textarea cols="70" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$id.'</textarea>'; $message.='<br><textarea cols="70" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>';
$message.='<br><br><div class="warning">'.$langs->trans("MailingNeedCommand2").'</div>'; $message.='<br><br><div class="warning">'.$langs->trans("MailingNeedCommand2").'</div>';
$action=''; $action='';
} }
@@ -136,8 +151,6 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
} }
else else
{ {
$result=$object->fetch($id);
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
if ($object->statut == 0) if ($object->statut == 0)
@@ -358,8 +371,6 @@ if ($action == 'sendallconfirmed' && $confirm == 'yes')
// Action send test emailing // Action send test emailing
if ($action == 'send' && empty($_POST["cancel"])) if ($action == 'send' && empty($_POST["cancel"]))
{ {
$result=$object->fetch($id);
$error=0; $error=0;
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
@@ -378,8 +389,8 @@ if ($action == 'send' && empty($_POST["cancel"]))
if (preg_match('/[\s\t]*<html>/i',$message)) $msgishtml=1; if (preg_match('/[\s\t]*<html>/i',$message)) $msgishtml=1;
// Pratique les substitutions sur le sujet et message // Pratique les substitutions sur le sujet et message
$object->sujet=make_substitutions($object->sujet,$substitutionarrayfortest,$langs); $object->sujet=make_substitutions($object->sujet,$object->substitutionarrayfortest,$langs);
$object->body=make_substitutions($object->body,$substitutionarrayfortest,$langs); $object->body=make_substitutions($object->body,$object->substitutionarrayfortest,$langs);
$arr_file = array(); $arr_file = array();
$arr_mime = array(); $arr_mime = array();
@@ -453,8 +464,6 @@ if ($action == 'add')
// Action update description of emailing // Action update description of emailing
if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyto' || $action == 'setemail_errorsto') if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyto' || $action == 'setemail_errorsto')
{ {
$object->fetch($id);
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
if ($action == 'settitre') $object->titre = trim(GETPOST('titre','alpha')); if ($action == 'settitre') $object->titre = trim(GETPOST('titre','alpha'));
@@ -484,8 +493,6 @@ if ($action == 'settitre' || $action == 'setemail_from' || $actino == 'setreplyt
*/ */
if (! empty($_POST['addfile'])) if (! empty($_POST['addfile']))
{ {
$object->fetch($id);
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
@@ -499,8 +506,6 @@ if (! empty($_POST['addfile']))
// Action update emailing // Action update emailing
if (! empty($_POST["removedfile"])) if (! empty($_POST["removedfile"]))
{ {
$object->fetch($id);
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
@@ -515,8 +520,6 @@ if ($action == 'update' && empty($_POST["removedfile"]) && empty($_POST["cancel"
{ {
require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/files.lib.php");
$object->fetch($id);
$isupload=0; $isupload=0;
if (! $isupload) if (! $isupload)
@@ -551,7 +554,7 @@ if ($action == 'update' && empty($_POST["removedfile"]) && empty($_POST["cancel"
// Action confirmation validation // Action confirmation validation
if ($action == 'confirm_valid' && $confirm == 'yes') if ($action == 'confirm_valid' && $confirm == 'yes')
{ {
if ($object->fetch($id) >= 0) if ($object->id > 0)
{ {
$object->valid($user); $object->valid($user);
@@ -567,7 +570,7 @@ if ($action == 'confirm_valid' && $confirm == 'yes')
// Resend // Resend
if ($action == 'confirm_reset' && $confirm == 'yes') if ($action == 'confirm_reset' && $confirm == 'yes')
{ {
if ($object->fetch($id) >= 0) if ($object->id > 0)
{ {
$db->begin(); $db->begin();
@@ -598,8 +601,6 @@ if ($action == 'confirm_reset' && $confirm == 'yes')
// Action confirmation suppression // Action confirmation suppression
if ($action == 'confirm_delete' && $confirm == 'yes') if ($action == 'confirm_delete' && $confirm == 'yes')
{ {
$object->fetch($id);
if ($object->delete($object->id)) if ($object->delete($object->id))
{ {
Header("Location: liste.php"); Header("Location: liste.php");
@@ -618,6 +619,9 @@ if (! empty($_POST["cancel"]))
* View * View
*/ */
// fetch optionals attributes and labels
$extralabels=$extrafields->fetch_name_optionals_label('mailing');
$help_url='EN:Module_EMailing|FR:Module_Mailing|ES:M&oacute;dulo_Mailing'; $help_url='EN:Module_EMailing|FR:Module_Mailing|ES:M&oacute;dulo_Mailing';
llxHeader('',$langs->trans("Mailing"),$help_url); llxHeader('',$langs->trans("Mailing"),$help_url);
@@ -639,6 +643,21 @@ if ($action == 'create')
print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value="'.$_POST['titre'].'"></td></tr>'; print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailTitle").'</td><td><input class="flat" name="titre" size="40" value="'.$_POST['titre'].'"></td></tr>';
print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->global->MAILING_EMAIL_FROM.'"></td></tr>'; print '<tr><td width="25%" class="fieldrequired">'.$langs->trans("MailFrom").'</td><td><input class="flat" name="from" size="40" value="'.$conf->global->MAILING_EMAIL_FROM.'"></td></tr>';
print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td><input class="flat" name="errorsto" size="40" value="'.(!empty($conf->global->MAILING_EMAIL_ERRORSTO)?$conf->global->MAILING_EMAIL_ERRORSTO:$conf->global->MAIN_MAIL_ERRORS_TO).'"></td></tr>'; print '<tr><td width="25%">'.$langs->trans("MailErrorsTo").'</td><td><input class="flat" name="errorsto" size="40" value="'.(!empty($conf->global->MAILING_EMAIL_ERRORSTO)?$conf->global->MAILING_EMAIL_ERRORSTO:$conf->global->MAIN_MAIL_ERRORS_TO).'"></td></tr>';
// Other attributes
$parameters=array();
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
if (empty($reshook) && ! empty($extrafields->attribute_label))
{
foreach($extrafields->attribute_label as $key=>$label)
{
$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
print '<tr><td>'.$label.'</td><td colspan="3">';
print $extrafields->showInputField($key,$value);
print '</td></tr>'."\n";
}
}
print '</table>'; print '</table>';
print '</br><br>'; print '</br><br>';
@@ -649,7 +668,7 @@ if ($action == 'create')
print '</td></tr>'; print '</td></tr>';
print '<tr><td width="25%" class="fieldrequired" valign="top">'.$langs->trans("MailMessage").'<br>'; print '<tr><td width="25%" class="fieldrequired" valign="top">'.$langs->trans("MailMessage").'<br>';
print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>'; print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>';
foreach($substitutionarray as $key => $val) foreach($object->substitutionarray as $key => $val)
{ {
print $key.' = '.$langs->trans($val).'<br>'; print $key.' = '.$langs->trans($val).'<br>';
} }
@@ -668,7 +687,7 @@ if ($action == 'create')
} }
else else
{ {
if ($object->fetch($id) >= 0) if ($object->id > 0)
{ {
$upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1); $upload_dir = $conf->mailing->dir_output . "/" . get_exdir($object->id,2,0,1);
@@ -785,6 +804,20 @@ else
} }
print '</td></tr>'; print '</td></tr>';
// Other attributes
$parameters=array();
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
if (empty($reshook) && ! empty($extrafields->attribute_label))
{
foreach($extrafields->attribute_label as $key=>$label)
{
$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
print '<tr><td>'.$label.'</td><td colspan="3">';
print $extrafields->showInputField($key,$value);
print "</td></tr>\n";
}
}
print '</table>'; print '</table>';
print "</div>"; print "</div>";
@@ -894,7 +927,7 @@ else
$formmail->withcancel=1; $formmail->withcancel=1;
$formmail->withdeliveryreceipt=0; $formmail->withdeliveryreceipt=0;
// Tableau des substitutions // Tableau des substitutions
$formmail->substit=$substitutionarrayfortest; $formmail->substit=$object->substitutionarrayfortest;
// Tableau des parametres complementaires du post // Tableau des parametres complementaires du post
$formmail->param["action"]="send"; $formmail->param["action"]="send";
$formmail->param["models"]="body"; $formmail->param["models"]="body";
@@ -987,6 +1020,20 @@ else
} }
print '</td></tr>'; print '</td></tr>';
// Other attributes
$parameters=array();
$reshook=$hookmanager->executeHooks('formObjectOptions',$parameters,$object,$action); // Note that $action and $object may have been modified by hook
if (empty($reshook) && ! empty($extrafields->attribute_label))
{
foreach($extrafields->attribute_label as $key=>$label)
{
$value=(isset($_POST["options_".$key])?$_POST["options_".$key]:$object->array_options["options_".$key]);
print '<tr><td>'.$label.'</td><td colspan="3">';
print $extrafields->showInputField($key,$value);
print "</td></tr>\n";
}
}
print '</table>'; print '</table>';
print "</div>"; print "</div>";
@@ -1049,21 +1096,10 @@ else
// Message // Message
print '<tr><td width="25%" valign="top">'.$langs->trans("MailMessage").'<br>'; print '<tr><td width="25%" valign="top">'.$langs->trans("MailMessage").'<br>';
print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>'; print '<br><i>'.$langs->trans("CommonSubstitutions").':<br>';
print '__ID__ = '.$langs->trans("IdRecord").'<br>'; foreach($object->substitutionarray as $key => $val)
print '__EMAIL__ = '.$langs->trans("EMail").'<br>'; {
if ($conf->global->MAILING_EMAIL_UNSUBSCRIBE) print $key.' = '.$langs->trans($val).'<br>';
{ }
print '__CHECK_READ__ = '.$langs->trans("CheckRead").'<br>';
print '__UNSUSCRIBE__ = '.$langs->trans("MailUnsubcribe").'<br>';
}
print '__MAILTOEMAIL__ = '.$langs->trans("MailtoEMail").'<br>';
print '__LASTNAME__ = '.$langs->trans("Lastname").'<br>';
print '__FIRSTNAME__ = '.$langs->trans("Firstname").'<br>';
print '__OTHER1__ = '.$langs->trans("Other").'1<br>';
print '__OTHER2__ = '.$langs->trans("Other").'2<br>';
print '__OTHER3__ = '.$langs->trans("Other").'3<br>';
print '__OTHER4__ = '.$langs->trans("Other").'4<br>';
print '__OTHER5__ = '.$langs->trans("Other").'5<br>';
print '</i></td>'; print '</i></td>';
print '<td colspan="3">'; print '<td colspan="3">';
// Editeur wysiwyg // Editeur wysiwyg

View File

@@ -35,3 +35,4 @@ ALTER TABLE llx_commande_fournisseur CHANGE COLUMN date_cloture date_approve dat
ALTER TABLE llx_commande_fournisseur CHANGE COLUMN fk_user_cloture fk_user_approve integer; ALTER TABLE llx_commande_fournisseur CHANGE COLUMN fk_user_cloture fk_user_approve integer;
ALTER TABLE llx_mailing MODIFY COLUMN body mediumtext; ALTER TABLE llx_mailing MODIFY COLUMN body mediumtext;
ALTER TABLE llx_mailing ADD COLUMN extraparams varchar(255);

View File

@@ -46,6 +46,7 @@ create table llx_mailing
fk_user_creat integer, -- user creator fk_user_creat integer, -- user creator
fk_user_valid integer, -- user validator fk_user_valid integer, -- user validator
fk_user_appro integer, -- not used fk_user_appro integer, -- not used
extraparams varchar(255), -- for stock other parameters with json format
joined_file1 varchar(255), joined_file1 varchar(255),
joined_file2 varchar(255), joined_file2 varchar(255),
joined_file3 varchar(255), joined_file3 varchar(255),