private function checkAnsweredQuestion(Question $question) { $questionId = $question->getId(); $answeredQuestions = $this->surveyManager->checkQuestionAnswersByQuestions([$question]); if (isset($answeredQuestions[$questionId]) && $answeredQuestions[$questionId]) { throw new AccessDeniedException(); } }
private function checkQuestionRight(Survey $survey, Question $question, $right) { $this->checkSurveyRight($survey, $right); $surveyWorkspaceId = $survey->getResourceNode()->getWorkspace()->getId(); $questionWorkspaceId = $question->getWorkspace()->getId(); if ($surveyWorkspaceId !== $questionWorkspaceId) { throw new AccessDeniedException(); } }
/** * @DI\Observe("copy_claroline_survey") * * @param CopyResourceEvent $event */ public function onCopy(CopyResourceEvent $event) { $workspace = $event->getParent()->getWorkspace(); $survey = $event->getResource(); $copy = new Survey(); $copy->setPublished($survey->isPublished()); $copy->setClosed($survey->isClosed()); $copy->setHasPublicResult($survey->getHasPublicResult()); $copy->setAllowAnswerEdition($survey->getAllowAnswerEdition()); $copy->setStartDate($survey->getStartDate()); $copy->setEndDate($survey->getEndDate()); $this->om->persist($copy); $relations = $survey->getQuestionRelations(); foreach ($relations as $relation) { $question = $relation->getQuestion(); $type = $question->getType(); $copyQuestion = new Question(); $copyQuestion->setTitle($question->getTitle()); $copyQuestion->setQuestion($question->getQuestion()); $copyQuestion->setWorkspace($workspace); $copyQuestion->setType($type); $copyQuestion->setCommentAllowed($question->isCommentAllowed()); $copyQuestion->setCommentLabel($question->getCommentLabel()); $this->om->persist($copyQuestion); switch ($type) { case 'multiple_choice_single': case 'multiple_choice_multiple': $multiChoiceQuestion = $this->surveyManager->getMultipleChoiceQuestionByQuestion($question); $choices = $multiChoiceQuestion->getChoices(); $copyMultiQuestion = new MultipleChoiceQuestion(); $copyMultiQuestion->setHorizontal($multiChoiceQuestion->getHorizontal()); $copyMultiQuestion->setQuestion($copyQuestion); foreach ($choices as $choice) { $copyChoice = new Choice(); $copyChoice->setContent($choice->getContent()); $copyChoice->setOther($choice->isOther()); $copyChoice->setChoiceQuestion($copyMultiQuestion); $this->om->persist($copyChoice); } $this->om->persist($copyMultiQuestion); break; case 'open-ended': default: break; } $copyRelation = new SurveyQuestionRelation(); $copyRelation->setSurvey($copy); $copyRelation->setQuestion($copyQuestion); $copyRelation->setQuestionOrder($relation->getQuestionOrder()); $this->om->persist($copyRelation); } $event->setCopy($copy); $event->stopPropagation(); }
public function createQuestionModel(Question $question) { $questionType = $question->getType(); $model = new QuestionModel(); $model->setTitle($question->getTitle()); $model->setQuestionType($questionType); $model->setWorkspace($question->getWorkspace()); $details = []; switch ($questionType) { case 'multiple_choice_single': case 'multiple_choice_multiple': $choiceQuestion = $this->getMultipleChoiceQuestionByQuestion($question); $details['questionType'] = $questionType; if ($question->isCommentAllowed()) { $details['withComment'] = 'comment'; $details['commentLabel'] = $question->getCommentLabel(); } else { $details['withComment'] = 'no-comment'; } $horizontal = !is_null($choiceQuestion) && $choiceQuestion->getHorizontal(); $details['choiceDisplay'] = $horizontal ? 'horizontal' : 'vertical'; $details['choices'] = []; if (!is_null($choiceQuestion)) { $choices = $this->getChoicesByQuestion($question); foreach ($choices as $choice) { $choiceDetails = []; $choiceDetails['other'] = $choice->isOther() ? 'other' : 'not-other'; $choiceDetails['content'] = $choice->getContent(); $details['choices'][] = $choiceDetails; } } break; case 'open_ended': case 'open_ended_bare': case 'simple_text': default: break; } $model->setDetails($details); $this->om->persist($model); $this->om->flush(); }