/** * @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; } }
/** * 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); }