diff --git a/htdocs/admin/mailing.php b/htdocs/admin/mailing.php
index 921a4a6338c..6e3341dcd8f 100644
--- a/htdocs/admin/mailing.php
+++ b/htdocs/admin/mailing.php
@@ -125,7 +125,7 @@ print '';
print '
| ';
print $langs->trans("MailingDelay").' | ';
-print '';
+print '';
print ' |
';
diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php
index e3cb5a9ad97..80692c1384d 100644
--- a/htdocs/comm/mailing/card.php
+++ b/htdocs/comm/mailing/card.php
@@ -346,7 +346,7 @@ if (empty($reshook))
if (!empty($conf->global->MAILING_DELAY))
{
dol_syslog("Wait a delay of MAILING_DELAY=".$conf->global->MAILING_DELAY);
- sleep($conf->global->MAILING_DELAY);
+ usleep((float) $conf->global->MAILING_DELAY * 1000000);
}
//test if CHECK READ change statut prospect contact
diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php
index d8d9873b88b..8bfa82260b9 100644
--- a/htdocs/comm/mailing/cibles.php
+++ b/htdocs/comm/mailing/cibles.php
@@ -481,11 +481,27 @@ if ($object->fetch($id) >= 0)
$sql .= " mc.source_url, mc.source_id, mc.source_type, mc.error_text";
$sql .= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
$sql .= " WHERE mc.fk_mailing=".$object->id;
- if ($search_lastname) $sql .= natural_search("mc.lastname", $search_lastname);
- if ($search_firstname) $sql .= natural_search("mc.firstname", $search_firstname);
- if ($search_email) $sql .= natural_search("mc.email", $search_email);
- if ($search_other) $sql .= natural_search("mc.other", $search_other);
- if ($search_dest_status != '' && $search_dest_status >= -1) $sql .= " AND mc.statut=".$db->escape($search_dest_status)." ";
+ $asearchcriteriahasbeenset = 0;
+ if ($search_lastname) {
+ $sql .= natural_search("mc.lastname", $search_lastname);
+ $asearchcriteriahasbeenset++;
+ }
+ if ($search_firstname) {
+ $sql .= natural_search("mc.firstname", $search_firstname);
+ $asearchcriteriahasbeenset++;
+ }
+ if ($search_email) {
+ $sql .= natural_search("mc.email", $search_email);
+ $asearchcriteriahasbeenset++;
+ }
+ if ($search_other) {
+ $sql .= natural_search("mc.other", $search_other);
+ $asearchcriteriahasbeenset++;
+ }
+ if ($search_dest_status != '' && $search_dest_status >= -1) {
+ $sql .= " AND mc.statut=".$db->escape($search_dest_status)." ";
+ $asearchcriteriahasbeenset++;
+ }
$sql .= $db->order($sortfield, $sortorder);
// Count total nb of records
@@ -499,6 +515,18 @@ if ($object->fetch($id) >= 0)
$page = 0;
$offset = 0;
}
+
+ // Fix/update nbemail on emailing record if it differs (may happen if user edit lines from database directly)
+ if (empty($asearchcriteriahasbeenset)) {
+ if ($nbtotalofrecords != $object->email) {
+ dol_syslog("We found a difference in nb of record in target table and the property ->nbemail, we fix ->nbemail");
+ //print "nbemail=".$object->nbemail." nbtotalofrecords=".$nbtotalofrecords;
+ $resultrefresh = $object->refreshNbOfTargets();
+ if ($resultrefresh < 0) {
+ dol_print_error($db, $object->error, $object->errors);
+ }
+ }
+ }
}
//$nbtotalofrecords=$object->nbemail; // nbemail is a denormalized field storing nb of targets
diff --git a/htdocs/comm/mailing/class/mailing.class.php b/htdocs/comm/mailing/class/mailing.class.php
index 56a115a2fea..75efe1f07b2 100644
--- a/htdocs/comm/mailing/class/mailing.class.php
+++ b/htdocs/comm/mailing/class/mailing.class.php
@@ -461,6 +461,8 @@ class Mailing extends CommonObject
$resql = $this->db->query($sql);
if ($resql)
{
+ $this->refreshNbOfTargets();
+
return 1;
}
else
@@ -532,6 +534,38 @@ class Mailing extends CommonObject
return 0;
}
+ /**
+ * 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";
+ $sql .= " WHERE fk_mailing = ".$this->id;
+
+ $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);
+ $sql .= ' WHERE rowid = '.$this->id;
+
+ $resqlupdate = $this->db->query($sql);
+ if (! $resqlupdate) {
+ $this->error = $this->db->lasterror();
+ return -1;
+ }
+ }
+ } else {
+ $this->error = $this->db->lasterror();
+ return -1;
+ }
+ return 1;
+ }
/**
* Return a link to the object card (with optionally the picto)
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index ccca1a85f47..0ec669afad8 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -1241,6 +1241,16 @@ class Product extends CommonObject
}
}
+ // Remove extrafields
+ if (!$error)
+ {
+ $result = $this->deleteExtraFields();
+ if ($result < 0) {
+ $error++;
+ dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
+ }
+ }
+
// Delete product
if (!$error) {
$sqlz = "DELETE FROM ".MAIN_DB_PREFIX."product";
@@ -1268,16 +1278,6 @@ class Product extends CommonObject
}
}
- // Remove extrafields
- if (!$error)
- {
- $result = $this->deleteExtraFields();
- if ($result < 0) {
- $error++;
- dol_syslog(get_class($this)."::delete error -4 ".$this->error, LOG_ERR);
- }
- }
-
if (!$error) {
$this->db->commit();
return 1;
diff --git a/htdocs/product/list.php b/htdocs/product/list.php
index d2f212df8da..50001d25026 100644
--- a/htdocs/product/list.php
+++ b/htdocs/product/list.php
@@ -240,6 +240,9 @@ $parameters = array();
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
+$rightskey = 'produit';
+if ($type == Product::TYPE_SERVICE) $rightskey = 'service';
+
if (empty($reshook))
{
// Selection of new fields
@@ -275,8 +278,8 @@ if (empty($reshook))
if ((string) $search_type == '1') { $objectlabel = 'Services'; }
if ((string) $search_type == '0') { $objectlabel = 'Products'; }
- $permissiontoread = $user->rights->produit->lire;
- $permissiontodelete = $user->rights->produit->supprimer;
+ $permissiontoread = $user->rights->{$rightskey}->lire;
+ $permissiontodelete = $user->rights->{$rightskey}->supprimer;
$uploaddir = $conf->product->dir_output;
include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
}
@@ -507,8 +510,6 @@ if ($resql)
//'builddoc'=>$langs->trans("PDFMerge"),
//'presend'=>$langs->trans("SendByMail"),
);
- $rightskey = 'produit';
- if ($type == Product::TYPE_SERVICE) $rightskey = 'service';
if ($user->rights->{$rightskey}->supprimer) $arrayofmassactions['predelete'] = "".$langs->trans("Delete");
if (in_array($massaction, array('presend', 'predelete'))) $arrayofmassactions = array();
$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
diff --git a/htdocs/projet/list.php b/htdocs/projet/list.php
index 5c36044dcd1..9bb383e9803 100644
--- a/htdocs/projet/list.php
+++ b/htdocs/projet/list.php
@@ -436,7 +436,7 @@ $arrayofmassactions = array(
);
//if($user->rights->societe->creer) $arrayofmassactions['createbills']=$langs->trans("CreateInvoiceForThisCustomer");
if ($user->rights->projet->creer) $arrayofmassactions['close'] = $langs->trans("Close");
-if ($user->rights->societe->supprimer) $arrayofmassactions['predelete'] = ''.$langs->trans("Delete");
+if ($user->rights->projet->supprimer) $arrayofmassactions['predelete'] = ''.$langs->trans("Delete");
if (in_array($massaction, array('presend', 'predelete'))) $arrayofmassactions = array();
$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
diff --git a/scripts/emailings/mailing-send.php b/scripts/emailings/mailing-send.php
index bc7efec7dba..5f93600f1be 100755
--- a/scripts/emailings/mailing-send.php
+++ b/scripts/emailings/mailing-send.php
@@ -60,6 +60,10 @@ $error = 0;
@set_time_limit(0);
print "***** ".$script_file." (".$version.") pid=".dol_getmypid()." *****\n";
+if (!empty($conf->global->MAILING_DELAY)) {
+ print 'A delay of '.((float) $conf->global->MAILING_DELAY * 1000000).' millisecond has been set between each email'."\n";
+}
+
if ($conf->global->MAILING_LIMIT_SENDBYCLI == '-1') {}
$user = new User($db);
@@ -318,7 +322,7 @@ if ($resql) {
}
if (!empty($conf->global->MAILING_DELAY)) {
- sleep($conf->global->MAILING_DELAY);
+ usleep((float) $conf->global->MAILING_DELAY * 1000000);
}
}
} else {