Преглед изворни кода

Added coordinates look up for weather homepage item

CauseFX пре 6 година
родитељ
комит
adc4dfa828
4 измењених фајлова са 141 додато и 3 уклоњено
  1. 19 0
      api/functions/api-functions.php
  2. 13 1
      api/functions/homepage-functions.php
  3. 19 0
      api/index.php
  4. 90 2
      js/functions.js

+ 19 - 0
api/functions/api-functions.php

@@ -1339,4 +1339,23 @@ function scrapePage($array)
 		);
 	};
 	return array('result' => 'Error');
+}
+
+function searchCityForCoordinates($array)
+{
+	try {
+		$query = $array['data']['query'] ?? false;
+		$url = qualifyURL('https://api.mapbox.com/geocoding/v5/mapbox.places/' . urlencode($query) . '.json?access_token=pk.eyJ1IjoiY2F1c2VmeCIsImEiOiJjazhyeGxqeXgwMWd2M2ZydWQ4YmdjdGlzIn0.R50iYuMewh1CnUZ7sFPdHA&limit=5&fuzzyMatch=true');
+		$options = array('verify' => false);
+		$response = Requests::get($url, array(), $options);
+		if ($response->success) {
+			return json_decode($response->body);
+		}
+	} catch (Requests_Exception $e) {
+		return array(
+			'result' => 'Error',
+			'data' => $e->getMessage()
+		);
+	};
+	return array('result' => 'Error');
 }

+ 13 - 1
api/functions/homepage-functions.php

@@ -2827,7 +2827,19 @@ function getHomepageList()
 						'label' => 'Longitude',
 						'value' => $GLOBALS['homepageWeatherAndAirLongitude'],
 						'help' => 'Please enter full longitude including minus if needed'
-					)
+					),
+					array(
+						'type' => 'blank',
+						'label' => ''
+					),
+					array(
+						'type' => 'button',
+						'label' => '',
+						'icon' => 'fa fa-search',
+						'class' => 'pull-right',
+						'text' => 'Need Help With Coordinates?',
+						'attr' => 'onclick="showLookupCoordinatesModal()"'
+					),
 				),
 				'Options' => array(
 					array(

+ 19 - 0
api/index.php

@@ -1431,6 +1431,25 @@ switch ($function) {
 				break;
 		}
 		break;
+	case 'v1_coordinates_search':
+		switch ($method) {
+			case 'POST':
+				if (qualifyRequest(1)) {
+					$result['status'] = 'success';
+					$result['statusText'] = 'success';
+					$result['data'] = searchCityForCoordinates($_POST);
+				} else {
+					$result['status'] = 'error';
+					$result['statusText'] = 'API/Token invalid or not set';
+					$result['data'] = null;
+				}
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: ' . $method;
+				break;
+		}
+		break;
 	default:
 		//No Function Available
 		$result['status'] = 'error';

+ 90 - 2
js/functions.js

@@ -5939,7 +5939,7 @@ function buildUnifiItem(array){
                 <div class="col-lg-4 col-md-6 col-center">
                     <div class="panel panel-` + panelColor + `">
                         <div class="panel-heading"> <span class="text-uppercase">` + name + `</span>
-                            <div class="pull-right"><a href="#" data-perform="panel-collapse"><i class="ti-minus"></i></a> <a href="#" data-perform="panel-dismiss"><i class="ti-close"></i></a> </div>
+                            <div class="pull-right"><a href="#" data-perform="panel-collapse"><i class="ti-minus"></i></a></div>
                         </div>
                         <div class="panel-wrapper collapse in" aria-expanded="true">
                             <div class="panel-body">
@@ -6985,7 +6985,7 @@ function buildWeatherAndAir(array){
                                 <li class="text-right"><span class="counter">`+Math.round(v.temps.high)+`<small><sup>°`+v.temperature.units+`</sup></small></span></li>
                             </ul>
                             <ul class="list-inline m-b-0">
-                                <li class="pull-left"><h5 class="text-uppercase">`+v.weather_text+`</h5></li>
+                                <li class="pull-left"><h6 class="text-uppercase">`+v.weather_text+`</h6></li>
                                 <div class="clearfix"></div>
                             </ul>
                         </div>
@@ -8228,6 +8228,94 @@ function createElementFromHTML(htmlString) {
     div.innerHTML = htmlString.trim();
     return div.firstChild;
 }
+function addCoordinatesToInput(latitude, longitude){
+    $('#homepage-Weather-Air-form [name=homepageWeatherAndAirLatitude]').val(latitude).change();
+    $('#homepage-Weather-Air-form [name=homepageWeatherAndAirLongitude]').val(longitude).change();
+    swal.close();
+    message('Coordinates Added','Please Save',activeInfo.settings.notifications.position,'#FFF','success','10000');
+}
+function searchCoordinatesAPI(query){
+    organizrAPI('POST','api/?v1/coordinates/search',{query:query}).success(function(data) {
+        try {
+            var html = JSON.parse(data);
+        }catch(e) {
+            console.log(e + ' error: ' + data);
+            orgErrorAlert('<h4>' + e + '</h4>' + formatDebug(data));
+            return false;
+        }
+        console.log(html.data);
+        if(html.data.type == 'FeatureCollection'){
+            var entries = '';
+            $.each(html.data.features, function(i,v) {
+                entries += '<li class="text-left"><i class="fa fa-caret-right text-info"></i><span class="mouse" onclick="addCoordinatesToInput(\''+v.center[1]+'\',\''+v.center[0]+'\')">'+v.place_name+'</span></li>';
+            })
+            var div = `
+            <div class="row">
+                <div class="col-12">
+                    <div class="card m-b-0">
+                        <div class="form-horizontal">
+                            <div class="card-body">
+                                <h4 class="card-title" lang="en">Select Place</h4>
+                                <div class="form-group row">
+                                    <div class="col-sm-12">
+                                        <ul class="list-icons">
+                                            `+entries+`
+                                        </ul>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            `;
+            if(entries !== ''){
+                swal.close();
+                swal({
+                    content: createElementFromHTML(div),
+                    buttons: false,
+                    className: 'bg-org'
+                })
+            }else{
+                message('API Error','No results found...',activeInfo.settings.notifications.position,'#FFF','warning','10000');
+            }
+
+        }else{
+            message('API Error','',activeInfo.settings.notifications.position,'#FFF','warning','10000');
+            console.error('Organizr Function: API failed');
+        }
+    }).fail(function(xhr) {
+        console.error("Organizr Function: API Failed");
+    });
+}
+function showLookupCoordinatesModal(){
+    var div = `
+    <div class="row">
+        <div class="col-12">
+            <div class="card m-b-0">
+                <div class="form-horizontal">
+                    <div class="card-body">
+                        <h4 class="card-title" lang="en">Enter City or Address</h4>
+                        <div class="form-group row">
+                            <div class="col-sm-12">
+                                <input type="text" class="form-control" id="coordinatesModalCityInput" placeholder="Enter City or Address...">
+                            </div>
+                        </div>
+                        <div class="form-group mb-0 p-r-10 text-right">
+                            <button type="submit" onclick="searchCoordinatesAPI($('#coordinatesModalCityInput').val())" class="btn btn-info waves-effect waves-light">Submit</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    `;
+    swal({
+        content: createElementFromHTML(div),
+        buttons: false,
+        className: 'bg-org'
+    })
+}
 function showLDAPLoginTest(){
     var div = `
         <div class="row">