public function search(Survivor $survivor) { $queryBuilder = $this->createQueryBuilder('s'); $queryBuilder->leftJoin('s.camp', 'c')->addSelect('c')->where('s.firstname = :firstname')->setParameter('firstname', ucfirst($survivor->getFirstname()))->andWhere('s.lastname = :lastname')->setParameter('lastname', ucfirst($survivor->getLastname())); if (!empty($survivor->getBirthday())) { $queryBuilder->andWhere('s.birthday = :birthday')->setParameter('birthday', $survivor->getBirthday()); } if (!empty($survivor->getEyesColor())) { $queryBuilder->andWhere('s.eyesColor = :eyescolor')->setParameter('eyescolor', $survivor->getEyesColor()); } if (!empty($survivor->getWeight())) { //Convert weight if necessary if ($survivor->getWeightUnit() == "kg") { $converter = new Converter(); $weight = $converter->fromKgToLb($survivor->getWeight()); $survivor->setWeight($weight); } $queryBuilder->andWhere($queryBuilder->expr()->between(':weight', 's.weight - 5', 's.weight + 5'))->setParameter('weight', $survivor->getWeight()); } if (!empty($survivor->getHeight())) { //Convert height if necessary if ($survivor->getHeightUnit() == "cm") { $converter = new Converter(); $height = $converter->fromCmToInch($survivor->getHeight()); $survivor->setHeight($height); } $queryBuilder->andWhere($queryBuilder->expr()->between(':height', 's.height - 5', 's.height + 5'))->setParameter('height', $survivor->getHeight()); } if (!empty($survivor->getHairColor())) { $queryBuilder->andWhere('s.hairColor = :haircolor')->setParameter('haircolor', $survivor->getHairColor()); } return $queryBuilder->getQuery()->getResult(); }
/** * {@inheritDoc} */ public function load(ObjectManager $manager) { /** * Coefficient between kilogrammes and pounds * * @var float */ $WEIGHTCOEFFICIENT = 2.20458554; /** * Coefficient between centimeters and inches * * @var float */ $HEIGHTCOEFFICIENT = 2.54; $firstnamesMale = array('John', 'Luke', 'Mike', 'Anakin', 'Bruce', 'Clark', 'Peet', 'Jack', 'Harry', 'Peter', 'Ron', 'Chuck', 'Cordel', 'Aladdin'); $firstnamesFemale = array('Hermione', 'Sarah', 'Jasmine', 'Taslima', 'Alix', 'Padme', 'Rachel', 'Rose', 'Jane'); $lastnamesMale = array('Connor', 'Skywalker', 'Lee', 'Wayne', 'Kent', 'Sparrow', 'Potter', 'Parker', 'Weasley', 'Norris', 'Walker'); $lastnamesFemale = array('Granger', 'Connor', 'Amidala', 'Kent', 'Parker', 'Potter'); $firstnames = array($firstnamesMale, $firstnamesFemale); $lastnames = array($lastnamesMale, $lastnamesFemale); $genders = array('m', 'f'); $survivorsNumber = 50000; $camps = $manager->getRepository('XaliCampBundle:Camp')->findAll(); $eyesColors = array('brown', 'green', 'blue', 'grey', 'black', 'other'); $hairColors = array('blond', 'blue', 'brown', 'pink', 'purple', 'red', 'other'); for ($i = 0; $i < $survivorsNumber; $i++) { $maleOrFemale = rand(0, count($genders) - 1); $survivor = new Survivor(); $survivor->setGender($genders[$maleOrFemale]); //Today minus a number of days between 3 and 10 years $daysNumber = rand(1095, 146000); $birthday = new \DateTime(); $birthday->sub(new \DateInterval('P' . $daysNumber . 'D')); $survivor->setBirthday($birthday); $camp = $camps[rand(0, count($camps) - 1)]; //Each 15 times, survivor has no camp if ($i % 15 != 0) { $survivor->setCamp($camp); } else { $survivor->setCamp(null); } $firstname = $firstnames[$maleOrFemale][rand(0, count($firstnames[$maleOrFemale]) - 1)]; $lastname = $lastnames[$maleOrFemale][rand(0, count($lastnames[$maleOrFemale]) - 1)]; $survivor->setFirstname($firstname); $survivor->setLastname($lastname); $survivor->setHairColor($hairColors[rand(0, count($hairColors) - 1)]); $survivor->setEyesColor($eyesColors[rand(0, count($eyesColors) - 1)]); //Set height and weight according to age $years = $daysNumber / 365; if ($years <= 6) { $heightInCm = rand(60, 110); } elseif ($years <= 12) { $heightInCm = rand(110, 150); } else { $heightInCm = rand(150, 200); } $genderCoeff = $survivor->getGender() == 'f' ? 2.5 : 4; //Set coherent weight according to height $weightInKg = $heightInCm - 100 - ($heightInCm - 150) / $genderCoeff; $weight = $weightInKg * $WEIGHTCOEFFICIENT; $height = $heightInCm / $HEIGHTCOEFFICIENT; $survivor->setWeight($weight); $survivor->setHeight($height); $manager->persist($survivor); } $manager->flush(); }
/** * Convert weight and height if necessary * * @param \Xali\Bundle\SurvivorBundle\Entity\Survivor $survivor * @param \Xali\Bundle\SurvivorBundle\Converter\Converter $converter * @author Anthony Bocci <*****@*****.**> */ private function convertWeightAndHeight($survivor, $converter) { //If weight unit is kilogrammes if ($survivor->getWeightUnit() == "kg") { $survivor->setWeight($converter->fromKgToLb($survivor->getWeight())); } //If height unit is centimeters if ($survivor->getHeightUnit() == "cm") { $survivor->setHeight($converter->fromCmToInch($survivor->getHeight())); } }