diff --git a/htdocs/blockedlog/admin/blockedlog_archives.php b/htdocs/blockedlog/admin/blockedlog_archives.php
index 3c37541cd4b..752605831d5 100644
--- a/htdocs/blockedlog/admin/blockedlog_archives.php
+++ b/htdocs/blockedlog/admin/blockedlog_archives.php
@@ -186,8 +186,8 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
}
*/
- $dates = dol_get_first_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 1);
- $datee = dol_get_last_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') ? GETPOSTINT('monthtoexport') : 12);
+ $dates = dol_get_first_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') > 0 ? GETPOSTINT('monthtoexport') : 1);
+ $datee = dol_get_last_day(GETPOSTINT('yeartoexport'), GETPOSTINT('monthtoexport') > 0 ? GETPOSTINT('monthtoexport') : 12);
if ($datee >= dol_now()) {
setEventMessages($langs->trans("ErrorPeriodMustBePastToAllowExport"), null, "errors");
@@ -280,7 +280,7 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
$fh = fopen($tmpfile, 'w');
// Print line with title
- fwrite($fh, "BEGIN - date=".$yearmonthdateofexport." - period=".$yearmonthtoexport
+ fwrite($fh, "BEGIN - date=".$yearmonthdateofexport." - period=".$yearmonthtoexport." - format=V1"
.';'.$langs->transnoentities('Id')
.';'.$langs->transnoentities('DateCreation')
.';'.$langs->transnoentities('Action')
@@ -295,6 +295,7 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
.';'.$langs->transnoentities('Fingerprint')
.';'.$langs->transnoentities('Status')
.';'.$langs->transnoentities('FingerprintExport')
+ .';'.$langs->transnoentities('FingerprintFormat')
//.';'.$langs->transnoentities('FingerprintExportHMAC')
."\n");
@@ -307,14 +308,13 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
$block_static->id = $obj->rowid;
$block_static->entity = $obj->entity;
-
- $block_static->date_creation = $db->jdate($obj->date_creation); // TODO Use gmt
+ $block_static->date_creation = $db->jdate($obj->date_creation); // jdate(date_creation) is UTC
$block_static->amounts = (float) $obj->amounts; // Database store value with 8 digits, we cut ending 0 them with (flow)
$block_static->vat = $obj->vat;
$block_static->action = $obj->action;
- $block_static->date_object = $db->jdate($obj->date_object); // TODO Use gmt ?
+ $block_static->date_object = $db->jdate($obj->date_object); // jdate(date_object) is UTC
$block_static->ref_object = $obj->ref_object;
$block_static->user_fullname = $obj->user_fullname;
@@ -341,7 +341,7 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
$block_static->debuginfo = $obj->debuginfo;
//var_dump($block->id.' '.$block->signature, $block->object_data);
- $checksignature = $block_static->checkSignature($previoushash); // If $previoushash is not defined, checkSignature will search it
+ $checksignature = $block_static->checkSignature($previoushash); // If $previoushash is not defined, checkSignature will search it
if ($checksignature) {
$statusofrecord = 'Valid';
@@ -360,8 +360,11 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
$statusofrecordnote = $langs->trans("PreviousFingerprint").': '.$previoushash.($statusofrecordnote ? ' - '.$statusofrecordnote : '');
}
- $signatureexport = 'TODO';
- $signatureexporthmac = 'TODO';
+ $concatenateddata = $block_static->buildKeyForSignature();
+
+ // Version archive V1=sha256
+ $signatureexport = dol_hash($previoushash.$concatenateddata, 'sha256'); // SHA256
+ //$signatureexporthmac = 'TODO';
fwrite($fh,
';'.$block_static->id
@@ -377,7 +380,8 @@ if (GETPOST('action') == 'export' && $user->hasRight('blockedlog', 'read')) { /
.';"'.str_replace('"', '""', $block_static->object_version).'";"'
.str_replace('"', '""', $block_static->signature).'";"'
.str_replace('"', '""', $statusofrecord).'";"'
- .str_replace('"', '""', $signatureexport).'";'
+ .str_replace('"', '""', $signatureexport).'";"'
+ .str_replace('"', '""', $block_static->object_format).'";'
//.str_replace('"', '""', $signatureexporthmac).'"'
//.';'.$statusofrecordnote
."\n");
diff --git a/htdocs/blockedlog/admin/blockedlog_list.php b/htdocs/blockedlog/admin/blockedlog_list.php
index 2a44e0b631c..9a40628312a 100644
--- a/htdocs/blockedlog/admin/blockedlog_list.php
+++ b/htdocs/blockedlog/admin/blockedlog_list.php
@@ -64,7 +64,7 @@ $search_startday = GETPOSTINT('search_startday');
$search_endyear = GETPOSTINT('search_endyear');
$search_endmonth = GETPOSTINT('search_endmonth');
$search_endday = GETPOSTINT('search_endday');
-$search_id = GETPOST('search_id', 'alpha');
+$search_id = GETPOST('search_id', 'alpha'); // Can be a USF search string
$search_fk_user = GETPOST('search_fk_user', 'intcomma');
$search_start = -1;
if (GETPOST('search_startyear') != '') {
@@ -384,7 +384,7 @@ $help_url = "EN:Module_Unalterable_Archives_-_Logs|FR:Module_Archives_-_Logs_Ina
llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'bodyforlist mod-blockedlog page-admin_blockedlog_list');
-$blocks = $block_static->getLog('all', (int) $search_id, $MAXLINES, $sortfield, $sortorder, (int) $search_fk_user, $search_start, $search_end, $search_ref, $search_amount, $search_code, $search_signature);
+$blocks = $block_static->getLog('all', (string) $search_id, $MAXLINES, $sortfield, $sortorder, (int) $search_fk_user, $search_start, $search_end, $search_ref, $search_amount, $search_code, $search_signature);
if (!is_array($blocks)) {
if ($blocks == -2) {
setEventMessages($langs->trans("TooManyRecordToScanRestrictFilters", $MAXLINES), null, 'errors');
diff --git a/htdocs/blockedlog/class/blockedlog.class.php b/htdocs/blockedlog/class/blockedlog.class.php
index 3981bca7afa..71a19dfa656 100644
--- a/htdocs/blockedlog/class/blockedlog.class.php
+++ b/htdocs/blockedlog/class/blockedlog.class.php
@@ -980,15 +980,15 @@ class BlockedLog
$this->id = $obj->rowid;
$this->entity = $obj->entity;
- $this->date_creation = $this->db->jdate($obj->date_creation); // TODO Use gmt ?
- $this->date_modification = $this->db->jdate($obj->tms); // TODO Use gmt ?
+ $this->date_creation = $this->db->jdate($obj->date_creation); // jdate(date_creation)is UTC
+ $this->date_modification = $this->db->jdate($obj->tms); // jdate(tms) is UTC
$this->amounts = (float) $obj->amounts;
$this->action = $obj->action;
$this->element = $obj->element;
$this->fk_object = $obj->fk_object;
- $this->date_object = $this->db->jdate($obj->date_object); // TODO Use gmt ?
+ $this->date_object = $this->db->jdate($obj->date_object); // jdate(date_object) is UTC
$this->ref_object = $obj->ref_object;
$this->fk_user = $obj->fk_user;
@@ -1132,9 +1132,9 @@ class BlockedLog
try {
$previoushash = $this->getPreviousHash(1, 0); // This get last record and lock database until insert is done and transaction closed
- $concatenatedata = $this->buildKeyForSignature(); // All the information for the hash (meta data + data saved)
+ $concatenateddata = $this->buildKeyForSignature(); // All the information for the hash (meta data + data saved)
- $this->signature = $this->buildFinalSignatureHash($previoushash.$concatenatedata); // Build the hmac signature
+ $this->signature = $this->buildFinalSignatureHash($previoushash.$concatenateddata); // Build the hmac signature
// For debug:
$this->debuginfo = $this->buildFirstPartOfKeyForSignature(); // Not used
@@ -1150,7 +1150,7 @@ class BlockedLog
if ($forcesignature) {
$this->signature = $forcesignature;
}
- //var_dump($concatenatedata);var_dump($previoushash);var_dump($this->signature);
+ //var_dump($concatenateddata);var_dump($previoushash);var_dump($this->signature);
$sql = "INSERT INTO ".MAIN_DB_PREFIX."blockedlog (";
$sql .= " date_creation,";
@@ -1232,15 +1232,15 @@ class BlockedLog
$previoushash = $this->getPreviousHash(0, $this->id);
}
- $concatenatedata = '';
+ $concatenateddata = '';
$signature = '';
// Recalculate the signature
try {
// Build the string for the signature
- $concatenatedata = $this->buildKeyForSignature();
+ $concatenateddata = $this->buildKeyForSignature();
- $signature = $this->buildFinalSignatureHash($previoushash.$concatenatedata);
+ $signature = $this->buildFinalSignatureHash($previoushash.$concatenateddata);
} catch (Exception $e) {
$res = ($signature === $this->signature);
$this->error = $e->getMessage();
@@ -1262,13 +1262,13 @@ class BlockedLog
if ($returnarray) {
if ($returnarray == 1) {
- unset($concatenatedata);
+ unset($concatenateddata);
return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash);
- } else { // Consume much memory ($concatenatedata is a large var)
- return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash, 'keyforsignature' => $concatenatedata);
+ } else { // Consume much memory ($concatenateddata is a large var)
+ return array('checkresult' => $res, 'calculatedsignature' => $signature, 'previoushash' => $previoushash, 'keyforsignature' => $concatenateddata);
}
} else {
- unset($concatenatedata);
+ unset($concatenateddata);
return $res;
}
}
@@ -1299,12 +1299,10 @@ class BlockedLog
/**
* Return the string for signature (clear data).
- * Note: rowid of line not included as it is not a business data and this allow to make backup of a year
- * and restore it into another database with different ids without comprimising checksums
*
* @return string Key for signature
*/
- private function buildKeyForSignature()
+ public function buildKeyForSignature()
{
//print_r($this->object_data);
if ($this->object_format == '') {
@@ -1415,7 +1413,7 @@ class BlockedLog
* Return array of log objects (with criteria)
*
* @param string $element Element to search
- * @param int $fk_object Id of object to search
+ * @param string|int $fk_object Id of object to search. Can be a UFS search criteria.
* @param int<0,max> $limit Max number of element, 0 for all
* @param string $sortfield Sort field
* @param string $sortorder Sort order
diff --git a/htdocs/commande/list_det.php b/htdocs/commande/list_det.php
index 8cd8008bee6..037a23c4cd6 100644
--- a/htdocs/commande/list_det.php
+++ b/htdocs/commande/list_det.php
@@ -36,6 +36,13 @@
*/
require '../main.inc.php';
+/**
+ * @var Conf $conf
+ * @var DoliDB $db
+ * @var HookManager $hookmanager
+ * @var Translate $langs
+ * @var User $user
+ */
require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/discount.class.php';
@@ -55,14 +62,6 @@ if (isModEnabled('category')) {
require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
}
-/**
- * @var Conf $conf
- * @var DoliDB $db
- * @var HookManager $hookmanager
- * @var Translate $langs
- * @var User $user
- */
-
// Load translation files required by the page
$langs->loadLangs(array("categories", "orders", 'sendings', 'companies', 'compta', 'bills', 'stocks', 'products'));
@@ -156,10 +155,10 @@ $offset = $limit * $page;
$pageprev = $page - 1;
$pagenext = $page + 1;
if (!$sortfield) {
- $sortfield = 'pr.ref';
+ $sortfield = 'c.ref';
}
if (!$sortorder) {
- $sortorder = 'ASC';
+ $sortorder = 'DESC';
}
$show_shippable_command = GETPOST('show_shippable_command', 'aZ09');
diff --git a/htdocs/core/class/translate.class.php b/htdocs/core/class/translate.class.php
index 0380fb35e4f..5e544e7b64e 100644
--- a/htdocs/core/class/translate.class.php
+++ b/htdocs/core/class/translate.class.php
@@ -824,9 +824,9 @@ class Translate
/**
* Return translation of a key depending on country
*
- * @param string $str string root to translate
- * @param string $countrycode country code (FR, ...)
- * @return string translated string
+ * @param string $str String root to translate. Example 'TotalHT', 'AmountLT1', 'ProfId1', 'ProfId2', 'LocalTax1IsUsedExample', ...
+ * @param string $countrycode Country code (FR, ...)
+ * @return string Translated string
* @see transcountrynoentities(), picto_from_langcode()
*/
public function transcountry($str, $countrycode)
diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php
index cf1ce76ae39..23e46a5376a 100644
--- a/htdocs/core/lib/functions.lib.php
+++ b/htdocs/core/lib/functions.lib.php
@@ -6583,7 +6583,7 @@ function img_allow($allow, $titlealt = 'default')
* @param string $morecss More CSS
* @return string Return img tag
*/
-function img_credit_card($brand, $morecss = null)
+function img_credit_card($brand, $morecss = 'fa-2x inline-block valignmiddle')
{
if (is_null($morecss)) {
$morecss = 'fa-2x';
diff --git a/htdocs/core/modules/mailings/modules_mailings.php b/htdocs/core/modules/mailings/modules_mailings.php
index c6316114463..2a888c09f51 100644
--- a/htdocs/core/modules/mailings/modules_mailings.php
+++ b/htdocs/core/modules/mailings/modules_mailings.php
@@ -414,7 +414,7 @@ class MailingTargets // This can't be abstract as it is used for some method
$widget[$j]['relpath'] = $relpath[$key];
$widget[$j]['iscoreorexternal'] = $iscoreorexternal[$key];
$widget[$j]['version'] = empty($objMod->version) ? '' : $objMod->version;
- $widget[$j]['status'] = img_picto($langs->trans("Active"), 'tick');
+ $widget[$j]['status'] = img_picto($langs->trans("Active"), 'tick', 'class="pictofixedwidth"');
if ($disabledbyname > 0 || $disabledbymodule > 1) {
$widget[$j]['status'] = '';
}
diff --git a/htdocs/core/modules/mailings/partnership.modules.php b/htdocs/core/modules/mailings/partnership.modules.php
index b0cddaf5cf1..9f74591539f 100644
--- a/htdocs/core/modules/mailings/partnership.modules.php
+++ b/htdocs/core/modules/mailings/partnership.modules.php
@@ -93,14 +93,17 @@ class mailing_partnership extends MailingTargets
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."partnership as p, ".MAIN_DB_PREFIX."c_partnership_type as pt";
$sql .= " WHERE s.email <> ''";
$sql .= " AND s.entity IN (".getEntity('societe').")";
- $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
+ $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing = ".((int) $mailing_id).")";
$sql .= " AND p.fk_soc = s.rowid";
$sql .= " AND pt.rowid = p.fk_type";
+ if (GETPOSTINT('countryid') > 0) {
+ $sql .= " AND s.fk_pays = ".((int) GETPOSTINT('countryid'));
+ }
if (GETPOSTINT('filter') > 0) {
- $sql .= " AND pt.rowid=".(GETPOSTINT('filter'));
+ $sql .= " AND pt.rowid = ".((int) GETPOSTINT('filter'));
}
if (GETPOSTISSET('filter_status_partnership') && GETPOSTINT('filter_status_partnership') >= 0) {
- $sql .= " AND p.status = ".GETPOSTINT('filter_status_partnership');
+ $sql .= " AND p.status = ".((int) GETPOSTINT('filter_status_partnership'));
}
if (empty($this->evenunsubscribe)) {
$sql .= " AND NOT EXISTS (SELECT rowid FROM ".MAIN_DB_PREFIX."mailing_unsubscribe as mu WHERE mu.email = s.email and mu.entity = ".((int) $conf->entity).")";
@@ -112,14 +115,17 @@ class mailing_partnership extends MailingTargets
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as s, ".MAIN_DB_PREFIX."partnership as p, ".MAIN_DB_PREFIX."c_partnership_type as pt";
$sql .= " WHERE s.email <> ''";
$sql .= " AND s.entity IN (".getEntity('member').")";
- $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
+ $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing = ".((int) $mailing_id).")";
$sql .= " AND p.fk_member = s.rowid";
$sql .= " AND pt.rowid = p.fk_type";
+ if (GETPOSTINT('countryid') > 0) {
+ $sql .= " AND s.country = ".((int) GETPOSTINT('countryid'));
+ }
if (GETPOSTINT('filter') > 0) {
- $sql .= " AND pt.rowid=".(GETPOSTINT('filter'));
+ $sql .= " AND pt.rowid=".((int) GETPOSTINT('filter'));
}
if (GETPOSTISSET('filter_status_partnership') && GETPOSTINT('filter_status_partnership') >= 0) {
- $sql .= " AND p.status = ".GETPOSTINT('filter_status_partnership');
+ $sql .= " AND p.status = ".((int) GETPOSTINT('filter_status_partnership'));
}
if (empty($this->evenunsubscribe)) {
$sql .= " AND NOT EXISTS (SELECT rowid FROM ".MAIN_DB_PREFIX."mailing_unsubscribe as mu WHERE mu.email = s.email and mu.entity = ".((int) $conf->entity).")";
@@ -237,13 +243,14 @@ class mailing_partnership extends MailingTargets
$langs->load("companies");
+ // Add filter on partnership type
$s = ' ';
- // filter_status_thirdparties
+ // Add filter on thirdparties status
include_once DOL_DOCUMENT_ROOT.'/partnership/class/partnership.class.php';
$tmppartnership = new Partnership($this->db);
+
$dummy = $tmppartnership->getLibStatut(0); // We call this only to have $tmppartnership->labelStatus loaded
$s .= $form->selectarray('filter_status_partnership', $tmppartnership->labelStatus, GETPOST('filter_status_partnership'), $langs->trans("Status"));
+ // Add filter on country
+ $s .= $form->select_country(GETPOST('countryid'), 'countryid', '', 0, 'minwidth150 maxwidth200', '', $langs->trans("Country"), 0, 0, array(), 0, 0);
+
return $s;
}
diff --git a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
index 32154603dad..054dcd09eb6 100644
--- a/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
+++ b/htdocs/core/modules/mailings/thirdparties_services_expired.modules.php
@@ -57,7 +57,7 @@ class mailing_thirdparties_services_expired extends MailingTargets
/**
* @var array
*/
- public $arrayofproducts = array();
+ //public $arrayofproducts = array();
/**
@@ -67,14 +67,13 @@ class mailing_thirdparties_services_expired extends MailingTargets
*/
public function __construct($db)
{
- global $conf;
-
$this->db = $db;
+ /*
$this->arrayofproducts = array();
// List of services
- $sql = "SELECT ref FROM ".MAIN_DB_PREFIX."product";
+ $sql = "SELECT id, ref FROM ".MAIN_DB_PREFIX."product";
$sql .= " WHERE entity IN (".getEntity('product').")";
if (!getDolGlobalString('CONTRACT_SUPPORT_PRODUCTS')) {
$sql .= " AND fk_product_type = 1"; // By default, only services
@@ -89,11 +88,12 @@ class mailing_thirdparties_services_expired extends MailingTargets
while ($i < $num) {
$obj = $this->db->fetch_object($result);
$i++;
- $this->arrayofproducts[$i] = $obj->ref;
+ $this->arrayofproducts[$obj->id] = $obj->ref;
}
} else {
dol_print_error($this->db);
}
+ */
}
@@ -106,40 +106,37 @@ class mailing_thirdparties_services_expired extends MailingTargets
*/
public function add_to_target($mailing_id)
{
- global $conf;
+ global $conf, $langs;
// phpcs:enable
- $key = GETPOSTINT('filter');
+ $productid = GETPOSTINT('productid');
$cibles = array();
$j = 0;
- $product = '';
- if ($key == '0') {
- $this->error = "Error: You must choose a filter";
+ if ($productid <= 0) {
+ $this->error = $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("ProductOrService"));
$this->errors[] = $this->error;
return -1;
}
- $product = $this->arrayofproducts[$key];
-
$now = dol_now();
- // La requete doit retourner: id, email, name
+ // Request must return: id, email, name
$sql = "SELECT s.rowid as id, s.email, s.nom as name, cd.rowid as cdid, cd.date_ouverture as date_start_real, cd.date_fin_validite as date_end, cd.fk_contrat";
$sql .= " FROM ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."contrat as c";
$sql .= ", ".MAIN_DB_PREFIX."contratdet as cd, ".MAIN_DB_PREFIX."product as p";
$sql .= " WHERE s.entity IN (".getEntity('societe').")";
- $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing=".((int) $mailing_id).")";
+ $sql .= " AND s.email NOT IN (SELECT email FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE fk_mailing = ".((int) $mailing_id).")";
$sql .= " AND s.rowid = c.fk_soc AND cd.fk_contrat = c.rowid AND s.email != ''";
- $sql .= " AND cd.statut= 4 AND cd.fk_product=p.rowid AND p.ref = '".$this->db->escape($product)."'";
+ $sql .= " AND cd.statut= 4 AND cd.fk_product = p.rowid AND p.rowid = ".((int) $productid);
$sql .= " AND cd.date_fin_validite < '".$this->db->idate($now)."'";
if (empty($this->evenunsubscribe)) {
$sql .= " AND NOT EXISTS (SELECT rowid FROM ".MAIN_DB_PREFIX."mailing_unsubscribe as mu WHERE mu.email = s.email and mu.entity = ".((int) $conf->entity).")";
}
$sql .= " ORDER BY s.email";
- // Stocke destinataires dans cibles
+ // Save target emails
$result = $this->db->query($sql);
if ($result) {
$num = $this->db->num_rows($result);
@@ -153,8 +150,8 @@ class mailing_thirdparties_services_expired extends MailingTargets
if ($old != $obj->email) {
$cibles[$j] = array(
'email' => $obj->email,
- 'lastname' => $obj->name, // For thirdparties, lastname must be name
- 'firstname' => '', // For thirdparties, firstname is ''
+ 'lastname' => $obj->name, // For thirdparties, lastname must be name
+ 'firstname' => '', // For thirdparties, firstname is ''
'other' =>
('DateStart='.dol_print_date($this->db->jdate($obj->date_start_real), 'day')).';'. // date start real
('DateEnd='.dol_print_date($this->db->jdate($obj->date_end), 'day')).';'. // date end planned
@@ -241,9 +238,20 @@ class mailing_thirdparties_services_expired extends MailingTargets
*/
public function formFilter()
{
- global $langs;
+ global $form, $langs, $user;
- $s = img_picto('', 'product', 'class="pictofixedwidth"').'