FIX missing filters

This commit is contained in:
Laurent Destailleur 2022-05-29 09:58:36 +02:00
parent 61b69ca835
commit 480452e291
14 changed files with 146 additions and 50 deletions

View File

@ -404,7 +404,7 @@ if ($object->fetch($id) >= 0) {
} }
print '<div class="tagtd center">'; print '<div class="tagtd center">';
if ($nbofrecipient >= 0) { if ($nbofrecipient === '' || $nbofrecipient >= 0) {
print $nbofrecipient; print $nbofrecipient;
} else { } else {
print $langs->trans("Error").' '.img_error($obj->error); print $langs->trans("Error").' '.img_error($obj->error);

View File

@ -200,8 +200,8 @@ class mailing_advthirdparties extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Not use here * @param string $sql Not use here
* @return int Nb of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {
@ -212,8 +212,7 @@ class mailing_advthirdparties extends MailingTargets
$sql .= " WHERE s.email != ''"; $sql .= " WHERE s.email != ''";
$sql .= " AND s.entity IN (".getEntity('societe').")"; $sql .= " AND s.entity IN (".getEntity('societe').")";
// La requete doit retourner un champ "nb" pour etre comprise // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
// par parent::getNbOfRecipients
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }

View File

@ -94,8 +94,8 @@ class mailing_contacts1 extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Requete sql de comptage * @param string $sql Requete sql de comptage
* @return int * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {

View File

@ -111,8 +111,8 @@ class mailing_example extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Requete sql de comptage * @param string $sql Requete sql de comptage
* @return int|string Number of recipient or '?' * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {

View File

@ -93,8 +93,8 @@ class mailing_fraise extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Requete sql de comptage * @param string $sql Requete sql de comptage
* @return int Nb of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {
@ -102,8 +102,7 @@ class mailing_fraise extends MailingTargets
$sql .= " FROM ".MAIN_DB_PREFIX."adherent as a"; $sql .= " FROM ".MAIN_DB_PREFIX."adherent as a";
$sql .= " WHERE (a.email IS NOT NULL AND a.email != '') AND a.entity IN (".getEntity('member').")"; $sql .= " WHERE (a.email IS NOT NULL AND a.email != '') AND a.entity IN (".getEntity('member').")";
// La requete doit retourner un champ "nb" pour etre comprise // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
// par parent::getNbOfRecipients
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }

View File

@ -99,8 +99,8 @@ class MailingTargets // This can't be abstract as it is used for some method
/** /**
* Retourne nombre de destinataires * Retourne nombre de destinataires
* *
* @param string $sql Sql request to count * @param string $sql Sql request to count
* @return int Nb of recipient, or <0 if error * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql) public function getNbOfRecipients($sql)
{ {

View File

@ -166,8 +166,8 @@ class mailing_partnership extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Requete sql de comptage * @param string $sql Requete sql de comptage
* @return int Nb of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {
@ -187,8 +187,7 @@ class mailing_partnership extends MailingTargets
//print $sql; //print $sql;
// La requete doit retourner un champ "nb" pour etre comprise // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
// par parent::getNbOfRecipients
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }

View File

@ -89,8 +89,8 @@ class mailing_pomme extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql SQL request to use to count * @param string $sql SQL request to use to count
* @return int Number of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {
@ -101,8 +101,7 @@ class mailing_pomme extends MailingTargets
$sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test $sql .= " WHERE u.email != ''"; // u.email IS NOT NULL est implicite dans ce test
$sql .= " AND u.entity IN (0,".$conf->entity.")"; $sql .= " AND u.entity IN (0,".$conf->entity.")";
// La requete doit retourner un champ "nb" pour etre comprise // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
// par parent::getNbOfRecipients
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }

View File

@ -211,8 +211,8 @@ class mailing_thirdparties extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Requete sql de comptage * @param string $sql Requete sql de comptage
* @return int Nb of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {
@ -223,8 +223,7 @@ class mailing_thirdparties extends MailingTargets
$sql .= " WHERE s.email <> ''"; $sql .= " WHERE s.email <> ''";
$sql .= " AND s.entity IN (".getEntity('societe').")"; $sql .= " AND s.entity IN (".getEntity('societe').")";
// La requete doit retourner un champ "nb" pour etre comprise // La requete doit retourner un champ "nb" pour etre comprise par parent::getNbOfRecipients
// par parent::getNbOfRecipients
return parent::getNbOfRecipients($sql); return parent::getNbOfRecipients($sql);
} }

View File

@ -184,8 +184,8 @@ class mailing_thirdparties_services_expired extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql SQL request to use to count * @param string $sql SQL request to use to count
* @return int Number of recipients * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {

View File

@ -77,8 +77,8 @@ class mailing_xinputfile extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Sql request to count * @param string $sql Sql request to count
* @return string '' means NA * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {

View File

@ -77,8 +77,8 @@ class mailing_xinputuser extends MailingTargets
* For example if this selector is used to extract 500 different * For example if this selector is used to extract 500 different
* emails from a text file, this function must return 500. * emails from a text file, this function must return 500.
* *
* @param string $sql Sql request to count * @param string $sql Sql request to count
* @return string '' means NA * @return int|string Nb of recipient, or <0 if error, or '' if NA
*/ */
public function getNbOfRecipients($sql = '') public function getNbOfRecipients($sql = '')
{ {

View File

@ -96,6 +96,7 @@ if (!$sortorder) {
$sortorder = "ASC"; $sortorder = "ASC";
} }
// Initialize array of search criterias // Initialize array of search criterias
$search = array(); $search = array();
foreach ($object->fields as $key => $val) { foreach ($object->fields as $key => $val) {
@ -107,6 +108,12 @@ foreach ($object->fields as $key => $val) {
$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int')); $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int'));
} }
} }
$key = 'sellby';
$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int'));
$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int'));
$key = 'eatby';
$search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOST('search_'.$key.'_dtstartmonth', 'int'), GETPOST('search_'.$key.'_dtstartday', 'int'), GETPOST('search_'.$key.'_dtstartyear', 'int'));
$search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOST('search_'.$key.'_dtendmonth', 'int'), GETPOST('search_'.$key.'_dtendday', 'int'), GETPOST('search_'.$key.'_dtendyear', 'int'));
// Get object canvas (By default, this is not defined, so standard usage of dolibarr) // Get object canvas (By default, this is not defined, so standard usage of dolibarr)
$canvas = GETPOST("canvas"); $canvas = GETPOST("canvas");
@ -155,6 +162,10 @@ if (empty($reshook)) {
$search[$key.'_dtend'] = ''; $search[$key.'_dtend'] = '';
} }
} }
$search['sellby_dtstart'] = '';
$search['eatby_dtstart'] = '';
$search['sellby_dtend'] = '';
$search['eatby_dtend'] = '';
$sref = ""; $sref = "";
$snom = ""; $snom = "";
$sall = ""; $sall = "";
@ -268,6 +279,37 @@ if ($search_warehouse) {
if ($search_batch) { if ($search_batch) {
$sql .= natural_search("pb.batch", $search_batch); $sql .= natural_search("pb.batch", $search_batch);
} }
foreach ($search as $key => $val) {
if (array_key_exists($key, $object->fields)) {
if ($key == 'status' && $search[$key] == -1) {
continue;
}
$mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);
if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) {
if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) {
$search[$key] = '';
}
$mode_search = 2;
}
if ($search[$key] != '') {
$sql .= natural_search("t.".$db->escape($key), $search[$key], (($key == 'status') ? 2 : $mode_search));
}
} else {
if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') {
$columnName = preg_replace('/(_dtstart|_dtend)$/', '', $key);
if ($columnName == 'eatby' || $columnName == 'sellby') {
if (preg_match('/_dtstart$/', $key)) {
$sql .= " AND pl.".$db->escape($columnName)." >= '".$db->idate($search[$key])."'";
}
if (preg_match('/_dtend$/', $key)) {
$sql .= " AND pl.".$db->escape($columnName)." <= '".$db->idate($search[$key])."'";
}
}
}
}
}
$sql .= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,"; $sql .= " GROUP BY p.rowid, p.ref, p.label, p.barcode, p.price, p.price_ttc, p.price_base_type, p.entity,";
$sql .= " p.fk_product_type, p.tms,"; $sql .= " p.fk_product_type, p.tms,";
$sql .= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock, p.stock, p.tosell, p.tobuy, p.tobatch,"; $sql .= " p.duration, p.tosell, p.tobuy, p.seuil_stock_alerte, p.desiredstock, p.stock, p.tosell, p.tobuy, p.tobatch,";
@ -293,10 +335,13 @@ if (!empty($sql_having)) {
$sql .= $sql_having; $sql .= $sql_having;
} }
//print $sql;
// Count total nb of records
$nbtotalofrecords = ''; $nbtotalofrecords = '';
if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) { if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
$result = $db->query($sql); $resql = $db->query($sql);
$nbtotalofrecords = $db->num_rows($result); $nbtotalofrecords = $db->num_rows($resql);
if (($page * $limit) > $nbtotalofrecords) { // if total of record found is smaller than page * limit, goto and load page 0 if (($page * $limit) > $nbtotalofrecords) { // if total of record found is smaller than page * limit, goto and load page 0
$page = 0; $page = 0;
@ -339,9 +384,29 @@ if (isset($type)) {
$texte .= ' ('.$langs->trans("StocksByLotSerial").')'; $texte .= ' ('.$langs->trans("StocksByLotSerial").')';
$param = ''; $param = '';
if (!empty($mode)) {
$param .= '&mode='.urlencode($mode);
}
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
$param .= '&contextpage='.urlencode($contextpage);
}
if ($limit > 0 && $limit != $conf->liste_limit) { if ($limit > 0 && $limit != $conf->liste_limit) {
$param .= '&limit='.urlencode($limit); $param .= '&limit='.urlencode($limit);
} }
foreach ($search as $key => $val) {
if (is_array($search[$key]) && count($search[$key])) {
foreach ($search[$key] as $skey) {
if ($skey != '') {
$param .= '&search_'.$key.'[]='.urlencode($skey);
}
}
} elseif ($search[$key] != '') {
$param .= '&search_'.$key.'='.urlencode($search[$key]);
}
}
if ($optioncss != '') {
$param .= '&optioncss='.urlencode($optioncss);
}
if ($sall) { if ($sall) {
$param .= "&sall=".urlencode($sall); $param .= "&sall=".urlencode($sall);
} }
@ -389,11 +454,18 @@ if ($sellby) $param.="&sellby=".$sellby;*/
llxHeader("", $title, $helpurl, $texte); llxHeader("", $title, $helpurl, $texte);
print '<form action="'.$_SERVER["PHP_SELF"].'" method="post" name="formulaire">'; print '<form id="searchFormList" action="'.$_SERVER["PHP_SELF"].'" method="POST" name="formulaire">'."\n";
if ($optioncss != '') {
print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
}
print '<input type="hidden" name="token" value="'.newToken().'">'; print '<input type="hidden" name="token" value="'.newToken().'">';
print '<input type="hidden" name="action" value="list">';
print '<input type="hidden" name="sortfield" value="'.$sortfield.'">'; print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">'; print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
print '<input type="hidden" name="type" value="'.$type.'">'; print '<input type="hidden" name="type" value="'.$type.'">';
print '<input type="hidden" name="page" value="'.$page.'">';
print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
print '<input type="hidden" name="mode" value="'.$mode.'">';
print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'product', 0, '', '', $limit, 0, 0, 1); print_barre_liste($texte, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords, 'product', 0, '', '', $limit, 0, 0, 1);
@ -428,7 +500,7 @@ if (!empty($moreforfilter)) {
print '<div class="div-table-responsive">'; print '<div class="div-table-responsive">';
print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'; print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">';
// Fields title search // Fields title search
// -------------------------------------------------------------------- // --------------------------------------------------------------------
@ -447,10 +519,26 @@ if (!empty($conf->service->enabled) && $type == 1) {
print '<td class="liste_titre"><input class="flat" type="text" name="search_warehouse" size="6" value="'.$search_warehouse.'"></td>'; print '<td class="liste_titre"><input class="flat" type="text" name="search_warehouse" size="6" value="'.$search_warehouse.'"></td>';
print '<td class="liste_titre center"><input class="flat" type="text" name="search_batch" size="6" value="'.$search_batch.'"></td>'; print '<td class="liste_titre center"><input class="flat" type="text" name="search_batch" size="6" value="'.$search_batch.'"></td>';
if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) { if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre center">';
$key = 'sellby';
print '<div class="nowrap">';
print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
print '</div>';
print '<div class="nowrap">';
print $form->selectDate($search[$key.'_dtend'] ? $search[$key.'_dtend'] : '', "search_".$key."_dtend", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
print '</div>';
print '</td>';
} }
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) { if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre center">';
$key = 'eatby';
print '<div class="nowrap">';
print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
print '</div>';
print '<div class="nowrap">';
print $form->selectDate($search[$key.'_dtend'] ? $search[$key.'_dtend'] : '', "search_".$key."_dtend", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
print '</div>';
print '</td>';
} }
// Physical stock // Physical stock
print '<td class="liste_titre right">'; print '<td class="liste_titre right">';
@ -459,14 +547,21 @@ print '</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre">&nbsp;</td>'; print '<td class="liste_titre">&nbsp;</td>';
print '<td class="liste_titre maxwidthsearch">'; // Action column
$searchpicto = $form->showFilterAndCheckAddButtons(0); if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) {
print $searchpicto; print '<td class="liste_titre maxwidthsearch">';
print '</td>'; $searchpicto = $form->showFilterButtons();
print '</tr>'; print $searchpicto;
print '</td>';
}
print '</tr>'."\n";
//Line for column titles $totalarray = array();
print "<tr class=\"liste_titre\">"; $totalarray['nbfield'] = 0;
// Fields title label
// --------------------------------------------------------------------
print '<tr class="liste_titre">';
print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", '', $param, "", $sortfield, $sortorder); print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.ref", '', $param, "", $sortfield, $sortorder);
print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", '', $param, "", $sortfield, $sortorder); print_liste_field_titre("Label", $_SERVER["PHP_SELF"], "p.label", '', $param, "", $sortfield, $sortorder);
if (!empty($conf->service->enabled) && $type == 1) { if (!empty($conf->service->enabled) && $type == 1) {

View File

@ -55,9 +55,10 @@ $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
$sortfield = GETPOST('sortfield', 'aZ09comma'); $sortfield = GETPOST('sortfield', 'aZ09comma');
$sortorder = GETPOST('sortorder', 'aZ09comma'); $sortorder = GETPOST('sortorder', 'aZ09comma');
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int'); $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
if (empty($page) || $page == -1) { if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
// If $page is not defined, or '' or -1 or if we click on clear filters
$page = 0; $page = 0;
} // If $page is not defined, or '' or -1 }
$offset = $limit * $page; $offset = $limit * $page;
$pageprev = $page - 1; $pageprev = $page - 1;
$pagenext = $page + 1; $pagenext = $page + 1;
@ -342,6 +343,7 @@ if (!$resql) {
$num = $db->num_rows($resql); $num = $db->num_rows($resql);
$i = 0;
// Direct jump if only one record found // Direct jump if only one record found
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) { if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) {
@ -439,6 +441,7 @@ if ($search_all) {
print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'</div>'."\n"; print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'</div>'."\n";
} }
// Filter on categories
$moreforfilter = ''; $moreforfilter = '';
/*$moreforfilter.='<div class="divsearchfield">'; /*$moreforfilter.='<div class="divsearchfield">';
$moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">'; $moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
@ -455,6 +458,9 @@ if (empty($reshook)) {
if (!empty($moreforfilter)) { if (!empty($moreforfilter)) {
print '<div class="liste_titre liste_titre_bydiv centpercent">'; print '<div class="liste_titre liste_titre_bydiv centpercent">';
print $moreforfilter; print $moreforfilter;
$parameters = array();
$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters); // Note that $action and $object may have been modified by hook
print $hookmanager->resPrint;
print '</div>'; print '</div>';
} }
@ -462,13 +468,13 @@ $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields $selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')); // This also change content of $arrayfields
$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : ''); $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table print '<div class="div-table-responsive">';
print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n"; print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
// Fields title search // Fields title search
// -------------------------------------------------------------------- // --------------------------------------------------------------------
print '<tr class="liste_titre">'; print '<tr class="liste_titre_filter">';
// Action column // Action column
if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) { if (!empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) {
print '<td class="liste_titre maxwidthsearch">'; print '<td class="liste_titre maxwidthsearch">';