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