diff options
author | dartcafe <github@dartcafe.de> | 2020-06-17 09:34:35 +0300 |
---|---|---|
committer | dartcafe <github@dartcafe.de> | 2020-06-17 09:34:35 +0300 |
commit | b1c1a707d1b5523868d992b96a4ccddd1086ef2b (patch) | |
tree | c96cf74705b90ba8bb707f63d7a4c5daa9b22e0b /lib/Controller | |
parent | 076f8b3785f5728d7e61e5b9ac1233bda7e9fe3d (diff) |
Added vote to API
Diffstat (limited to 'lib/Controller')
-rw-r--r-- | lib/Controller/PollController.php | 77 | ||||
-rw-r--r-- | lib/Controller/VoteApiController.php | 126 | ||||
-rw-r--r-- | lib/Controller/VoteController.php | 142 |
3 files changed, 168 insertions, 177 deletions
diff --git a/lib/Controller/PollController.php b/lib/Controller/PollController.php index 9a7aa0d9..6bf98137 100644 --- a/lib/Controller/PollController.php +++ b/lib/Controller/PollController.php @@ -28,29 +28,22 @@ use OCP\IRequest; use OCP\ILogger; - use OCP\IL10N; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; - use OCP\IGroupManager; use OCP\IUser; - use OCP\IUserManager; use OCP\Security\ISecureRandom; use OCA\Polls\Db\Poll; use OCA\Polls\Db\PollMapper; use OCA\Polls\Db\Option; use OCA\Polls\Db\OptionMapper; - use OCA\Polls\Db\Share; - use OCA\Polls\Db\ShareMapper; - use OCA\Polls\Db\Vote; - use OCA\Polls\Db\VoteMapper; - use OCA\Polls\Service\AnonymizeService; use OCA\Polls\Service\CommentService; use OCA\Polls\Service\OptionService; + use OCA\Polls\Service\ShareService; + use OCA\Polls\Service\VoteService; use OCA\Polls\Service\LogService; - use OCA\Polls\Service\MailService; use OCA\Polls\Model\Acl; class PollController extends Controller { @@ -58,18 +51,13 @@ private $userId; private $pollMapper; private $optionMapper; - private $shareMapper; - private $voteMapper; - private $trans; private $logger; - private $groupManager; - private $userManager; private $poll; - private $anonymizer; private $logService; private $commentService; private $optionService; - private $mailService; + private $shareService; + private $voteService; private $acl; /** @@ -78,16 +66,13 @@ * @param $userId * @param IRequest $request * @param ILogger $logger - * @param IL10N $trans * @param OptionMapper $optionMapper * @param PollMapper $pollMapper - * @param IGroupManager $groupManager - * @param IUserManager $userManager * @param LogService $logService - * @param MailService $mailService - * @param AnonymizeService $anonymizer * @param CommentService $commentService * @param OptionService $optionService + * @param ShareService $shareService + * @param VoteService $voteService * @param Acl $acl */ @@ -96,37 +81,27 @@ $userId, IRequest $request, ILogger $logger, - IL10N $trans, OptionMapper $optionMapper, PollMapper $pollMapper, - ShareMapper $shareMapper, - VoteMapper $voteMapper, Poll $poll, - IGroupManager $groupManager, - IUserManager $userManager, LogService $logService, - MailService $mailService, CommentService $commentService, OptionService $optionService, - AnonymizeService $anonymizer, + ShareService $shareService, + VoteService $voteService, Acl $acl ) { parent::__construct($appName, $request); $this->userId = $userId; - $this->trans = $trans; $this->pollMapper = $pollMapper; $this->optionMapper = $optionMapper; - $this->shareMapper = $shareMapper; - $this->voteMapper = $voteMapper; $this->logger = $logger; - $this->groupManager = $groupManager; - $this->userManager = $userManager; $this->poll = $poll; $this->logService = $logService; - $this->mailService = $mailService; $this->commentService = $commentService; $this->optionService = $optionService; - $this->anonymizer = $anonymizer; + $this->shareService = $shareService; + $this->voteService = $voteService; $this->acl = $acl; } @@ -185,34 +160,13 @@ return new DataResponse(null, Http::STATUS_UNAUTHORIZED); } - $options = $this->optionMapper->findByPoll($pollId); - - if ($this->acl->getAllowEdit()) { - $shares = $this->shareMapper->findByPoll($pollId); - } else { - $shares = []; - } - - if ($this->acl->getAllowSeeUsernames()) { - - if ($this->acl->getAllowSeeResults()) { - $votes = $this->voteMapper->findByPoll($pollId); - } else { - $votes = $this->voteMapper->findByPollAndUser($pollId, $this->acl->getUserId()); - } - } else { - $this->anonymizer->set($pollId, $this->acl->getUserId()); - $votes = $this->anonymizer->getVotes(); - - } - return new DataResponse([ 'acl' => $this->acl, + 'poll' => $this->poll, 'comments' => $this->commentService->list($pollId), 'options' => $this->optionService->list($pollId), - 'poll' => $this->poll, - 'shares' => $shares, - 'votes' => $votes + 'shares' => $this->shareService->list($pollId), + 'votes' => $this->voteService->list($pollId) ], Http::STATUS_OK); } catch (DoesNotExistException $e) { @@ -355,11 +309,6 @@ $this->logService->setLog($this->poll->getId(), 'addPoll'); } return $this->get($this->poll->getId()); - // $this->acl->setPollId($this->poll->getId()); - // return new DataResponse([ - // 'poll' => $this->poll, - // 'acl' => $this->acl - // ], Http::STATUS_OK); } } diff --git a/lib/Controller/VoteApiController.php b/lib/Controller/VoteApiController.php new file mode 100644 index 00000000..71c42966 --- /dev/null +++ b/lib/Controller/VoteApiController.php @@ -0,0 +1,126 @@ +<?php +/** + * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com> + * + * @author René Gieling <github@dartcafe.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCA\Polls\Controller; + +use Exception; +use OCP\AppFramework\Db\DoesNotExistException; + +use OCP\IRequest; +use OCP\ILogger; +use OCP\AppFramework\ApiController; +use OCP\AppFramework\Http; +use OCP\AppFramework\Http\DataResponse; + +use OCA\Polls\Service\VoteService; + +class VoteApiController extends ApiController { + + private $logger; + private $voteService; + + /** + * VoteController constructor. + * @param string $appName + * @param IRequest $request + * @param ILogger $logger + * @param VoteService $voteService + */ + public function __construct( + string $appName, + IRequest $request, + ILogger $logger, + VoteService $voteService + ) { + parent::__construct($appName, + $request, + 'PUT, GET, DELETE', + 'Authorization, Content-Type, Accept', + 1728000); + $this->voteService = $voteService; + $this->logger = $logger; + } + + /** + * Get all votes of given poll + * Read all votes of a poll based on the poll id and return list as array + * @NoAdminRequired + * @NoCSRFRequired + * @CORS + * @param integer $pollId + * @return DataResponse + */ + public function list($pollId) { + try { + return new DataResponse($this->voteService->list($pollId), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); + } catch (DoesNotExistException $e) { + return new DataResponse('No votes', Http::STATUS_NOT_FOUND); + } + } + + /** + * set + * @NoAdminRequired + * @NoCSRFRequired + * @CORS + * @param integer $pollId + * @param Array $option + * @param string $userId + * @param string $setTo + * @return DataResponse + */ + public function set($pollId, $pollOptionText, $setTo) { + try { + return new DataResponse($this->voteService->set($pollId, $pollOptionText, $setTo), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); + } catch (DoesNotExistException $e) { + return new DataResponse('Option not found', Http::STATUS_NOT_FOUND); + } + + } + + + /** + * delete + * @NoAdminRequired + * @NoCSRFRequired + * @CORS + * @param integer $voteId + * @param string $userId + * @param integer $pollId + * @return DataResponse + */ + public function delete($pollId, $userId) { + try { + return new DataResponse($this->voteService->delete($userId, $pollId), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); + } catch (DoesNotExistException $e) { + return new DataResponse('', Http::STATUS_NOT_FOUND); + } + } + +} diff --git a/lib/Controller/VoteController.php b/lib/Controller/VoteController.php index ad8936bd..7205c14f 100644 --- a/lib/Controller/VoteController.php +++ b/lib/Controller/VoteController.php @@ -23,77 +23,36 @@ namespace OCA\Polls\Controller; -use Exception; +// use Exception; use OCP\AppFramework\Db\DoesNotExistException; - use OCP\IRequest; -use OCP\ILogger; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; -use OCP\IGroupManager; +use OCA\Polls\Service\VoteService; -use OCA\Polls\Db\Poll; -use OCA\Polls\Db\PollMapper; -use OCA\Polls\Db\Vote; -use OCA\Polls\Db\VoteMapper; -use OCA\Polls\Db\Share; -use OCA\Polls\Db\ShareMapper; -use OCA\Polls\Service\AnonymizeService; -use OCA\Polls\Service\LogService; -use OCA\Polls\Model\Acl; class VoteController extends Controller { - private $userId; - private $logger; - private $mapper; - private $groupManager; - private $pollMapper; - private $shareMapper; - private $anonymizer; - private $logService; - private $acl; + private $voteService; /** * VoteController constructor. * @param string $appName - * @param $userId * @param IRequest $request * @param ILogger $logger - * @param VoteMapper $mapper - * @param IGroupManager $groupManager - * @param PollMapper $pollMapper - * @param ShareMapper $shareMapper - * @param AnonymizeService $anonymizer - * @param LogService $logService - * @param Acl $acl + * @param VoteService $voteService + */ public function __construct( string $appName, - $UserId, IRequest $request, - ILogger $logger, - VoteMapper $mapper, - IGroupManager $groupManager, - PollMapper $pollMapper, - ShareMapper $shareMapper, - AnonymizeService $anonymizer, - LogService $logService, - Acl $acl + VoteService $voteService ) { parent::__construct($appName, $request); - $this->userId = $UserId; - $this->mapper = $mapper; - $this->logger = $logger; - $this->groupManager = $groupManager; - $this->pollMapper = $pollMapper; - $this->shareMapper = $shareMapper; - $this->anonymizer = $anonymizer; - $this->logService = $logService; - $this->acl = $acl; + $this->voteService = $voteService; } /** @@ -105,26 +64,13 @@ class VoteController extends Controller { * @return DataResponse */ public function get($pollId) { - try { - - if (!$this->acl->getFoundByToken()) { - $this->acl->setPollId($pollId); - } - - if (!$this->acl->getAllowSeeResults()) { - return new DataResponse((array) $this->mapper->findByPollAndUser($pollId, $this->acl->getUserId()), Http::STATUS_OK); - } elseif (!$this->acl->getAllowSeeUsernames()) { - $this->anonymizer->set($pollId, $this->acl->getUserId()); - return new DataResponse((array) $this->anonymizer->getVotes(), Http::STATUS_OK); - } else { - return new DataResponse((array) $this->mapper->findByPoll($pollId), Http::STATUS_OK); - } - + return new DataResponse($this->voteService->list($pollId), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); } catch (DoesNotExistException $e) { - return new DataResponse($e, Http::STATUS_NOT_FOUND); + return new DataResponse('No votes', Http::STATUS_NOT_FOUND); } - } /** @@ -137,28 +83,13 @@ class VoteController extends Controller { * @param string $setTo * @return DataResponse */ - public function set($pollId, $option, $userId, $setTo) { - + public function set($pollId, $option, $setTo) { try { - $vote = $this->mapper->findSingleVote($pollId, $option['pollOptionText'], $userId); - $vote->setVoteAnswer($setTo); - $this->mapper->update($vote); - + return new DataResponse($this->voteService->set($pollId, $option['pollOptionText'], $setTo), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); } catch (DoesNotExistException $e) { - // Vote does not exist, insert as new Vote - $vote = new Vote(); - - $vote->setPollId($pollId); - $vote->setUserId($userId); - $vote->setVoteOptionText($option['pollOptionText']); - $vote->setVoteOptionId($option['id']); - $vote->setVoteAnswer($setTo); - - $this->mapper->insert($vote); - - } finally { - $this->logService->setLog($vote->getPollId(), 'setVote', $vote->getUserId()); - return new DataResponse($vote, Http::STATUS_OK); + return new DataResponse('Option not found', Http::STATUS_NOT_FOUND); } } @@ -172,27 +103,13 @@ class VoteController extends Controller { * @param integer $pollId * @return DataResponse */ - public function delete($voteId = 0, $userId = '', $pollId = 0) { - $this->logger->alert('Deleting vote no. ' . $voteId); - + public function delete($userId, $pollId) { try { - if ($voteId) { - $vote = $this->mapper->delete($voteId); - $this->logger->alert('Deleting vote no. ' . $voteId); - return new DataResponse(null, Http::STATUS_OK); - } elseif ($pollId && $userId) { - $votes = $this->mapper->deleteByPollAndUser($pollId, $userId); - $this->logger->alert('Deleting votes from ' . $userId . ' in poll ' . $pollId); - return new DataResponse(null, Http::STATUS_OK); - } elseif ($pollId) { - $votes = $this->mapper->deleteByPoll($pollId); - $this->logger->alert('Deleting all votes in poll ' . $pollId); - return new DataResponse(null, Http::STATUS_OK); - } else { - return DataResponse(null, Http::STATUS_NOT_FOUND); - } + return new DataResponse($this->voteService->delete($pollId, $userId), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); } catch (DoesNotExistException $e) { - return DataResponse(null, Http::STATUS_NOT_FOUND); + return new DataResponse('', Http::STATUS_NOT_FOUND); } } @@ -212,13 +129,13 @@ class VoteController extends Controller { */ public function setByToken($option, $setTo, $token) { try { - $this->acl->setToken($token); + return new DataResponse($this->voteService->set(null, $option['pollOptionText'], $setTo, $token), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); } catch (DoesNotExistException $e) { - return new DataResponse($e, Http::STATUS_NOT_FOUND); + return new DataResponse('Option not found', Http::STATUS_NOT_FOUND); } - return $this->set($this->acl->getPollId(), $option, $this->acl->getUserId(), $setTo); - } /** @@ -231,15 +148,14 @@ class VoteController extends Controller { * @return DataResponse */ public function getByToken($token) { - try { - $this->acl->setToken($token); + return new DataResponse($this->voteService->list(null, $token), Http::STATUS_OK); + } catch (NotAuthorizedException $e) { + return new DataResponse('Unauthorized', Http::STATUS_FORBIDDEN); } catch (DoesNotExistException $e) { - return new DataResponse($e, Http::STATUS_NOT_FOUND); + return new DataResponse('No votes', Http::STATUS_NOT_FOUND); } - return $this->get($this->acl->getPollId()); - } } |