| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 | Team = new Mongo.Collection('team');/** * A Team in Wekan. Organization in Trello. */Team.attachSchema(  new SimpleSchema({    teamDisplayName: {      /**       * the name to display for the team       */      type: String,      optional: true,    },    teamDesc: {      /**       * the description the team       */      type: String,      optional: true,      max: 190,    },    teamShortName: {      /**       * short name of the team       */      type: String,      optional: true,      max: 255,    },    teamWebsite: {      /**       * website of the team       */      type: String,      optional: true,      max: 255,    },    teamIsActive: {      /**       * status of the team       */      type: Boolean,      optional: true,    },    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();        }      },    },  }),);if (Meteor.isServer) {  Team.allow({    insert(userId, doc) {      const user = Users.findOne({        _id: userId,      });      if ((user && user.isAdmin) || (Meteor.user() && Meteor.user().isAdmin))        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    update(userId, doc) {      const user = Users.findOne({        _id: userId,      });      if ((user && user.isAdmin) || (Meteor.user() && Meteor.user().isAdmin))        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    remove(userId, doc) {      const user = Users.findOne({        _id: userId,      });      if ((user && user.isAdmin) || (Meteor.user() && Meteor.user().isAdmin))        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    fetch: [],  });  Meteor.methods({    setCreateTeam(      teamDisplayName,      teamDesc,      teamShortName,      teamWebsite,      teamIsActive,    ) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(teamDisplayName, String);        check(teamDesc, String);        check(teamShortName, String);        check(teamWebsite, String);        check(teamIsActive, Boolean);        const nTeamNames = Team.find({ teamShortName }).count();        if (nTeamNames > 0) {          throw new Meteor.Error('teamname-already-taken');        } else {          Team.insert({            teamDisplayName,            teamDesc,            teamShortName,            teamWebsite,            teamIsActive,          });        }      }    },    setTeamDisplayName(team, teamDisplayName) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(team, Object);        check(teamDisplayName, String);        Team.update(team, {          $set: { teamDisplayName: teamDisplayName },        });        Meteor.call('setUsersTeamsTeamDisplayName', team._id, teamDisplayName);      }    },    setTeamDesc(team, teamDesc) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(team, Object);        check(teamDesc, String);        Team.update(team, {          $set: { teamDesc: teamDesc },        });      }    },    setTeamShortName(team, teamShortName) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(team, Object);        check(teamShortName, String);        Team.update(team, {          $set: { teamShortName: teamShortName },        });      }    },    setTeamIsActive(team, teamIsActive) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(team, Object);        check(teamIsActive, Boolean);        Team.update(team, {          $set: { teamIsActive: teamIsActive },        });      }    },    setTeamAllFields(      team,      teamDisplayName,      teamDesc,      teamShortName,      teamWebsite,      teamIsActive,    ) {      if (Meteor.user() && Meteor.user().isAdmin) {        check(team, Object);        check(teamDisplayName, String);        check(teamDesc, String);        check(teamShortName, String);        check(teamWebsite, String);        check(teamIsActive, Boolean);        Team.update(team, {          $set: {            teamDisplayName: teamDisplayName,            teamDesc: teamDesc,            teamShortName: teamShortName,            teamWebsite: teamWebsite,            teamIsActive: teamIsActive,          },        });        Meteor.call('setUsersTeamsTeamDisplayName', team._id, teamDisplayName);      }    },  });}if (Meteor.isServer) {  // Index for Team name.  Meteor.startup(() => {    Team._collection._ensureIndex({ teamDisplayName: 1 });  });}export default Team;
 |