diff --git a/htdocs/admin/mails_templates.php b/htdocs/admin/mails_templates.php index 28ace66a610..3000612514a 100644 --- a/htdocs/admin/mails_templates.php +++ b/htdocs/admin/mails_templates.php @@ -835,6 +835,8 @@ if ($resql) if ($value == 'private') { $align="center"; + if ($valuetoshow) $valuetoshow=yn($valuetoshow); + else $valuetoshow=''; } if ($value == 'position') { @@ -1042,12 +1044,12 @@ function fieldList($fieldlist, $obj='', $tabname='', $context='') { if (empty($user->admin)) { - print $form->selectyesno($fieldlist[$field], '1'); + print $form->selectyesno($fieldlist[$field], '1', 1); } else { //print ''; - print $form->selectyesno($fieldlist[$field], (isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:'')); + print $form->selectyesno($fieldlist[$field], (isset($obj->{$fieldlist[$field]})?$obj->{$fieldlist[$field]}:''), 1); } } else diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index c40192723a8..9f67db88bbb 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -57,24 +57,17 @@ $hookmanager->initHooks(array('mailingcard','globalcard')); // Array of possible substitutions (See also file mailing-send.php that should manage same substitutions) $object->substitutionarray=FormMail::getAvailableSubstitKey('emailing'); -$object->substitutionarray['__(AnyTranslationKey)__']=$langs->trans("Translation"); -$object->substitutionarrayfortest=array( - '__ID__' => 'TESTIdRecord', - //'__EMAIL__' => 'TESTEMail', // Done into "send" action - '__LASTNAME__' => 'TESTLastname', - '__FIRSTNAME__' => 'TESTFirstname', - '__MAILTOEMAIL__' => 'TESTMailtoEmail', - '__OTHER1__' => 'TESTOther1', - '__OTHER2__' => 'TESTOther2', - '__OTHER3__' => 'TESTOther3', - '__OTHER4__' => 'TESTOther4', - '__OTHER5__' => 'TESTOther5', - '__SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:''), - '__CHECK_READ__' => 'TagCheckMail', - '__UNSUBSCRIBE__' => 'TagUnsubscribe' - //,'__PERSONALIZED__' => 'TESTPersonalized' // Not used yet -); + +// Set $object->substitutionarrayfortest +$signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:''); + +$targetobject = null; // Not defined with mass emailing + +$parameters=array('mode'=>'emailing'); +$substitutionarray=FormMail::getAvailableSubstitKey('emailing', $targetobject); + +$object->substitutionarrayfortest = $substitutionarray; // List of sending methods $listofmethods=array(); @@ -205,24 +198,28 @@ if (empty($reshook)) $tmpfield=explode('=',$other[2],2); $other3=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]); $tmpfield=explode('=',$other[3],2); $other4=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]); $tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]); + $signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:''); - // Array of possible substitutions (See also fie mailing-send.php that should manage same substitutions) - $substitutionarray=array( - '__ID__' => $obj->source_id, - '__EMAIL__' => $obj->email, - '__LASTNAME__' => $obj->lastname, - '__FIRSTNAME__' => $obj->firstname, - '__MAILTOEMAIL__' => ''.$obj->email.'', - '__OTHER1__' => $other1, - '__OTHER2__' => $other2, - '__OTHER3__' => $other3, - '__OTHER4__' => $other4, - '__OTHER5__' => $other5, - '__SIGNATURE__' => $signature, // Signature is empty when ran from command line or taken from user in parameter) - '__CHECK_READ__' => '', - '__UNSUBSCRIBE__' => ''.$langs->trans("MailUnsubcribe").'' - ); + $targetobject = null; // Not defined with mass emailing + $parameters=array('mode'=>'emailing'); + $substitutionarray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $targetobject); // Note: On mass emailing, this is null because be don't know object + + // Array of possible substitutions (See also file mailing-send.php that should manage same substitutions) + $substitutionarray['__ID__'] = $obj->source_id; + $substitutionarray['__EMAIL__'] = $obj->email; + $substitutionarray['__LASTNAME__'] = $obj->lastname; + $substitutionarray['__FIRSTNAME__'] = $obj->firstname; + $substitutionarray['__MAILTOEMAIL__'] = ''.$obj->email.''; + $substitutionarray['__OTHER1__'] = $other1; + $substitutionarray['__OTHER2__'] = $other2; + $substitutionarray['__OTHER3__'] = $other3; + $substitutionarray['__OTHER4__'] = $other4; + $substitutionarray['__OTHER5__'] = $other5; + $substitutionarray['__SIGNATURE__'] = $signature; // Signature is empty when ran from command line or taken from user in parameter) + $substitutionarray['__CHECK_READ__'] = ''; + $substitutionarray['__UNSUBSCRIBE__'] = ''.$langs->trans("MailUnsubcribe").''; + $onlinepaymentenabled = 0; if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++; if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++; @@ -230,18 +227,20 @@ if (empty($reshook)) if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN)) { $substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); + if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) + { + $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + } + else + { + $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); + } } /* For backward compatibility */ if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN)) @@ -261,6 +260,7 @@ if (empty($reshook)) else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); } //$substitutionisok=true; + complete_substitutions_array($substitutionarray, $langs); $newsubject=make_substitutions($subject,$substitutionarray); $newmessage=make_substitutions($message,$substitutionarray); @@ -431,9 +431,12 @@ if (empty($reshook)) $msgishtml=-1; // Inconnu par defaut if (preg_match('/[\s\t]*/i',$object->body)) $msgishtml=1; - $object->substitutionarrayfortest['__EMAIL__'] = $object->sendto; // other are set at begin of page + // other are set at begin of page + $object->substitutionarrayfortest['__EMAIL__'] = $object->sendto; + $object->substitutionarrayfortest['__MAILTOEMAIL__'] = ''.$object->sendto.''; // Pratique les substitutions sur le sujet et message + complete_substitutions_array($object->substitutionarrayfortest, $langs); $tmpsujet=make_substitutions($object->sujet,$object->substitutionarrayfortest); $tmpbody=make_substitutions($object->body,$object->substitutionarrayfortest); @@ -1073,7 +1076,7 @@ else $formmail->substit=$object->substitutionarrayfortest; // Tableau des parametres complementaires du post $formmail->param["action"]="send"; - $formmail->param["models"]="body"; + $formmail->param["models"]='none'; $formmail->param["mailid"]=$object->id; $formmail->param["returnurl"]=$_SERVER['PHP_SELF']."?id=".$object->id; diff --git a/htdocs/contrat/card.php b/htdocs/contrat/card.php index 16c843466f9..904bd519f76 100644 --- a/htdocs/contrat/card.php +++ b/htdocs/contrat/card.php @@ -2251,7 +2251,7 @@ else } $formmail->substit['__CONTRACT_NEXT_EXPIRATION_DATE__'] = dol_print_date($datenextexpiration, 'dayrfc'); $formmail->substit['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = dol_print_date($datenextexpiration, 'standard'); - $formmail->substit['__PERSONALIZED__']=''; + $formmail->substit['__PERSONALIZED__']=''; // deprecated $formmail->substit['__CONTACTCIVNAME__']=''; $custcontact = ''; @@ -2276,7 +2276,7 @@ else // Tableau des parametres complementaires $formmail->param['action'] = 'send'; - $formmail->param['models'] = 'contract_send'; + $formmail->param['models'] = 'contract'; $formmail->param['models_id']=GETPOST('modelmailselected','int'); $formmail->param['contractid'] = $object->id; $formmail->param['returnurl'] = $_SERVER["PHP_SELF"] . '?id=' . $object->id; diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index f00f8c146ed..ed318bbd900 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -5828,7 +5828,7 @@ class Form * @param int $useempty 1=Add empty line * @return string See option */ - function selectyesno($htmlname,$value='',$option=0,$disabled=false,$useempty='') + function selectyesno($htmlname, $value='', $option=0, $disabled=false, $useempty='') { global $langs; diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index c8d9b20633b..efdd7f6a433 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -293,13 +293,17 @@ class FormMail extends Form } // Get message template for $this->param["models"] into c_email_templates - $model_id=0; - if (array_key_exists('models_id',$this->param)) - { - $model_id=$this->param["models_id"]; - } - $arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id); - //var_dump($this->param["models"]); + $arraydefaultmessage=array(); + if ($this->param['models'] != 'none') + { + $model_id=0; + if (array_key_exists('models_id',$this->param)) + { + $model_id=$this->param["models_id"]; + } + $arraydefaultmessage=$this->getEMailTemplate($this->db, $this->param["models"], $user, $outputlangs, $model_id); + } + //var_dump($this->param["models"]); //var_dump($model_id); //var_dump($arraydefaultmessage); @@ -325,18 +329,21 @@ class FormMail extends Form $out.= ''."\n"; } - $result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs); - if ($result < 0) + if ($this->param['models'] != 'none') { - setEventMessages($this->error, $this->errors, 'errors'); - } - $modelmail_array=array(); - foreach($this->lines_model as $line) - { - $modelmail_array[$line->id]=$line->label; - if ($line->lang) $modelmail_array[$line->id].=' ('.$line->lang.')'; - if ($line->private) $modelmail_array[$line->id].=' - '.$langs->trans("Private"); - //if ($line->fk_user != $user->id) $modelmail_array[$line->id].=' - '.$langs->trans("By").' '; + $result = $this->fetchAllEMailTemplate($this->param["models"], $user, $outputlangs); + if ($result < 0) + { + setEventMessages($this->error, $this->errors, 'errors'); + } + $modelmail_array=array(); + foreach($this->lines_model as $line) + { + $modelmail_array[$line->id]=$line->label; + if ($line->lang) $modelmail_array[$line->id].=' ('.$line->lang.')'; + if ($line->private) $modelmail_array[$line->id].=' - '.$langs->trans("Private"); + //if ($line->fk_user != $user->id) $modelmail_array[$line->id].=' - '.$langs->trans("By").' '; + } } // Zone to select its email template @@ -769,7 +776,7 @@ class FormMail extends Form $paymenturl=$url; } } - $this->substit['__PERSONALIZED__']=$paymenturl; + $this->substit['__PERSONALIZED__']=$paymenturl; // deprecated $this->substit['__ONLINE_PAYMENT_URL__']=$paymenturl; //Add lines substitution key from each line @@ -1038,8 +1045,7 @@ class FormMail extends Form /** - * Set substit array from object. This is call when suggesting the email template into forms to send email. - * TODO Replace with getCommonSubstitutionArray with param onlykey = 2 + * Set substit array from object. This is call when suggesting the email template into forms before sending email. * * @param CommonObject $object Object to use * @param Translate $outputlangs Object lang @@ -1049,34 +1055,12 @@ class FormMail extends Form function setSubstitFromObject($object, $outputlangs=null) { global $conf, $user; - $this->substit['__REF__'] = $object->ref; - $this->substit['__REFCLIENT__'] = isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : ''); - $this->substit['__REFSUPPLIER__'] = isset($object->ref_supplier) ? $object->ref_supplier : ''; - $this->substit['__DATE_YMD__'] = isset($object->date) ? dol_print_date($object->date, 'day', 0, $outputlangs) : ''; - $this->substit['__DATE_DUE_YMD__'] = isset($object->date_lim_reglement)? dol_print_date($object->date_lim_reglement, 'day', 0, $outputlangs) : ''; - $this->substit['__AMOUNT__'] = price($object->total_ttc); - $this->substit['__AMOUNT_EXCL_TAX__'] = price($object->total_ht); - $this->substit['__AMOUNT_VAT__'] = price($object->total_tva); + $parameters=array('mode'=>$mode); + $tmparray=getCommonSubstitutionArray($outputlangs, 0, null, $object); + complete_substitutions_array($tmparray, $outputlangs, null, $parameters); - $this->substit['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:''); - $this->substit['__THIRDPARTY_NAME__'] = (is_object($object->thirdparty)?$object->thirdparty->name:''); - - $this->substit['__PROJECT_ID__'] = (is_object($object->projet)?$object->projet->id:''); - $this->substit['__PROJECT_REF__'] = (is_object($object->projet)?$object->projet->ref:''); - $this->substit['__PROJECT_NAME__'] = (is_object($object->projet)?$object->projet->title:''); - - $this->substit['__SIGNATURE__'] = $user->signature; - $this->substit['__PERSONALIZED__'] = ''; - $this->substit['__CONTACTCIVNAME__'] = ''; // Will be replace just before sending - - // Create dynamic tags for __EXTRAFIELD_FIELD__ - $extrafields = new ExtraFields($this->db); - $extralabels = $extrafields->fetch_name_optionals_label($object->table_element, true); - $object->fetch_optionals($object->id, $extralabels); - foreach ($extrafields->attribute_label as $key => $label) { - $this->substit['__EXTRAFIELD_' . strtoupper($key) . '__'] = $object->array_options['options_' . $key]; - } + $this->substit=$tmparray; // Fill substit_lines with each object lines content if (is_array($object->lines)) @@ -1127,55 +1111,43 @@ class FormMail extends Form { global $conf, $langs; - $vars=array(); - if ($mode == 'formemail' || $mode == 'formemailwithlines' || $mode == 'formemailforlines') { - $vars=array( - '__REF__'=>'__REF__', - '__REFCLIENT__'=>'__REFCLIENT__', - '__REFSUPPLIER__'=>'__REFSUPPLIER__', - '__THIRDPARTY_ID__'=>'__THIRDPARTY_ID__', - '__THIRDPARTY_NAME__'=>'__THIRDPARTY_NAME__', - '__PROJECT_ID__'=>'__PROJECT_ID__', - '__PROJECT_REF__'=>'__PROJECT_REF__', - '__PROJECT_NAME__'=>'__PROJECT_NAME__', - '__CONTACTCIVNAME__'=>'__CONTACTCIVNAME__', - '__AMOUNT__'=>'__AMOUNT__', - '__AMOUNT_EXCL_TAX__'=>'__AMOUNT_EXCL_TAX__', - '__AMOUNT_VAT__'=>'__AMOUNT_VAT__', - '__ONLINE_PAYMENT_URL__'=>'__ONLINE_PAYMENT_URL__', - '__SIGNATURE__'=>'__SIGNATURE__', - '__PERSONALIZED__'=>'__PERSONALIZED__', // deprecated - ); + $parameters=array('mode'=>$mode); + $tmparray=getCommonSubstitutionArray($langs, 2, null, $object); // Note: On email templated edition, this is null because it is related to all type of objects + complete_substitutions_array($tmparray, $langs, null, $parameters); + if ($mode == 'formwithlines') { - $vars[] = '__LINES__'; // Will be set by the get_form function + $tmparray['__LINES__'] = '__LINES__'; // Will be set by the get_form function } if ($mode == 'formforlines') { - $vars[] = '__QUANTITY__'; // Will be set by the get_form function + $tmparray['__QUANTITY__'] = '__QUANTITY__'; // Will be set by the get_form function } } + if ($mode == 'emailing') { + $parameters=array('mode'=>$mode); + $tmparray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $object); // Note: On email templated edition, this is null because it is related to all type of objects + complete_substitutions_array($tmparray, $langs, null, $parameters); + // For mass emailing, we have different keys - $vars=array( - '__ID__' => 'IdRecord', - '__EMAIL__' => 'EMailRecipient', - '__LASTNAME__' => 'Lastname', - '__FIRSTNAME__' => 'Firstname', - '__MAILTOEMAIL__' => 'TagMailtoEmail', - '__OTHER1__' => 'Other1', - '__OTHER2__' => 'Other2', - '__OTHER3__' => 'Other3', - '__OTHER4__' => 'Other4', - '__OTHER5__' => 'Other5', - '__SIGNATURE__' => 'TagSignature', - '__CHECK_READ__' => 'TagCheckMail', - '__UNSUBSCRIBE__' => 'TagUnsubscribe' + $tmparray['__ID__'] = 'IdRecord'; + $tmparray['__EMAIL__'] = 'EMailRecipient'; + $tmparray['__LASTNAME__'] = 'Lastname'; + $tmparray['__FIRSTNAME__'] = 'Firstname'; + $tmparray['__MAILTOEMAIL__'] = 'TagMailtoEmail'; + $tmparray['__OTHER1__'] = 'Other1'; + $tmparray['__OTHER2__'] = 'Other2'; + $tmparray['__OTHER3__'] = 'Other3'; + $tmparray['__OTHER4__'] = 'Other4'; + $tmparray['__OTHER5__'] = 'Other5'; + $tmparray['__SIGNATURE__'] = 'TagSignature'; + $tmparray['__CHECK_READ__'] = 'TagCheckMail'; + $tmparray['__UNSUBSCRIBE__'] = 'TagUnsubscribe'; //,'__PERSONALIZED__' => 'Personalized' // Hidden because not used yet in mass emailing - ); $onlinepaymentenabled = 0; if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++; @@ -1183,13 +1155,13 @@ class FormMail extends Form if (! empty($conf->stripe->enabled)) $onlinepaymentenabled++; if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN)) { - $vars['__SECUREKEYPAYMENT__']=$conf->global->PAYMENT_SECURITY_TOKEN; + $tmparray['__SECUREKEYPAYMENT__']=$conf->global->PAYMENT_SECURITY_TOKEN; if (! empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) { - if ($conf->adherent->enabled) $vars['__SECUREKEYPAYMENT_MEMBER__']='SecureKeyPAYMENTUniquePerMember'; - if ($conf->facture->enabled) $vars['__SECUREKEYPAYMENT_INVOICE__']='SecureKeyPAYMENTUniquePerInvoice'; - if ($conf->commande->enabled) $vars['__SECUREKEYPAYMENT_ORDER__']='SecureKeyPAYMENTUniquePerOrder'; - if ($conf->contrat->enabled) $vars['__SECUREKEYPAYMENT_CONTRACTLINE__']='SecureKeyPAYMENTUniquePerContractLine'; + if ($conf->adherent->enabled) $tmparray['__SECUREKEYPAYMENT_MEMBER__']='SecureKeyPAYMENTUniquePerMember'; + if ($conf->facture->enabled) $tmparray['__SECUREKEYPAYMENT_INVOICE__']='SecureKeyPAYMENTUniquePerInvoice'; + if ($conf->commande->enabled) $tmparray['__SECUREKEYPAYMENT_ORDER__']='SecureKeyPAYMENTUniquePerOrder'; + if ($conf->contrat->enabled) $tmparray['__SECUREKEYPAYMENT_CONTRACTLINE__']='SecureKeyPAYMENTUniquePerContractLine'; } } else @@ -1202,36 +1174,16 @@ class FormMail extends Form $vars['__SECUREKEYPAYMENT_CONTRACTLINE__']=''; */ } - - // Old vars removed from doc - /* - if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN)) - { - $vars['__SECUREKEYPAYPAL__']='SecureKeyPaypal'; - if (! empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE)) - { - if ($conf->adherent->enabled) $vars['__SECUREKEYPAYPAL_MEMBER__']='SecureKeyPaypalUniquePerMember'; - if ($conf->facture->enabled) $vars['__SECUREKEYPAYPAL_INVOICE__']='SecureKeyPaypalUniquePerInvoice'; - if ($conf->commande->enabled) $vars['__SECUREKEYPAYPAL_ORDER__']='SecureKeyPaypalUniquePerOrder'; - if ($conf->contrat->enabled) $vars['__SECUREKEYPAYPAL_CONTRACTLINE__']='SecureKeyPaypalUniquePerContractLine'; - } - } - else - { - $vars['__SECUREKEYPAYPAL__']=''; - $vars['__SECUREKEYPAYPAL_MEMBER__']=''; - }*/ } - $parameters=array('mode'=>$mode); - $tmparray=getCommonSubstitutionArray($langs, 2, null, $object); - complete_substitutions_array($tmparray, $langs, null, $parameters); + $tmparray['__(AnyTranslationKey)__']="Translation"; + foreach($tmparray as $key => $val) { - $vars[$key]=$key; + if (empty($val)) $tmparray[$key]=$key; } - return $vars; + return $tmparray; } } diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index f28f8ea96af..2b8ab5ebf7a 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -5227,38 +5227,69 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob '__MYCOMPANY_COUNTRY_ID__' => $mysoc->country_id )); } - if (is_object($object) && (empty($exclude) || ! in_array('object', $exclude))) + if (($onlykey || is_object($object)) && (empty($exclude) || ! in_array('object', $exclude))) { - $substitutionarray['__ID__'] = $object->id; - $substitutionarray['__REF__'] = $object->ref; - $substitutionarray['__REFCLIENT__'] = (isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : '')); - $substitutionarray['__REFSUPPLIER__'] = (isset($object->ref_supplier) ? $object->ref_supplier : ''); - - if (is_object($object->thirdparty) && $object->thirdparty->id > 0) + if ($onlykey) { - $substitutionarray['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:''); - $substitutionarray['__THIRDPARTY_NAME__'] = (is_object($object->thirdparty)?$object->thirdparty->name:''); + $substitutionarray['__ID__'] = '__ID__'; + $substitutionarray['__REF__'] = '__REF__'; + $substitutionarray['__REFCLIENT__'] = '__REFCLIENT__'; + $substitutionarray['__REFSUPPLIER__'] = '__REFSUPPLIER__'; + $substitutionarray['__EXTRAFIELD_XXX__'] = '__EXTRAFIELD_XXX__'; + + $substitutionarray['__THIRDPARTY_ID__'] = '__THIRDPARTY_ID__'; + $substitutionarray['__THIRDPARTY_NAME__'] = '__THIRDPARTY_NAME__'; + + $substitutionarray['__PROJECT_ID__'] = '__PROJECT_ID__'; + $substitutionarray['__PROJECT_REF__'] = '__PROJECT_REF__'; + $substitutionarray['__PROJECT_NAME__'] = '__PROJECT_REF__'; + + $substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATE__'] = 'Date for next expired service'; + $substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = 'Date and hour for next expired service'; + + $substitutionarray['__ONLINE_PAYMENT_URL__'] = 'LinkToPayOnlineIfApplicable'; + $substitutionarray['__SECUREKEYPAYMENT__'] = 'Security key (if key is not unique per record)'; + $substitutionarray['__SECUREKEYPAYMENT_MEMBER__'] = 'Security key for payment on a member subscription (one key per member)'; + $substitutionarray['__SECUREKEYPAYMENT_ORDER__'] = 'Security key for payment on an order'; + $substitutionarray['__SECUREKEYPAYMENT_INVOICE__'] = 'Security key for payment on an invoice'; + $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__'] = 'Security key for payment on a a service'; } - - if (is_object($object->projet) && $object->projet->id > 0) + else { - $substitutionarray['__PROJECT_ID__'] = (is_object($object->projet)?$object->projet->id:''); - $substitutionarray['__PROJECT_REF__'] = (is_object($object->projet)?$object->projet->ref:''); - $substitutionarray['__PROJECT_NAME__'] = (is_object($object->projet)?$object->projet->title:''); - } + $substitutionarray['__ID__'] = $object->id; + $substitutionarray['__REF__'] = $object->ref; + $substitutionarray['__REFCLIENT__'] = (isset($object->ref_client) ? $object->ref_client : (isset($object->ref_customer) ? $object->ref_customer : '')); + $substitutionarray['__REFSUPPLIER__'] = (isset($object->ref_supplier) ? $object->ref_supplier : ''); - // Create dynamic tags for __EXTRAFIELD_FIELD__ - if ($object->table_element && $object->id > 0) - { - $extrafieldstmp = new ExtraFields($db); - $extralabels = $extrafieldstmp->fetch_name_optionals_label($object->table_element, true); - $object->fetch_optionals($object->id, $extralabels); - foreach ($extrafieldstmp->attribute_label as $key => $label) { - $substitutionarray['__EXTRAFIELD_' . strtoupper($key) . '__'] = $object->array_options['options_' . $key]; + if (is_object($object->thirdparty) && $object->thirdparty->id > 0) + { + $substitutionarray['__THIRDPARTY_ID__'] = (is_object($object->thirdparty)?$object->thirdparty->id:''); + $substitutionarray['__THIRDPARTY_NAME__'] = (is_object($object->thirdparty)?$object->thirdparty->name:''); } - } - $substitutionarray['__ONLINE_PAYMENT_URL__'] = 'LinkToPayOnlineIfApplicable'; + if (is_object($object->projet) && $object->projet->id > 0) + { + $substitutionarray['__PROJECT_ID__'] = (is_object($object->projet)?$object->projet->id:''); + $substitutionarray['__PROJECT_REF__'] = (is_object($object->projet)?$object->projet->ref:''); + $substitutionarray['__PROJECT_NAME__'] = (is_object($object->projet)?$object->projet->title:''); + } + + // Create dynamic tags for __EXTRAFIELD_FIELD__ + if ($object->table_element && $object->id > 0) + { + $extrafieldstmp = new ExtraFields($db); + $extralabels = $extrafieldstmp->fetch_name_optionals_label($object->table_element, true); + $object->fetch_optionals($object->id, $extralabels); + foreach ($extrafieldstmp->attribute_label as $key => $label) { + $substitutionarray['__EXTRAFIELD_' . strtoupper($key) . '__'] = $object->array_options['options_' . $key]; + } + } + + $substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATE__'] = 'TODO'; + $substitutionarray['__CONTRACT_NEXT_EXPIRATION_DATETIME__'] = 'TODO'; + + $substitutionarray['__ONLINE_PAYMENT_URL__'] = 'TODO'; + } } if (empty($exclude) || ! in_array('objectamount', $exclude)) { @@ -5280,41 +5311,35 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob { include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php'; - if (! empty($onlykey)) - { - $tmp=$tmp2=$tmp3=$tmp4=$tmp5=array(); - } - else - { - $tmp=dol_getdate(dol_now(), true); - $tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']); - $tmp3=dol_get_prev_month($tmp['mday'], $tmp['mon'], $tmp['year']); - $tmp4=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']); - $tmp5=dol_get_next_month($tmp['mday'], $tmp['mon'], $tmp['year']); - } + $tmp=dol_getdate(dol_now(), true); + $tmp2=dol_get_prev_day($tmp['mday'], $tmp['mon'], $tmp['year']); + $tmp3=dol_get_prev_month($tmp['mday'], $tmp['mon'], $tmp['year']); + $tmp4=dol_get_next_day($tmp['mday'], $tmp['mon'], $tmp['year']); + $tmp5=dol_get_next_month($tmp['mday'], $tmp['mon'], $tmp['year']); + $substitutionarray=array_merge($substitutionarray, array( - '__DAY__' => $tmp['mday'], - '__MONTH__' => $tmp['mon'], - '__YEAR__' => $tmp['year'], - '__PREVIOUS_DAY__' => $tmp2['day'], - '__PREVIOUS_MONTH__' => $tmp3['month'], - '__PREVIOUS_YEAR__' => ($tmp['year'] - 1), - '__NEXT_DAY__' => $tmp4['day'], - '__NEXT_MONTH__' => $tmp5['month'], - '__NEXT_YEAR__' => ($tmp['year'] + 1), + '__DAY__' => (string) $tmp['mday'], + '__MONTH__' => (string) $tmp['mon'], + '__YEAR__' => (string) $tmp['year'], + '__PREVIOUS_DAY__' => (string) $tmp2['day'], + '__PREVIOUS_MONTH__' => (string) $tmp3['month'], + '__PREVIOUS_YEAR__' => (string) ($tmp['year'] - 1), + '__NEXT_DAY__' => (string) $tmp4['day'], + '__NEXT_MONTH__' => (string) $tmp5['month'], + '__NEXT_YEAR__' => (string) ($tmp['year'] + 1), )); } if (empty($exclude) || ! in_array('user', $exclude)) { $substitutionarray=array_merge($substitutionarray, array( - '__USER_ID__' => $user->id, - '__USER_LOGIN__' => $user->login, - '__USER_LASTNAME__' => $user->lastname, - '__USER_FIRSTNAME__' => $user->firstname, - '__USER_FULLNAME__' => $user->getFullName($outputlangs), - '__USER_SUPERVISOR_ID__' => $user->fk_user, - '__SIGNATURE__' => (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($user->signature), 30) : $user->signature) : '') + '__USER_ID__' => (string) $user->id, + '__USER_LOGIN__' => (string) $user->login, + '__USER_LASTNAME__' => (string) $user->lastname, + '__USER_FIRSTNAME__' => (string) $user->firstname, + '__USER_FULLNAME__' => (string) $user->getFullName($outputlangs), + '__USER_SUPERVISOR_ID__' => (string) $user->fk_user, + '__SIGNATURE__' => (string) (($user->signature && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN)) ? ($onlykey == 2 ? dol_trunc(dol_string_nohtmltag($user->signature), 30) : $user->signature) : '') )); } if (! empty($conf->multicompany->enabled)) @@ -5369,8 +5394,8 @@ function make_substitutions($text, $substitutionarray, $outputlangs=null) } /** - * Complete the $substitutionarray with more entries. - * Can also add substitution keys coming from external module that had set the "substitutions=1" into module_part array. In this case, method completesubstitutionarray provided by module is called. + * Complete the $substitutionarray with more entries coming from external module that had set the "substitutions=1" into module_part array. + * In this case, method completesubstitutionarray provided by module is called. * * @param array $substitutionarray Array substitution old value => new value value * @param Translate $outputlangs Output language @@ -5386,13 +5411,8 @@ function complete_substitutions_array(&$substitutionarray, $outputlangs, $object require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; - // Add a substitution key for each object property - if (is_object($object)) - { - // TODO - } - // Add a substitution key for each extrafields, using key __EXTRA_XXX__ + // TODO Remove this. Already available into the getCommonSubstitutionArray used to build the substitution array. if (is_object($object) && is_array($object->array_options)) { foreach($object->array_options as $key => $val) diff --git a/htdocs/core/tpl/card_presend.tpl.php b/htdocs/core/tpl/card_presend.tpl.php index 062e9777b40..5273a761d4e 100644 --- a/htdocs/core/tpl/card_presend.tpl.php +++ b/htdocs/core/tpl/card_presend.tpl.php @@ -139,7 +139,7 @@ if ($action == 'presend') // Make substitution in email content $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $object); $substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '' : ''; - $substitutionarray['__PERSONALIZED__'] = ''; + $substitutionarray['__PERSONALIZED__'] = ''; // deprecated $substitutionarray['__CONTACTCIVNAME__'] = ''; // Add specific substitution for contracts if (is_object($object) && $object->element == 'contrat' && is_array($object->lines)) diff --git a/htdocs/core/tpl/massactions_form.tpl.php b/htdocs/core/tpl/massactions_form.tpl.php index 4f8c7d15aeb..00ca40daf37 100644 --- a/htdocs/core/tpl/massactions_form.tpl.php +++ b/htdocs/core/tpl/massactions_form.tpl.php @@ -117,7 +117,7 @@ $formmail->withcancel = 1; $substitutionarray = getCommonSubstitutionArray($langs, 0, null, $object); $substitutionarray['__EMAIL__'] = $sendto; $substitutionarray['__CHECK_READ__'] = (is_object($object) && is_object($object->thirdparty)) ? '' : ''; -$substitutionarray['__PERSONALIZED__'] = ''; +$substitutionarray['__PERSONALIZED__'] = ''; // deprecated $substitutionarray['__CONTACTCIVNAME__'] = ''; // Add specific substitution for contracts if (is_object($object) && $object->element == 'contrat' && is_array($object->lines)) diff --git a/htdocs/societe/card.php b/htdocs/societe/card.php index 80d6799e278..3b56046e55f 100644 --- a/htdocs/societe/card.php +++ b/htdocs/societe/card.php @@ -2488,7 +2488,7 @@ else $formmail->setSubstitFromObject($object); $formmail->substit['__THIRDPARTY_ID__']=$object->id; // substit in setSubstitFromObject was wrong for this one $formmail->substit['__THIRDPARTY_NAME__']=$object->name; // substit in setSubstitFromObject was wrong for this one - $formmail->substit['__PERSONALIZED__']=''; + $formmail->substit['__PERSONALIZED__']=''; // deprecated $formmail->substit['__CONTACTCIVNAME__']=''; //Find the good contact adress diff --git a/scripts/emailings/mailing-send.php b/scripts/emailings/mailing-send.php index 0de6ca4f5fd..a6cf54ab40d 100755 --- a/scripts/emailings/mailing-send.php +++ b/scripts/emailings/mailing-send.php @@ -163,22 +163,25 @@ if ($resql) $tmpfield=explode('=',$other[4],2); $other5=(isset($tmpfield[1])?$tmpfield[1]:$tmpfield[0]); $signature = ((!empty($user->signature) && empty($conf->global->MAIN_MAIL_DO_NOT_USE_SIGN))?$user->signature:''); - // Array of possible substitutions (See also file mailing-send.php that should manage same substitutions) - $substitutionarray=array( - '__ID__' => $obj2->source_id, - '__EMAIL__' => $obj2->email, - '__LASTNAME__' => $obj2->lastname, - '__FIRSTNAME__' => $obj2->firstname, - '__MAILTOEMAIL__' => ''.$obj2->email.'', - '__OTHER1__' => $other1, - '__OTHER2__' => $other2, - '__OTHER3__' => $other3, - '__OTHER4__' => $other4, - '__OTHER5__' => $other5, - '__SIGNATURE__' => $signature, // Signature is empty when ran from command line or taken from user in parameter) - '__CHECK_READ__' => '', - '__UNSUBSCRIBE__' => ''.$langs->trans("MailUnsubcribe").'' - ); + $object = null; // Not defined with mass emailing + $parameters=array('mode'=>'emailing'); + $substitutionarray=getCommonSubstitutionArray($langs, 2, array('object','objectamount'), $object); // Note: On mass emailing, this is null because we don't know object + + // Array of possible substitutions (See also file mailing-send.php that should manage same substitutions) + $substitutionarray['__ID__'] = $obj->source_id; + $substitutionarray['__EMAIL__'] = $obj->email; + $substitutionarray['__LASTNAME__'] = $obj->lastname; + $substitutionarray['__FIRSTNAME__'] = $obj->firstname; + $substitutionarray['__MAILTOEMAIL__'] = ''.$obj->email.''; + $substitutionarray['__OTHER1__'] = $other1; + $substitutionarray['__OTHER2__'] = $other2; + $substitutionarray['__OTHER3__'] = $other3; + $substitutionarray['__OTHER4__'] = $other4; + $substitutionarray['__OTHER5__'] = $other5; + $substitutionarray['__SIGNATURE__'] = $signature; // Signature is empty when ran from command line or taken from user in parameter) + $substitutionarray['__CHECK_READ__'] = ''; + $substitutionarray['__UNSUBSCRIBE__'] = ''.$langs->trans("MailUnsubcribe").''; + $onlinepaymentenabled = 0; if (! empty($conf->paypal->enabled)) $onlinepaymentenabled++; if (! empty($conf->paybox->enabled)) $onlinepaymentenabled++; @@ -186,18 +189,20 @@ if ($resql) if ($onlinepaymentenabled && ! empty($conf->global->PAYMENT_SECURITY_TOKEN)) { $substitutionarray['__SECUREKEYPAYMENT__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2); - - if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); - else $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); + if (empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) + { + $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN, 2); + } + else + { + $substitutionarray['__SECUREKEYPAYMENT_MEMBER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'membersubscription' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_ORDER__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'order' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_INVOICE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'invoice' . $obj->source_id, 2); + $substitutionarray['__SECUREKEYPAYMENT_CONTRACTLINE__']=dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); + } } /* For backward compatibility */ if (! empty($conf->paypal->enabled) && ! empty($conf->global->PAYPAL_SECURITY_TOKEN)) @@ -216,6 +221,7 @@ if ($resql) if (empty($conf->global->PAYPAL_SECURITY_TOKEN_UNIQUE)) $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN, 2); else $substitutionarray['__SECUREKEYPAYPAL_CONTRACTLINE__']=dol_hash($conf->global->PAYPAL_SECURITY_TOKEN . 'contractline' . $obj->source_id, 2); } + complete_substitutions_array($substitutionarray,$langs); $newsubject=make_substitutions($subject,$substitutionarray); $newmessage=make_substitutions($message,$substitutionarray);