Browse Source

Merge pull request #1239 from jloguercio/1.11.x

Added Geolocalization plugin to user_edit.php
José Loguercio 8 years ago
parent
commit
9407241c77
2 changed files with 134 additions and 5 deletions
  1. 131 4
      main/admin/user_edit.php
  2. 3 1
      main/inc/lib/usermanager.lib.php

+ 131 - 4
main/admin/user_edit.php

@@ -68,16 +68,16 @@ function confirmation(name) {
 }
 </script>';
 
+$userGeolocalization = api_get_setting('enable_profile_user_address_geolocalization') == 'true';
+
 $htmlHeadXtra[] = '<link  href="'. api_get_path(WEB_PATH) .'web/assets/cropper/dist/cropper.min.css" rel="stylesheet">';
 $htmlHeadXtra[] = '<script src="'. api_get_path(WEB_PATH) .'web/assets/cropper/dist/cropper.min.js"></script>';
+$htmlHeadXtra[] = '<script type="text/javascript" src="//maps.googleapis.com/maps/api/js?sensor=true" ></script>';
 $htmlHeadXtra[] = '<script>
 $(document).ready(function() {
     var $image = $("#previewImage");
     var $input = $("[name=\'cropResult\']");
     var $cropButton = $("#cropButton");
-    var canvas = "";
-    var imageWidth = "";
-    var imageHeight = "";
     
     $("input:file").change(function() {
         var oFReader = new FileReader();
@@ -146,6 +146,106 @@ $user_data['old_password'] = $user_data['password'];
 $user_data['registration_date'] = api_get_local_time($user_data['registration_date']);
 unset($user_data['password']);
 
+if ($userGeolocalization) {
+	$htmlHeadXtra[] = '<script>
+    $(document).ready(function() {
+
+        var address = "' . $user_data['address'] . '";
+        initializeGeo(address, false);
+
+        $("#geolocalization").on("click", function() {
+            var address = $("#address").val();
+            initializeGeo(address, false);
+            return false;
+        });
+
+        $("#myLocation").on("click", function() {
+            myLocation();
+            return false;
+        });
+
+        $("#address").keypress(function (event) {
+            if (event.which == 13) {
+                $("#geolocalization").click();
+                return false;
+            }
+        });
+    });
+
+    function myLocation() {
+        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(false, latLng)
+            };
+
+            var geoError = function(error) {
+                alert("Geocode ' . get_lang('Error') . ': " + error);
+            };
+
+            var geoOptions = {
+                enableHighAccuracy: true
+            };
+
+            navigator.geolocation.getCurrentPosition(geoPosition, geoError, geoOptions);
+        }
+    }
+
+    function initializeGeo(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 = new google.maps.Map(document.getElementById("map"), 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.setCenter(results[0].geometry.location);
+                        if (!address) {
+                            $("#address").val(results[0].formatted_address);
+                        }
+                        var infowindow = new google.maps.InfoWindow({
+                            content: "<b>" + $("#address").val() + "</b>",
+                            size: new google.maps.Size(150, 50)
+                        });
+
+                        var marker = new google.maps.Marker({
+                            position: results[0].geometry.location,
+                            map: map,
+                            title: $("#address").val()
+                        });
+                        google.maps.event.addListener(marker, "click", function() {
+                            infowindow.open(map, marker);
+                        });
+                    } else {
+                        alert("' . get_lang("NotFound") . '");
+                    }
+
+                } else {
+                    alert("Geocode ' . get_lang('Error') . ': " + status);
+                }
+            });
+        }
+    }
+
+    </script>';
+}
+
 // Create the form
 $form = new FormValidator(
     'user_edit',
@@ -205,6 +305,32 @@ if (api_get_setting('openid_authentication') == 'true') {
 // Phone
 $form->addElement('text', 'phone', get_lang('PhoneNumber'));
 
+if ($userGeolocalization) {
+	// Geolocation
+	$form->addElement('text', 'address', get_lang('AddressField'), ['id' => 'address']);
+	$form->addHtml('
+        <div class="form-group">
+            <label for="geolocalization" class="col-sm-2 control-label"></label>
+            <div class="col-sm-8">
+                <button class="null btn btn-default " id="geolocalization" name="geolocalization" type="submit"><em class="fa fa-map-marker"></em> '.get_lang('Geolocalization').'</button>
+                <button class="null btn btn-default " id="myLocation" name="myLocation" type="submit"><em class="fa fa-crosshairs"></em> '.get_lang('MyLocation').'</button>
+            </div>
+        </div>
+    ');
+
+	$form->addHtml('
+        <div class="form-group">
+            <label for="map" class="col-sm-2 control-label">
+                '.get_lang('Map').'
+            </label>
+            <div class="col-sm-8">
+                <div name="map" id="map" style="width:100%; height:300px;">
+                </div>
+            </div>
+        </div>
+    ');
+}
+
 // Picture
 $form->addElement('file', 'picture', get_lang('AddPicture'), array('id' => 'picture', 'class' => 'picture-form'));
 $allowed_picture_types = array ('jpg', 'jpeg', 'png', 'gif');
@@ -477,7 +603,8 @@ if ($form->validate()) {
             $language,
             null,
             $send_mail,
-            $reset_password
+            $reset_password,
+			$user['address']
         );
 
         if (isset($user['student_boss'])) {

+ 3 - 1
main/inc/lib/usermanager.lib.php

@@ -859,7 +859,8 @@ class UserManager
         $language = 'english',
         $encrypt_method = '',
         $send_email = false,
-        $reset_password = 0
+        $reset_password = 0,
+        $address
     ) {
         $hook = HookUpdateUser::create();
         if (!empty($hook)) {
@@ -932,6 +933,7 @@ class UserManager
             ->setEmail($email)
             ->setOfficialCode($official_code)
             ->setPhone($phone)
+            ->setAddress($address)
             ->setPictureUri($picture_uri)
             ->setExpirationDate($expiration_date)
             ->setActive($active)