Added geolocalization coordinates extra field - Refs BT#11371

pull/2487/head
José Loguercio 9 years ago
parent 7e6069b54d
commit e826fda7e2
  1. 159
      main/inc/lib/extra_field.lib.php

@ -67,6 +67,7 @@ class ExtraField extends Model
const FIELD_TYPE_LETTERS_SPACE = 22; const FIELD_TYPE_LETTERS_SPACE = 22;
const FIELD_TYPE_ALPHANUMERIC_SPACE = 23; const FIELD_TYPE_ALPHANUMERIC_SPACE = 23;
const FIELD_TYPE_GEOLOCALIZATION = 24; const FIELD_TYPE_GEOLOCALIZATION = 24;
const FIELD_TYPE_GEOLOCALIZATION_COORDINATES = 25;
public $type = 'user'; public $type = 'user';
public $pageName; public $pageName;
@ -414,6 +415,9 @@ class ExtraField extends Model
$types[self::FIELD_TYPE_GEOLOCALIZATION] = get_lang( $types[self::FIELD_TYPE_GEOLOCALIZATION] = get_lang(
'Geolocalization' 'Geolocalization'
); );
$types[self::FIELD_TYPE_GEOLOCALIZATION_COORDINATES] = get_lang(
'GeolocalizationCoordinates'
);
switch ($handler) { switch ($handler) {
case 'course': case 'course':
@ -1762,6 +1766,161 @@ EOF;
</div> </div>
'); ');
$form->addHtml('
<div class="form-group">
<label for="map_extra_'.$field_details['variable'].'" class="col-sm-2 control-label">
'.$field_details['display_text'].' - '.get_lang('Map').'
</label>
<div class="col-sm-8">
<div name="map_extra_'.$field_details['variable'].'" id="map_extra_'.$field_details['variable'].'" style="width:100%; height:300px;">
</div>
</div>
</div>
');
break;
case ExtraField::FIELD_TYPE_GEOLOCALIZATION_COORDINATES:
$dataValue = isset($extraData['extra_'.$field_details['variable']])
? $extraData['extra_'.$field_details['variable']]
: '';
$form->addElement(
'text',
'extra_'.$field_details['variable'],
$field_details['display_text'],
['id' => 'extra_'.$field_details['variable']]
);
$form->applyFilter('extra_'.$field_details['variable'], 'stripslashes');
$form->applyFilter('extra_'.$field_details['variable'], 'trim');
if (!$admin_permissions) {
if ($field_details['visible_to_self'] == 0) {
$form->freeze(
'extra_'.$field_details['variable']
);
}
}
$latLag = explode(",", $dataValue);
// if no value, set default coordinates value
if (empty($dataValue)) {
$lat = '-34.397';
$lng = '150.644';
} else {
$lat = $latLag[0];
$lng = $latLag[1];
}
$form->addHtml(
'<script>
$(document).ready(function() {
var lat = "' . $lat . '";
var lng = "' . $lng . '";
var latLng = new google.maps.LatLng(lat, lng);
initializeGeo'.$field_details['variable'].'(false, latLng);
$("#geolocalization_extra_'.$field_details['variable'].'").on("click", function() {
var latLng = $("#extra_'.$field_details['variable'].'").val().split(",");
var lat = latLng[0];
var lng = latLng[1];
var latLng = new google.maps.LatLng(lat, lng);
initializeGeo'.$field_details['variable'].'(false, latLng);
return false;
});
$("#myLocation_extra_'.$field_details['variable'].'").on("click", function() {
myLocation'.$field_details['variable'].'();
return false;
});
$("#extra_'.$field_details['variable'].'").keypress(function (event) {
if (event.which == 13) {
$("#geolocalization_extra_'.$field_details['variable'].'").click();
return false;
}
});
});
function myLocation'.$field_details['variable'].'() {
if (navigator.geolocation) {
var geoPosition = function(position) {
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var latLng = new google.maps.LatLng(lat, lng);
initializeGeo'.$field_details['variable'].'(false, latLng)
};
var geoError = function(error) {
alert("Geocode ' . get_lang('Error') . ': " + error);
};
var geoOptions = {
enableHighAccuracy: true
};
navigator.geolocation.getCurrentPosition(geoPosition, geoError, geoOptions);
}
}
function initializeGeo'.$field_details['variable'].'(address, latLng) {
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 15,
center: latlng,
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
},
navigationControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map_'.$field_details['variable'].' = new google.maps.Map(document.getElementById("map_extra_'.$field_details['variable'].'"), myOptions);
var parameter = address ? { "address": address } : latLng ? { "latLng": latLng } : false;
if (geocoder && parameter) {
geocoder.geocode(parameter, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
map_'.$field_details['variable'].'.setCenter(results[0].geometry.location);
$("#extra_'.$field_details['variable'].'").val(results[0].geometry.location.lat() + "," + results[0].geometry.location.lng());
var infowindow = new google.maps.InfoWindow({
content: "<b>" + $("#extra_'.$field_details['variable'].'").val() + "</b>",
size: new google.maps.Size(150, 50)
});
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map_'.$field_details['variable'].',
title: $("#extra_'.$field_details['variable'].'").val()
});
google.maps.event.addListener(marker, "click", function() {
infowindow.open(map_'.$field_details['variable'].', marker);
});
} else {
alert("' . get_lang("NotFound") . '");
}
} else {
alert("Geocode ' . get_lang('Error') . ': " + status);
}
});
}
}
</script>
');
$form->addHtml('
<div class="form-group">
<label for="geolocalization_extra_'.$field_details['variable'].'" class="col-sm-2 control-label"></label>
<div class="col-sm-8">
<button class="null btn btn-default " id="geolocalization_extra_'.$field_details['variable'].'" name="geolocalization_extra_'.$field_details['variable'].'" type="submit"><em class="fa fa-map-marker"></em> '.get_lang('Geolocalization').'</button>
<button class="null btn btn-default " id="myLocation_extra_'.$field_details['variable'].'" name="myLocation_extra_'.$field_details['variable'].'" type="submit"><em class="fa fa-crosshairs"></em> '.get_lang('MyLocation').'</button>
</div>
</div>
');
$form->addHtml(' $form->addHtml('
<div class="form-group"> <div class="form-group">
<label for="map_extra_'.$field_details['variable'].'" class="col-sm-2 control-label"> <label for="map_extra_'.$field_details['variable'].'" class="col-sm-2 control-label">

Loading…
Cancel
Save