LoadGroupData.php 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace Muzich\UserBundle\DataFixtures\ORM;
  3. use Doctrine\Common\Persistence\ObjectManager;
  4. use Doctrine\Common\DataFixtures\AbstractFixture;
  5. use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
  6. use Symfony\Component\DependencyInjection\ContainerAwareInterface;
  7. use Symfony\Component\DependencyInjection\ContainerInterface;
  8. use Muzich\CoreBundle\Entity\Group;
  9. use Muzich\CoreBundle\Entity\FollowGroup;
  10. use Muzich\CoreBundle\Entity\GroupsTagsFavorites;
  11. class LoadGroupData extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
  12. {
  13. private $container;
  14. private $entity_manager;
  15. public function setContainer(ContainerInterface $container = null)
  16. {
  17. $this->container = $container;
  18. }
  19. public function getOrder()
  20. {
  21. return 4;
  22. }
  23. protected function getArrayOfTag($names)
  24. {
  25. $tags = array();
  26. foreach ($names as $name)
  27. {
  28. $tags[] = $this->entity_manager->merge($this->getReference('tag_'.$name));
  29. }
  30. return $tags;
  31. }
  32. /**
  33. *
  34. */
  35. protected function createGroup($reference_id, $name, $description, $open, $owner)
  36. {
  37. $group = new Group();
  38. $group->setName($name);
  39. $group->setDescription($description);
  40. $group->setOpen($open);
  41. $group->setOwner($owner);
  42. $this->entity_manager->persist($group);
  43. $this->addReference('group_'.$reference_id, $group);
  44. return $group;
  45. }
  46. protected function theyFollowGroup($followers, $group)
  47. {
  48. foreach ($followers as $follower)
  49. {
  50. $followGroup = new FollowGroup();
  51. $followGroup->setFollower($follower);
  52. $followGroup->setGroup($group);
  53. $this->entity_manager->persist($followGroup);
  54. }
  55. }
  56. protected function groupHasTags($tags, $group)
  57. {
  58. foreach ($tags as $pos => $tag)
  59. {
  60. $GroupsTagsFavorites = new GroupsTagsFavorites();
  61. $GroupsTagsFavorites->setTag($tag);
  62. $GroupsTagsFavorites->setGroup($group);
  63. $GroupsTagsFavorites->setPosition($pos);
  64. $this->entity_manager->persist($GroupsTagsFavorites);
  65. }
  66. }
  67. public function load(ObjectManager $entity_manager)
  68. {
  69. $this->entity_manager = $entity_manager;
  70. // Slug stuff
  71. $evm = new \Doctrine\Common\EventManager();
  72. // ORM and ODM
  73. $sluggableListener = new \Gedmo\Sluggable\SluggableListener();
  74. $evm->addEventSubscriber($sluggableListener);
  75. // now this event manager should be passed to entity manager constructor
  76. $entity_manager->getEventManager()->addEventSubscriber($sluggableListener);
  77. // Création des groupes
  78. $group_dudeldrum = $this->createGroup('dudeldrum', 'DUDELDRUM',
  79. nl2br("Un groupe de musique médievale."),
  80. false, $this->entity_manager->merge($this->getReference('user_joelle')));
  81. $group_fan_de_psytrance = $this->createGroup('fan_de_psytrance', 'Fans de psytrance',
  82. "La Trance psychédélique (souvent appelée psytrance) est une forme de trance (style de musique électronique)
  83. apparue au début des années 1990 à Goa, Inde, d'où le nom de \"Goa\" ou \"trance-Goa\" donné au départ à ce
  84. courant musical (ou encore Hippie Trance, 604 par analogie graphique avec GOA). La trance psychédélique est
  85. caractérisée par un rythme rapide, dans la gamme des 125 à 160 battements par minute (bpm), contrairement à
  86. l'ambient et autres formes d'house ou de techno. Ses basses sont fortes, sans interruption, sans changement
  87. et recouvertes par beaucoup d'autres rythmes, souvent produits par le célèbre synthétiseur Roland TB-303.",
  88. true, $this->entity_manager->merge($this->getReference('user_bob')));
  89. $group_joelle = $this->createGroup('joelle', 'Le groupe de joelle',
  90. "Joelle, et ben elle aime bien la musique d'abord.",
  91. true, $this->entity_manager->merge($this->getReference('user_joelle')));
  92. // Followers
  93. $this->theyFollowGroup(array(
  94. $this->entity_manager->merge($this->getReference('user_bux')),
  95. $this->entity_manager->merge($this->getReference('user_jean'))
  96. ), $group_dudeldrum);
  97. $this->theyFollowGroup(array(
  98. $this->entity_manager->merge($this->getReference('user_bux')),
  99. $this->entity_manager->merge($this->getReference('user_jean')),
  100. $this->entity_manager->merge($this->getReference('user_paul')),
  101. $this->entity_manager->merge($this->getReference('user_bob'))
  102. ), $group_fan_de_psytrance);
  103. // Tags
  104. $this->groupHasTags(array(
  105. $this->entity_manager->merge($this->getReference('tag_medieval'))
  106. ), $group_dudeldrum);
  107. $this->groupHasTags(array(
  108. $this->entity_manager->merge($this->getReference('tag_psytrance'))
  109. ), $group_fan_de_psytrance);
  110. $this->groupHasTags(array(
  111. $this->entity_manager->merge($this->getReference('tag_chanteuse'))
  112. ), $group_joelle);
  113. $this->entity_manager->flush();
  114. }
  115. }