/**
  * @param EE_Registration $registration
  * @param EE_Question     $question
  * @param mixed EE_Answer|NULL      $answer
  * @return EE_Form_Input_Base
  */
 public function _generate_question_input(EE_Registration $registration, EE_Question $question, $answer)
 {
     //		d( $registration );
     //		d( $question );
     //		d( $answer );
     // array of params to pass to parent constructor.
     // possible values:
     //		html_id;
     //		html_class;
     //		html_style;
     //		name;
     //		html_name;
     //		html_label_id;
     //		html_label_class;
     //		html_label_style;
     //		html_label_text;
     //		html_label;
     //		html_help_text;
     //		html_help_class = 'description';
     //		html_help_style;
     //		raw_value;
     $identifier = $question->is_system_question() ? $question->system_ID() : $question->ID();
     $input_constructor_args = array('html_name' => 'ee_reg_qstn[' . $registration->ID() . '][' . $identifier . ']', 'html_id' => 'ee_reg_qstn-' . $registration->ID() . '-' . $identifier, 'html_class' => 'ee-reg-qstn ee-reg-qstn-' . $identifier, 'required' => $question->required() ? TRUE : FALSE, 'html_label_id' => 'ee_reg_qstn-' . $registration->ID() . '-' . $identifier, 'html_label_class' => 'ee-reg-qstn', 'html_label_text' => $question->display_text(), 'required_validation_error_message' => $question->required_text());
     // has this question been answered ?
     if ($answer instanceof EE_Answer) {
         if ($answer->ID()) {
             $input_constructor_args['html_name'] .= '[' . $answer->ID() . ']';
             $input_constructor_args['html_id'] .= '-' . $answer->ID();
             $input_constructor_args['html_label_id'] .= '-' . $answer->ID();
         }
         $input_constructor_args['default'] = $answer->value();
     }
     //add "-lbl" to the end of the label id
     $input_constructor_args['html_label_id'] .= '-lbl';
     switch ($question->type()) {
         // Text
         case EEM_Question::QST_type_text:
             if ($identifier == 'email') {
                 return new EE_Email_Input($input_constructor_args);
             } else {
                 return new EE_Text_Input($input_constructor_args);
             }
             break;
             // Textarea
         // Textarea
         case EEM_Question::QST_type_textarea:
             return new EE_Text_Area_Input($input_constructor_args);
             break;
             // Radio Buttons
         // Radio Buttons
         case EEM_Question::QST_type_radio:
             return new EE_Radio_Button_Input($question->options(), $input_constructor_args);
             break;
             // Dropdown
         // Dropdown
         case EEM_Question::QST_type_dropdown:
             return new EE_Select_Input($question->options(), $input_constructor_args);
             break;
             // State Dropdown
         // State Dropdown
         case EEM_Question::QST_type_state:
             $state_options = array('' => array('' => ''));
             $states = $this->checkout->action == 'process_reg_step' ? EEM_State::instance()->get_all_states() : EEM_State::instance()->get_all_active_states();
             if (!empty($states)) {
                 foreach ($states as $state) {
                     if ($state instanceof EE_State) {
                         $state_options[$state->country()->name()][$state->ID()] = $state->name();
                     }
                 }
             }
             $state_options = apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__state_options', $state_options, $this, $registration, $question, $answer);
             return new EE_State_Select_Input($state_options, $input_constructor_args);
             break;
             // Country Dropdown
         // Country Dropdown
         case EEM_Question::QST_type_country:
             $country_options = array('' => '');
             // get possibly cached list of countries
             $countries = $this->checkout->action == 'process_reg_step' ? EEM_Country::instance()->get_all_countries() : EEM_Country::instance()->get_all_active_countries();
             if (!empty($countries)) {
                 foreach ($countries as $country) {
                     if ($country instanceof EE_Country) {
                         $country_options[$country->ID()] = $country->name();
                     }
                 }
             }
             $country_options = apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__country_options', $country_options, $this, $registration, $question, $answer);
             return new EE_Country_Select_Input($country_options, $input_constructor_args);
             break;
             // Checkboxes
         // Checkboxes
         case EEM_Question::QST_type_checkbox:
             return new EE_Checkbox_Multi_Input($question->options(), $input_constructor_args);
             break;
             // Date
         // Date
         case EEM_Question::QST_type_date:
             return new EE_Datepicker_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_html_textarea:
             $input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
             $input = new EE_Text_Area_Input($input_constructor_args);
             $input->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
             return $input;
             // fallback
         // fallback
         default:
             $default_input = apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default', null, $question->type(), $question, $input_constructor_args);
             if (!$default_input) {
                 $default_input = new EE_Text_Input($input_constructor_args);
             }
             return $default_input;
     }
 }
コード例 #2
0
 /**
  * Creates a form input from this question which can be used in HTML forms
  * @param EE_Registration $registration
  * @param EE_Answer $answer
  * @param array $input_constructor_args
  * @return EE_Form_Input_Base
  */
 public function generate_form_input($registration = null, $answer = null, $input_constructor_args = array())
 {
     $identifier = $this->is_system_question() ? $this->system_ID() : $this->ID();
     $input_constructor_args = array_merge(array('required' => $this->required() ? true : false, 'html_label_text' => $this->display_text(), 'required_validation_error_message' => $this->required_text()), $input_constructor_args);
     if (!$answer instanceof EE_Answer && $registration instanceof EE_Registration) {
         $answer = EEM_Answer::instance()->get_registration_question_answer_object($registration, $this->ID());
     }
     // has this question been answered ?
     if ($answer instanceof EE_Answer) {
         //answer gets htmlspecialchars called on it, undo that please
         //because the form input's display strategy may call esc_attr too
         //which also does html special characters
         $values_with_html_special_chars = $answer->value();
         if (is_array($values_with_html_special_chars)) {
             $default_value = array_map('htmlspecialchars_decode', $values_with_html_special_chars);
         } else {
             $default_value = htmlspecialchars_decode($values_with_html_special_chars);
         }
         $input_constructor_args['default'] = $default_value;
     }
     $max_max_for_question = EEM_Question::instance()->absolute_max_for_system_question($this->system_ID());
     if (EEM_Question::instance()->question_type_is_in_category($this->type(), 'text')) {
         $input_constructor_args['validation_strategies'][] = new EE_Max_Length_Validation_Strategy(null, min($max_max_for_question, $this->max()));
     }
     $input_constructor_args = apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__input_constructor_args', $input_constructor_args, $registration, $this, $answer);
     $result = null;
     switch ($this->type()) {
         // Text
         case EEM_Question::QST_type_text:
             $result = new EE_Text_Input($input_constructor_args);
             break;
             // Textarea
         // Textarea
         case EEM_Question::QST_type_textarea:
             $result = new EE_Text_Area_Input($input_constructor_args);
             break;
             // Radio Buttons
         // Radio Buttons
         case EEM_Question::QST_type_radio:
             $result = new EE_Radio_Button_Input($this->options(), $input_constructor_args);
             break;
             // Dropdown
         // Dropdown
         case EEM_Question::QST_type_dropdown:
             $result = new EE_Select_Input($this->options(), $input_constructor_args);
             break;
             // State Dropdown
         // State Dropdown
         case EEM_Question::QST_type_state:
             $state_options = apply_filters('FHEE__EE_Question__generate_form_input__state_options', null, $this, $registration, $answer);
             $result = new EE_State_Select_Input($state_options, $input_constructor_args);
             break;
             // Country Dropdown
         // Country Dropdown
         case EEM_Question::QST_type_country:
             $country_options = apply_filters('FHEE__EE_Question__generate_form_input__country_options', null, $this, $registration, $answer);
             $result = new EE_Country_Select_Input($country_options, $input_constructor_args);
             break;
             // Checkboxes
         // Checkboxes
         case EEM_Question::QST_type_checkbox:
             $result = new EE_Checkbox_Multi_Input($this->options(), $input_constructor_args);
             break;
             // Date
         // Date
         case EEM_Question::QST_type_date:
             $result = new EE_Datepicker_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_html_textarea:
             $input_constructor_args['validation_strategies'][] = new EE_Simple_HTML_Validation_Strategy();
             $result = new EE_Text_Area_Input($input_constructor_args);
             $result->remove_validation_strategy('EE_Plaintext_Validation_Strategy');
             break;
         case EEM_Question::QST_type_email:
             $result = new EE_Email_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_us_phone:
             $result = new EE_Phone_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_int:
             $input_constructor_args['validation_strategies'][] = new EE_Int_Validation_Strategy();
             $result = new EE_Text_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_decimal:
             $input_constructor_args['validation_strategies'][] = new EE_Float_Validation_Strategy();
             $result = new EE_Text_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_url:
             $input_constructor_args['validation_strategies'][] = new EE_URL_Validation_Strategy();
             $result = new EE_Text_Input($input_constructor_args);
             break;
         case EEM_Question::QST_type_year:
             $result = new EE_Year_Input($input_constructor_args, apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__four_digit', true, $this), apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__early_range', 100, $this), apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__year_question__end_range', 100, $this));
             break;
         case EEM_Question::QST_type_multi_select:
             $result = new EE_Select_Multiple_Input($this->options(), $input_constructor_args);
             break;
             // fallback
         // fallback
         default:
             $default_input = apply_filters('FHEE__EE_SPCO_Reg_Step_Attendee_Information___generate_question_input__default', null, $this->type(), $this, $input_constructor_args);
             if (!$default_input) {
                 $default_input = new EE_Text_Input($input_constructor_args);
             }
             $result = $default_input;
     }
     return apply_filters('FHEE__EE_Question__generate_form_input__return', $result, $registration, $this, $answer);
 }