diff --git a/doc/SCHEMA:framadate_api.uml b/doc/SCHEMA:framadate_api.uml new file mode 100644 index 0000000..0e05116 --- /dev/null +++ b/doc/SCHEMA:framadate_api.uml @@ -0,0 +1,80 @@ + + + DATABASE + 2c3996c6-29d5-4c17-9504-1606d308e53c.SCHEMA:framadate_api + + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.stack_of_votes + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.owner + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.comment + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.poll + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.vote + 2c3996c6-29d5-4c17-9504-1606d308e53c.TABLE:framadate_api.choice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Columns + Key columns + Virtual foreign keys + + + diff --git a/doc/framadate_api.png b/doc/framadate_api.png new file mode 100644 index 0000000..52e4c27 Binary files /dev/null and b/doc/framadate_api.png differ diff --git a/doc/framadate_api.svg b/doc/framadate_api.svg new file mode 100644 index 0000000..4853da5 --- /dev/null +++ b/doc/framadate_api.svg @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + int + + + + + + + + + + poll_id + + + + + + int + + + + + + + + + + owner_id + + + + + + varchar(255) + + + + + + + + + + pseudo + + + + + + + + + + + + + + stack_of_votes + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + varchar(255) + + + + + + + + + + pseudo + + + + + + varchar(255) + + + + + + + + + + email + + + + + + varchar(255) + + + + + + + + + + modifier_token + + + + + + datetime + + + + + + + + + + created_at + + + + + + datetime + + + + + + + + + + requested_polls_date + + + + + + + + + + + + + + owner + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + int + + + + + + + + + + owner_id + + + + + + int + + + + + + + + + + poll_id + + + + + + longtext + + + + + + + + + + text + + + + + + datetime + + + + + + + + + + created_at + + + + + + varchar(255) + + + + + + + + + + pseudo + + + + + + + + + + + + + + comment + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + int + + + + + + + + + + owner_id + + + + + + varchar(255) + + + + + + + + + + title + + + + + + varchar(255) + + + + + + + + + + custom_url + + + + + + varchar(1000) + + + + + + + + + + description + + + + + + datetime + + + + + + + + + + creation_date + + + + + + datetime + + + + + + + + + + expiracy_date + + + + + + varchar(255) + + + + + + + + + + kind + + + + + + longtext + + + + + + + + + + allowed_answers + + + + + + varchar(255) + + + + + + + + + + modification_policy + + + + + + tinyint(1) + + + + + + + + + + mail_on_comment + + + + + + tinyint(1) + + + + + + + + + + mail_on_vote + + + + + + tinyint(1) + + + + + + + + + + hide_results + + + + + + tinyint(1) + + + + + + + + + + show_result_even_if_passwords + + + + + + varchar(255) + + + + + + + + + + password + + + + + + varchar(255) + + + + + + + + + + admin_key + + + + + + tinyint(1) + + + + + + + + + + votes_allowed + + + + + + smallint + + + + + + + + + + votes_max + + + + + + smallint + + + + + + + + + + choices_max + + + + + + tinyint(1) + + + + + + + + + + comments_allowed + + + + + + + + + + + + + + poll + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + int + + + + + + + + + + choice_id + + + + + + int + + + + + + + + + + poll_id + + + + + + int + + + + + + + + + + stacks_of_votes_id + + + + + + varchar(255) + + + + + + + + + + value + + + + + + datetime + + + + + + + + + + creation_date + + + + + + + + + + + + + + vote + + + + + + + + + + + + int + + + + + + + + + + id + + + + + + + + + + + + int + + + + + + + + + + poll_id + + + + + + varchar(255) + + + + + + + + + + name + + + + + + varchar(1024) + + + + + + + + + + url + + + + + + datetime + + + + + + + + + + date_time + + + + + + + + + + + + + + choice + + + + + + + poll_id:id + + + stacks_of_votes_id:id + + + poll_id:id + + + poll_id:id + + + owner_id:id + + + choice_id:id + + + poll_id:id + + + owner_id:id + + + owner_id:id + + + diff --git a/src/DataFixtures/AppPollFixtures.php b/src/DataFixtures/AppPollFixtures.php index 838f8fa..36bde47 100755 --- a/src/DataFixtures/AppPollFixtures.php +++ b/src/DataFixtures/AppPollFixtures.php @@ -13,6 +13,8 @@ use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; class AppPollFixtures extends Fixture { + public const POLL_FIXTURE_ONE = 'citron-poll-fixture'; + public function load( ObjectManager $manager ) { /** @@ -35,41 +37,44 @@ class AppPollFixtures extends Fixture { $manager->flush(); - $poll = new Poll(); - $poll->setTitle( 'citron ou orange' ) + $pollCitronOrange = new Poll(); + $pollCitronOrange->setTitle( 'citron ou orange' ) ->setCustomUrl('citron') ->setDescription( 'votre sorbert préféré' ) ->setAdminKey( uniqid() ) ->setModificationPolicy( 'nobody' ) ->setPassword('le pass woute woute'); - $poll->setMailOnVote( true ); - $poll->setOwner( $owner ); - $owner->addPoll( $poll ); + + $this->addReference(self::POLL_FIXTURE_ONE, $pollCitronOrange); + + $pollCitronOrange->setMailOnVote( true ); + $pollCitronOrange->setOwner( $owner ); + $owner->addPoll( $pollCitronOrange ); $choiceA = new Choice(); $choiceA->setName( 'citron' ); $choiceB = new Choice(); $choiceB->setName( 'orange' ); - $poll + $pollCitronOrange ->addChoice( $choiceA ) ->addChoice( $choiceB ); - $manager->persist( $poll ); + $manager->persist( $pollCitronOrange ); $stack1 = new StackOfVotes(); $stack1 - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setOwner( $voter ); $voteA = new Vote(); $voteA - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack1 ) ->setValue( "yes" ) ->setChoice( $choiceA ); $voteB = new Vote(); $voteB - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack1 ) ->setValue( "yes" ) ->setChoice( $choiceB ); @@ -81,12 +86,12 @@ class AppPollFixtures extends Fixture { $stack2 = new StackOfVotes(); $stack2->setPseudo( 'Jean indécis' ); $stack2 - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setOwner( $voter ); $voteA = new Vote(); $voteA - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack2 ) ->setValue( "maybe" ) ->setChoice( $choiceA ); @@ -94,37 +99,37 @@ class AppPollFixtures extends Fixture { $manager->persist( $stack2 ); - $poll = new Poll(); + $pollCitronOrange = new Poll(); $ownerComment = new Comment(); $ownerComment ->setText( "trop bien ce sondage wohooo! signé l'auteur." ) ->setPseudo('un gens qui commente') ->setOwner( $owner ); - $poll->addComment( $ownerComment ); + $pollCitronOrange->addComment( $ownerComment ); $someoneComment = new Comment(); $someoneComment ->setText( "comme l'auteur se la raconte. PFFFF!" ) ->setPseudo('un gens qui commente') ->setOwner( $commenterMan ); - $poll->addComment( $someoneComment ); + $pollCitronOrange->addComment( $someoneComment ); - $poll->setTitle( 'démo sondage de texte avec deux commentaires' ) + $pollCitronOrange->setTitle( 'démo sondage de texte avec deux commentaires' ) ->setCustomUrl('demo') ->setDescription( 'description du sondage 2' ); - $poll->setAdminKey( uniqid() ); - $poll->setModificationPolicy( 'self' ); - $poll->setMailOnComment( true ); + $pollCitronOrange->setAdminKey( uniqid() ); + $pollCitronOrange->setModificationPolicy( 'self' ); + $pollCitronOrange->setMailOnComment( true ); - $poll->addTextChoiceArray( [ 'un truc', 'deux trucs' ] ); - $poll->setOwner( $owner ); - $owner->addPoll( $poll ); + $pollCitronOrange->addTextChoiceArray( [ 'un truc', 'deux trucs' ] ); + $pollCitronOrange->setOwner( $owner ); + $owner->addPoll( $pollCitronOrange ); - $manager->persist( $poll ); + $manager->persist( $pollCitronOrange ); $manager->persist( $someoneComment ); $manager->persist( $ownerComment ); @@ -132,16 +137,16 @@ class AppPollFixtures extends Fixture { // voting test with 2 people // poll with date type - $poll = new Poll(); + $pollCitronOrange = new Poll(); $choice = new Choice(); $firstDate = new DateTime(); $choice->setName( $firstDate->format( 'Y-m-d H:i:s' ) ); $choice2 = new Choice(); $choice3 = new Choice(); - $choice2->setName( $poll->addDaysToDate( $firstDate, 1 )->format( 'Y-m-d H:i:s' ) ); - $choice3->setName( $poll->addDaysToDate( $firstDate, 2 )->format( 'Y-m-d H:i:s' ) ); + $choice2->setName( $pollCitronOrange->addDaysToDate( $firstDate, 1 )->format( 'Y-m-d H:i:s' ) ); + $choice3->setName( $pollCitronOrange->addDaysToDate( $firstDate, 2 )->format( 'Y-m-d H:i:s' ) ); - $poll->setTitle( "c'est pour aujourdhui ou pour demain" ) + $pollCitronOrange->setTitle( "c'est pour aujourdhui ou pour demain" ) ->setCustomUrl('aujourdhui-ou-demain') ->setDescription( 'Vous avez le choix dans la date' ) ->setKind( 'date' ) @@ -150,11 +155,11 @@ class AppPollFixtures extends Fixture { ->addChoice( $choice2 ) ->addChoice( $choice3 ) ->setModificationPolicy( 'self' ); - $manager->persist( $poll ); + $manager->persist( $pollCitronOrange ); // poll with cartoon choices - $poll = new Poll(); - $poll->setTitle( 'dessin animé préféré' ) + $pollCitronOrange = new Poll(); + $pollCitronOrange->setTitle( 'dessin animé préféré' ) ->setCustomUrl('dessin-anime') ->setDescription( 'choisissez votre animé préféré' ) ->setOwner( $owner ) @@ -174,60 +179,60 @@ class AppPollFixtures extends Fixture { ->setPseudo('un gens qui commente') ->setText( "allez boumbo!" ) ->setOwner( $commenterMan ); - $poll->addComment( $someoneComment ); + $pollCitronOrange->addComment( $someoneComment ); $someoneComment2 = new Comment(); $someoneComment2 ->setPseudo('un gens qui commente') ->setText( "je suis pour la team rocket de digimon" ) ->setOwner( $owner ); - $poll->addComment( $someoneComment2 ); + $pollCitronOrange->addComment( $someoneComment2 ); - $manager->persist( $poll ); + $manager->persist( $pollCitronOrange ); $stack = new StackOfVotes(); $stack->setPseudo( 'Wulfila' ); $stack - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setOwner( $voter ); $vote = new Vote(); $vote - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack ) ->setValue( "yes" ) - ->setChoice( $poll->getChoices()[ 2 ] ); + ->setChoice( $pollCitronOrange->getChoices()[ 2 ] ); $vote = new Vote(); $vote - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack ) ->setValue( "maybe" ) - ->setChoice( $poll->getChoices()[ 1 ] ); + ->setChoice( $pollCitronOrange->getChoices()[ 1 ] ); $manager->persist( $stack ); $stack = new StackOfVotes(); $stack->setPseudo( 'Tykayn' ); $stack - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setOwner( $voter ); $vote = new Vote(); $vote - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack ) ->setValue( "yes" ) - ->setChoice( $poll->getChoices()[ 1 ] ); + ->setChoice( $pollCitronOrange->getChoices()[ 1 ] ); $vote = new Vote(); $vote - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack ) ->setValue( "yes" ) - ->setChoice( $poll->getChoices()[ 2 ] ); + ->setChoice( $pollCitronOrange->getChoices()[ 2 ] ); $vote = new Vote(); $vote - ->setPoll( $poll ) + ->setPoll( $pollCitronOrange ) ->setStacksOfVotes( $stack ) ->setValue( "no" ) - ->setChoice( $poll->getChoices()[ 2 ] ); + ->setChoice( $pollCitronOrange->getChoices()[ 2 ] ); $manager->persist( $stack ); diff --git a/src/DataFixtures/CommentFixtures.php b/src/DataFixtures/CommentFixtures.php index 59e6ff7..6b78158 100644 --- a/src/DataFixtures/CommentFixtures.php +++ b/src/DataFixtures/CommentFixtures.php @@ -6,9 +6,17 @@ use App\Entity\Comment; use App\Entity\Owner; use App\Entity\Poll; use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; -class CommentFixtures extends Fixture { +class CommentFixtures extends Fixture implements DependentFixtureInterface { + public function getDependencies() + { + return [ + AppPollFixtures::class, + ]; + } + public function load( ObjectManager $manager ) { $emPoll = $manager->getRepository( Poll::class ); @@ -20,7 +28,7 @@ class CommentFixtures extends Fixture { ->setPseudo( 'Wulfila' ); // comment on "citron ou orange" - $pollCitronOrange = $emPoll->findOneByCustomUrl( 'citron' ); + $pollCitronOrange = $this->getReference(AppPollFixtures::POLL_FIXTURE_ONE); if ( $pollCitronOrange ) { $comment = new Comment();