protected function init()
 {
     $this->settings = $this->getSettings();
     $this->formValuesPrefix = Tx_Formhandler_StaticFuncs::getSingle($this->settings, 'formValuesPrefix');
     Tx_Formhandler_Globals::$formID = Tx_Formhandler_StaticFuncs::getSingle($this->settings, 'formID');
     Tx_Formhandler_Globals::$formValuesPrefix = $this->formValuesPrefix;
     //set debug mode
     $isDebugMode = Tx_Formhandler_StaticFuncs::getSingle($this->settings, 'debug');
     $this->debugMode = intval($isDebugMode) === 1;
     $sessionClass = 'Tx_Formhandler_Session_PHP';
     if ($this->settings['session.']) {
         $sessionClass = Tx_Formhandler_StaticFuncs::prepareClassName($this->settings['session.']['class']);
     }
     Tx_Formhandler_Globals::$session = $this->componentManager->getComponent($sessionClass);
     $this->gp = Tx_Formhandler_Staticfuncs::getMergedGP();
     $randomID = $this->gp['randomID'];
     if (!$randomID) {
         $randomID = Tx_Formhandler_StaticFuncs::generateRandomID();
     }
     Tx_Formhandler_Globals::$randomID = $randomID;
     $action = t3lib_div::_GP('action');
     if (Tx_Formhandler_Globals::$formValuesPrefix) {
         $temp = t3lib_div::_GP(Tx_Formhandler_Globals::$formValuesPrefix);
         $action = $temp['action'];
     }
     if (Tx_Formhandler_Globals::$session->get('finished') && !$action) {
         Tx_Formhandler_Globals::$session->reset();
         unset($_GET[Tx_Formhandler_Globals::$formValuesPrefix]);
         unset($_GET['id']);
         Tx_Formhandler_StaticFuncs::doRedirect($GLOBALS['TSFE']->id, FALSE, $_GET);
         exit;
     }
     $this->parseConditions();
     $this->initializeDebuggers();
     $this->getStepInformation();
     $currentStepFromSession = Tx_Formhandler_Globals::$session->get('currentStep');
     $prevStep = $currentStepFromSession;
     if (intval($prevStep) !== intval($currentStepFromSession)) {
         $this->currentStep = 1;
         $this->lastStep = 1;
         Tx_Formhandler_StaticFuncs::throwException('You messed with the steps!');
     }
     $this->mergeGPWithSession(FALSE, $this->currentStep);
     $this->parseConditions();
     //read template file
     $this->templateFile = Tx_Formhandler_StaticFuncs::readTemplateFile($this->templateFile, $this->settings);
     Tx_Formhandler_Globals::$templateCode = $this->templateFile;
     $this->langFiles = Tx_Formhandler_StaticFuncs::readLanguageFiles($this->langFiles, $this->settings);
     Tx_Formhandler_Globals::$langFiles = $this->langFiles;
     $this->validateConfig();
     Tx_Formhandler_Globals::$settings = $this->settings;
     //set debug mode again cause it may have changed in specific step settings
     $this->debugMode = intval($this->settings['debug']) === 1;
     Tx_Formhandler_Globals::$session->set('debug', $this->debugMode);
     Tx_Formhandler_StaticFuncs::debugMessage('using_prefix', array($this->formValuesPrefix));
     //init view
     $viewClass = $this->settings['view'];
     if (!$viewClass) {
         $viewClass = 'Tx_Formhandler_View_Form';
     }
     Tx_Formhandler_StaticFuncs::debugMessage('using_view', array($viewClass));
     Tx_Formhandler_StaticFuncs::debugMessage('current_gp', array(), 1, $this->gp);
     $this->storeSettingsInSession();
     $this->mergeGPWithSession(FALSE, $this->currentStep);
     //set submitted
     $this->submitted = $this->isFormSubmitted();
     if (!$this->submitted) {
         $this->reset();
     }
     // set stylesheet file(s)
     $this->addCSS();
     // add JavaScript file(s)
     $this->addJS();
     Tx_Formhandler_StaticFuncs::debugMessage('current_session_params', array(), 1, (array) Tx_Formhandler_Globals::$session->get('values'));
     $viewClass = Tx_Formhandler_StaticFuncs::prepareClassName($viewClass);
     $this->view = $this->componentManager->getComponent($viewClass);
     $this->view->setLangFiles($this->langFiles);
     $this->view->setSettings($this->settings);
     Tx_Formhandler_Globals::$gp = $this->gp;
     //init ajax
     if ($this->settings['ajax.']) {
         $class = $this->settings['ajax.']['class'];
         if (!$class) {
             $class = 'Tx_Formhandler_AjaxHandler_JQuery';
         }
         Tx_Formhandler_StaticFuncs::debugMessage('using_ajax', array($class));
         $class = Tx_Formhandler_StaticFuncs::prepareClassName($class);
         $ajaxHandler = $this->componentManager->getComponent($class);
         Tx_Formhandler_Globals::$ajaxHandler = $ajaxHandler;
         $ajaxHandler->init($this->settings['ajax.']['config.']);
         $ajaxHandler->initAjax();
     }
     if (!$this->gp['randomID']) {
         $this->gp['randomID'] = Tx_Formhandler_Globals::$randomID;
     }
 }
 /**
  * Init method for the controller.
  * This method sets internal values, initializes the ajax handler and the session.
  *
  * @return void
  */
 protected function init()
 {
     $this->settings = $this->getSettings();
     $this->formValuesPrefix = $this->utilityFuncs->getSingle($this->settings, 'formValuesPrefix');
     $this->globals->setFormID($this->utilityFuncs->getSingle($this->settings, 'formID'));
     $this->globals->setFormValuesPrefix($this->formValuesPrefix);
     $isDebugMode = $this->utilityFuncs->getSingle($this->settings, 'debug');
     $this->debugMode = intval($isDebugMode) === 1;
     $this->gp = $this->utilityFuncs->getMergedGP();
     $randomID = $this->gp['randomID'];
     if (!$randomID) {
         if ($this->settings['uniqueFormID']) {
             $randomID = $this->utilityFuncs->getSingle($this->settings, 'uniqueFormID');
         } else {
             $randomID = $this->utilityFuncs->generateRandomID();
         }
     }
     $this->globals->setRandomID($randomID);
     $sessionClass = $this->utilityFuncs->getPreparedClassName($this->settings['session.'], 'Session_PHP');
     $session = $this->componentManager->getComponent($sessionClass);
     $session->init($this->gp, $this->settings['session.']['config.']);
     $session->start();
     $this->globals->setSession($session);
     $action = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP('action');
     if ($this->globals->getFormValuesPrefix()) {
         $temp = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP($this->globals->getFormValuesPrefix());
         $action = $temp['action'];
     }
     if ($this->globals->getSession()->get('finished') && !$action) {
         $this->globals->getSession()->reset();
         unset($_GET[$this->globals->getFormValuesPrefix()]);
         unset($_GET['id']);
         $this->utilityFuncs->doRedirect($GLOBALS['TSFE']->id, FALSE, $_GET);
         exit;
     }
     $this->parseConditions();
     $this->initializeDebuggers();
     $this->getStepInformation();
     $currentStepFromSession = $this->globals->getSession()->get('currentStep');
     $prevStep = $currentStepFromSession;
     if (intval($prevStep) !== intval($currentStepFromSession)) {
         $this->currentStep = 1;
         $this->lastStep = 1;
         $this->utilityFuncs->throwException('You messed with the steps!');
     }
     $this->mergeGPWithSession();
     $this->parseConditions();
     if (intval($this->utilityFuncs->getSingle($this->settings, 'disableConfigValidation')) === 0) {
         $this->validateConfig();
     }
     $this->globals->setSettings($this->settings);
     //set debug mode again cause it may have changed in specific step settings
     $isDebugMode = $this->utilityFuncs->getSingle($this->settings, 'debug');
     $this->debugMode = intval($isDebugMode) === 1;
     $this->globals->getSession()->set('debug', $this->debugMode);
     $this->utilityFuncs->debugMessage('using_prefix', array($this->formValuesPrefix));
     $this->globals->getSession()->set('predef', $this->globals->getPredef());
     //init view
     $viewClass = $this->utilityFuncs->getPreparedClassName($this->settings['view.'], 'View_Form');
     $this->utilityFuncs->debugMessage('using_view', array($viewClass));
     $this->utilityFuncs->debugMessage('current_gp', array(), 1, $this->gp);
     $this->storeSettingsInSession();
     $this->mergeGPWithSession();
     $this->submitted = $this->isFormSubmitted();
     $this->globals->setSubmitted($this->submitted);
     if ($this->globals->getSession()->get('creationTstamp') === NULL) {
         if ($this->submitted) {
             $this->reset($this->gp);
             $this->findCurrentStep();
             $this->globals->getSession()->set('currentStep', $this->currentStep);
         } else {
             $this->reset();
         }
     }
     $this->addCSS();
     $this->addJS();
     $this->addJSFooter();
     $this->utilityFuncs->debugMessage('current_session_params', array(), 1, (array) $this->globals->getSession()->get('values'));
     $this->view = $this->componentManager->getComponent($viewClass);
     $this->view->setLangFiles($this->langFiles);
     $this->view->setSettings($this->settings);
     $this->globals->setGP($this->gp);
     //init ajax
     if ($this->settings['ajax.']) {
         $class = $this->utilityFuncs->getPreparedClassName($this->settings['ajax.'], 'AjaxHandler_JQuery');
         $this->utilityFuncs->debugMessage('using_ajax', array($class));
         $ajaxHandler = $this->componentManager->getComponent($class);
         $this->globals->setAjaxHandler($ajaxHandler);
         $ajaxHandler->init($this->settings['ajax.']['config.']);
         $ajaxHandler->initAjax();
     }
     if (!$this->gp['randomID']) {
         $this->gp['randomID'] = $this->globals->getRandomID();
     }
 }