*/ /** * Run in a custom namespace, so the class can be replaced */ namespace eSM_formilicious; /** * Class ModuleRegistration * * Front end module "registration". * @copyright Leo Feyer 2005-2014 * @author Leo Feyer * @package Core */ class ModuleRegistration extends \Contao\ModuleRegistration { /** * Generate the module */ protected function compile() { global $objPage; $GLOBALS['TL_LANGUAGE'] = $objPage->language; \System::loadLanguageFile('tl_member'); $this->loadDataContainer('tl_member'); // Call onload_callback (e.g. to check permissions) if (is_array($GLOBALS['TL_DCA']['tl_member']['config']['onload_callback'])) { foreach ($GLOBALS['TL_DCA']['tl_member']['config']['onload_callback'] as $callback) { if (is_array($callback)) { $this->import($callback[0]); $this->$callback[0]->$callback[1](); } elseif (is_callable($callback)) { $callback(); } } } // Activate account if (\Input::get('token') != '') { $this->activateAcount(); return; } if ($this->memberTpl != '') { $this->Template = new \FrontendTemplate($this->memberTpl); $this->Template->setData($this->arrData); } $this->Template->fields = ''; $this->Template->tableless = $this->tableless; $objCaptcha = null; $doNotSubmit = false; // Captcha if (!$this->disableCaptcha) { $arrCaptcha = array ( 'id' => 'registration', 'label' => $GLOBALS['TL_LANG']['MSC']['securityQuestion'], 'type' => 'captcha', 'mandatory' => true, 'required' => true, 'tableless' => $this->tableless ); $strClass = $GLOBALS['TL_FFL']['captcha']; // Fallback to default if the class is not defined if (!class_exists($strClass)) { $strClass = 'FormCaptcha'; } $objCaptcha = new $strClass($arrCaptcha); if (\Input::post('FORM_SUBMIT') == 'tl_registration') { $objCaptcha->validate(); if ($objCaptcha->hasErrors()) { $doNotSubmit = true; } } } $arrUser = array(); $arrFields = array(); $hasUpload = false; $i = 0; // Build form foreach ($this->editable as $fielddata) { // Split formilicious editable data in single vars list($field,$fieldWidth,$fieldClr,$fieldMandatory) = array_values($fielddata); $arrData = $GLOBALS['TL_DCA']['tl_member']['fields'][$field]; // Map checkboxWizard to regular checkbox widget if ($arrData['inputType'] == 'checkboxWizard') { $arrData['inputType'] = 'checkbox'; } $strClass = $GLOBALS['TL_FFL'][$arrData['inputType']]; // Continue if the class is not defined if (!class_exists($strClass)) { continue; } $arrData['eval']['tableless'] = $this->tableless; $arrData['eval']['required'] = $arrData['eval']['mandatory']; $objWidget = new $strClass($strClass::getAttributesFromDca($arrData, $field, $arrData['default'], '', '', $this)); $objWidget->storeValues = true; $objWidget->rowClass = 'row_' . $i . (($i == 0) ? ' row_first' : '') . ((($i % 2) == 0) ? ' even' : ' odd'); // Extend with formilicious data $objWidget->eSM_fl_width = $fieldWidth; $objWidget->eSM_fl_clear = $fieldClr; if ($fieldMandatory) { $objWidget->required = $fieldMandatory; $objWidget->mandatory = $fieldMandatory; } else { $objWidget->required = false; $objWidget->mandatory = false; } if (in_array($arrData['eval']['rgxp'], array('date','time','datim'))) { $strDateFormatFunc = 'getNumeric'.ucfirst($arrData['eval']['rgxp']).'Format'; $objWidget->placeholder = \Date::getInputFormat(\Date::$strDateFormatFunc()); $objWidget->maxlength = strlen($objWidget->placeholder); } // Increase the row count if its a password field if ($objWidget instanceof \FormPassword) { $objWidget->rowClassConfirm = 'row_' . ++$i . ((($i % 2) == 0) ? ' even' : ' odd'); } // Validate input if (\Input::post('FORM_SUBMIT') == 'tl_registration') { $objWidget->validate(); $varValue = $objWidget->value; // Check whether the password matches the username if ($objWidget instanceof \FormPassword && $varValue == \Input::post('username')) { $objWidget->addError($GLOBALS['TL_LANG']['ERR']['passwordName']); } $rgxp = $arrData['eval']['rgxp']; // Convert date formats into timestamps (check the eval setting first -> #3063) if (($rgxp == 'date' || $rgxp == 'time' || $rgxp == 'datim') && $varValue != '') { try { $objDate = new \Date($varValue); $varValue = $objDate->tstamp; } catch (\OutOfBoundsException $e) { $objWidget->addError(sprintf($GLOBALS['TL_LANG']['ERR']['invalidDate'], $varValue)); } } // Make sure that unique fields are unique (check the eval setting first -> #3063) if ($arrData['eval']['unique'] && $varValue != '' && !$this->Database->isUniqueValue('tl_member', $field, $varValue)) { $objWidget->addError(sprintf($GLOBALS['TL_LANG']['ERR']['unique'], $arrData['label'][0] ?: $field)); } // Save callback if ($objWidget->submitInput() && !$objWidget->hasErrors() && is_array($arrData['save_callback'])) { foreach ($arrData['save_callback'] as $callback) { try { if (is_array($callback)) { $this->import($callback[0]); $varValue = $this->$callback[0]->$callback[1]($varValue, null); } elseif (is_callable($callback)) { $varValue = $callback($varValue, null); } } catch (\Exception $e) { $objWidget->class = 'error'; $objWidget->addError($e->getMessage()); } } } // Store the current value if ($objWidget->hasErrors()) { $doNotSubmit = true; } elseif ($objWidget->submitInput()) { // Set the correct empty value (see #6284, #6373) if ($varValue === '') { $varValue = $objWidget->getEmptyValue(); } $arrUser[$field] = $varValue; } } if ($objWidget instanceof \uploadable) { $hasUpload = true; } $temp = $objWidget->parse(); $this->Template->fields .= $temp; $arrFields[$arrData['eval']['feGroup']][$field] .= $temp; ++$i; } // Captcha if (!$this->disableCaptcha) { $objCaptcha->rowClass = 'row_'.$i . (($i == 0) ? ' row_first' : '') . ((($i % 2) == 0) ? ' even' : ' odd'); $strCaptcha = $objCaptcha->parse(); $this->Template->fields .= $strCaptcha; $arrFields['captcha'] .= $strCaptcha; } $this->Template->rowLast = 'row_' . ++$i . ((($i % 2) == 0) ? ' even' : ' odd'); $this->Template->enctype = $hasUpload ? 'multipart/form-data' : 'application/x-www-form-urlencoded'; $this->Template->hasError = $doNotSubmit; // Create new user if there are no errors if (\Input::post('FORM_SUBMIT') == 'tl_registration' && !$doNotSubmit) { $this->createNewUser($arrUser); } $this->Template->loginDetails = $GLOBALS['TL_LANG']['tl_member']['loginDetails']; $this->Template->addressDetails = $GLOBALS['TL_LANG']['tl_member']['addressDetails']; $this->Template->contactDetails = $GLOBALS['TL_LANG']['tl_member']['contactDetails']; $this->Template->personalData = $GLOBALS['TL_LANG']['tl_member']['personalData']; $this->Template->captchaDetails = $GLOBALS['TL_LANG']['MSC']['securityQuestion']; // Add groups foreach ($arrFields as $k=>$v) { $this->Template->$k = $v; } $this->Template->captcha = $arrFields['captcha']; $this->Template->formId = 'tl_registration'; $this->Template->slabel = specialchars($GLOBALS['TL_LANG']['MSC']['register']); $this->Template->action = \Environment::get('indexFreeRequest'); // HOOK: add memberlist fields if (in_array('memberlist', \ModuleLoader::getActive())) { $this->Template->profile = $arrFields['profile']; $this->Template->profileDetails = $GLOBALS['TL_LANG']['tl_member']['profileDetails']; } // HOOK: add newsletter fields if (in_array('newsletter', \ModuleLoader::getActive())) { $this->Template->newsletter = $arrFields['newsletter']; $this->Template->newsletterDetails = $GLOBALS['TL_LANG']['tl_member']['newsletterDetails']; } // HOOK: add helpdesk fields if (in_array('helpdesk', \ModuleLoader::getActive())) { $this->Template->helpdesk = $arrFields['helpdesk']; $this->Template->helpdeskDetails = $GLOBALS['TL_LANG']['tl_member']['helpdeskDetails']; } } }