aboutsummaryrefslogtreecommitdiff
path: root/app/routes/Feedback.php
diff options
context:
space:
mode:
authorPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
committerPhilipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de>2024-09-24 10:53:31 +0200
commit4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch)
tree5c07151ae61276d334e88f6309c30d439a85c12e /app/routes/Feedback.php
parentda0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff)
parent97a188592c679890a25c37ab78463add76a52ff7 (diff)
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'app/routes/Feedback.php')
-rw-r--r--app/routes/Feedback.php271
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}");
- }
-}