Alex Trofimov 12 лет назад
Родитель
Сommit
84c6251e47

+ 2 - 2
inc/classes/BxDolForm.php

@@ -767,7 +767,7 @@ class BxDolForm extends BxDol implements iBxDolReplaceable
      * @param $sObject object name
      * @return object instance or false on error
      */
-    static public function getObjectInstance($sObject, $sDisplayName)
+    static public function getObjectInstance($sObject, $sDisplayName, $oTemplate = false)
     {
         if (isset($GLOBALS['bxDolClasses']['BxDolForm!'.$sObject.'!'.$sDisplayName]))
             return $GLOBALS['bxDolClasses']['BxDolForm!'.$sObject.'!'.$sDisplayName];
@@ -787,7 +787,7 @@ class BxDolForm extends BxDol implements iBxDolReplaceable
                 bx_import($sClass);
         }
 
-        $o = new $sClass($aObject);
+        $o = new $sClass($aObject, $oTemplate);
 
         return ($GLOBALS['bxDolClasses']['BxDolForm!'.$sObject.'!'.$sDisplayName] = $o);
     }

+ 23 - 0
modules/base/general/classes/BxBaseModGeneralFormEntry.php

@@ -53,6 +53,29 @@ class BxBaseModGeneralFormEntry extends BxTemplFormView
         return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
     }
 
+    protected function genCustomInputLocation ($aInput) 
+    {
+        $sProto = (0 == strncmp('https', BX_DOL_URL_ROOT, 5)) ? 'https' : 'http';
+        $this->oTemplate->addJs($sProto . '://maps.google.com/maps/api/js?sensor=false');
+
+        return $this->oTemplate->parseHtmlByName('form_field_location.html', array (
+            'input' => $this->genInputSwitcher($aInput),
+            'name' => $aInput['name'],
+            'id_status' => $this->getInputId($aInput) . '_status',
+        ));
+    }
+
+    function addCssJs ()
+    {
+        if (!isset($this->aParams['view_mode']) || !$this->aParams['view_mode']) {
+            if (self::$_isCssJsAdded)
+                return;
+            $this->_oModule->_oTemplate->addCss('form.css');
+        }
+
+        return parent::addCssJs ();
+    }
+
 }
 
 /** @} */

+ 1 - 1
modules/base/general/classes/BxBaseModGeneralFormsEntryHelper.php

@@ -34,7 +34,7 @@ class BxBaseModGeneralFormsEntryHelper extends BxDolProfileForms
             return MsgBox($sMsg);
 
         // check and display form
-        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD']);
+        $oForm = BxDolForm::getObjectInstance($CNF['OBJECT_FORM_ENTRY'], $CNF['OBJECT_FORM_ENTRY_DISPLAY_ADD'], $this->_oModule->_oTemplate);
         if (!$oForm)
             return MsgBox(_t('_sys_txt_error_occured'));
 

+ 7 - 0
modules/base/general/template/css/form.css

@@ -0,0 +1,7 @@
+
+
+.bx-form-input-location-cont > div {
+    float:left;
+    line-height:1.5rem;
+}
+

+ 77 - 0
modules/base/general/template/form_field_location.html

@@ -0,0 +1,77 @@
+
+<div class="bx-form-input-location-cont bx-clearfix">
+    __input__
+    <div id="__id_status__" class="bx-def-margin-left"><bx_text:_sys_location_undefined /></div>
+</div>
+
+<input type="hidden" name="__name___lat" />
+<input type="hidden" name="__name___lng" />
+<input type="hidden" name="__name___country" />
+<input type="hidden" name="__name___state" />
+<input type="hidden" name="__name___city" />
+<input type="hidden" name="__name___zip" />
+
+<script>
+    $('input[name=__name__]').on('change', function () {
+        var oMap = {
+            '__name___lat': '', 
+            '__name___lng': '', 
+            '__name___city': 'locality', 
+            '__name___state': 'administrative_area_level_1', 
+            '__name___country': 'country',  
+            '__name___zip': 'postal_code'
+        };
+
+        var callbackOnLocationReset = function (error) {
+            var sKey;
+            for (sKey in oMap) 
+                $('[name="' + sKey + '"]').val('');
+            $('#__id_status__').html("<bx_text_js:_sys_location_undefined />");
+        }
+
+        var callbackOnLocationSucess = function (position) {
+            $('[name="__name___lat"]').val(position.coords.latitude);
+            $('[name="__name___lng"]').val(position.coords.longitude);
+
+            var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
+            var geocoder = new google.maps.Geocoder();
+
+            geocoder.geocode({'latLng': latlng}, function (results, status) {
+                if (status == google.maps.GeocoderStatus.OK) {                
+                    var i, sKey, sCountry, sCity, o = results[0]['address_components'];
+                    for (i in o) {
+                        for (sKey in oMap) {
+                            if (o[i].types.indexOf(oMap[sKey]) > -1)
+                                $('[name="' + sKey + '"]').val(o[i].short_name);
+                            
+                            if (o[i].types.indexOf('locality') > -1)
+                                sCity = o[i].short_name;
+                            else if (o[i].types.indexOf('country') > -1)
+                                sCountry = o[i].long_name;
+                        }
+                    }
+                    if ('undefined' != typeof(sCity) && sCity.length)
+                        $('#__id_status__').html(sCity + ", " + sCountry);
+                    else
+                        $('#__id_status__').html(sCountry);
+                } 
+                else {
+                    $('#__id_status__').html(status);
+                }
+            });
+
+        }
+
+        if ($(this).is(':checked')) {
+            $('#__id_status__').html('<bx_text_js:_sys_location_determining />');
+            if (navigator.geolocation)
+                navigator.geolocation.getCurrentPosition(callbackOnLocationSucess, callbackOnLocationReset);
+            else
+                $('#__id_status__').html('<bx_text_js:_sys_location_geolocation_not_supported_by_browser />');
+        } else {
+            callbackOnLocationReset();
+        }
+    });
+
+</script>
+

+ 0 - 1
modules/base/text/classes/BxBaseModTextFormEntry.php

@@ -188,7 +188,6 @@ class BxBaseModTextFormEntry extends BxBaseModGeneralFormEntry
             if (self::$_isCssJsAdded)
                 return;
             $this->_oModule->_oTemplate->addJs('modules/base/text/js/|forms.js');
-            $this->_oModule->_oTemplate->addCss('forms.css');
         }
 
         return parent::addCssJs ();

+ 1 - 0
modules/base/text/template/css/forms.css → modules/base/text/template/css/form.css

@@ -1,4 +1,5 @@
 
+@import url(../../../general/template/css/form.css);
 
 .bx-uploader-ghost .bx-base-text-icon-wrapper {
     float:left;

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

@@ -1601,6 +1601,8 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_form_forgot_password_input_caption_system_email"><![CDATA[Email]]></string>
 	<string name="_sys_form_forgot_password_input_email"><![CDATA[Email]]></string>
 	<string name="_sys_form_forgot_password_input_submit"><![CDATA[Submit]]></string>
+	<string name="_sys_form_input_sys_location"><![CDATA[Location]]></string>
+	<string name="_sys_form_input_location"><![CDATA[Location]]></string>
 	<string name="_sys_form_login"><![CDATA[Sign in]]></string>
 	<string name="_sys_form_login_input_caption_system_captcha"><![CDATA[Captcha]]></string>
 	<string name="_sys_form_login_input_caption_system_delete_confirm"><![CDATA[Confirm Delete]]></string>
@@ -1723,6 +1725,9 @@ If it is not enabled then please consider implement this optimization, since it
 	<string name="_sys_layout_top_area_bar_right"><![CDATA[Top area with right bar]]></string>
 	<string name="_sys_layout_topbottom_area_2_columns"><![CDATA[Top&bottom areas with 2 columns in the middle]]></string>
 	<string name="_sys_loading"><![CDATA[Loading...]]></string>
+	<string name="_sys_location_determining"><![CDATA[Determining location...]]></string>
+	<string name="_sys_location_geolocation_not_supported_by_browser"><![CDATA[Geolocation is not supported by this browser]]></string>
+	<string name="_sys_location_undefined"><![CDATA[No location]]></string>
 	<string name="_sys_menu_item_title_about"><![CDATA[About]]></string>
 	<string name="_sys_menu_item_title_switch_language"><![CDATA[Language]]></string>
 	<string name="_sys_menu_item_title_switch_language_mask"><![CDATA[{1} {0}]]></string>

+ 3 - 0
modules/boonex/posts/template/css/form.css

@@ -0,0 +1,3 @@
+
+@import url(../../../../base/text/template/css/form.css);
+

+ 0 - 3
modules/boonex/posts/template/css/forms.css

@@ -1,3 +0,0 @@
-
-@import url(../../../../base/text/template/css/forms.css);
-

+ 3 - 0
modules/boonex/posts/template/form_field_location.html

@@ -0,0 +1,3 @@
+
+<bx_include_base:../modules/base/general/template/form_field_location.html />
+

+ 2 - 2
template/css/forms.css

@@ -141,12 +141,12 @@
     border:0.15rem solid #79bd9a;
 	
     -webkit-border-radius:0.3rem;
-	-moz-border-radius:0.3rem;	
+    -moz-border-radius:0.3rem;	
     border-radius:0.3rem;
 
     outline:none;
 
-	background-color: #fff;
+    background-color: #fff;
 
     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)"; 
     filter: alpha(opacity=90);