public function init() { $settings = $this->getSettings(); /* craft()->on('postmaster.init', function(Event $event) { require_once 'GoogleMapsParcelType.php'; craft()->postmaster->registerParcelType('Craft\GoogleMapsParcelType'); }); */ if ($settings->enableGeocoder) { craft()->on('entries.saveEntry', function (Event $event) use($settings) { $entry = $event->params['entry']; $content = $entry->getContent(); // If section being saved matches a section set in the geocode settings if (in_array($entry->sectionId, $settings->geocodeSections)) { $address = array(); foreach (explode("\r\n", $settings->geocodeFields) as $field) { if ($value = trim($content->getAttribute(trim($field)))) { if (!empty($value)) { $address[] = trim($value); } } } // If no address was entered, return script with no changes to db. if (!count($address)) { return; } $response = craft()->googleMaps_geocoder->geocode($address); if ($response->status == 'OK') { $geocodeResponse = $response->results[0]; foreach ($settings->mapFields as $mapFieldId) { $mapField = craft()->fields->getFieldById($mapFieldId); $mapData = json_decode($content->{$mapField->handle}); $mapDataModel = new GoogleMaps_MapDataModel((array) $mapData); // Update marker if exists, otherwise add a new marker if ($marker = $mapDataModel->getMarker(0)) { $marker->lat = $geocodeResponse->geometry->location->lat; $marker->lng = $geocodeResponse->geometry->location->lng; $marker->address = $geocodeResponse->formatted_address; $marker->addressComponents = $geocodeResponse->address_components; if (!$marker->customContent) { $marker->customContent = GoogleMaps_MarkerModel::defaultContent($geocodeResponse->formatted_address); } } else { $marker = GoogleMaps_MarkerModel::populateModel(array('lat' => $geocodeResponse->geometry->location->lat, 'lng' => $geocodeResponse->geometry->location->lng, 'address' => $geocodeResponse->formatted_address, 'addressComponents' => $geocodeResponse->address_components, 'content' => GoogleMaps_MarkerModel::defaultContent($geocodeResponse->formatted_address))); $mapDataModel->addMarker($marker); } $content->{$mapField->handle} = $mapDataModel->toJson(); craft()->content->saveContent($entry); } } } }); } }
public function getMarkers() { $return = array(); foreach ($this->markers as $index => $marker) { if (get_class($marker) != 'Craft\\GoogleMaps_MarkerModel') { $marker = GoogleMaps_MarkerModel::populateModel((array) $marker); } if ($this->queryParams) { $marker->isWithinProximity($this->queryParams); } $return[] = $marker; } if ($this->queryParams) { usort($return, array($this, 'sortByDistanceAsc')); } return $return; }