X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/f110b8ba20232e0ceeb67390f8e672431868d32d..36367b3d9770a29f2e516e40524c5d4eef8a9aca:/DataFixtures/AirFixtures.php diff --git a/DataFixtures/AirFixtures.php b/DataFixtures/AirFixtures.php index cfaaa62..89593f0 100644 --- a/DataFixtures/AirFixtures.php +++ b/DataFixtures/AirFixtures.php @@ -1,63 +1,92 @@ - + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ namespace Rapsys\AirBundle\DataFixtures; -use Rapsys\AirBundle\Entity\Title; +use Doctrine\Bundle\FixturesBundle\Fixture; +use Doctrine\Persistence\ObjectManager; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; + +use Rapsys\AirBundle\Entity\Civility; use Rapsys\AirBundle\Entity\Group; use Rapsys\AirBundle\Entity\User; use Rapsys\AirBundle\Entity\Location; use Rapsys\AirBundle\Entity\Slot; -class AirFixtures extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Symfony\Component\DependencyInjection\ContainerAwareInterface { +/** + * {@inheritdoc} + */ +class AirFixtures extends Fixture { /** - * @var ContainerInterface + * Air fixtures constructor */ - private $container; - - public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null) - { - $this->container = $container; + public function __construct(protected ContainerInterface $container, protected UserPasswordHasherInterface $hasher) { } /** * {@inheritDoc} */ - public function load(\Doctrine\Common\Persistence\ObjectManager $manager) { - $encoder = $this->container->get('security.password_encoder'); + public function load(ObjectManager $manager) { + //Civility tree + $civilityTree = [ + 'Mister', + 'Madam', + 'Miss' + ]; - //Title tree - $titleTree = array( - 'M.' => 'Monsieur', - 'Mlle' => 'Mademoiselle', - 'Mme' => 'Madame' - ); + //Create titles + $civilitys = []; + foreach($civilityTree as $civilityData) { + $civility = new Civility($civilityData); + $manager->persist($civility); + $civilitys[$civilityData] = $civility; + unset($civility); + } + + //TODO: insert countries from https://raw.githubusercontent.com/raramuridesign/mysql-country-list/master/country-lists/mysql-country-list-detailed-info.sql + #CREATE TABLE `countries` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `code` varchar(2) NOT NULL, `alpha` varchar(3) NOT NULL, `title` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`), UNIQUE KEY `alpha` (`alpha`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + #insert into countries (code, alpha, title, created, updated) select countryCode, isoAlpha3, countryName, NOW(), NOW() FROM apps_countries_detailed ORDER BY countryCode ASC, isoAlpha3 ASC; + + //Dance tree + $danceTree = [ + 'Argentine Tango' => [ + 'Milonga', 'Class and milonga', 'Public class', 'Private class' + ] + ]; //Create titles - $titles = array(); - foreach($titleTree as $shortData => $titleData) { - $title = new Title(); - $title->setShort($shortData); - $title->setTitle($titleData); - $title->setCreated(new \DateTime('now')); - $title->setUpdated(new \DateTime('now')); - $manager->persist($title); - $titles[$shortData] = $title; - unset($title); + $dances = []; + foreach($danceTree as $danceTitle => $danceData) { + foreach($danceData as $danceType) { + $dance = new Dance($danceTitle, $danceType); + $manager->persist($dance); + unset($dance); + } } //Group tree - $groupTree = array( - 'ROLE_USER', - 'ROLE_ADMIN', - 'ROLE_SUPER' - ); + //XXX: ROLE_XXX is required by + $groupTree = [ + 'User', + 'Guest', + 'Regular', + 'Senior', + 'Admin' + ]; //Create groups - $groups = array(); + $groups = []; foreach($groupTree as $groupData) { $group = new Group($groupData); - $group->setCreated(new \DateTime('now')); - $group->setUpdated(new \DateTime('now')); $manager->persist($group); $groups[$groupData] = $group; unset($group); @@ -67,77 +96,58 @@ class AirFixtures extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Sy $manager->flush(); //User tree - $userTree = array( - array( - 'short' => 'M.', - 'group' => 'ROLE_SUPER', - 'mail' => 'airlibre@rapsys.eu', - 'pseudonym' => 'Rapsys', + $userTree = [ + [ + 'short' => 'Mr.', + 'group' => 'Admin', + 'mail' => 'tango@rapsys.eu', + 'pseudonym' => 'Milonga Raphaël', 'forename' => 'Raphaël', 'surname' => 'Gertz', + 'phone' => '+33677952829', 'password' => 'test' - ), - array( - 'short' => 'M.', - 'group' => 'ROLE_ADMIN', + ], + /*[ + 'short' => 'Mr.', + 'group' => 'Senior', + 'mail' => 'denis.courvoisier@wanadoo.fr', + 'pseudonym' => 'DJ Sined', + 'forename' => 'Denis', + 'surname' => 'Courvoisier', + 'phone' => '+33600000000', + 'password' => 'test' + ],*/ + [ + 'short' => 'Mr.', + 'group' => 'Senior', 'mail' => 'rannou402@orange.fr', - 'pseudonym' => 'Mitch', + 'pseudonym' => 'Trio Tango', 'forename' => 'Michel', 'surname' => 'Rannou', + 'phone' => '+33600000000', 'password' => 'test' - ), - array( - 'short' => 'Mlle', - 'group' => 'ROLE_ADMIN', + ], + /*[ + 'short' => 'Ms.', + 'group' => 'Regular', 'mail' => 'roxmaps@gmail.com', 'pseudonym' => 'Roxana', 'forename' => 'Roxana', 'surname' => 'Prado', + 'phone' => '+33600000000', 'password' => 'test' - ), - array( - 'short' => 'M.', - 'group' => 'ROLE_ADMIN', - 'mail' => 'majid.ghedjatti@gmail.com', - 'pseudonym' => 'El Guerrillero', - 'forename' => 'Majid', - 'surname' => 'Ghedjatti', - 'password' => 'test' - ), - array( - 'short' => 'M.', - 'group' => 'ROLE_ADMIN', - 'mail' => 'denis.courvoisier@wanadoo.fr', - 'pseudonym' => 'Sined', - 'forename' => 'Denis', - 'surname' => 'Courvoisier', - 'password' => 'test' - ), - array( - 'short' => 'M.', - 'group' => 'ROLE_ADMIN', - 'mail' => 'kastango13@gmail.com', - 'pseudonym' => 'Kastrat', - 'forename' => 'Kastrat', - 'surname' => 'Hasaj', - 'password' => 'test' - ), - ); + ],*/ + ]; //Create users - $users = array(); + $users = []; foreach($userTree as $userData) { - $user = new User(); - $user->setMail($userData['mail']); + $user = new User($userData['mail'], $userData['password'], $civilitys[$userData['short']], $userData['forename'], $userData['surname']); + #TODO: check that password is hashed correctly !!! + #$user->setPassword($this->hasher->hashPassword($user, $userData['password'])); $user->setPseudonym($userData['pseudonym']); - $user->setForename($userData['forename']); - $user->setSurname($userData['surname']); - $user->setPassword($encoder->encodePassword($user, $userData['password'])); - $user->setActive(true); - $user->setTitle($titles[$userData['short']]); + $user->setPhone($userData['phone']); $user->addGroup($groups[$userData['group']]); - $user->setCreated(new \DateTime('now')); - $user->setUpdated(new \DateTime('now')); $manager->persist($user); $users[] = $user; unset($user); @@ -147,62 +157,169 @@ class AirFixtures extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Sy $manager->flush(); //Location tree + //XXX: adding a new zipcode here requires matching accuweather uris in Command/WeatherCommand.php + //TODO: add descriptions as well $locationTree = [ [ - 'title' => 'Esplanade du Trocadéro', + 'title' => 'Garnier opera', + 'short' => 'Garnier', + 'address' => '10 Place de l\'Opéra', + 'zipcode' => '75009', + 'city' => 'Paris', + 'latitude' => 48.871268, + 'longitude' => 2.331832, + 'hotspot' => true, + 'indoor' => false + ], + [ + 'title' => 'Tino-Rossi garden', + 'short' => 'Docks', + 'address' => '2 Quai Saint-Bernard', + 'zipcode' => '75005', + 'city' => 'Paris', + 'latitude' => 48.847736, + 'longitude' => 2.360953, + 'hotspot' => true, + 'indoor' => false + ], + [ + 'title' => 'Trocadero esplanade', + 'short' => 'Trocadero', 'address' => '1 Avenue Hussein 1er de Jordanie', #75016 pour meteo-france, accuweather supporte 75116 'zipcode' => '75116', 'city' => 'Paris', - 'latitude' => 48.8619, - 'longitude' => 2.2888 + 'latitude' => 48.861888, + 'longitude' => 2.288853, + 'hotspot' => false, + 'indoor' => false ], [ - 'title' => 'Opéra Garnier', - 'address' => 'Place de l\'Opéra', - 'zipcode' => '75009', + 'title' => 'Colette place', + 'short' => 'Colette', + 'address' => 'Galerie du Théâtre Français', + 'zipcode' => '75001', + 'city' => 'Paris', + 'latitude' => 48.863219, + 'longitude' => 2.335847, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Swan island', + 'short' => 'Swan', + 'address' => 'Allée des Cygnes', + 'zipcode' => '75015', + 'city' => 'Paris', + 'latitude' => 48.849976, #48.849976 + 'longitude' => 2.279603, #2.2796029, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Jussieu esplanade', + 'short' => 'Jussieu', + 'address' => '25 rue des Fossés Saint-Bernard', + 'zipcode' => '75005', 'city' => 'Paris', - 'latitude' => 48.871365, - 'longitude' => 2.332026 + 'latitude' => 48.847955, #48.8479548 + 'longitude' => 2.353291, #2.3532907, + 'hotspot' => false, + 'indoor' => false ], [ - 'title' => 'Marché Saint Honoré', + 'title' => 'Orleans gallery', + 'short' => 'Orleans', + 'address' => '8 Galerie du Jardin', + 'zipcode' => '75001', + 'city' => 'Paris', + 'latitude' => 48.863885, + 'longitude' => 2.337387, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Orsay museum', + 'short' => 'Orsay', + 'address' => '1 rue de la Légion d\'Honneur', + 'zipcode' => '75007', + 'city' => 'Paris', + 'latitude' => 48.860418, + 'longitude' => 2.325815, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Saint-Honore market', + 'short' => 'Honore', 'address' => '1 Passage des Jacobins', 'zipcode' => '75001', 'city' => 'Paris', - 'latitude' => 48.8668, - 'longitude' => 2.331659 + 'latitude' => 48.866992, + 'longitude' => 2.331752, + 'hotspot' => false, + 'indoor' => false ], [ - 'title' => 'Jardin Tino-Rossi', - 'address' => '2 Quai Saint-Bernard', - 'zipcode' => '75005', + 'title' => 'Igor Stravinsky place', + 'short' => 'Stravinsky', + 'address' => '2 rue Brisemiche', + 'zipcode' => '75004', 'city' => 'Paris', - 'latitude' => 48.847736, - 'longitude' => 2.360953 + 'latitude' => 48.859244, + 'longitude' => 2.351289, + 'hotspot' => false, + 'indoor' => false ], [ - 'title' => 'Palais de Tokyo', - 'address' => '13 Avenue du Président Wilson', + 'title' => 'Tokyo palace', + 'short' => 'Tokyo', + 'address' => '14 Avenue de New York', 'zipcode' => '75116', 'city' => 'Paris', - 'latitude' => 48.864567, - 'longitude' => 2.296892 + 'latitude' => 48.863827, + 'longitude' => 2.297339, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Drawings\' garden', + 'short' => 'Villette', + 'address' => 'Allée du Belvédère', + 'zipcode' => '75019', + 'city' => 'Paris', + 'latitude' => 48.892503, + 'longitude' => 2.389300, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Louvre palace', + 'short' => 'Louvre', + 'address' => 'Quai François Mitterrand', + 'zipcode' => '75001', + 'city' => 'Paris', + 'latitude' => 48.860386, + 'longitude' => 2.332611, + 'hotspot' => false, + 'indoor' => false + ], + [ + 'title' => 'Monde garden', + 'address' => '63 avenue Pierre Mendès-France', + 'zipcode' => '75013', + 'city' => 'Paris', + 'latitude' => 48.840451, + 'longitude' => 2.367638, + 'hotspot' => false, + 'indoor' => false ] ]; //Create locations - $locations = array(); + $locations = []; foreach($locationTree as $locationData) { - $location = new Location(); - $location->setTitle($locationData['title']); - $location->setAddress($locationData['address']); - $location->setZipcode($locationData['zipcode']); - $location->setCity($locationData['city']); - $location->setLatitude($locationData['latitude']); - $location->setLongitude($locationData['longitude']); - $location->setCreated(new \DateTime('now')); - $location->setUpdated(new \DateTime('now')); + $location = new Location($locationData['title'], $locationData['address'], $locationData['zipcode'], $locationData['city'], $locationData['latitude'], $locationData['longitude'], $locationData['hotspot'], $locationData['indoor']); $manager->persist($location); $locations[$locationData['title']] = $location; unset($location); @@ -213,28 +330,16 @@ class AirFixtures extends \Doctrine\Bundle\FixturesBundle\Fixture implements \Sy //Slot tree $slotTree = [ - [ - 'begin' => '14:00:00 UTC', - 'end' => '19:00:00 UTC' - ], - [ - 'begin' => '19:00:00 UTC', - 'end' => '23:00:00 UTC' - ], - [ - 'begin' => '23:00:00 UTC', - 'end' => '02:00:00 UTC' - ] + 'Morning', + 'Afternoon', + 'Evening', + 'After' ]; //Create slots - $slots = array(); + $slots = []; foreach($slotTree as $slotData) { - $slot = new Slot(); - $slot->setBegin(new \DateTime($slotData['begin'])); - $slot->setEnd(new \DateTime($slotData['end'])); - $slot->setCreated(new \DateTime('now')); - $slot->setUpdated(new \DateTime('now')); + $slot = new Slot($slotData); $manager->persist($slot); $slots[$slot->getId()] = $slot; unset($slot);