/**
  * @param ISurveyStep $step
  * @return null|ISurveyStepUIBuilder
  */
 public function build(ISurveyStep $step)
 {
     if ($step->template() instanceof ISurveyRegularStepTemplate) {
         if ($step->survey() instanceof IEntitySurvey) {
             return new EntitySurveyRegularStepTemplateUIBuilder();
         }
         return new SurveyRegularStepTemplateUIBuilder();
     }
     if ($step->template() instanceof ISurveyDynamicEntityStepTemplate) {
         return new SurveyDynamicEntityStepTemplateUIBuilder();
     }
     if ($step->template() instanceof ISurveyThankYouStepTemplate) {
         return new SurveySurveyThankYouStepTemplateUIBuilder();
     }
     return null;
 }
 /**
  * @param ISurveyStep $step
  * @param string $action
  * @param string $form_name
  * @return Form
  */
 public function build(ISurveyStep $step, $action, $form_name = 'SurveyStepForm')
 {
     $fields = new FieldList();
     $fields->add(new HiddenField('survey_id', 'survey_id', $step->survey()->getIdentifier()));
     $fields->add(new HiddenField('step_id', 'step_id', $step->getIdentifier()));
     $content = $step->template()->content();
     if (!empty($content)) {
         $fields->add(new LiteralField('content', $content));
     }
     if ($step->template()->canSkip()) {
         $fields->add(new LiteralField('skip', sprintf('<p><strong>If you do not wish to answer these questions, you may <a href="%s%s/skip-step">skip to the next section</a>.</strong></p>', Controller::curr()->Link(), $step->template()->title())));
     }
     if (!empty($content) || $step->template()->canSkip()) {
         $fields->add(new LiteralField('hr', '<hr/>'));
     }
     $validator = null;
     $actions = new FieldList(FormAction::create('AddEntity')->setTitle("Add")->setUseButtonTag(true), FormAction::create('Done')->setTitle("Done")->setUseButtonTag(true));
     $form = new DynamicStepForm(Controller::curr(), $form_name, $fields, $actions, $step, $validator);
     $form->setTemplate('DynamicEntityStepForm');
     $form->setAttribute('class', 'survey_step_form');
     return $form;
 }
示例#3
0
 /**
  * @param ISurveyStep $step
  * @return void
  */
 public function removeStep(ISurveyStep $step)
 {
     $step->clear();
     AssociationFactory::getInstance()->getOne2ManyAssociation($this, 'Steps')->remove($step);
 }
示例#4
0
 /**
  * @param IEntitySurvey $entity
  * @param ISurveyStep $next_step
  * @return SS_HTTPResponse
  */
 private function go2DynEntityStep(IEntitySurvey $entity, ISurveyStep $next_step)
 {
     $dyn_step_holder_title = $this->current_survey->currentStep()->template()->title();
     $next_step_title = $next_step->template()->title();
     return $this->redirect(sprintf('%s%s/edit/%s/%s', $this->Link(), $dyn_step_holder_title, $entity->getIdentifier(), $next_step_title));
 }
 /**
  * @param array $data
  * @param ISurveyStep $current_step
  * @return ISurveyStep
  */
 public function completeStep(ISurveyStep $current_step, array $data)
 {
     $template_repository = $this->template_repository;
     $survey_repository = $this->survey_repository;
     $survey_builder = $this->survey_builder;
     $member_repository = $this->member_repository;
     return $this->tx_manager->transaction(function () use($current_step, $data, $survey_builder, $member_repository, $template_repository, $survey_repository) {
         $current_survey = $current_step->survey();
         if ($current_step instanceof ISurveyRegularStep) {
             $current_step->clearAnswers();
             foreach ($current_step->template()->getQuestions() as $q) {
                 if (isset($data[$q->name()])) {
                     // its has an answer set
                     if ($q->name() === SurveyOrganizationQuestionTemplate::FieldName) {
                         //publish event
                         PublisherSubscriberManager::getInstance()->publish('survey_organization_selected', array($current_survey->createdBy(), $data[$q->name()]));
                     }
                     $current_step->addAnswer($survey_builder->buildAnswer($q, $data[$q->name()]));
                 }
             }
         }
         return $current_survey->completeCurrentStep();
     });
 }
 /**
  * @param ISurveyStep $step
  * @param string $action
  * @param string $form_name
  * @return Form
  */
 public function build(ISurveyStep $step, $action, $form_name = 'SurveyStepForm')
 {
     Requirements::customScript('jQuery(document).ready(function($) {
         var form = $(".survey_step_form");
         form.validate();
     });');
     $fields = new FieldList();
     $content = $step->template()->content();
     if (!empty($content)) {
         $fields->add(new LiteralField('content', $content));
     }
     if ($step->template()->canSkip() && !$step->survey()->isLastStep()) {
         $next_step_url = sprintf("%s%s/skip-step", Controller::curr()->Link(), $step->template()->title());
         if ($step->survey() instanceof EntitySurvey) {
             $dyn_step_holder = $step->survey()->owner()->template()->title();
             $id = $step->survey()->getIdentifier();
             $next_step_url = sprintf("%s%s/edit/%s/skip-step", Controller::curr()->Link(), $dyn_step_holder, $id);
         }
         $fields->add(new LiteralField('skip', sprintf('<p><strong>If you do not wish to answer these questions, you may <a href="%s">skip to the next section</a>.</strong></p>', $next_step_url)));
     }
     if (!empty($content) || $step->template()->canSkip()) {
         $fields->add(new LiteralField('hr', '<hr/>'));
     }
     foreach ($step->template()->getQuestions() as $q) {
         $type = $q->Type();
         $builder_class = $type . 'UIBuilder';
         // @ISurveyQuestionTemplateUIBuilder
         $builder = Injector::inst()->create($builder_class);
         $field = $builder->build($step, $q, $step->getAnswerByTemplateId($q->getIdentifier()));
         $fields->add($field);
     }
     $validator = null;
     $fields->add(new HiddenField('survey_id', 'survey_id', $step->survey()->getIdentifier()));
     $fields->add(new HiddenField('step_id', 'step_id', $step->getIdentifier()));
     $survey = $step->survey();
     $next_btn_title = 'Next';
     if ($survey->isLastStep()) {
         $next_btn_title = 'Done';
         if ($survey->template() instanceof IEntitySurveyTemplate) {
             $next_btn_title = 'Save ' . $survey->template()->getEntityName();
         }
     }
     $actions = new FieldList($default_action = FormAction::create($action)->setTitle($next_btn_title));
     $form = new RegularStepForm(Controller::curr(), $form_name, $fields, $actions, $step, $validator);
     $form->setDefaultAction($default_action);
     $form->setAttribute('class', 'survey_step_form');
     return $form;
 }
 /**
  * @param ISurveyStep $current_step
  * @param ISurveyQuestionTemplate $question
  * @param array $static_rules
  * @param FormField $field
  */
 public function apply(ISurveyStep $current_step, ISurveyQuestionTemplate $question, array $static_rules, FormField $field)
 {
     if (count($static_rules)) {
         foreach ($static_rules as $id => $info) {
             $q = $info['question'];
             $values = $info['values'];
             $operator = $info['operator'];
             $visibility = $info['visibility'];
             $default = $info['default'];
             $boolean_operator = $info['boolean_operator'];
             $initial_condition = $info['initial_condition'];
             $answer = $current_step->survey()->findAnswerByQuestion($q);
             if (is_null($answer)) {
                 continue;
             }
             //checks the condition
             switch ($operator) {
                 case 'Equal':
                     foreach ($values as $vid) {
                         if ($boolean_operator === 'And') {
                             $initial_condition &= strpos($answer->value(), $vid) !== false;
                         } else {
                             $initial_condition |= strpos($answer->value(), $vid) !== false;
                         }
                     }
                     break;
                 case 'Not-Equal':
                     foreach ($values as $vid) {
                         if ($boolean_operator === 'And') {
                             $initial_condition &= strpos($answer->value(), $vid) === false;
                         } else {
                             $initial_condition |= strpos($answer->value(), $vid) === false;
                         }
                     }
                     break;
             }
             //visibility
             switch ($visibility) {
                 case 'Visible':
                     if (!$initial_condition) {
                         $field->addExtraClass('hidden');
                         // if not visible clean it
                         $field->setValue('');
                     } else {
                         $field->removeExtraClass('hidden');
                     }
                     break;
                 case 'Not-Visible':
                     if ($initial_condition) {
                         $field->addExtraClass('hidden');
                         // if not visible clean it
                         $field->setValue('');
                     } else {
                         $field->removeExtraClass('hidden');
                     }
                     break;
             }
             // set the default value set on the rule
             if (!empty($default)) {
                 $field->setValue($default);
                 if ($question instanceof IMultiValueQuestionTemplate) {
                     $value_template = $question->getValueByValue($default);
                     if (!is_null($value_template)) {
                         $field->setValue($value_template->getIdentifier());
                     }
                 }
             }
         }
     }
 }