Merge pull request #257 from nextcloud/fix/results

Fix displaying of result info again
This commit is contained in:
Roeland Jago Douma 2020-03-29 10:03:13 +02:00 committed by GitHub
commit 01d9fc3cce
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 37 deletions

View file

@ -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'],
]

View file

@ -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);
}
}

View file

@ -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

View file

@ -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