Commit 7d4a59daf1694c1ed49facab6dad0819edb8e27f
Exists in
master
and in
63 other branches
Merge branch 'develop' of https://gitlab.irap.omp.eu/CDPP/AMDA_IHM into develop
Showing
29 changed files
with
254 additions
and
148 deletions
Show diff stats
js/app/controllers/PlotModule.js
@@ -214,6 +214,21 @@ Ext.define('amdaDesktop.PlotModule', { | @@ -214,6 +214,21 @@ Ext.define('amdaDesktop.PlotModule', { | ||
214 | if (!this.plotResultWindowsManager.get(winResultId)) return null; | 214 | if (!this.plotResultWindowsManager.get(winResultId)) return null; |
215 | return this.plotResultWindowsManager.get(winResultId); | 215 | return this.plotResultWindowsManager.get(winResultId); |
216 | }, | 216 | }, |
217 | + | ||
218 | + setTimeInterval : function(timeObj){ | ||
219 | + var me = this; | ||
220 | + var desktop = this.app.getDesktop(); | ||
221 | + var win = desktop.getWindow(this.id); | ||
222 | + if (win) { | ||
223 | + me.getUiContent().setTimeFromData(timeObj); | ||
224 | + win.show(); | ||
225 | + } | ||
226 | + else { | ||
227 | + this.createWindow(function () { | ||
228 | + me.getUiContent().setTimeFromData(timeObj); | ||
229 | + }); | ||
230 | + } | ||
231 | + }, | ||
217 | 232 | ||
218 | addParameter : function(paramNode) { | 233 | addParameter : function(paramNode) { |
219 | var me = this; | 234 | var me = this; |
@@ -324,6 +339,7 @@ Ext.define('amdaDesktop.PlotModule', { | @@ -324,6 +339,7 @@ Ext.define('amdaDesktop.PlotModule', { | ||
324 | downloadValues.durationHour = plotValues.durationHour; | 339 | downloadValues.durationHour = plotValues.durationHour; |
325 | downloadValues.durationMin = plotValues.durationMin; | 340 | downloadValues.durationMin = plotValues.durationMin; |
326 | downloadValues.durationSec = plotValues.durationSec; | 341 | downloadValues.durationSec = plotValues.durationSec; |
342 | + downloadValues.durationMs = plotValues.durationMs; | ||
327 | if (plotValues.timeTables) | 343 | if (plotValues.timeTables) |
328 | downloadValues.timeTables = plotValues.timeTables; | 344 | downloadValues.timeTables = plotValues.timeTables; |
329 | downloadValues.list = []; | 345 | downloadValues.list = []; |
js/app/models/AmdaTimeObject.js
@@ -37,26 +37,31 @@ Ext.define('amdaModel.AmdaTimeObject', { | @@ -37,26 +37,31 @@ Ext.define('amdaModel.AmdaTimeObject', { | ||
37 | { name: 'folderId', type: 'string'}, | 37 | { name: 'folderId', type: 'string'}, |
38 | { name: 'processId', type: 'string'}, | 38 | { name: 'processId', type: 'string'}, |
39 | { name: 'timesrc', type: 'string'/*, defaultValue: amdaModel.AmdaTimeObject.inputTimeSrc[1] /*'Interval'*/ }, | 39 | { name: 'timesrc', type: 'string'/*, defaultValue: amdaModel.AmdaTimeObject.inputTimeSrc[1] /*'Interval'*/ }, |
40 | - { name: 'startDate', type: 'date', defaultValue:Ext.Date.add(Ext.Date.clearTime(new Date()),Ext.Date.DAY,-1), | 40 | + { |
41 | + name: 'startDate', | ||
42 | + type: 'date', | ||
43 | + defaultValue:Ext.Date.add(Ext.Date.clearTime(new Date()),Ext.Date.DAY,-1), | ||
41 | convert: function(value,rec) { | 44 | convert: function(value,rec) { |
42 | if (!Ext.isDate(value)) { | 45 | if (!Ext.isDate(value)) { |
43 | - var valueString = new String(value); | ||
44 | - var date = new Date(valueString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | 46 | + var valueString = new String(value).replaceAll('\/','\-'); |
47 | + var date = new Date(valueString); | ||
45 | return date; | 48 | return date; |
46 | } | 49 | } |
47 | return value; | 50 | return value; |
48 | } | 51 | } |
49 | }, | 52 | }, |
50 | { | 53 | { |
51 | - name: 'stopDate', type: 'date', defaultValue: Ext.Date.clearTime (new Date()), persist: false, | ||
52 | - convert: function(value,rec) { | ||
53 | - if (!Ext.isDate(value)){ | ||
54 | - var valueString = new String(value); | ||
55 | - var date = new Date(valueString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | ||
56 | - return date; | 54 | + name: 'stopDate', |
55 | + type: 'date', | ||
56 | + defaultValue: Ext.Date.clearTime (new Date()), persist: false, | ||
57 | + convert: function(value,rec) { | ||
58 | + if (!Ext.isDate(value)) { | ||
59 | + var valueString = new String(value).replaceAll('\/','\-'); | ||
60 | + var date = new Date(valueString); | ||
61 | + return date; | ||
57 | } | 62 | } |
58 | return value; | 63 | return value; |
59 | - } | 64 | + } |
60 | }, | 65 | }, |
61 | { | 66 | { |
62 | name: 'durationDay', type: 'int', | 67 | name: 'durationDay', type: 'int', |
@@ -90,7 +95,15 @@ Ext.define('amdaModel.AmdaTimeObject', { | @@ -90,7 +95,15 @@ Ext.define('amdaModel.AmdaTimeObject', { | ||
90 | 95 | ||
91 | return Ext.String.leftPad(Math.floor(diffS), 2, '0'); | 96 | return Ext.String.leftPad(Math.floor(diffS), 2, '0'); |
92 | } | 97 | } |
93 | - }, | 98 | + }, |
99 | + { | ||
100 | + name: 'durationMs', type: 'int', | ||
101 | + convert: function(value, rec) { | ||
102 | + var diffS = (rec.get('stopDate') - rec.get('startDate'))%1000; | ||
103 | + | ||
104 | + return Ext.String.leftPad(Math.floor(diffS), 3, '0'); | ||
105 | + } | ||
106 | + }, | ||
94 | { name: 'timeTables', defaultValue: null } // array of TTobject | 107 | { name: 'timeTables', defaultValue: null } // array of TTobject |
95 | ] | 108 | ] |
96 | }); | 109 | }); |
js/app/models/Catalog.js
@@ -37,7 +37,7 @@ Ext.define('amdaModel.Catalog', { | @@ -37,7 +37,7 @@ Ext.define('amdaModel.Catalog', { | ||
37 | // } | 37 | // } |
38 | values.objName = this.get('objName'); | 38 | values.objName = this.get('objName'); |
39 | values.objFormat = this.get('objFormat'); | 39 | values.objFormat = this.get('objFormat'); |
40 | - values.folderId = this.get('folderId'); | 40 | + values.folderId = this.get('folderId'); |
41 | values.nbIntervals = this.get('nbIntervals'); | 41 | values.nbIntervals = this.get('nbIntervals'); |
42 | values.cacheToken = this.get('cacheToken'); | 42 | values.cacheToken = this.get('cacheToken'); |
43 | values.parameters = this.get('parameters'); | 43 | values.parameters = this.get('parameters'); |
js/app/models/Download.js
@@ -163,12 +163,13 @@ Ext.define('amdaModel.Download', { | @@ -163,12 +163,13 @@ Ext.define('amdaModel.Download', { | ||
163 | } | 163 | } |
164 | }); | 164 | }); |
165 | } else { | 165 | } else { |
166 | - myValues.startDate = this.get('startDate'); | ||
167 | - myValues.stopDate = this.get('stopDate'); | 166 | + myValues.startDate = Ext.Date.format(this.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
167 | + myValues.stopDate = Ext.Date.format(this.get('stopDate'), 'Y-m-d\\TH:i:s.u'); | ||
168 | myValues.durationDay = this.get('durationDay'); | 168 | myValues.durationDay = this.get('durationDay'); |
169 | myValues.durationHour = this.get('durationHour'); | 169 | myValues.durationHour = this.get('durationHour'); |
170 | myValues.durationMin = this.get('durationMin'); | 170 | myValues.durationMin = this.get('durationMin'); |
171 | myValues.durationSec = this.get('durationSec'); | 171 | myValues.durationSec = this.get('durationSec'); |
172 | + myValues.durationMs = this.get('durationMs'); | ||
172 | } | 173 | } |
173 | 174 | ||
174 | // if there's at least one parameter | 175 | // if there's at least one parameter |
js/app/models/DownloadNode.js
@@ -73,12 +73,13 @@ Ext.define('amdaModel.DownloadNode', { | @@ -73,12 +73,13 @@ Ext.define('amdaModel.DownloadNode', { | ||
73 | }); | 73 | }); |
74 | } | 74 | } |
75 | else { | 75 | else { |
76 | - myValues.startDate = obj.get('startDate'); | ||
77 | - myValues.stopDate = obj.get('stopDate'); | 76 | + myValues.startDate = Ext.Date.format(obj.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
77 | + myValues.stopDate = Ext.Date.format(obj.get('startDate'), 'Y-m-d\\TH:i:s.u'); | ||
78 | myValues.durationDay = obj.get('durationDay'); | 78 | myValues.durationDay = obj.get('durationDay'); |
79 | myValues.durationHour = obj.get('durationHour'); | 79 | myValues.durationHour = obj.get('durationHour'); |
80 | myValues.durationMin = obj.get('durationMin'); | 80 | myValues.durationMin = obj.get('durationMin'); |
81 | myValues.durationSec = obj.get('durationSec'); | 81 | myValues.durationSec = obj.get('durationSec'); |
82 | + myValues.durationMs = obj.get('durationMs'); | ||
82 | } | 83 | } |
83 | 84 | ||
84 | myValues.name = obj.get('name'); | 85 | myValues.name = obj.get('name'); |
js/app/models/InteractiveNode.js
@@ -476,14 +476,14 @@ Ext.define('amdaModel.InteractiveNode', { | @@ -476,14 +476,14 @@ Ext.define('amdaModel.InteractiveNode', { | ||
476 | 476 | ||
477 | var startDate = new Date(startString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | 477 | var startDate = new Date(startString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); |
478 | var stopDate = new Date(stopString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | 478 | var stopDate = new Date(stopString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); |
479 | - | 479 | + |
480 | if (stopDate - startDate > 86400000 ) { | 480 | if (stopDate - startDate > 86400000 ) { |
481 | var startTime = Ext.Date.add(stopDate, Ext.Date.DAY, -1); | 481 | var startTime = Ext.Date.add(stopDate, Ext.Date.DAY, -1); |
482 | // var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s')}; | 482 | // var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s')}; |
483 | - var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d'), stop: Ext.Date.format(stopDate, 'Y/m/d')}; | 483 | + var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s.u'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s.u')}; |
484 | } | 484 | } |
485 | else { | 485 | else { |
486 | - var timeObj = {start: node.get('globalStart'), stop: node.get('globalStop')}; | 486 | + var timeObj = {start: Ext.Date.format(startTime, 'Y/m/d H:i:s.u'), stop: Ext.Date.format(stopDate, 'Y/m/d H:i:s.u')}; |
487 | } | 487 | } |
488 | return timeObj; | 488 | return timeObj; |
489 | }, | 489 | }, |
js/app/models/PlotObjects/MultiplotRequestObject.js
@@ -126,12 +126,13 @@ Ext.define('amdaPlotObj.MultiplotRequestObject', { | @@ -126,12 +126,13 @@ Ext.define('amdaPlotObj.MultiplotRequestObject', { | ||
126 | } | 126 | } |
127 | }); | 127 | }); |
128 | } else { | 128 | } else { |
129 | - requestValues['startDate'] = this.get('startDate'); | ||
130 | - requestValues['stopDate'] = this.get('stopDate'); | 129 | + requestValues['startDate'] = Ext.Date.format(this.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
130 | + requestValues['stopDate'] = Ext.Date.format(this.get('stopDate'), 'Y-m-d\\TH:i:s.u'); | ||
131 | requestValues['durationDay'] = this.get('durationDay'); | 131 | requestValues['durationDay'] = this.get('durationDay'); |
132 | requestValues['durationHour'] = this.get('durationHour'); | 132 | requestValues['durationHour'] = this.get('durationHour'); |
133 | requestValues['durationMin'] = this.get('durationMin'); | 133 | requestValues['durationMin'] = this.get('durationMin'); |
134 | requestValues['durationSec'] = this.get('durationSec'); | 134 | requestValues['durationSec'] = this.get('durationSec'); |
135 | + requestValues['durationMs'] = this.get('durationMs'); | ||
135 | } | 136 | } |
136 | 137 | ||
137 | requestValues['plots'] = []; | 138 | requestValues['plots'] = []; |
js/app/models/PlotObjects/PlotRequestObject.js
@@ -288,12 +288,13 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | @@ -288,12 +288,13 @@ Ext.define('amdaPlotObj.PlotRequestObject', { | ||
288 | } | 288 | } |
289 | }); | 289 | }); |
290 | } else { | 290 | } else { |
291 | - requestValues['startDate'] = this.get('startDate'); | ||
292 | - requestValues['stopDate'] = this.get('stopDate'); | 291 | + requestValues['startDate'] = Ext.Date.format(this.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
292 | + requestValues['stopDate'] = Ext.Date.format(this.get('stopDate'), 'Y-m-d\\TH:i:s.u'); | ||
293 | requestValues['durationDay'] = this.get('durationDay'); | 293 | requestValues['durationDay'] = this.get('durationDay'); |
294 | requestValues['durationHour'] = this.get('durationHour'); | 294 | requestValues['durationHour'] = this.get('durationHour'); |
295 | requestValues['durationMin'] = this.get('durationMin'); | 295 | requestValues['durationMin'] = this.get('durationMin'); |
296 | requestValues['durationSec'] = this.get('durationSec'); | 296 | requestValues['durationSec'] = this.get('durationSec'); |
297 | + requestValues['durationMs'] = this.get('durationMs'); | ||
297 | } | 298 | } |
298 | 299 | ||
299 | requestValues['page-layout-type'] = this.get('page-layout-type'); | 300 | requestValues['page-layout-type'] = this.get('page-layout-type'); |
js/app/models/Search.js
@@ -65,12 +65,13 @@ Ext.define('amdaModel.Search', { | @@ -65,12 +65,13 @@ Ext.define('amdaModel.Search', { | ||
65 | } | 65 | } |
66 | }); | 66 | }); |
67 | } else { | 67 | } else { |
68 | - myValues.startDate = this.get('startDate'); | ||
69 | - myValues.stopDate = this.get('stopDate'); | 68 | + myValues.startDate = Ext.Date.format(this.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
69 | + myValues.stopDate = Ext.Date.format(this.get('stopDate'), 'Y-m-d\\TH:i:s.u'); | ||
70 | myValues.durationDay = this.get('durationDay'); | 70 | myValues.durationDay = this.get('durationDay'); |
71 | myValues.durationHour = this.get('durationHour'); | 71 | myValues.durationHour = this.get('durationHour'); |
72 | myValues.durationMin = this.get('durationMin'); | 72 | myValues.durationMin = this.get('durationMin'); |
73 | myValues.durationSec = this.get('durationSec'); | 73 | myValues.durationSec = this.get('durationSec'); |
74 | + myValues.durationMs = this.get('durationMs'); | ||
74 | } | 75 | } |
75 | 76 | ||
76 | myValues.leaf = true; | 77 | myValues.leaf = true; |
js/app/models/Statistic.js
@@ -104,12 +104,13 @@ Ext.define('amdaModel.Statistic', { | @@ -104,12 +104,13 @@ Ext.define('amdaModel.Statistic', { | ||
104 | }); | 104 | }); |
105 | } else | 105 | } else |
106 | { | 106 | { |
107 | - values.startDate = this.get('startDate'); | ||
108 | - values.stopDate = this.get('stopDate'); | 107 | + values.startDate = Ext.Date.format(this.get('startDate'), 'Y-m-d\\TH:i:s.u'); |
108 | + values.stopDate = Ext.Date.format(this.get('stopDate'), 'Y-m-d\\TH:i:s.u'); | ||
109 | values.durationDay = this.get('durationDay'); | 109 | values.durationDay = this.get('durationDay'); |
110 | values.durationHour = this.get('durationHour'); | 110 | values.durationHour = this.get('durationHour'); |
111 | values.durationMin = this.get('durationMin'); | 111 | values.durationMin = this.get('durationMin'); |
112 | values.durationSec = this.get('durationSec'); | 112 | values.durationSec = this.get('durationSec'); |
113 | + values.durationMs = this.get('durationMs'); | ||
113 | } | 114 | } |
114 | 115 | ||
115 | values.leaf = true; | 116 | values.leaf = true; |
js/app/models/TimeTable.js
@@ -29,19 +29,15 @@ Ext.define('amdaModel.Interval', { | @@ -29,19 +29,15 @@ Ext.define('amdaModel.Interval', { | ||
29 | { name: 'start', type : 'date', defaultValue : new Date(), | 29 | { name: 'start', type : 'date', defaultValue : new Date(), |
30 | convert: function(value,rec) { | 30 | convert: function(value,rec) { |
31 | if (!Ext.isDate(value)){ | 31 | if (!Ext.isDate(value)){ |
32 | - var valueString = new String(value); | ||
33 | - var date = new Date(valueString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | ||
34 | - return date; | 32 | + return new Date(value); |
35 | } | 33 | } |
36 | return value; | 34 | return value; |
37 | } | 35 | } |
38 | }, | 36 | }, |
39 | { name: 'stop', type : 'date', defaultValue : new Date(), | 37 | { name: 'stop', type : 'date', defaultValue : new Date(), |
40 | convert: function(value,rec) { | 38 | convert: function(value,rec) { |
41 | - if (!Ext.isDate(value)){ | ||
42 | - var valueString = new String(value); | ||
43 | - var date = new Date(valueString.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')); | ||
44 | - return date; | 39 | + if (!Ext.isDate(value)){ |
40 | + return new Date(value); | ||
45 | } | 41 | } |
46 | return value; | 42 | return value; |
47 | } | 43 | } |
js/app/views/CatalogUI.js
@@ -179,8 +179,8 @@ Ext.define('amdaUI.CatalogUI', { | @@ -179,8 +179,8 @@ Ext.define('amdaUI.CatalogUI', { | ||
179 | return; | 179 | return; |
180 | } | 180 | } |
181 | Ext.Array.each(result.intervals, function (item, index) { | 181 | Ext.Array.each(result.intervals, function (item, index) { |
182 | - starts[index] = (item.start); | ||
183 | - stops[index] = (item.stop); | 182 | + starts[index] = Ext.Date.format(item.start, 'Y-m-d\\TH:i:s.u'); |
183 | + stops[index] = Ext.Date.format(item.start, 'Y-m-d\\TH:i:s.u'); | ||
184 | }); | 184 | }); |
185 | if(starts.length !== 0 || stops.length !== 0) { | 185 | if(starts.length !== 0 || stops.length !== 0) { |
186 | 186 | ||
@@ -205,7 +205,7 @@ Ext.define('amdaUI.CatalogUI', { | @@ -205,7 +205,7 @@ Ext.define('amdaUI.CatalogUI', { | ||
205 | var timeTabNode = Ext.create('amdaModel.TimeTableNode', {leaf: true}); | 205 | var timeTabNode = Ext.create('amdaModel.TimeTableNode', {leaf: true}); |
206 | ttObj.set('relatedCatalogId', catId) | 206 | ttObj.set('relatedCatalogId', catId) |
207 | creatDate = new Date(this.object.get('created')); | 207 | creatDate = new Date(this.object.get('created')); |
208 | - date = Ext.Date.format(creatDate, 'Y-m-d\\TH:i:s'); | 208 | + date = Ext.Date.format(creatDate, 'Y-m-d\\TH:i:s.u'); |
209 | descr = 'Generated by CDPP/Amda Catalog Module \n' + 'From Catalog: ' + this.object.get('name') + '\nOn: ' + date + '\n'; | 209 | descr = 'Generated by CDPP/Amda Catalog Module \n' + 'From Catalog: ' + this.object.get('name') + '\nOn: ' + date + '\n'; |
210 | ttObj.set('description', descr + this.object.get('description')); | 210 | ttObj.set('description', descr + this.object.get('description')); |
211 | ttObj.set('contact', this.object.get('contact')); | 211 | ttObj.set('contact', this.object.get('contact')); |
@@ -271,11 +271,10 @@ Ext.define('amdaUI.CatalogUI', { | @@ -271,11 +271,10 @@ Ext.define('amdaUI.CatalogUI', { | ||
271 | { | 271 | { |
272 | name: 'start', | 272 | name: 'start', |
273 | type: 'date', | 273 | type: 'date', |
274 | - dateFormat: 'Y-m-d\\TH:i:s', | 274 | + dateFormat: 'Y-m-d\\TH:i:s.u', |
275 | convert: function (value, rec) { | 275 | convert: function (value, rec) { |
276 | if (!Ext.isDate(value)) { | 276 | if (!Ext.isDate(value)) { |
277 | - var valueString = new String(value); | ||
278 | - return new Date(valueString.replace(/\-/g, '\/').replace(/[T|Z]/g, ' ')); | 277 | + return new Date(value); |
279 | } | 278 | } |
280 | return value; | 279 | return value; |
281 | } | 280 | } |
@@ -283,11 +282,10 @@ Ext.define('amdaUI.CatalogUI', { | @@ -283,11 +282,10 @@ Ext.define('amdaUI.CatalogUI', { | ||
283 | { | 282 | { |
284 | name: 'stop', | 283 | name: 'stop', |
285 | type: 'date', | 284 | type: 'date', |
286 | - dateFormat: 'Y-m-d\\TH:i:s', | 285 | + dateFormat: 'Y-m-d\\TH:i:s.u', |
287 | convert: function (value, rec) { | 286 | convert: function (value, rec) { |
288 | if (!Ext.isDate(value)) { | 287 | if (!Ext.isDate(value)) { |
289 | - var valueString = new String(value); | ||
290 | - return new Date(valueString.replace(/\-/g, '\/').replace(/[T|Z]/g, ' ')); | 288 | + return new Date(value); |
291 | } | 289 | } |
292 | return value; | 290 | return value; |
293 | } | 291 | } |
@@ -365,40 +363,36 @@ Ext.define('amdaUI.CatalogUI', { | @@ -365,40 +363,36 @@ Ext.define('amdaUI.CatalogUI', { | ||
365 | } | 363 | } |
366 | }, | 364 | }, |
367 | { | 365 | { |
368 | - xtype: 'datecolumn', | ||
369 | - text: 'Start Time', | ||
370 | - format: 'Y-m-d\\TH:i:s', | ||
371 | - sortable: true, | ||
372 | - dataIndex: 'start', | ||
373 | - width: 120, | ||
374 | - minWidth: 50, | ||
375 | - menuDisabled: false, | ||
376 | - editor: { | ||
377 | - xtype: 'datefield', | ||
378 | - allowBlank: false, | ||
379 | - hideTrigger: true, | ||
380 | - format: 'Y-m-d\\TH:i:s' | ||
381 | - }, | ||
382 | - filter: {type: 'date', dateFormat: 'Y-m-d'} | 366 | + header: 'Start Time', dataIndex: 'start', width: 120, |
367 | + editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s.u'}, | ||
368 | + renderer: function (value) { | ||
369 | + if (value != null) { | ||
370 | + if (Ext.isDate(value)) { | ||
371 | + return Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); | ||
372 | + } else { | ||
373 | + return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s.u'); | ||
374 | + } | ||
375 | + } else { | ||
376 | + return value; | ||
377 | + } | ||
378 | + } | ||
383 | }, | 379 | }, |
384 | { | 380 | { |
385 | - xtype: 'datecolumn', | ||
386 | - text: 'Stop Time', | ||
387 | - format: 'Y-m-d\\TH:i:s', | ||
388 | - sortable: true, | ||
389 | - dataIndex: 'stop', | ||
390 | - width: 120, | ||
391 | - minWidth: 50, | ||
392 | - menuDisabled: false, | ||
393 | - editor: { | ||
394 | - xtype: 'datefield', | ||
395 | - allowBlank: false, | ||
396 | - hideTrigger: true, | ||
397 | - format: 'Y-m-d\\TH:i:s' | ||
398 | - }, | ||
399 | - filter: {type: 'date', dateFormat: 'Y-m-d'} | 381 | + header: 'Stop Time', dataIndex: 'stop', width: 120, |
382 | + editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s.u'}, | ||
383 | + renderer: function (value) { | ||
384 | + if (value != null) { | ||
385 | + if (Ext.isDate(value)) { | ||
386 | + return Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); | ||
387 | + } else { | ||
388 | + return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s.u'); | ||
389 | + } | ||
390 | + } else { | ||
391 | + return value; | ||
392 | + } | ||
393 | + } | ||
400 | }, | 394 | }, |
401 | - { | 395 | + { |
402 | xtype: 'gridcolumn', | 396 | xtype: 'gridcolumn', |
403 | text: 'Duration (day)', | 397 | text: 'Duration (day)', |
404 | sortable: true, | 398 | sortable: true, |
@@ -506,7 +500,7 @@ Ext.define('amdaUI.CatalogUI', { | @@ -506,7 +500,7 @@ Ext.define('amdaUI.CatalogUI', { | ||
506 | case 1: //dateTime | 500 | case 1: //dateTime |
507 | field = Ext.apply({}, field, { | 501 | field = Ext.apply({}, field, { |
508 | type: 'date', | 502 | type: 'date', |
509 | - dateFormat: 'Y-m-d\\TH:i:s', | 503 | + dateFormat: 'Y-m-d\\TH:i:s.u', |
510 | convert: function (value, rec) { | 504 | convert: function (value, rec) { |
511 | if (!Ext.isDate(value)) { | 505 | if (!Ext.isDate(value)) { |
512 | var valueString = new String(value); | 506 | var valueString = new String(value); |
@@ -523,7 +517,7 @@ Ext.define('amdaUI.CatalogUI', { | @@ -523,7 +517,7 @@ Ext.define('amdaUI.CatalogUI', { | ||
523 | xtype: 'datefield', | 517 | xtype: 'datefield', |
524 | allowBlank: false, | 518 | allowBlank: false, |
525 | hideTrigger: true, | 519 | hideTrigger: true, |
526 | - format: 'Y-m-d\\TH:i:s' | 520 | + format: 'Y-m-d\\TH:i:s.u' |
527 | }, | 521 | }, |
528 | filter: {type: 'date', dateFormat: 'Y-m-d'} | 522 | filter: {type: 'date', dateFormat: 'Y-m-d'} |
529 | }); | 523 | }); |
@@ -894,7 +888,10 @@ Ext.define('amdaUI.CatalogUI', { | @@ -894,7 +888,10 @@ Ext.define('amdaUI.CatalogUI', { | ||
894 | 'isCatalog': true, | 888 | 'isCatalog': true, |
895 | 'data': {} | 889 | 'data': {} |
896 | }; | 890 | }; |
897 | - obj['data'][activeColumn.dataIndex] = value; | 891 | + if(activeColumn.dataIndex == "start" || activeColumn.dataIndex == "stop") |
892 | + obj['data'][activeColumn.dataIndex] = Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); | ||
893 | + else | ||
894 | + obj['data'][activeColumn.dataIndex] = value; | ||
898 | 895 | ||
899 | //Interval is modified on the server side | 896 | //Interval is modified on the server side |
900 | me.editing = true; | 897 | me.editing = true; |
@@ -1065,10 +1062,10 @@ Ext.define('amdaUI.CatalogUI', { | @@ -1065,10 +1062,10 @@ Ext.define('amdaUI.CatalogUI', { | ||
1065 | items :[{ | 1062 | items :[{ |
1066 | fieldLabel: 'Start Time', | 1063 | fieldLabel: 'Start Time', |
1067 | name: 'surveyStart', | 1064 | name: 'surveyStart', |
1068 | - emptyText: 'YYYY/MM/DDThh:mm:ss', | ||
1069 | - format: 'Y-m-d\\TH:i:s', | 1065 | + emptyText: 'YYYY/MM/DDThh:mm:ss.fff', |
1066 | + format: 'Y-m-d\\TH:i:s.u', | ||
1070 | enforceMaxLength: true, | 1067 | enforceMaxLength: true, |
1071 | - maxLength: 19, | 1068 | + maxLength: 25, |
1072 | labelWidth: 60, | 1069 | labelWidth: 60, |
1073 | labelAlign: 'left', | 1070 | labelAlign: 'left', |
1074 | listeners: { | 1071 | listeners: { |
@@ -1080,11 +1077,11 @@ Ext.define('amdaUI.CatalogUI', { | @@ -1080,11 +1077,11 @@ Ext.define('amdaUI.CatalogUI', { | ||
1080 | }, { | 1077 | }, { |
1081 | fieldLabel: 'Stop Time', | 1078 | fieldLabel: 'Stop Time', |
1082 | name: 'surveyStop', | 1079 | name: 'surveyStop', |
1083 | - emptyText: 'YYYY/MM/DDThh:mm:ss', | ||
1084 | - format: 'Y-m-d\\TH:i:s', | 1080 | + emptyText: 'YYYY/MM/DDThh:mm:ss.fff', |
1081 | + format: 'Y-m-d\\TH:i:s.u', | ||
1085 | labelAlign: 'left', | 1082 | labelAlign: 'left', |
1086 | enforceMaxLength: true, | 1083 | enforceMaxLength: true, |
1087 | - maxLength: 19, | 1084 | + maxLength: 25, |
1088 | labelWidth: 60, | 1085 | labelWidth: 60, |
1089 | align: 'left', | 1086 | align: 'left', |
1090 | listeners: { | 1087 | listeners: { |
js/app/views/IntervalUI.js
@@ -122,7 +122,7 @@ Ext.define('amdaUI.IntervalUI', { | @@ -122,7 +122,7 @@ Ext.define('amdaUI.IntervalUI', { | ||
122 | // get stop value | 122 | // get stop value |
123 | var stop = this.getStopTime(); | 123 | var stop = this.getStopTime(); |
124 | // if duration computable | 124 | // if duration computable |
125 | - if (stop != null && start != null) { | 125 | + if (Ext.isDate(start) && Ext.isDate(stop)) { |
126 | if ( stop <= start ) { | 126 | if ( stop <= start ) { |
127 | form.findField('stopDate').markInvalid('Stop Time must be after Start Time'); | 127 | form.findField('stopDate').markInvalid('Stop Time must be after Start Time'); |
128 | } else { | 128 | } else { |
@@ -140,6 +140,7 @@ Ext.define('amdaUI.IntervalUI', { | @@ -140,6 +140,7 @@ Ext.define('amdaUI.IntervalUI', { | ||
140 | form.findField('durationHour').setValue(Math.floor(diff/3600000 % 24)); | 140 | form.findField('durationHour').setValue(Math.floor(diff/3600000 % 24)); |
141 | form.findField('durationMin').setValue(Math.floor(diff/60000 % 60)); | 141 | form.findField('durationMin').setValue(Math.floor(diff/60000 % 60)); |
142 | form.findField('durationSec').setValue(Math.floor(diff/1000 % 60)); | 142 | form.findField('durationSec').setValue(Math.floor(diff/1000 % 60)); |
143 | + form.findField('durationMs').setValue(Math.floor(diff%1000 )); | ||
143 | 144 | ||
144 | if (durationDays > this.durationLimit) { | 145 | if (durationDays > this.durationLimit) { |
145 | form.findField('durationDay').markInvalid('Maximum interval is ' + this.durationLimit + ' days!'); | 146 | form.findField('durationDay').markInvalid('Maximum interval is ' + this.durationLimit + ' days!'); |
@@ -149,6 +150,7 @@ Ext.define('amdaUI.IntervalUI', { | @@ -149,6 +150,7 @@ Ext.define('amdaUI.IntervalUI', { | ||
149 | form.findField('durationHour').setValue(''); | 150 | form.findField('durationHour').setValue(''); |
150 | form.findField('durationMin').setValue(''); | 151 | form.findField('durationMin').setValue(''); |
151 | form.findField('durationSec').setValue(''); | 152 | form.findField('durationSec').setValue(''); |
153 | + form.findField('durationMs').setValue(''); | ||
152 | } | 154 | } |
153 | }, | 155 | }, |
154 | 156 | ||
@@ -158,7 +160,8 @@ Ext.define('amdaUI.IntervalUI', { | @@ -158,7 +160,8 @@ Ext.define('amdaUI.IntervalUI', { | ||
158 | form.findField('durationDay').isValid() && | 160 | form.findField('durationDay').isValid() && |
159 | form.findField('durationHour').isValid() && | 161 | form.findField('durationHour').isValid() && |
160 | form.findField('durationMin').isValid() && | 162 | form.findField('durationMin').isValid() && |
161 | - form.findField('durationSec').isValid() | 163 | + form.findField('durationSec').isValid() && |
164 | + form.findField('durationMs').isValid() | ||
162 | ); | 165 | ); |
163 | }, | 166 | }, |
164 | 167 | ||
@@ -185,7 +188,8 @@ Ext.define('amdaUI.IntervalUI', { | @@ -185,7 +188,8 @@ Ext.define('amdaUI.IntervalUI', { | ||
185 | var h = form.findField('durationHour').getValue(); | 188 | var h = form.findField('durationHour').getValue(); |
186 | var m = form.findField('durationMin').getValue(); | 189 | var m = form.findField('durationMin').getValue(); |
187 | var s = form.findField('durationSec').getValue(); | 190 | var s = form.findField('durationSec').getValue(); |
188 | - var duration = (d?d:0)*86400 + (h?h:0)*3600 + (m?m:0)*60 + (s?s:0) | 191 | + var ms = form.findField('durationMs').getValue(); |
192 | + var duration = (d?d:0)*86400 + (h?h:0)*3600 + (m?m:0)*60 + (s?s:0) + (ms?ms:0)/1000; | ||
189 | var stop = Ext.Date.add(start, Ext.Date.SECOND, duration); | 193 | var stop = Ext.Date.add(start, Ext.Date.SECOND, duration); |
190 | 194 | ||
191 | if (Ext.Date.isDST(stop) && !Ext.Date.isDST(start)) | 195 | if (Ext.Date.isDST(stop) && !Ext.Date.isDST(start)) |
@@ -226,12 +230,12 @@ Ext.define('amdaUI.IntervalUI', { | @@ -226,12 +230,12 @@ Ext.define('amdaUI.IntervalUI', { | ||
226 | xtype: 'datefield', | 230 | xtype: 'datefield', |
227 | // margin : '10 0 5 5', // (top, right, bottom, left). | 231 | // margin : '10 0 5 5', // (top, right, bottom, left). |
228 | name: fieldName, | 232 | name: fieldName, |
229 | - // width : 220, | ||
230 | - emptyText: 'YYYY/MM/DD hh:mm:ss', | ||
231 | - tip: 'Date formatted as YYYY/MM/DD hh:mm:ss', | ||
232 | - format: 'Y/m/d H:i:s', | 233 | + width : 230, |
234 | + emptyText: 'YYYY/MM/DD hh:mm:ss.uuu', | ||
235 | + tip: 'Date formatted as YYYY/MM/DD hh:mm:ss.uuu', | ||
236 | + format: 'Y/m/d H:i:s.u', | ||
233 | enforceMaxLength: true, | 237 | enforceMaxLength: true, |
234 | - maxLength: 19, | 238 | + maxLength: 25, |
235 | fieldLabel: fieldText, | 239 | fieldLabel: fieldText, |
236 | labelAlign: 'left', | 240 | labelAlign: 'left', |
237 | labelWidth: 60, | 241 | labelWidth: 60, |
@@ -296,7 +300,8 @@ Ext.define('amdaUI.IntervalUI', { | @@ -296,7 +300,8 @@ Ext.define('amdaUI.IntervalUI', { | ||
296 | { name: 'durationDay', emptyText: 'Days', tip: 'Days', maxValue: 73000, maxLength: 5, fieldLabel: 'Duration', labelWidth: 60, width: 110}, | 300 | { name: 'durationDay', emptyText: 'Days', tip: 'Days', maxValue: 73000, maxLength: 5, fieldLabel: 'Duration', labelWidth: 60, width: 110}, |
297 | { name: 'durationHour', emptyText: 'Hrs', tip: 'Hours', maxValue: 23}, | 301 | { name: 'durationHour', emptyText: 'Hrs', tip: 'Hours', maxValue: 23}, |
298 | { name: 'durationMin', emptyText: 'Mins', tip: 'Minutes', maxValue: 59}, | 302 | { name: 'durationMin', emptyText: 'Mins', tip: 'Minutes', maxValue: 59}, |
299 | - { name: 'durationSec', emptyText: 'Secs', tip: 'Seconds', maxValue: 59} | 303 | + { name: 'durationSec', emptyText: 'Secs', tip: 'Seconds', maxValue: 59}, |
304 | + { name: 'durationMs', emptyText: 'MS', tip: 'Milliseconds', maxLength: 3, maxValue: 999} | ||
300 | ] | 305 | ] |
301 | }; | 306 | }; |
302 | }, | 307 | }, |
js/app/views/PlotComponents/PlotExtendShiftPlug.js
@@ -22,6 +22,8 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -22,6 +22,8 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
22 | win : null, | 22 | win : null, |
23 | form : null, | 23 | form : null, |
24 | interactiveId : '', | 24 | interactiveId : '', |
25 | + actionDone :'', | ||
26 | + durationDone: 0, | ||
25 | 27 | ||
26 | constructor: function(config) { | 28 | constructor: function(config) { |
27 | Ext.apply(this, config); | 29 | Ext.apply(this, config); |
@@ -44,7 +46,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -44,7 +46,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
44 | { | 46 | { |
45 | this.win = new Ext.Window({ | 47 | this.win = new Ext.Window({ |
46 | id: 'plot-extendshift-win-' + this.hostCmp.ownerCt.getId(), // Plot window ID | 48 | id: 'plot-extendshift-win-' + this.hostCmp.ownerCt.getId(), // Plot window ID |
47 | - width: 230, | 49 | + width: 275, |
48 | height: 120, | 50 | height: 120, |
49 | x: 0, y: 0, | 51 | x: 0, y: 0, |
50 | baseCls:'x-panel', | 52 | baseCls:'x-panel', |
@@ -111,11 +113,23 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -111,11 +113,23 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
111 | var durationUnitField = this.form.getForm().findField('durationUnit'); | 113 | var durationUnitField = this.form.getForm().findField('durationUnit'); |
112 | var duration = this.toSec(durationField.getValue(), durationUnitField.getValue()); | 114 | var duration = this.toSec(durationField.getValue(), durationUnitField.getValue()); |
113 | if (duration) { | 115 | if (duration) { |
114 | - this.hostCmp.callInteractivePlot({'action' : actionType, 'interactiveId' : this.interactiveId, 'duration' : duration}); | 116 | + this.durationDone = duration; |
117 | + this.actionDone = actionType; | ||
118 | + this.hostCmp.callInteractivePlot({'action' : actionType, 'interactiveId' : this.interactiveId, 'duration' : duration}); | ||
119 | + Ext.getCmp('undo-PlotExtendShiftPlug').enable(); | ||
115 | } | 120 | } |
116 | else | 121 | else |
117 | myDesktopApp.errorMsg('No duration defined'); | 122 | myDesktopApp.errorMsg('No duration defined'); |
118 | }, | 123 | }, |
124 | + undoAction : function(){ | ||
125 | + if( this.durationDone){ | ||
126 | + this.hostCmp.callInteractivePlot({'action' : this.actionDone , 'interactiveId' : this.interactiveId, 'duration' : -this.durationDone}); | ||
127 | + Ext.getCmp('undo-PlotExtendShiftPlug').disable(); | ||
128 | + } | ||
129 | + else | ||
130 | + myDesktopApp.errorMsg('No duration defined'); | ||
131 | + | ||
132 | + }, | ||
119 | 133 | ||
120 | /** | 134 | /** |
121 | * Main form | 135 | * Main form |
@@ -123,7 +137,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -123,7 +137,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
123 | getFormConfig: function(){ | 137 | getFormConfig: function(){ |
124 | this.form = new Ext.form.FormPanel( { | 138 | this.form = new Ext.form.FormPanel( { |
125 | frame: true, | 139 | frame: true, |
126 | - width: 230, | 140 | + width: 275, |
127 | height: 120, | 141 | height: 120, |
128 | layout: { | 142 | layout: { |
129 | type: 'vbox', | 143 | type: 'vbox', |
@@ -171,6 +185,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -171,6 +185,7 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
171 | } | 185 | } |
172 | ], | 186 | ], |
173 | buttons: [ | 187 | buttons: [ |
188 | + | ||
174 | { | 189 | { |
175 | text: 'Extend/Shrink', | 190 | text: 'Extend/Shrink', |
176 | scope : this, | 191 | scope : this, |
@@ -178,13 +193,23 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | @@ -178,13 +193,23 @@ Ext.define('amdaPlotComp.PlotExtendShiftPlug', { | ||
178 | this.executeAction('extend'); | 193 | this.executeAction('extend'); |
179 | } | 194 | } |
180 | }, | 195 | }, |
181 | - '->', | 196 | + '-', |
182 | { | 197 | { |
183 | text: 'Shift', | 198 | text: 'Shift', |
184 | scope : this, | 199 | scope : this, |
185 | handler: function(bt,event) { | 200 | handler: function(bt,event) { |
186 | this.executeAction('shift'); | 201 | this.executeAction('shift'); |
187 | } | 202 | } |
203 | + }, | ||
204 | + '-', | ||
205 | + { | ||
206 | + text: 'Undo', | ||
207 | + id:'undo-PlotExtendShiftPlug', | ||
208 | + scope : this, | ||
209 | + disabled : true, | ||
210 | + handler: function(bt,event) { | ||
211 | + this.undoAction(); | ||
212 | + } | ||
188 | } | 213 | } |
189 | ] | 214 | ] |
190 | }); | 215 | }); |
js/app/views/PlotComponents/PlotSauvaudForm.js
@@ -49,7 +49,7 @@ Ext.define('amdaPlotComp.PlotSauvaudForm', { | @@ -49,7 +49,7 @@ Ext.define('amdaPlotComp.PlotSauvaudForm', { | ||
49 | { 'key': 0, 'value': 'dim1' }, | 49 | { 'key': 0, 'value': 'dim1' }, |
50 | { 'key': 1, 'value': 'dim2' }, | 50 | { 'key': 1, 'value': 'dim2' }, |
51 | ]; | 51 | ]; |
52 | - const dimField = this.addStandardCombo('right_dimension', 'Right Dim', dataStore , function (name, value, oldValue) { | 52 | + const dimField = this.addStandardCombo('right_dimension', 'Switch Dimension', dataStore , function (name, value, oldValue) { |
53 | if (ref.object.get('right_dim') != value) { | 53 | if (ref.object.get('right_dim') != value) { |
54 | ref.object.set('right_dim', value); | 54 | ref.object.set('right_dim', value); |
55 | } | 55 | } |
js/app/views/PlotComponents/PlotTabContent.js
@@ -39,6 +39,7 @@ Ext.define('amdaPlotComp.PlotTabContent', { | @@ -39,6 +39,7 @@ Ext.define('amdaPlotComp.PlotTabContent', { | ||
39 | 39 | ||
40 | setTime : function(startDate, stopDate) { | 40 | setTime : function(startDate, stopDate) { |
41 | this.timeSelector.intervalSel.setInterval(startDate, stopDate); | 41 | this.timeSelector.intervalSel.setInterval(startDate, stopDate); |
42 | + this.timeSelector.setActiveTimeSource(amdaModel.AmdaTimeObject.inputTimeSrc[1]); | ||
42 | 43 | ||
43 | }, | 44 | }, |
44 | getTimeSelector: function(){ | 45 | getTimeSelector: function(){ |
js/app/views/PlotComponents/PlotZoomPlug.js
@@ -193,7 +193,13 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | @@ -193,7 +193,13 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | ||
193 | 193 | ||
194 | this.hostCmp.panelImage.resetZoom(); | 194 | this.hostCmp.panelImage.resetZoom(); |
195 | }, | 195 | }, |
196 | - | 196 | + setTimePlot : function(){ |
197 | + var timeObj = new Object(); | ||
198 | + timeObj.start = this.form.getForm().findField('zoom-min-time').getValue(); | ||
199 | + timeObj.stop = this.form.getForm().findField('zoom-max-time').getValue(); | ||
200 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
201 | + plotModule.setTimeInterval(timeObj); | ||
202 | + }, | ||
197 | /** | 203 | /** |
198 | * Main form | 204 | * Main form |
199 | */ | 205 | */ |
@@ -212,11 +218,11 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | @@ -212,11 +218,11 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | ||
212 | items: [ | 218 | items: [ |
213 | { | 219 | { |
214 | xtype: 'datefield', name: 'zoom-min-time', fieldLabel: 'Start Time', | 220 | xtype: 'datefield', name: 'zoom-min-time', fieldLabel: 'Start Time', |
215 | - format: 'Y-m-d\\TH:i:s' | 221 | + format: 'Y/m/d H:i:s.u', |
216 | }, | 222 | }, |
217 | { | 223 | { |
218 | xtype: 'datefield', name: 'zoom-max-time', fieldLabel: 'Stop Time', | 224 | xtype: 'datefield', name: 'zoom-max-time', fieldLabel: 'Stop Time', |
219 | - format: 'Y-m-d\\TH:i:s' | 225 | + format: 'Y/m/d H:i:s.u' |
220 | }, | 226 | }, |
221 | { | 227 | { |
222 | xtype: 'numberfield', name: 'zoom-min-float', fieldLabel: 'Min Value' | 228 | xtype: 'numberfield', name: 'zoom-min-float', fieldLabel: 'Min Value' |
@@ -232,6 +238,15 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | @@ -232,6 +238,15 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | ||
232 | handler: function () { | 238 | handler: function () { |
233 | this.resetMinMaxValue(); | 239 | this.resetMinMaxValue(); |
234 | } | 240 | } |
241 | + }, | ||
242 | + { | ||
243 | + xtype: 'button', | ||
244 | + width: 100, | ||
245 | + text: 'Use interval in plot', | ||
246 | + scope: this, | ||
247 | + handler: function () { | ||
248 | + this.setTimePlot(); | ||
249 | + } | ||
235 | } | 250 | } |
236 | ] | 251 | ] |
237 | }; | 252 | }; |
@@ -372,7 +387,7 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | @@ -372,7 +387,7 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | ||
372 | 387 | ||
373 | this.form = new Ext.form.FormPanel({ | 388 | this.form = new Ext.form.FormPanel({ |
374 | frame: true, | 389 | frame: true, |
375 | - width: 250, | 390 | + width: 255, |
376 | layout: { | 391 | layout: { |
377 | type: 'vbox', | 392 | type: 'vbox', |
378 | pack: 'start', | 393 | pack: 'start', |
@@ -392,8 +407,8 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | @@ -392,8 +407,8 @@ Ext.define('amdaPlotComp.PlotZoomPlug', { | ||
392 | scope: this, | 407 | scope: this, |
393 | handler: function () { | 408 | handler: function () { |
394 | if (this.zoomType == 'timeAxis') { | 409 | if (this.zoomType == 'timeAxis') { |
395 | - var minZoom = this.form.getForm().findField('zoom-min-time').getValue(); | ||
396 | - var maxZoom = this.form.getForm().findField('zoom-max-time').getValue(); | 410 | + var minZoom = Ext.Date.format(this.form.getForm().findField('zoom-min-time').getValue(), 'Y-m-d H:i:s.u'); |
411 | + var maxZoom = Ext.Date.format(this.form.getForm().findField('zoom-max-time').getValue(),'Y-m-d H:i:s.u'); | ||
397 | } | 412 | } |
398 | else { | 413 | else { |
399 | var minZoom = this.form.getForm().findField('zoom-min-float').getValue(); | 414 | var minZoom = this.form.getForm().findField('zoom-min-float').getValue(); |
js/app/views/PlotTabResultUI.js
@@ -520,6 +520,22 @@ Ext.define('amdaUI.PlotTabResultUI', { | @@ -520,6 +520,22 @@ Ext.define('amdaUI.PlotTabResultUI', { | ||
520 | this.callInteractivePlot({'action' : 'goto', 'interactiveId' : this.interactiveId, 'ttFileIndex' : ttFileIndex, 'intIndex' : ttintervalIndex}); | 520 | this.callInteractivePlot({'action' : 'goto', 'interactiveId' : this.interactiveId, 'ttFileIndex' : ttFileIndex, 'intIndex' : ttintervalIndex}); |
521 | } | 521 | } |
522 | }, | 522 | }, |
523 | + '-', | ||
524 | + { | ||
525 | + text: 'Use This Time Inteval', | ||
526 | + scope: this, | ||
527 | + handler: function(){ | ||
528 | + var timeObj = new Object(); | ||
529 | + var startTime = new Date(this.crtContext.page.startTime*1000); | ||
530 | + timeObj.start = Ext.Date.add(startTime, Ext.Date.MINUTE, startTime.getTimezoneOffset()); | ||
531 | + | ||
532 | + var stopTime = new Date(this.crtContext.page.stopTime*1000); | ||
533 | + timeObj.stop = Ext.Date.add(stopTime, Ext.Date.MINUTE, stopTime.getTimezoneOffset()); | ||
534 | + | ||
535 | + var plotModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.plot.id); | ||
536 | + plotModule.setTimeInterval(timeObj); | ||
537 | + } | ||
538 | + }, | ||
523 | '-', | 539 | '-', |
524 | { | 540 | { |
525 | text: 'Go to Interval #', | 541 | text: 'Go to Interval #', |
js/app/views/PlotUI.js
@@ -140,12 +140,9 @@ Ext.define('amdaUI.PlotUI', { | @@ -140,12 +140,9 @@ Ext.define('amdaUI.PlotUI', { | ||
140 | setTimeFromData : function(obj) { | 140 | setTimeFromData : function(obj) { |
141 | if (!obj.start || !obj.stop) | 141 | if (!obj.start || !obj.stop) |
142 | return; | 142 | return; |
143 | - var dateStart = new Date(obj.start.replace(/[T|Z]/g,' ').replace(/\-/g,'\/')); | ||
144 | - var dateStop = new Date(obj.stop.replace(/[T|Z]/g,' ').replace(/\-/g,'\/')); | ||
145 | - | ||
146 | var plotTab = this.plotTabs.getCurrentPlotTabContent(); | 143 | var plotTab = this.plotTabs.getCurrentPlotTabContent(); |
147 | if (plotTab) | 144 | if (plotTab) |
148 | - plotTab.setTime(dateStart, dateStop); | 145 | + plotTab.setTime(obj.start, obj.stop); |
149 | }, | 146 | }, |
150 | 147 | ||
151 | savePlotRequest : function() { | 148 | savePlotRequest : function() { |
js/app/views/StatisticsUI.js
@@ -177,17 +177,17 @@ Ext.define('amdaUI.StatisticsUI', | @@ -177,17 +177,17 @@ Ext.define('amdaUI.StatisticsUI', | ||
177 | 177 | ||
178 | /** | 178 | /** |
179 | * Set Start-Stop from parameter info (Local & MyData) | 179 | * Set Start-Stop from parameter info (Local & MyData) |
180 | - */ | 180 | + |
181 | setTimeFromData: function (obj) { | 181 | setTimeFromData: function (obj) { |
182 | if (!obj.start || !obj.stop) | 182 | if (!obj.start || !obj.stop) |
183 | return; | 183 | return; |
184 | 184 | ||
185 | - var dateStart = new Date(obj.start.replace(/[T|Z]/g, ' ').replace(/\-/g, '\/')); | ||
186 | - var dateStop = new Date(obj.stop.replace(/[T|Z]/g, ' ').replace(/\-/g, '\/')); | 185 | + //var dateStart = new Date(obj.start.replace(/[T|Z]/g, ' ').replace(/\-/g, '\/')); |
186 | + //var dateStop = new Date(obj.stop.replace(/[T|Z]/g, ' ').replace(/\-/g, '\/')); | ||
187 | 187 | ||
188 | - this.formPanel.items.items[1].getForm().setValues({startDate: dateStart, stopDate: dateStop}); | ||
189 | - this.timeSelector.intervalSel.updateDuration(); | ||
190 | - }, | 188 | + //this.formPanel.items.items[1].getForm().setValues({startDate: dateStart, stopDate: dateStop}); |
189 | + // this.timeSelector.intervalSel.updateDuration(); | ||
190 | + }, */ | ||
191 | 191 | ||
192 | generateCatalog: function () | 192 | generateCatalog: function () |
193 | { | 193 | { |
js/app/views/TimeSelectorUI.js
@@ -61,6 +61,9 @@ Ext.define('amdaUI.TimeSelectorUI', { | @@ -61,6 +61,9 @@ Ext.define('amdaUI.TimeSelectorUI', { | ||
61 | getActiveTimeSource: function() { | 61 | getActiveTimeSource: function() { |
62 | return this.timeSrc.getActiveTab().getItemId(); | 62 | return this.timeSrc.getActiveTab().getItemId(); |
63 | }, | 63 | }, |
64 | + setActiveTimeSource : function (timeSrcIndex){ | ||
65 | + this.timeSrc.setActiveTab(timeSrcIndex); | ||
66 | + }, | ||
64 | 67 | ||
65 | isValid: function(acceptEmptyTTList = true) { | 68 | isValid: function(acceptEmptyTTList = true) { |
66 | if (this.getActiveTimeSource() === amdaModel.AmdaTimeObject.inputTimeSrc[0]) { | 69 | if (this.getActiveTimeSource() === amdaModel.AmdaTimeObject.inputTimeSrc[0]) { |
js/app/views/TimeTableUI.js
@@ -298,7 +298,7 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -298,7 +298,7 @@ Ext.define('amdaUI.TimeTableUI', { | ||
298 | var catNode = Ext.create('amdaModel.CatalogNode', {leaf: true}); | 298 | var catNode = Ext.create('amdaModel.CatalogNode', {leaf: true}); |
299 | catObj.set('relatedTimeTableId', id); | 299 | catObj.set('relatedTimeTableId', id); |
300 | creatDate = new Date(this.object.get('created')); | 300 | creatDate = new Date(this.object.get('created')); |
301 | - date = Ext.Date.format(creatDate, 'Y-m-d\\TH:i:s'); | 301 | + date = Ext.Date.format(creatDate, 'Y-m-d\\TH:i:s.u'); |
302 | descr = 'Generated by CDPP/Amda Time Table Module \n' + 'From Time Table: ' + this.object.get('name') + ' which was generated on: ' + date + '\n'; | 302 | descr = 'Generated by CDPP/Amda Time Table Module \n' + 'From Time Table: ' + this.object.get('name') + ' which was generated on: ' + date + '\n'; |
303 | catObj.set('description', descr + this.object.get('description')); | 303 | catObj.set('description', descr + this.object.get('description')); |
304 | var nbParam = parseInt(text); | 304 | var nbParam = parseInt(text); |
@@ -510,8 +510,8 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -510,8 +510,8 @@ Ext.define('amdaUI.TimeTableUI', { | ||
510 | {type: 'numeric', dataIndex: 'durationHour'}, | 510 | {type: 'numeric', dataIndex: 'durationHour'}, |
511 | {type: 'numeric', dataIndex: 'durationMin'}, | 511 | {type: 'numeric', dataIndex: 'durationMin'}, |
512 | {type: 'numeric', dataIndex: 'durationSec'}, | 512 | {type: 'numeric', dataIndex: 'durationSec'}, |
513 | - {type: 'date', dataIndex: 'start', dateFormat: 'Y-m-d'}, | ||
514 | - {type: 'date', dataIndex: 'stop', dateFormat: 'Y-m-d'} | 513 | + {type: 'date', dataIndex: 'start', dateFormat: 'c'}, |
514 | + {type: 'date', dataIndex: 'stop', dateFormat: 'c'} | ||
515 | ] | 515 | ] |
516 | }; | 516 | }; |
517 | var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { | 517 | var cellEditing = Ext.create('Ext.grid.plugin.CellEditing', { |
@@ -542,7 +542,7 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -542,7 +542,7 @@ Ext.define('amdaUI.TimeTableUI', { | ||
542 | 'isCatalog': false, | 542 | 'isCatalog': false, |
543 | 'data': {} | 543 | 'data': {} |
544 | }; | 544 | }; |
545 | - obj['data'][activeColumn.dataIndex] = value; | 545 | + obj['data'][activeColumn.dataIndex] = Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); |
546 | 546 | ||
547 | //context.grid.getSelectionModel().deselectAll(); | 547 | //context.grid.getSelectionModel().deselectAll(); |
548 | //Interval is modified on the server side | 548 | //Interval is modified on the server side |
@@ -612,13 +612,13 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -612,13 +612,13 @@ Ext.define('amdaUI.TimeTableUI', { | ||
612 | }, | 612 | }, |
613 | { | 613 | { |
614 | header: 'Start Time', dataIndex: 'start', width: 120, | 614 | header: 'Start Time', dataIndex: 'start', width: 120, |
615 | - editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s'}, | 615 | + editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s.u'}, |
616 | renderer: function (value) { | 616 | renderer: function (value) { |
617 | if (value != null) { | 617 | if (value != null) { |
618 | if (Ext.isDate(value)) { | 618 | if (Ext.isDate(value)) { |
619 | - return Ext.Date.format(value, 'Y-m-d\\TH:i:s'); | 619 | + return Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); |
620 | } else { | 620 | } else { |
621 | - return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s'); | 621 | + return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s.u'); |
622 | } | 622 | } |
623 | } else { | 623 | } else { |
624 | return value; | 624 | return value; |
@@ -627,13 +627,13 @@ Ext.define('amdaUI.TimeTableUI', { | @@ -627,13 +627,13 @@ Ext.define('amdaUI.TimeTableUI', { | ||
627 | }, | 627 | }, |
628 | { | 628 | { |
629 | header: 'Stop Time', dataIndex: 'stop', width: 120, | 629 | header: 'Stop Time', dataIndex: 'stop', width: 120, |
630 | - editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s'}, | 630 | + editor: {xtype: 'datefield', allowBlank: false, hideTrigger: true, format: 'Y-m-d\\TH:i:s.u'}, |
631 | renderer: function (value) { | 631 | renderer: function (value) { |
632 | if (value != null) { | 632 | if (value != null) { |
633 | if (Ext.isDate(value)) { | 633 | if (Ext.isDate(value)) { |
634 | - return Ext.Date.format(value, 'Y-m-d\\TH:i:s'); | 634 | + return Ext.Date.format(value, 'Y-m-d\\TH:i:s.u'); |
635 | } else { | 635 | } else { |
636 | - return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s'); | 636 | + return Ext.Date.format(new Date(value), 'Y-m-d\\TH:i:s.u'); |
637 | } | 637 | } |
638 | } else { | 638 | } else { |
639 | return value; | 639 | return value; |
php/classes/AmdaAction.php
@@ -247,8 +247,8 @@ class AmdaAction | @@ -247,8 +247,8 @@ class AmdaAction | ||
247 | $info .= "<br/>Time Range : depending on mission selection"; | 247 | $info .= "<br/>Time Range : depending on mission selection"; |
248 | else | 248 | else |
249 | $info .= "<br/>Time Range : undefined"; | 249 | $info .= "<br/>Time Range : undefined"; |
250 | - $child->setAttribute('dataStart', date("Y-m-d\TH:i:s\Z", strtotime(' -1 day'))); | ||
251 | - $child->setAttribute('dataStop', date("Y-m-d\TH:i:s\Z", time())); | 250 | + $child->setAttribute('dataStart', date("Y-m-d\TH:i:s.u\Z", strtotime(' -1 day'))); |
251 | + $child->setAttribute('dataStop', date("Y-m-d\TH:i:s.u\Z", time())); | ||
252 | } else { | 252 | } else { |
253 | $info .= "<br/>Time Range: ".$child->getAttribute('dataStart')."-".$child->getAttribute('dataStop'); | 253 | $info .= "<br/>Time Range: ".$child->getAttribute('dataStart')."-".$child->getAttribute('dataStop'); |
254 | } | 254 | } |
@@ -366,7 +366,7 @@ class AmdaAction | @@ -366,7 +366,7 @@ class AmdaAction | ||
366 | else { | 366 | else { |
367 | if (!empty($timeRestriction)) { | 367 | if (!empty($timeRestriction)) { |
368 | $disable = FALSE; | 368 | $disable = FALSE; |
369 | - $formattedTimeRestriction = date("Y-m-d\TH:i:s\Z",strtotime($timeRestriction)+1); | 369 | + $formattedTimeRestriction = date("Y-m-d\TH:i:s.u\Z",strtotime($timeRestriction)+1); |
370 | $info .= "<br/><b>After $formattedTimeRestriction data are restricted to group ".$child->getAttribute('group')."</b>"; | 370 | $info .= "<br/><b>After $formattedTimeRestriction data are restricted to group ".$child->getAttribute('group')."</b>"; |
371 | } | 371 | } |
372 | else { | 372 | else { |
@@ -478,15 +478,15 @@ class AmdaAction | @@ -478,15 +478,15 @@ class AmdaAction | ||
478 | 478 | ||
479 | if ($child->tagName == 'parameter'){ | 479 | if ($child->tagName == 'parameter'){ |
480 | if ($child->parentNode->hasAttribute('dataStart')){ | 480 | if ($child->parentNode->hasAttribute('dataStart')){ |
481 | - $globalStart = date('Y-m-d\TH:i:s\Z', strtotime($child->parentNode->getAttribute('dataStart'))); | ||
482 | - $globalStop = date('Y-m-d\TH:i:s\Z', strtotime($child->parentNode->getAttribute('dataStop'))); | 481 | + $globalStart = date('Y-m-d\TH:i:s.u\Z', strtotime($child->parentNode->getAttribute('dataStart'))); |
482 | + $globalStop = date('Y-m-d\TH:i:s.u\Z', strtotime($child->parentNode->getAttribute('dataStop'))); | ||
483 | } | 483 | } |
484 | } | 484 | } |
485 | 485 | ||
486 | if ( $child->tagName == 'component'){ | 486 | if ( $child->tagName == 'component'){ |
487 | if ($child->parentNode->parentNode->hasAttribute('dataStart')){ | 487 | if ($child->parentNode->parentNode->hasAttribute('dataStart')){ |
488 | - $globalStart = date('Y-m-d\TH:i:s\Z', strtotime($child->parentNode->getAttribute('dataStart'))); | ||
489 | - $globalStop = date('Y-m-d\TH:i:s\Z', strtotime($child->parentNode->getAttribute('dataStop'))); | 488 | + $globalStart = date('Y-m-d\TH:i:s.u\Z', strtotime($child->parentNode->getAttribute('dataStart'))); |
489 | + $globalStop = date('Y-m-d\TH:i:s.u\Z', strtotime($child->parentNode->getAttribute('dataStop'))); | ||
490 | } | 490 | } |
491 | } | 491 | } |
492 | 492 | ||
@@ -678,7 +678,7 @@ class AmdaAction | @@ -678,7 +678,7 @@ class AmdaAction | ||
678 | $result = $this->executeRequest((Object) array( | 678 | $result = $this->executeRequest((Object) array( |
679 | 'compression' => 'none', | 679 | 'compression' => 'none', |
680 | 'fileformat' => 'internal', | 680 | 'fileformat' => 'internal', |
681 | - 'timeformat' => 'YYYY-MM-DDThh:mm:ss', | 681 | + 'timeformat' => 'YYYY-MM-DDThh:mm:ss.u', |
682 | 'sendToSamp' => FALSE, | 682 | 'sendToSamp' => FALSE, |
683 | 'list' => array( | 683 | 'list' => array( |
684 | (Object) array( | 684 | (Object) array( |
php/classes/CatalogCacheIntervalObject.php
@@ -59,7 +59,7 @@ class CatalogCacheIntervalObject extends TimeTableCacheIntervalObject | @@ -59,7 +59,7 @@ class CatalogCacheIntervalObject extends TimeTableCacheIntervalObject | ||
59 | fwrite($handle,pack('d', floatval($value))); | 59 | fwrite($handle,pack('d', floatval($value))); |
60 | break; | 60 | break; |
61 | case 1: //date (timestamp) | 61 | case 1: //date (timestamp) |
62 | - fwrite($handle,pack('L', TimeUtils::iso2stamp($value))); | 62 | + fwrite($handle,pack('d', TimeUtils::iso2stamp($value))); |
63 | break; | 63 | break; |
64 | case 2: //string | 64 | case 2: //string |
65 | fwrite($handle,pack('L', strlen($value))); | 65 | fwrite($handle,pack('L', strlen($value))); |
@@ -101,7 +101,7 @@ class CatalogCacheIntervalObject extends TimeTableCacheIntervalObject | @@ -101,7 +101,7 @@ class CatalogCacheIntervalObject extends TimeTableCacheIntervalObject | ||
101 | $val = $res['val']; | 101 | $val = $res['val']; |
102 | break; | 102 | break; |
103 | case 1: //date (timestamp) | 103 | case 1: //date (timestamp) |
104 | - if (!$res = unpack('Lval',fread($handle,4))) { | 104 | + if (!$res = unpack('dval',fread($handle,8))) { |
105 | break; | 105 | break; |
106 | } | 106 | } |
107 | $val = TimeUtils::stamp2iso($res['val']); | 107 | $val = TimeUtils::stamp2iso($res['val']); |
php/classes/RequestMgr.php
@@ -94,9 +94,10 @@ class RequestMgr extends AmdaObjectMgr | @@ -94,9 +94,10 @@ class RequestMgr extends AmdaObjectMgr | ||
94 | $time = strtotime($obj->startDate); | 94 | $time = strtotime($obj->startDate); |
95 | 95 | ||
96 | $interval = $obj->durationDay*86400 + | 96 | $interval = $obj->durationDay*86400 + |
97 | - $obj->durationHour*3600 + | ||
98 | - $obj->durationMin*60 + $obj->durationSec; | 97 | + $obj->durationHour*3600 + |
98 | + $obj->durationMin*60 + $obj->durationSec; | ||
99 | $stopTime = gmdate("Y-m-d\TH:i:s", $time+$interval); | 99 | $stopTime = gmdate("Y-m-d\TH:i:s", $time+$interval); |
100 | + $stopTime = $stopTime.'.'.$obj->durationMs; | ||
100 | $obj->stopDate = $stopTime; | 101 | $obj->stopDate = $stopTime; |
101 | 102 | ||
102 | return $obj; | 103 | return $obj; |
php/classes/TimeTableCacheIntervalObject.php
@@ -107,17 +107,27 @@ class TimeTableCacheIntervalObject | @@ -107,17 +107,27 @@ class TimeTableCacheIntervalObject | ||
107 | } | 107 | } |
108 | 108 | ||
109 | public function writeBin($handle) { | 109 | public function writeBin($handle) { |
110 | - fwrite($handle,pack('L6',$this->id,$this->index,$this->start,$this->stop,$this->isNew,$this->isModified)); | 110 | + |
111 | + fwrite($handle,pack('L2',$this->id,$this->index)); | ||
112 | + fwrite($handle,pack('d2', $this->start,$this->stop)); | ||
113 | + fwrite($handle, pack('L2', $this->isNew,$this->isModified)); | ||
111 | } | 114 | } |
112 | 115 | ||
113 | public function loadBin($handle) { | 116 | public function loadBin($handle) { |
114 | - $array = unpack('L6int',fread($handle,6*4)); | ||
115 | - $this->id = $array['int1']; | ||
116 | - $this->index = $array['int2']; | ||
117 | - $this->start = $array['int3']; | ||
118 | - $this->stop = $array['int4']; | ||
119 | - $this->isNew = $array['int5']; | ||
120 | - $this->isModified = $array['int6']; | 117 | + |
118 | + $res = unpack('L2int',fread($handle,4*2)); | ||
119 | + $this->id = $res['int1']; | ||
120 | + $this->index = $res['int2']; | ||
121 | + | ||
122 | + $res = unpack('d2d',fread($handle,8*2)); | ||
123 | + $this->start = $res['d1']; | ||
124 | + $this->stop = $res['d2']; | ||
125 | + | ||
126 | + | ||
127 | + $res = unpack('L2int',fread($handle,4*2)); | ||
128 | + $this->isNew = $res['int1']; | ||
129 | + $this->isModified = $res['int2']; | ||
130 | + | ||
121 | } | 131 | } |
122 | 132 | ||
123 | public function dump() { | 133 | public function dump() { |
php/classes/TimeTableCacheMgr.php
@@ -240,10 +240,10 @@ | @@ -240,10 +240,10 @@ | ||
240 | $index = 0; | 240 | $index = 0; |
241 | 241 | ||
242 | if (!isset($start)) | 242 | if (!isset($start)) |
243 | - $start = date('Y-m-d\TH:i:s'); | 243 | + $start = date('Y-m-d\TH:i:s.u'); |
244 | 244 | ||
245 | if (!isset($stop)) | 245 | if (!isset($stop)) |
246 | - $stop = date('Y-m-d\TH:i:s'); | 246 | + $stop = date('Y-m-d\TH:i:s.u'); |
247 | 247 | ||
248 | $this->cache->addInterval(array('start' => $start, 'stop' => $stop), true, $index); | 248 | $this->cache->addInterval(array('start' => $start, 'stop' => $stop), true, $index); |
249 | 249 |
php/classes/TimeTableMgr.php
@@ -200,7 +200,7 @@ class TimeTableMgr extends AmdaObjectMgr | @@ -200,7 +200,7 @@ class TimeTableMgr extends AmdaObjectMgr | ||
200 | } | 200 | } |
201 | 201 | ||
202 | $this->id = $this->setId(); | 202 | $this->id = $this->setId(); |
203 | - $this->created = date('Y-m-d\TH:i:s'); | 203 | + $this->created = date('Y-m-d\TH:i:s.u'); |
204 | if (!$this->id) { | 204 | if (!$this->id) { |
205 | return ['error' => ID_CREATION_ERROR]; | 205 | return ['error' => ID_CREATION_ERROR]; |
206 | } | 206 | } |
php/classes/TimeUtils.php
@@ -9,13 +9,18 @@ class TimeUtils | @@ -9,13 +9,18 @@ class TimeUtils | ||
9 | catch (Exception $e) { | 9 | catch (Exception $e) { |
10 | $time = new DateTime('1970-01-01T00:00:00Z'); | 10 | $time = new DateTime('1970-01-01T00:00:00Z'); |
11 | } | 11 | } |
12 | - $stamp = $time->format('U'); | 12 | + $stamp = $time->format('U.u'); |
13 | unset($time); | 13 | unset($time); |
14 | return $stamp; | 14 | return $stamp; |
15 | } | 15 | } |
16 | 16 | ||
17 | public static function stamp2iso($stamp) { | 17 | public static function stamp2iso($stamp) { |
18 | - return date('Y-m-d\TH:i:s',$stamp); | 18 | + $intStamp = floor($stamp); |
19 | + $intMilli = round(($stamp-$intStamp)*1000); | ||
20 | + // c'est moche mais setTime de php ne prends pas en compte les ms | ||
21 | + $strMilli = str_pad(strval($intMilli),3, '0', STR_PAD_LEFT); | ||
22 | + $dateIso = date("Y-m-d\TH:i:s",$intStamp).'.'.$strMilli; | ||
23 | + return $dateIso; | ||
19 | } | 24 | } |
20 | } | 25 | } |
21 | 26 |