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

Ticket #4575 - Events: Enhancements. Point 5.

AntonLV пре 2 година
родитељ
комит
3be5b402ad

+ 1 - 1
modules/boonex/events/classes/BxEventsModule.php

@@ -29,7 +29,7 @@ class BxEventsModule extends BxBaseModGroupsModule implements iBxDolCalendarServ
         ]);
 
         $this->_aBrowsingFiltersKeys = array_merge($this->_aBrowsingFiltersKeys, [
-            'by_date', 'date_start', 'date_end'
+            'by_date', 'date_start', 'date_end', 'timezone'
         ]);
     }
 

+ 18 - 11
modules/boonex/events/classes/BxEventsSearchResult.php

@@ -85,58 +85,65 @@ class BxEventsSearchResult extends BxBaseModGroupsSearchResult
 
         $iDateStart = $iDateEnd = 0;
         if(isset($this->_aParams['by_date'])) {
+            $iTimezoneOffset = 0;
+            if(!empty($this->_aParams['timezone']) && in_array($this->_aParams['timezone'], timezone_identifiers_list()))
+                $iTimezoneOffset = date_offset_get(date_create('now', timezone_open($this->_aParams['timezone'])));
+
             switch($this->_aParams['by_date']) {
                 case 'today':
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), date("d"), date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
                     $iDateEnd = $iDateStart + 86399;
                     break;
 
                 case 'tomorrow':
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
                     $iDateEnd = $iDateStart + 86399;
                     break;
 
                 case 'weekend':
                     $iDayOfWeek = date("w");
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), date("d") + ($iDayOfWeek > 0 ? 6 - $iDayOfWeek : -1), date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), date("d") + ($iDayOfWeek > 0 ? 6 - $iDayOfWeek : -1), date("Y"));
                     $iDateEnd = $iDateStart + 2 * 86400 - 1;
                     break;
 
                 case 'this_week':
                     $iDayOfWeek = date("w");
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), date("d") - ($iDayOfWeek > 0 ? $iDayOfWeek - 1 : 6), date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), date("d") - ($iDayOfWeek > 0 ? $iDayOfWeek - 1 : 6), date("Y"));
                     $iDateEnd = $iDateStart + 7 * 86400 - 1;
                     break;
 
                 case 'next_week':
                     $iDayOfWeek = date("w");
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), date("d") + ($iDayOfWeek > 0 ? 8 - $iDayOfWeek : 1), date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), date("d") + ($iDayOfWeek > 0 ? 8 - $iDayOfWeek : 1), date("Y"));
                     $iDateEnd = $iDateStart + 7 * 86400 - 1;
                     break;
 
                 case 'this_month':
-                    $iDateStart = gmmktime(0, 0, 0, date("m"), 1, date("Y"));
-                    $iDateEnd = gmmktime(23, 59, 59, date("m") + 1, 0, date("Y"));
+                    $iDateStart = mktime(0, 0, 0, date("m"), 1, date("Y"));
+                    $iDateEnd = mktime(23, 59, 59, date("m") + 1, 0, date("Y"));
                     break;
 
                 case 'date_range':
                     if(!empty($this->_aParams['date_start'])) {
                         list($iDsy, $iDsm, $iDsd,) = explode('-', $this->_aParams['date_start']);
-                        $iDateStart = gmmktime(0, 0, 0, $iDsm, $iDsd, $iDsy);
+                        $iDateStart = mktime(0, 0, 0, $iDsm, $iDsd, $iDsy);
                     }
                     else
-                        $iDateStart = gmmktime(0, 0, 0, date("m"), date("d"), date("Y"));
+                        $iDateStart = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
 
                     if(!empty($this->_aParams['date_end'])) {
                         list($iDey, $iDem, $iDed,) = explode('-', $this->_aParams['date_end']);
-                        $iDateEnd = gmmktime(23, 59, 59, $iDem, $iDed, $iDey);
+                        $iDateEnd = mktime(23, 59, 59, $iDem, $iDed, $iDey);
                     }
                     else
-                        $iDateEnd = gmmktime(23, 59, 59, date("m"), date("d"), date("Y"));
+                        $iDateEnd = mktime(23, 59, 59, date("m"), date("d"), date("Y"));
                     break;
             }
 
             if($iDateStart != 0 && $iDateEnd != 0) {
+                $iDateStart -= $iTimezoneOffset;
+                $iDateEnd -= $iTimezoneOffset;
+
                 //--- 1. already started or will start in selected date interval
                 $this->aCurrent['restriction']['filter_date_start'] = ['value' => $iDateEnd, 'field' => 'date_start', 'operator' => '<', 'table' => 'bx_events_data'];
                 //--- 2. and didn't finished to the beginning of selected date interval

+ 6 - 3
modules/boonex/events/classes/BxEventsTemplate.php

@@ -95,8 +95,6 @@ class BxEventsTemplate extends BxBaseModGroupsTemplate
     {
         $sJsObject = $this->_oConfig->getJsObject('main');
 
-        $sMode = $aParams['mode'];
-
         $aForm = [
             'inputs' => [
                 'by_date' => [
@@ -128,6 +126,11 @@ class BxEventsTemplate extends BxBaseModGroupsTemplate
                     'type' => 'datepicker',
                     'tr_attrs' => ['class' => 'date-range date-end', 'style' => 'display:none']
                 ],
+                'timezone' => [
+                    'name' => 'timezone',
+                    'type' => 'hidden',
+                    'value' => ''
+                ],
                 'controls' => [
                     'name' => 'controls',
                     'type' => 'input_set',
@@ -152,7 +155,7 @@ class BxEventsTemplate extends BxBaseModGroupsTemplate
         ];
 
         $oForm = new BxTemplFormView($aForm);
-        return $oForm->getCode(true);
+        return $this->addJs(['moment-timezone-with-data-1970-2030.min.js'], true) . $oForm->getCode(true);
     }
 }
 

+ 7 - 0
modules/boonex/events/js/main.js

@@ -15,6 +15,12 @@ function BxEventsMain(oOptions) {
 
     this._oBrowsingFiltersPopupOptionsDefaults = jQuery.extend(this._oBrowsingFiltersPopupOptionsDefaults,  {
         onShow: function(oPopup) {
+            var oTimezone = $(oPopup).find("[name = 'timezone']");
+            if(oTimezone && oTimezone.length != 0)
+                oTimezone.val(moment.tz.guess());
+    
+            console.log(oTimezone.val());
+    
             $(oPopup).find("[name = 'cancel']").focus();
         }
     });   
@@ -43,6 +49,7 @@ BxEventsMain.prototype.applyBrowsingFilter = function(oElement, oRequestParams)
         oRequestParams.date_start = oFilters.find("input[name='date_start']").val();
         oRequestParams.date_end = oFilters.find("input[name='date_end']").val();
     }
+    oRequestParams.timezone = oFilters.find("input[name='timezone']").val();
 
     BxBaseModGroupsMain.prototype.applyBrowsingFilter.call(this, oElement, oRequestParams);
 };