From 07cc9194344d5b7ec69c1a60bfed5a82dad2e90d Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Sat, 28 Mar 2020 11:16:14 +0100 Subject: [PATCH] Fix displaying of result info again Signed-off-by: Roeland Jago Douma --- appinfo/routes.php | 2 +- lib/Controller/ApiController.php | 56 ++++++++++++++------------------ lib/Db/VoteMapper.php | 5 ++- src/views/Results.vue | 3 +- 4 files changed, 29 insertions(+), 37 deletions(-) diff --git a/appinfo/routes.php b/appinfo/routes.php index c7d09c6..8c77aed 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -40,7 +40,6 @@ return [ ['name' => 'api#write_form', 'url' => '/write/form', 'verb' => 'POST'], ['name' => 'api#get_form', 'url' => '/get/form/{formIdOrHash}', 'verb' => 'GET'], ['name' => 'api#get_options', 'url' => '/get/options/{formId}', 'verb' => 'GET'], - ['name' => 'api#get_votes', 'url' => '/get/votes/{formId}', 'verb' => 'GET'], ['name' => 'api#get_shares', 'url' => '/get/shares/{formId}', 'verb' => 'GET'], ['name' => 'api#get_event', 'url' => '/get/event/{formId}', 'verb' => 'GET'], ['name' => 'api#get_forms', 'url' => '/get/forms', 'verb' => 'GET'], @@ -51,6 +50,7 @@ return [ ['name' => 'api#deleteQuestion', 'url' => 'api/v1/question/{id}', 'verb' => 'DELETE'], ['name' => 'api#newAnswer', 'url' => 'api/v1/answer/', 'verb' => 'POST'], ['name' => 'api#deleteAnswer', 'url' => 'api/v1/answer/{id}', 'verb' => 'DELETE'], + ['name' => 'api#getSubmissions', 'url' => 'api/v1/submissions/{hash}', 'verb' => 'GET'], ['name' => 'system#get_site_users_and_groups', 'url' => '/get/siteusers', 'verb' => 'POST'], ] diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 55acc4a..1115987 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -204,37 +204,6 @@ class ApiController extends Controller { return $grantAccessAs; } - /** - * Read all votes of a form based on the form id - * @NoAdminRequired - * @param Integer $formId - * @return Array - */ - public function getVotes($formId) { - if (!\OC::$server->getUserSession()->getUser() instanceof IUser) { - $currentUser = ''; - } else { - $currentUser = \OC::$server->getUserSession()->getUser()->getUID(); - } - - $event = $this->getEvent($formId); - - $accessList = $this->convertAccessList($event['access']); - - if ($event['owner'] == $currentUser) { - $votesList = array(); - $votes = $this->voteMapper->findByForm($formId); - - foreach ($votes as $voteElement) { - $votesList[] = $voteElement->read(); - } - - return $votesList; - } - return NULL; -} - - /** * Read an entire form based on form id * @NoAdminRequired @@ -352,7 +321,6 @@ class ApiController extends Controller { 'grantedAs' => $this->grantAccessAs($event, $shares), 'mode' => $mode, 'event' => $event, - 'votes' => $this->getVotes($event['id']), 'shares' => $shares, 'options' => [ 'formQuizQuestions' => $this->getQuestions($event['id']) @@ -650,4 +618,28 @@ class ApiController extends Controller { //TODO useful response return new Http\JSONResponse($id); } + + /** + * @NoAdminRequired + */ + public function getSubmissions(string $hash): Http\JSONResponse { + try { + $form = $this->eventMapper->findByHash($hash); + } catch (IMapperException $e) { + return new Http\JSONResponse([], Http::STATUS_BAD_REQUEST); + } + + if ($form->getOwner() !== $this->userId) { + return new Http\JSONResponse([], Http::STATUS_FORBIDDEN); + } + + $votes = $this->voteMapper->findByForm($form->getId()); + + $result = []; + foreach ($votes as $vote) { + $result[] = $vote->read(); + } + + return new Http\JSONResponse($result); + } } diff --git a/lib/Db/VoteMapper.php b/lib/Db/VoteMapper.php index b534e0f..57cbaa7 100644 --- a/lib/Db/VoteMapper.php +++ b/lib/Db/VoteMapper.php @@ -41,9 +41,8 @@ class VoteMapper extends QBMapper { /** * @param int $formId * @throws \OCP\AppFramework\Db\DoesNotExistException if not found - * @return Comment[] + * @return Vote[] */ - public function findByForm(int $formId): array { $qb = $this->db->getQueryBuilder(); @@ -55,7 +54,7 @@ class VoteMapper extends QBMapper { return $this->findEntities($qb); } - + /** * @param int $formId * @throws \OCP\AppFramework\Db\DoesNotExistException if not found diff --git a/src/views/Results.vue b/src/views/Results.vue index bf85968..8f4303a 100644 --- a/src/views/Results.vue +++ b/src/views/Results.vue @@ -60,6 +60,7 @@ import json2csvParser from 'json2csv' import axios from '@nextcloud/axios' import LoadingOverlay from '../components/_base-LoadingOverlay' import ViewsMixin from '../mixins/ViewsMixin' +import { generateUrl } from '@nextcloud/router' import AppContent from '@nextcloud/vue/dist/Components/AppContent' export default { @@ -123,7 +124,7 @@ export default { methods: { loadForms() { this.loading = true - axios.get(OC.generateUrl('apps/forms/get/votes/' + this.$route.params.hash)) + axios.get(generateUrl('apps/forms/api/v1/submissions/{hash}', { hash: this.$route.params.hash })) .then((response) => { if (response.data == null) { this.votes = null