Example #1
0
 /**
  * @param array $data
  *
  * @return $this|self
  */
 protected static function map(array &$data)
 {
     /** @var PlaceDetail $return */
     $return = parent::map($data);
     $return->phone = self::extract($data, 'international_phone_number');
     $return->website = self::extract($data, 'website');
     $return->rating = self::extract($data, 'rating');
     if (isset($data['reviews'])) {
         foreach (self::extract($data, 'reviews') as $current) {
             $return->reviews[] = new Review($current['author_name'], $current['language'], $current['rating'], $current['text'], $current['time'], $current['author_url'] ?? null);
         }
     }
     if (isset($data['opening_hours']['periods'])) {
         foreach (self::extract($data, 'opening_hours/periods') as $current) {
             if (isset($current['open']) && isset($current['close'])) {
                 list($hour, $min) = self::extractHourMin($current['open']);
                 $open = new DateTime();
                 $open->setTimezone('UTC');
                 $open->next($current['open']['day']);
                 $open->hour($hour);
                 $open->minute($min);
                 $open->second(0);
                 $open->addMinutes(-$return->utcOffset);
                 $open->setTimezone(date_default_timezone_get());
                 list($hour, $min) = self::extractHourMin($current['close']);
                 $close = new DateTime();
                 $close->setTimezone('UTC');
                 $close->next($current['close']['day']);
                 $close->hour($hour);
                 $close->minute($min);
                 $close->second(0);
                 $close->addMinutes(-$return->utcOffset);
                 $close->setTimezone(date_default_timezone_get());
                 $return->openingHours[] = new OpeningHoursPeriod($open, $close);
             }
         }
     }
     return $return;
 }