dolibarr 19.0.3
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", "banks"));
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 as status,";
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 && getDolGlobalString('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('param' => &$param);
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 (getDolGlobalString('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->status;
615 $adherent->status = $obj->status;
616 $adherent->login = $obj->login;
617 $adherent->photo = $obj->photo;
618 $adherent->gender = $obj->gender;
619 $adherent->morphy = $obj->morphy;
620 $adherent->email = $obj->email;
621 $adherent->typeid = $obj->fk_type;
622 $adherent->datefin = $db->jdate($obj->datef);
623
624 $typeid = ($obj->fk_type > 0 ? $obj->fk_type : $adherent->typeid);
625 $adht = new AdherentType($db);
626 $adht->fetch($typeid);
627
628 $adherent->need_subscription = $adht->subscription;
629
630 if ($mode == 'kanban') {
631 if ($i == 0) {
632 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
633 print '<div class="box-flex-container kanban">';
634 }
635 // Output Kanban
636 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
637 $selected = 0;
638 if (in_array($object->id, $arrayofselected)) {
639 $selected = 1;
640 }
641 }
642
643 //fetch informations needs on this mode
644
645 if ($obj->fk_account > 0) {
646 $accountstatic->id = $obj->fk_account;
647 $accountstatic->fetch($obj->fk_account);
648 }
649 // Output Kanban
650 print $subscription->getKanbanView('', array('selected' => in_array($object->id, $arrayofselected), 'adherent_type' => $adht, 'member' => $adherent, 'bank'=>($obj->fk_account > 0 ? $accountstatic : null)));
651 if ($i == ($imaxinloop - 1)) {
652 print '</div>';
653 print '</td></tr>';
654 }
655 } else {
656 // Show here line of result
657 $j = 0;
658 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
659 // Action column
660 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
661 print '<td class="nowrap center">';
662 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
663 $selected = 0;
664 if (in_array($obj->crowid, $arrayofselected)) {
665 $selected = 1;
666 }
667 print '<input id="cb'.$obj->crowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->crowid.'"'.($selected ? ' checked="checked"' : '').'>';
668 }
669 print '</td>';
670 if (!$i) {
671 $totalarray['nbfield']++;
672 }
673 }
674 // Ref
675 if (!empty($arrayfields['d.ref']['checked'])) {
676 print '<td class="nowraponall">'.$subscription->getNomUrl(1).'</td>';
677 if (!$i) {
678 $totalarray['nbfield']++;
679 }
680 }
681 // Type
682 if (!empty($arrayfields['d.fk_type']['checked'])) {
683 print '<td class="tdoverflowmax100">';
684 if ($typeid > 0) {
685 print $adht->getNomUrl(1);
686 }
687 print '</td>';
688 if (!$i) {
689 $totalarray['nbfield']++;
690 }
691 }
692
693 // Lastname
694 if (!empty($arrayfields['d.lastname']['checked'])) {
695 print '<td class="tdoverflowmax125">'.$adherent->getNomUrl(-1, 0, 'card', 'lastname').'</td>';
696 if (!$i) {
697 $totalarray['nbfield']++;
698 }
699 }
700 // Firstname
701 if (!empty($arrayfields['d.firstname']['checked'])) {
702 print '<td class="tdoverflowmax125" title="'.dol_escape_htmltag($adherent->firstname).'">'.dol_escape_htmltag($adherent->firstname).'</td>';
703 if (!$i) {
704 $totalarray['nbfield']++;
705 }
706 }
707
708 // Login
709 if (!empty($arrayfields['d.login']['checked'])) {
710 print '<td class="tdoverflowmax150" title="'.dol_escape_htmltag($adherent->login).'">'.dol_escape_htmltag($adherent->login).'</td>';
711 if (!$i) {
712 $totalarray['nbfield']++;
713 }
714 }
715
716 // Label
717 if (!empty($arrayfields['t.libelle']['checked'])) {
718 print '<td class="tdoverflowmax400" title="'.dol_escape_htmltag($obj->note_private).'">';
719 print dol_escape_htmltag(dolGetFirstLineOfText($obj->note_private));
720 print '</td>';
721 if (!$i) {
722 $totalarray['nbfield']++;
723 }
724 }
725
726 // Banque
727 if (!empty($arrayfields['d.bank']['checked'])) {
728 print '<td class="tdmaxoverflow100">';
729 if ($obj->fk_account > 0) {
730 $accountstatic->id = $obj->fk_account;
731 $accountstatic->fetch($obj->fk_account);
732 //$accountstatic->label=$obj->label;
733 print $accountstatic->getNomUrl(1);
734 }
735 print "</td>\n";
736 if (!$i) {
737 $totalarray['nbfield']++;
738 }
739 }
740
741 // Date start
742 if (!empty($arrayfields['c.dateadh']['checked'])) {
743 print '<td class="center nowraponall">'.dol_print_date($db->jdate($obj->dateadh), 'day')."</td>\n";
744 if (!$i) {
745 $totalarray['nbfield']++;
746 }
747 }
748 // Date end
749 if (!empty($arrayfields['c.datef']['checked'])) {
750 print '<td class="center nowraponall">'.dol_print_date($db->jdate($obj->datef), 'day')."</td>\n";
751 if (!$i) {
752 $totalarray['nbfield']++;
753 }
754 }
755 // Price
756 if (!empty($arrayfields['d.amount']['checked'])) {
757 print '<td class="right amount">'.price($obj->subscription).'</td>';
758 if (!$i) {
759 $totalarray['nbfield']++;
760 }
761 if (!$i) {
762 $totalarray['pos'][$totalarray['nbfield']] = 'd.amount';
763 }
764 if (empty($totalarray['val']['d.amount'])) {
765 $totalarray['val']['d.amount'] = $obj->subscription;
766 } else {
767 $totalarray['val']['d.amount'] += $obj->subscription;
768 }
769 }
770 // Extra fields
771 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
772 // Fields from hook
773 $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
774 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters); // Note that $action and $object may have been modified by hook
775 print $hookmanager->resPrint;
776 // Date creation
777 if (!empty($arrayfields['c.datec']['checked'])) {
778 print '<td class="nowrap center">';
779 print dol_print_date($db->jdate($obj->date_creation), 'dayhour', 'tzuser');
780 print '</td>';
781 if (!$i) {
782 $totalarray['nbfield']++;
783 }
784 }
785 // Date modification
786 if (!empty($arrayfields['c.tms']['checked'])) {
787 print '<td class="nowrap center">';
788 print dol_print_date($db->jdate($obj->date_update), 'dayhour', 'tzuser');
789 print '</td>';
790 if (!$i) {
791 $totalarray['nbfield']++;
792 }
793 }
794 // Action column
795 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
796 print '<td class="nowrap center">';
797 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
798 $selected = 0;
799 if (in_array($obj->crowid, $arrayofselected)) {
800 $selected = 1;
801 }
802 print '<input id="cb'.$obj->crowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->crowid.'"'.($selected ? ' checked="checked"' : '').'>';
803 }
804 print '</td>';
805 if (!$i) {
806 $totalarray['nbfield']++;
807 }
808 }
809
810 print '</tr>'."\n";
811 }
812 $i++;
813}
814
815// Show total line
816include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
817
818
819// If no record found
820if ($num == 0) {
821 $colspan = 1;
822 foreach ($arrayfields as $key => $val) {
823 if (!empty($val['checked'])) {
824 $colspan++;
825 }
826 }
827 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
828}
829
830$db->free($resql);
831
832$parameters = array('arrayfields'=>$arrayfields, 'sql' => $sql);
833$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
834print $hookmanager->resPrint;
835
836print '</table>'."\n";
837print '</div>'."\n";
838
839print '</form>'."\n";
840
841// End of page
842llxFooter();
843$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:55
llxFooter()
Empty footer.
Definition wrapper.php:69
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 a 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.