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
28 require '../main.inc.php';
29 require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
30 require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
31 require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/project.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php';
35 require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorboothattendee.class.php';
36 require_once DOL_DOCUMENT_ROOT.'/eventorganization/lib/eventorganization_conferenceorbooth.lib.php';
37 require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
38 
39 global $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');
65 if (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)
87 if (!$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 }
91 if (!$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();
98 foreach ($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();
110 foreach ($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();
118 foreach ($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
132 include 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
142 if (!isModEnabled('eventorganization')) {
143  accessforbidden('Module eventorganization not enabled');
144 }
145 $socid = 0;
146 if ($user->socid > 0) { // Protection if external user
147  //$socid = $user->socid;
148  accessforbidden();
149 }
150 $result = restrictedArea($user, 'eventorganization');
151 if (!$permissiontoread) accessforbidden();
152 
153 
154 /*
155  * Actions
156  */
157 
158 if (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
179 if (GETPOST('cancel', 'alpha')) {
180  $action = 'list';
181  $massaction = '';
182 }
183 if (!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
195 if ($reshook < 0) {
196  setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
197 }
198 
199 if (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 
242 if ($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 
268 llxHeader('', $title, $help_url);
269 
270 
271 if ($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 
503 if (!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
516 if (!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";
531 if (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;
539 if ($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 }
544 if ($projectid > 0) {
545  $sql .= " AND t.fk_project = ".((int) $project->id);
546 }
547 foreach ($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 
577 if ($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
582 include 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 = '';
590 if (!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 
612 if ($limit) {
613  $sql .= $db->plimit($limit + 1, $offset);
614 }
615 
616 $resql = $db->query($sql);
617 if (!$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
625 if ($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 = '';
635 if (!empty($mode)) {
636  $param .= '&mode='.urlencode($mode);
637 }
638 if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
639  $param .= '&contextpage='.urlencode($contextpage);
640 }
641 if ($limit > 0 && $limit != $conf->liste_limit) {
642  $param .= '&limit='.((int) $limit);
643 }
644 if ($optioncss != '') {
645  $param .= '&optioncss='.urlencode($optioncss);
646 }
647 if ($project->id > 0) {
648  $param .= '&projectid='.((int) $project->id);
649 }
650 foreach ($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
666 include 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 );
680 if (!empty($permissiontodelete)) {
681  $arrayofmassactions['predelete'] = img_picto('', 'delete', 'class="pictofixedwidth"').$langs->trans("Delete");
682 }
683 if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) {
684  $arrayofmassactions = array();
685 }
686 $massactionbutton = $form->selectMassAction('', $arrayofmassactions);
687 
688 print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].(!empty($projectid)?'?projectid='.$projectid:'').'">'."\n";
689 if ($optioncss != '') {
690  print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';
691 }
692 print '<input type="hidden" name="token" value="'.newToken().'">';
693 print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
694 print '<input type="hidden" name="action" value="list">';
695 print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
696 print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
697 print '<input type="hidden" name="page" value="'.$page.'">';
698 print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';
699 print '<input type="hidden" name="page_y" value="">';
700 print '<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 
709 print_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;
718 include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
719 
720 
721 if ($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
738 if (empty($reshook)) {
739  $moreforfilter .= $hookmanager->resPrint;
740 } else {
741  $moreforfilter = $hookmanager->resPrint;
742 }
743 
744 if (!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 
758 print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
759 print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
760 
761 
762 // Fields title search
763 // --------------------------------------------------------------------
764 print '<tr class="liste_titre_filter">';
765 // Action column
766 if (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 }
772 foreach ($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
808 include 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
813 print $hookmanager->resPrint;
814 // Action column
815 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
816  print '<td class="liste_titre center maxwidthsearch">';
817  $searchpicto = $form->showFilterButtons();
818  print $searchpicto;
819  print '</td>';
820 }
821 print '</tr>'."\n";
822 
823 $totalarray = array();
824 $totalarray['nbfield'] = 0;
825 
826 // Fields title label
827 // --------------------------------------------------------------------
828 print '<tr class="liste_titre">';
829 // Action column
830 if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
831  print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
832  $totalarray['nbfield']++;
833 }
834 foreach ($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
852 include 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
856 print $hookmanager->resPrint;
857 // Action column
858 if (!getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
859  print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";
860  $totalarray['nbfield']++;
861 }
862 print '</tr>'."\n";
863 
864 
865 // Detect if we need a fetch on each output line
866 $needToFetchEachLine = 0;
867 if (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);
883 while ($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
1009 include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';
1010 
1011 // If no record found
1012 if ($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
1027 print $hookmanager->resPrint;
1028 
1029 print '</table>'."\n";
1030 print '</div>'."\n";
1031 
1032 print '</form>'."\n";
1033 
1034 if (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
1055 llxFooter();
1056 $db->close();
if(GETPOST('button_removefilter_x', 'alpha')||GETPOST('button_removefilter.x', 'alpha')||GETPOST('button_removefilter', 'alpha')) if(GETPOST('button_search_x', 'alpha')||GETPOST('button_search.x', 'alpha')||GETPOST('button_search', 'alpha')) if($action=="save" &&empty($cancel)) $help_url
View.
Definition: agenda.php:118
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.
if(isModEnabled('facture') && $user->hasRight('facture', 'lire')) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') && $user->hasRight('don', 'lire')) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $sql
Social contributions to pay.
Definition: index.php:746
if($cancel &&! $id) if($action=='add' &&! $cancel) if($action=='delete') if($id) $form
Actions.
Definition: card.php:143
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.
GETPOSTISSET($paramname)
Return true if we are in a context of submitting the parameter $paramname from a POST of a form.
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.
isModEnabled($module)
Is Dolibarr module enabled.
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.
Definition: project.lib.php:39
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.