Skip to content

Commit

Permalink
Merge pull request #1167 from nextcloud/cleanup_questiontypes
Browse files Browse the repository at this point in the history
Cleanup Question-/AnswerTypes
  • Loading branch information
Chartman123 authored Apr 12, 2022
2 parents 2ccdbe1 + 384751b commit dfb78cc
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 18 deletions.
30 changes: 27 additions & 3 deletions lib/Constants.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,36 @@ class Constants {
public const ANSWER_TYPE_DATETIME = 'datetime';
public const ANSWER_TYPE_TIME = 'time';

// All AnswerTypes
public const ANSWER_TYPES = [
self::ANSWER_TYPE_MULTIPLE,
self::ANSWER_TYPE_MULTIPLEUNIQUE,
self::ANSWER_TYPE_DROPDOWN,
self::ANSWER_TYPE_SHORT,
self::ANSWER_TYPE_LONG,
self::ANSWER_TYPE_DATE,
self::ANSWER_TYPE_DATETIME,
self::ANSWER_TYPE_TIME
];

// AnswerTypes, that need/have predefined Options
public const ANSWER_PREDEFINED = [self::ANSWER_TYPE_MULTIPLE, self::ANSWER_TYPE_MULTIPLEUNIQUE, self::ANSWER_TYPE_DROPDOWN];
public const ANSWER_TYPES_PREDEFINED = [
self::ANSWER_TYPE_MULTIPLE,
self::ANSWER_TYPE_MULTIPLEUNIQUE,
self::ANSWER_TYPE_DROPDOWN
];

// AnswerTypes for date/time questions
public const ANSWER_DATETIME = [self::ANSWER_TYPE_DATE, self::ANSWER_TYPE_DATETIME, self::ANSWER_TYPE_TIME];
public const ANSWER_TYPES_DATETIME = [
self::ANSWER_TYPE_DATE,
self::ANSWER_TYPE_DATETIME,
self::ANSWER_TYPE_TIME
];

// Formats for AnswerTypes date/datetime/time
public const ANSWER_PHPDATETIME_FORMAT = [self::ANSWER_TYPE_DATE => 'Y-m-d', self::ANSWER_TYPE_DATETIME => 'Y-m-d H:i', self::ANSWER_TYPE_TIME => 'H:i'];
public const ANSWER_PHPDATETIME_FORMAT = [
self::ANSWER_TYPE_DATE => 'Y-m-d',
self::ANSWER_TYPE_DATETIME => 'Y-m-d H:i',
self::ANSWER_TYPE_TIME => 'H:i'
];
}
4 changes: 2 additions & 2 deletions lib/Controller/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ public function newQuestion(int $formId, string $type, string $text = ''): DataR
'text' => $text,
]);

if (array_search($type, Question::TYPES) === false) {
if (array_search($type, Constants::ANSWER_TYPES) === false) {
$this->logger->debug('Invalid type');
throw new OCSBadRequestException('Invalid type');
}
Expand Down Expand Up @@ -1013,7 +1013,7 @@ public function insertSubmission(int $formId, array $answers): DataResponse {

foreach ($answerArray as $answer) {
// Are we using answer ids as values
if (in_array($question['type'], Constants::ANSWER_PREDEFINED)) {
if (in_array($question['type'], Constants::ANSWER_TYPES_PREDEFINED)) {
// Search corresponding option, skip processing if not found
$optionIndex = array_search($answer, array_column($question['options'], 'id'));
if ($optionIndex === false) {
Expand Down
11 changes: 0 additions & 11 deletions lib/Db/Question.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,6 @@ class Question extends Entity {
protected $isRequired;
protected $text;

public const TYPES = [
'short',
'long',
'multiple',
'multiple_unique',
'dropdown',
'date',
'datetime',
'time',
];

public function __construct() {
$this->addType('formId', 'integer');
$this->addType('order', 'integer');
Expand Down
4 changes: 2 additions & 2 deletions lib/Service/SubmissionService.php
Original file line number Diff line number Diff line change
Expand Up @@ -272,13 +272,13 @@ public function validateSubmission(array $questions, array $answers): bool {
* Check if date questions have valid answers
* $answers[$questionId][0] -> date/time questions can only have one answer
*/
if (in_array($question['type'], Constants::ANSWER_DATETIME) &&
if (in_array($question['type'], Constants::ANSWER_TYPES_DATETIME) &&
!$this->validateDateTime($answers[$questionId][0], Constants::ANSWER_PHPDATETIME_FORMAT[$question['type']])) {
return false;
}

// Check if all answers are within the possible options
if (in_array($question['type'], Constants::ANSWER_PREDEFINED)) {
if (in_array($question['type'], Constants::ANSWER_TYPES_PREDEFINED)) {
foreach ($answers[$questionId] as $answer) {
// Search corresponding option, return false if non-existent
if (array_search($answer, array_column($question['options'], 'id')) === false) {
Expand Down

0 comments on commit dfb78cc

Please sign in to comment.