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;
|