/** * assign smarty variables to the template that will be used by google api to plot the contacts * * @param array $contactIds list of contact ids that we need to plot * @param int $locationId location_id * * @return string the location of the file we have created * @access protected */ function createLocation($contactIds, $locationId = null) { $config =& CRM_Core_Config::singleton(); $this->assign('query', 'CiviCRM Search Query'); $this->assign('mapProvider', $config->mapProvider); $this->assign('mapKey', $config->mapAPIKey); require_once 'CRM/Contact/BAO/Contact.php'; $locations =& CRM_Contact_BAO_Contact::getMapInfo($this->_contactIds, $locationId); if (empty($locations)) { CRM_Utils_System::statusBounce(ts('This contact\'s primary address does not contain latitude/longitude information and can not be mapped.')); } else { $session =& CRM_Core_Session::singleton(); $redirect = $session->readUserContext(); $additionalBreadCrumb = "<a href=\"{$redirect}\">" . ts('Search Results') . '</a>'; CRM_Utils_System::appendBreadCrumb($additionalBreadCrumb); } $this->assign_by_ref('locations', $locations); $sumLat = $sumLng = 0; $maxLat = $maxLng = -400; $minLat = $minLng = +400; foreach ($locations as $location) { $sumLat += $location['lat']; $sumLng += $location['lng']; if ($location['lat'] > $maxLat) { $maxLat = $location['lat']; } if ($location['lat'] < $minLat) { $minLat = $location['lat']; } if ($location['lng'] > $maxLng) { $maxLng = $location['lng']; } if ($location['lng'] < $minLng) { $minLng = $location['lng']; } } $center = array('lat' => (double) $sumLat / count($locations), 'lng' => (double) $sumLng / count($locations)); $span = array('lat' => (double) ($maxLat - $minLat), 'lng' => (double) ($maxLng - $minLng)); $this->assign_by_ref('center', $center); $this->assign_by_ref('span', $span); }