From b9c723d07910742e7f5ee5f9c6f0550df7e0741e Mon Sep 17 00:00:00 2001 From: AdrienClairembault Date: Tue, 1 Oct 2024 09:02:56 +0200 Subject: [PATCH] Simplify question management --- src/Glpi/Form/DefaultFormsManager.php | 87 +++++++++++++-------------- src/Glpi/Form/Form.php | 10 --- 2 files changed, 42 insertions(+), 55 deletions(-) diff --git a/src/Glpi/Form/DefaultFormsManager.php b/src/Glpi/Form/DefaultFormsManager.php index 37b65399222..6042ab25bd6 100644 --- a/src/Glpi/Form/DefaultFormsManager.php +++ b/src/Glpi/Form/DefaultFormsManager.php @@ -85,23 +85,25 @@ private function createIncidentForm(): void icon: 'ti ti-exclamation-circle', ); + // Get first section + $sections = $form->getSections(); + $section = array_pop($sections); + // Add questions - $this->setQuestions($form, [ - $this->getUrgencyQuestionData(), - $this->getCategoryQuestionData(), - // TODO: associated items (not possible yet) - $this->getWatchersQuestionData(), - $this->getLocationQuestionData(), - $this->getTitleQuestionData(), - $this->getDescriptionQuestionData(), - ]); + $this->addQuestion($section, $this->getUrgencyQuestionData()); + $this->addQuestion($section, $this->getCategoryQuestionData()); + // TODO: associated items (not possible yet) + $this->addQuestion($section, $this->getWatchersQuestionData()); + $this->addQuestion($section, $this->getLocationQuestionData()); + $title_question = $this->addQuestion($section, $this->getTitleQuestionData()); + $description_question = $this->addQuestion($section, $this->getDescriptionQuestionData()); // Find title and description question tags, needed to configure the created ticket $title_tag = $this->answer_tag_provider->getTagForQuestion( - $form->getNthQuestion(4) + $title_question ); $description_tag = $this->answer_tag_provider->getTagForQuestion( - $form->getNthQuestion(5) + $description_question ); // Prepare ticket destination config @@ -139,23 +141,25 @@ private function createRequestForm(): void icon: 'ti ti-devices-up', ); + // Get first section + $sections = $form->getSections(); + $section = array_pop($sections); + // Add questions - $this->setQuestions($form, [ - $this->getUrgencyQuestionData(), - $this->getCategoryQuestionData(), - // TODO: associated items (not possible yet) - $this->getWatchersQuestionData(), - $this->getLocationQuestionData(), - $this->getTitleQuestionData(), - $this->getDescriptionQuestionData(), - ]); + $this->addQuestion($section, $this->getUrgencyQuestionData()); + $this->addQuestion($section, $this->getCategoryQuestionData()); + // TODO: associated items (not possible yet) + $this->addQuestion($section, $this->getWatchersQuestionData()); + $this->addQuestion($section, $this->getLocationQuestionData()); + $title_question = $this->addQuestion($section, $this->getTitleQuestionData()); + $description_question = $this->addQuestion($section, $this->getDescriptionQuestionData()); // Find title and description question tags, needed to configure the created ticket $title_tag = $this->answer_tag_provider->getTagForQuestion( - $form->getNthQuestion(4) + $title_question ); $description_tag = $this->answer_tag_provider->getTagForQuestion( - $form->getNthQuestion(5) + $description_question ); // Prepare ticket destination config @@ -210,33 +214,26 @@ private function createForm( return $form; } - private function setQuestions( - Form $form, - array $questions_data, - ): void { - // Get last form section - $sections = $form->getSections(); - if (count($sections) === 0) { + private function addQuestion( + Section $section, + array $question_data, + ): Question { + // Refresh data + $section->getFromDB($section->getID()); + + // Set common values + $question_data['rank'] = count($section->getQuestions()); + $question_data[Section::getForeignKeyField()] = $section->getID(); + + // Create question + $question = new Question(); + if (!$question->add($question_data)) { throw new \RuntimeException( - "Trying to add questions in a form without a section" + "Failed to create question: " . json_encode($question_data) ); } - $section = array_pop($sections); - $rank = 0; - foreach ($questions_data as $question_data) { - // Set common values - $question_data['rank'] = $rank++; - $question_data[Section::getForeignKeyField()] = $section->getID(); - - // Create question - $question = new Question(); - if (!$question->add($question_data)) { - throw new \RuntimeException( - "Failed to create question: " . json_encode($question_data) - ); - } - } + return $question; } private function getTitleQuestionData(): array diff --git a/src/Glpi/Form/Form.php b/src/Glpi/Form/Form.php index 4f2aa326eb4..50eec2600a9 100644 --- a/src/Glpi/Form/Form.php +++ b/src/Glpi/Form/Form.php @@ -357,16 +357,6 @@ public function getQuestions(): array return $questions; } - /** - * Get Nth question of this form (0-indexed) - */ - public function getNthQuestion(int $n): ?Question - { - $questions = $this->getQuestions(); - $questions = array_values($questions); - return $questions[$n] ?? null; - } - /** * Get all comments for this form *