diff options
author | Lauri Ojansivu <x@xet7.org> | 2018-09-04 20:09:36 +0300 |
---|---|---|
committer | Lauri Ojansivu <x@xet7.org> | 2018-09-04 20:09:36 +0300 |
commit | 77efcf71376d3da6c19ad1a4910567263e83c0ca (patch) | |
tree | cf771daed5671379fa616fbb6aed42baab8834d5 | |
parent | bcbe1aaaf561f3188111b586ad0734b983206482 (diff) | |
download | wekan-77efcf71376d3da6c19ad1a4910567263e83c0ca.tar.gz wekan-77efcf71376d3da6c19ad1a4910567263e83c0ca.tar.bz2 wekan-77efcf71376d3da6c19ad1a4910567263e83c0ca.zip |
- Add permission "No comments". It is like normal user, but does not show comments and activities.
Thanks to xet7 !
-rw-r--r-- | .eslintrc.json | 3 | ||||
-rw-r--r-- | client/components/cards/cardDetails.jade | 39 | ||||
-rw-r--r-- | client/components/cards/minicard.jade | 9 | ||||
-rw-r--r-- | client/components/sidebar/sidebar.jade | 15 | ||||
-rw-r--r-- | client/components/sidebar/sidebar.js | 15 | ||||
-rw-r--r-- | i18n/en.i18n.json | 2 | ||||
-rw-r--r-- | models/boards.js | 13 | ||||
-rw-r--r-- | models/lists.js | 6 | ||||
-rw-r--r-- | models/swimlanes.js | 6 | ||||
-rw-r--r-- | models/users.js | 10 | ||||
-rw-r--r-- | sandstorm.js | 3 | ||||
-rw-r--r-- | server/lib/utils.js | 6 |
12 files changed, 88 insertions, 39 deletions
diff --git a/.eslintrc.json b/.eslintrc.json index 1adaa623..65d7602b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -121,7 +121,8 @@ "allowIsBoardAdmin": true, "allowIsBoardMember": true, "allowIsBoardMemberByCard": true, - "allowIsBoardMemberNonComment": true, + "allowIsBoardMemberCommentOnly": true, + "allowIsBoardMemberNoComments": true, "Emoji": true, "Checklists": true, "Settings": true, diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade index 10828445..33d6d3b7 100644 --- a/client/components/cards/cardDetails.jade +++ b/client/components/cards/cardDetails.jade @@ -173,25 +173,28 @@ template(name="cardDetails") +attachmentsGalery hr - .activity-title - h3 {{ _ 'activity'}} - if currentUser.isBoardMember - .material-toggle-switch - span.toggle-switch-title {{_ 'hide-system-messages'}} - if hiddenSystemMessages - input.toggle-switch(type="checkbox" id="toggleButton" checked="checked") - else - input.toggle-switch(type="checkbox" id="toggleButton") - label.toggle-label(for="toggleButton") + unless currentUser.isNoComments + .activity-title + h3 {{ _ 'activity'}} + if currentUser.isBoardMember + .material-toggle-switch + span.toggle-switch-title {{_ 'hide-system-messages'}} + if hiddenSystemMessages + input.toggle-switch(type="checkbox" id="toggleButton" checked="checked") + else + input.toggle-switch(type="checkbox" id="toggleButton") + label.toggle-label(for="toggleButton") if currentUser.isBoardMember - +commentForm - if isLoaded.get - if isLinkedCard - +activities(card=this mode="linkedcard") - else if isLinkedBoard - +activities(card=this mode="linkedboard") - else - +activities(card=this mode="card") + unless currentUser.isNoComments + +commentForm + unless currentUser.isNoComments + if isLoaded.get + if isLinkedCard + +activities(card=this mode="linkedcard") + else if isLinkedBoard + +activities(card=this mode="linkedboard") + else + +activities(card=this mode="card") template(name="editCardTitleForm") textarea.js-edit-card-title(rows='1' autofocus) diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade index 37f537db..5c609802 100644 --- a/client/components/cards/minicard.jade +++ b/client/components/cards/minicard.jade @@ -65,10 +65,11 @@ template(name="minicard") +userAvatar(userId=this) .badges - if comments.count - .badge(title="{{_ 'card-comments-title' comments.count }}") - span.badge-icon.fa.fa-comment-o.badge-comment - span.badge-text= comments.count + unless currentUser.isNoComments + if comments.count + .badge(title="{{_ 'card-comments-title' comments.count }}") + span.badge-icon.fa.fa-comment-o.badge-comment + span.badge-text= comments.count if getDescription .badge.badge-state-image-only(title=getDescription) span.badge-icon.fa.fa-align-left diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 6085c2ad..ec88ce7e 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -23,10 +23,11 @@ template(name='homeSidebar') hr +labelsWidget hr - h3 - i.fa.fa-comments-o - | {{_ 'activities'}} - +activities(mode="board") + unless currentUser.isNoComments + h3 + i.fa.fa-comments-o + | {{_ 'activities'}} + +activities(mode="board") template(name="membersWidget") .board-widget.board-widget-members @@ -146,6 +147,12 @@ template(name="changePermissionsPopup") i.fa.fa-check span.sub-name {{_ 'normal-desc'}} li + a(class="{{#if isLastAdmin}}disabled{{else}}js-set-no-comments{{/if}}") + | {{_ 'no-comments'}} + if isNoComments + i.fa.fa-check + span.sub-name {{_ 'no-comments-desc'}} + li a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}") | {{_ 'comment-only'}} if isCommentOnly diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index 5a9de74b..5d34c4a8 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -126,8 +126,11 @@ Template.memberPopup.helpers({ if(type === 'normal'){ const currentBoard = Boards.findOne(Session.get('currentBoard')); const commentOnly = currentBoard.hasCommentOnly(this.userId); + const noComments = currentBoard.hasNoComments(this.userId); if(commentOnly){ return TAPi18n.__('comment-only').toLowerCase(); + } else if(noComments) { + return TAPi18n.__('no-comments').toLowerCase(); } else { return TAPi18n.__(type).toLowerCase(); } @@ -324,12 +327,13 @@ BlazeComponent.extendComponent({ }).register('addMemberPopup'); Template.changePermissionsPopup.events({ - 'click .js-set-admin, click .js-set-normal, click .js-set-comment-only'(event) { + 'click .js-set-admin, click .js-set-normal, click .js-set-no-comments, click .js-set-comment-only'(event) { const currentBoard = Boards.findOne(Session.get('currentBoard')); const memberId = this.userId; const isAdmin = $(event.currentTarget).hasClass('js-set-admin'); const isCommentOnly = $(event.currentTarget).hasClass('js-set-comment-only'); - currentBoard.setMemberPermission(memberId, isAdmin, isCommentOnly); + const isNoComments = $(event.currentTarget).hasClass('js-set-no-comments'); + currentBoard.setMemberPermission(memberId, isAdmin, isNoComments, isCommentOnly); Popup.back(1); }, }); @@ -342,7 +346,12 @@ Template.changePermissionsPopup.helpers({ isNormal() { const currentBoard = Boards.findOne(Session.get('currentBoard')); - return !currentBoard.hasAdmin(this.userId) && !currentBoard.hasCommentOnly(this.userId); + return !currentBoard.hasAdmin(this.userId) && !currentBoard.hasNoComments(this.userId) && !currentBoard.hasCommentOnly(this.userId); + }, + + isNoComments() { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + return !currentBoard.hasAdmin(this.userId) && currentBoard.hasNoComments(this.userId); }, isCommentOnly() { diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index f4222c5b..689ed42d 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -171,6 +171,8 @@ "comment-placeholder": "Write Comment", "comment-only": "Comment only", "comment-only-desc": "Can comment on cards only.", + "no-comments": "No comments", + "no-comments-desc": "Can not see comments and activities.", "computer": "Computer", "confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", "confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", diff --git a/models/boards.js b/models/boards.js index a017eb3f..71049bd9 100644 --- a/models/boards.js +++ b/models/boards.js @@ -110,6 +110,7 @@ Boards.attachSchema(new SimpleSchema({ userId: this.userId, isAdmin: true, isActive: true, + isNoComments: false, isCommentOnly: false, }]; } @@ -124,6 +125,9 @@ Boards.attachSchema(new SimpleSchema({ 'members.$.isActive': { type: Boolean, }, + 'members.$.isNoComments': { + type: Boolean, + }, 'members.$.isCommentOnly': { type: Boolean, }, @@ -292,6 +296,10 @@ Boards.helpers({ return !!_.findWhere(this.members, { userId: memberId, isActive: true, isAdmin: true }); }, + hasNoComments(memberId) { + return !!_.findWhere(this.members, { userId: memberId, isActive: true, isAdmin: false, isNoComments: true }); + }, + hasCommentOnly(memberId) { return !!_.findWhere(this.members, { userId: memberId, isActive: true, isAdmin: false, isCommentOnly: true }); }, @@ -501,6 +509,7 @@ Boards.mutations({ userId: memberId, isAdmin: false, isActive: true, + isNoComments: false, isCommentOnly: false, }, }, @@ -528,7 +537,7 @@ Boards.mutations({ }; }, - setMemberPermission(memberId, isAdmin, isCommentOnly) { + setMemberPermission(memberId, isAdmin, isNoComments, isCommentOnly) { const memberIndex = this.memberIndex(memberId); // do not allow change permission of self @@ -539,6 +548,7 @@ Boards.mutations({ return { $set: { [`members.${memberIndex}.isAdmin`]: isAdmin, + [`members.${memberIndex}.isNoComments`]: isNoComments, [`members.${memberIndex}.isCommentOnly`]: isCommentOnly, }, }; @@ -838,6 +848,7 @@ if (Meteor.isServer) { userId: req.body.owner, isAdmin: true, isActive: true, + isNoComments: false, isCommentOnly: false, }, ], diff --git a/models/lists.js b/models/lists.js index 6f6996cb..9bcb9ba1 100644 --- a/models/lists.js +++ b/models/lists.js @@ -63,13 +63,13 @@ Lists.attachSchema(new SimpleSchema({ Lists.allow({ insert(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, update(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, remove(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, fetch: ['boardId'], }); diff --git a/models/swimlanes.js b/models/swimlanes.js index 72ef3f36..3559bcd2 100644 --- a/models/swimlanes.js +++ b/models/swimlanes.js @@ -46,13 +46,13 @@ Swimlanes.attachSchema(new SimpleSchema({ Swimlanes.allow({ insert(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, update(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, remove(userId, doc) { - return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId)); + return allowIsBoardMemberCommentOnly(userId, Boards.findOne(doc.boardId)); }, fetch: ['boardId'], }); diff --git a/models/users.js b/models/users.js index 1b1b79e1..01673e4f 100644 --- a/models/users.js +++ b/models/users.js @@ -151,6 +151,16 @@ if (Meteor.isClient) { return board && board.hasMember(this._id); }, + isNotNoComments() { + const board = Boards.findOne(Session.get('currentBoard')); + return board && board.hasMember(this._id) && !board.hasNoComments(this._id); + }, + + isNoComments() { + const board = Boards.findOne(Session.get('currentBoard')); + return board && board.hasNoComments(this._id); + }, + isNotCommentOnly() { const board = Boards.findOne(Session.get('currentBoard')); return board && board.hasMember(this._id) && !board.hasCommentOnly(this._id); diff --git a/sandstorm.js b/sandstorm.js index d34bc015..37dced92 100644 --- a/sandstorm.js +++ b/sandstorm.js @@ -208,7 +208,8 @@ if (isSandstorm && Meteor.isServer) { const isActive = permissions.indexOf('participate') > -1; const isAdmin = permissions.indexOf('configure') > -1; const isCommentOnly = false; - const permissionDoc = { userId, isActive, isAdmin, isCommentOnly }; + const isNoComments = false; + const permissionDoc = { userId, isActive, isAdmin, isNoComments, isCommentOnly }; const boardMembers = Boards.findOne(sandstormBoard._id).members; const memberIndex = _.pluck(boardMembers, 'userId').indexOf(userId); diff --git a/server/lib/utils.js b/server/lib/utils.js index c7763933..ee925847 100644 --- a/server/lib/utils.js +++ b/server/lib/utils.js @@ -6,10 +6,14 @@ allowIsBoardMember = function(userId, board) { return board && board.hasMember(userId); }; -allowIsBoardMemberNonComment = function(userId, board) { +allowIsBoardMemberCommentOnly = function(userId, board) { return board && board.hasMember(userId) && !board.hasCommentOnly(userId); }; +allowIsBoardMemberNoComments = function(userId, board) { + return board && board.hasMember(userId) && !board.hasNoComments(userId); +}; + allowIsBoardMemberByCard = function(userId, card) { const board = card.board(); return board && board.hasMember(userId); |