/**
  * Returns all available presentations
  *
  * @return array<string>
  */
 public function getPresentationClass($presentation, $fieldName, $configs = null)
 {
     $event = new OW_Event('base.questions_field_get_label', array('presentation' => $presentation, 'fieldName' => $fieldName, 'configs' => $configs, 'type' => 'edit'));
     OW::getEventManager()->trigger($event);
     $label = $event->getData();
     $class = null;
     $event = new OW_Event('base.questions_field_init', array('type' => 'main', 'presentation' => $presentation, 'fieldName' => $fieldName, 'configs' => $configs));
     OW::getEventManager()->trigger($event);
     $class = $event->getData();
     if (empty($class)) {
         switch ($presentation) {
             case self::QUESTION_PRESENTATION_TEXT:
                 $class = new TextField($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_SELECT:
                 $class = new Selectbox($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_TEXTAREA:
                 $class = new Textarea($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_CHECKBOX:
                 $class = new CheckboxField($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_RADIO:
                 $class = new RadioField($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_MULTICHECKBOX:
                 $class = new CheckboxGroup($fieldName);
                 break;
             case self::QUESTION_PRESENTATION_BIRTHDATE:
             case self::QUESTION_PRESENTATION_AGE:
             case self::QUESTION_PRESENTATION_DATE:
                 $class = new DateField($fieldName);
                 if (!empty($configs) && mb_strlen(trim($configs)) > 0) {
                     $configsList = json_decode($configs, true);
                     foreach ($configsList as $name => $value) {
                         if ($name = 'year_range' && isset($value['from']) && isset($value['to'])) {
                             $class->setMinYear($value['from']);
                             $class->setMaxYear($value['to']);
                         }
                     }
                 }
                 $class->addValidator(new DateValidator($class->getMinYear(), $class->getMaxYear()));
                 break;
             case self::QUESTION_PRESENTATION_RANGE:
                 $class = new Range($fieldName);
                 if (!empty($configs) && mb_strlen(trim($configs)) > 0) {
                     $configsList = json_decode($configs, true);
                     foreach ($configsList as $name => $value) {
                         $minMax = explode("-", $value);
                         if ($name = 'range' && isset($minMax[0]) && isset($minMax[1])) {
                             $class->setMinValue($minMax[0]);
                             $class->setMaxValue($minMax[1]);
                         }
                     }
                 }
                 $class->addValidator(new RangeValidator());
                 break;
             case self::QUESTION_PRESENTATION_URL:
                 $class = new TextField($fieldName);
                 $class->addValidator(new UrlValidator());
                 break;
             case self::QUESTION_PRESENTATION_PASSWORD:
                 $class = new PasswordField($fieldName);
                 break;
         }
     }
     if (!empty($label)) {
         $class->setLabel($label);
     }
     return $class;
 }