From bddc9f942b50c72ede6e22a7a2153fb7b397ab70 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Sun, 20 Dec 2015 15:31:47 -0800 Subject: [PATCH 1/4] Serialize ILM sessions when they are saved to remove any time We just use the date. Not the time. --- app/serializers/ilm-session.js | 25 ++++++++++++++++++++++ tests/unit/serializers/ilm-session-test.js | 15 +++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 app/serializers/ilm-session.js create mode 100644 tests/unit/serializers/ilm-session-test.js diff --git a/app/serializers/ilm-session.js b/app/serializers/ilm-session.js new file mode 100644 index 0000000000..c94b67ba85 --- /dev/null +++ b/app/serializers/ilm-session.js @@ -0,0 +1,25 @@ +import DS from 'ember-data'; +import moment from 'moment'; + +const { RESTSerializer } = DS; + +export default RESTSerializer.extend({ + isNewSerializerAPI: true, + serialize(snapshot, options) { + let json = this._super(snapshot, options); + let dueDate = moment(json.dueDate); + json.dueDate = dueDate.format('YYYY-MM-DD'); + + //don't persist this, it is handled by the server + delete json.updatedAt; + + return json; + }, + normalize(modelClass, resourceHash, prop){ + let dueDate = moment.utc(resourceHash.dueDate).format('YYYY-MM-DD'); + let localDueDate = moment(dueDate, 'YYYY-MM-DD'); + resourceHash.dueDate = localDueDate.format(); + + return this._super(modelClass, resourceHash, prop); + } +}); diff --git a/tests/unit/serializers/ilm-session-test.js b/tests/unit/serializers/ilm-session-test.js new file mode 100644 index 0000000000..50972810c6 --- /dev/null +++ b/tests/unit/serializers/ilm-session-test.js @@ -0,0 +1,15 @@ +import { moduleForModel, test } from 'ember-qunit'; + +moduleForModel('ilm-session', 'Unit | Serializer | ilm session', { + // Specify the other units that are required for this test. + needs: ['serializer:ilm-session'] +}); + +// Replace this with your real tests. +test('it serializes records', function(assert) { + let record = this.subject(); + + let serializedRecord = record.serialize(); + + assert.ok(serializedRecord); +}); From a87e1dfbd7e7202a6db384ae4bc098686443adf7 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Sun, 20 Dec 2015 15:54:37 -0800 Subject: [PATCH 2/4] Force the correct time and date onto ILM sessions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ILM Sessions are coming from the API with a UTC time, but that isn’t really true. They have no real timestamp. This forces them to appear at 5pm on the correct date. --- app/services/school-events.js | 11 +++++++++-- app/services/user-events.js | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/services/school-events.js b/app/services/school-events.js index 669ab80c14..1cb59b84b7 100644 --- a/app/services/school-events.js +++ b/app/services/school-events.js @@ -12,11 +12,18 @@ export default Ember.Service.extend(EventMixin, { var url = '/' + config.adapterNamespace + '/schoolevents/' + schoolId + '?from=' + from + '&to=' + to; ajax(url).then(data => { - let events = data.events.sortBy('startDate').map(event => { + let events = data.events.map(event => { event.slug = this.getSlugForEvent(event); + if (event.ilmSession) { + let startDate = moment(moment.utc(event.startDate).format('YYYYMMDD'), 'YYYYMMDD').hour(17).minute(0).second(0); + let endDate = moment(moment.utc(event.endDate).format('YYYYMMDD'), 'YYYYMMDD').hour(17).minute(15).second(0); + event.startDate = startDate.format(); + event.endDate = endDate.format(); + + } return event; - }); + }).sortBy('startDate'); deferred.resolve(events); }); diff --git a/app/services/user-events.js b/app/services/user-events.js index 761e26ccf7..86edcb242b 100644 --- a/app/services/user-events.js +++ b/app/services/user-events.js @@ -14,11 +14,18 @@ export default Ember.Service.extend(EventMixin, { var url = '/' + config.adapterNamespace + '/userevents/' + user.get('id') + '?from=' + from + '&to=' + to; ajax(url).then(data => { - let events = data.userEvents.sortBy('startDate').map(event => { + let events = data.userEvents.map(event => { event.slug = this.getSlugForEvent(event); + if (event.ilmSession) { + let startDate = moment(moment.utc(event.startDate).format('YYYYMMDD'), 'YYYYMMDD').hour(17).minute(0).second(0); + let endDate = moment(moment.utc(event.endDate).format('YYYYMMDD'), 'YYYYMMDD').hour(17).minute(15).second(0); + event.startDate = startDate.format(); + event.endDate = endDate.format(); + + } return event; - }); + }).sortBy('startDate'); deferred.resolve(events); }); From 1126a1e6f38cc6791b9bdba0d63e4be91e86d4d5 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Sun, 20 Dec 2015 16:49:46 -0800 Subject: [PATCH 3/4] Send requests for events in UTC This correctly captures ILMs at the edge of a time period. Like the beginning of a week or any day view. --- app/components/dashboard-agenda.js | 4 ++-- app/components/dashboard-calendar.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/components/dashboard-agenda.js b/app/components/dashboard-agenda.js index 14ea8b2d15..974d30c3db 100644 --- a/app/components/dashboard-agenda.js +++ b/app/components/dashboard-agenda.js @@ -10,8 +10,8 @@ export default Component.extend({ init() { this._super(...arguments); - const fromTimeStamp = moment().hour(0).minute(0).unix(); - const toTimeStamp = moment().hour(23).minute(59).add(30, 'days').unix(); + const fromTimeStamp = moment.utc().hour(0).minute(0).unix(); + const toTimeStamp = moment.utc().hour(23).minute(59).add(30, 'days').unix(); this.setProperties({ fromTimeStamp, toTimeStamp }); }, diff --git a/app/components/dashboard-calendar.js b/app/components/dashboard-calendar.js index 2a731a94d8..57c61b3170 100644 --- a/app/components/dashboard-calendar.js +++ b/app/components/dashboard-calendar.js @@ -44,10 +44,10 @@ export default Component.extend({ this.set('selectedCourses', []); }), fromTimeStamp: computed('selectedDate', 'selectedView', function(){ - return moment(this.get('selectedDate')).startOf(this.get('selectedView')).unix(); + return moment.utc(this.get('selectedDate')).startOf(this.get('selectedView')).unix(); }), toTimeStamp: computed('selectedDate', 'selectedView', function(){ - return moment(this.get('selectedDate')).endOf(this.get('selectedView')).unix(); + return moment.utc(this.get('selectedDate')).endOf(this.get('selectedView')).unix(); }), calendarDate: momentFormat('selectedDate', 'YYYY-MM-DD'), ourEvents: computed('mySchedule', 'fromTimeStamp', 'toTimeStamp', 'selectedSchool', 'selectedView', function(){ From 6a4390f2cd0731a55bc6f65745ca16156fa74a94 Mon Sep 17 00:00:00 2001 From: Jonathan Johnson Date: Sun, 20 Dec 2015 16:58:17 -0800 Subject: [PATCH 4/4] Fix ilm-session serializer test dependancies --- tests/unit/serializers/ilm-session-test.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/unit/serializers/ilm-session-test.js b/tests/unit/serializers/ilm-session-test.js index 50972810c6..484d466c6b 100644 --- a/tests/unit/serializers/ilm-session-test.js +++ b/tests/unit/serializers/ilm-session-test.js @@ -2,7 +2,13 @@ import { moduleForModel, test } from 'ember-qunit'; moduleForModel('ilm-session', 'Unit | Serializer | ilm session', { // Specify the other units that are required for this test. - needs: ['serializer:ilm-session'] + needs: [ + 'model:session', + 'model:learner-group', + 'model:instructor-group', + 'model:user', + 'serializer:ilm-session' + ] }); // Replace this with your real tests.