diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade index d6e6bfbad..35bff1aeb 100644 --- a/client/components/activities/activities.jade +++ b/client/components/activities/activities.jade @@ -59,18 +59,17 @@ template(name="activity") img.attachment-image-preview(src=activity.attachment.url) //- board activity ------------------------------------------------------ - if($eq mode 'board') - if($eq activity.activityType 'createBoard') - | {{{_ 'activity-created' boardLabelLink}}}. + if($eq activity.activityType 'createBoard') + | {{{_ 'activity-created' boardLabelLink}}}. - if($eq activity.activityType 'importBoard') - | {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}. + if($eq activity.activityType 'importBoard') + | {{{_ 'activity-imported-board' boardLabelLink sourceLink}}}. - if($eq activity.activityType 'addBoardMember') - | {{{_ 'activity-added' memberLink boardLabelLink}}}. + if($eq activity.activityType 'addBoardMember') + | {{{_ 'activity-added' memberLink boardLabelLink}}}. - if($eq activity.activityType 'removeBoardMember') - | {{{_ 'activity-excluded' memberLink boardLabelLink}}}. + if($eq activity.activityType 'removeBoardMember') + | {{{_ 'activity-excluded' memberLink boardLabelLink}}}. //- card activity ------------------------------------------------------- if($eq activity.activityType 'createCard') @@ -166,42 +165,27 @@ template(name="activity") = activity.comment.text //- date activity ------------------------------------------------ - if($eq mode 'card') - if($eq activity.activityType 'a-receivedAt') - | {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}. + if($eq activity.activityType 'a-receivedAt') + | {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}. - if($eq activity.activityType 'a-startAt') - | {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}. + if($eq activity.activityType 'a-startAt') + | {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}. - if($eq activity.activityType 'a-dueAt') - | {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}. + if($eq activity.activityType 'a-dueAt') + | {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}. - if($eq activity.activityType 'a-endAt') - | {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}. - - if($eq mode 'board') - if($eq activity.activityType 'a-receivedAt') - | {{{_ 'activity-receivedDate' (sanitize receivedDate) cardLink}}}. - - if($eq activity.activityType 'a-startAt') - | {{{_ 'activity-startDate' (sanitize startDate) cardLink}}}. - - if($eq activity.activityType 'a-dueAt') - | {{{_ 'activity-dueDate' (sanitize dueDate) cardLink}}}. - - if($eq activity.activityType 'a-endAt') - | {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}. + if($eq activity.activityType 'a-endAt') + | {{{_ 'activity-endDate' (sanitize endDate) cardLink}}}. //- customField activity ------------------------------------------------ - if($eq mode 'board') - if($eq activity.activityType 'createCustomField') - | {{_ 'activity-customfield-created' customField}}. + if($eq activity.activityType 'createCustomField') + | {{_ 'activity-customfield-created' customField}}. - if($eq activity.activityType 'setCustomField') - | {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}. + if($eq activity.activityType 'setCustomField') + | {{{_ 'activity-set-customfield' (sanitize lastCustomField) (sanitize lastCustomFieldValue) cardLink}}}. - if($eq activity.activityType 'unsetCustomField') - | {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}. + if($eq activity.activityType 'unsetCustomField') + | {{{_ 'activity-unset-customfield' (sanitize lastCustomField) cardLink}}}. //- label activity ------------------------------------------------------ if($eq activity.activityType 'addedLabel') @@ -238,12 +222,11 @@ template(name="activity") | {{{_ 'activity-removed' memberLink cardLink}}}. //- swimlane activity -------------------------------------------------- - if($neq mode 'card') - if($eq activity.activityType 'createSwimlane') - | {{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}. + if($eq activity.activityType 'createSwimlane') + | {{{_ 'activity-added' (sanitize activity.swimlane.title) boardLabelLink}}}. - if($eq activity.activityType 'archivedSwimlane') - | {{_ 'activity-archived' (sanitize activity.swimlane.title)}}. + if($eq activity.activityType 'archivedSwimlane') + | {{{_ 'activity-archived' (sanitize activity.swimlane.title)}}}. //- I don't understand this part ---------------------------------------- diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js index 87ac4a9a2..b19530196 100644 --- a/client/components/activities/activities.js +++ b/client/components/activities/activities.js @@ -70,22 +70,51 @@ BlazeComponent.extendComponent({ boardLabelLink() { const data = this.currentData(); + const currentBoardId = Session.get('currentBoard'); if (data.mode !== 'board') { - return createBoardLink(data.activity.board(), data.activity.listName); + // data.mode: card, linkedcard, linkedboard + return createBoardLink(data.activity.board(), data.activity.listName ? data.activity.listName : null); + } + else if (currentBoardId != data.activity.boardId) { + // data.mode: board + // current activitie is linked + return createBoardLink(data.activity.board(), data.activity.listName ? data.activity.listName : null); } return TAPi18n.__('this-board'); }, cardLabelLink() { const data = this.currentData(); - if (data.mode !== 'card') { - return createCardLink(data.activity.card()); + const currentBoardId = Session.get('currentBoard'); + if (data.mode == 'card') { + // data.mode: card + return TAPi18n.__('this-card'); } - return TAPi18n.__('this-card'); + else if (data.mode !== 'board') { + // data.mode: linkedcard, linkedboard + return createCardLink(data.activity.card(), null); + } + else if (currentBoardId != data.activity.boardId) { + // data.mode: board + // current activitie is linked + return createCardLink(data.activity.card(), data.activity.board().title); + } + return createCardLink(this.currentData().activity.card(), null); }, cardLink() { - return createCardLink(this.currentData().activity.card()); + const data = this.currentData(); + const currentBoardId = Session.get('currentBoard'); + if (data.mode !== 'board') { + // data.mode: card, linkedcard, linkedboard + return createCardLink(data.activity.card(), null); + } + else if (currentBoardId != data.activity.boardId) { + // data.mode: board + // current activitie is linked + return createCardLink(data.activity.card(), data.activity.board().title); + } + return createCardLink(this.currentData().activity.card(), null); }, receivedDate() { @@ -304,8 +333,10 @@ Template.commentReactions.helpers({ } }) -function createCardLink(card) { +function createCardLink(card, board) { if (!card) return ''; + let text = card.title; + if (board) text = `${board} > ` + text; return ( card && Blaze.toHTML( @@ -314,7 +345,7 @@ function createCardLink(card) { href: card.originRelativeUrl(), class: 'action-card', }, - DOMPurify.sanitize(card.title, { ALLOW_UNKNOWN_PROTOCOLS: true }), + DOMPurify.sanitize(text, { ALLOW_UNKNOWN_PROTOCOLS: true }), ), ) ); diff --git a/models/boards.js b/models/boards.js index 5d5710e37..e1e578724 100644 --- a/models/boards.js +++ b/models/boards.js @@ -773,7 +773,15 @@ Boards.helpers({ }, activities() { - return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 } }); + let linkedBoardId = [this._id]; + Cards.find({ + "type": "cardType-linkedBoard", + "boardId": this._id} + ).forEach(card => { + linkedBoardId.push(card.linkedId); + }); + return Activities.find({ boardId: { $in: linkedBoardId } }, { sort: { createdAt: -1 } }); + //return Activities.find({ boardId: this._id }, { sort: { createdAt: -1 } }); }, activeMembers(){ diff --git a/server/publications/activities.js b/server/publications/activities.js index 90be1a393..018f3f783 100644 --- a/server/publications/activities.js +++ b/server/publications/activities.js @@ -14,9 +14,23 @@ Meteor.publish('activities', (kind, id, limit, hideSystem) => { check(limit, Number); check(hideSystem, Boolean); + // Get linkedBoard + let linkedElmtId = [id]; + if (kind == 'board') { + Cards.find({ + "type": "cardType-linkedBoard", + "boardId": id} + ).forEach(card => { + linkedElmtId.push(card.linkedId); + }); + } + + //const selector = hideSystem + // ? { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: id }] } + // : { [`${kind}Id`]: id }; const selector = hideSystem - ? { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: id }] } - : { [`${kind}Id`]: id }; + ? { $and: [{ activityType: 'addComment' }, { [`${kind}Id`]: { $in: linkedElmtId } }] } + : { [`${kind}Id`]: { $in: linkedElmtId } }; return Activities.find(selector, { limit, sort: { createdAt: -1 }, diff --git a/server/publications/boards.js b/server/publications/boards.js index 92d709207..6c17ed7c5 100644 --- a/server/publications/boards.js +++ b/server/publications/boards.js @@ -270,7 +270,7 @@ Meteor.publishRelations('board', function(boardId, isArchived) { checklists.push(cardId); checklistItems.push(cardId); parentCards.push(cardId); - cardCommentReactions.push(cardId) + cardCommentReactions.push(cardId); }, );