diff --git a/lib/Controller/ApiController.php b/lib/Controller/ApiController.php index 690dc43..5118c21 100644 --- a/lib/Controller/ApiController.php +++ b/lib/Controller/ApiController.php @@ -438,6 +438,7 @@ class ApiController extends Controller { $newEvent->setDescription($event['description']); $newEvent->setIsAnonymous($event['isAnonymous']); + $newEvent->setUnique($event['unique']); if ($event['access'] === 'select') { $shareAccess = ''; diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 783c47a..dcb60f0 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -527,6 +527,13 @@ class PageController extends Controller { return false; } if ($access === 'registered') { + if ($form->getUnique()) { + $participants = $this->voteMapper->findParticipantsByForm($form->getId()); + foreach($participants as $participant) { + // Don't allow access if user has already taken part + if ($participant->getUserId() === $this->userId) return false; + } + } return true; } if ($owner === $this->userId) { diff --git a/lib/Db/Event.php b/lib/Db/Event.php index d05e911..6ba1e9c 100644 --- a/lib/Db/Event.php +++ b/lib/Db/Event.php @@ -45,6 +45,8 @@ use OCP\AppFramework\Db\Entity; * @method void setHash(string $value) * @method integer getIsAnonymous() * @method void setIsAnonymous(integer $value) + * @method integer getUnique() + * @method void setUnique(boolean $value) */ class Event extends Entity { protected $title; @@ -57,6 +59,7 @@ class Event extends Entity { protected $isAnonymous; protected $fullAnonymous; protected $allowMaybe; + protected $unique; /** * Event constructor. @@ -91,6 +94,7 @@ class Event extends Entity { 'expired' => $expired, 'expirationDate' => $this->getExpire(), 'isAnonymous' => $this->getIsAnonymous(), + 'unique' => $this->getUnique() ]; } } diff --git a/lib/Migration/Version0010Date20190000000007.php b/lib/Migration/Version0010Date20190000000007.php new file mode 100644 index 0000000..14f260c --- /dev/null +++ b/lib/Migration/Version0010Date20190000000007.php @@ -0,0 +1,77 @@ + + * + * @author Marcel Klehr + * + * @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 . + * + */ + +namespace OCA\Forms\Migration; + +use Doctrine\DBAL\Exception\TableNotFoundException; +use Doctrine\DBAL\Platforms\PostgreSqlPlatform; +use Doctrine\DBAL\Types\Type; +use OCP\DB\ISchemaWrapper; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\Migration\SimpleMigrationStep; +use OCP\Migration\IOutput; + +/** + * Installation class for the forms app. + * Initial db creation + */ +class Version0010Date20190000000007 extends SimpleMigrationStep { + + /** @var IDBConnection */ + protected $connection; + + /** @var IConfig */ + protected $config; + + /** + * @param IDBConnection $connection + * @param IConfig $config + */ + public function __construct(IDBConnection $connection, IConfig $config) { + $this->connection = $connection; + $this->config = $config; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + * @since 13.0.0 + */ + public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + if ($schema->hasTable('forms_events')) { + $schema->getTable('forms_events')->addColumn('unique', Type::INTEGER, [ + 'notnull' => false, + 'default' => 0, + ]); + } else { + } + return $schema; + } +} diff --git a/src/views/Create.vue b/src/views/Create.vue index 6fa4f23..c2bf517 100644 --- a/src/views/Create.vue +++ b/src/views/Create.vue @@ -126,6 +126,13 @@ {{ t('forms', 'Anonymous form') }} + + + @@ -217,6 +224,7 @@ export default { description: '', created: '', access: 'public', + unique: false, expiration: false, expirationDate: '', expired: false,