/**
  * @param ISurveyQuestionTemplate $question
  * @return bool
  */
 public function belongsTo(ISurveyQuestionTemplate $question)
 {
     foreach ($this->getQuestions() as $q) {
         if ($q->getIdentifier() === $question->getIdentifier()) {
             return true;
         }
     }
     return false;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $value = null;
     if (!is_null($answer)) {
         $value = $answer->value();
     }
     $field = new SurveyOrganizationField($question, $value);
     if ($question->isMandatory()) {
         $field->setRequired();
     }
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $options = array();
     if ($question->IsCountrySelector) {
         $extra_options = array('Worldwide' => 'Worldwide', 'Prefer not to say' => 'Prefer not to say', 'Too many to list' => 'Too many to list');
         $options = array_merge($extra_options, CountryCodes::$iso_3166_countryCodes);
     } else {
         foreach ($question->Values()->sort('Order') as $val) {
             $options[$val->ID] = empty($val->Label) ? $val->Value : $val->Label;
         }
     }
     $default_value = $question->DefaultValue();
     $field = $question->IsMultiSelect ? new MultiDropdownField($question->name(), $question->label(), $options) : new DropdownField($question->name(), $question->label(), $options);
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setAttribute('data-rule-required', 'true');
         $field->setAttribute('aria-required', 'true');
     }
     if ($default_value) {
         $field->setValue($default_value->ID);
     }
     if (!is_null($answer)) {
         $field->setValue($answer->value());
     }
     $empty_string = $question->EmptyString;
     if (!empty($empty_string)) {
         if ($question->UseChosenPlugin && $question->IsMultiSelect) {
             $field->setAttribute('data-placeholder', $empty_string);
         } else {
             $field->setEmptyString($empty_string);
         }
     }
     $this->buildDependantRules($current_step, $question, $field);
     if ($question->UseChosenPlugin) {
         $field->addExtraClass('chosen');
         if (count($question->DependsOn()) === 0) {
             $field->addExtraClass('chosen-visible');
         }
         Requirements::customScript("jQuery(document).ready(function(\$){\n                            var form    = \$('.survey_step_form');\n                            var form_id = form.attr('id');\n                            \$('#'+form_id+'_{$question->name()}').chosen({width: '30%'});\n                        });\n                    ");
     }
     return $field;
 }
 /**
  * @param ISurveyQuestionTemplate $question
  * @param mixed $answer_value
  * @return ISurveyAnswer
  */
 public function buildAnswer(ISurveyQuestionTemplate $question, $answer_value)
 {
     $answer = new SurveyAnswer();
     if (is_array($answer_value)) {
         $answer_value = str_replace('{comma}', ',', $answer_value);
         $answer->Value = implode(',', $answer_value);
     } else {
         $answer->Value = $answer_value;
     }
     $answer->QuestionID = $question->getIdentifier();
     return $answer;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $field = new SurveyRadioButtonMatrixField($question->name(), $question->label(), $question);
     if (!is_null($answer)) {
         $field->setAnswer($answer);
     }
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setValidationAttribute('data-rule-radio_button_matrix_required', $field->name);
         $field->setValidationAttribute('data-msg-radio_button_matrix_required', sprintf('you must select at least one item (%s)', $question->name()));
     }
     $this->buildDependantRules($current_step, $question, $field);
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $field = new TextField($question->name(), $question->label());
     $field->setValue($question->initialValue());
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setAttribute('data-rule-required', 'true');
     }
     if (!is_null($answer)) {
         $field->setValue($answer->value());
     }
     $this->buildDependantRules($current_step, $question, $field);
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $options = array();
     foreach ($question->Values()->sort('Order') as $val) {
         $options[$val->ID] = empty($val->Label) ? $val->Value : $val->Label;
     }
     $field = new SurveyRankingField($question->name(), $question->label(), $options, $value = '', $form = null, $emptyString = null, $question);
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setValidationAttribute('data-rule-ranking_required', $field->ID());
         $field->setValidationAttribute('data-msg-ranking_required', sprintf('you must select at least one item (%s)', $question->name()));
     }
     if (!is_null($answer)) {
         $field->setValue($answer->value());
     }
     $this->buildDependantRules($current_step, $question, $field);
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $options = array();
     foreach ($question->Values()->sort('Order') as $val) {
         $options[$val->ID] = empty($val->Label) ? $val->Value : $val->Label;
     }
     $field = new SurveyCheckboxSetField($question->name(), $question->label(), $options, $value = '', $form = null, $emptyString = null, $question);
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setRequired();
     }
     if (!is_null($answer)) {
         $field->setValue($answer->value());
     }
     $this->buildDependantRules($current_step, $question, $field);
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $options = array();
     foreach ($question->Values()->sort('Order') as $val) {
         $options[$val->ID] = empty($val->Label) ? $val->Value : $val->Label;
     }
     $field = new OptionSetField($question->name(), $question->label(), $options);
     $default_value = $question->getDefaultValue();
     if (!is_null($default_value) && $default_value->ID > 0) {
         $field->setValue($default_value->ID);
     }
     if ($question->isReadOnly()) {
         $field->setDisabled(true);
     }
     if ($question->isMandatory()) {
         $field->setAttribute('data-rule-required', 'true');
     }
     if (!is_null($answer)) {
         $field->setValue($answer->value());
     }
     $this->buildDependantRules($current_step, $question, $field);
     return $field;
 }
Example #10
0
 /**
  * @param ISurveyQuestionTemplate $question
  * @return ISurveyAnswer
  */
 public function findAnswerByQuestion(ISurveyQuestionTemplate $question)
 {
     foreach ($this->getSteps() as $step) {
         if ($step instanceof SurveyRegularStep) {
             $answer = $step->getAnswerByTemplateId($question->getIdentifier());
             if (!is_null($answer)) {
                 return $answer;
             }
         }
     }
     return null;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param ISurveyAnswer $answer
  * @return FormField
  */
 public function build(ISurveyStep $current_step, ISurveyQuestionTemplate $question, ISurveyAnswer $answer)
 {
     $field = new LiteralField($question->name(), $question->Content);
     return $field;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param array $js_rules
  * @param FormField $field
  */
 public function apply(ISurveyStep $current_step, ISurveyQuestionTemplate $question, array $js_rules, FormField $field)
 {
     if (count($js_rules)) {
         $js = "jQuery(document).ready(function(\$){\n\n                    var form                = \$('.survey_step_form');\n                    var form_id             = form.attr('id');\n                    var clickable_fields    = [];\n                    var selectable_fields   = [];\n                    var rankable_fields     = [];\n                    var double_table_fields = [];\n                    ";
         //hide and set js rule
         $field->addExtraClass('hidden');
         $question_id = $question->name();
         foreach ($js_rules as $id => $info) {
             $d = $info['question'];
             $values = $info['values'];
             $operator = $info['operator'];
             $visibility = $info['visibility'];
             if ($d instanceof ISurveyClickableQuestion || $d instanceof ISurveyRankableQuestion || $d instanceof IDoubleEntryTableQuestionTemplate) {
                 foreach ($values as $value) {
                     $option_id = $d->name();
                     if ($d instanceof ISurveyClickableQuestion) {
                         if ($d instanceof IMultiValueQuestionTemplate && intval($value) > 0) {
                             //$value = $d->getValueById(intval($d->ValueID));
                             $option_id .= '_' . str_replace(' ', '', intval($value));
                         }
                         $js .= " clickable_fields.push(\$('#'+form_id+'_{$option_id}'));";
                     }
                     if ($d instanceof ISurveyRankableQuestion) {
                         if ($d instanceof IMultiValueQuestionTemplate && intval($value) > 0) {
                             if ($d instanceof IMultiValueQuestionTemplate && intval($value) > 0) {
                                 //$value = $d->getValueById(intval($d->ValueID));
                                 $option_id .= '_' . str_replace(' ', '', intval($value));
                             }
                             $js .= " rankable_fields.push( \$('#'+form_id+'_{$option_id}') );";
                         }
                     }
                     if ($d instanceof IDoubleEntryTableQuestionTemplate) {
                         $js .= " double_table_fields.push({table : \$('#'+'{$option_id}'), value: {$value} });";
                     }
                 }
             }
             if ($d instanceof ISurveySelectableQuestion && $d instanceof IMultiValueQuestionTemplate) {
                 $option_id = $d->name();
                 $values = implode(',', $values);
                 $js .= " selectable_fields.push({ddl : \$('#'+form_id+'_{$option_id}'), values: [{$values}] });";
             }
         }
         $js .= "for(var i = 0 ; i < selectable_fields.length; i++ ){\n                form.survey_validation_rules('addRequiredAnswer4SelectAbleGroup', selectable_fields, \$('#{$question_id}'));\n                }";
         $js .= "if(clickable_fields.length > 0 )\n                form.survey_validation_rules('addRequiredAnswer4CheckAbleGroup', clickable_fields, \$('#{$question_id}') ); ";
         $js .= "if(rankable_fields.length > 0 )\n                form.survey_validation_rules('addRequiredAnswer4RankAbleGroup', rankable_fields, \$('#{$question_id}') );";
         $js .= "if(double_table_fields.length > 0 )\n                form.survey_validation_rules('addRequiredAnswer4TableGroup', double_table_fields, \$('#{$question_id}') );\n                });";
         Requirements::customScript($js);
     }
 }