/**
  * @author giorgio 29/mag/2013
  * 
  * added extra parameter to constructor to allow editing of student confirmed registration
  * 
  */
 public function __construct($languages = array(), $allowEditProfile = false, $allowEditConfirm = false, $action = null)
 {
     parent::__construct();
     $this->addHidden('id_utente')->withData(0);
     /*
      *  @author:Sara  20/05/2014
      *  Workaround to remove the Google-Chrome autocomplete functionality.
      */
     $j = 'return remove_false_element()';
     $this->setOnSubmit($j);
     $false_username = FormControl::create(FormControl::INPUT_TEXT, 'false_username', '');
     $false_password = FormControl::create(FormControl::INPUT_PASSWORD, 'false_password', '');
     $false_elements_fieldset = FormControl::create(FormControl::FIELDSET, 'false_elements_fieldset', '');
     $false_elements_fieldset->setHidden();
     $false_elements_fieldset->withData(array($false_username, $false_password));
     $this->addControl($false_elements_fieldset);
     $this->addPasswordInput('password', translateFN('Password'));
     //->setValidator(FormValidator::PASSWORD_VALIDATOR);
     $this->addPasswordInput('passwordcheck', translateFN('Conferma la password'));
     /**
      * If the swithcer does not use this form to edit her own
      * profile, the avatar upload must be disabled
      */
     if ($_SESSION['sess_userObj']->getType() != AMA_TYPE_SWITCHER || !$allowEditConfirm) {
         $this->addFileInput('avatarfile', translateFN('Seleziona un file immagine per il tuo avatar'));
         $this->addTextInput('avatar', NULL);
     }
     if ($action != null) {
         $this->setAction($action);
     }
     /// $this->addTextInput('telefono', translateFN('Telefono'));
     $telefono = FormControl::create(FormControl::INPUT_TEXT, 'telefono', translateFN('Telefono'));
     $cap = FormControl::create(FormControl::INPUT_TEXT, 'cap', translateFN('cap'));
     $citta = FormControl::create(FormControl::INPUT_TEXT, 'citta', translateFN('Città'));
     $indirizzo = FormControl::create(FormControl::INPUT_TEXT, 'indirizzo', translateFN('Indirizzo'));
     $provincia = FormControl::create(FormControl::INPUT_TEXT, 'provincia', translateFN('Provincia'));
     $countries = countriesList::getCountriesList($_SESSION['sess_user_language']);
     $nazione = FormControl::create(FormControl::SELECT, 'nazione', translateFN('Nazione'));
     $nazione->withData($countries);
     $this->addFieldset(translateFN('Dati residenza'), 'residenza')->withData(array($indirizzo, $cap, $citta, $provincia, $nazione, $telefono));
     //        $this->addTextInput('indirizzo', translateFN('Indirizzo'));
     //        $this->addTextInput('citta', translateFN('Città'));
     //        $this->addTextInput('provincia', translateFN('Provincia'));
     /*
            $countries = countriesList::getCountriesList($_SESSION['sess_user_language']);
            $this->addSelect(
                'nazione',
                 translateFN('Nazione'),
                 $countries,
            'IT');
     * 
     */
     $this->addTextInput('codice_fiscale', translateFN('Cod. Fiscale'));
     /**
      * @author giorgio 29/mag/2013
      * 
      * added select field to allow editing of user confirmed registration status
      */
     if ($allowEditConfirm) {
         $this->addSelect('stato', translateFN('Confermato'), array(ADA_STATUS_PRESUBSCRIBED => translateFN('No'), ADA_STATUS_REGISTERED => translateFN('Si')), 0);
     }
     //->setValidator(FormValidator::PASSWORD_VALIDATOR);
     if ($allowEditProfile) {
         $this->addTextarea('profilo', translateFN('Il tuo profilo utente'));
     }
     $layoutsAr = array('' => translateFN('seleziona un layout'));
     $layoutObj = new UILayout();
     $avalaibleLayoutAr = $layoutObj->getAvailableLayouts();
     $layouts = array_merge($layoutsAr, $avalaibleLayoutAr);
     $this->addSelect('layout', translateFN('Layout'), $layouts, 0);
     if (is_array($languages) && count($languages) > 0) {
         $languagesAr[0] = translateFN('seleziona una lingua');
         $languages = array_replace($languagesAr, $languages);
         //            $languages = array_merge($languagesAr,$languages);
         $this->addSelect('lingua', translateFN('Lingua'), $languages, 0);
     }
 }
 private static function getFormForUser($form_action, $testersAr = array(), $user_dataAr = array(), $errorsAr = array())
 {
     $form = CDOMElement::create('form', 'id:user_form, name:user_form, class:fec, method:post');
     $form->setAttribute('action', $form_action);
     if (is_array($errorsAr) && isset($errorsAr['registration_error'])) {
         switch ($errorsAr['registration_error']) {
             case ADA_ADD_USER_ERROR:
             case ADA_ADD_USER_ERROR_TESTER:
                 $error_message = translateFN("Si è verificato un errore nell'aggiunta dell'utente");
                 break;
             case ADA_ADD_USER_ERROR_USER_EXISTS:
             case ADA_ADD_USER_ERROR_USER_EXISTS_TESTER:
                 $error_message = translateFN("Esiste già un utente con la stessa email dell'utente che si sta cercando di aggiungere");
                 break;
             case ADA_ADD_USER_ERROR_TESTER_ASSOCIATION:
                 $error_message = translateFN("Si è verificato un errore durante l'associazione dell'utente al tester selezionato");
                 break;
         }
         $error_div = CDOMElement::create('div', 'class:error');
         $error_div->addChild(new CText($error_message));
         $form->addChild($error_div);
     }
     if (is_array($user_dataAr) && isset($user_dataAr['user_id'])) {
         $user_id = CDOMElement::create('hidden', 'id:user_id, name:user_id');
         $user_id->setAttribute('value', $user_dataAr['user_id']);
         $form->addChild($user_id);
     }
     $testers_dataAr = array();
     $testers_dataAr['none'] = translateFN("--Scegli un tester da associare--");
     foreach ($testersAr as $key => $value) {
         $testers_dataAr[$key] = $value;
     }
     if (is_array($testersAr) && count($testersAr) > 0) {
         $user_testers = FormElementCreator::addSelect('user_tester', "Tester a cui associare l'utente", $testers_dataAr, $user_dataAr, $errorsAr);
         $form->addChild($user_testers);
     }
     $user_typeAr = array('none' => translateFN("--Seleziona il tipo di utente--"), AMA_TYPE_STUDENT => translateFN('Utente'), AMA_TYPE_TUTOR => translateFN('Tutor'), AMA_TYPE_SUPERTUTOR => translateFN('Super Tutor'), AMA_TYPE_SWITCHER => translateFN('Switcher'), AMA_TYPE_AUTHOR => translateFN('Autore'), AMA_TYPE_ADMIN => translateFN('Amministratore'));
     $user_type = FormElementCreator::addSelect('user_type', 'Tipo di utente', $user_typeAr, $user_dataAr, $errorsAr);
     $form->addChild($user_type);
     $user_firstname = FormElementCreator::addTextInput('user_firstname', 'Nome', $user_dataAr, $errorsAr);
     $form->addChild($user_firstname);
     $user_lastname = FormElementCreator::addTextInput('user_lastname', 'Cognome', $user_dataAr, $errorsAr);
     $form->addChild($user_lastname);
     $user_email = FormElementCreator::addTextInput('user_email', 'E-mail', $user_dataAr, $errorsAr);
     $form->addChild($user_email);
     $user_username = FormElementCreator::addTextInput('user_username', 'Username (min. 8 caratteri)', $user_dataAr, $errorsAr);
     $form->addChild($user_username);
     $user_password = FormElementCreator::addPasswordInput('user_password', 'Password (min. 8 caratteri)', $errorsAr);
     $form->addChild($user_password);
     $user_passwordcheck = FormElementCreator::addPasswordInput('user_passwordcheck', 'Ripeti password', $errorsAr);
     $form->addChild($user_passwordcheck);
     /*
        $layoutsAr = array(
          'none'         => translateFN('seleziona un layout'),
          'default'      => 'default',
          'masterstudio' => 'masterstudio'
        );
     * 
     */
     $layoutsAr = array('none' => translateFN('seleziona un layout'));
     $layoutObj = new UILayout();
     $availableLayout = $layoutObj->getAvailableLayouts();
     foreach ($availableLayout as $familyLayoutIdentifier => $familyLayoutValue) {
         $layoutsAr[$familyLayoutIdentifier] = $familyLayoutValue;
     }
     $user_layout = FormElementCreator::addSelect('user_layout', 'Layout', $layoutsAr, $user_dataAr);
     $form->addChild($user_layout);
     $user_address = FormElementCreator::addTextInput('user_address', 'Indirizzo', $user_dataAr, $errorsAr);
     $form->addChild($user_address);
     $user_city = FormElementCreator::addTextInput('user_city', 'Città', $user_dataAr, $errorsAr);
     $form->addChild($user_city);
     $user_province = FormElementCreator::addTextInput('user_province', 'Provincia', $user_dataAr, $errorsAr);
     $form->addChild($user_province);
     $user_country = FormElementCreator::addTextInput('user_country', 'Nazione', $user_dataAr, $errorsAr);
     $form->addChild($user_country);
     $user_fiscal_code = FormElementCreator::addTextInput('user_fiscal_code', 'Codice Fiscale', $user_dataAr, $errorsAr);
     $form->addChild($user_fiscal_code);
     $user_birthdate = FormElementCreator::addDateInput('user_birthdate', 'Data di Nascita', $user_dataAr, $errorsAr);
     $form->addChild($user_birthdate);
     $user_birthcity = FormElementCreator::addTextInput('user_birthcity', 'Comune o stato estero di nascita', $user_dataAr, $errorsAr);
     $form->addChild($user_birthcity);
     $user_birthprovince = FormElementCreator::addTextInput('user_birthprovince', 'Provincia di nascita', $user_dataAr, $errorsAr);
     $form->addChild($user_birthprovince);
     $sexAr = array('M' => 'M', 'F' => 'F');
     $user_sex = FormElementCreator::addSelect('user_sex', 'Sesso', $sexAr, $user_dataAr);
     $form->addChild($user_sex);
     $user_phone = FormElementCreator::addTextInput('user_phone', 'Telefono', $user_dataAr, $errorsAr);
     $form->addChild($user_phone);
     $buttons = FormElementCreator::addSubmitAndResetButtons();
     $form->addChild($buttons);
     return $form;
 }