/** * Build js string to create the map js object * * @return string */ public function getJs() { $this->setPrefilters(); $params = $this->getParams(); if (!$this->getRequiredFiltersFound() && $params->get('fb_gm_always_show_map', '0') != '1') { return ''; } $app = JFactory::getApplication(); $input = $app->input; $params = $this->getParams(); $viz = $this->getVisualization(); $opts = new stdClass(); $opts->lat = 0; $opts->lon = 0; $opts->icons = $this->getJSIcons(); $opts->polyline = $this->getPolyline(); $opts->id = $viz->id; $opts->zoomlevel = (int) $params->get('fb_gm_zoomlevel'); $opts->scalecontrol = (bool) $params->get('fb_gm_scalecontrol'); $opts->scrollwheel = (bool) $params->get('fb_gm_scrollwheelcontrol'); $opts->maptypecontrol = (bool) $params->get('fb_gm_maptypecontrol'); $opts->overviewcontrol = (bool) $params->get('fb_gm_overviewcontrol'); $opts->streetView = (bool) $params->get('street_view'); $opts->center = $params->get('fb_gm_center'); if ($opts->center == 'querystring') { $opts->lat = $input->get('latitude', '') == '' ? $opts->lat : (double) $input->get('latitude'); $opts->lon = $input->get('longitude', '') == '' ? $opts->lon : (double) $input->get('longitude'); $opts->zoomlevel = $input->get('zoom', '') == '' ? $opts->zoomlevel : $input->get('zoom'); } $opts->ajax_refresh = (bool) $params->get('fb_gm_ajax_refresh', false); $opts->ajax_refresh_center = (bool) $params->get('fb_gm_ajax_refresh_center', true); $opts->maptype = $params->get('fb_gm_maptype'); $opts->clustering = (bool) $params->get('fb_gm_clustering', '0') == '1'; $opts->cluster_splits = $params->get('fb_gm_cluster_splits'); $opts->icon_increment = $params->get('fb_gm_cluster_icon_increment'); $opts->refresh_rate = $params->get('fb_gm_ajax_refresh_rate'); $opts->use_cookies = (bool) $params->get('fb_gm_use_cookies'); $opts->container = $this->getContainerId(); $opts->polylinewidth = (array) $params->get('fb_gm_polyline_width'); $opts->polylinecolour = (array) $params->get('fb_gm_polyline_colour'); $usePolygon = (array) $params->get('fb_gm_use_polygon'); $opts->use_polygon = (bool) JArrayHelper::getValue($usePolygon, 0, true); $opts->polygonopacity = $params->get('fb_gm_polygon_fillOpacity', 0.35); $opts->polygonfillcolour = (array) $params->get('fb_gm_polygon_fillColor'); $opts->overlay_urls = (array) $params->get('fb_gm_overlay_urls'); $opts->overlay_labels = (array) $params->get('fb_gm_overlay_labels'); $opts->use_overlays = (int) $params->get('fb_gm_use_overlays', '0'); $opts->use_overlays_sidebar = $opts->use_overlays && (int) $params->get('fb_gm_use_overlays_sidebar', '0'); $opts->use_groups = (bool) $params->get('fb_gm_group_sidebar', 0); $opts->groupTemplates = $this->getGroupTemplates(); $opts->zoomStyle = (int) $params->get('fb_gm_zoom_control_style', 0); $opts->zoom = $params->get('fb_gm_zoom', 1); $opts->show_radius = $params->get('fb_gm_use_radius', '1') == '1' ? true : false; $opts->radius_defaults = (array) $params->get('fb_gm_radius_default'); $opts->radius_fill_colors = (array) $params->get('fb_gm_radius_fill_color'); $opts->styles = FabGoogleMapHelper::styleJs($params); $opts = json_encode($opts); $ref = $this->getJSRenderContext(); $js = array(); $js[] = "\t{$ref} = new FbGoogleMapViz('table_map', {$opts})"; $js[] = "\t" . "Fabrik.addBlock('{$ref}', {$ref});"; $js[] = "\n"; return implode("\n", $js); }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $params = $this->getParams(); $id = $this->getHTMLId($repeatCounter); $element = $this->getElement(); $formModel = $this->getFormModel(); $data = $formModel->data; $v = $this->getValue($data, $repeatCounter); $zoomlevel = (int) $params->get('fb_gm_zoomlevel'); $o = $this->_strToCoords($v, $zoomlevel); $dms = $this->_strToDMS($v); $opts = $this->getElementJSOptions($repeatCounter); $this->geoJs(); $this->OSRefJs(); $mapShown = $this->isEditable() || !$this->isEditable() && $v != ''; $opts->lat = (double) $o->coords[0]; $opts->lon = (double) $o->coords[1]; $opts->lat_dms = (double) $dms->coords[0]; $opts->rowid = (int) FArrayHelper::getValue($data, 'rowid'); $opts->lon_dms = (double) $dms->coords[1]; $opts->zoomlevel = (int) $o->zoomlevel; $opts->control = $params->get('fb_gm_mapcontrol'); $opts->scalecontrol = (bool) $params->get('fb_gm_scalecontrol'); $opts->maptypecontrol = (bool) $params->get('fb_gm_maptypecontrol'); $opts->overviewcontrol = (bool) $params->get('fb_gm_overviewcontrol'); $opts->traffic = (bool) $params->get('fb_gm_trafficlayer', '0'); $opts->drag = (bool) $formModel->isEditable(); $opts->staticmap = $this->_useStaticMap() ? true : false; $opts->maptype = $params->get('fb_gm_maptype'); $opts->scrollwheel = (bool) $params->get('fb_gm_scroll_wheel'); $opts->streetView = (bool) $params->get('fb_gm_street_view'); $opts->latlng = $this->isEditable() ? (bool) $params->get('fb_gm_latlng', false) : false; $opts->sensor = (bool) $params->get('fb_gm_sensor', false); $opts->latlng_dms = $this->isEditable() ? (bool) $params->get('fb_gm_latlng_dms', false) : false; $opts->latlng_osref = $this->isEditable() ? (bool) $params->get('fb_gm_latlng_osref', false) : false; $opts->geocode = $params->get('fb_gm_geocode', '0'); $opts->geocode_event = $params->get('fb_gm_geocode_event', 'button'); $opts->geocode_fields = array(); // geocode_on_load, 0 = no, 1 = new, 2 = edit, 3 = always $geocode_on_load = $params->get('fb_gm_geocode_on_load', '0'); $opts->geocode_on_load = $this->isEditable() && ($geocode_on_load == 1 && $formModel->isNewRecord() || $geocode_on_load == 2 && !$formModel->isNewRecord() || $geocode_on_load == 3); $opts->auto_center = (bool) $params->get('fb_gm_auto_center', false); $opts->styles = FabGoogleMapHelper::styleJs($params); if ($opts->geocode == '2') { foreach (array('addr1', 'addr2', 'city', 'state', 'zip', 'country') as $which_field) { $field_id = ''; if ($field_id = $this->_getGeocodeFieldId($which_field, $repeatCounter)) { $opts->geocode_fields[] = $field_id; } } // remove any duplicates in case they have misunderstood and selected the same element for all fields $opts->geocode_fields = array_unique($opts->geocode_fields); } $opts->reverse_geocode = $params->get('fb_gm_reverse_geocode', '0') == '0' ? false : true; if ($opts->reverse_geocode) { foreach (array('route' => 'addr1', 'neighborhood' => 'addr2', 'locality' => 'city', 'administrative_area_level_1' => 'state', 'postal_code' => 'zip', 'country' => 'country', 'formatted_address' => 'formatted_address') as $google_field => $which_field) { $field_id = ''; if ($field_id = $this->_getGeocodeFieldId($which_field, $repeatCounter)) { $opts->reverse_geocode_fields[$google_field] = $field_id; } } } $opts->center = (int) $params->get('fb_gm_defaultloc', 0); $opts->use_radius = $params->get('fb_gm_radius', '0') == '0' || !$mapShown ? false : true; $opts->radius_fitmap = $params->get('fb_gm_radius_fitmap', '0') == '0' ? false : true; $opts->radius_write_element = $opts->use_radius ? $this->_getFieldId('fb_gm_radius_write_element', $repeatCounter) : false; $opts->radius_read_element = $opts->use_radius ? $this->_getFieldId('fb_gm_radius_read_element', $repeatCounter) : false; $opts->radius_ro_value = $opts->use_radius ? $this->_getFieldValue('fb_gm_radius_read_element', $data, $repeatCounter) : false; $opts->radius_default = $params->get('fb_gm_radius_default', '50'); if ($opts->radius_ro_value === false) { $opts->radius_ro_value = $opts->radius_default; } $opts->radius_unit = $params->get('fb_gm_radius_unit', 'm'); $opts->radius_resize_icon = COM_FABRIK_LIVESITE . 'media/com_fabrik/images/radius_resize.png'; $opts->radius_resize_off_icon = COM_FABRIK_LIVESITE . 'media/com_fabrik/images/radius_resize.png'; if ($this->app->input->get('view', '') === 'details') { $opts->directionsFromElement = $this->_getFieldId('fb_gm_directions_from', $repeatCounter); if ($opts->directionsFromElement !== false) { $directionsFromCoords = $this->_getFieldValue('fb_gm_directions_from', $data, $repeatCounter); $o = $this->_strToCoords($directionsFromCoords, 14); $opts->directionsFromLat = trim($o->coords[0]); $opts->directionsFromLon = trim($o->coords[1]); $opts->directionsFrom = true; } } else { $opts->directionsFrom = false; } return array('FbGoogleMap', $id, $opts); }
/** * Returns javascript which creates an instance of the class defined in formJavascriptClass() * * @param int $repeatCounter Repeat group counter * * @return array */ public function elementJavascript($repeatCounter) { $params = $this->getParams(); $id = $this->getHTMLId($repeatCounter); $element = $this->getElement(); $formModel = $this->getFormModel(); $data = $formModel->data; $v = $this->getValue($data, $repeatCounter); $zoomlevel = (int) $params->get('fb_gm_zoomlevel'); $o = $this->_strToCoords($v, $zoomlevel); $dms = $this->_strToDMS($v); $opts = $this->getElementJSOptions($repeatCounter); $this->geoJs(); $mapShown = $this->isEditable() || !$this->isEditable() && $v != ''; $opts->lat = (double) $o->coords[0]; $opts->lon = (double) $o->coords[1]; $opts->lat_dms = (double) $dms->coords[0]; $opts->rowid = (int) JArrayHelper::getValue($data, 'rowid'); $opts->lon_dms = (double) $dms->coords[1]; $opts->zoomlevel = (int) $o->zoomlevel; $opts->control = $params->get('fb_gm_mapcontrol'); $opts->scalecontrol = (bool) $params->get('fb_gm_scalecontrol'); $opts->maptypecontrol = (bool) $params->get('fb_gm_maptypecontrol'); $opts->overviewcontrol = (bool) $params->get('fb_gm_overviewcontrol'); $opts->drag = (bool) $formModel->isEditable(); $opts->staticmap = $this->_useStaticMap() ? true : false; $opts->maptype = $params->get('fb_gm_maptype'); $opts->scrollwheel = (bool) $params->get('fb_gm_scroll_wheel'); $opts->streetView = (bool) $params->get('fb_gm_street_view'); $opts->latlng = $this->isEditable() ? (bool) $params->get('fb_gm_latlng', false) : false; $opts->sensor = (bool) $params->get('fb_gm_sensor', false); $opts->latlng_dms = $this->isEditable() ? (bool) $params->get('fb_gm_latlng_dms', false) : false; $opts->geocode = $params->get('fb_gm_geocode', '0'); $opts->geocode_event = $params->get('fb_gm_geocode_event', 'button'); $opts->geocode_fields = array(); $opts->auto_center = (bool) $params->get('fb_gm_auto_center', false); $opts->styles = FabGoogleMapHelper::styleJs($params); if ($opts->geocode == '2') { foreach (array('addr1', 'addr2', 'city', 'state', 'zip', 'country') as $which_field) { $field_id = ''; if ($field_id = $this->_getGeocodeFieldId($which_field, $repeatCounter)) { $opts->geocode_fields[] = $field_id; } } } $opts->reverse_geocode = $params->get('fb_gm_reverse_geocode', '0') == '0' ? false : true; if ($opts->reverse_geocode) { foreach (array('route' => 'addr1', 'neighborhood' => 'addr2', 'locality' => 'city', 'administrative_area_level_1' => 'state', 'postal_code' => 'zip', 'country' => 'country') as $google_field => $which_field) { $field_id = ''; if ($field_id = $this->_getGeocodeFieldId($which_field, $repeatCounter)) { $opts->reverse_geocode_fields[$google_field] = $field_id; } } } $opts->center = (int) $params->get('fb_gm_defaultloc', 0); $opts->use_radius = $params->get('fb_gm_radius', '0') == '0' || !$mapShown ? false : true; $opts->radius_fitmap = $params->get('fb_gm_radius_fitmap', '0') == '0' ? false : true; $opts->radius_write_element = $opts->use_radius ? $this->_getFieldId('fb_gm_radius_write_element', $repeatCounter) : false; $opts->radius_read_element = $opts->use_radius ? $this->_getFieldId('fb_gm_radius_read_element', $repeatCounter) : false; $opts->radius_ro_value = $opts->use_radius ? $this->_getFieldValue('fb_gm_radius_read_element', $data, $repeatCounter) : false; $opts->radius_default = $params->get('fb_gm_radius_default', '50'); if ($opts->radius_ro_value === false) { $opts->radius_ro_value = $opts->radius_default; } $opts->radius_unit = $params->get('fb_gm_radius_unit', 'm'); $opts->radius_resize_icon = COM_FABRIK_LIVESITE . 'media/com_fabrik/images/radius_resize.png'; $opts->radius_resize_off_icon = COM_FABRIK_LIVESITE . 'media/com_fabrik/images/radius_resize.png'; return array('FbGoogleMap', $id, $opts); }