dolibarr 18.0.6
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
27require '../../main.inc.php';
28require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent.class.php';
29require_once DOL_DOCUMENT_ROOT.'/adherents/class/adherent_type.class.php';
30require_once DOL_DOCUMENT_ROOT.'/adherents/class/subscription.class.php';
31require_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');
64if (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;
71if (!$sortorder) {
72 $sortorder = "DESC";
73}
74if (!$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
119if (GETPOST('cancel', 'alpha')) {
120 $action = 'list';
121 $massaction = '';
122}
123if (!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
129if ($reshook < 0) {
130 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
131}
132
133if (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
182if (!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').")";
200if (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}
204if ($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}
211if ($search_type) {
212 $sql .= natural_search(array('c.fk_type'), $search_type);
213}
214if ($search_lastname) {
215 $sql .= natural_search(array('d.lastname', 'd.societe'), $search_lastname);
216}
217if ($search_firstname) {
218 $sql .= natural_search(array('d.firstname'), $search_firstname);
219}
220if ($search_login) {
221 $sql .= natural_search('d.login', $search_login);
222}
223if ($search_note) {
224 $sql .= natural_search('c.note', $search_note);
225}
226if ($search_account > 0) {
227 $sql .= " AND b.fk_account = ".((int) $search_account);
228}
229if ($search_amount) {
230 $sql .= natural_search('c.subscription', $search_amount, 1);
231}
232if ($search_all) {
233 $sql .= natural_search(array_keys($fieldstosearchall), $search_all);
234}
235// Add where from extra fields
236include 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 = '';
244if (!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);
265if ($limit) {
266 $sql .= $db->plimit($limit + 1, $offset);
267}
268
269$resql = $db->query($sql);
270if (!$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
279if ($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");
290if (!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
295llxHeader('', $title, $help_url);
296
297$arrayofselected = is_array($toselect) ? $toselect : array();
298
299$param = '';
300if (!empty($mode)) {
301 $param .='&mode='.urlencode($mode);
302}
303if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
304 $param .= '&contextpage='.urlencode($contextpage);
305}
306if ($limit > 0 && $limit != $conf->liste_limit) {
307 $param .= '&limit='.((int) $limit);
308}
309if ($statut != '') {
310 $param .= "&statut=".urlencode($statut);
311}
312if ($search_type) {
313 $param .= "&search_type=".urlencode($search_type);
314}
315if ($date_select) {
316 $param .= "&date_select=".urlencode($date_select);
317}
318if ($search_lastname) {
319 $param .= "&search_lastname=".urlencode($search_lastname);
320}
321if ($search_login) {
322 $param .= "&search_login=".urlencode($search_login);
323}
324if ($search_account) {
325 $param .= "&search_account=".urlencode($search_account);
326}
327if ($search_amount) {
328 $param .= "&search_amount=".urlencode($search_amount);
329}
330if ($optioncss != '') {
331 $param .= '&optioncss='.urlencode($optioncss);
332}
333// Add $param from extra fields
334include 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);
345if (!empty($permissiontodelete)) {
346 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
347}
348if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) {
349 $arrayofmassactions = array();
350}
351$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
352
353print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
354if ($optioncss != '') {
355 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
356}
357print '<input type="hidden" name="token" value="'.newToken().'">';
358print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
359print '<input type="hidden" name="action" value="list">';
360print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
361print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
362print '<input type="hidden" name="page" value="'.$page.'">';
363print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
364print '<input type="hidden" name="date_select" value="'.$date_select.'">';
365print '<input type="hidden" name="page_y" value="">';
366print '<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'));
371if ($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
376print_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;
382include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
383
384if ($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
401if (empty($reshook)) {
402 $moreforfilter .= $hookmanager->resPrint;
403} else {
404 $moreforfilter = $hookmanager->resPrint;
405}
406
407if (!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
420print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
421print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
422
423// Fields title search
424// --------------------------------------------------------------------
425print '<tr class="liste_titre_filter">';
426// Action column
427if (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
434if (!empty($conf->global->MAIN_SHOW_TECHNICAL_ID)) {
435 print '<td class="liste_titre">&nbsp;</td>';
436}
437
438// Ref
439if (!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
445if (!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
451if (!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
456if (!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
461if (!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
466if (!empty($arrayfields['t.libelle']['checked'])) {
467 print '<td class="liste_titre">';
468 print '';
469 print '</td>';
470}
471
472if (!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
478if (!empty($arrayfields['c.dateadh']['checked'])) {
479 print '<td class="liste_titre">&nbsp;</td>';
480}
481
482if (!empty($arrayfields['c.datef']['checked'])) {
483 print '<td class="liste_titre">&nbsp;</td>';
484}
485
486if (!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
492include 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
497print $hookmanager->resPrint;
498// Date creation
499if (!empty($arrayfields['c.datec']['checked'])) {
500 print '<td class="liste_titre">';
501 print '</td>';
502}
503// Date modification
504if (!empty($arrayfields['c.tms']['checked'])) {
505 print '<td class="liste_titre">';
506 print '</td>';
507}
508
509// Action column
510if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
511 print '<td class="liste_titre center maxwidthsearch">';
512 $searchpicto = $form->showFilterButtons();
513 print $searchpicto;
514 print '</td>';
515}
516print '</tr>'."\n";
517
518$totalarray = array();
519$totalarray['nbfield'] = 0;
520
521// Fields title label
522// --------------------------------------------------------------------
523print '<tr class="liste_titre">';
524// Action column
525if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
526 print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], '', '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ');
527 $totalarray['nbfield']++;
528}
529if (!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}
533if (!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}
537if (!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}
541if (!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}
545if (!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}
549if (!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}
553if (!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}
557if (!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}
561if (!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}
565if (!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
571include 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
576print $hookmanager->resPrint;
577if (!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}
580if (!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
584if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
585 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
586 $totalarray['nbfield']++;
587}
588print '</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);
597while ($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
815include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
816
817
818// If no record found
819if ($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
833print $hookmanager->resPrint;
834
835print '</table>'."\n";
836print '</div>'."\n";
837
838print '</form>'."\n";
839
840// End of page
841llxFooter();
842$db->close();
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.
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.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
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.