dolibarr 25.0.0-alpha
list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2013-2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2014 Marcos García <marcosgdf@gmail.com>
4 * Copyright (C) 2024 Frédéric France <frederic.france@free.fr>
5 * Copyright (C) 2025 MDW <mdeweerd@users.noreply.github.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
27// Load Dolibarr environment
28require '../main.inc.php';
36require_once DOL_DOCUMENT_ROOT."/core/lib/admin.lib.php";
37require_once DOL_DOCUMENT_ROOT."/core/lib/files.lib.php";
38require_once DOL_DOCUMENT_ROOT."/opensurvey/class/opensurveysondage.class.php";
39
40// Load translation files required by the page
41$langs->load("opensurvey");
42
43$action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'add', 'create', 'edit', 'update', 'view', ...
44$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
45$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ?
46$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation
47$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
48$toselect = GETPOST('toselect', 'array:int'); // Array of ids of elements selected into a list
49$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : 'opensurveylist'; // To manage different context of search
50$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
51$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
52$mode = GETPOST('mode', 'aZ');
53
54$search_all = trim(GETPOST('search_all', 'alphanohtml'));
55$search_expired = GETPOST('search_expired');
56
57$id = GETPOST('id', 'alpha');
58$search_ref = GETPOST('search_ref', 'alpha');
59$search_title = GETPOST('search_title', 'alpha');
60$search_status = GETPOST('search_status', 'alpha');
61
62// Load variable for pagination
63$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
64$sortfield = GETPOST('sortfield', 'aZ09comma');
65$sortorder = GETPOST('sortorder', 'aZ09comma');
66$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
67if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) {
68 $page = 0;
69} // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action
70$offset = $limit * $page;
71$pageprev = $page - 1;
72$pagenext = $page + 1;
73
74// Initialize a technical objects
76$opensurvey_static = new Opensurveysondage($db);
77
78$extrafields = new ExtraFields($db);
79$diroutputmassaction = $conf->opensurvey->dir_output.'/temp/massgeneration/'.$user->id;
80$hookmanager->initHooks(array('surveylist')); // Note that conf->hooks_modules contains array
81// Fetch optionals attributes and labels
82$extrafields->fetch_name_optionals_label($object->table_element);
83$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
84
85// Default sort order (if not yet defined by previous GETPOST)
86if (!$sortfield) {
87 $sortfield = "p.date_fin";
88}
89if (!$sortorder) {
90 $sortorder = "DESC";
91}
92
93// Security check
94if (!$user->hasRight('opensurvey', 'read')) {
96}
97
98$fieldstosearchall = array();
99
100// Definition of fields for list
101$arrayfields = array();
102// Extra fields
103include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
104// Add hook to complete $arrayfield
105$parameters = array('arrayfields' => &$arrayfields);
106$reshook = $hookmanager->executeHooks('completeArrayFields', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
107
108
109$object->fields = dol_sort_array($object->fields, 'position');
110$arrayfields = dol_sort_array($arrayfields, 'position');
111
112$permissiontoread = $user->hasRight('opensurvey', 'read');
113$permissiontoadd = $user->hasRight('opensurvey', 'write');
114// permission delete doesn't exists
115$permissiontodelete = $user->hasRight('opensurvey', 'write');
116
117
118/*
119 * Actions
120 */
121
122if (GETPOST('cancel', 'alpha')) {
123 $action = 'list';
124 $massaction = '';
125}
126if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {
127 $massaction = '';
128}
129
130$parameters = array('arrayfields' => &$arrayfields);
131$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
132if ($reshook < 0) {
133 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
134}
135
136if (empty($reshook)) {
137 // Selection of new fields
138 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
139
140 // Purge search criteria
141 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
142 $search_status = '';
143 $search_title = '';
144 $search_ref = '';
145 $toselect = array();
146 $search_array_options = array();
147 }
148 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
149 || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
150 $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
151 }
152
153 // Mass actions
154 $objectclass = 'Opensurveysondage';
155 $objectlabel = 'Opensurveysondage';
156 $uploaddir = $conf->opensurvey->dir_output;
157 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
158}
159
160
161/*
162 * View
163 */
164
165$form = new Form($db);
166
167$now = dol_now();
168
169//$help_url="EN:Module_MyObject|FR:Module_MyObject_FR|ES:Módulo_MyObject";
170$help_url = '';
171$title = $langs->trans('OpenSurveyArea');
172
173// Build and execute select
174// --------------------------------------------------------------------
175$sql = "SELECT p.id_sondage as rowid, p.fk_user_creat, p.format, p.date_fin, p.status, p.titre as title, p.nom_admin, p.tms,";
176$sql .= " u.login, u.firstname, u.lastname";
177
178$sqlfields = $sql;
179
180$sql .= " FROM ".MAIN_DB_PREFIX."opensurvey_sondage as p";
181$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user u ON u.rowid = p.fk_user_creat";
182$sql .= " WHERE p.entity IN (".getEntity('survey').")";
183if ($search_status != '-1' && $search_status != '') {
184 $sql .= natural_search("p.status", $search_status, 2);
185}
186if (!empty($search_expired) && $search_expired == 'expired') {
187 $sql .= " AND p.date_fin < '".$db->idate($now)."'";
188}
189if (!empty($search_expired) && $search_expired == 'opened') {
190 $sql .= " AND p.date_fin >= '".$db->idate($now)."'";
191}
192if (!empty($search_ref)) {
193 $sql .= natural_search("p.id_sondage", $search_ref);
194}
195if (!empty($search_title)) {
196 $sql .= natural_search("p.titre", $search_title);
197}
198// Add where from extra fields
199include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
200// Add where from hooks
201$parameters = array();
202$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook
203$sql .= $hookmanager->resPrint;
204
205// Count total nb of records
206$nbtotalofrecords = '';
207if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
208 /* The fast and low memory method to get and count full list converts the sql into a sql count */
209 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
210 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
211
212 $resql = $db->query($sqlforcount);
213 if ($resql) {
214 $objforcount = $db->fetch_object($resql);
215 $nbtotalofrecords = $objforcount->nbtotalofrecords;
216 } else {
218 }
219
220 if (($page * $limit) > (int) $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
221 $page = 0;
222 $offset = 0;
223 }
224 $db->free($resql);
225}
226
227// Complete request and execute it with limit
228$sql .= $db->order($sortfield, $sortorder);
229if ($limit) {
230 $sql .= $db->plimit($limit + 1, $offset);
231}
232
233$resql = $db->query($sql);
234if (!$resql) {
236 exit;
237}
238
239$num = $db->num_rows($resql);
240
241
242// Direct jump if only one record found
243if ($num == 1 && getDolGlobalInt('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all && !$page) {
244 $obj = $db->fetch_object($resql);
245 $id = $obj->rowid;
246 header("Location: ".dol_buildpath('/opensurvey/card.php', 1).'?id='.((int) $id));
247 exit;
248}
249
250
251// Output page
252// --------------------------------------------------------------------
253
254llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'bodyforlist');
255
256$arrayofselected = is_array($toselect) ? $toselect : array();
257
258$param = '';
259if (/* !empty($contextpage) && */ $contextpage != $_SERVER["PHP_SELF"]) { // $contextpage can't be empty
260 $param .= '&contextpage='.urlencode($contextpage);
261}
262if ($limit > 0 && $limit != $conf->liste_limit) {
263 $param .= '&limit='.((int) $limit);
264}
265if ($optioncss != '') {
266 $param .= '&optioncss='.urlencode($optioncss);
267}
268$fieldtosortuser = getDolGlobalString('MAIN_FIRSTNAME_NAME_POSITION') ? 'lastname' : 'firstname';
269
270// Add $param from extra fields
271include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
272
273// List of mass actions available
274$arrayofmassactions = array(
275 //'presend'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail"),
276 //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
277);
278if (!empty($permissiontodelete)) {
279 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
280}
281if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) {
282 $arrayofmassactions = array();
283}
284$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
285
286print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">'."\n";
287if ($optioncss != '') {
288 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
289}
290print '<input type="hidden" name="token" value="'.newToken().'">';
291print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
292print '<input type="hidden" name="action" value="list">';
293print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
294print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
295print '<input type="hidden" name="page" value="'.$page.'">';
296print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
297print '<input type="hidden" name="page_y" value="">';
298print '<input type="hidden" name="mode" value="'.$mode.'">';
299
300$newcardbutton = '';
301$newcardbutton .= dolGetButtonTitle($langs->trans('NewSurvey'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/opensurvey/wizard/index.php', '', $user->hasRight('opensurvey', 'write'));
302
303print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'poll', 0, $newcardbutton, '', $limit, 0, 0, 1);
304
305// Add code for pre mass action (confirmation or email presend form)
306$topicmail = "SendOpenSurveyRef";
307$modelmail = "opensurvey";
308$objecttmp = new Opensurveysondage($db);
309$trackid = 'surv'.$object->id;
310include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
311
312
313if ($search_all) {
314 $setupstring = '';
315 // @phan-suppress-next-line PhanEmptyForeach
316 foreach ($fieldstosearchall as $key => $val) { // @phpstan-ignore-line
317 $fieldstosearchall[$key] = $langs->trans($val);
318 $setupstring .= $key."=".$val.";";
319 }
320 print '<!-- Search done like if OPENSURVEY_QUICKSEARCH_ON_FIELDS = '.$setupstring.' -->'."\n";
321 print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'</div>';
322}
323
324$moreforfilter = '';
325/*$moreforfilter.='<div class="divsearchfield">';
326$moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
327$moreforfilter.= '</div>';*/
328
329$parameters = array();
330$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
331if (empty($reshook)) {
332 $moreforfilter .= $hookmanager->resPrint;
333} else {
334 $moreforfilter = $hookmanager->resPrint;
335}
336$parameters = array(
337 'arrayfields' => &$arrayfields,
338);
339
340if (!empty($moreforfilter)) {
341 print '<div class="liste_titre liste_titre_bydiv centpercent">';
342 print $moreforfilter;
343 print '</div>';
344}
345
346$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
347$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, $conf->main_checkbox_left_column); // This also change content of $arrayfields with user setup
348$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
349$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
350
351print '<div class="div-table-responsive">';
352print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
353
354// Fields title search
355// --------------------------------------------------------------------
356print '<tr class="liste_titre_filter">';
357// Action column
358if ($conf->main_checkbox_left_column) {
359 print '<td class="liste_titre center maxwidthsearch">';
360 $searchpicto = $form->showFilterButtons('left');
361 print $searchpicto;
362 print '</td>';
363}
364print '<td class="liste_titre"><input type="text" class="maxwidth100" name="search_ref" value="'.dol_escape_htmltag($search_ref).'"></td>';
365print '<td class="liste_titre"><input type="text" class="maxwidth100" name="search_title" value="'.dol_escape_htmltag($search_title).'"></td>';
366print '<td class="liste_titre"></td>';
367print '<td class="liste_titre"></td>';
368print '<td class="liste_titre"></td>';
369print '<td class="liste_titre"></td>';
370print '<td class="liste_titre"></td>';
371$arraystatus = array('-1' => '&nbsp;', '0' => $langs->trans("Draft"), '1' => $langs->trans("Opened"), '2' => $langs->trans("Closed"));
372print '<td class="liste_titre center parentonrightofpage">'.$form->selectarray('search_status', $arraystatus, $search_status, 0, 0, 0, '', 0, 0, 0, '', 'maxwidth100 onrightofpage').'</td>';
373// Extra fields
374include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
375
376// Fields from hook
377$parameters = array('arrayfields' => $arrayfields);
378$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
379print $hookmanager->resPrint;
380// Action column
381if (!$conf->main_checkbox_left_column) {
382 print '<td class="liste_titre center maxwidthsearch">';
383 $searchpicto = $form->showFilterButtons();
384 print $searchpicto;
385 print '</td>';
386}
387print '</tr>'."\n";
388
389$totalarray = array();
390$totalarray['nbfield'] = 0;
391
392// Fields title label
393// --------------------------------------------------------------------
394print '<tr class="liste_titre">';
395// Action column
396if ($conf->main_checkbox_left_column) {
397 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
398 $totalarray['nbfield']++;
399}
400print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "p.id_sondage", "", $param, "", $sortfield, $sortorder);
401$totalarray['nbfield']++;
402print_liste_field_titre("Title", $_SERVER["PHP_SELF"], "p.titre", "", $param, "", $sortfield, $sortorder);
403$totalarray['nbfield']++;
404print_liste_field_titre("Type", $_SERVER["PHP_SELF"], "p.format", "", $param, "", $sortfield, $sortorder);
405$totalarray['nbfield']++;
406print_liste_field_titre("Author", $_SERVER["PHP_SELF"], "u.".$fieldtosortuser, "", $param, "", $sortfield, $sortorder);
407$totalarray['nbfield']++;
408print_liste_field_titre("NbOfVoters", $_SERVER["PHP_SELF"], "", "", $param, 'align="right"', $sortfield, $sortorder);
409$totalarray['nbfield']++;
410print_liste_field_titre("ExpireDate", $_SERVER["PHP_SELF"], "p.date_fin", "", $param, 'align="center"', $sortfield, $sortorder);
411$totalarray['nbfield']++;
412print_liste_field_titre("DateLastModification", $_SERVER["PHP_SELF"], "p.tms", "", $param, 'align="center"', $sortfield, $sortorder);
413$totalarray['nbfield']++;
414print_liste_field_titre("Status", $_SERVER["PHP_SELF"], "p.status", "", $param, 'align="center"', $sortfield, $sortorder);
415$totalarray['nbfield']++;
416// Extra fields
417include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
418// Hook fields
419$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder);
420$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook
421print $hookmanager->resPrint;
422// Action column
423if (!$conf->main_checkbox_left_column) {
424 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', 'align="center"', $sortfield, $sortorder, 'maxwidthsearch ')."\n";
425 $totalarray['nbfield']++;
426}
427print '</tr>'."\n";
428
429$savnbfield = $totalarray['nbfield'];
430
431
432// Loop on record
433// --------------------------------------------------------------------
434$i = 0;
435$totalarray = array();
436$totalarray['nbfield'] = 0;
437$imaxinloop = ($limit ? min($num, $limit) : $num);
438while ($i < $imaxinloop) {
439 $obj = $db->fetch_object($resql);
440 if (empty($obj)) {
441 break; // Should not happen
442 }
443
444 $nbuser = 0;
445 $sql2 = 'select COUNT(*) as nb from '.MAIN_DB_PREFIX."opensurvey_user_studs where id_sondage='".$db->escape($obj->rowid)."'";
446 $resql2 = $db->query($sql2);
447 if ($resql2) {
448 $obj2 = $db->fetch_object($resql2);
449 $nbuser = $obj2->nb;
450 } else {
452 }
453
454 $opensurvey_static->id = $obj->rowid;
455 $opensurvey_static->ref = $obj->rowid;
456 $opensurvey_static->title = $obj->title;
457 $opensurvey_static->status = $obj->status;
458 $opensurvey_static->date_fin = $db->jdate($obj->date_fin);
459
460 // Show here line of result
461 print '<tr data-rowid="'.$opensurvey_static->id.'" class="oddeven row-with-select">';
462 // Action column
463 if ($conf->main_checkbox_left_column) {
464 print '<td class="nowrap center">';
465 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
466 $selected = 0;
467 if (in_array($obj->rowid, $arrayofselected)) {
468 $selected = 1;
469 }
470 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
471 }
472 print '</td>';
473 if (!$i) {
474 $totalarray['nbfield']++;
475 }
476 }
477
478 // Ref
479 print '<td class="tdoverflowmax150">';
480 print $opensurvey_static->getNomUrl(1);
481 print '</td>';
482 if (!$i) {
483 $totalarray['nbfield']++;
484 }
485
486 // Title
487 print '<td class="tdoverflowmax200">'.dol_htmlentities($obj->title).'</td>';
488 if (!$i) {
489 $totalarray['nbfield']++;
490 }
491
492 // Type
493 print '<td class="tdoverflowmax125">';
494 $type = ($obj->format == 'A') ? 'classic' : 'date';
495 print img_picto('', dol_buildpath('/opensurvey/img/'.($type == 'classic' ? 'chart-32.png' : 'calendar-32.png'), 1), 'width="16"', 1);
496 print ' '.$langs->trans($type == 'classic' ? "TypeClassic" : "TypeDate");
497 print '</td>';
498 if (!$i) {
499 $totalarray['nbfield']++;
500 }
501
502 print '<td class="tdoverflowmax125">';
503 // Author
504 if ($obj->fk_user_creat) {
505 $userstatic = new User($db);
506 $userstatic->id = $obj->fk_user_creat;
507 $userstatic->firstname = $obj->firstname;
508 $userstatic->lastname = $obj->lastname;
509 $userstatic->login = $userstatic->getFullName($langs, 0, -1, 48);
510
511 print $userstatic->getLoginUrl(1);
512 } else {
513 print dol_htmlentities($obj->nom_admin);
514 }
515 print '</td>';
516 if (!$i) {
517 $totalarray['nbfield']++;
518 }
519
520 // Nb of voters
521 print'<td class="right">'.$nbuser.'</td>'."\n";
522 if (!$i) {
523 $totalarray['nbfield']++;
524 }
525
526 print '<td class="center nowraponall">'.dol_print_date($db->jdate($obj->date_fin), 'day');
527 if ($db->jdate($obj->date_fin) < $now && $obj->status == Opensurveysondage::STATUS_VALIDATED) {
528 print img_warning($langs->trans("Expired"));
529 }
530 print '</td>';
531 if (!$i) {
532 $totalarray['nbfield']++;
533 }
534
535 print '<td class="center nowraponall">'.dol_print_date($db->jdate($obj->tms), 'dayhour');
536 print '</td>';
537 if (!$i) {
538 $totalarray['nbfield']++;
539 }
540
541 print '<td class="center">'.$opensurvey_static->getLibStatut(5).'</td>'."\n";
542 if (!$i) {
543 $totalarray['nbfield']++;
544 }
545
546 // Extra fields
547 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
548 // Fields from hook
549 $parameters = array('arrayfields' => $arrayfields, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
550 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook
551 print $hookmanager->resPrint;
552 // Action column
553 if (!$conf->main_checkbox_left_column) {
554 print '<td class="nowrap center">';
555 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
556 $selected = 0;
557 if (in_array($obj->rowid, $arrayofselected)) {
558 $selected = 1;
559 }
560 print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';
561 }
562 print '</td>';
563 if (!$i) {
564 $totalarray['nbfield']++;
565 }
566 }
567
568 print '</tr>'."\n";
569 $i++;
570}
571
572// Show total line
573include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
574
575
576// If no record found
577if ($num == 0) {
578 $colspan = $savnbfield;
579 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
580}
581
582
583$db->free($resql);
584
585$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
586$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook
587print $hookmanager->resPrint;
588
589print '</table>'."\n";
590print '</div>'."\n";
591
592print '</form>'."\n";
593
594if (in_array('builddoc', array_keys($arrayofmassactions)) && ($nbtotalofrecords === '' || $nbtotalofrecords)) {
595 $hidegeneratedfilelistifempty = 1;
596 if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) {
597 $hidegeneratedfilelistifempty = 0;
598 }
599
600 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
601 $formfile = new FormFile($db);
602
603 // Show list of available documents
604 $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
605 $urlsource .= str_replace('&amp;', '&', $param);
606
607 $filedir = $diroutputmassaction;
608 $genallowed = $permissiontoread;
609 $delallowed = $permissiontoadd;
610
611 print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);
612}
613
614// End of page
615llxFooter();
616$db->close();
$id
Support class for third parties, contacts, members, users or resources.
Definition account.php:47
if(! $sortfield) if(! $sortorder) $object
Definition account.php:100
$totalarray
Definition list.php:501
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
Definition wrapper.php:91
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Definition wrapper.php:73
Class to manage standard extra fields.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Put here description of your class.
const STATUS_VALIDATED
Validated/Opened status.
Class to manage Dolibarr users.
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $conf
The main.inc.php has been included so the following variable are now defined:
if(!isModEnabled('ai')||!getDolGlobalString('AI_ASSISTANT_ENABLED')) global $db
API class for accounts.
dol_now($mode='gmt')
Return date for now.
natural_search($fields, $value, $mode=0, $nofirstand=0, $sqltoadd='')
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0, $nodefault=0)
Return value of a param into GET or POST supervariable.
dol_htmlentities($string, $flags=ENT_QUOTES|ENT_SUBSTITUTE, $encoding='UTF-8', $double_encode=false)
Replace htmlentities functions.
GETPOSTINT($paramname, $method=0, $nodefault=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
Show picto whatever it's its name (generic function)
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
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.
getTitleFieldOfList($name, $thead=0, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $disablesortlink=0, $tooltip='', $forcenowrapcolumntitle=0)
Get title line of an array.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.