/** * @param Country $country * * @return array|Mandate[] */ public function getMandates(Country $country) : array { $datas = $this->manager->getDBResults('@Api/sql/elects/getMandates.sql.twig', ['country' => $country->getId()]); $mandates = []; foreach ($datas as $data) { $data = ArraysUtils::toMultiDimensional($data); $mandates[] = $this->hydrator->hydrateMandate($data['id'], $data['name'], $data['wikipedia'], $this->hydrator->hydrateZoneType($data['zone_type']['id'], $data['zone_type']['name'], $data['zone_type']['slug'], $data['zone_type']['level'], $country)); } return $mandates; }
/** * Test toMultiDimensional function. * * @see ArrayUtils::toMultiDimensional */ public function testToMultiDimensional() { $separator = '_'; $array = ['key1' . $separator . 'subkey1' => 'subvalue1', 'key1' . $separator . 'subkey2' => 'subvalue2', 'key2' . $separator . 'subkey1.subsubkey1' => 'subsubvalue1', 'key2' . $separator . 'subkey1.subsubkey2' => 'subsubvalue2']; $multidimensional = ArraysUtils::toMultiDimensional($array, $separator); $this->assertArrayHasKey('key1', $multidimensional); $this->assertArrayHasKey('key2', $multidimensional); $this->assertArraySubset(['subkey1' => 'subvalue1', 'subkey2' => 'subvalue2'], $multidimensional['key1']); $this->assertArrayHasKey('subkey1', $multidimensional['key2']); $this->assertArraySubset(['subsubkey1' => 'subsubvalue1', 'subsubkey2' => 'subsubvalue2'], $multidimensional['key2']['subkey1']); }
/** * @param $keywords * * @return array|ZoneResult[] * * @throws DBALException */ public function searchZones($keywords, Point $point = null, Country $country = null) { $datas = $this->manager->getDBResults('@Api/sql/search/zoneSearch.sql.twig', ['keywords' => $keywords, 'point' => $point, 'country' => $country]); $zones = []; foreach ($datas as $data) { $data = ArraysUtils::toMultiDimensional($data); $zone = $this->hydrator->hydrateZone($data['id'], $this->hydrator->hydrateCountry($data['country']['id'], $data['country']['name'], $data['country']['iso_code_2_letters']), $this->hydrator->hydrateZoneType($data['zone_type']['id'], $data['zone_type']['name'], $data['zone_type']['slug'], $data['zone_type']['level'], $this->hydrator->hydrateCountry($data['country']['id'], $data['country']['name'], $data['country']['iso_code_2_letters'])), $data['ref'], $data['ref_official'], $data['name'], $data['slug'], $data['population'], $data['wikipedia'], !is_null($data['date_from']) ? new \DateTime($data['date_from']) : null, !is_null($data['date_until']) ? new \DateTime($data['date_until']) : null, $data['shape_polygon'], $data['shape_multipolygon']); $zones[] = new ZoneResult($zone, is_null($data['distance']) ? null : floatval($data['distance'])); } return $zones; }
/** * @param string $slug * @param string|null $zoneType * @param string|null $country * * @return Zone * * @throws DBALException * @throws ZoneNotFoundException */ public function getZoneFromSlug(string $slug, string $zoneType = null, string $country = null) : Zone { $zone = $this->manager->getDBResults('@Api/sql/zones/getZoneFromSlug.sql.twig', ['slug' => $slug, 'zoneType' => $zoneType, 'country' => $country], new ZoneNotFoundException($slug), true); $zone = ArraysUtils::toMultiDimensional($zone); return $this->hydrator->hydrateZone($zone['id'], $this->hydrator->hydrateCountry($zone['country']['id'], $zone['country']['name'], $zone['country']['iso_code_2_letters']), $this->hydrator->hydrateZoneType($zone['zone_type']['id'], $zone['zone_type']['name'], $zone['zone_type']['slug'], $zone['zone_type']['level'], $this->hydrator->hydrateCountry($zone['country']['id'], $zone['country']['name'], $zone['country']['iso_code_2_letters'])), $zone['ref'], $zone['ref_official'], $zone['name'], $zone['slug'], $zone['population'], $zone['wikipedia'], is_null($zone['date_from']) ? new \DateTime($zone['date_from']) : null, is_null($zone['date_until']) ? new \DateTime($zone['date_until']) : null, $zone['shape_polygon'], $zone['shape_multipolygon']); }