mirror of
https://framagit.org/tykayn/date-poll-api
synced 2023-08-25 08:23:11 +02:00
update of a vote stack returns a vote stack
This commit is contained in:
parent
18d251270b
commit
fd28433dd8
@ -46,6 +46,7 @@
|
|||||||
"doctrine/doctrine-migrations-bundle": "^3.1",
|
"doctrine/doctrine-migrations-bundle": "^3.1",
|
||||||
"doctrine/orm": "^2.8",
|
"doctrine/orm": "^2.8",
|
||||||
"friendsofsymfony/rest-bundle": "^3.0",
|
"friendsofsymfony/rest-bundle": "^3.0",
|
||||||
|
"gedmo/doctrine-extensions": "^3.0",
|
||||||
"jms/serializer-bundle": "^3.9",
|
"jms/serializer-bundle": "^3.9",
|
||||||
"nelmio/cors-bundle": "^2.1",
|
"nelmio/cors-bundle": "^2.1",
|
||||||
"sensio/framework-extra-bundle": "^6.1",
|
"sensio/framework-extra-bundle": "^6.1",
|
||||||
|
149
composer.lock
generated
149
composer.lock
generated
@ -4,8 +4,57 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "104b8c116015bbc6f7f3efa3d0618a90",
|
"content-hash": "9f35ffaf799b2f21e80284cb4800a791",
|
||||||
"packages": [
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "behat/transliterator",
|
||||||
|
"version": "v1.3.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Behat/Transliterator.git",
|
||||||
|
"reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
|
||||||
|
"reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"chuyskywalker/rolling-curl": "^3.1",
|
||||||
|
"php-yaoi/php-yaoi": "^1.0",
|
||||||
|
"phpunit/phpunit": "^4.8.36|^6.3"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.2-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Behat\\Transliterator\\": "src/Behat/Transliterator"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"Artistic-1.0"
|
||||||
|
],
|
||||||
|
"description": "String transliterator",
|
||||||
|
"keywords": [
|
||||||
|
"i18n",
|
||||||
|
"slug",
|
||||||
|
"transliterator"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/Behat/Transliterator/issues",
|
||||||
|
"source": "https://github.com/Behat/Transliterator/tree/v1.3.0"
|
||||||
|
},
|
||||||
|
"time": "2020-01-14T16:39:13+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/package-versions-deprecated",
|
"name": "composer/package-versions-deprecated",
|
||||||
"version": "1.11.99.1",
|
"version": "1.11.99.1",
|
||||||
@ -1682,6 +1731,104 @@
|
|||||||
},
|
},
|
||||||
"time": "2021-01-02T11:26:24+00:00"
|
"time": "2021-01-02T11:26:24+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "gedmo/doctrine-extensions",
|
||||||
|
"version": "v3.0.5",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/doctrine-extensions/DoctrineExtensions.git",
|
||||||
|
"reference": "f956c3c4d0c0ffdc5dd879288073772e439b6c1a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/f956c3c4d0c0ffdc5dd879288073772e439b6c1a",
|
||||||
|
"reference": "f956c3c4d0c0ffdc5dd879288073772e439b6c1a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"behat/transliterator": "~1.2",
|
||||||
|
"doctrine/annotations": "^1.2",
|
||||||
|
"doctrine/cache": "^1.0",
|
||||||
|
"doctrine/collections": "^1.0",
|
||||||
|
"doctrine/common": "^2.13 || ^3.0",
|
||||||
|
"doctrine/event-manager": "^1.0",
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"doctrine/mongodb": "<1.3",
|
||||||
|
"doctrine/mongodb-odm": "<2.0",
|
||||||
|
"sebastian/comparator": "<2.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mongo": "1.6.12"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"alcaeus/mongo-php-adapter": "^1.1",
|
||||||
|
"doctrine/doctrine-bundle": "^2.3",
|
||||||
|
"doctrine/mongodb-odm": "^2.0",
|
||||||
|
"doctrine/orm": "^2.6.3",
|
||||||
|
"friendsofphp/php-cs-fixer": "^2.16",
|
||||||
|
"phpunit/phpunit": "^8.5",
|
||||||
|
"symfony/yaml": "^4.1"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM",
|
||||||
|
"doctrine/orm": "to use the extensions with the ORM"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Gedmo\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Gediminas Morkevicius",
|
||||||
|
"email": "gediminas.morkevicius@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Gustavo Falco",
|
||||||
|
"email": "comfortablynumb84@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "David Buchmann",
|
||||||
|
"email": "david@liip.ch"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Doctrine2 behavioral extensions",
|
||||||
|
"homepage": "http://gediminasm.org/",
|
||||||
|
"keywords": [
|
||||||
|
"Blameable",
|
||||||
|
"behaviors",
|
||||||
|
"doctrine2",
|
||||||
|
"extensions",
|
||||||
|
"gedmo",
|
||||||
|
"loggable",
|
||||||
|
"nestedset",
|
||||||
|
"sluggable",
|
||||||
|
"sortable",
|
||||||
|
"timestampable",
|
||||||
|
"translatable",
|
||||||
|
"tree",
|
||||||
|
"uploadable"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"email": "gediminas.morkevicius@gmail.com",
|
||||||
|
"issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues",
|
||||||
|
"source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.0.5",
|
||||||
|
"wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc"
|
||||||
|
},
|
||||||
|
"time": "2021-04-23T09:16:01+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "jms/metadata",
|
"name": "jms/metadata",
|
||||||
"version": "2.5.0",
|
"version": "2.5.0",
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Controller\api\v1;
|
namespace App\Controller\api\v1;
|
||||||
|
|
||||||
use App\Controller\EmailsController;
|
use App\Controller\EmailsController;
|
||||||
|
use App\Entity\Choice;
|
||||||
use App\Entity\Comment;
|
use App\Entity\Comment;
|
||||||
use App\Entity\Owner;
|
use App\Entity\Owner;
|
||||||
use App\Entity\Poll;
|
use App\Entity\Poll;
|
||||||
@ -162,16 +163,17 @@ class VoteController extends EmailsController {
|
|||||||
$data = $request->getContent();
|
$data = $request->getContent();
|
||||||
$data = json_decode( $data, true );
|
$data = json_decode( $data, true );
|
||||||
|
|
||||||
if ( $whocanchangeanswers == 'everybody' ) {
|
$table_votes_by_choice_id = [];
|
||||||
|
|
||||||
$voteStack->patchVotes( $data[ 'votes' ] );
|
if ( $whocanchangeanswers == 'everybody' ) {
|
||||||
|
$table_votes_by_choice_id = $this->patchVotes( $voteStack, $data[ 'votes' ] );
|
||||||
} else if ( $whocanchangeanswers == 'self' ) {
|
} else if ( $whocanchangeanswers == 'self' ) {
|
||||||
// someone with the right token of this vote stack only can change this
|
// someone with the right token of this vote stack only can change this
|
||||||
if ( ! $modifierToken || $voteStack->getOwner()->getModifierToken() !== $modifierToken ) {
|
if ( ! $modifierToken || $voteStack->getOwner()->getModifierToken() !== $modifierToken ) {
|
||||||
return $this->json( [ 'message' => 'your token does not allow you to modify this vote ' ],
|
return $this->json( [ 'message' => 'your token does not allow you to modify this vote ' ],
|
||||||
403 );
|
403 );
|
||||||
}
|
}
|
||||||
$voteStack->patchVotes( $data[ 'votes' ] );
|
$this->patchVotes( $voteStack, $data[ 'votes' ] );
|
||||||
// everything is ok, we can update all the votes of the vote stack
|
// everything is ok, we can update all the votes of the vote stack
|
||||||
} else if ( $whocanchangeanswers == 'nobody' ) {
|
} else if ( $whocanchangeanswers == 'nobody' ) {
|
||||||
// only the poll admin with the poll modifier token can change this
|
// only the poll admin with the poll modifier token can change this
|
||||||
@ -179,7 +181,7 @@ class VoteController extends EmailsController {
|
|||||||
return $this->json( [ 'message' => 'your token does not allow you to modify this vote ' ],
|
return $this->json( [ 'message' => 'your token does not allow you to modify this vote ' ],
|
||||||
403 );
|
403 );
|
||||||
}
|
}
|
||||||
$voteStack->patchVotes( $data[ 'votes' ] );
|
$this->patchVotes( $voteStack, $data[ 'votes' ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -191,13 +193,7 @@ class VoteController extends EmailsController {
|
|||||||
// save everything
|
// save everything
|
||||||
|
|
||||||
|
|
||||||
$jsonResponse = [
|
$jsonResponse = $voteStack->displayForAdmin();
|
||||||
'message' => 'ok',
|
|
||||||
'whocanchangeanswers' => $whocanchangeanswers,
|
|
||||||
'modifier_token' => $voteStack->getOwner()->getModifierToken(),
|
|
||||||
'vote_stack' => $voteStack,
|
|
||||||
'data' => $id,
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
return $this->json( $jsonResponse, 200 );
|
return $this->json( $jsonResponse, 200 );
|
||||||
@ -205,6 +201,55 @@ class VoteController extends EmailsController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function patchVotes( $stackOfVotes, $data ) {
|
||||||
|
$table_votes_by_choice_id = [];
|
||||||
|
$votes = $stackOfVotes->getVotes();
|
||||||
|
$choices = $stackOfVotes->getPoll()->getChoices();
|
||||||
|
$table_choices_by_id = [];
|
||||||
|
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
|
||||||
|
foreach ( $choices as $c ) {
|
||||||
|
$table_choices_by_id[ $c->getId() ] = $c;
|
||||||
|
}
|
||||||
|
foreach ( $votes as $stack_vote ) {
|
||||||
|
$table_votes_by_choice_id[ $stack_vote->getChoice()->getId() ] = $stack_vote;
|
||||||
|
}
|
||||||
|
foreach ( $data as $vote ) {
|
||||||
|
|
||||||
|
$newValue = $vote[ 'value' ];
|
||||||
|
$choice_id = $vote[ 'choice_id' ];
|
||||||
|
// if the new value is null, remove the vote
|
||||||
|
if ( isset( $table_choices_by_id[ $choice_id ] ) ) {
|
||||||
|
if ( isset( $table_votes_by_choice_id[ $choice_id ] ) ) {
|
||||||
|
$voteFound = $table_votes_by_choice_id[ $choice_id ];
|
||||||
|
if ( $newValue ) {
|
||||||
|
$voteFound->setValue( $newValue );
|
||||||
|
$em->persist( $voteFound );
|
||||||
|
} else {
|
||||||
|
$stackOfVotes->removeVote( $voteFound );
|
||||||
|
$em->remove( $voteFound );
|
||||||
|
}
|
||||||
|
} else if ( $newValue ) {
|
||||||
|
// create vote for this stack
|
||||||
|
$newVote = new Vote();
|
||||||
|
$newVote->setChoice( $em->find( Choice::class, $choice_id ) )
|
||||||
|
->setValue( $newValue );
|
||||||
|
$em->persist( $newVote );
|
||||||
|
|
||||||
|
$stackOfVotes->addVote( $newVote );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
$em->persist( $stackOfVotes );
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $table_votes_by_choice_id;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Route(
|
* @Route(
|
||||||
* path = "/{id}/token/{modifierToken}",
|
* path = "/{id}/token/{modifierToken}",
|
||||||
|
@ -98,6 +98,7 @@ class Owner {
|
|||||||
public function displayForAdmin() {
|
public function displayForAdmin() {
|
||||||
return [
|
return [
|
||||||
'pseudo' => $this->getPseudo(),
|
'pseudo' => $this->getPseudo(),
|
||||||
|
'email' => $this->getEmail(),
|
||||||
'modifier_token' => $this->getModifierToken(),
|
'modifier_token' => $this->getModifierToken(),
|
||||||
'created_at' => $this->getCreatedAtAsString(),
|
'created_at' => $this->getCreatedAtAsString(),
|
||||||
];
|
];
|
||||||
|
@ -26,7 +26,7 @@ class StackOfVotes {
|
|||||||
*/
|
*/
|
||||||
public $pseudo;
|
public $pseudo;
|
||||||
/**
|
/**
|
||||||
* @ORM\OneToMany(targetEntity="App\Entity\Vote", mappedBy="stacksOfVotes", cascade={"persist","remove"})
|
* @ORM\OneToMany(targetEntity="App\Entity\Vote", mappedBy="stacksOfVotes", orphanRemoval=true, cascade={"persist","remove"})
|
||||||
* @Serializer\Expose()
|
* @Serializer\Expose()
|
||||||
*/
|
*/
|
||||||
public $votes;
|
public $votes;
|
||||||
@ -161,29 +161,4 @@ class StackOfVotes {
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* only update the values of votes
|
|
||||||
*
|
|
||||||
* @param $votes
|
|
||||||
*/
|
|
||||||
public function patchVotes( $votes ) {
|
|
||||||
$table_votes_by_id = [];
|
|
||||||
$stackVotes = $this->getVotes();
|
|
||||||
foreach ( $stackVotes as $stack_vote ) {
|
|
||||||
$table_votes_by_id[ $stack_vote->getId() ] = $stack_vote;
|
|
||||||
}
|
|
||||||
foreach ( $votes as $vote ) {
|
|
||||||
|
|
||||||
$newValue = $vote[ 'value' ];
|
|
||||||
$id = $vote[ 'id' ];
|
|
||||||
// if the new value is null, remove the vote
|
|
||||||
if ( $newValue && isset( $table_votes_by_id[ $id ] ) ) {
|
|
||||||
|
|
||||||
$table_votes_by_id[ $id ]->setValue( $newValue );
|
|
||||||
// $this->addVote($table_votes_by_id[$id]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"behat/transliterator": {
|
||||||
|
"version": "v1.3.0"
|
||||||
|
},
|
||||||
"composer/package-versions-deprecated": {
|
"composer/package-versions-deprecated": {
|
||||||
"version": "1.11.99.1"
|
"version": "1.11.99.1"
|
||||||
},
|
},
|
||||||
@ -115,6 +118,9 @@
|
|||||||
"config/packages/fos_rest.yaml"
|
"config/packages/fos_rest.yaml"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"gedmo/doctrine-extensions": {
|
||||||
|
"version": "v3.0.5"
|
||||||
|
},
|
||||||
"jms/metadata": {
|
"jms/metadata": {
|
||||||
"version": "2.5.0"
|
"version": "2.5.0"
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user