The Open Source kanban (built with Meteor). Keep variable/table/field names camelCase. For translations, only add Pull Request changes to wekan/i18n/en.i18n.json , other translations are done at https://transifex.com/wekan/wekan only.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CardComments = new Mongo . Collection ( 'card_comments' ) ;
CardComments . attachSchema ( new SimpleSchema ( {
boardId : {
type : String ,
} ,
cardId : {
type : String ,
} ,
// XXX Rename in `content`? `text` is a bit vague...
text : {
type : String ,
} ,
// XXX We probably don't need this information here, since we already have it
// in the associated comment creation activity
createdAt : {
type : Date ,
denyUpdate : false ,
autoValue ( ) { // eslint-disable-line consistent-return
if ( this . isInsert ) {
return new Date ( ) ;
} else {
this . unset ( ) ;
}
} ,
} ,
// XXX Should probably be called `authorId`
userId : {
type : String ,
autoValue ( ) { // eslint-disable-line consistent-return
if ( this . isInsert && ! this . isSet ) {
return this . userId ;
}
} ,
} ,
} ) ) ;
CardComments . allow ( {
insert ( userId , doc ) {
return allowIsBoardMember ( userId , Boards . findOne ( doc . boardId ) ) ;
} ,
update ( userId , doc ) {
return userId === doc . userId ;
} ,
remove ( userId , doc ) {
return userId === doc . userId ;
} ,
fetch : [ 'userId' , 'boardId' ] ,
} ) ;
CardComments . helpers ( {
user ( ) {
return Users . findOne ( this . userId ) ;
} ,
} ) ;
CardComments . hookOptions . after . update = { fetchPrevious : false } ;
if ( Meteor . isServer ) {
// Comments are often fetched within a card, so we create an index to make these
// queries more efficient.
Meteor . startup ( ( ) => {
CardComments . _collection . _ensureIndex ( { cardId : 1 , createdAt : - 1 } ) ;
} ) ;
CardComments . after . insert ( ( userId , doc ) => {
Activities . insert ( {
userId ,
activityType : 'addComment' ,
boardId : doc . boardId ,
cardId : doc . cardId ,
commentId : doc . _id ,
} ) ;
} ) ;
CardComments . after . remove ( ( userId , doc ) => {
const activity = Activities . findOne ( { commentId : doc . _id } ) ;
if ( activity ) {
Activities . remove ( activity . _id ) ;
}
} ) ;
}