/** * Parse the registration related palceholders * $hostUri and $hostTarget should be set before calling this method * * @param \Cx\Core\Html\Sigma $objTpl Template instance * @param \Cx\Modules\Calendar\Controller\CalendarEvent $event Event instance * @param string $hostUri Host uri of the event(internal/external) * @param string $hostTarget Host uri target type (_blank/null) * * @return null */ public function parseRegistrationPlaceholders(\Cx\Core\Html\Sigma $objTpl, CalendarEvent $event, $hostUri = '', $hostTarget = '') { global $_ARRAYLANG; $numRegistrations = contrexx_input2int($event->getRegistrationCount()); $numDeregistration = contrexx_input2int($event->getCancellationCount()); $objEscortManager = new \Cx\Modules\Calendar\Controller\CalendarRegistrationManager($event, true, false); $objTpl->setVariable(array($this->moduleLangVar . '_EVENT_COUNT_REG' => $numRegistrations, $this->moduleLangVar . '_EVENT_COUNT_SIGNOFF' => $numDeregistration, $this->moduleLangVar . '_EVENT_COUNT_SUBSCRIBER' => $objEscortManager->getEscortData(), $this->moduleLangVar . '_REGISTRATIONS_SUBSCRIBER' => $event->numSubscriber)); // Only link to registration form if event registration is set up and event lies in the future if (!$event->registration || time() > $event->startDate->getTimestamp()) { $objTpl->hideBlock('calendarEventRegistration'); return; } // Only show registration form if event accepts registrations. // Event accepts registrations, if // - no attendee limit is set // - or if there are still free places available $registrationOpen = true; $regLinkTarget = '_self'; if ($event->registration == CalendarEvent::EVENT_REGISTRATION_EXTERNAL && !$event->registrationExternalFullyBooked || $event->registration == CalendarEvent::EVENT_REGISTRATION_INTERNAL && (empty($event->numSubscriber) || !\FWValidator::isEmpty($event->getFreePlaces()))) { if ($event->registration == CalendarEvent::EVENT_REGISTRATION_EXTERNAL) { $regLinkSrc = \FWValidator::getUrl($event->registrationExternalLink); $regLinkTarget = '_blank'; } elseif ($hostUri) { $regLinkSrc = $hostUri . '/' . CONTREXX_DIRECTORY_INDEX . '?section=' . $this->moduleName . '&cmd=register&id=' . $event->id . '&date=' . $event->startDate->getTimestamp(); } else { $params = array('id' => $event->id, 'date' => $event->startDate->getTimestamp()); $regLinkSrc = \Cx\Core\Routing\Url::fromModuleAndCmd($this->moduleName, 'register', FRONTEND_LANG_ID, $params)->toString(); } $regLink = '<a href="' . $regLinkSrc . '" ' . $hostTarget . '>' . $_ARRAYLANG['TXT_CALENDAR_REGISTRATION'] . '</a>'; } else { $regLink = '<i>' . $_ARRAYLANG['TXT_CALENDAR_EVENT_FULLY_BLOCKED'] . '</i>'; $regLinkSrc = ''; $registrationOpen = false; } $objTpl->setVariable(array($this->moduleLangVar . '_EVENT_REGISTRATION_LINK' => $regLink, $this->moduleLangVar . '_EVENT_REGISTRATION_LINK_SRC' => $regLinkSrc, $this->moduleLangVar . '_EVENT_REGISTRATION_LINK_TARGET' => $regLinkTarget)); if ($objTpl->blockExists('calendarEventRegistrationOpen')) { if ($registrationOpen) { $objTpl->touchBlock('calendarEventRegistrationOpen'); } else { $objTpl->hideBlock('calendarEventRegistrationOpen'); } } if ($objTpl->blockExists('calendarEventRegistrationClosed')) { if (!$registrationOpen) { $objTpl->touchBlock('calendarEventRegistrationClosed'); } else { $objTpl->hideBlock('calendarEventRegistrationClosed'); } } $objTpl->parse('calendarEventRegistration'); }
/** * Sets placeholders for the form view. * * @param object $objTpl Template object * @param integer $formId Form id * @param integer $intView request mode frontend or backend * @param integer $arrNumSeating number of seating * * @return null */ function showForm($objTpl, $formId, $intView, $ticketSales = false) { global $_ARRAYLANG, $_LANGID; $objForm = new \Cx\Modules\Calendar\Controller\CalendarForm(intval($formId)); if (!empty($formId)) { $this->formList[$formId] = $objForm; } switch ($intView) { case 1: $this->getFrontendLanguages(); $objTpl->setGlobalVariable(array($this->moduleLangVar . '_FORM_ID' => !empty($formId) ? $objForm->id : '', $this->moduleLangVar . '_FORM_TITLE' => !empty($formId) ? $objForm->title : '')); $i = 0; $formFields = array(); if (!empty($formId)) { $defaultLangId = $_LANGID; if (!in_array($defaultLangId, \FWLanguage::getIdArray())) { $defaultLangId = \FWLanguage::getDefaultLangId(); } foreach ($objForm->inputfields as $key => $arrInputfield) { $i++; $fieldValue = array(); $defaultFieldValue = array(); foreach ($this->arrFrontendLanguages as $key => $arrLang) { $fieldValue[$arrLang['id']] = isset($arrInputfield['name'][$arrLang['id']]) ? $arrInputfield['name'][$arrLang['id']] : ''; $defaultFieldValue[$arrLang['id']] = isset($arrInputfield['default_value'][$arrLang['id']]) ? $arrInputfield['default_value'][$arrLang['id']] : ''; } $formFields[] = array('type' => $arrInputfield['type'], 'id' => $arrInputfield['id'], 'row' => $i % 2 == 0 ? 'row2' : 'row1', 'order' => $arrInputfield['order'], 'name_master' => $fieldValue[$defaultLangId], 'default_value_master' => $defaultFieldValue[$defaultLangId], 'required' => $arrInputfield['required'], 'affiliation' => $arrInputfield['affiliation'], 'field_value' => json_encode($fieldValue), 'default_field_value' => json_encode($defaultFieldValue)); } } foreach ($this->arrFrontendLanguages as $key => $arrLang) { $objTpl->setVariable(array($this->moduleLangVar . '_INPUTFIELD_LANG_ID' => $arrLang['id'], $this->moduleLangVar . '_INPUTFIELD_LANG_NAME' => $arrLang['name'], $this->moduleLangVar . '_INPUTFIELD_LANG_SHORTCUT' => $arrLang['lang'])); $objTpl->parse('inputfieldNameList'); $objTpl->setVariable(array($this->moduleLangVar . '_INPUTFIELD_LANG_ID' => $arrLang['id'], $this->moduleLangVar . '_INPUTFIELD_LANG_NAME' => $arrLang['name'], $this->moduleLangVar . '_INPUTFIELD_LANG_SHORTCUT' => $arrLang['lang'])); $objTpl->parse('inputfieldDefaultValueList'); $objTpl->setVariable(array($this->moduleLangVar . '_INPUTFIELD_LANG_NAME' => $arrLang['name'])); $objTpl->parse('inputfieldLanguagesList'); } foreach ($this->arrInputfieldTypes as $fieldType) { $objTpl->setVariable(array($this->moduleLangVar . '_FORM_FIELD_TYPE' => $fieldType, 'TXT_' . $this->moduleLangVar . '_FORM_FIELD_TYPE' => $_ARRAYLANG['TXT_CALENDAR_FORM_FIELD_' . strtoupper($fieldType)])); $objTpl->parse('inputfieldTypes'); } foreach ($this->arrRegistrationFields as $fieldType) { $objTpl->setVariable(array($this->moduleLangVar . '_FORM_FIELD_TYPE' => $fieldType, 'TXT_' . $this->moduleLangVar . '_FORM_FIELD_TYPE' => $_ARRAYLANG['TXT_CALENDAR_FORM_FIELD_' . strtoupper($fieldType)])); $objTpl->parse('inputRegfieldTypes'); } /* foreach ($this->arrInputfieldAffiliations as $strAffiliation) { $objTpl->setVariable(array( $this->moduleLangVar.'_FORM_FIELD_TYPE' => $strAffiliation, 'TXT_'.$this->moduleLangVar.'_FORM_FIELD_TYPE' => $_ARRAYLANG['TXT_CALENDAR_FORM_FIELD_AFFILIATION_'.strtoupper($strAffiliation)], )); $objTpl->parse('fieldAfflications'); }*/ $objTpl->setVariable(array($this->moduleLangVar . '_FORM_DATA' => json_encode($formFields), $this->moduleLangVar . '_FRONTEND_LANG_COUNT' => count($this->arrFrontendLanguages), $this->moduleLangVar . '_INPUTFIELD_LAST_ID' => $objForm->getLastInputfieldId(), $this->moduleLangVar . '_INPUTFIELD_LAST_ROW' => $i % 2 == 0 ? "'row2'" : "'row1'", $this->moduleLangVar . '_DISPLAY_EXPAND' => count($this->arrFrontendLanguages) > 1 ? "block" : "none")); break; case 2: $objFieldTemplate = new \Cx\Core\Html\Sigma('.'); $objFieldTemplate->setTemplate(self::frontendFieldTemplate, true, true); $objFieldTemplate->setVariable(array('TXT_' . $this->moduleLangVar . '_FIELD_NAME' => $_ARRAYLANG['TXT_CALENDAR_TYPE'] . '<font class="calendarRequired"> *</font>', $this->moduleLangVar . '_FIELD_INPUT' => '<select class="calendarSelect affiliateForm" name="registrationType"><option value="1" selected="selected"/>' . $_ARRAYLANG['TXT_CALENDAR_REG_REGISTRATION'] . '</option><option value="0"/>' . $_ARRAYLANG['TXT_CALENDAR_REG_SIGNOFF'] . '</option></select>', $this->moduleLangVar . '_FIELD_CLASS' => 'affiliationForm')); $objTpl->setVariable($this->moduleLangVar . '_REGISTRATION_FIELD', $objFieldTemplate->get()); $objTpl->parse('calendarRegistrationField'); // $selectBillingAddressStatus = false; foreach ($objForm->inputfields as $key => $arrInputfield) { $objFieldTemplate->setTemplate(self::frontendFieldTemplate, true, true); $options = array(); $options = explode(',', $arrInputfield['default_value'][$_LANGID]); $inputfield = null; $hide = false; $optionSelect = true; $availableSeat = 0; $checkSeating = false; if (isset($_POST['registrationField'][$arrInputfield['id']])) { $value = $_POST['registrationField'][$arrInputfield['id']]; } elseif (\FWUser::getFWUserObject()->objUser->login() && in_array($arrInputfield['type'], array('mail', 'firstname', 'lastname'))) { $value = ''; switch ($arrInputfield['type']) { case 'mail': $value = \FWUser::getFWUserObject()->objUser->getEmail(); break; case 'firstname': $value = \FWUser::getFWUserObject()->objUser->getProfileAttribute('firstname'); break; case 'lastname': $value = \FWUser::getFWUserObject()->objUser->getProfileAttribute('lastname'); break; default: $value = $arrInputfield['default_value'][$_LANGID]; break; } } else { $value = $arrInputfield['default_value'][$_LANGID]; } $affiliationClass = 'affiliation' . ucfirst($arrInputfield['affiliation']); switch ($arrInputfield['type']) { case 'inputtext': case 'mail': case 'firstname': case 'lastname': $inputfield = '<input type="text" class="calendarInputText" name="registrationField[' . $arrInputfield['id'] . ']" value="' . $value . '" /> '; break; case 'textarea': $inputfield = '<textarea class="calendarTextarea" name="registrationField[' . $arrInputfield['id'] . ']">' . $value . '</textarea>'; break; case 'seating': if (!$ticketSales) { $hide = true; } $optionSelect = false; if ($this->event) { $checkSeating = $this->event->registration && $this->event->numSubscriber; $availableSeat = $this->event->getFreePlaces(); } case 'select': case 'salutation': $inputfield = '<select class="calendarSelect" name="registrationField[' . $arrInputfield['id'] . ']">'; $selected = empty($_POST) ? 'selected="selected"' : ''; $inputfield .= $optionSelect ? '<option value="" ' . $selected . '>' . $_ARRAYLANG['TXT_CALENDAR_PLEASE_CHOOSE'] . '</option>' : ''; foreach ($options as $key => $name) { if ($checkSeating && contrexx_input2int($name) > $availableSeat) { continue; } $selected = $key + 1 == $value ? 'selected="selected"' : ''; $inputfield .= '<option value="' . intval($key + 1) . '" ' . $selected . '>' . $name . '</option>'; } $inputfield .= '</select>'; break; case 'radio': foreach ($options as $key => $name) { $checked = $key + 1 == $value || empty($_POST) && $key == 0 ? 'checked="checked"' : ''; $textValue = isset($_POST["registrationFieldAdditional"][$arrInputfield['id']][$key]) ? $_POST["registrationFieldAdditional"][$arrInputfield['id']][$key] : ''; $textfield = '<input type="text" class="calendarInputCheckboxAdditional" name="registrationFieldAdditional[' . $arrInputfield['id'] . '][' . $key . ']" value="' . contrexx_input2xhtml($textValue) . '" />'; $name = str_replace('[[INPUT]]', $textfield, $name); $inputfield .= '<input type="radio" class="calendarInputCheckbox" name="registrationField[' . $arrInputfield['id'] . ']" value="' . intval($key + 1) . '" ' . $checked . '/> ' . $name . '<br />'; } break; case 'checkbox': foreach ($options as $key => $name) { $textValue = isset($_POST["registrationFieldAdditional"][$arrInputfield['id']][$key]) ? $_POST["registrationFieldAdditional"][$arrInputfield['id']][$key] : ''; $textfield = '<input type="text" class="calendarInputCheckboxAdditional" name="registrationFieldAdditional[' . $arrInputfield['id'] . '][' . $key . ']" value="' . contrexx_input2xhtml($textValue) . '" />'; $name = str_replace('[[INPUT]]', $textfield, $name); $checked = in_array($key + 1, $_POST['registrationField'][$arrInputfield['id']]) ? 'checked="checked"' : ''; $inputfield .= '<input ' . $checked . ' type="checkbox" class="calendarInputCheckbox" name="registrationField[' . $arrInputfield['id'] . '][]" value="' . intval($key + 1) . '" /> ' . $name . '<br />'; } break; case 'agb': $inputfield = '<input class="calendarInputCheckbox" type="checkbox" name="registrationField[' . $arrInputfield['id'] . '][]" value="1" /> ' . $_ARRAYLANG['TXT_CALENDAR_AGB'] . '<br />'; break; /* case 'selectBillingAddress': if(!$selectBillingAddressStatus) { if($_REQUEST['registrationField'][$arrInputfield['id']] == 'deviatesFromContact') { $selectDeviatesFromContact = 'selected="selected"'; } else { $selectDeviatesFromContact = ''; } $inputfield = '<select id="calendarSelectBillingAddress" class="calendarSelect" name="registrationField['.$arrInputfield['id'].']">'; $inputfield .= '<option value="sameAsContact">'.$_ARRAYLANG['TXT_CALENDAR_SAME_AS_CONTACT'].'</option>'; $inputfield .= '<option value="deviatesFromContact" '.$selectDeviatesFromContact.'>'.$_ARRAYLANG['TXT_CALENDAR_DEVIATES_FROM_CONTACT'].'</option>'; $inputfield .= '</select>'; $selectBillingAddressStatus = true; } break; */ /* case 'selectBillingAddress': if(!$selectBillingAddressStatus) { if($_REQUEST['registrationField'][$arrInputfield['id']] == 'deviatesFromContact') { $selectDeviatesFromContact = 'selected="selected"'; } else { $selectDeviatesFromContact = ''; } $inputfield = '<select id="calendarSelectBillingAddress" class="calendarSelect" name="registrationField['.$arrInputfield['id'].']">'; $inputfield .= '<option value="sameAsContact">'.$_ARRAYLANG['TXT_CALENDAR_SAME_AS_CONTACT'].'</option>'; $inputfield .= '<option value="deviatesFromContact" '.$selectDeviatesFromContact.'>'.$_ARRAYLANG['TXT_CALENDAR_DEVIATES_FROM_CONTACT'].'</option>'; $inputfield .= '</select>'; $selectBillingAddressStatus = true; } break; */ case 'fieldset': $inputfield = null; break; } $field = ''; if ($arrInputfield['type'] == 'fieldset') { $field = '</fieldset><fieldset><legend>' . $arrInputfield['name'][$_LANGID] . '</legend>'; $hide = true; } else { $required = $arrInputfield['required'] == 1 ? '<font class="calendarRequired"> *</font>' : ''; $label = $arrInputfield['name'][$_LANGID] . $required; } if (!$hide) { $objFieldTemplate->setVariable(array('TXT_' . $this->moduleLangVar . '_FIELD_NAME' => $label, $this->moduleLangVar . '_FIELD_INPUT' => $inputfield, $this->moduleLangVar . '_FIELD_CLASS' => $affiliationClass)); $field = $objFieldTemplate->get(); } $objTpl->setVariable($this->moduleLangVar . '_REGISTRATION_FIELD', $field); $objTpl->parse('calendarRegistrationField'); } break; } }