| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 | 
							- SessionData = new Mongo.Collection('sessiondata');
 
- /**
 
-  * A UserSessionData in Wekan. Organization in Trello.
 
-  */
 
- SessionData.attachSchema(
 
-   new SimpleSchema({
 
-     _id: {
 
-       /**
 
-        * the organization id
 
-        */
 
-       type: Number,
 
-       optional: true,
 
-       // eslint-disable-next-line consistent-return
 
-       autoValue() {
 
-         if (this.isInsert && !this.isSet) {
 
-           return incrementCounter('counters', 'orgId', 1);
 
-         }
 
-       },
 
-     },
 
-     userId: {
 
-       /**
 
-        * userId of the user
 
-        */
 
-       type: String,
 
-       optional: false,
 
-     },
 
-     sessionId: {
 
-       /**
 
-        * unique session ID
 
-        */
 
-       type: String,
 
-       optional: false,
 
-     },
 
-     totalHits: {
 
-       /**
 
-        * total number of hits in the last report query
 
-        */
 
-       type: Number,
 
-       optional: true,
 
-     },
 
-     resultsCount: {
 
-       /**
 
-        * number of results returned
 
-        */
 
-       type: Number,
 
-       optional: true,
 
-     },
 
-     lastHit: {
 
-       /**
 
-        * the last hit returned from a report query
 
-        */
 
-       type: Number,
 
-       optional: true,
 
-     },
 
-     cards: {
 
-       type: [String],
 
-       optional: true,
 
-     },
 
-     selector: {
 
-       type: String,
 
-       optional: true,
 
-       blackbox: true,
 
-     },
 
-     projection: {
 
-       type: String,
 
-       optional: true,
 
-       blackbox: true,
 
-       defaultValue: {},
 
-     },
 
-     errorMessages: {
 
-       type: [String],
 
-       optional: true,
 
-     },
 
-     errors: {
 
-       type: [Object],
 
-       optional: true,
 
-       defaultValue: [],
 
-     },
 
-     debug: {
 
-       type: String,
 
-       optional: true,
 
-     },
 
-     'errors.$': {
 
-       type: new SimpleSchema({
 
-         tag: {
 
-           /**
 
-            * i18n tag
 
-            */
 
-           type: String,
 
-           optional: false,
 
-         },
 
-         value: {
 
-           /**
 
-            * value for the tag
 
-            */
 
-           type: String,
 
-           optional: true,
 
-           defaultValue: null,
 
-         },
 
-         color: {
 
-           type: Boolean,
 
-           optional: true,
 
-           defaultValue: false,
 
-         },
 
-       }),
 
-     },
 
-     createdAt: {
 
-       /**
 
-        * creation date of the team
 
-        */
 
-       type: Date,
 
-       // eslint-disable-next-line consistent-return
 
-       autoValue() {
 
-         if (this.isInsert) {
 
-           return new Date();
 
-         } else if (this.isUpsert) {
 
-           return { $setOnInsert: new Date() };
 
-         } else {
 
-           this.unset();
 
-         }
 
-       },
 
-     },
 
-     modifiedAt: {
 
-       type: Date,
 
-       denyUpdate: false,
 
-       // eslint-disable-next-line consistent-return
 
-       autoValue() {
 
-         if (this.isInsert || this.isUpsert || this.isUpdate) {
 
-           return new Date();
 
-         } else {
 
-           this.unset();
 
-         }
 
-       },
 
-     },
 
-   }),
 
- );
 
- SessionData.helpers({
 
-   getSelector() {
 
-     return SessionData.unpickle(this.selector);
 
-   },
 
-   getProjection() {
 
-     return SessionData.unpickle(this.projection);
 
-   },
 
- });
 
- SessionData.unpickle = pickle => {
 
-   return JSON.parse(pickle, (key, value) => {
 
-     return unpickleValue(value);
 
-   });
 
- };
 
- function unpickleValue(value) {
 
-   if (value === null) {
 
-     return null;
 
-   } else if (typeof value === 'object') {
 
-     // eslint-disable-next-line no-prototype-builtins
 
-     if (value.hasOwnProperty('$$class')) {
 
-       switch (value.$$class) {
 
-         case 'RegExp':
 
-           return new RegExp(value.source, value.flags);
 
-         case 'Date':
 
-           return new Date(value.stringValue);
 
-         case 'Object':
 
-           return unpickleObject(value);
 
-       }
 
-     }
 
-   }
 
-   return value;
 
- }
 
- function unpickleObject(obj) {
 
-   const newObject = {};
 
-   Object.entries(obj).forEach(([key, value]) => {
 
-     newObject[key] = unpickleValue(value);
 
-   });
 
-   return newObject;
 
- }
 
- SessionData.pickle = value => {
 
-   return JSON.stringify(value, (key, value) => {
 
-     return pickleValue(value);
 
-   }, 2);
 
- };
 
- function pickleValue(value) {
 
-   if (value === null) {
 
-     return null;
 
-   } else if (typeof value === 'object') {
 
-     switch (value.constructor.name) {
 
-       case 'RegExp':
 
-         return {
 
-           $$class: 'RegExp',
 
-           source: value.source,
 
-           flags: value.flags,
 
-         };
 
-       case 'Date':
 
-         return {
 
-           $$class: 'Date',
 
-           stringValue: String(value),
 
-         };
 
-       case 'Object':
 
-         return pickleObject(value);
 
-     }
 
-   }
 
-   return value;
 
- }
 
- function pickleObject(obj) {
 
-   const newObject = {};
 
-   Object.entries(obj).forEach(([key, value]) => {
 
-     newObject[key] = pickleValue(value);
 
-   });
 
-   return newObject;
 
- }
 
- if (!Meteor.isServer) {
 
-   SessionData.getSessionId = () => {
 
-     let sessionId = Session.get('sessionId');
 
-     if (!sessionId) {
 
-       sessionId = `${String(Meteor.userId())}-${String(Math.random())}`;
 
-       Session.set('sessionId', sessionId);
 
-     }
 
-     return sessionId;
 
-   };
 
- }
 
- export default SessionData;
 
 
  |