Ejemplo n.º 1
0
 /**
  * Строит форму
  * 
  * @param array $fields Массив данных о полях формы
  * 
  * @return Zend_Form
  */
 public function buildForm($fields)
 {
     $form = Phorm_Form::makeForm();
     foreach ($fields as $data) {
         $fieldname = "field_" . $data["fieldid"];
         switch ($data["fieldtype"]) {
             /**
              * Однострочное текстовое поле
              */
             case "Text":
                 $field = new Zend_Form_Element_Text($fieldname);
                 // Типы валидаторов
                 if ($data["fieldvalidators"] == "Email") {
                     $field->addValidator("EmailAddress", true, array("messages" => array("emailAddressInvalid" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidHostname" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidMxRecord" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidSegment" => $this->_translate->_("Неверно указан email"), "emailAddressDotAtom" => $this->_translate->_("Неверно указан email"), "emailAddressQuotedString" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidLocalPart" => $this->_translate->_("Неверно указан email"), "emailAddressLengthExceeded" => $this->_translate->_("Неверно указан email"), "emailAddressInvalidFormat" => $this->_translate->_("Неверный формат"))));
                 } elseif ($data["fieldvalidators"] == "Date") {
                     $field->addValidator("Date", true, array("messages" => array("dateInvalid" => $this->_translate->_("Неверная дата"), "dateInvalidDate" => $this->_translate->_("Неверная дата"), "dateFalseFormat" => $this->_translate->_("Неверная дата"))));
                 } elseif ($data["fieldvalidators"] == "Int") {
                     $field->addValidator("Int", true, array("messages" => array("notInt" => $this->_translate->_("Значение должно быть числом"), "intInvalid" => $this->_translate->_("Значение должно быть числом"))));
                 } elseif ($data["fieldvalidators"] == "Hostname") {
                     $field->addValidator("Hostname", true, array("messages" => array("hostnameInvalid" => $this->_translate->_("Неверный адрес"), "hostnameIpAddressNotAllowed" => $this->_translate->_("Неверный адрес"), "hostnameUnknownTld" => $this->_translate->_("Неверный адрес"), "hostnameDashCharacter" => $this->_translate->_("Неверный адрес"), "hostnameInvalidHostnameSchema" => $this->_translate->_("Неверный адрес"), "hostnameUndecipherableTld" => $this->_translate->_("Неверный адрес"), "hostnameInvalidHostname" => $this->_translate->_("Неверный адрес"), "hostnameInvalidLocalName" => $this->_translate->_("Неверный адрес"), "hostnameLocalNameNotAllowed" => $this->_translate->_("Неверный адрес"), "hostnameCannotDecodePunycode" => $this->_translate->_("Неверный адрес"))));
                 }
                 // Если разрешен HTML
                 if ($data["htmlallowed"] == "yes") {
                     $field->addFilter("StringTrim");
                 } else {
                     $field->addFilter("StripTags");
                 }
                 break;
                 /**
                  * Многострочное текстовое поле
                  */
             /**
              * Многострочное текстовое поле
              */
             case "Textarea":
                 $field = new Zend_Form_Element_Textarea($fieldname);
                 // Если разрешен HTML
                 if ($data["htmlallowed"] == "yes") {
                     $field->addFilter("StringTrim");
                 } else {
                     $field->addFilter("StripTags");
                 }
                 break;
                 /**
                  * Чекбокс
                  */
             /**
              * Чекбокс
              */
             case "Checkbox":
                 $field = new Zend_Form_Element_Checkbox($fieldname);
                 break;
                 /**
                  * Радиоточка
                  */
             /**
              * Радиоточка
              */
             case "Radio":
                 $field = new Zend_Form_Element_Radio($fieldname);
                 break;
                 /**
                  * Список
                  */
             /**
              * Список
              */
             case "Select":
                 $field = new Zend_Form_Element_Select($fieldname);
                 $haystack = array();
                 $optionsdata = explode("\n", $data["optionsdata"]);
                 foreach ($optionsdata as $k => $v) {
                     $haystack[$k] = trim($v);
                 }
                 $field->addMultiOption("", $this->_translate->_("---Выберите---"));
                 foreach ($haystack as $value) {
                     $field->addMultiOption($value, $value);
                 }
                 $haystack[$this->_translate->_("---Выберите---")] = "";
                 $field->addValidator("InArray", true, array("haystack" => $haystack, "messages" => array("notInArray" => $this->_translate->_("Не выбрано ни одного значения"))));
                 break;
                 /**
                  * Список с множественным выбором
                  */
             /**
              * Список с множественным выбором
              */
             case "Multiselect":
                 $field = new Zend_Form_Element_Multiselect($fieldname);
                 $haystack = array();
                 $optionsdata = explode("\n", $data["optionsdata"]);
                 foreach ($optionsdata as $k => $v) {
                     $haystack[$k] = trim($v);
                 }
                 foreach ($optionsdata as $value) {
                     $field->addMultiOption($value, $value);
                 }
                 $field->addValidator("InArray", true, array("haystack" => $haystack, "messages" => array("notInArray" => $this->_translate->_("Не выбрано ни одного значения"))));
                 break;
                 /**
                  * Файл
                  */
             /**
              * Файл
              */
             case "File":
                 $field = new Zend_Form_Element_File($fieldname);
                 if ($data["filestypes"] == "Images") {
                     $field->addValidator("Extension", false, array("extension" => "png,jpg,gif,jpeg,bmp", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является изображением"))));
                 } elseif ($data["filestypes"] == "Documents") {
                     $field->addValidator("Extension", false, array("extension" => "doc,xls,odt,docx,xlsx,pdf,txt", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является документом"))));
                 } elseif ($data["filestypes"] == "Archives") {
                     $field->addValidator("Extension", false, array("extension" => "zip,rar,7z,gz,tgz", "messages" => array("fileExtensionFalse" => $this->_translate->_("Файл '%value%' не является файловым архивом"))));
                 }
                 //$field -> setDestination($this->paths["html"]."forms/files/");
                 $field->setValueDisabled(true);
                 break;
                 /**
                  * Refferer
                  */
             /**
              * Refferer
              */
             case "Refferer":
                 $field = new Zend_Form_Element_Hidden($fieldname);
                 if (isset($_SERVER["HTTP_REFERER"])) {
                     $field->setValue($_SERVER["HTTP_REFERER"]);
                 }
                 break;
                 /**
                  * CAPTCHA
                  */
             /**
              * CAPTCHA
              */
             case "Captcha":
                 $captcha = Phorm_Captcha_Image::getCaptcha();
                 $captcha->setOptions(array("messages" => array("badCaptcha" => $this->_translate->_("Неверно указан код подтверждения"), "missingID" => $this->_translate->_("Неверный идентификатор Captcha"))));
                 $field = new Zend_Form_Element_Captcha($fieldname, array("captcha" => $captcha));
                 break;
             default:
                 continue;
         }
         // Если поле обязательно для заполнения
         if ($data["isrequired"] == "yes") {
             $field->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не заполнено поле"))));
         }
         // Устанавливаем заголовок и описание поля
         if ($field instanceof Zend_Form_Element_Hidden) {
             $field->removeDecorator("label")->removeDecorator("HtmlTag");
         } else {
             $field->setLabel($data["fieldname"])->setDescription($data["fieldtxt"]);
         }
         $form->addElement($field);
     }
     $form->addElement(new Zend_Form_Element_Submit("Send", $this->_translate->_("Отправить")));
     $form->setAttrib('enctype', 'multipart/form-data');
     return $form;
 }
Ejemplo n.º 2
0
 /**
  * Форма регистрации пользователей
  * 
  * @return Zend_Form
  */
 public function getSignupForm()
 {
     // Имя пользователя
     $username = new Zend_Form_Element_Text("username");
     $username->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не заполнено имя пользователя"))))->addValidator("Callback", true, array("callback" => array($this, "validateUsernameExist"), "messages" => array("callbackValue" => $this->_translate->_("Пользователь с таким именем уже зарегистрирован"))))->setLabel($this->_translate->_("Выберите имя пользователя"));
     // Пароль
     $passw = new Zend_Form_Element_Password("passw");
     $passw->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не выбран пароль"))))->setLabel($this->_translate->_("Выберите пароль"));
     // Подтверждение пароля
     $repassw = new Zend_Form_Element_Password("repassw");
     $repassw->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не подтвержден пароль"))))->addValidator("Callback", true, array("callback" => array($this, "validatePasswConfirm"), "messages" => array("callbackValue" => $this->_translate->_("Неверно подтвержден пароль"))))->setLabel($this->_translate->_("Подтвердите пароль"));
     // Email
     $email = new Zend_Form_Element_Text("email");
     $email->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не указан адрес электронной почты"))))->addValidator("EmailAddress", true, array("messages" => array("emailAddressInvalid" => $this->_translate->_("Неверно указан адрес электронной почты"), "emailAddressInvalidFormat" => $this->_translate->_("Адрес электронной почты имеет неверный формат"))))->addValidator("Callback", true, array("callback" => array($this, "validateEmailExist"), "messages" => array("callbackValue" => $this->_translate->_("Пользователь с таким email уже зарегистрирован"))))->setLabel($this->_translate->_("Адрес электронной почты"));
     // Подтверждение email
     $reemail = new Zend_Form_Element_Text("reemail");
     $reemail->setRequired(true)->addValidator("NotEmpty", true, array("messages" => array("isEmpty" => $this->_translate->_("Не подтвержден адрес электронной почты"))))->addValidator("Callback", true, array("callback" => array($this, "validateEmailConfirm"), "messages" => array("callbackValue" => $this->_translate->_("Неверно подтвержден адрес электронной почты"))))->setLabel($this->_translate->_("Подтвердите адрес электронной почты"));
     // CAPTCHA
     $captcha = Phorm_Captcha_Image::getCaptcha();
     $captcha->setOptions(array("messages" => array("badCaptcha" => $this->_translate->_("Неверно указан код подтверждения"), "missingID" => $this->_translate->_("Неверный идентификатор Captcha"))));
     $captcha = new Zend_Form_Element_Captcha("captcha", array("captcha" => $captcha));
     $captcha->setLabel($this->_translate->_("Код подтверждения"))->setDescription($this->_translate->_("Введите данные с изображения (цифры и латинские буквы)"));
     // Создаем объект формы и добавляем в нее элементы
     $form = Phorm_Form::makeForm();
     $form->addElement($username)->addElement($passw)->addElement($repassw)->addElement($email)->addElement($reemail)->addElement($captcha);
     $form->addElement(new Zend_Form_Element_Submit("Send", $this->_translate->_("Зарегистрировать")));
     return $form;
 }