diff options
| author | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
|---|---|---|
| committer | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
| commit | 4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch) | |
| tree | 5c07151ae61276d334e88f6309c30d439a85c12e /app/routes/Feedback.php | |
| parent | da0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff) | |
| parent | 97a188592c679890a25c37ab78463add76a52ff7 (diff) | |
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'app/routes/Feedback.php')
| -rw-r--r-- | app/routes/Feedback.php | 271 |
1 files changed, 0 insertions, 271 deletions
diff --git a/app/routes/Feedback.php b/app/routes/Feedback.php deleted file mode 100644 index 9a28347..0000000 --- a/app/routes/Feedback.php +++ /dev/null @@ -1,271 +0,0 @@ -<?php - -namespace RESTAPI\Routes; - -/** - * @author Nils Gehrke <nils.gehrke@uni-goettingen.de> - * @deprecated Since Stud.IP 5.0. Will be removed in Stud.IP 6.0. - * - * @condition feedback_id ^\d*$ - * @condition course_id ^[a-f0-9]{32}$ - * - */ -class Feedback extends \RESTAPI\RouteMap -{ - /** - * Create feedback element for a range - * - * @post /feedback/range/:range_id/:range_type - * - */ - public function createFeedbackElement($range_id, $range_type) - { - $course_id = $range_type::find($range_id)->getRangeCourseId(); - if (!\Feedback::hasRangeAccess($range_id, $range_type) || !\Feedback::hasCreatePerm($course_id)) { - $this->error(403); - } - $feedback = \FeedbackElement::build([ - 'range_id' => $range_id, - 'range_type' => $range_type, - 'user_id' => $GLOBALS['user']->id, - 'course_id' => $course_id, - 'question' => $this->data['question'], - 'description' => $this->data['description'], - 'results_visible' => intval($this->data['results_visible']), - 'commentable' => intval($this->data['commentable']), - 'mode' => $this->data['mode'] - ]); - $feedback->store(); - return $feedback->toArray(); - } - - /** - * Get a feedback element - * - * @get /feedback/:feedback_id - * - */ - public function getFeedbackElement($feedback_id) - { - if (!$feedback = \FeedbackElement::find($feedback_id)) { - $this->error(404); - } - if (!\Feedback::hasRangeAccess($feedback->range_id, $feedback->range_type)) { - $this->error(403); - } - return $feedback->toArray(); - } - - - /** - * Get all entries of a feedback element - * - * @get /feedback/:feedback_id/entries - * - */ - public function getFeedbackEntries($feedback_id) - { - if (!$feedback = \FeedbackElement::find($feedback_id)) { - $this->error(404); - } - if (!\Feedback::hasRangeAccess($feedback->range_id, $feedback->range_type)) { - $this->error(403); - } - if ($feedback->results_visible == 1 && !$feedback->isFeedbackable()) { - foreach($feedback->entries as $entry) { - $result['entries'][] = $entry->toArray(); - } - } elseif (!$feedback->isFeedbackable()) { - $result['entries'][] = $feedback->getOwnEntry()->toArray(); - } else { - $result = []; - } - - return $result; - } - - /** - * Edit a feedback element - * - * @put /feedback/:feedback_id - * - */ - public function editFeedbackElement($feedback_id) - { - if (!$feedback = \FeedbackElement::find($feedback_id)) { - $this->error(404); - } - $course_id = $feedback->course_id; - if (!\Feedback::hasRangeAccess($feedback->range_id, $feedback->range_type) || !\Feedback::hasAdminPerm($course_id)) { - $this->error(403); - } - $feedback->question = $this->data['question'] !== null ? $this->data['question'] : $feedback->question; - $feedback->description = $this->data['description'] !== null ? $this->data['description'] : $feedback->description; - $feedback->results_visible = $this->data['results_visible'] !== null ? - intval($this->data['results_visible']) : $feedback->results_visible; - $feedback->store(); - return $feedback->toArray(); - } - - /** - * Delete a feedback element - * - * @delete /feedback/:feedback_id - * - */ - public function deleteFeedbackElement($feedback_id) - { - if (!$feedback = \FeedbackElement::find($feedback_id)) { - $this->error(404); - } - $course_id = $feedback->course_id; - if (!\Feedback::hasRangeAccess($feedback->range_id, $feedback->range_type) || !\Feedback::hasAdminPerm($course_id)) { - $this->error(403); - } - $feedback->delete(); - $this->halt(200); - } - - /** - * List all feedback elements for a range - * - * @get /feedback/range/:range_id/:range_type - * - * @param string $range_id - * @param string $range_type - */ - public function getFeedbackElementsForRange($range_id, $range_type) - { - if (!\Feedback::hasRangeAccess($range_id, $range_type)) { - $this->error(403, 'You may not access the given range object.'); - } - $feedback_elements = \FeedbackElement::findBySQL('range_id = ? AND range_type = ? ORDER BY mkdate DESC', [$range_id, $range_type]); - foreach($feedback_elements as $feedback) { - $result['feedback_elements'][] = $feedback->toArray(); - } - return $result; - } - - /** - * List all feedback elements of a course - * - * @get /course/:course_id/feedback - * - */ - public function getFeedbackElementsForCourse($course_id) - { - if (!\Feedback::hasAdminPerm($course_id)) { - $this->error(403, 'You may not list all feedback elements of the course. Only feedback admins can.'); - } - $feedback_elements = \FeedbackElement::findBySQL('course_id = ? ORDER BY mkdate DESC', [$course_id]); - foreach($feedback_elements as $feedback) { - $result['feedback_elements'][] = $feedback->toArray(); - } - return $result; - } - - /** - * add an entry for a feedback element - * - * @post /feedback/:feedback_id/entry - * - */ - public function addFeedbackEntry($feedback_id) - { - if (!$feedback = \FeedbackElement::find($feedback_id)) { - $this->error(404); - } - if (!$feedback->isFeedbackable()) { - $this->error(403, 'You may not add an entry here. Maybe you have already given feedback or you are the author of the feedback element.'); - } - $entry = \FeedbackEntry::build([ - 'feedback_id' => $feedback->id, - 'user_id' => $GLOBALS['user']->id - ]); - - $entry->rating = $this->getRating( - $feedback->mode, - (int) $this->data['rating'] - ); - - if ($feedback->commentable) { - $entry->comment = $this->data['comment']; - } - - $entry->store(); - return $entry->toArray(); - } - - /** - * edit an entry of a feedback element - * - * @put /feedback/entry/:entry_id - * - */ - public function editFeedbackEntry($entry_id) - { - $entry = \FeedbackEntry::find($entry_id); - - if (!$entry) { - $this->notFound(); - } - - if (!$entry->isEditable()) { - $this->error(403); - } - - $entry->rating = $this->getRating( - $entry->feedback->mode, - (int) $this->data['rating'] - ); - - if ($entry->feedback->commentable) { - $entry->comment = $this->data['comment'] ?? $entry->comment; - } - - $entry->store(); - return $entry->toArray(); - } - - /** - * delete an entry of a feedback element - * - * @delete /feedback/entry/:entry_id - * - */ - public function deleteFeedbackEntry($entry_id) - { - if (!$entry = \FeedbackEntry::find($entry_id)) { - $this->error(404); - } - if ($entry->delete()){ - $this->halt(200); - } - } - - /** - * @param int $mode - * @param int $rating - * @return int - */ - private function getRating(int $mode, int $rating): int - { - if ($mode === 0) { - return 0; - } - - if ($rating === 0) { - return 1; - } - - if ($mode === 1) { - return min(5, $rating); - } - - if ($mode === 2) { - return min(10, $rating); - } - - throw new \InvalidArgumentException("Invalid mode {$mode}"); - } -} |
