| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 | import { ReactiveCache } from '/imports/reactiveCache';Org = new Mongo.Collection('org');/** * A Organization in Wekan. A Enterprise in Trello. */Org.attachSchema(  new SimpleSchema({    orgDisplayName: {      /**       * the name to display for the organization       */      type: String,      optional: true,    },    orgDesc: {      /**       * the description the organization       */      type: String,      optional: true,      max: 190,    },    orgShortName: {      /**       * short name of the organization       */      type: String,      optional: true,      max: 255,    },    orgAutoAddUsersWithDomainName: {      /**       * automatically add users with domain name       */      type: String,      optional: true,      max: 255,    },    orgWebsite: {      /**       * website of the organization       */      type: String,      optional: true,      max: 255,    },    orgIsActive: {      /**       * status of the organization       */      type: Boolean,      optional: true,    },    createdAt: {      /**       * creation date of the organization       */      type: Date,      denyUpdate: false,      // 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) {  Org.allow({    insert(userId, doc) {      const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser();      if (user?.isAdmin)        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    update(userId, doc) {      const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser();      if (user?.isAdmin)        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    remove(userId, doc) {      const user = ReactiveCache.getUser(userId) || ReactiveCache.getCurrentUser();      if (user?.isAdmin)        return true;      if (!user) {        return false;      }      return doc._id === userId;    },    fetch: [],  });  Meteor.methods({    setCreateOrg(      orgDisplayName,      orgDesc,      orgShortName,      orgAutoAddUsersWithDomainName,      orgWebsite,      orgIsActive,    ) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(orgDisplayName, String);        check(orgDesc, String);        check(orgShortName, String);        check(orgAutoAddUsersWithDomainName, String);        check(orgWebsite, String);        check(orgIsActive, Boolean);        const nOrgNames = ReactiveCache.getOrgs({ orgShortName }).length;        if (nOrgNames > 0) {          throw new Meteor.Error('orgname-already-taken');        } else {          Org.insert({            orgDisplayName,            orgDesc,            orgShortName,            orgAutoAddUsersWithDomainName,            orgWebsite,            orgIsActive,          });        }      }    },    setCreateOrgFromOidc(      orgDisplayName,      orgDesc,      orgShortName,      orgAutoAddUsersWithDomainName,      orgWebsite,      orgIsActive,    ) {      check(orgDisplayName, String);      check(orgDesc, String);      check(orgShortName, String);      check(orgAutoAddUsersWithDomainName, String);      check(orgWebsite, String);      check(orgIsActive, Boolean);      const nOrgNames = ReactiveCache.getOrgs({ orgShortName }).length;      if (nOrgNames > 0) {        throw new Meteor.Error('orgname-already-taken');      } else {        Org.insert({          orgDisplayName,          orgDesc,          orgShortName,          orgAutoAddUsersWithDomainName,          orgWebsite,          orgIsActive,        });      }    },    setOrgDisplayName(org, orgDisplayName) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgDisplayName, String);        Org.update(org, {          $set: { orgDisplayName: orgDisplayName },        });        Meteor.call('setUsersOrgsOrgDisplayName', org._id, orgDisplayName);      }    },    setOrgDesc(org, orgDesc) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgDesc, String);        Org.update(org, {          $set: { orgDesc: orgDesc },        });      }    },    setOrgShortName(org, orgShortName) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgShortName, String);        Org.update(org, {          $set: { orgShortName: orgShortName },        });      }    },    setAutoAddUsersWithDomainName(org, orgAutoAddUsersWithDomainName) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgAutoAddUsersWithDomainName, String);        Org.update(org, {          $set: { orgAutoAddUsersWithDomainName: orgAutoAddUsersWithDomainName },        });      }    },    setOrgIsActive(org, orgIsActive) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgIsActive, Boolean);        Org.update(org, {          $set: { orgIsActive: orgIsActive },        });      }    },    setOrgAllFieldsFromOidc(      org,      orgDisplayName,      orgDesc,      orgShortName,      orgAutoAddUsersWithDomainName,      orgWebsite,      orgIsActive,    ) {      check(org, Object);      check(orgDisplayName, String);      check(orgDesc, String);      check(orgShortName, String);      check(orgAutoAddUsersWithDomainName, String);      check(orgWebsite, String);      check(orgIsActive, Boolean);      Org.update(org, {        $set: {          orgDisplayName: orgDisplayName,          orgDesc: orgDesc,          orgShortName: orgShortName,          orgAutoAddUsersWithDomainName: orgAutoAddUsersWithDomainName,          orgWebsite: orgWebsite,          orgIsActive: orgIsActive,        },      });      Meteor.call('setUsersOrgsOrgDisplayName', org._id, orgDisplayName);    },    setOrgAllFields(      org,      orgDisplayName,      orgDesc,      orgShortName,      orgAutoAddUsersWithDomainName,      orgWebsite,      orgIsActive,    ) {      if (ReactiveCache.getCurrentUser()?.isAdmin) {        check(org, Object);        check(orgDisplayName, String);        check(orgDesc, String);        check(orgShortName, String);        check(orgAutoAddUsersWithDomainName, String);        check(orgWebsite, String);        check(orgIsActive, Boolean);        Org.update(org, {          $set: {            orgDisplayName: orgDisplayName,            orgDesc: orgDesc,            orgShortName: orgShortName,            orgAutoAddUsersWithDomainName: orgAutoAddUsersWithDomainName,            orgWebsite: orgWebsite,            orgIsActive: orgIsActive,          },        });        Meteor.call('setUsersOrgsOrgDisplayName', org._id, orgDisplayName);      }    },  });}if (Meteor.isServer) {  // Index for Organization name.  Meteor.startup(() => {    // Org._collection.createIndex({ name: -1 });    Org._collection.createIndex({ orgDisplayName: 1 });  });}export default Org;
 |