Display for single notice, preparation for share link
authorymh <ymh.work@gmail.com>
Sat, 12 Nov 2016 17:21:25 +0100
changeset 414 5c6c526a7fc1
parent 413 8f29358e46da
child 415 0046797e0411
Display for single notice, preparation for share link
cms/app-client/app/components/toolbar-component.js
cms/app-client/app/controllers/application.js
cms/app-client/app/models/document.js
cms/app-client/app/router.js
cms/app-client/app/routes/application.js
cms/app-client/app/routes/document.js
cms/app-client/app/routes/tabs/language.js
cms/app-client/app/routes/tabs/langues.js
cms/app-client/app/services/colors.js
cms/app-client/app/services/filter.js
cms/app-client/app/services/player.js
cms/app-client/app/templates/document.hbs
cms/app-client/mirage/serializers/sparse-document.js
cms/app-client/package.json
cms/app-client/tests/unit/routes/document-test.js
dev/doc_agg_date.txt
server/src/app/Libraries/Filters/CorpusFilterManager.php
--- a/cms/app-client/app/components/toolbar-component.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/components/toolbar-component.js	Sat Nov 12 17:21:25 2016 +0100
@@ -2,17 +2,16 @@
 
 export default Ember.Component.extend({
 
-	player: Ember.inject.service(),
+  player: Ember.inject.service(),
 
-	classNames: ['toolbar-component'],
+  classNames: ['toolbar-component'],
 
-	actions: {
+  actions: {
 
-		display: function(el) {
-			console.log('toolbar display func');
-			this.get('player').displayAdditionalInformation(el);
-		}
+    display: function(el) {
+      this.get('player').displayAdditionalInformation(el);
+    }
 
-	}
+  }
 
 });
--- a/cms/app-client/app/controllers/application.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/controllers/application.js	Sat Nov 12 17:21:25 2016 +0100
@@ -39,7 +39,7 @@
         // need to reset pagination
         this.set("page", 1);
     }),
-    filterObserver: Ember.observer('filter', 'filter.language', 'filter.date', 'filter.date.[]', 'filter.discourse', 'filter.discourse.[]', 'filter.location', 'filter.theme', 'filter.theme.[]', function() {
+    filterObserver: Ember.observer('filter', 'filter.language', 'filter.date', 'filter.date.[]', 'filter.discourse', 'filter.discourse.[]', 'filter.location', 'filter.theme', 'filter.theme.[]',function() {
         this.setProperties(this.get('filter').getProperties('language', 'date', 'discourse', 'theme', 'location'));
         // need to reset pagination
         this.set("page", 1);
--- a/cms/app-client/app/models/document.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/models/document.js	Sat Nov 12 17:21:25 2016 +0100
@@ -19,7 +19,7 @@
     subjects: DS.attr({ defaultValue: function() { return []; } }),
 
     duration_ms: DS.attr('number', {
-        defaultValue: function() {
+        defaultValue: () => {
             var self = this;
             var duration = 0;
             Object.keys(this.get('mediaArray')).forEach(function(key) {
--- a/cms/app-client/app/router.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/router.js	Sat Nov 12 17:21:25 2016 +0100
@@ -9,15 +9,16 @@
     player: Ember.inject.service(),
 
     didTransition:function() {
-    	this.get('player').toggleVideoscreen(false);
-    	this.get('player').displayMetadata(this.get('player').get('window'));
+        this.get('player').toggleVideoscreen(false);
+        this.get('player').displayMetadata(this.get('player').get('window'));
 
-    	this._super(...arguments);
+        this._super(...arguments);
     }
 
 });
 
 Router.map(function() {
+    this.route('document', { path: '/doc/:doc_id'});
     this.route('tabs/langues', { path: '/' });
     this.route('tabs/langues', { path: '/langues' });
     this.route('tabs/carto', { path: '/cartographie' });
--- a/cms/app-client/app/routes/application.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/routes/application.js	Sat Nov 12 17:21:25 2016 +0100
@@ -9,12 +9,21 @@
     filter: Ember.inject.service(),
     constants: Ember.inject.service(),
 
-    model: function(params) {
-        let filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues'));
-        return this.store.query('document', _.merge(filterQueryArgs, {
-            page: params['page'],
-            perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE
-        }));
+    model: function(params, transition) {
+        if(transition.targetName === 'document') {
+            let documentId = transition.params['document']['doc_id'];
+            return this.store.query('document', {
+              id: documentId,
+              page: 1,
+              perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE
+            });
+        } else {
+            let filterQueryArgs = _.clone(this.get('filter').get('queryParamsValues'));
+            return this.store.query('document', _.merge(filterQueryArgs, {
+                page: params['page'],
+                perpage: this.get('constants').DOCUMENTS_PAGINATION_PERPAGE
+            }));
+        }
     },
 
     /**
@@ -48,12 +57,12 @@
     },
 
     beforeModel: function(transition) {
-        new RSVP.Promise((resolve) => {
+        return new RSVP.Promise((resolve) => {
           // succeed
           this.get('filter').setProperties(transition['queryParams']);
           resolve();
         });
-        return this._super(...arguments);
+        //return this._super(...arguments);
     },
 
     queryParams: Ember.computed('filter', function() {
@@ -71,6 +80,12 @@
               controller.set('isLoading', false);
           });
         },
+        willTransition: function(transition) {
+            if(this.controller.currentPath === 'document' || transition.targetName === 'document') {
+                this.refresh();
+            }
+            return true;
+        },
 
         didTransition: function() {
             // Append body classname depending on the route
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/app-client/app/routes/document.js	Sat Nov 12 17:21:25 2016 +0100
@@ -0,0 +1,13 @@
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+    model() {
+        return this.modelFor('application');
+    },
+
+    actions : {
+        didTransition() {
+            this.controllerFor('application').get('player').displayMetadata('notice');
+        }
+    }
+});
--- a/cms/app-client/app/routes/tabs/language.js	Thu Nov 10 15:35:27 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-import Ember from 'ember';
-
-export default Ember.Route.extend({
-
-    player: Ember.inject.service(),
-
-    activate: function() {
-        this.get('player').set('window', false);
-    }
-
-});
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/app-client/app/routes/tabs/langues.js	Sat Nov 12 17:21:25 2016 +0100
@@ -0,0 +1,11 @@
+import Ember from 'ember';
+
+export default Ember.Route.extend({
+
+    player: Ember.inject.service(),
+
+    activate: function() {
+        this.get('player').set('window', false);
+    }
+
+});
--- a/cms/app-client/app/services/colors.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/services/colors.js	Sat Nov 12 17:21:25 2016 +0100
@@ -21,7 +21,6 @@
 
 export function getComplement(c) {
     let chromaColorHsl = chroma(c).hsl();
-    console.log(chromaColorHsl[0]);
     chromaColorHsl[0] += 180;
     if (chromaColorHsl[0] > 360) {
         chromaColorHsl[0] -= 360;
--- a/cms/app-client/app/services/filter.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/services/filter.js	Sat Nov 12 17:21:25 2016 +0100
@@ -75,12 +75,11 @@
             case 'discourse':
             case 'theme':
                 let filterValues = this.get(filter);
-                console.log("filterValues", filterValues);
                 if(filterValues === null) {
                     filterValues = [];
                 }
                 if(!_.contains(filterValues, value)) {
-                    filterValues = filterValues.slice(0);
+                    filterValues = filterValues.slice(0); //clone
                     filterValues.push(value);
                     filterValues.sort();
                     this.set(filter, filterValues);
@@ -101,7 +100,7 @@
         return `${value}`;
     },
     deserializeQueryParam(value, urlKey, defaultValueType) {
-        if (urlKey === 'date' || urlKey === 'theme' || urlKey === 'discourse') {
+        if (urlKey === 'id' || urlKey === 'date' || urlKey === 'theme' || urlKey === 'discourse') {
             if(_.isArray(value)) {
                 return value;
             } else {
--- a/cms/app-client/app/services/player.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/app/services/player.js	Sat Nov 12 17:21:25 2016 +0100
@@ -18,7 +18,6 @@
 
     displayAdditionalInformation: function(el) {
         if(el === 'video') {
-            console.log('toggleVideoscreen');
             this.toggleVideoscreen();
         } else {
             if(this.get('window') !== el) {
@@ -42,7 +41,7 @@
             this.set('videoscreen', !this.get('videoscreen'));
         } else {
             this.set('videoscreen', state);
-        }        
+        }
     },
 
     init: function() {
--- a/cms/app-client/mirage/serializers/sparse-document.js	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/mirage/serializers/sparse-document.js	Sat Nov 12 17:21:25 2016 +0100
@@ -7,10 +7,33 @@
     attrs: ['id', 'title', 'languages', 'url', 'issued', 'modified', 'publishers', 'mediaArray', 'transcript'],
 
     serialize(response, request) {
-
         // This is how to call super, as Mirage borrows [Backbone's implementation of extend](http://backbonejs.org/#Model-extend)
         let json = BaseSerializer.prototype.serialize.apply(this, arguments);
 
+        if(!!request.queryParams.id) {
+            let docs = _(json['documents']).filter(function(m) {
+                return m.id === request.queryParams.id;
+            }).map(function(doc) {
+                let res = _.omit(doc, ['publishers', 'mediaArray', 'transcript']);
+                res['publisher'] = doc['publishers'].join(', ');
+                res['duration_ms'] = doc['mediaArray']?doc['mediaArray'][_(Object.keys(doc['mediaArray'])).first()]['extent_ms']:0;
+                res['transcript_url'] = (doc['transcript'] && doc['transcript']['url'])?doc['transcript']['url']:null;
+                return res;
+            }).value();
+            let meta = {
+              total: 1,
+              per_page: 1,
+              current_page: 1,
+              last_page: 1,
+              from: 1,
+              to: 1,
+              prev_page_url: null,
+              next_page_url: null
+            };
+
+            return {'documents': docs, 'meta': meta};
+        }
+
         let page = Math.max(parseInt(request.queryParams.page || 1) - 1, 0);
         let perPage = parseInt(request.queryParams.perpage || 100);
 
--- a/cms/app-client/package.json	Thu Nov 10 15:35:27 2016 +0100
+++ b/cms/app-client/package.json	Sat Nov 12 17:21:25 2016 +0100
@@ -56,6 +56,7 @@
     "ember-load-initializers": "^0.5.1",
     "ember-lodash": "0.0.10",
     "ember-resolver": "^2.0.3",
+    "ember-truth-helpers": "1.2.0",
     "ember-welcome-page": "^1.0.3",
     "ember-wormhole": "0.4.0",
     "eslint-config-ember": "^0.3.0",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/app-client/tests/unit/routes/document-test.js	Sat Nov 12 17:21:25 2016 +0100
@@ -0,0 +1,11 @@
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('route:document', 'Unit | Route | document', {
+  // Specify the other units that are required for this test.
+  // needs: ['controller:foo']
+});
+
+test('it exists', function(assert) {
+  let route = this.subject();
+  assert.ok(route);
+});
--- a/dev/doc_agg_date.txt	Thu Nov 10 15:35:27 2016 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-{
-    "size": 0,
-    "query": { "match_all": [] },
-    "aggs": {
-        "datestats": {
-            "nested": {
-                "path": "creation_years"
-            },
-            "aggs": {
-                "years": {
-                    "terms": {
-                        "field": "creation_years.year",
-                        "size": 0,
-                        "order": {
-                            "_term": "asc"
-                        }
-                    },
-                    "aggs": {
-                        "year_count": {
-                            "sum": {
-                                "field": "creation_years.weight"
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
--- a/server/src/app/Libraries/Filters/CorpusFilterManager.php	Thu Nov 10 15:35:27 2016 +0100
+++ b/server/src/app/Libraries/Filters/CorpusFilterManager.php	Sat Nov 12 17:21:25 2016 +0100
@@ -10,6 +10,29 @@
 
     const DATE_REGEXP = "/^([[:digit:]]{4})(?:-([[:digit:]]{4}))?$/";
 
+    public function prepareIds($ids) {
+        if(is_null($ids)) {
+            return [];
+        }
+
+        if(is_string($ids)) {
+            return split(",", $ids);
+        }
+        else return $ids;
+    }
+
+    public function getIdsFilterPart($ids) {
+        return [
+            "bool" => [
+                "filter" => [
+                    "terms" => [
+                        'id' => $ids
+                    ]
+                ]
+            ]
+        ];
+    }
+
     public function getLanguageNode($nodeId) {
         $node = null;
         $currentNodes = [config('corpusparole.languages_treemap'),];
@@ -232,6 +255,11 @@
 
         $filters = [];
 
+        $ids = $this->prepareIds($request->input('id', []));
+        if(!empty($ids)) {
+            $filters['id'] = $ids;
+        }
+
         $languages = $this->prepareLanguages($request->input('language', []));
         if(!empty($languages)) {
             $filters['language'] = $languages;
@@ -266,7 +294,16 @@
         }
 
         $qFilterParts = [];
-
+        if(array_key_exists('id', $filters) && !empty($filters['id'])) {
+            $ids = $filters['id'];
+            if(is_string($ids)) {
+                $ids = [$ids,];
+            }
+            $fp = $this->getIdsFilterPart($ids);
+            if(!empty($fp)) {
+                $qFilterParts[] = $fp;
+            }
+        }
         if(array_key_exists('language', $filters) && !empty($filters['language'])) {
             $languages = $filters['language'];
             if(is_string($languages)) {