Version 1.0.3

This commit is contained in:
affan98 2019-05-14 03:03:59 -04:00
commit 1fce2a39fb
30 changed files with 174 additions and 1006 deletions

View file

@ -25,7 +25,6 @@ namespace OCA\Forms\AppInfo;
use OCA\Forms\Controller\PageController;
use OCA\Forms\Controller\ApiController;
use OCA\Forms\Db\CommentMapper;
use OCA\Forms\Db\OptionMapper;
use OCA\Forms\Db\EventMapper;
use OCA\Forms\Db\NotificationMapper;

View file

@ -41,12 +41,8 @@ use OCP\Security\ISecureRandom;
use OCA\Forms\Db\Event;
use OCA\Forms\Db\EventMapper;
use OCA\Forms\Db\Option;
use OCA\Forms\Db\OptionMapper;
use OCA\Forms\Db\Vote;
use OCA\Forms\Db\VoteMapper;
use OCA\Forms\Db\Comment;
use OCA\Forms\Db\CommentMapper;
use OCA\Forms\Db\Notification;
use OCA\Forms\Db\NotificationMapper;
@ -62,9 +58,7 @@ class ApiController extends Controller {
private $groupManager;
private $userManager;
private $eventMapper;
private $optionMapper;
private $voteMapper;
private $commentMapper;
private $questionMapper;
private $answerMapper;
@ -76,9 +70,7 @@ class ApiController extends Controller {
* @param IUserManager $userManager
* @param string $userId
* @param EventMapper $eventMapper
* @param OptionMapper $optionMapper
* @param VoteMapper $voteMapper
* @param CommentMapper $commentMapper
* @param QuestionMapper $questionMapper
* @param AnswerMapper $answerMapper
*/
@ -89,9 +81,7 @@ class ApiController extends Controller {
IUserManager $userManager,
$userId,
EventMapper $eventMapper,
OptionMapper $optionMapper,
VoteMapper $voteMapper,
CommentMapper $commentMapper,
QuestionMapper $questionMapper,
AnswerMapper $answerMapper
) {
@ -100,9 +90,7 @@ class ApiController extends Controller {
$this->groupManager = $groupManager;
$this->userManager = $userManager;
$this->eventMapper = $eventMapper;
$this->optionMapper = $optionMapper;
$this->voteMapper = $voteMapper;
$this->commentMapper = $commentMapper;
$this->questionMapper = $questionMapper;
$this->answerMapper = $answerMapper;
}
@ -209,23 +197,6 @@ class ApiController extends Controller {
return $grantAccessAs;
}
/**
* Read all options of a form based on the form id
* @NoAdminRequired
* @NoCSRFRequired
* @param Integer $formId
* @return Array
*/
public function getOptions($formId) {
$optionList = array();
$options = $this->optionMapper->findByForm($formId);
foreach ($options as $optionElement) {
$optionList[] = $optionElement->read();
}
return $optionList;
}
/**
* Read all votes of a form based on the form id
* @NoAdminRequired
@ -234,6 +205,17 @@ class ApiController extends Controller {
* @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);
@ -243,24 +225,9 @@ class ApiController extends Controller {
return $votesList;
}
return NULL;
}
/**
* Read all comments of a form based on the form id
* @NoAdminRequired
* @NoCSRFRequired
* @param Integer $formId
* @return Array
*/
public function getComments($formId) {
$commentsList = array();
$comments = $this->commentMapper->findByForm($formId);
foreach ($comments as $commentElement) {
$commentsList[] = $commentElement->read();
}
return $commentsList;
}
/**
* Read an entire form based on form id
@ -382,7 +349,6 @@ class ApiController extends Controller {
'grantedAs' => $this->grantAccessAs($event, $shares),
'mode' => $mode,
'event' => $event,
'comments' => $this->getComments($event['id']),
'votes' => $this->getVotes($event['id']),
'shares' => $shares,
'options' => [
@ -436,7 +402,6 @@ class ApiController extends Controller {
if ($this->userId !== $formToDelete->getOwner() && !$this->groupManager->isAdmin($this->userId)) {
return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
}
$this->commentMapper->deleteByForm($id);
$this->voteMapper->deleteByForm($id);
// $this->notificationMapper->deleteByForm($id);
$this->questionMapper->deleteByForm($id);
@ -473,8 +438,6 @@ class ApiController extends Controller {
$newEvent->setDescription($event['description']);
$newEvent->setIsAnonymous($event['isAnonymous']);
$newEvent->setFullAnonymous($event['fullAnonymous']);
$newEvent->setAllowMaybe($event['allowMaybe']);
if ($event['access'] === 'select') {
$shareAccess = '';

View file

@ -27,14 +27,10 @@
namespace OCA\Forms\Controller;
use OCA\Forms\Db\Comment;
use OCA\Forms\Db\CommentMapper;
use OCA\Forms\Db\Event;
use OCA\Forms\Db\EventMapper;
use OCA\Forms\Db\Notification;
use OCA\Forms\Db\NotificationMapper;
// use OCA\Forms\Db\Option;
// use OCA\Forms\Db\OptionMapper;
use OCA\Forms\Db\Vote;
use OCA\Forms\Db\VoteMapper;
@ -68,10 +64,8 @@ class PageController extends Controller {
private $userId;
private $config;
private $commentMapper;
private $eventMapper;
private $notificationMapper;
// private $optionMapper;
private $voteMapper;
private $questionMapper;
@ -99,8 +93,6 @@ class PageController extends Controller {
* @param IFactory $transFactory
* @param IURLGenerator $urlGenerator
* @param string $userId
* @param CommentMapper $commentMapper
* @param OptionMapper $optionMapper
* @param EventMapper $eventMapper
*
* @param QuestionMapper $questionMapper
@ -122,8 +114,6 @@ class PageController extends Controller {
IFactory $transFactory,
IURLGenerator $urlGenerator,
$userId,
CommentMapper $commentMapper,
// OptionMapper $optionMapper,
EventMapper $eventMapper,
QuestionMapper $questionMapper,
@ -144,8 +134,6 @@ class PageController extends Controller {
$this->transFactory = $transFactory;
$this->urlGenerator = $urlGenerator;
$this->userId = $userId;
$this->commentMapper = $commentMapper;
// $this->optionMapper = $optionMapper;
$this->eventMapper = $eventMapper;
$this->questionMapper = $questionMapper;
@ -358,9 +346,7 @@ class PageController extends Controller {
}
$form = new Event();
$form->setId($formId);
$this->commentMapper->deleteByForm($formId);
$this->voteMapper->deleteByForm($formId);
// $this->optionMapper->deleteByForm($formId);
$this->eventMapper->delete($form);
$url = $this->urlGenerator->linkToRoute('forms.page.index');
return new RedirectResponse($url);
@ -379,71 +365,50 @@ class PageController extends Controller {
* @return RedirectResponse
*/
public function insertVote($id, $userId, $answers, $questions) {
$form = $this->eventMapper->find($id);
$count_answers = count($answers);
$count = 1;
$anonID = "anon-user-". hash('md5', (time() + rand()));
for ($i = 0; $i < $count_answers; $i++) {
if($questions[$i]['type'] == "checkbox"){
foreach (($answers[$questions[$i]['text']]) as $value) {
$vote = new Vote();
$vote->setFormId($id);
$vote->setUserId($userId);
if($form->getIsAnonymous()){
$vote->setUserId($anonID);
}else{
$vote->setUserId($userId);
}
$vote->setVoteOptionText(htmlspecialchars($questions[$i]['text']));
$vote->setVoteAnswer($value);
$vote->setVoteOptionId($count);
$vote->setVoteOptionType($questions[$i]['type']);
$this->voteMapper->insert($vote);
}
$count++;
} else {
$vote = new Vote();
$vote->setFormId($id);
$vote->setUserId($userId);
if($form->getIsAnonymous()){
$vote->setUserId($anonID);
}else{
$vote->setUserId($userId);
}
$vote->setVoteOptionText(htmlspecialchars($questions[$i]['text']));
$vote->setVoteAnswer($answers[$questions[$i]['text']]);
$vote->setVoteOptionId($count++);
$vote->setVoteOptionType($questions[$i]['type']);
$this->voteMapper->insert($vote);
}
}
$hash = $form->getHash();
$url = $this->urlGenerator->linkToRoute('forms.page.goto_form', ['hash' => $hash]);
return new RedirectResponse($url);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
* @PublicPage
* @param int $formId
* @param string $userId
* @param string $commentBox
* @return JSONResponse
*/
public function insertComment($formId, $userId, $commentBox) {
$comment = new Comment();
$comment->setFormId($formId);
$comment->setUserId($userId);
$comment->setComment($commentBox);
$comment->setDt(date('Y-m-d H:i:s'));
$this->commentMapper->insert($comment);
$this->sendNotifications($formId, $userId);
$timeStamp = time();
$displayName = $userId;
$user = $this->userMgr->get($userId);
if ($user !== null) {
$displayName = $user->getDisplayName();
}
return new JSONResponse(array(
'userId' => $userId,
'displayName' => $displayName,
'timeStamp' => $timeStamp * 100,
'date' => date('Y-m-d H:i:s', $timeStamp),
'relativeNow' => $this->trans->t('just now'),
'comment' => $commentBox
));
}
/**
* @NoAdminRequired
* @NoCSRFRequired

View file

@ -1,62 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
* @author Kai Schröer <git@schroeer.co>
* @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\Forms\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method string getUserId()
* @method void setUserId(string $value)
* @method string getDt()
* @method void setDt(string $value)
* @method string getComment()
* @method void setComment(string $value)
* @method integer getFormId()
* @method void setFormId(integer $value)
*/
class Comment extends Model {
protected $userId;
protected $dt;
protected $comment;
protected $formId;
/**
* Comment constructor.
*/
public function __construct() {
$this->addType('formId', 'integer');
}
public function read() {
return [
'id' => $this->getId(),
'userId' => $this->getUserId(),
'date' => $this->getDt() . ' UTC',
'comment' => $this->getComment()
];
}
}

View file

@ -1,72 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author 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\Forms\Db;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\AppFramework\Db\QBMapper;
class CommentMapper extends QBMapper {
/**
* CommentMapper constructor.
* @param IDBConnection $db
*/
public function __construct(IDBConnection $db) {
parent::__construct($db, 'forms_comments', '\OCA\Forms\Db\Comment');
}
/**
* @param int $formId
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
* @return Comment[]
*/
public function findByForm($formId) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT))
);
return $this->findEntities($qb);
}
/**
* @param int $formId
*/
public function deleteByForm($formId) {
$qb = $this->db->getQueryBuilder();
$qb->delete($this->getTableName())
->where(
$qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT))
);
$qb->execute();
}
}

View file

@ -44,10 +44,6 @@ use OCP\AppFramework\Db\Entity;
* @method void setHash(string $value)
* @method integer getIsAnonymous()
* @method void setIsAnonymous(integer $value)
* @method integer getFullAnonymous()
* @method void setFullAnonymous(integer $value)
* @method integer getAllowMaybe()
* @method void setAllowMaybe(integer $value)
*/
class Event extends Model {
protected $title;
@ -66,8 +62,6 @@ class Event extends Model {
*/
public function __construct() {
$this->addType('isAnonymous', 'integer');
$this->addType('fullAnonymous', 'integer');
$this->addType('allowMaybe', 'integer');
}
public function read() {
@ -96,8 +90,6 @@ class Event extends Model {
'expired' => $expired,
'expirationDate' => $this->getExpire(),
'isAnonymous' => $this->getIsAnonymous(),
'fullAnonymous' => $this->getFullAnonymous(),
'allowMaybe' => $this->getAllowMaybe()
];
}
}

View file

@ -1,58 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
* @author Kai Schröer <git@schroeer.co>
* @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\Forms\Db;
use OCP\AppFramework\Db\Entity;
/**
* @method integer getFormId()
* @method void setFormId(integer $value)
* @method string getFormOptionText()
* @method void setFormOptionText(string $value)
* @method integer getTimestamp()
* @method void setTimestamp(integer $value)
*/
class Option extends Model {
protected $formId;
protected $formOptionText;
protected $timestamp;
/**
* Option constructor.
*/
public function __construct() {
$this->addType('formId', 'integer');
$this->addType('timestamp', 'integer');
}
public function read() {
return [
'id' => $this->getId(),
'text' => htmlspecialchars_decode($this->getFormOptionText()),
'timestamp' => $this->getTimestamp()
];
}
}

View file

@ -1,72 +0,0 @@
<?php
/**
* @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
*
* @author 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\Forms\Db;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\IDBConnection;
use OCP\AppFramework\Db\QBMapper;
class OptionMapper extends QBMapper {
/**
* TextMapper constructor.
* @param IDBConnection $db
*/
public function __construct(IDBConnection $db) {
parent::__construct($db, 'forms_options', '\OCA\Forms\Db\Option');
}
/**
* @param int $formId
* @throws \OCP\AppFramework\Db\DoesNotExistException if not found
* @return Option[]
*/
public function findByForm($formId) {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where(
$qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT))
);
return $this->findEntities($qb);
}
/**
* @param int $formId
*/
public function deleteByForm($formId) {
$qb = $this->db->getQueryBuilder();
$qb->delete($this->getTableName())
->where(
$qb->expr()->eq('form_id', $qb->createNamedParameter($formId, IQueryBuilder::PARAM_INT))
);
$qb->execute();
}
}

View file

@ -38,6 +38,8 @@ use OCP\AppFramework\Db\Entity;
* @method void setVoteOptionText(string $value)
* @method string getVoteAnswer()
* @method void setVoteAnswer(string $value)
* @method string getVoteOptionType()
* @method void setVoteOptionType(string $value)
*/
class Vote extends Model {
protected $formId;
@ -45,6 +47,7 @@ class Vote extends Model {
protected $voteOptionId;
protected $voteOptionText;
protected $voteAnswer;
protected $voteOptionType;
/**
* Options constructor.
@ -60,7 +63,8 @@ class Vote extends Model {
'userId' => $this->getUserId(),
'voteOptionId' => $this->getVoteOptionId(),
'voteOptionText' => htmlspecialchars_decode($this->getVoteOptionText()),
'voteAnswer' => $this->getVoteAnswer()
'voteAnswer' => $this->getVoteAnswer(),
'voteOptionType' => $this->getVoteOptionType()
];
}

View file

@ -37,7 +37,7 @@ use OCP\Migration\IOutput;
* Installation class for the forms app.
* Initial db creation
*/
class Version0009Date20190000000005 extends SimpleMigrationStep {
class Version0009Date20190000000006 extends SimpleMigrationStep {
/** @var IDBConnection */
protected $connection;
@ -182,6 +182,10 @@ class Version0009Date20190000000005 extends SimpleMigrationStep {
'notnull' => false,
'length' => 4096,
]);
$table->addColumn('vote_option_type', Type::STRING, [
'notnull' => false,
'length' => 256,
]);
$table->setPrimaryKey(['id']);
}