dolibarr  19.0.0-dev
list.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2001-2002 Rodolphe Quiedeville <rodolphe@quiedeville.org>
3  * Copyright (C) 2003 Jean-Louis Bergamo <jlb@j1b.org>
4  * Copyright (C) 2004-2023 Laurent Destailleur <eldy@users.sourceforge.net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <https://www.gnu.org/licenses/>.
18  */
19 
26 // Load Dolibarr environment
27 require '../../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
29 require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
30 require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
31 require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
32 
33 $langs->loadLangs(array("members", "companies"));
34 
35 $action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ...
36 $massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
37 $show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ?
38 $confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation
39 $cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
40 $toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
41 $contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
42 $backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
43 $optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
44 $mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...)
45 
46 $statut = (GETPOSTISSET("statut") ?GETPOST("statut", "alpha") : 1);
47 $search_ref = GETPOST('search_ref', 'alpha');
48 $search_type = GETPOST('search_type', 'alpha');
49 $search_lastname = GETPOST('search_lastname', 'alpha');
50 $search_firstname = GETPOST('search_firstname', 'alpha');
51 $search_login = GETPOST('search_login', 'alpha');
52 $search_note = GETPOST('search_note', 'alpha');
53 $search_account = GETPOST('search_account', 'int');
54 $search_amount = GETPOST('search_amount', 'alpha');
55 $search_all = '';
56 
57 $date_select = GETPOST("date_select", 'alpha');
58 
59 // Load variable for pagination
60 $limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
61 $sortfield = GETPOST('sortfield', 'aZ09comma');
62 $sortorder = GETPOST('sortorder', 'aZ09comma');
63 $page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
64 if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
65  // If $page is not defined, or '' or -1 or if we click on clear filters
66  $page = 0;
67 }
68 $offset = $limit * $page;
69 $pageprev = $page - 1;
70 $pagenext = $page + 1;
71 if (!$sortorder) {
72  $sortorder = "DESC";
73 }
74 if (!$sortfield) {
75  $sortfield = "c.dateadh";
76 }
77 
78 // Initialize technical objects
79 $object = new Subscription($db);
80 $extrafields = new ExtraFields($db);
81 $hookmanager->initHooks(array('subscriptionlist'));
82 
83 // Fetch optionals attributes and labels
84 $extrafields->fetch_name_optionals_label($object->table_element);
85 
86 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
87 
88 // List of fields to search into when doing a "search in all"
89 $fieldstosearchall = array(
90 );
91 $arrayfields = array(
92  'd.ref'=>array('label'=>"Ref", 'checked'=>1),
93  'd.fk_type'=>array('label'=>"Type", 'checked'=>1),
94  'd.lastname'=>array('label'=>"Lastname", 'checked'=>1),
95  'd.firstname'=>array('label'=>"Firstname", 'checked'=>1),
96  'd.login'=>array('label'=>"Login", 'checked'=>1),
97  't.libelle'=>array('label'=>"Label", 'checked'=>1),
98  'd.bank'=>array('label'=>"BankAccount", 'checked'=>1, 'enabled'=>(isModEnabled('banque'))),
99  /*'d.note_public'=>array('label'=>"NotePublic", 'checked'=>0),
100  'd.note_private'=>array('label'=>"NotePrivate", 'checked'=>0),*/
101  'c.dateadh'=>array('label'=>"DateSubscription", 'checked'=>1, 'position'=>100),
102  'c.datef'=>array('label'=>"EndSubscription", 'checked'=>1, 'position'=>101),
103  'd.amount'=>array('label'=>"Amount", 'checked'=>1, 'position'=>102),
104  'c.datec'=>array('label'=>"DateCreation", 'checked'=>0, 'position'=>500),
105  'c.tms'=>array('label'=>"DateModificationShort", 'checked'=>0, 'position'=>500),
106 // 'd.statut'=>array('label'=>"Status", 'checked'=>1, 'position'=>1000)
107 );
108 
109 // Security check
110 $result = restrictedArea($user, 'adherent', '', '', 'cotisation');
111 
112 $permissiontodelete = $user->hasRight('adherent', 'cotisation', 'creer');
113 
114 
115 /*
116  * Actions
117  */
118 
119 if (GETPOST('cancel', 'alpha')) {
120  $action = 'list';
121  $massaction = '';
122 }
123 if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
124  $massaction = '';
125 }
126 
127 $parameters = array('socid'=>isset($socid) ? $socid : null);
128 $reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
129 if ($reshook < 0) {
130  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
131 }
132 
133 if (empty($reshook)) {
134  // Selection of new fields
135  include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
136 
137  // Purge search criteria
138  if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
139  $search_type = "";
140  $search_ref = "";
141  $search_lastname = "";
142  $search_firstname = "";
143  $search_login = "";
144  $search_note = "";
145  $search_amount = "";
146  $search_account = "";
147  $toselect = array();
148  $search_array_options = array();
149  }
150  if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
151  || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
152  $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
153  }
154 
155  // Mass actions
156  $objectclass = 'Subscription';
157  $objectlabel = 'Subscription';
158  $uploaddir = $conf->adherent->dir_output;
159  include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
160 }
161 
162 
163 /*
164  * View
165  */
166 
167 $form = new Form($db);
168 $subscription = new Subscription($db);
169 $adherent = new Adherent($db);
170 $accountstatic = new Account($db);
171 
172 $now = dol_now();
173 
174 // List of subscriptions
175 $sql = "SELECT d.rowid, d.login, d.firstname, d.lastname, d.societe, d.photo, d.statut,";
176 $sql .= " d.gender, d.email, d.morphy,";
177 $sql .= " c.rowid as crowid, c.fk_type, c.subscription,";
178 $sql .= " c.dateadh, c.datef, c.datec as date_creation, c.tms as date_update,";
179 $sql .= " c.fk_bank as bank, c.note as note_private,";
180 $sql .= " b.fk_account";
181 // Add fields from extrafields
182 if (!empty($extrafields->attributes[$object->table_element]['label'])) {
183  foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
184  $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
185  }
186 }
187 // Add fields from hooks
188 $parameters = array();
189 $reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
190 $sql .= $hookmanager->resPrint;
191 $sql = preg_replace('/,\s*$/', '', $sql);
192 
193 $sqlfields = $sql; // $sql fields to remove for count total
194 
195 $sql .= " FROM ".MAIN_DB_PREFIX."adherent as d";
196 $sql .= " JOIN ".MAIN_DB_PREFIX."subscription as c on d.rowid = c.fk_adherent";
197 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."adherent_extrafields as ef on (d.rowid = ef.fk_object)";
198 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON c.fk_bank = b.rowid";
199 $sql .= " WHERE d.entity IN (".getEntity('adherent').")";
200 if (isset($date_select) && $date_select != '') {
201  $sql .= " AND c.dateadh >= '".((int) $date_select)."-01-01 00:00:00'";
202  $sql .= " AND c.dateadh < '".((int) $date_select + 1)."-01-01 00:00:00'";
203 }
204 if ($search_ref) {
205  if (is_numeric($search_ref)) {
206  $sql .= " AND c.rowid = ".((int) $search_ref);
207  } else {
208  $sql .= " AND 1 = 2"; // Always wrong
209  }
210 }
211 if ($search_type) {
212  $sql .= natural_search(array('c.fk_type'), $search_type);
213 }
214 if ($search_lastname) {
215  $sql .= natural_search(array('d.lastname', 'd.societe'), $search_lastname);
216 }
217 if ($search_firstname) {
218  $sql .= natural_search(array('d.firstname'), $search_firstname);
219 }
220 if ($search_login) {
221  $sql .= natural_search('d.login', $search_login);
222 }
223 if ($search_note) {
224  $sql .= natural_search('c.note', $search_note);
225 }
226 if ($search_account > 0) {
227  $sql .= " AND b.fk_account = ".((int) $search_account);
228 }
229 if ($search_amount) {
230  $sql .= natural_search('c.subscription', $search_amount, 1);
231 }
232 if ($search_all) {
233  $sql .= natural_search(array_keys($fieldstosearchall), $search_all);
234 }
235 // Add where from extra fields
236 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
237 // Add where from hooks
238 $parameters = array();
239 $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
240 $sql .= $hookmanager->resPrint;
241 
242 // Count total nb of records
243 $nbtotalofrecords = '';
244 if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
245  /* The fast and low memory method to get and count full list converts the sql into a sql count */
246  $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
247  $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
248  $resql = $db->query($sqlforcount);
249  if ($resql) {
250  $objforcount = $db->fetch_object($resql);
251  $nbtotalofrecords = $objforcount->nbtotalofrecords;
252  } else {
253  dol_print_error($db);
254  }
255 
256  if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
257  $page = 0;
258  $offset = 0;
259  }
260  $db->free($resql);
261 }
262 
263 // Complete request and execute it with limit
264 $sql .= $db->order($sortfield, $sortorder);
265 if ($limit) {
266  $sql .= $db->plimit($limit + 1, $offset);
267 }
268 
269 $resql = $db->query($sql);
270 if (!$resql) {
271  dol_print_error($db);
272  exit;
273 }
274 
275 $num = $db->num_rows($resql);
276 
277 
278 // Direct jump if only one record found
279 if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all && !$page) {
280  $obj = $db->fetch_object($resql);
281  $id = $obj->rowid;
282  header("Location: ".DOL_URL_ROOT.'/adherents/subscription/card.php?id='.$id);
283  exit;
284 }
285 
286 // Output page
287 // --------------------------------------------------------------------
288 
289 $title = $langs->trans("Subscriptions");
290 if (!empty($date_select)) {
291  $title .= ' ('.$langs->trans("Year").' '.$date_select.')';
292 }
293 $help_url = 'EN:Module_Foundations|FR:Module_Adh&eacute;rents|ES:M&oacute;dulo_Miembros|DE:Modul_Mitglieder';
294 
295 llxHeader('', $title, $help_url);
296 
297 $arrayofselected = is_array($toselect) ? $toselect : array();
298 
299 $param = '';
300 if (!empty($mode)) {
301  $param .='&mode='.urlencode($mode);
302 }
303 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
304  $param .= '&contextpage='.urlencode($contextpage);
305 }
306 if ($limit > 0 && $limit != $conf->liste_limit) {
307  $param .= '&limit='.((int) $limit);
308 }
309 if ($statut != '') {
310  $param .= "&statut=".urlencode($statut);
311 }
312 if ($search_type) {
313  $param .= "&search_type=".urlencode($search_type);
314 }
315 if ($date_select) {
316  $param .= "&date_select=".urlencode($date_select);
317 }
318 if ($search_lastname) {
319  $param .= "&search_lastname=".urlencode($search_lastname);
320 }
321 if ($search_login) {
322  $param .= "&search_login=".urlencode($search_login);
323 }
324 if ($search_account) {
325  $param .= "&search_account=".urlencode($search_account);
326 }
327 if ($search_amount) {
328  $param .= "&search_amount=".urlencode($search_amount);
329 }
330 if ($optioncss != '') {
331  $param .= '&optioncss='.urlencode($optioncss);
332 }
333 // Add $param from extra fields
334 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
335 // Add $param from hooks
336 $parameters = array();
337 $reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
338 $param .= $hookmanager->resPrint;
339 
340 // List of mass actions available
341 $arrayofmassactions = array(
342  //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
343  //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
344 );
345 if (!empty($permissiontodelete)) {
346  $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
347 }
348 if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) {
349  $arrayofmassactions = array();
350 }
351 $massactionbutton = $form->selectMassAction('', $arrayofmassactions);
352 
353 print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
354 if ($optioncss != '') {
355  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
356 }
357 print '<input type="hidden" name="token" value="'.newToken().'">';
358 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
359 print '<input type="hidden" name="action" value="list">';
360 print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
361 print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
362 print '<input type="hidden" name="page" value="'.$page.'">';
363 print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
364 print '<input type="hidden" name="date_select" value="'.$date_select.'">';
365 print '<input type="hidden" name="page_y" value="">';
366 print '<input type="hidden" name="mode" value="'.$mode.'">';
367 
368 $newcardbutton = '';
369 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss'=>'reposition'));
370 $newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss'=>'reposition'));
371 if ($user->hasRight('adherent', 'cotisation', 'creer')) {
372  $newcardbutton .= dolGetButtonTitleSeparator();
373  $newcardbutton .= dolGetButtonTitle($langs->trans('NewSubscription'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/adherents/list.php?status=-1,1');
374 }
375 
376 print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $subscription->picto, 0, $newcardbutton, '', $limit, 0, 0, 1);
377 
378 $topicmail = "Information";
379 $modelmail = "subscription";
380 $objecttmp = new Subscription($db);
381 $trackid = 'sub'.$object->id;
382 include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
383 
384 if ($search_all) {
385  $setupstring = '';
386  foreach ($fieldstosearchall as $key => $val) {
387  $fieldstosearchall[$key] = $langs->trans($val);
388  $setupstring .= $key."=".$val.";";
389  }
390  print '<!-- Search done like if MYOBJECT_QUICKSEARCH_ON_FIELDS = '.$setupstring.' -->'."\n";
391  print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'</div>'."\n";
392 }
393 
394 $moreforfilter = '';
395 /*$moreforfilter.='<div class="divsearchfield">';
396  $moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
397  $moreforfilter.= '</div>';*/
398 
399 $parameters = array();
400 $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
401 if (empty($reshook)) {
402  $moreforfilter .= $hookmanager->resPrint;
403 } else {
404  $moreforfilter = $hookmanager->resPrint;
405 }
406 
407 if (!empty($moreforfilter)) {
408  print '<div class="liste_titre liste_titre_bydiv centpercent">';
409  print $moreforfilter;
410  $parameters = array();
411  $reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
412  print $hookmanager->resPrint;
413  print '</div>';
414 }
415 
416 $varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
417 $selectedfields = ($mode != 'kanban' ? $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN', '')) : ''); // This also change content of $arrayfields
418 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
419 
420 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
421 print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
422 
423 // Fields title search
424 // --------------------------------------------------------------------
425 print '<tr class="liste_titre_filter">';
426 // Action column
427 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
428  print '<td class="liste_titre center maxwidthsearch">';
429  $searchpicto = $form->showFilterButtons('left');
430  print $searchpicto;
431  print '</td>';
432 }
433 // Line numbering
434 if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) {
435  print '<td class="liste_titre">&nbsp;</td>';
436 }
437 
438 // Ref
439 if (!empty($arrayfields['d.ref']['checked'])) {
440  print '<td class="liste_titre left">';
441  print '<input class="flat maxwidth50" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
442 }
443 
444 // Type
445 if (!empty($arrayfields['d.fk_type']['checked'])) {
446  print '<td class="liste_titre left">';
447  print '<input class="flat maxwidth50" type="text" name="search_type" value="'.dol_escape_htmltag($search_type).'">';
448  print'</td>';
449 }
450 
451 if (!empty($arrayfields['d.lastname']['checked'])) {
452  print '<td class="liste_titre left">';
453  print '<input class="flat maxwidth75" type="text" name="search_lastname" value="'.dol_escape_htmltag($search_lastname).'"></td>';
454 }
455 
456 if (!empty($arrayfields['d.firstname']['checked'])) {
457  print '<td class="liste_titre left">';
458  print '<input class="flat maxwidth75" type="text" name="search_firstname" value="'.dol_escape_htmltag($search_firstname).'"></td>';
459 }
460 
461 if (!empty($arrayfields['d.login']['checked'])) {
462  print '<td class="liste_titre left">';
463  print '<input class="flat maxwidth75" type="text" name="search_login" value="'.dol_escape_htmltag($search_login).'"></td>';
464 }
465 
466 if (!empty($arrayfields['t.libelle']['checked'])) {
467  print '<td class="liste_titre">';
468  print '';
469  print '</td>';
470 }
471 
472 if (!empty($arrayfields['d.bank']['checked'])) {
473  print '<td class="liste_titre">';
474  $form->select_comptes($search_account, 'search_account', 0, '', 1, '', 0, 'maxwidth100');
475  print '</td>';
476 }
477 
478 if (!empty($arrayfields['c.dateadh']['checked'])) {
479  print '<td class="liste_titre">&nbsp;</td>';
480 }
481 
482 if (!empty($arrayfields['c.datef']['checked'])) {
483  print '<td class="liste_titre">&nbsp;</td>';
484 }
485 
486 if (!empty($arrayfields['d.amount']['checked'])) {
487  print '<td class="liste_titre right">';
488  print '<input class="flat" type="text" name="search_amount" value="'.dol_escape_htmltag($search_amount).'" size="4">';
489  print '</td>';
490 }
491 // Extra fields
492 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
493 
494 // Fields from hook
495 $parameters = array('arrayfields'=>$arrayfields);
496 $reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
497 print $hookmanager->resPrint;
498 // Date creation
499 if (!empty($arrayfields['c.datec']['checked'])) {
500  print '<td class="liste_titre">';
501  print '</td>';
502 }
503 // Date modification
504 if (!empty($arrayfields['c.tms']['checked'])) {
505  print '<td class="liste_titre">';
506  print '</td>';
507 }
508 
509 // Action column
510 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
511  print '<td class="liste_titre center maxwidthsearch">';
512  $searchpicto = $form->showFilterButtons();
513  print $searchpicto;
514  print '</td>';
515 }
516 print '</tr>'."\n";
517 
518 $totalarray = array();
519 $totalarray['nbfield'] = 0;
520 
521 // Fields title label
522 // --------------------------------------------------------------------
523 print '<tr class="liste_titre">';
524 // Action column
525 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
526  print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], '', '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ');
527  $totalarray['nbfield']++;
528 }
529 if (!empty($arrayfields['d.ref']['checked'])) {
530  print_liste_field_titre($arrayfields['d.ref']['label'], $_SERVER["PHP_SELF"], "c.rowid", $param, "", "", $sortfield, $sortorder);
531  $totalarray['nbfield']++;
532 }
533 if (!empty($arrayfields['d.fk_type']['checked'])) {
534  print_liste_field_titre($arrayfields['d.fk_type']['label'], $_SERVER["PHP_SELF"], "c.fk_type", $param, "", "", $sortfield, $sortorder);
535  $totalarray['nbfield']++;
536 }
537 if (!empty($arrayfields['d.lastname']['checked'])) {
538  print_liste_field_titre($arrayfields['d.lastname']['label'], $_SERVER["PHP_SELF"], "d.lastname", $param, "", "", $sortfield, $sortorder);
539  $totalarray['nbfield']++;
540 }
541 if (!empty($arrayfields['d.firstname']['checked'])) {
542  print_liste_field_titre($arrayfields['d.firstname']['label'], $_SERVER["PHP_SELF"], "d.firstname", $param, "", "", $sortfield, $sortorder);
543  $totalarray['nbfield']++;
544 }
545 if (!empty($arrayfields['d.login']['checked'])) {
546  print_liste_field_titre($arrayfields['d.login']['label'], $_SERVER["PHP_SELF"], "d.login", $param, "", "", $sortfield, $sortorder);
547  $totalarray['nbfield']++;
548 }
549 if (!empty($arrayfields['t.libelle']['checked'])) {
550  print_liste_field_titre($arrayfields['t.libelle']['label'], $_SERVER["PHP_SELF"], "c.note", $param, "", '', $sortfield, $sortorder);
551  $totalarray['nbfield']++;
552 }
553 if (!empty($arrayfields['d.bank']['checked'])) {
554  print_liste_field_titre($arrayfields['d.bank']['label'], $_SERVER["PHP_SELF"], "b.fk_account", $param, "", "", $sortfield, $sortorder);
555  $totalarray['nbfield']++;
556 }
557 if (!empty($arrayfields['c.dateadh']['checked'])) {
558  print_liste_field_titre($arrayfields['c.dateadh']['label'], $_SERVER["PHP_SELF"], "c.dateadh", $param, "", '', $sortfield, $sortorder, 'center nowraponall ');
559  $totalarray['nbfield']++;
560 }
561 if (!empty($arrayfields['c.datef']['checked'])) {
562  print_liste_field_titre($arrayfields['c.datef']['label'], $_SERVER["PHP_SELF"], "c.datef", $param, "", '', $sortfield, $sortorder, 'center nowraponall ');
563  $totalarray['nbfield']++;
564 }
565 if (!empty($arrayfields['d.amount']['checked'])) {
566  print_liste_field_titre($arrayfields['d.amount']['label'], $_SERVER["PHP_SELF"], "c.subscription", $param, "", '', $sortfield, $sortorder, 'right ');
567  $totalarray['nbfield']++;
568 }
569 
570 // Extra fields
571 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
572 
573 // Hook fields
574 $parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray);
575 $reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
576 print $hookmanager->resPrint;
577 if (!empty($arrayfields['c.datec']['checked'])) {
578  print_liste_field_titre($arrayfields['c.datec']['label'], $_SERVER["PHP_SELF"], "c.datec", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder);
579 }
580 if (!empty($arrayfields['c.tms']['checked'])) {
581  print_liste_field_titre($arrayfields['c.tms']['label'], $_SERVER["PHP_SELF"], "c.tms", "", $param, 'align="center" class="nowrap"', $sortfield, $sortorder);
582 }
583 // Action column
584 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
585  print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
586  $totalarray['nbfield']++;
587 }
588 print '</tr>'."\n";
589 
590 // Loop on record
591 // --------------------------------------------------------------------
592 $i = 0;
593 $savnbfield = $totalarray['nbfield'];
594 $totalarray = array();
595 $totalarray['nbfield'] = 0;
596 $imaxinloop = ($limit ? min($num, $limit) : $num);
597 while ($i < $imaxinloop) {
598  $obj = $db->fetch_object($resql);
599  if (empty($obj)) {
600  break; // Should not happen
601  }
602 
603  $subscription->ref = $obj->crowid;
604  $subscription->id = $obj->crowid;
605  $subscription->dateh = $db->jdate($obj->dateadh);
606  $subscription->datef = $db->jdate($obj->datef);
607  $subscription->amount = $obj->subscription;
608  $subscription->fk_adherent = $obj->rowid;
609 
610  $adherent->lastname = $obj->lastname;
611  $adherent->firstname = $obj->firstname;
612  $adherent->ref = $obj->rowid;
613  $adherent->id = $obj->rowid;
614  $adherent->statut = $obj->statut;
615  $adherent->login = $obj->login;
616  $adherent->photo = $obj->photo;
617  $adherent->gender = $obj->gender;
618  $adherent->morphy = $obj->morphy;
619  $adherent->email = $obj->email;
620  $adherent->typeid = $obj->fk_type;
621  $adherent->datefin = $db->jdate($obj->datef);
622 
623  $typeid = ($obj->fk_type > 0 ? $obj->fk_type : $adherent->typeid);
624  $adht = new AdherentType($db);
625  $adht->fetch($typeid);
626 
627  $adherent->need_subscription = $adht->subscription;
628 
629  if ($mode == 'kanban') {
630  if ($i == 0) {
631  print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
632  print '<div class="box-flex-container kanban">';
633  }
634  // Output Kanban
635  if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
636  $selected = 0;
637  if (in_array($object->id, $arrayofselected)) {
638  $selected = 1;
639  }
640  }
641 
642  //fetch informations needs on this mode
643 
644  if ($obj->fk_account > 0) {
645  $accountstatic->id = $obj->fk_account;
646  $accountstatic->fetch($obj->fk_account);
647  }
648  // Output Kanban
649  print $subscription->getKanbanView('', array('selected' => in_array($object->id, $arrayofselected), 'adherent_type' => $adht, 'member' => $adherent, 'bank'=>($obj->fk_account > 0 ? $accountstatic : null)));
650  if ($i == ($imaxinloop - 1)) {
651  print '</div>';
652  print '</td></tr>';
653  }
654  } else {
655  // Show here line of result
656  $j = 0;
657  print '<tr data-rowid="'.$object->id.'" class="oddeven">';
658  // Action column
659  if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
660  print '<td class="nowrap center">';
661  if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
662  $selected = 0;
663  if (in_array($obj->crowid, $arrayofselected)) {
664  $selected = 1;
665  }
666  print '<input id="cb'.$obj->crowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->crowid.'"'.($selected ? ' checked="checked"' : '').'>';
667  }
668  print '</td>';
669  if (!$i) {
670  $totalarray['nbfield']++;
671  }
672  }
673  // Ref
674  if (!empty($arrayfields['d.ref']['checked'])) {
675  print '<td>'.$subscription->getNomUrl(1).'</td>';
676  if (!$i) {
677  $totalarray['nbfield']++;
678  }
679  }
680  // Type
681  if (!empty($arrayfields['d.fk_type']['checked'])) {
682  print '<td class="nowraponall">';
683  if ($typeid > 0) {
684  print $adht->getNomUrl(1);
685  }
686  print '</td>';
687  if (!$i) {
688  $totalarray['nbfield']++;
689  }
690  }
691 
692  // Lastname
693  if (!empty($arrayfields['d.lastname']['checked'])) {
694  print '<td class="tdoverflowmax125">'.$adherent->getNomUrl(-1, 0, 'card', 'lastname').'</td>';
695  if (!$i) {
696  $totalarray['nbfield']++;
697  }
698  }
699  // Firstname
700  if (!empty($arrayfields['d.firstname']['checked'])) {
701  print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($adherent->firstname).'">'.dol_escape_htmltag($adherent->firstname).'</td>';
702  if (!$i) {
703  $totalarray['nbfield']++;
704  }
705  }
706 
707  // Login
708  if (!empty($arrayfields['d.login']['checked'])) {
709  print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($adherent->login).'">'.dol_escape_htmltag($adherent->login).'</td>';
710  if (!$i) {
711  $totalarray['nbfield']++;
712  }
713  }
714 
715  // Label
716  if (!empty($arrayfields['t.libelle']['checked'])) {
717  print '<td class="tdoverflowmax400" title="'.dol_escape_htmltag($obj->note_private).'">';
718  print dol_escape_htmltag(dolGetFirstLineOfText($obj->note_private));
719  print '</td>';
720  if (!$i) {
721  $totalarray['nbfield']++;
722  }
723  }
724 
725  // Banque
726  if (!empty($arrayfields['d.bank']['checked'])) {
727  print '<td class="tdmaxoverflow100">';
728  if ($obj->fk_account > 0) {
729  $accountstatic->id = $obj->fk_account;
730  $accountstatic->fetch($obj->fk_account);
731  //$accountstatic->label=$obj->label;
732  print $accountstatic->getNomUrl(1);
733  }
734  print "</td>\n";
735  if (!$i) {
736  $totalarray['nbfield']++;
737  }
738  }
739 
740  // Date start
741  if (!empty($arrayfields['c.dateadh']['checked'])) {
742  print '<td class="center">'.dol_print_date($db->jdate($obj->dateadh), 'day')."</td>\n";
743  if (!$i) {
744  $totalarray['nbfield']++;
745  }
746  }
747  // Date end
748  if (!empty($arrayfields['c.datef']['checked'])) {
749  print '<td class="center">'.dol_print_date($db->jdate($obj->datef), 'day')."</td>\n";
750  if (!$i) {
751  $totalarray['nbfield']++;
752  }
753  }
754  // Price
755  if (!empty($arrayfields['d.amount']['checked'])) {
756  print '<td class="right amount">'.price($obj->subscription).'</td>';
757  if (!$i) {
758  $totalarray['nbfield']++;
759  }
760  if (!$i) {
761  $totalarray['pos'][$totalarray['nbfield']] = 'd.amount';
762  }
763  if (empty($totalarray['val']['d.amount'])) {
764  $totalarray['val']['d.amount'] = $obj->subscription;
765  } else {
766  $totalarray['val']['d.amount'] += $obj->subscription;
767  }
768  }
769  // Extra fields
770  include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
771  // Fields from hook
772  $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
773  $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
774  print $hookmanager->resPrint;
775  // Date creation
776  if (!empty($arrayfields['c.datec']['checked'])) {
777  print '<td class="nowrap center">';
778  print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser');
779  print '</td>';
780  if (!$i) {
781  $totalarray['nbfield']++;
782  }
783  }
784  // Date modification
785  if (!empty($arrayfields['c.tms']['checked'])) {
786  print '<td class="nowrap center">';
787  print dol_print_date($db->jdate($obj->date_update), 'dayhour', 'tzuser');
788  print '</td>';
789  if (!$i) {
790  $totalarray['nbfield']++;
791  }
792  }
793  // Action column
794  if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
795  print '<td class="nowrap center">';
796  if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
797  $selected = 0;
798  if (in_array($obj->crowid, $arrayofselected)) {
799  $selected = 1;
800  }
801  print '<input id="cb'.$obj->crowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->crowid.'"'.($selected ? ' checked="checked"' : '').'>';
802  }
803  print '</td>';
804  if (!$i) {
805  $totalarray['nbfield']++;
806  }
807  }
808 
809  print '</tr>'."\n";
810  }
811  $i++;
812 }
813 
814 // Show total line
815 include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
816 
817 
818 // If no record found
819 if ($num == 0) {
820  $colspan = 1;
821  foreach ($arrayfields as $key => $val) {
822  if (!empty($val['checked'])) {
823  $colspan++;
824  }
825  }
826  print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
827 }
828 
829 $db->free($resql);
830 
831 $parameters = array('arrayfields'=>$arrayfields, 'sql' => $sql);
832 $reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
833 print $hookmanager->resPrint;
834 
835 print '</table>'."\n";
836 print '</div>'."\n";
837 
838 print '</form>'."\n";
839 
840 // End of page
841 llxFooter();
842 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:56
llxFooter()
Empty footer.
Definition: wrapper.php:70
Class to manage bank accounts.
Class to manage members of a foundation.
Class to manage members type.
Class to manage standard extra fields.
Class to manage generation of HTML components Only common components must be here.
Class to manage subscriptions of foundation members.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
dolGetFirstLineOfText($text, $nboflines=1, $charset='UTF-8')
Return first line of text.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dolGetButtonTitle($label, $helpText='', $iconClass='fa fa-file', $url='', $id='', $status=1, $params=array())
Function dolGetButtonTitle : this kind of buttons are used in title in list.
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
dolGetButtonTitleSeparator($moreClass="")
Add space between dolGetButtonTitle.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
print_barre_liste($titre, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $hideselectlimit=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.