add fixtures for events

fix #17
This commit is contained in:
2016-03-22 09:59:00 +01:00
parent 9512528018
commit d7fc04cdaa
6 changed files with 278 additions and 21 deletions

View File

@@ -0,0 +1,97 @@
<?php
namespace Chill\EventBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Chill\EventBundle\Entity\EventType;
use Chill\EventBundle\Entity\Role;
use Chill\EventBundle\Entity\Status;
/**
* Load a set of `EventType`, their `Role` and `Status`.
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Champs Libres <info@champs-libres.coop>
*/
class LoadEventTypes extends AbstractFixture implements OrderedFixtureInterface
{
public static $refs = array();
public function getOrder()
{
return 30000;
}
public function load(ObjectManager $manager)
{
$type = (new EventType())
->setActive(true)
->setLabel(array('fr' => 'Échange de savoirs', 'en' => 'Exchange of knowledge'))
;
$manager->persist($type);
$this->addReference('event_type_knowledge', $type);
self::$refs[] = 'event_type_knowledge';
$role = (new Role())
->setActive(true)
->setLabel(array('fr' => 'Participant', 'nl' => 'Deelneemer', 'en' => 'Participant'))
->setType($type)
;
$manager->persist($role);
$role = (new Role())
->setActive(true)
->setLabel(array('fr' => 'Animateur'))
->setType($type);
$manager->persist($role);
$status = (new Status())
->setActive(true)
->setLabel(array('fr' => 'Inscrit'))
->setType($type);
$manager->persist($status);
$status = (new Status())
->setActive(true)
->setLabel(array('fr' => 'Présent'))
->setType($type)
;
$manager->persist($status);
$type = (new EventType())
->setActive(true)
->setLabel(array('fr' => 'Formation', 'en' => 'Course', 'nl' => 'Opleiding'))
;
$manager->persist($type);
$this->addReference('event_type_course', $type);
self::$refs[] = 'event_type_course';
$role = (new Role())
->setActive(true)
->setLabel(array('fr' => 'Participant', 'nl' => 'Deelneemer', 'en' => 'Participant'))
->setType($type)
;
$manager->persist($role);
$status = (new Status())
->setActive(true)
->setLabel(array('fr' => 'Inscrit'))
->setType($type)
;
$manager->persist($status);
$status = (new Status())
->setActive(true)
->setLabel(array('fr' => 'En liste d\'attente'))
->setType($type)
;
$manager->persist($status);
$manager->flush();
}
}

View File

@@ -0,0 +1,92 @@
<?php
namespace Chill\EventBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Chill\EventBundle\Entity\Participation;
use Chill\MainBundle\Entity\Center;
use Chill\EventBundle\Entity\Event;
/**
* Load Events and Participation
*
* @author Julien Fastré <julien.fastre@champs-libres.coop>
* @author Champs Libres <info@champs-libres.coop>
*/
class LoadParticipation extends AbstractFixture implements OrderedFixtureInterface
{
/**
*
* @var \Faker\Generator
*/
protected $faker;
public function __construct()
{
$this->faker = \Faker\Factory::create('fr_FR');
}
public function getOrder()
{
return 30010;
}
public function load(ObjectManager $manager)
{
$centers = $manager->getRepository('ChillMainBundle:Center')
->findAll();
foreach($centers as $center) {
$people = $manager->getRepository('ChillPersonBundle:Person')
->findBy(array('center' => $center));
$events = $this->createEvents($center, $manager);
/* @var $person \Chill\PersonBundle\Entity\Person */
foreach ($people as $person) {
$nb = rand(0,3);
for ($i=0; $i<$nb; $i++) {
$event = $events[array_rand($events)];
$role = $event->getType()->getRoles()->get(
array_rand($event->getType()->getRoles()->toArray()));
$status = $event->getType()->getStatuses()->get(
array_rand($event->getType()->getStatuses()->toArray()));
$participation = (new Participation())
->setPerson($person)
->setRole($role)
->setStatus($status)
->setEvent($event)
;
$manager->persist($participation);
}
}
}
$manager->flush();
}
public function createEvents(Center $center, ObjectManager $manager)
{
$expectedNumber = 20;
$events = array();
for($i=0; $i<$expectedNumber; $i++) {
$event = (new Event())
->setDate($this->faker->dateTimeBetween('-2 years', '+6 months'))
->setLabel($this->faker->words(rand(2,4), true))
->setType($this->getReference(LoadEventTypes::$refs[array_rand(LoadEventTypes::$refs)]))
->setCenter($center)
;
$manager->persist($event);
$events[] = $event;
}
return $events;
}
}