diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php index e23d2ce01a9..d6c4c0a6313 100644 --- a/htdocs/core/actions_sendmails.inc.php +++ b/htdocs/core/actions_sendmails.inc.php @@ -190,10 +190,12 @@ if (($action == 'send' || $action == 'relance') && !$_POST['addfile'] && !$_POST { $tmparray[] = dol_string_nospecial($contact->getFullName($langs), ' ', array(",")).' <'.$contact->email.'>'; } - elseif ($val) // $val is the Id of a contact + elseif ((int) $val > 0) // $val is the Id of a contact { $tmparray[] = $thirdparty->contact_get_property((int) $val, 'email'); $sendtoid[] = $val; + } else { + $tmparray[] = $val; } } } @@ -240,10 +242,12 @@ if (($action == 'send' || $action == 'relance') && !$_POST['addfile'] && !$_POST { $tmparray[] = dol_string_nospecial($contact->name, ' ', array(",")).' <'.$contact->email.'>'; } - elseif ($val) // $val is the Id of a contact + elseif ((int) $val > 0) // $val is the Id of a contact { $tmparray[] = $thirdparty->contact_get_property((int) $val, 'email'); //$sendtoid[] = $val; TODO Add also id of contact in CC ? + } else { + $tmparray[] = $val; } } } diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index 622ffb1d127..6d1ce33b0be 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -6621,10 +6621,11 @@ class Form * @param string $elemtype Type of element we show ('category', ...). Will execute a formating function on it. To use in readonly mode if js component support HTML formatting. * @param string $placeholder String to use as placeholder * @param int $addjscombo Add js combo + * @param int $enablefreetag 0 no free tag, 1 enable free tag for elemtype * @return string HTML multiselect string * @see selectarray(), selectArrayAjax(), selectArrayFilter() */ - public static function multiselectarray($htmlname, $array, $selected = array(), $key_in_label = 0, $value_as_key = 0, $morecss = '', $translate = 0, $width = 0, $moreattrib = '', $elemtype = '', $placeholder = '', $addjscombo = -1) + public static function multiselectarray($htmlname, $array, $selected = array(), $key_in_label = 0, $value_as_key = 0, $morecss = '', $translate = 0, $width = 0, $moreattrib = '', $elemtype = '', $placeholder = '', $addjscombo = -1, $enablefreetag = 0) { global $conf, $langs; @@ -6666,13 +6667,50 @@ class Form $out .= '$(document).ready(function () { $(\'#'.$htmlname.'\').'.$tmpplugin.'({ dir: \'ltr\', + tags: '.($enablefreetag?'true':'false').', // Specify format function for dropdown item formatResult: formatResult, - templateResult: formatResult, /* For 4.0 */ + /* For 4.0 */ + templateResult: formatResult, // Specify format function for selected item formatSelection: formatSelection, - templateSelection: formatSelection /* For 4.0 */ - }); + /* For 4.0 */ + templateSelection: formatSelection'; + if ($enablefreetag && $elemtype == 'email') { + $out .= ', + createTag: function (params) { + var REGEX_EMAIL = "([a-z0-9!#$%&\'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+/=?^_`{|}~-]+)*@" + + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"; + // Dont offset to create a tag if there is no @ symbol + if (params.term.indexOf("@") === -1) { + // Return null to disable tag creation + return null; + } + var match = params.term.match(new RegExp("^([^<]*)\<" + REGEX_EMAIL + "\>$", "i")); + // console.log(match); + if (match !== null) { + return { + id: $.trim(match[1]) + " <" + match[2] + ">", + text: $.trim(match[1]) + " <" + match[2] + ">" + } + } + if (params.term.indexOf("<") >= 0) { + // Return null to disable tag creation + return null; + } + var match = params.term.match(new RegExp("^" + REGEX_EMAIL + "$", "i")); + // console.log(match); + if (match !== null) { + var pos = params.term.indexOf("@"); + return { + id: $.trim(match[1].substring(0, pos)) + " <" + match[1] + ">", + text: $.trim(match[1].substring(0, pos)) + " <" + match[1] + ">" + } + } + return null; + }'; + } + $out .= ' }); });'."\n"; } elseif ($addjscombo == 2) diff --git a/htdocs/core/class/html.formmail.class.php b/htdocs/core/class/html.formmail.class.php index d961cd20536..8881b93349f 100644 --- a/htdocs/core/class/html.formmail.class.php +++ b/htdocs/core/class/html.formmail.class.php @@ -630,7 +630,7 @@ class FormMail extends Form if (!empty($this->withto) || is_array($this->withto)) { $out .= '