Skip to content

Commit

Permalink
Simplify question management
Browse files Browse the repository at this point in the history
  • Loading branch information
AdrienClairembault committed Oct 1, 2024
1 parent 6debe92 commit b9c723d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 55 deletions.
87 changes: 42 additions & 45 deletions src/Glpi/Form/DefaultFormsManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
10 changes: 0 additions & 10 deletions src/Glpi/Form/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*
Expand Down

0 comments on commit b9c723d

Please sign in to comment.