Просмотр исходного кода

#4225 Location: option to normalize geographic names

Alex Trofimov 3 лет назад
Родитель
Сommit
454867fc1d

+ 1 - 0
inc/classes/BxDolLocationFieldNominatim.php

@@ -90,6 +90,7 @@ class BxDolLocationFieldNominatim extends BxDolLocationField
             $aVars['location_string'] = $sLocationString;
             $aVars['nominatim_server'] = $this->getNominatimServer();
             $aVars['nominatim_email'] = $this->getNominatimEmail();
+            $aVars['normalize_names'] = getParam('sys_location_normalize_names') ? 1 : 0;
 
             $sRet = $oForm->getTemplate()->parseHtmlByName('location_field_plain_auto.html', $aVars);
         }

+ 3 - 1
install/sql/system.sql

@@ -669,7 +669,9 @@ INSERT INTO `sys_options`(`category_id`, `name`, `caption`, `value`, `type`, `ex
 (@iCategoryId, 'sys_nominatim_server', '_adm_stg_cpt_option_sys_nominatim_server', 'https://nominatim.openstreetmap.org', 'digit', '', '', '', 40),
 (@iCategoryId, 'sys_nominatim_email', '_adm_stg_cpt_option_sys_nominatim_email', '', 'digit', '', '', '', 42),
 
-(@iCategoryId, 'sys_location_leaflet_provider', '_adm_stg_cpt_option_sys_location_leaflet_provider', 'OpenStreetMap.Mapnik', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:42:"get_options_location_leaflet_get_providers";s:5:"class";s:13:"TemplServices";}', '', '', 50);
+(@iCategoryId, 'sys_location_leaflet_provider', '_adm_stg_cpt_option_sys_location_leaflet_provider', 'OpenStreetMap.Mapnik', 'select', 'a:3:{s:6:"module";s:6:"system";s:6:"method";s:42:"get_options_location_leaflet_get_providers";s:5:"class";s:13:"TemplServices";}', '', '', 50),
+
+(@iCategoryId, 'sys_location_normalize_names', '_adm_stg_cpt_option_sys_location_normalize_names', '', 'checkbox', '', '', '', 60);
 
 --
 -- CATEGORY: Social Settings

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -1604,6 +1604,7 @@
     <string name="_adm_stg_cpt_option_sys_location_map_default"><![CDATA[Location map provider]]></string>
     <string name="_adm_stg_cpt_option_sys_location_map_zoom_default"><![CDATA[Location map zoom]]></string>
     <string name="_adm_stg_cpt_option_sys_location_leaflet_provider"><![CDATA[Leaflet tile layers provider]]></string>
+    <string name="_adm_stg_cpt_option_sys_location_normalize_names"><![CDATA[Normalize geographic names]]></string>
     <string name="_adm_stg_cpt_option_sys_maps_api_key"><![CDATA[Google Maps API key]]></string>
     <string name="_adm_stg_cpt_option_sys_embed_default"><![CDATA[Embeds provider]]></string>
     <string name="_adm_stg_cpt_option_sys_embedly_api_key"><![CDATA[Embed.ly API key (fill in to use instead of Iframely)]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -1583,6 +1583,7 @@
     <string name="_adm_stg_cpt_option_sys_location_map_default"><![CDATA[Поставщик для отображения карт]]></string>
     <string name="_adm_stg_cpt_option_sys_location_map_zoom_default"><![CDATA[Увеличение карты]]></string>
     <string name="_adm_stg_cpt_option_sys_location_leaflet_provider"><![CDATA[Поставщик карт для Leaflet]]></string>
+    <string name="_adm_stg_cpt_option_sys_location_normalize_names"><![CDATA[Нормализация географических названий]]></string>
     <string name="_adm_stg_cpt_option_sys_maps_api_key"><![CDATA[Ключ Google Maps API]]></string>
     <string name="_adm_stg_cpt_option_sys_embed_default"><![CDATA[Поставщик встраиваемого кода]]></string>
     <string name="_adm_stg_cpt_option_sys_embedly_api_key"><![CDATA[Ключ Embed.ly API (заполните, чтобы использовать вместо Iframely)]]></string>

+ 14 - 8
template/location_field_plain.html

@@ -70,15 +70,21 @@
                 if ('undefined' !== typeof(oResult[0].address)) {
                     if ('undefined' !== typeof(oResult[0].address.state) && 0 == $('input[name="__name___state"]').val().length)
                         $('input[name="__name___state"]').val(oResult[0].address.state);
+                    else if (__normalize_names __ && $('input[name="__name___state"]').val() != oResult[0].address.state)
+                        $('input[name="__name___state"]').val(oResult[0].address.state);
 
-                    if (0 == $('input[name="__name___city"]').val().length) {
-                        if ('undefined' !== typeof(oResult[0].address.city))
-                            $('input[name="__name___city"]').val(oResult[0].address.city);
-                        else if ('undefined' !== typeof(oResult[0].address.town))
-                            $('input[name="__name___city"]').val(oResult[0].address.town);
-                        else if ('undefined' !== typeof(oResult[0].address.village))
-                            $('input[name="__name___city"]').val(oResult[0].address.village);
-                    }
+                    var sCity = '';
+                    if ('undefined' !== typeof(oResult[0].address.city))
+                        sCity = oResult[0].address.city;
+                    else if ('undefined' !== typeof(oResult[0].address.town))
+                        sCity = oResult[0].address.town;
+                    else if ('undefined' !== typeof(oResult[0].address.village))
+                        sCity = oResult[0].address.village;
+
+                    if (sCity && 0 == $('input[name="__name___city"]').val().length)
+                        $('input[name="__name___city"]').val(sCity);
+                    else if (__normalize_names __ && sCity && $('input[name="__name___city"]').val() != sCity)
+                        $('input[name="__name___city"]').val(sCity);
                 }
                 if ('undefined' !== typeof(oResult[0].licence))
                     $('.bx-form-input-location-__name__ .bx-form-input-location-copyright').html(oResult[0].licence);