dolibarr 21.0.0-beta
conferenceorbooth_list.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2007-2017 Laurent Destailleur <eldy@users.sourceforge.net>
3 * Copyright (C) 2021 Florian Henry <florian.henry@scopen.fr>
4 * Copyright (C) 2023-2024 Frédéric France <frederic.france@free.fr>
5 * Copyright (C) 2024 Alexandre Spangaro <alexandre@inovea-conseil.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
28// Load Dolibarr environment
29require '../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
31require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
32require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
33require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
34require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
35require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php';
36require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorboothattendee.class.php';
37require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php';
38require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
39
50// Load translation files required by the page
51$langs->loadLangs(array("eventorganization", "other", "projects", "companies"));
52
53// Get Parameters
54$action = GETPOST('action', 'aZ09') ? GETPOST('action', 'aZ09') : 'view'; // The action 'create'/'add', 'edit'/'update', 'view', ...
55$massaction = GETPOST('massaction', 'alpha'); // The bulk action (combo box choice into lists)
56$show_files = GETPOSTINT('show_files'); // Show files area generated by bulk actions ?
57$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation
58$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button
59$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list
60$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
61$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page
62$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')
63$mode = GETPOST('mode', 'aZ'); // The output mode ('list', 'kanban', 'hierarchy', 'calendar', ...)
64
65$id = GETPOSTINT('id');
66$projectid = GETPOSTINT('projectid');
67$projectref = GETPOST('ref', 'alpha');
68
69// Load variable for pagination
70$limit = GETPOSTINT('limit') ? GETPOSTINT('limit') : $conf->liste_limit;
71$sortfield = GETPOST('sortfield', 'aZ09comma');
72$sortorder = GETPOST('sortorder', 'aZ09comma');
73$page = GETPOSTISSET('pageplusone') ? (GETPOSTINT('pageplusone') - 1) : GETPOSTINT("page");
74if (empty($page) || $page < 0 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha')) {
75 // If $page is not defined, or '' or -1 or if we click on clear filters
76 $page = 0;
77}
78$offset = $limit * $page;
79$pageprev = $page - 1;
80$pagenext = $page + 1;
81
82// Initialize a technical objects
83$object = new ConferenceOrBooth($db);
84$project = new Project($db);
85$extrafields = new ExtraFields($db);
86$diroutputmassaction = $conf->eventorganization->dir_output.'/temp/massgeneration/'.$user->id;
87$hookmanager->initHooks(array($contextpage)); // Note that conf->hooks_modules contains array of activated contexes
88
89// Fetch optionals attributes and labels
90$extrafields->fetch_name_optionals_label($object->table_element);
91//$extrafields->fetch_name_optionals_label($object->table_element_line);
92
93$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');
94
95// Default sort order (if not yet defined by previous GETPOST)
96if (!$sortfield) {
97 reset($object->fields); // Reset is required to avoid key() to return null.
98 $sortfield = "t.".key($object->fields); // Set here default search field. By default 1st field in definition.
99}
100if (!$sortorder) {
101 $sortorder = "ASC";
102}
103
104// Initialize array of search criteria
105$search_all = GETPOST('search_all', 'alphanohtml');
106$search = array();
107foreach ($object->fields as $key => $val) {
108 if (GETPOST('search_'.$key, 'alpha') !== '') {
109 $search[$key] = GETPOST('search_'.$key, 'alpha');
110 }
111 if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
112 $search[$key.'_dtstart'] = dol_mktime(0, 0, 0, GETPOSTINT('search_'.$key.'_dtstartmonth'), GETPOSTINT('search_'.$key.'_dtstartday'), GETPOSTINT('search_'.$key.'_dtstartyear'));
113 $search[$key.'_dtend'] = dol_mktime(23, 59, 59, GETPOSTINT('search_'.$key.'_dtendmonth'), GETPOSTINT('search_'.$key.'_dtendday'), GETPOSTINT('search_'.$key.'_dtendyear'));
114 }
115}
116
117// List of fields to search into when doing a "search in all"
118$fieldstosearchall = array();
119foreach ($object->fields as $key => $val) {
120 if (!empty($val['searchall'])) {
121 $fieldstosearchall['t.'.$key] = $val['label'];
122 }
123}
124
125// Definition of array of fields for columns
126$arrayfields = array();
127foreach ($object->fields as $key => $val) {
128 // If $val['visible']==0, then we never show the field
129 if (!empty($val['visible'])) {
130 $visible = (int) dol_eval((string) $val['visible'], 1);
131 $arrayfields['t.'.$key] = array(
132 'label' => $val['label'],
133 'checked' => (($visible < 0) ? 0 : 1),
134 'enabled' => (abs($visible) != 3 && (bool) dol_eval($val['enabled'], 1)),
135 'position' => $val['position'],
136 'help' => isset($val['help']) ? $val['help'] : ''
137 );
138 }
139}
140// Extra fields
141include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_array_fields.tpl.php';
142
143$object->fields = dol_sort_array($object->fields, 'position');
144$arrayfields = dol_sort_array($arrayfields, 'position');
145
146$permissiontoread = $user->hasRight('eventorganization', 'read');
147$permissiontoadd = $user->hasRight('eventorganization', 'write');
148$permissiontodelete = $user->hasRight('eventorganization', 'delete');
149
150// Security check
151if (!isModEnabled('eventorganization')) {
152 accessforbidden('Module eventorganization not enabled');
153}
154$socid = 0;
155if ($user->socid > 0) { // Protection if external user
156 //$socid = $user->socid;
158}
159$result = restrictedArea($user, 'eventorganization');
160if (!$permissiontoread) {
162}
163
164
165/*
166 * Actions
167 */
168
169if (preg_match('/^set/', $action) && ($projectid > 0 || $projectref) && $user->hasRight('eventorganization', 'write')) {
170 //If "set" fields keys is in projects fields
171 $project_attr = preg_replace('/^set/', '', $action);
172 if (array_key_exists($project_attr, $project->fields)) {
173 $result = $project->fetch($projectid, $projectref);
174 if ($result < 0) {
175 setEventMessages(null, $project->errors, 'errors');
176 } else {
177 $projectid = $project->id;
178 $project->{$project_attr} = GETPOST($project_attr);
179 $result = $project->update($user);
180 if ($result < 0) {
181 setEventMessages(null, $project->errors, 'errors');
182 }
183 }
184 }
185}
186/*if ($action=='setaccept_conference_suggestions' && !empty(GETPOST('cancel', 'alpha'))) {
187
188}*/
189//setaccept_booth_suggestions
190if (GETPOST('cancel', 'alpha')) {
191 $action = 'list';
192 $massaction = '';
193}
194if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend'
195 && $massaction != 'presend_attendees'
196 && $massaction != 'confirm_presend'
197 && $massaction != 'confirm_presend_attendees') {
198 $massaction = '';
199}
200
201
202
203
204$parameters = array();
205$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
206if ($reshook < 0) {
207 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
208}
209
210if (empty($reshook)) {
211 // Selection of new fields
212 include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';
213
214 // Purge search criteria
215 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
216 foreach ($object->fields as $key => $val) {
217 $search[$key] = '';
218 if (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
219 $search[$key.'_dtstart'] = '';
220 $search[$key.'_dtend'] = '';
221 }
222 }
223 $toselect = array();
224 $search_array_options = array();
225 }
226 if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')
227 || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {
228 $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation
229 }
230
231 // Mass actions
232 $objectclass = 'ConferenceOrBooth';
233 $objectlabel = 'ConferenceOrBooth';
234 $uploaddir = $conf->eventorganization->dir_output;
235 include DOL_DOCUMENT_ROOT.'/eventorganization/core/actions_massactions_mail.inc.php';
236 include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';
237
238 if ($permissiontoadd && (($action == 'setstatus' && $confirm == "yes") || $massaction == 'setstatus')) {
239 $db->begin();
240 $error = 0;
241 $nbok = 0;
242 $objecttmp = new $objectclass($db);
243 foreach ($toselect as $key => $idselect) {
244 $result = $objecttmp->fetch($idselect);
245 if ($result > 0) {
246 $objecttmp->status = GETPOSTINT("statusmassaction");
247 $result = $objecttmp->update($user);
248 if ($result <= 0) {
249 setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
250 $error++;
251 break;
252 } else {
253 $nbok++;
254 }
255 } else {
256 setEventMessages($objecttmp->error, $objecttmp->errors, 'errors');
257 $error++;
258 break;
259 }
260 }
261 if (empty($error)) {
262 if ($nbok > 1) {
263 setEventMessages($langs->trans("RecordsUpdated", $nbok), null, 'mesgs');
264 } elseif ($nbok > 0) {
265 setEventMessages($langs->trans("RecordUpdated", $nbok), null, 'mesgs');
266 } else {
267 setEventMessages($langs->trans("NoRecordUpdated"), null, 'mesgs');
268 }
269 $db->commit();
270 } else {
271 $db->rollback();
272 }
273 }
274}
275
276
277
278/*
279 * View
280 */
281
282$form = new Form($db);
283$now = dol_now();
284
285$title = $langs->trans("EventOrganizationConfOrBoothes");
286$help_url = "EN:Module_Event_Organization";
287
288$morejs = array();
289$morecss = array();
290
291if ($projectid > 0 || $projectref) {
292 $result = $project->fetch($projectid, $projectref);
293 if ($result < 0) {
294 setEventMessages(null, $project->errors, 'errors');
295 } else {
296 $projectid = $project->id;
297 }
298 $result = $project->fetch_thirdparty();
299 if ($result < 0) {
300 setEventMessages(null, $project->errors, 'errors');
301 }
302 $result = $project->fetch_optionals();
303 if ($result < 0) {
304 setEventMessages(null, $project->errors, 'errors');
305 }
306
307 $help_url = "EN:Module_Projects|FR:Module_Projets|ES:M&oacute;dulo_Proyectos";
308 $title = $langs->trans("Project") . ' - ' . $langs->trans("EventOrganizationConfOrBoothes") . ' - ' . $project->ref . ' ' . $project->name;
309 if (getDolGlobalString('MAIN_HTML_TITLE') && preg_match('/projectnameonly/', getDolGlobalString('MAIN_HTML_TITLE')) && $project->name) {
310 $title = $project->ref . ' ' . $project->name . ' - ' . $langs->trans("ListOfConferencesOrBooths");
311 }
312}
313
314// Output page
315// --------------------------------------------------------------------
316
317llxHeader('', $title, $help_url, '', 0, 0, '', '', '', 'mod-eventorganization page-list bodyforlist');
318
319
320if ($projectid > 0) {
321 // To verify role of users
322 //$userAccess = $object->restrictedProjectArea($user,'read');
323 $userWrite = $project->restrictedProjectArea($user, 'write');
324 //$userDelete = $object->restrictedProjectArea($user,'delete');
325 //print "userAccess=".$userAccess." userWrite=".$userWrite." userDelete=".$userDelete;
326
327 $head = project_prepare_head($project);
328 print dol_get_fiche_head($head, 'eventorganisation', $langs->trans("ConferenceOrBoothTab"), -1, ($project->public ? 'projectpub' : 'project'));
329
330 // Project card
331 $linkback = '<a href="'.DOL_URL_ROOT.'/projet/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
332
333 $morehtmlref = '<div class="refidno">';
334 // Title
335 $morehtmlref .= $project->title;
336 // Thirdparty
337 if (isset($project->thirdparty->id) && $project->thirdparty->id > 0) {
338 $morehtmlref .= '<br>'.$project->thirdparty->getNomUrl(1, 'project');
339 }
340 $morehtmlref .= '</div>';
341
342 // Define a complementary filter for search of next/prev ref.
343 if (!$user->hasRight('project', 'all', 'lire')) {
344 $objectsListId = $project->getProjectsAuthorizedForUser($user, 0, 0);
345 $project->next_prev_filter = "rowid:IN:(".$db->sanitize(count($objectsListId) ? implode(',', array_keys($objectsListId)) : '0').")";
346 }
347
348 dol_banner_tab($project, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
349
350 print '<div class="fichecenter">';
351 print '<div class="fichehalfleft">';
352 print '<div class="underbanner clearboth"></div>';
353
354 print '<table class="border tableforfield centpercent">';
355
356 // Usage
357 if (getDolGlobalString('PROJECT_USE_OPPORTUNITIES') || !getDolGlobalString('PROJECT_HIDE_TASKS') || isModEnabled('eventorganization')) {
358 print '<tr><td class="tdtop">';
359 print $langs->trans("Usage");
360 print '</td>';
361 print '<td>';
362 if (getDolGlobalString('PROJECT_USE_OPPORTUNITIES')) {
363 print '<input type="checkbox" disabled name="usage_opportunity"'.($project->usage_opportunity ? ' checked="checked"' : '').'"> ';
364 $htmltext = $langs->trans("ProjectFollowOpportunity");
365 print $form->textwithpicto($langs->trans("ProjectFollowOpportunity"), $htmltext);
366 print '<br>';
367 }
368 if (!getDolGlobalString('PROJECT_HIDE_TASKS')) {
369 print '<input type="checkbox" disabled name="usage_task"'.($project->usage_task ? ' checked="checked"' : '').'"> ';
370 $htmltext = $langs->trans("ProjectFollowTasks");
371 print $form->textwithpicto($langs->trans("ProjectFollowTasks"), $htmltext);
372 print '<br>';
373 }
374 if (!getDolGlobalString('PROJECT_HIDE_TASKS') && getDolGlobalString('PROJECT_BILL_TIME_SPENT')) {
375 print '<input type="checkbox" disabled name="usage_bill_time"'.($project->usage_bill_time ? ' checked="checked"' : '').'"> ';
376 $htmltext = $langs->trans("ProjectBillTimeDescription");
377 print $form->textwithpicto($langs->trans("BillTime"), $htmltext);
378 print '<br>';
379 }
380 if (isModEnabled('eventorganization')) {
381 print '<input type="checkbox" disabled name="usage_organize_event"'.($project->usage_organize_event ? ' checked="checked"' : '').'"> ';
382 $htmltext = $langs->trans("EventOrganizationDescriptionLong");
383 print $form->textwithpicto($langs->trans("ManageOrganizeEvent"), $htmltext);
384 }
385 print '</td></tr>';
386 }
387
388 // Visibility
389 print '<tr><td class="titlefield">'.$langs->trans("Visibility").'</td><td>';
390 if ($project->public == 0) {
391 print img_picto($langs->trans('PrivateProject'), 'private', 'class="paddingrightonly"');
392 print $langs->trans("PrivateProject");
393 } else {
394 print img_picto($langs->trans('SharedProject'), 'world', 'class="paddingrightonly"');
395 print $langs->trans("SharedProject");
396 }
397 print '</td></tr>';
398
399 // Budget
400 print '<tr><td>'.$langs->trans("Budget").'</td><td>';
401 if (strcmp($project->budget_amount, '')) {
402 print '<span class="amount">'.price($project->budget_amount, 0, $langs, 1, 0, 0, $conf->currency).'</span>';
403 }
404 print '</td></tr>';
405
406 // Date start - end project
407 print '<tr><td>'.$langs->trans("Dates").' ('.$langs->trans("Project").')</td><td>';
408 $start = dol_print_date($project->date_start, 'day');
409 print($start ? $start : '?');
410 $end = dol_print_date($project->date_end, 'day');
411 print ' - ';
412 print($end ? $end : '?');
413 if ($object->hasDelay()) {
414 print img_warning("Late");
415 }
416 print '</td></tr>';
417
418 // Date start - end of event
419 print '<tr><td>'.$langs->trans("Dates").' ('.$langs->trans("Event").')</td><td>';
420 $start = dol_print_date($project->date_start_event, 'day', 'tzuserrel');
421 print($start ? '<span title="'.dol_print_date($project->date_start_event, 'dayhour', 'tzuserrel').'">'.$start.'</span>' : '?');
422 $end = dol_print_date($project->date_end_event, 'day', 'tzuserrel');
423 print ' - ';
424 print($end ? '<span title="'.dol_print_date($project->date_end_event, 'dayhour', 'tzuserrel').'">'.$end.'</span>' : '?');
425 if ($object->hasDelay()) {
426 print img_warning("Late");
427 }
428 print '</td></tr>';
429
430 // Location event
431 print '<tr><td>'.$langs->trans("Location").'</td><td>';
432 print $project->location;
433 print '</td></tr>';
434
435 // Other attributes
436 $cols = 2;
437 $objectconf = $object;
438 $object = $project;
439 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';
440 $object = $objectconf;
441
442 print '</table>';
443
444 print '</div>';
445 print '<div class="fichehalfright">';
446 print '<div class="underbanner clearboth"></div>';
447
448 print '<table class="border tableforfield centpercent">';
449
450 // Description
451 print '<tr><td class="titlefield tdtop">'.$langs->trans("Description").'</td><td class="valuefield">';
452 print dol_htmlentitiesbr($project->description);
453 print '</td></tr>';
454
455 // Categories
456 if (isModEnabled('category')) {
457 print '<tr><td class="titlefield valignmiddle">'.$langs->trans("Categories").'</td><td class="valuefield">';
458 print $form->showCategories($project->id, Categorie::TYPE_PROJECT, 1);
459 print "</td></tr>";
460 }
461
462 print '<tr><td class="titlefield">';
463 $typeofdata = 'checkbox:'.($project->accept_conference_suggestions ? ' checked="checked"' : '');
464 $htmltext = $langs->trans("AllowUnknownPeopleSuggestConfHelp");
465 print $form->editfieldkey('AllowUnknownPeopleSuggestConf', 'accept_conference_suggestions', ($project->accept_conference_suggestions ? 1 : 0), $project, $permissiontoadd, $typeofdata, '', 0, 0, 'projectid', $htmltext);
466 print '</td><td class="valuefield">';
467 print $form->editfieldval('AllowUnknownPeopleSuggestConf', 'accept_conference_suggestions', ($project->accept_conference_suggestions ? 1 : 0), $project, $permissiontoadd, $typeofdata, '', null, 0, '', 0, '', 'projectid');
468 print "</td></tr>";
469
470 print '<tr><td class="titlefield">';
471 $typeofdata = 'checkbox:'.($project->accept_booth_suggestions ? ' checked="checked"' : '');
472 $htmltext = $langs->trans("AllowUnknownPeopleSuggestBoothHelp");
473 print $form->editfieldkey('AllowUnknownPeopleSuggestBooth', 'accept_booth_suggestions', ($project->accept_booth_suggestions ? 1 : 0), $project, $permissiontoadd, $typeofdata, '', 0, 0, 'projectid', $htmltext);
474 print '</td><td class="valuefield">';
475 print $form->editfieldval('AllowUnknownPeopleSuggestBooth', 'accept_booth_suggestions', ($project->accept_booth_suggestions ? 1 : 0), $project, $permissiontoadd, $typeofdata, '', null, 0, '', 0, '', 'projectid');
476 print "</td></tr>";
477
478 print '<tr><td class="titlefield">';
479 print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', '', $project, $permissiontoadd, 'amount', '', 0, 0, 'projectid');
480 print '</td><td class="valuefield">';
481 print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfBooth'), $langs->trans("PriceOfBoothHelp")), 'price_booth', $project->price_booth, $project, $permissiontoadd, 'amount', '', null, 0, '', 0, '', 'projectid');
482 print "</td></tr>";
483
484 print '<tr><td class="titlefield">';
485 print $form->editfieldkey($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', '', $project, $permissiontoadd, 'amount', '', 0, 0, 'projectid');
486 print '</td><td class="valuefield">';
487 print $form->editfieldval($form->textwithpicto($langs->trans('PriceOfRegistration'), $langs->trans("PriceOfRegistrationHelp")), 'price_registration', $project->price_registration, $project, $permissiontoadd, 'amount', '', null, 0, '', 0, '', 'projectid');
488 print "</td></tr>";
489
490 print '<tr><td class="titlefield">';
491 print $form->editfieldkey($form->textwithpicto($langs->trans('MaxNbOfAttendees'), ''), 'max_attendees', '', $project, $permissiontoadd, 'integer:3', '', 0, 0, 'projectid');
492 print '</td><td class="valuefield">';
493 print $form->editfieldval($form->textwithpicto($langs->trans('MaxNbOfAttendees'), ''), 'max_attendees', $project->max_attendees, $project, $permissiontoadd, 'integer:3', '', null, 0, '', 0, '', 'projectid');
494 print "</td></tr>";
495
496 // Link to ICS for the event
497 print '<tr><td class="titlefield valignmiddle">'.$langs->trans("EventOrganizationICSLinkProject").'</td><td class="valuefield">';
498 // Define $urlwithroot
499 $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
500 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
501
502 // Show message
503 $message = '<a target="_blank" rel="noopener noreferrer" href="'.$urlwithroot.'/public/agenda/agendaexport.php?format=ical'.($conf->entity > 1 ? "&entity=".$conf->entity : "");
504 $message .= '&exportkey='.urlencode(getDolGlobalString('MAIN_AGENDA_XCAL_EXPORTKEY', '...'));
505 $message .= "&project=".$projectid.'&module='.urlencode('project@eventorganization').'&file='.urlencode('calendar-'.$project->ref.'.ics').'&output=file">'.$langs->trans('DownloadICSLink').img_picto('', 'download', 'class="paddingleft"').'</a>';
506 print $message;
507 print "</td></tr>";
508
509 // Link for ICS for conference or booth
510 print '<tr><td class="titlefield valignmiddle">'.$langs->trans("EventOrganizationICSLink");
511 // TODO Add nb of events
512 $nbofconfbooth = 0;
513 if ($nbofconfbooth > 0) {
514 print '<span class="opacitymedium">('.$nbofconfbooth.')</span>';
515 }
516 print '</td><td class="valuefield">';
517 // Define $urlwithroot
518 $urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
519 $urlwithroot = $urlwithouturlroot.DOL_URL_ROOT;
520
521 // Show message
522 $message = '<a target="_blank" rel="noopener noreferrer" href="'.$urlwithroot.'/public/agenda/agendaexport.php?format=ical'.($conf->entity > 1 ? "&entity=".$conf->entity : "");
523 $message .= '&exportkey='.urlencode(getDolGlobalString('MAIN_AGENDA_XCAL_EXPORTKEY', '...'));
524 $message .= "&project=".$projectid.'&module='.urlencode('conforbooth@eventorganization').'&file='.urlencode('calendar-'.$project->ref.'-conforbooth.ics').'&status='.ConferenceOrBooth::STATUS_CONFIRMED.'&output=file">'.$langs->trans('DownloadICSLink').img_picto('', 'download', 'class="paddingleft"').'</a>';
525 print $message;
526 print "</td></tr>";
527
528 // Link to the submit vote/register page
529 print '<tr><td class="titlefield">';
530 //print '<span class="opacitymedium">';
531 print $form->textwithpicto($langs->trans("SuggestOrVoteForConfOrBooth"), $langs->trans("EvntOrgRegistrationHelpMessage"));
532 //print '</span>';
533 print '</td><td class="valuefield">';
534 $linksuggest = $dolibarr_main_url_root.'/public/project/index.php?id='.((int) $project->id);
535 $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $project->id), 'md5');
536 $linksuggest .= '&securekey='.urlencode($encodedsecurekey);
537 //print '<div class="urllink">';
538 //print '<input type="text" value="'.$linksuggest.'" id="linkregister" class="quatrevingtpercent paddingrightonly">';
539 print '<div class="tdoverflowmax200 inline-block valignmiddle"><a target="_blank" href="'.$linksuggest.'" class="quatrevingtpercent">'.$linksuggest.'</a></div>';
540 print '<a target="_blank" rel="noopener noreferrer" href="'.$linksuggest.'">'.img_picto('', 'globe').'</a>';
541 //print '</div>';
542 //print ajax_autoselect("linkregister");
543 print '</td></tr>';
544
545 // Link to the subscribe
546 print '<tr><td class="titlefield">';
547 //print '<span class="opacitymedium">';
548 print $langs->trans("PublicAttendeeSubscriptionGlobalPage");
549 //print '</span>';
550 print '</td><td class="valuefield">';
551 $link_subscription = $dolibarr_main_url_root.'/public/eventorganization/attendee_new.php?id='.((int) $project->id).'&type=global';
552 $encodedsecurekey = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY').'conferenceorbooth'.((int) $project->id), 'md5');
553 $link_subscription .= '&securekey='.urlencode($encodedsecurekey);
554 //print '<div class="urllink">';
555 //print '<input type="text" value="'.$linkregister.'" id="linkregister" class="quatrevingtpercent paddingrightonly">';
556 print '<div class="tdoverflowmax200 inline-block valignmiddle"><a target="_blank" href="'.$link_subscription.'" class="quatrevingtpercent">'.$link_subscription.'</a></div>';
557 print '<a target="_blank" rel="noopener noreferrer" rel="noopener noreferrer" href="'.$link_subscription.'">'.img_picto('', 'globe').'</a>';
558 //print '</div>';
559 //print ajax_autoselect("linkregister");
560 print '</td></tr>';
561
562 print '</table>';
563
564 print '</div>';
565 print '</div>';
566
567 print '<div class="clearboth"></div>';
568
569 print dol_get_fiche_end();
570}
571
572if (!empty($project->id)) {
573 $head = conferenceorboothProjectPrepareHead($project);
574 $tab = 'conferenceorbooth';
575
576 print dol_get_fiche_head($head, $tab, $langs->trans("Project"), -1, ($project->public ? 'projectpub' : 'project'), 0, '', 'reposition');
577}
578
579// Build and execute select
580// --------------------------------------------------------------------
581$sql = 'SELECT ';
582$sql .= $object->getFieldList('t');
583
584// Add fields from extrafields
585if (!empty($extrafields->attributes[$object->table_element]['label'])) {
586 foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {
587 $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? ", ef.".$key." as options_".$key : '');
588 }
589}
590// Add fields from hooks
591$parameters = array();
592$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
593$sql .= $hookmanager->resPrint;
594$sql = preg_replace('/,\s*$/', '', $sql);
595//$sql .= ", COUNT(rc.rowid) as anotherfield";
596
597$sqlfields = $sql; // $sql fields to remove for count total
598
599$sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t";
600if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
601 $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.id = ef.fk_object)";
602}
603$sql .= " INNER JOIN ".MAIN_DB_PREFIX."c_actioncomm as cact ON cact.id=t.fk_action AND cact.module LIKE '%@eventorganization'";
604// Add table from hooks
605$parameters = array();
606$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
607$sql .= $hookmanager->resPrint;
608if ($object->ismultientitymanaged == 1) {
609 $sql .= " WHERE t.entity IN (".getEntity($object->element, (GETPOSTINT('search_current_entity') ? 0 : 1)).")";
610} else {
611 $sql .= " WHERE 1 = 1";
612}
613if ($projectid > 0) {
614 $sql .= " AND t.fk_project = ".((int) $project->id);
615}
616foreach ($search as $key => $val) {
617 if (array_key_exists($key, $object->fields)) {
618 if ($key == 'status' && $search[$key] == -1) {
619 continue;
620 }
621 $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);
622 if ((strpos($object->fields[$key]['type'], 'integer:') === 0) || (strpos($object->fields[$key]['type'], 'sellist:') === 0) || !empty($object->fields[$key]['arrayofkeyval'])) {
623 if ($search[$key] == '-1' || ($search[$key] === '0' && (empty($object->fields[$key]['arrayofkeyval']) || !array_key_exists('0', $object->fields[$key]['arrayofkeyval'])))) {
624 $search[$key] = '';
625 }
626 $mode_search = 2;
627 }
628 if ($search[$key] != '') {
629 $sql .= natural_search("t.".$db->sanitize($key), $search[$key], (($key == 'status') ? 2 : $mode_search));
630 }
631 } else {
632 if (preg_match('/(_dtstart|_dtend)$/', $key) && $search[$key] != '') {
633 $columnName = preg_replace('/(_dtstart|_dtend)$/', '', $key);
634 if (preg_match('/^(date|timestamp|datetime)/', $object->fields[$columnName]['type'])) {
635 if (preg_match('/_dtstart$/', $key)) {
636 $sql .= " AND t.".$db->escape($columnName)." >= '".$db->idate($search[$key])."'";
637 }
638 if (preg_match('/_dtend$/', $key)) {
639 $sql .= " AND t.".$db->escape($columnName)." <= '".$db->idate($search[$key])."'";
640 }
641 }
642 }
643 }
644}
645if ($search_all) {
646 $sql .= natural_search(array_keys($fieldstosearchall), $search_all);
647}
648//$sql.= dolSqlDateFilter("t.field", $search_xxxday, $search_xxxmonth, $search_xxxyear);
649// Add where from extra fields
650include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';
651// Add where from hooks
652$parameters = array();
653$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
654$sql .= $hookmanager->resPrint;
655
656// Count total nb of records
657$nbtotalofrecords = '';
658if (!getDolGlobalInt('MAIN_DISABLE_FULL_SCANLIST')) {
659 /* The fast and low memory method to get and count full list converts the sql into a sql count */
660 $sqlforcount = preg_replace('/^'.preg_quote($sqlfields, '/').'/', 'SELECT COUNT(*) as nbtotalofrecords', $sql);
661 $sqlforcount = preg_replace('/GROUP BY .*$/', '', $sqlforcount);
662 $resql = $db->query($sqlforcount);
663 if ($resql) {
664 $objforcount = $db->fetch_object($resql);
665 $nbtotalofrecords = $objforcount->nbtotalofrecords;
666 } else {
667 dol_print_error($db);
668 }
669
670 if (($page * $limit) > $nbtotalofrecords) { // if total resultset is smaller than the paging size (filtering), goto and load page 0
671 $page = 0;
672 $offset = 0;
673 }
674 $db->free($resql);
675}
676
677// Complete request and execute it with limit
678$sql .= $db->order($sortfield, $sortorder);
679if ($limit) {
680 $sql .= $db->plimit($limit + 1, $offset);
681}
682
683$resql = $db->query($sql);
684if (!$resql) {
685 dol_print_error($db);
686 exit;
687}
688
689$num = $db->num_rows($resql);
690
691// Direct jump if only one record found
692if ($num == 1 && getDolGlobalInt('MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE') && $search_all && !$page) {
693 $obj = $db->fetch_object($resql);
694 $id = $obj->rowid;
695 header("Location: ".DOL_URL_ROOT.'/eventorganization/conferenceorbooth_card.php?id='.((int) $id));
696 exit;
697}
698
699$arrayofselected = is_array($toselect) ? $toselect : array();
700
701$param = '';
702if (!empty($mode)) {
703 $param .= '&mode='.urlencode($mode);
704}
705if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
706 $param .= '&contextpage='.urlencode($contextpage);
707}
708if ($limit > 0 && $limit != $conf->liste_limit) {
709 $param .= '&limit='.((int) $limit);
710}
711if ($optioncss != '') {
712 $param .= '&optioncss='.urlencode($optioncss);
713}
714if ($project->id > 0) {
715 $param .= '&projectid='.((int) $project->id);
716}
717foreach ($search as $key => $val) {
718 if (is_array($search[$key])) {
719 foreach ($search[$key] as $skey) {
720 if ($skey != '') {
721 $param .= '&search_'.$key.'[]='.urlencode($skey);
722 }
723 }
724 } elseif (preg_match('/(_dtstart|_dtend)$/', $key) && !empty($val)) {
725 $param .= '&search_'.$key.'month='.(GETPOSTINT('search_'.$key.'month'));
726 $param .= '&search_'.$key.'day='.(GETPOSTINT('search_'.$key.'day'));
727 $param .= '&search_'.$key.'year='.(GETPOSTINT('search_'.$key.'year'));
728 } elseif ($search[$key] != '') {
729 $param .= '&search_'.$key.'='.urlencode($search[$key]);
730 }
731}
732// Add $param from extra fields
733include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
734// Add $param from hooks
735$parameters = array('param' => &$param);
736$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
737$param .= $hookmanager->resPrint;
738
739// List of mass actions available
740$arrayofmassactions = array(
741 //'validate'=>img_picto('', 'check', 'class="pictofixedwidth"').$langs->trans("Validate"),
742 //'generate_doc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("ReGeneratePDF"),
743 //'builddoc'=>img_picto('', 'pdf', 'class="pictofixedwidth"').$langs->trans("PDFMerge"),
744 'presend' => img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail").' ('.$langs->trans("ToSpeakers").')',
745 //'presend_attendees'=>img_picto('', 'email', 'class="pictofixedwidth"').$langs->trans("SendByMail").' - '.$langs->trans("Attendees"),
746);
747if (!empty($permissiontodelete)) {
748 $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
749}
750if (!empty($permissiontoadd)) {
751 $arrayofmassactions['presetstatus'] = img_picto('', 'edit', 'class="pictofixedwidth"').$langs->trans("ModifyStatus");
752}
753if (GETPOSTINT('nomassaction') || in_array($massaction, array('presend', 'predelete'))) {
754 $arrayofmassactions = array();
755}
756$massactionbutton = $form->selectMassAction('', $arrayofmassactions);
757
758print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].(!empty($projectid) ? '?projectid='.$projectid : '').'">'."\n";
759if ($optioncss != '') {
760 print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
761}
762print '<input type="hidden" name="token" value="'.newToken().'">';
763print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
764print '<input type="hidden" name="action" value="list">';
765print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
766print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
767print '<input type="hidden" name="page" value="'.$page.'">';
768print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
769print '<input type="hidden" name="page_y" value="">';
770print '<input type="hidden" name="mode" value="'.$mode.'">';
771
772
773$newcardbutton = '';
774$newcardbutton .= dolGetButtonTitle($langs->trans('ViewList'), '', 'fa fa-bars imgforviewmode', $_SERVER["PHP_SELF"].'?mode=common'.(!empty($project->id) ? '&withproject=1&fk_project='.$project->id : '').(!empty($project->socid) ? '&fk_soc='.$project->socid : '').preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ((empty($mode) || $mode == 'common') ? 2 : 1), array('morecss' => 'reposition'));
775$newcardbutton .= dolGetButtonTitle($langs->trans('ViewKanban'), '', 'fa fa-th-list imgforviewmode', $_SERVER["PHP_SELF"].'?mode=kanban'.(!empty($project->id) ? '&withproject=1&fk_project='.$project->id : '').(!empty($project->socid) ? '&fk_soc='.$project->socid : '').preg_replace('/(&|\?)*mode=[^&]+/', '', $param), '', ($mode == 'kanban' ? 2 : 1), array('morecss' => 'reposition'));
776$newcardbutton .= dolGetButtonTitleSeparator();
777$newcardbutton .= dolGetButtonTitle($langs->trans('New'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/eventorganization/conferenceorbooth_card.php?action=create'.(!empty($project->id) ? '&withproject=1&fk_project='.$project->id : '').(!empty($project->socid) ? '&fk_soc='.$project->socid : '').'&backtopage='.urlencode($_SERVER['PHP_SELF']).(!empty($project->id) ? '?projectid='.$project->id : ''), '', $permissiontoadd);
778
779print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, $object->picto, 0, $newcardbutton, '', $limit, 0, 0, 1);
780
781
782// Add code for pre mass action (confirmation or email presend form)
783$topicmail = '';
784$modelmail = "conferenceorbooth";
785$objecttmp = new ConferenceOrBooth($db);
786$trackid = 'conferenceorbooth_'.$object->id;
787$withmaindocfilemail = 0;
788include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
789
790if ($massaction == 'presetstatus') {
791 $formquestion = array();
792 $statuslist = array();
793 $statuslist[$objecttmp::STATUS_DRAFT] = $objecttmp->LibStatutEvent($objecttmp::STATUS_DRAFT);
794 $statuslist[$objecttmp::STATUS_SUGGESTED] = $objecttmp->LibStatutEvent($objecttmp::STATUS_SUGGESTED);
795 $statuslist[$objecttmp::STATUS_CONFIRMED] = $objecttmp->LibStatutEvent($objecttmp::STATUS_CONFIRMED);
796 $statuslist[$objecttmp::STATUS_NOT_QUALIFIED] = $objecttmp->LibStatutEvent($objecttmp::STATUS_NOT_QUALIFIED);
797 $statuslist[$objecttmp::STATUS_DONE] = $objecttmp->LibStatutEvent($objecttmp::STATUS_DONE);
798 $statuslist[$objecttmp::STATUS_CANCELED] = $objecttmp->LibStatutEvent($objecttmp::STATUS_CANCELED);
799 $formquestion[] = array('type' => 'other',
800 'name' => 'affectedcommercial',
801 'label' => $form->editfieldkey('ModifyStatus', 'status_id', '', $object, 0),
802 'value' => $form->selectarray('statusmassaction', $statuslist, GETPOST('statusmassaction')));
803 print $form->formconfirm($_SERVER["PHP_SELF"], $langs->trans("ConfirmModifyStatus"), $langs->trans("ConfirmModifyStatusQuestion", count($toselect)), "setstatus", $formquestion, 1, 0, 200, 500, 1);
804}
805
806if ($search_all) {
807 $setupstring = '';
808 foreach ($fieldstosearchall as $key => $val) {
809 $fieldstosearchall[$key] = $langs->trans($val);
810 $setupstring .= $key."=".$val.";";
811 }
812 print '<!-- Search done like if EVENTORGANIZATION_QUICKSEARCH_ON_FIELDS = '.$setupstring.' -->'."\n";
813 print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).implode(', ', $fieldstosearchall).'</div>'."\n";
814}
815
816$moreforfilter = '';
817/*$moreforfilter.='<div class="divsearchfield">';
818$moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';
819$moreforfilter.= '</div>';*/
820
821$parameters = array();
822$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
823if (empty($reshook)) {
824 $moreforfilter .= $hookmanager->resPrint;
825} else {
826 $moreforfilter = $hookmanager->resPrint;
827}
828
829if (!empty($moreforfilter)) {
830 print '<div class="liste_titre liste_titre_bydiv centpercent">';
831 print $moreforfilter;
832 print '</div>';
833}
834
835$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;
836$htmlofselectarray = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage, getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')); // This also change content of $arrayfields with user setup
837$selectedfields = ($mode != 'kanban' ? $htmlofselectarray : '');
838$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');
839
840
841print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you don't need reserved height for your table
842print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
843
844
845// Fields title search
846// --------------------------------------------------------------------
847print '<tr class="liste_titre_filter">';
848// Action column
849if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
850 print '<td class="liste_titre center maxwidthsearch">';
851 $searchpicto = $form->showFilterButtons('left');
852 print $searchpicto;
853 print '</td>';
854}
855foreach ($object->fields as $key => $val) {
856 $searchkey = empty($search[$key]) ? '' : $search[$key];
857 $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
858 if ($key == 'status') {
859 $cssforfield .= ($cssforfield ? ' ' : '').'center';
860 } elseif (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {
861 $cssforfield .= ($cssforfield ? ' ' : '').'center';
862 } elseif (in_array($val['type'], array('timestamp'))) {
863 $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';
864 } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('id', 'rowid', 'ref', 'status')) && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) {
865 $cssforfield .= ($cssforfield ? ' ' : '').'right';
866 }
867 if (!empty($arrayfields['t.'.$key]['checked'])) {
868 print '<td class="liste_titre'.($cssforfield ? ' '.$cssforfield : '').($key == 'status' ? ' parentonrightofpage' : '').'">';
869 if (!empty($val['arrayofkeyval']) && is_array($val['arrayofkeyval'])) {
870 print $form->selectarray('search_'.$key, $val['arrayofkeyval'], (isset($search[$key]) ? $search[$key] : ''), $val['notnull'], 0, 0, '', 1, 0, 0, '', 'maxwidth100'.($key == 'status' ? ' search_status width100 onrightofpage' : ''), 1);
871 } elseif ((strpos($val['type'], 'integer:') === 0) || (strpos($val['type'], 'sellist:') === 0)) {
872 print $object->showInputField($val, $key, (isset($search[$key]) ? $search[$key] : ''), '', '', 'search_', $cssforfield.' maxwidth250', 1);
873 } elseif (preg_match('/^(date|timestamp|datetime)/', $val['type'])) {
874 print '<div class="nowrap">';
875 print $form->selectDate($search[$key.'_dtstart'] ? $search[$key.'_dtstart'] : '', "search_".$key."_dtstart", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('From'));
876 print '</div>';
877 print '<div class="nowrap">';
878 print $form->selectDate($search[$key.'_dtend'] ? $search[$key.'_dtend'] : '', "search_".$key."_dtend", 0, 0, 1, '', 1, 0, 0, '', '', '', '', 1, '', $langs->trans('to'));
879 print '</div>';
880 } elseif ($key == 'lang') {
881 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formadmin.class.php';
882 $formadmin = new FormAdmin($db);
883 print $formadmin->select_language($search[$key], 'search_lang', 0, null, 1, 0, 0, 'minwidth100imp maxwidth125', 2);
884 } else {
885 print '<input type="text" class="flat maxwidth'.($val['type'] == 'integer' ? '50' : '75').'" name="search_'.$key.'" value="'.dol_escape_htmltag(isset($search[$key]) ? $search[$key] : '').'">';
886 }
887 print '</td>';
888 }
889}
890// Extra fields
891include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';
892
893// Fields from hook
894$parameters = array('arrayfields' => $arrayfields);
895$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
896print $hookmanager->resPrint;
897// Action column
898if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
899 print '<td class="liste_titre center maxwidthsearch">';
900 $searchpicto = $form->showFilterButtons();
901 print $searchpicto;
902 print '</td>';
903}
904print '</tr>'."\n";
905
906$totalarray = array();
907$totalarray['nbfield'] = 0;
908
909// Fields title label
910// --------------------------------------------------------------------
911print '<tr class="liste_titre">';
912// Action column
913if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
914 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
915 $totalarray['nbfield']++;
916}
917foreach ($object->fields as $key => $val) {
918 $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
919 if ($key == 'status') {
920 $cssforfield .= ($cssforfield ? ' ' : '').'center';
921 } elseif (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {
922 $cssforfield .= ($cssforfield ? ' ' : '').'center';
923 } elseif (in_array($val['type'], array('timestamp'))) {
924 $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';
925 } elseif (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('id', 'rowid', 'ref', 'status')) && $val['label'] != 'TechnicalID' && empty($val['arrayofkeyval'])) {
926 $cssforfield .= ($cssforfield ? ' ' : '').'right';
927 }
928 $cssforfield = preg_replace('/small\s*/', '', $cssforfield); // the 'small' css must not be used for the title label
929 if (!empty($arrayfields['t.'.$key]['checked'])) {
930 print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield ? 'class="'.$cssforfield.'"' : ''), $sortfield, $sortorder, ($cssforfield ? $cssforfield.' ' : ''), 0, (empty($val['helplist']) ? '' : $val['helplist']))."\n";
931 $totalarray['nbfield']++;
932 }
933}
934// Extra fields
935include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
936// Hook fields
937$parameters = array('arrayfields' => $arrayfields, 'param' => $param, 'sortfield' => $sortfield, 'sortorder' => $sortorder, 'totalarray' => &$totalarray);
938$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
939print $hookmanager->resPrint;
940// Action column
941if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
942 print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
943 $totalarray['nbfield']++;
944}
945print '</tr>'."\n";
946
947
948// Detect if we need a fetch on each output line
949$needToFetchEachLine = 0;
950if (isset($extrafields->attributes[$object->table_element]['computed']) && is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) {
951 foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) {
952 if (!is_null($val) && preg_match('/\$object/', $val)) {
953 $needToFetchEachLine++; // There is at least one compute field that use $object
954 }
955 }
956}
957
958
959// Loop on record
960// --------------------------------------------------------------------
961$i = 0;
962$savnbfield = $totalarray['nbfield'];
963$totalarray = array();
964$totalarray['nbfield'] = 0;
965$imaxinloop = ($limit ? min($num, $limit) : $num);
966while ($i < $imaxinloop) {
967 $obj = $db->fetch_object($resql);
968 if (empty($obj)) {
969 break; // Should not happen
970 }
971
972 // Store properties in $object
973 $object->setVarsFromFetchObj($obj);
974
975 if ($mode == 'kanban') {
976 if ($i == 0) {
977 print '<tr class="trkanban"><td colspan="'.$savnbfield.'">';
978 print '<div class="box-flex-container kanban">';
979 }
980 // Output Kanban
981 $selected = -1;
982 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
983 $selected = 0;
984 if (in_array($object->id, $arrayofselected)) {
985 $selected = 1;
986 }
987 }
988 $thirdparty = $object->fetch_thirdparty();
989 print $object->getKanbanView('', array('selected' => $selected, 'thirdparty' => $thirdparty));
990 if ($i == ($imaxinloop - 1)) {
991 print '</div>';
992 print '</td></tr>';
993 }
994 } else {
995 // Show line of result
996 $j = 0;
997 print '<tr data-rowid="'.$object->id.'" class="oddeven">';
998 // Action column
999 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1000 print '<td class="nowrap center">';
1001 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1002 $selected = 0;
1003 if (in_array($object->id, $arrayofselected)) {
1004 $selected = 1;
1005 }
1006 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
1007 }
1008 print '</td>';
1009 if (!$i) {
1010 $totalarray['nbfield']++;
1011 }
1012 }
1013 foreach ($object->fields as $key => $val) {
1014 $cssforfield = (empty($val['csslist']) ? (empty($val['css']) ? '' : $val['css']) : $val['csslist']);
1015 if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {
1016 $cssforfield .= ($cssforfield ? ' ' : '').'center';
1017 } elseif ($key == 'status') {
1018 $cssforfield .= ($cssforfield ? ' ' : '').'center';
1019 }
1020
1021 if (in_array($val['type'], array('timestamp'))) {
1022 $cssforfield .= ($cssforfield ? ' ' : '').'nowraponall';
1023 } elseif ($key == 'ref') {
1024 $cssforfield .= ($cssforfield ? ' ' : '').'nowraponall';
1025 }
1026
1027 if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('id', 'rowid', 'ref', 'status')) && empty($val['arrayofkeyval'])) {
1028 $cssforfield .= ($cssforfield ? ' ' : '').'right';
1029 }
1030 //if (in_array($key, array('fk_soc', 'fk_user', 'fk_warehouse'))) $cssforfield = 'tdoverflowmax100';
1031
1032 if (!empty($arrayfields['t.'.$key]['checked'])) {
1033 print '<td'.($cssforfield ? ' class="'.$cssforfield.(preg_match('/tdoverflow/', $cssforfield) ? ' classfortooltip' : '').'"' : '');
1034 if (preg_match('/tdoverflow/', $cssforfield) && !is_numeric($object->$key)) {
1035 print ' title="'.dol_escape_htmltag($object->$key).'"';
1036 }
1037 print '>';
1038 if ($key == 'status') {
1039 print $object->getLibStatut(5);
1040 } elseif ($key == 'ref') {
1041 print $object->getNomUrl(1, 0, '', (($projectid > 0) ? 'withproject' : ''));
1042 } else {
1043 print $object->showOutputField($val, $key, $object->$key, '');
1044 }
1045 print '</td>';
1046 if (!$i) {
1047 $totalarray['nbfield']++;
1048 }
1049 if (!empty($val['isameasure']) && $val['isameasure'] == 1) {
1050 if (!$i) {
1051 $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key;
1052 }
1053 if (!isset($totalarray['val'])) {
1054 $totalarray['val'] = array();
1055 }
1056 if (!isset($totalarray['val']['t.'.$key])) {
1057 $totalarray['val']['t.'.$key] = 0;
1058 }
1059 $totalarray['val']['t.'.$key] += $object->$key;
1060 }
1061 }
1062 }
1063 // Extra fields
1064 include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
1065 // Fields from hook
1066 $parameters = array('arrayfields' => $arrayfields, 'object' => $object, 'obj' => $obj, 'i' => $i, 'totalarray' => &$totalarray);
1067 $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1068 print $hookmanager->resPrint;
1069 // Action column
1070 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
1071 print '<td class="nowrap center">';
1072 if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
1073 $selected = 0;
1074 if (in_array($object->id, $arrayofselected)) {
1075 $selected = 1;
1076 }
1077 print '<input id="cb'.$object->id.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$object->id.'"'.($selected ? ' checked="checked"' : '').'>';
1078 }
1079 print '</td>';
1080 if (!$i) {
1081 $totalarray['nbfield']++;
1082 }
1083 }
1084
1085 print '</tr>'."\n";
1086 }
1087
1088 $i++;
1089}
1090
1091// Show total line
1092include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1093
1094// If no record found
1095if ($num == 0) {
1096 $colspan = 1;
1097 foreach ($arrayfields as $key => $val) {
1098 if (!empty($val['checked'])) {
1099 $colspan++;
1100 }
1101 }
1102 print '<tr><td colspan="'.$colspan.'"><span class="opacitymedium">'.$langs->trans("NoRecordFound").'</span></td></tr>';
1103}
1104
1105
1106$db->free($resql);
1107
1108$parameters = array('arrayfields' => $arrayfields, 'sql' => $sql);
1109$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
1110print $hookmanager->resPrint;
1111
1112print '</table>'."\n";
1113print '</div>'."\n";
1114
1115print '</form>'."\n";
1116
1117if (in_array('builddoc', array_keys($arrayofmassactions)) && ($nbtotalofrecords === '' || $nbtotalofrecords)) {
1118 $hidegeneratedfilelistifempty = 1;
1119 if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) {
1120 $hidegeneratedfilelistifempty = 0;
1121 }
1122
1123 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
1124 $formfile = new FormFile($db);
1125
1126 // Show list of available documents
1127 $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;
1128 $urlsource .= str_replace('&amp;', '&', $param);
1129
1130 $filedir = $diroutputmassaction;
1131 $genallowed = $permissiontoread;
1132 $delallowed = $permissiontoadd;
1133
1134 print $formfile->showdocuments('massfilesarea_eventorganization', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);
1135}
1136
1137// End of page
1138llxFooter();
1139$db->close();
$id
Definition account.php:48
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:66
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:71
Class for ConferenceOrBooth.
Class to manage standard extra fields.
Class to generate html code for admin pages.
Class to offer components to list and upload files.
Class to manage generation of HTML components Only common components must be here.
Class to manage projects.
llxFooter()
Footer empty.
Definition document.php:107
conferenceorboothProjectPrepareHead($object)
Prepare array of tabs for ConferenceOrBooth Project tab.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
dol_eval($s, $returnvalue=1, $hideerrors=1, $onlysimplestring='1')
Replace eval function to add more security.
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_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
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...
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.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
getDolGlobalString($key, $default='')
Return a 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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
Definition member.php:79
project_prepare_head(Project $project, $moreparam='')
Prepare array with list of tabs.
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.
dol_hash($chain, $type='0', $nosalt=0)
Returns a hash (non reversible encryption) of a string.
accessforbidden($message='', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program.