dolibarr 21.0.0-alpha
suggestbooth.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2021 Dorian Vabre <dorian.vabre@gmail.com>
3 * Copyright (C) 2024 MDW <mdeweerd@users.noreply.github.com>
4 * Copyright (C) 2024 Frédéric France <frederic.france@free.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
26if (!defined('NOLOGIN')) {
27 define("NOLOGIN", 1); // This means this output page does not require to be logged.
28}
29if (!defined('NOCSRFCHECK')) {
30 define("NOCSRFCHECK", 1); // We accept to go on this page from external web site.
31}
32if (!defined('NOIPCHECK')) {
33 define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip
34}
35if (!defined('NOBROWSERNOTIF')) {
36 define('NOBROWSERNOTIF', '1');
37}
38
39
40// For MultiCompany module.
41// Do not use GETPOST here, function is not defined and define must be done before including main.inc.php
42// Because 2 entities can have the same ref.
43$entity = (!empty($_GET['entity']) ? (int) $_GET['entity'] : (!empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
44if (is_numeric($entity)) {
45 define("DOLENTITY", $entity);
46}
47
48// Load Dolibarr environment
49require '../../main.inc.php';
50require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
51require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php';
52require_once DOL_DOCUMENT_ROOT.'/eventorganization/class/conferenceorbooth.class.php';
53require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
54require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
55require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php';
56require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
57require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/paymentterm.class.php';
58require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
59require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
60
61global $dolibarr_main_url_root;
62
63// Init vars
64$errmsg = '';
65$num = 0;
66$error = 0;
67$backtopage = GETPOST('backtopage', 'alpha');
68$action = GETPOST('action', 'aZ09');
69
70$eventtype = GETPOSTINT("eventtype");
71$email = GETPOST("email");
72$societe = GETPOST("societe");
73$label = GETPOST("label");
74$note = GETPOST("note");
75$datestart = dol_mktime(0, 0, 0, GETPOSTINT('datestartmonth'), GETPOSTINT('datestartday'), GETPOSTINT('datestartyear'));
76$dateend = dol_mktime(23, 59, 59, GETPOSTINT('dateendmonth'), GETPOSTINT('dateendday'), GETPOSTINT('dateendyear'));
77$id = GETPOST('id');
78
79$project = new Project($db);
80$resultproject = $project->fetch($id);
81if ($resultproject < 0) {
82 $error++;
83 $errmsg .= $project->error;
84}
85
86// Security check
87$securekeyreceived = GETPOST('securekey', 'alpha');
88$securekeytocompare = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY') . 'conferenceorbooth'.$id, 'md5');
89
90if ($securekeytocompare != $securekeyreceived) {
91 print $langs->trans('MissingOrBadSecureKey');
92 exit;
93}
94
95// Load translation files
96$langs->loadLangs(array("main", "companies", "install", "other", "eventorganization"));
97
98// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
99$hookmanager->initHooks(array('publicnewmembercard', 'globalcard'));
100
101$extrafields = new ExtraFields($db);
102
103$user->loadDefaultValues();
104
105$cactioncomm = new CActionComm($db);
106$arrayofconfboothtype = $cactioncomm->liste_array('', 'id', '', 0, "module='booth@eventorganization'");
107
108// Security check
109if (empty($conf->eventorganization->enabled)) {
110 httponly_accessforbidden('Module Event organization not enabled');
111}
112
113
125function llxHeaderVierge($title, $head = "", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
126{
127 global $conf, $langs, $mysoc;
128
129 top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss); // Show html headers
130
131 print '<body id="mainbody" class="publicnewmemberform">';
132
133 // Define urllogo
134 $urllogo = DOL_URL_ROOT.'/theme/common/login_logo.png';
135
136 if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small)) {
137 $urllogo = DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/thumbs/'.$mysoc->logo_small);
138 } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) {
139 $urllogo = DOL_URL_ROOT.'/viewimage.php?cache=1&amp;modulepart=mycompany&amp;file='.urlencode('logos/'.$mysoc->logo);
140 } elseif (is_readable(DOL_DOCUMENT_ROOT.'/theme/dolibarr_logo.svg')) {
141 $urllogo = DOL_URL_ROOT.'/theme/dolibarr_logo.svg';
142 }
143
144 print '<div class="center">';
145
146 // Output html code for logo
147 if ($urllogo) {
148 print '<div class="backgreypublicpayment">';
149 print '<div class="logopublicpayment">';
150 print '<img id="dolpaymentlogo" src="'.$urllogo.'"';
151 print '>';
152 print '</div>';
153 if (!getDolGlobalString('MAIN_HIDE_POWERED_BY')) {
154 print '<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans("PoweredBy").'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.'/theme/dolibarr_logo.svg" width="80px"></a></div>';
155 }
156 print '</div>';
157 }
158
159 if (getDolGlobalString('PROJECT_IMAGE_PUBLIC_SUGGEST_BOOTH')) {
160 print '<div class="backimagepublicsuggestbooth">';
161 print '<img id="idPROJECT_IMAGE_PUBLIC_SUGGEST_BOOTH" src="' . getDolGlobalString('PROJECT_IMAGE_PUBLIC_SUGGEST_BOOTH').'">';
162 print '</div>';
163 }
164
165 print '</div>';
166
167 print '<div class="divmainbodylarge">';
168}
169
176{
177 print '</div>';
178
179 printCommonFooter('public');
180
181 print "</body>\n";
182 print "</html>\n";
183}
184
185
186
187/*
188 * Actions
189 */
190
191$parameters = array();
192// Note that $action and $object may have been modified by some hooks
193$reshook = $hookmanager->executeHooks('doActions', $parameters, $project, $action);
194if ($reshook < 0) {
195 setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
196}
197
198// Action called when page is submitted
199if (empty($reshook) && $action == 'add') { // Test on permission not required here. This is an anonymous public ssubmission. Check is done on the secureket + mitigation.
200 $error = 0;
201
202 $urlback = '';
203
204 $db->begin();
205
206 if (!GETPOST("lastname")) {
207 $error++;
208 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Name"))."<br>\n";
209 }
210 if (!GETPOST("email")) {
211 $error++;
212 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Email"))."<br>\n";
213 }
214 if (!GETPOST("country_id") && !empty((float) $project->price_booth)) {
215 $error++;
216 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Country"))."<br>\n";
217 }
218 if (!GETPOST("societe")) {
219 $error++;
220 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Societe"))."<br>\n";
221 }
222 if (!GETPOST("label")) {
223 $error++;
224 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Label"))."<br>\n";
225 }
226 if (!GETPOST("note")) {
227 $error++;
228 $errmsg .= $langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Note"))."<br>\n";
229 }
230 if (GETPOST("email") && !isValidEmail(GETPOST("email"))) {
231 $error++;
232 $langs->load("errors");
233 $errmsg .= $langs->trans("ErrorBadEMail", GETPOST("email"))."<br>\n";
234 }
235
236 $thirdparty = null;
237 if (!$error) {
238 // Getting the thirdparty or creating it
239 $thirdparty = new Societe($db);
240 $resultfetchthirdparty = $thirdparty->fetch(0, $societe);
241
242 if ($resultfetchthirdparty < 0) {
243 // If an error was found
244 $error++;
245 $errmsg .= $thirdparty->error;
246 $errors = array_merge($errors, $thirdparty->errors);
247 } elseif ($resultfetchthirdparty == 0) { // No thirdparty found + a payment is expected
248 // Creation of a new thirdparty
249 $genericcompanyname = 'Unknown company';
250
251 if (!empty($societe)) {
252 $thirdparty->name = $societe;
253 } else {
254 $thirdparty->name = $genericcompanyname;
255 }
256 $thirdparty->address = GETPOST("address");
257 $thirdparty->zip = GETPOST("zipcode");
258 $thirdparty->town = GETPOST("town");
259 $thirdparty->client = $thirdparty::PROSPECT;
260 $thirdparty->fournisseur = 0;
261 $thirdparty->country_id = GETPOSTINT("country_id");
262 $thirdparty->state_id = GETPOSTINT("state_id");
263 $thirdparty->email = ($emailcompany ? $emailcompany : $email);
264
265 // Load object modCodeTiers
266 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON', 'mod_codeclient_leopard');
267 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
268 $module = substr($module, 0, dol_strlen($module) - 4);
269 }
270 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
271 foreach ($dirsociete as $dirroot) {
272 $res = dol_include_once($dirroot.$module.'.php');
273 if ($res) {
274 break;
275 }
276 }
277 $modCodeClient = new $module($db);
278 '@phan-var-force ModeleThirdPartyCode $modCodeClient';
279
280 if (empty($tmpcode) && !empty($modCodeClient->code_auto)) {
281 $tmpcode = $modCodeClient->getNextValue($thirdparty, 0);
282 }
283 $thirdparty->code_client = $tmpcode;
284 $readythirdparty = $thirdparty->create($user);
285 if ($readythirdparty < 0) {
286 $error++;
287 $errmsg .= $thirdparty->error;
288 $errors = array_merge($errors, $thirdparty->errors);
289 } else {
290 $thirdparty->country_code = getCountry($thirdparty->country_id, '2', $db, $langs);
291 $thirdparty->country = getCountry($thirdparty->country_code, '', $db, $langs);
292 }
293 }
294 // From there we have a thirdparty, now looking for the contact
295 if (!$error) {
296 $contact = new Contact($db);
297 $resultcontact = $contact->fetch(0, null, '', $email);
298 if ($resultcontact <= 0) {
299 // Need to create a contact
300 $contact->socid = $thirdparty->id;
301 $contact->lastname = (string) GETPOST("lastname", 'alpha');
302 $contact->firstname = (string) GETPOST("firstname", 'alpha');
303 $contact->address = (string) GETPOST("address", 'alpha');
304 $contact->zip = (string) GETPOST("zipcode", 'alpha');
305 $contact->town = (string) GETPOST("town", 'alpha');
306 $contact->country_id = GETPOSTINT("country_id");
307 $contact->state_id = GETPOSTINT("state_id");
308 $contact->email = $email;
309 $contact->statut = 1; //Default status to Actif
310
311 $resultcreatecontact = $contact->create($user);
312 if ($resultcreatecontact < 0) {
313 $error++;
314 $errmsg .= $contact->error;
315 }
316 }
317 }
318
319 if (!$error) {
320 // Adding supplier tag and tag from setup to thirdparty
321 $category = new Categorie($db);
322
323 $resultcategory = $category->fetch(getDolGlobalString('EVENTORGANIZATION_CATEG_THIRDPARTY_BOOTH'));
324
325 if ($resultcategory <= 0) {
326 $error++;
327 $errmsg .= $category->error;
328 } else {
329 $resultsetcategory = $thirdparty->setCategoriesCommon(array($category->id), Categorie::TYPE_CUSTOMER, false);
330 if ($resultsetcategory < 0) {
331 $error++;
332 $errmsg .= $thirdparty->error;
333 } else {
334 $thirdparty->fournisseur = 1;
335
336 // Load object modCodeFournisseur
337 $module = getDolGlobalString('SOCIETE_CODECLIENT_ADDON', 'mod_codeclient_leopard');
338 if (substr($module, 0, 15) == 'mod_codeclient_' && substr($module, -3) == 'php') {
339 $module = substr($module, 0, dol_strlen($module) - 4);
340 }
341 $dirsociete = array_merge(array('/core/modules/societe/'), $conf->modules_parts['societe']);
342 foreach ($dirsociete as $dirroot) {
343 $res = dol_include_once($dirroot.$module.'.php');
344 if ($res) {
345 break;
346 }
347 }
348 $modCodeFournisseur = new $module($db);
349 '@phan-var-force ModeleThirdPartyCode $modCodeFournisseur';
350 if (empty($tmpcode) && !empty($modCodeFournisseur->code_auto)) {
351 $tmpcode = $modCodeFournisseur->getNextValue($thirdparty, 1);
352 }
353 $thirdparty->code_fournisseur = $tmpcode;
354
355 $res = $thirdparty->update(0, $user, 1, 1, 1);
356
357 if ($res <= 0) {
358 $error++;
359 }
360 }
361 }
362 }
363
364 if (!$error) {
365 // We have the contact and the thirdparty
366 $conforbooth = new ConferenceOrBooth($db);
367 $conforbooth->label = $label;
368 $conforbooth->fk_soc = $thirdparty->id;
369 $conforbooth->fk_project = $project->id;
370 $conforbooth->note = $note;
371 $conforbooth->fk_action = $eventtype;
372 $conforbooth->datep = $datestart;
373 $conforbooth->datep2 = $dateend;
374 $conforbooth->datec = dol_now();
375 $conforbooth->tms = dol_now();
376 $conforbooth->ip = getUserRemoteIP();
377
378 $nb_post_max = getDolGlobalInt("MAIN_SECURITY_MAX_POST_ON_PUBLIC_PAGES_BY_IP_ADDRESS", 200);
379 $now = dol_now();
380 $minmonthpost = dol_time_plus_duree($now, -1, "m");
381
382 // Calculate nb of post for IP
383 $nb_post_ip = 0;
384 if ($nb_post_max > 0) { // Calculate only if there is a limit to check
385 $sql = "SELECT COUNT(ref) as nb_confs";
386 $sql .= " FROM ".MAIN_DB_PREFIX."actioncomm";
387 $sql .= " WHERE ip = '".$db->escape($conforbooth->ip)."'";
388 $sql .= " AND datec > '".$db->idate($minmonthpost)."'";
389 $resql = $db->query($sql);
390 if ($resql) {
391 $num = $db->num_rows($resql);
392 $i = 0;
393 while ($i < $num) {
394 $i++;
395 $obj = $db->fetch_object($resql);
396 $nb_post_ip = $obj->nb_confs;
397 }
398 }
399 }
400
401 $resultconforbooth = 0;
402
403 if ($nb_post_max > 0 && $nb_post_ip >= $nb_post_max) {
404 $error++;
405 $errmsg .= $langs->trans("AlreadyTooMuchPostOnThisIPAdress");
406 array_push($conforbooth->errors, $langs->trans("AlreadyTooMuchPostOnThisIPAdress"));
407 setEventMessage($errmsg, 'errors');
408 } else {
409 $resultconforbooth = $conforbooth->create($user);
410 }
411 if ($resultconforbooth <= 0) {
412 $error++;
413 $errmsg .= $conforbooth->error;
414 } else {
415 // Adding the contact to the project
416 $resultaddcontact = $conforbooth->add_contact($contact->id, 'RESPONSIBLE');
417 if ($resultaddcontact < 0) {
418 $error++;
419 $errmsg .= $conforbooth->error;
420 } else {
421 // If this is a paying booth, we have to redirect to payment page and create an invoice
422 $facture = null;
423 if (!empty((float) $project->price_booth)) {
424 $productforinvoicerow = new Product($db);
425 $resultprod = $productforinvoicerow->fetch(getDolGlobalString('SERVICE_BOOTH_LOCATION'));
426 if ($resultprod < 0) {
427 $error++;
428 $errmsg .= $productforinvoicerow->error;
429 } else {
430 $facture = new Facture($db);
431 $facture->type = Facture::TYPE_STANDARD;
432 $facture->socid = $thirdparty->id;
433 $facture->paye = 0;
434 $facture->date = dol_now();
435 $facture->cond_reglement_id = $contact->cond_reglement_id;
436 $facture->fk_project = $project->id;
437
438 if (empty($facture->cond_reglement_id)) {
439 $paymenttermstatic = new PaymentTerm($contact->db);
440 $facture->cond_reglement_id = $paymenttermstatic->getDefaultId();
441 if (empty($facture->cond_reglement_id)) {
442 $error++;
443 $contact->error = 'ErrorNoPaymentTermRECEPFound';
444 $contact->errors[] = $contact->error;
445 }
446 }
447 $resultfacture = $facture->create($user);
448 if ($resultfacture <= 0) {
449 $contact->error = $facture->error;
450 $contact->errors = $facture->errors;
451 $error++;
452 } else {
453 $db->commit();
454 $facture->add_object_linked($conforbooth->element, $conforbooth->id);
455 }
456 }
457
458 if (!$error && is_object($facture)) {
459 // Add line to draft invoice
460 $vattouse = get_default_tva($mysoc, $thirdparty, $productforinvoicerow->id);
461 $result = $facture->addline($langs->trans("BoothLocationFee", $conforbooth->label, dol_print_date($conforbooth->datep, '%d/%m/%y %H:%M:%S'), dol_print_date($conforbooth->datep2, '%d/%m/%y %H:%M:%S')), (float) $project->price_booth, 1, $vattouse, 0, 0, $productforinvoicerow->id, 0, dol_now(), '', 0, 0, 0, 'HT', 0, 1);
462 if ($result <= 0) {
463 $contact->error = $facture->error;
464 $contact->errors = $facture->errors;
465 $error++;
466 }
467 /*if (!$error) {
468 $valid = true;
469 $sourcetouse = 'boothlocation';
470 $reftouse = $facture->id;
471 $redirection = $dolibarr_main_url_root.'/public/payment/newpayment.php?source='.$sourcetouse.'&ref='.$reftouse.'&booth='.$conforbooth->id;
472 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN)) {
473 if (!empty($conf->global->PAYMENT_SECURITY_TOKEN_UNIQUE)) {
474 $redirection .= '&securekey='.dol_hash($conf->global->PAYMENT_SECURITY_TOKEN . $sourcetouse . $reftouse, '2'); // Use the source in the hash to avoid duplicates if the references are identical
475 } else {
476 $redirection .= '&securekey='.$conf->global->PAYMENT_SECURITY_TOKEN;
477 }
478 }
479 header("Location: ".$redirection);
480 exit;
481 }*/
482 }
483 } else {
484 // If no price has been set for the booth, we confirm it as suggested and we update
485 $conforbooth->status = ConferenceOrBooth::STATUS_SUGGESTED;
486 $conforbooth->update($user);
487 }
488 }
489 }
490 }
491 }
492
493 if (!$error && is_object($thirdparty)) {
494 $db->commit();
495
496 // Sending mail
497 require_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
498 include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
499 $formmail = new FormMail($db);
500 // Set output language
501 $outputlangs = new Translate('', $conf);
502 $outputlangs->setDefaultLang(empty($thirdparty->default_lang) ? $mysoc->default_lang : $thirdparty->default_lang);
503 // Load traductions files required by page
504 $outputlangs->loadLangs(array("main", "members", "eventorganization"));
505 // Get email content from template
506 $arraydefaultmessage = null;
507
508 $labeltouse = getDolGlobalString('EVENTORGANIZATION_TEMPLATE_EMAIL_ASK_BOOTH');
509 if (!empty($labeltouse)) {
510 $arraydefaultmessage = $formmail->getEMailTemplate($db, 'conferenceorbooth', $user, $outputlangs, $labeltouse, 1, '');
511 }
512
513 $subject = '';
514 $msg = '';
515 if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
516 $subject = $arraydefaultmessage->topic;
517 $msg = $arraydefaultmessage->content;
518 }
519
520 $substitutionarray = getCommonSubstitutionArray($outputlangs, 0, null, $thirdparty);
521 complete_substitutions_array($substitutionarray, $outputlangs, $project);
522
523 $subjecttosend = make_substitutions($subject, $substitutionarray, $outputlangs);
524 $texttosend = make_substitutions($msg, $substitutionarray, $outputlangs);
525
526 $sendto = $thirdparty->email;
527 $from = getDolGlobalString('MAILING_EMAIL_FROM');
528 $urlback = $_SERVER["REQUEST_URI"];
529 $trackid = 'proj'.$project->id;
530
531 $ishtml = dol_textishtml($texttosend); // May contain urls
532
533 $mailfile = new CMailFile($subjecttosend, $sendto, $from, $texttosend, array(), array(), array(), '', '', 0, $ishtml ? 1 : 0, '', '', $trackid);
534
535 $result = $mailfile->sendfile();
536 if ($result) {
537 dol_syslog("EMail sent to ".$sendto, LOG_DEBUG, 0, '_payment');
538 } else {
539 dol_syslog("Failed to send EMail to ".$sendto, LOG_ERR, 0, '_payment');
540 }
541
542 $securekeyurl = dol_hash(getDolGlobalString('EVENTORGANIZATION_SECUREKEY') . 'conferenceorbooth'.$id, '2');
543 $redirection = $dolibarr_main_url_root.'/public/eventorganization/subscriptionok.php?id='.$id.'&securekey='.$securekeyurl;
544 header("Location: ".$redirection);
545 exit;
546 } else {
547 $db->rollback();
548 }
549}
550
551
552/*
553 * View
554 */
555
556$form = new Form($db);
557$formcompany = new FormCompany($db);
558
559llxHeaderVierge($langs->trans("NewSuggestionOfBooth"));
560
561
562print '<div align="center">';
563print '<div id="divsubscribe">';
564
565print '<br>';
566
567// Sub banner
568print '<div class="center subscriptionformbanner subbanner justify margintoponly paddingtop marginbottomonly padingbottom">';
569print load_fiche_titre($langs->trans("NewSuggestionOfBooth"), '', '', 0, '', 'center');
570// Welcome message
571print '<span class="opacitymedium">'.$langs->trans("EvntOrgRegistrationWelcomeMessage").'</span>';
572print '<br>';
573// Title
574print '<span class="eventlabel large">'.dol_escape_htmltag($project->title . ' '. $project->label).'</span><br>';
575print '</div>';
576
577
578// Help text
579print '<div class="justify subscriptionformhelptext">';
580
581if ($project->date_start_event || $project->date_end_event) {
582 print '<br><span class="fa fa-calendar pictofixedwidth opacitymedium"></span>';
583}
584if ($project->date_start_event) {
585 $format = 'day';
586 $tmparray = dol_getdate($project->date_start_event, false, '');
587 if ($tmparray['hours'] || $tmparray['minutes'] || $tmparray['minutes']) {
588 $format = 'dayhour';
589 }
590 print dol_print_date($project->date_start_event, $format);
591}
592if ($project->date_start_event && $project->date_end_event) {
593 print ' - ';
594}
595if ($project->date_end_event) {
596 $format = 'day';
597 $tmparray = dol_getdate($project->date_end_event, false, '');
598 if ($tmparray['hours'] || $tmparray['minutes'] || $tmparray['minutes']) {
599 $format = 'dayhour';
600 }
601 print dol_print_date($project->date_end_event, $format);
602}
603if ($project->date_start_event || $project->date_end_event) {
604 print '<br>';
605}
606if ($project->location) {
607 print '<span class="fa fa-map-marked-alt pictofixedwidth opacitymedium"></span>'.dol_escape_htmltag($project->location).'<br>';
608}
609if ($project->note_public) {
610 print '<br><!-- note public --><span class="opacitymedium">'.dol_htmlentitiesbr($project->note_public).'</span><br>';
611}
612
613print '</div>';
614
615print '<br>';
616
617
618dol_htmloutput_errors($errmsg, $errors);
619
620// Print form
621print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" name="newmember">'."\n";
622print '<input type="hidden" name="token" value="'.newToken().'" / >';
623print '<input type="hidden" name="entity" value="'.$entity.'" />';
624print '<input type="hidden" name="action" value="add" />';
625print '<input type="hidden" name="id" value="'.$id.'" />';
626print '<input type="hidden" name="securekey" value="'.$securekeyreceived.'" />';
627
628
629print '<br><span class="opacitymedium">'.$langs->trans("FieldsWithAreMandatory", '*').'</span><br>';
630//print $langs->trans("FieldsWithIsForPublic",'**').'<br>';
631
632print dol_get_fiche_head();
633
634print '<script type="text/javascript">
635jQuery(document).ready(function () {
636 jQuery(document).ready(function () {
637 jQuery("#selectcountry_id").change(function() {
638 document.newmember.action.value="create";
639 document.newmember.submit();
640 });
641 });
642});
643</script>';
644
645print '<table class="border" summary="form to subscribe" id="tablesubscribe">'."\n";
646
647// Name
648print '<tr><td><label for="lastname">'.$langs->trans("Lastname").'<span class="star">*</span></label></td>';
649print '<td colspan="3"><input name="lastname" id="lastname" type="text" class="maxwidth100onsmartphone" maxlength="80" value="'.dol_escape_htmltag(GETPOST("lastname", 'alpha') ? GETPOST("lastname", 'alpha') : $object->lastname).'" autofocus="autofocus"></td>';
650print '</tr>';
651// Email
652print '<tr><td>'.$langs->trans("Email").'<span class="star">*</span></td><td><input type="text" name="email" maxlength="255" class="minwidth150" value="'.dol_escape_htmltag(GETPOST('email')).'"></td></tr>'."\n";
653// Company
654print '<tr id="trcompany" class="trcompany"><td>'.$langs->trans("Company").'<span class="star">*</span>';
655print ' </td><td><input type="text" name="societe" class="minwidth150" value="'.dol_escape_htmltag(GETPOST('societe')).'"></td></tr>'."\n";
656// Address
657print '<tr><td>'.$langs->trans("Address").'</td><td>'."\n";
658print '<textarea name="address" id="address" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_3.'">'.dol_escape_htmltag(GETPOST('address', 'restricthtml'), 0, 1).'</textarea></td></tr>'."\n";
659// Zip / Town
660print '<tr><td>'.$langs->trans('Zip').' / '.$langs->trans('Town').'</td><td>';
661print $formcompany->select_ziptown(GETPOST('zipcode'), 'zipcode', array('town', 'selectcountry_id', 'state_id'), 6, 1);
662print ' / ';
663print $formcompany->select_ziptown(GETPOST('town'), 'town', array('zipcode', 'selectcountry_id', 'state_id'), 0, 1);
664print '</td></tr>';
665// Country
666print '<tr><td>'.$langs->trans('Country');
667print '<span class="star">*</span>';
668print '</td><td>';
669$country_id = GETPOST('country_id');
670if (!$country_id && getDolGlobalString('MEMBER_NEWFORM_FORCECOUNTRYCODE')) {
671 $country_id = getCountry($conf->global->MEMBER_NEWFORM_FORCECOUNTRYCODE, '2', $db, $langs);
672}
673if (!$country_id && !empty($conf->geoipmaxmind->enabled)) {
674 $country_code = dol_user_country();
675 //print $country_code;
676 if ($country_code) {
677 $new_country_id = getCountry($country_code, '3', $db, $langs);
678 //print 'xxx'.$country_code.' - '.$new_country_id;
679 if ($new_country_id) {
680 $country_id = $new_country_id;
681 }
682 }
683}
684$country_code = getCountry($country_id, '2', $db, $langs);
685print $form->select_country($country_id, 'country_id');
686print '</td></tr>';
687// State
688if (!getDolGlobalString('SOCIETE_DISABLE_STATE')) {
689 print '<tr><td>'.$langs->trans('State').'</td><td>';
690 if ($country_code) {
691 print $formcompany->select_state(GETPOST("state_id"), $country_code);
692 } else {
693 print '';
694 }
695 print '</td></tr>';
696}
697// Type of event
698print '<tr><td>'.$langs->trans("Format").'<span class="star">*</span></td>'."\n";
699print '<td>'.Form::selectarray('eventtype', $arrayofconfboothtype, $eventtype, 1).'</td>';
700// Label
701print '<tr><td>'.$langs->trans("LabelOfBooth").'<span class="star">*</span></td>'."\n";
702print '</td><td><input type="text" name="label" class="minwidth150" value="'.dol_escape_htmltag(GETPOST('label')).'"></td></tr>'."\n";
703// Note
704print '<tr><td>'.$langs->trans("Description").'<span class="star">*</span></td>'."\n";
705print '<td><textarea name="note" id="note" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_3.'">'.dol_escape_htmltag(GETPOST('note', 'restricthtml'), 0, 1).'</textarea></td></tr>'."\n";
706
707print "</table>\n";
708
709print dol_get_fiche_end();
710
711
712// Show all action buttons
713print '<div class="center">';
714print '<br>';
715print '<input type="submit" value="'.$langs->trans("SuggestBooth").'" name="suggestbooth" id="suggestbooth" class="button">';
716print '</div>';
717print '<br><br>';
718
719
720print "</form>\n";
721print "<br>";
722print '</div></div>';
723
724
726
727$db->close();
$id
Definition account.php:39
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
Definition card.php:58
Class to manage different types of events.
Class to send emails (with attachments or not) Usage: $mailfile = new CMailFile($subject,...
Class to manage categories.
Class for ConferenceOrBooth.
Class to manage contact/addresses.
Class to manage standard extra fields.
Class to manage invoices.
const TYPE_STANDARD
Standard invoice.
Class to build HTML component for third parties management Only common components are here.
Class to manage generation of HTML components Only common components must be here.
Class permettant la generation du formulaire html d'envoi de mail unitaire Usage: $formail = new Form...
Class to manage payment terms records in dictionary.
Class to manage products or services.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
Definition date.lib.php:125
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_user_country()
Return country code for current user.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0, $attop=0)
Set event message in dol_events session object.
printCommonFooter($zone='private')
Print common footer : conf->global->MAIN_HTML_FOOTER js for switch of menu hider js for conf->global-...
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
dol_textishtml($msg, $option=0)
Return if a text is a html content.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
getUserRemoteIP()
Return the IP of remote user.
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
dol_htmloutput_errors($mesgstring='', $mesgarray=array(), $keepembedded=0)
Print formatted error messages to output (Used to show messages on html output).
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
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...
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs=array(), $arrayofcss=array(), $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Output html header of a page.
httponly_accessforbidden($message='1', $http_response_code=403, $stringalreadysanitized=0)
Show a message to say access is forbidden and stop program.
dol_hash($chain, $type='0', $nosalt=0)
Returns a hash (non reversible encryption) of a string.
if(empty( $conf->eventorganization->enabled)) llxHeaderVierge($title, $head="", $disablejs=0, $disablehead=0, $arrayofjs=[], $arrayofcss=[])
Show header for new member.
llxFooterVierge()
Show footer for new member.