diff --git a/htdocs/comm/mailing/advtargetemailing.php b/htdocs/comm/mailing/advtargetemailing.php
index 9cd40a55b8b..362bec914b6 100644
--- a/htdocs/comm/mailing/advtargetemailing.php
+++ b/htdocs/comm/mailing/advtargetemailing.php
@@ -189,6 +189,10 @@ if ($action == 'add') {
}
}
+ if ($array_query['type_of_target'] == 2 || $array_query['type_of_target'] == 4) {
+ $user_contact_query = true;
+ }
+
if (preg_match("/^type_of_target/", $key)) {
$array_query[$key] = GETPOST($key);
}
@@ -203,8 +207,8 @@ if ($action == 'add') {
$advTarget->thirdparty_lines = array ();
}*/
- if ($user_contact_query && ($array_query['type_of_target'] == 1 || $array_query['type_of_target'] == 2)) {
- $result = $advTarget->query_contact($array_query);
+ if ($user_contact_query && ($array_query['type_of_target'] == 1 || $array_query['type_of_target'] == 2 || $array_query['type_of_target'] == 4)) {
+ $result = $advTarget->query_contact($array_query, 1);
if ($result < 0) {
setEventMessage($advTarget->error, 'errors');
}
@@ -889,6 +893,11 @@ if ($object->fetch($id) >= 0) {
dol_include_once('/core/class/extrafields.class.php');
$extrafields = new ExtraFields($db);
$extralabels = $extrafields->fetch_name_optionals_label('socpeople');
+ foreach($extrafields->attribute_type as $key=>&$value) {
+ if($value == 'radio')$value = 'select';
+ }
+
+
foreach ( $extralabels as $key => $val ) {
print '
| ' . $extrafields->attribute_label[$key];
@@ -900,8 +909,8 @@ if ($object->fetch($id) >= 0) {
print ' | ' . "\n";
print $form->textwithpicto('', $langs->trans("AdvTgtSearchTextHelp"), 1, 'help');
} elseif (($extrafields->attribute_type[$key] == 'int') || ($extrafields->attribute_type[$key] == 'double')) {
- print $langs->trans("AdvTgtMinVal") . '';
- print $langs->trans("AdvTgtMaxVal") . '';
+ print $langs->trans("AdvTgtMinVal") . '';
+ print $langs->trans("AdvTgtMaxVal") . '';
print ' | ' . "\n";
print $form->textwithpicto('', $langs->trans("AdvTgtSearchIntHelp"), 1, 'help');
} elseif (($extrafields->attribute_type[$key] == 'date') || ($extrafields->attribute_type[$key] == 'datetime')) {
@@ -967,12 +976,6 @@ if ($object->fetch($id) >= 0) {
print '';
print ' ';
}
-
-
- if (empty($conf->mailchimp->enabled) || (! empty($conf->mailchimp->enabled) && $object->statut != 3))
- {
- // List of recipients (TODO Move code of page cibles.php into a .tpl.php file and make an include here to avoid duplicate content)
- }
}
llxFooter();
diff --git a/htdocs/comm/mailing/class/advtargetemailing.class.php b/htdocs/comm/mailing/class/advtargetemailing.class.php
index 62cf5f2436f..453d1f75319 100644
--- a/htdocs/comm/mailing/class/advtargetemailing.class.php
+++ b/htdocs/comm/mailing/class/advtargetemailing.class.php
@@ -64,16 +64,19 @@ class AdvanceTargetingMailing extends CommonObject
$this->db = $db;
- $this->select_target_type = array('2'=>$langs->trans('Contacts'),'1'=>$langs->trans('Contacts').'+'.$langs->trans('ThirdParty'),
- '3'=>$langs->trans('ThirdParty'),
- );
- $this->type_statuscommprospect=array(
- -1=>$langs->trans("StatusProspect-1"),
- 0=>$langs->trans("StatusProspect0"),
- 1=>$langs->trans("StatusProspect1"),
- 2=>$langs->trans("StatusProspect2"),
- 3=>$langs->trans("StatusProspect3"));
-
+ $this->select_target_type = array(
+ '2' => $langs->trans('Contacts'),
+ '1' => $langs->trans('Contacts') . '+' . $langs->trans('ThirdParty'),
+ '3' => $langs->trans('ThirdParty'),
+ '4' => $langs->trans('ContactsWithThirdpartyFilter')
+ );
+ $this->type_statuscommprospect = array(
+ - 1 => $langs->trans("StatusProspect-1"),
+ 0 => $langs->trans("StatusProspect0"),
+ 1 => $langs->trans("StatusProspect1"),
+ 2 => $langs->trans("StatusProspect2"),
+ 3 => $langs->trans("StatusProspect3")
+ );
return 1;
}
@@ -492,7 +495,7 @@ class AdvanceTargetingMailing extends CommonObject
}
if (!empty($arrayquery['cust_mothercompany'])) {
$str=$this->transformToSQL('nom',$arrayquery['cust_mothercompany']);
- $sqlwhere[]= " (t.parent IN (SELECT rowid FROM " . MAIN_DB_PREFIX . "societe WHERE ('.$str.')))";
+ $sqlwhere[]= " (t.parent IN (SELECT rowid FROM " . MAIN_DB_PREFIX . "societe WHERE (".$str.")))";
}
if (!empty($arrayquery['cust_status']) && count($arrayquery['cust_status'])>0) {
$sqlwhere[]= " (t.status IN (".implode(',',$arrayquery['cust_status'])."))";
@@ -603,9 +606,10 @@ class AdvanceTargetingMailing extends CommonObject
* Load object in memory from database
*
* @param array $arrayquery All element to Query
+ * @param int $withThirdpartyFilter add contact with tridparty filter
* @return int <0 if KO, >0 if OK
*/
- function query_contact($arrayquery)
+ function query_contact($arrayquery, $withThirdpartyFilter = 0)
{
global $langs,$conf;
@@ -614,6 +618,11 @@ class AdvanceTargetingMailing extends CommonObject
$sql.= " FROM " . MAIN_DB_PREFIX . "socpeople as t";
$sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "socpeople_extrafields as te ON te.fk_object=t.rowid ";
+ if (! empty($withThirdpartyFilter)) {
+ $sql .= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "societe as ts ON ts.rowid=t.fk_soc";
+ $sql .= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "societe_extrafields as tse ON tse.fk_object=ts.rowid ";
+ }
+
$sqlwhere=array();
$sqlwhere[]= 't.entity IN ('.getEntity('socpeople',1).')';
@@ -694,14 +703,107 @@ class AdvanceTargetingMailing extends CommonObject
}
+ if (! empty($withThirdpartyFilter)) {
+ if (array_key_exists('cust_saleman', $arrayquery)) {
+ $sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "societe_commerciaux as saleman ON saleman.fk_soc=ts.rowid ";
+ }
+ if (array_key_exists('cust_categ', $arrayquery)) {
+ $sql.= " LEFT OUTER JOIN " . MAIN_DB_PREFIX . "categorie_societe as custcateg ON custcateg.fk_soc=ts.rowid ";
+ }
+ if (!empty($arrayquery['cust_name'])) {
+
+ $sqlwhere[]= $this->transformToSQL('ts.nom',$arrayquery['cust_name']);
+ }
+ if (!empty($arrayquery['cust_code'])) {
+ $sqlwhere[]= $this->transformToSQL('ts.code_client',$arrayquery['cust_code']);
+ }
+ if (!empty($arrayquery['cust_adress'])) {
+ $sqlwhere[]= $this->transformToSQL('ts.address',$arrayquery['cust_adress']);
+ }
+ if (!empty($arrayquery['cust_zip'])) {
+ $sqlwhere[]= $this->transformToSQL('ts.zip',$arrayquery['cust_zip']);
+ }
+ if (!empty($arrayquery['cust_city'])) {
+ $sqlwhere[]= $this->transformToSQL('ts.town',$arrayquery['cust_city']);
+ }
+ if (!empty($arrayquery['cust_mothercompany'])) {
+ $str=$this->transformToSQL('nom',$arrayquery['cust_mothercompany']);
+ $sqlwhere[]= " (ts.parent IN (SELECT rowid FROM " . MAIN_DB_PREFIX . "societe WHERE (".$str.")))";
+ }
+ if (!empty($arrayquery['cust_status']) && count($arrayquery['cust_status'])>0) {
+ $sqlwhere[]= " (ts.status IN (".implode(',',$arrayquery['cust_status'])."))";
+ }
+ if (!empty($arrayquery['cust_typecust']) && count($arrayquery['cust_typecust'])>0) {
+ $sqlwhere[]= " (ts.client IN (".implode(',',$arrayquery['cust_typecust'])."))";
+ }
+ if (!empty($arrayquery['cust_comm_status']) && count($arrayquery['cust_comm_status']>0)) {
+ $sqlwhere[]= " (ts.fk_stcomm IN (".implode(',',$arrayquery['cust_comm_status'])."))";
+ }
+ if (!empty($arrayquery['cust_prospect_status']) && count($arrayquery['cust_prospect_status'])>0) {
+ $sqlwhere[]= " (ts.fk_prospectlevel IN ('".implode("','",$arrayquery['cust_prospect_status'])."'))";
+ }
+ if (!empty($arrayquery['cust_typeent']) && count($arrayquery['cust_typeent'])>0) {
+ $sqlwhere[]= " (ts.fk_typent IN (".implode(',',$arrayquery['cust_typeent'])."))";
+ }
+ if (!empty($arrayquery['cust_saleman']) && count($arrayquery['cust_saleman'])>0) {
+ $sqlwhere[]= " (saleman.fk_user IN (".implode(',',$arrayquery['cust_saleman'])."))";
+ }
+ if (!empty($arrayquery['cust_country']) && count($arrayquery['cust_country'])>0) {
+ $sqlwhere[]= " (ts.fk_pays IN (".implode(',',$arrayquery['cust_country'])."))";
+ }
+ if (!empty($arrayquery['cust_effectif_id']) && count($arrayquery['cust_effectif_id'])>0) {
+ $sqlwhere[]= " (ts.fk_effectif IN (".implode(',',$arrayquery['cust_effectif_id'])."))";
+ }
+ if (!empty($arrayquery['cust_categ']) && count($arrayquery['cust_categ'])>0) {
+ $sqlwhere[]= " (custcateg.fk_categorie IN (".implode(',',$arrayquery['cust_categ'])."))";
+ }
+ if (!empty($arrayquery['cust_language']) && count($arrayquery['cust_language'])>0) {
+ $sqlwhere[]= " (ts.default_lang IN ('".implode("','",$arrayquery['cust_language'])."'))";
+ }
+
+ //Standard Extrafield feature
+ if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) {
+ // fetch optionals attributes and labels
+ dol_include_once('/core/class/extrafields.class.php');
+ $extrafields = new ExtraFields($this->db);
+ $extralabels=$extrafields->fetch_name_optionals_label('societe');
+
+ foreach($extralabels as $key=>$val) {
+
+ if (($extrafields->attribute_type[$key] == 'varchar') ||
+ ($extrafields->attribute_type[$key] == 'text')) {
+ if (!empty($arrayquery['options_'.$key])) {
+ $sqlwhere[]= " (tse.".$key." LIKE '".$arrayquery['options_'.$key]."')";
+ }
+ } elseif (($extrafields->attribute_type[$key] == 'int') ||
+ ($extrafields->attribute_type[$key] == 'double')) {
+ if (!empty($arrayquery['options_'.$key.'_max'])) {
+ $sqlwhere[]= " (tse.".$key." >= ".$arrayquery['options_'.$key.'_max']." AND tse.".$key." <= ".$arrayquery['options_'.$key.'_min'].")";
+ }
+ } else if (($extrafields->attribute_type[$key] == 'date') ||
+ ($extrafields->attribute_type[$key] == 'datetime')) {
+ if (!empty($arrayquery['options_'.$key.'_end_dt'])){
+ $sqlwhere[]= " (tse.".$key." >= '".$this->db->idate($arrayquery['options_'.$key.'_st_dt'])."' AND tse.".$key." <= '".$this->db->idate($arrayquery['options_'.$key.'_end_dt'])."')";
+ }
+ }else if ($extrafields->attribute_type[$key] == 'boolean') {
+ if ($arrayquery['options_'.$key]!=''){
+ $sqlwhere[]= " (tse.".$key." = ".$arrayquery['options_'.$key].")";
+ }
+ }else{
+ if (is_array($arrayquery['options_'.$key])) {
+ $sqlwhere[]= " (tse.".$key." IN ('".implode("','",$arrayquery['options_'.$key])."'))";
+ } elseif (!empty($arrayquery['options_'.$key])) {
+ $sqlwhere[]= " (tse.".$key." LIKE '".$arrayquery['options_'.$key]."')";
+ }
+ }
+ }
+ }
+ }
}
-
if (count($sqlwhere)>0) $sql.= " WHERE ".implode(" AND ",$sqlwhere);
-
}
-
dol_syslog(get_class($this) . "::query_contact sql=" . $sql, LOG_DEBUG);
$resql = $this->db->query($sql);
if ($resql) {
diff --git a/htdocs/core/lib/emailing.lib.php b/htdocs/core/lib/emailing.lib.php
index 4c447e5583a..00a06ca3f09 100644
--- a/htdocs/core/lib/emailing.lib.php
+++ b/htdocs/core/lib/emailing.lib.php
@@ -45,16 +45,16 @@ function emailing_prepare_head(Mailing $object)
$head[$h][1] = $langs->trans("MailRecipients");
if ($object->nbemail > 0) $head[$h][1].= ' '.$object->nbemail.'';
$head[$h][2] = 'targets';
-
$h++;
- if (! empty($conf->global->EMAILING_USE_ADVANCED_SELECTOR))
- {
- $head[$h][0] = DOL_URL_ROOT."/comm/mailing/advtargetemailing.php?id=".$object->id;
- $head[$h][1] = $langs->trans("MailAdvTargetRecipients");
- $head[$h][2] = 'advtargets';
- $h++;
- }
+ }
+
+ if (! empty($conf->global->EMAILING_USE_ADVANCED_SELECTOR))
+ {
+ $head[$h][0] = DOL_URL_ROOT."/comm/mailing/advtargetemailing.php?id=".$object->id;
+ $head[$h][1] = $langs->trans("MailAdvTargetRecipients");
+ $head[$h][2] = 'advtargets';
+ $h++;
}
$head[$h][0] = DOL_URL_ROOT."/comm/mailing/info.php?id=".$object->id;
diff --git a/htdocs/install/inc.php b/htdocs/install/inc.php
index eb7e77cfc24..1fa35f51e41 100644
--- a/htdocs/install/inc.php
+++ b/htdocs/install/inc.php
@@ -507,9 +507,8 @@ function detect_dolibarr_main_document_root()
{
// If PHP is in CGI mode, SCRIPT_FILENAME is PHP's path.
// Since that's not what we want, we suggest $_SERVER["DOCUMENT_ROOT"]
- if (preg_match('/php$/i', $_SERVER["SCRIPT_FILENAME"]) || preg_match('/[\\/]php$/i',
- $_SERVER["SCRIPT_FILENAME"]) || preg_match('/php\.exe$/i', $_SERVER["SCRIPT_FILENAME"])
- ) {
+ if ($_SERVER["SCRIPT_FILENAME"] == 'php' || preg_match('/[\\/]php$/i', $_SERVER["SCRIPT_FILENAME"]) || preg_match('/php\.exe$/i', $_SERVER["SCRIPT_FILENAME"]))
+ {
$dolibarr_main_document_root = $_SERVER["DOCUMENT_ROOT"];
if (!preg_match('/[\\/]dolibarr[\\/]htdocs$/i', $dolibarr_main_document_root)) {
diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang
index d036a72186b..83a344623aa 100644
--- a/htdocs/langs/en_US/mails.lang
+++ b/htdocs/langs/en_US/mails.lang
@@ -74,6 +74,7 @@ ResultOfMailSending=Result of mass EMail sending
NbSelected=Nb selected
NbIgnored=Nb ignored
NbSent=Nb sent
+ContactsWithThirdpartyFilter=Contact with customer filters
# Libelle des modules de liste de destinataires mailing
LineInFile=Line %s in file
|