Nuria has submitted this change and it was merged.

Change subject: Add support for timezones while creating reports
......................................................................


Add support for timezones while creating reports

Since the whole list of timezones can be overwhelming for the user, only
a few timezones have been added.

Bug: T74116
Change-Id: I5651dc6753f834c6cdc94df6a102a5dc683b80be
---
M wikimetrics/static/js/reportCreate.js
M wikimetrics/templates/report.html
2 files changed, 45 insertions(+), 7 deletions(-)

Approvals:
  Nuria: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/wikimetrics/static/js/reportCreate.js 
b/wikimetrics/static/js/reportCreate.js
index 78b1d99..7da18f7 100644
--- a/wikimetrics/static/js/reportCreate.js
+++ b/wikimetrics/static/js/reportCreate.js
@@ -5,7 +5,8 @@
 
 $(document).ready(function(){
     
-    var viewModel = {
+    var utcTimezone = {name: 'UTC', value: '+00:00'},
+        viewModel = {
         filter: ko.observable(''),
         cohorts: ko.observableArray([]),
         toggleCohort: function(cohort){
@@ -20,6 +21,21 @@
             }
             return true;
         },
+
+        // Add more timezones as necessary
+        availableTimezones : ko.observableArray([
+            {name: 'Central European Time', value: '+01:00'},
+            {name: 'Eastern European Time', value: '+02:00'},
+            {name: 'East Australian Standard Time', value: '+10:00'},
+            utcTimezone,
+            {name: 'Atlantic Standard Time', value: '-04:00'},
+            {name: 'Eastern Standard Time', value: '-05:00'},
+            {name: 'Central Standard Time', value: '-06:00'},
+            {name: 'Mountain Standard Time', value: '-07:00'},
+            {name: 'Pacific Standard Time', value: '-08:00'},
+            {name: 'Hawaii Standard Time', value: '-10:00'}
+        ]),
+        timezone: ko.observable(utcTimezone), // no default
 
         metrics: ko.observableArray([]),
         toggleMetric: function(metric){
@@ -41,12 +57,13 @@
         },
         
         save: function(formElement){
-            
+            var timezone = this.timezone();
+
             if (site.hasValidationErrors()){
                 site.showWarning('Please configure and click Save 
Configuration for each selected metric.');
                 return;
             }
-            
+
             var vm = ko.dataFor(formElement);
             if (vm.request().responses().length === 0){
                 site.showWarning('Please select at least one cohort and one 
metric.');
@@ -69,7 +86,7 @@
             var form = $(formElement);
             var data = ko.toJSON(vm.request().responses);
             data = JSON.parse(data);
-            
+
             ko.utils.arrayForEach(data, function(response){
                 delete response.metric.configure;
                 delete response.cohort.wikiusers;
@@ -80,9 +97,16 @@
                 delete response.metric.tabIdSelector;
                 delete response.metric.selected;
                 delete response.metric.description;
+                // apply timezone info
+                ko.utils.arrayForEach(response.metric.dateTimeFieldNames, 
function(name) {
+                    response.metric[name] = moment
+                        .utc(response.metric[name] + ' ' + timezone.value)
+                        .format('YYYY-MM-DD HH:mm:ss');
+                });
+                delete response.metric.dateTimeFieldNames;
             });
             data = JSON.stringify(data);
-            
+
             $.ajax({ type: 'post', url: form.attr('action'), data: {responses: 
data, recurrent: vm.request().recurrent()} })
                 .done(site.handleWith(function(response){
                     // should redirect to the reports page, so show an error 
otherwise
@@ -235,6 +259,11 @@
         var parentId = metric.tabId();
         var controls = $('#' + parentId + ' div.datetimepicker');
         controls.datetimepicker({language: 'en'});
+        // save datetime field names for later use (timezone conversion)
+        metric.dateTimeFieldNames = [];
+        controls.each(function () {
+            metric.dateTimeFieldNames.push($(this).find('input').attr('name'));
+        });
         // TODO: this might be cleaner if it metric[name] was an observable
         controls.on('changeDate', function(){
             var input = $(this).find('input');
@@ -248,8 +277,7 @@
         e.preventDefault();
         $(this).tab('show');
     });
-    
-    
+
     // apply bindings - this connects the DOM with the view model constructed 
above
     ko.applyBindings(viewModel);
 });
diff --git a/wikimetrics/templates/report.html 
b/wikimetrics/templates/report.html
index 4775d82..1641534 100644
--- a/wikimetrics/templates/report.html
+++ b/wikimetrics/templates/report.html
@@ -32,6 +32,16 @@
         </ul>
     </div>
 </div>
+<div class="well well-small pick-timezone">
+    <div class="form-inline">
+        <label class="control-label"> <h4>Pick Timezone</h4> </label> &nbsp;
+        <select data-bind="options: availableTimezones,
+             optionsText: function (item) {
+                 return item.value + ' ' + item.name;
+             },
+             value:timezone"></select>
+    </div>
+</div>
 <div class="well well-small pick-metrics">
     <h4>Pick Metrics</h4>
     <div class="tabbable tabs-left">

-- 
To view, visit https://gerrit.wikimedia.org/r/175169
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5651dc6753f834c6cdc94df6a102a5dc683b80be
Gerrit-PatchSet: 4
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Bmansurov <[email protected]>
Gerrit-Reviewer: Bmansurov <[email protected]>
Gerrit-Reviewer: Nuria <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to