From f09219cbfd620e04fd48539bd11eced20c81137b Mon Sep 17 00:00:00 2001 From: Nico Date: Thu, 9 Apr 2020 01:55:01 +0200 Subject: Remove export button if WITH_API is not enabled #2938 https://github.com/wekan/wekan/issues/2938#issuecomment-589782402 --- client/components/boards/boardHeader.js | 16 ---------------- client/components/sidebar/sidebar.jade | 20 +++++++++++--------- client/components/sidebar/sidebar.js | 19 +++++++++++++++---- models/settings.js | 8 ++++++++ 4 files changed, 34 insertions(+), 29 deletions(-) diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index dc553134..be0146ec 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -33,22 +33,6 @@ Template.boardMenuPopup.events({ 'click .js-card-settings': Popup.open('boardCardSettings'), }); -Template.boardMenuPopup.helpers({ - exportUrl() { - const params = { - boardId: Session.get('currentBoard'), - }; - const queryParams = { - authToken: Accounts._storedLoginToken(), - }; - return FlowRouter.path('/api/boards/:boardId/export', params, queryParams); - }, - exportFilename() { - const boardId = Session.get('currentBoard'); - return `wekan-export-board-${boardId}.json`; - }, -}); - Template.boardChangeTitlePopup.events({ submit(event, templateInstance) { const newTitle = templateInstance diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade index 901fe99f..6bfedc9c 100644 --- a/client/components/sidebar/sidebar.jade +++ b/client/components/sidebar/sidebar.jade @@ -298,10 +298,11 @@ template(name="boardMenuPopup") if currentUser.isBoardAdmin hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - | {{_ 'export-board'}} + if withApi + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + | {{_ 'export-board'}} li a.js-outgoing-webhooks i.fa.fa-globe @@ -326,11 +327,12 @@ template(name="boardMenuPopup") if isSandstorm hr ul.pop-over-list - li - a(href="{{exportUrl}}", download="{{exportFilename}}") - i.fa.fa-share-alt - i.fa.fa-sign-out - | {{_ 'export-board'}} + if withApi + li + a(href="{{exportUrl}}", download="{{exportFilename}}") + i.fa.fa-share-alt + i.fa.fa-sign-out + | {{_ 'export-board'}} li a.js-import-board i.fa.fa-share-alt diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js index baf57114..78b47a48 100644 --- a/client/components/sidebar/sidebar.js +++ b/client/components/sidebar/sidebar.js @@ -196,14 +196,14 @@ Template.boardMenuPopup.events({ }, 'click .js-change-board-color': Popup.open('boardChangeColor'), 'click .js-change-language': Popup.open('changeLanguage'), - 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() { + 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function () { const currentBoard = Boards.findOne(Session.get('currentBoard')); currentBoard.archive(); // XXX We should have some kind of notification on top of the page to // confirm that the board was successfully archived. FlowRouter.go('home'); }), - 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() { + 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function () { const currentBoard = Boards.findOne(Session.get('currentBoard')); Popup.close(); Boards.remove(currentBoard._id); @@ -215,7 +215,18 @@ Template.boardMenuPopup.events({ 'click .js-card-settings': Popup.open('boardCardSettings'), }); + +Template.boardMenuPopup.onCreated(function () { + this.apiEnabled = new ReactiveVar(false); + Meteor.call('_isApiEnabled', (e, result) => { + this.apiEnabled.set(result) + }) +}) + Template.boardMenuPopup.helpers({ + withApi() { + return Template.instance().apiEnabled.get() + }, exportUrl() { const params = { boardId: Session.get('currentBoard'), @@ -237,7 +248,7 @@ Template.memberPopup.events({ Popup.close(); }, 'click .js-change-role': Popup.open('changePermissions'), - 'click .js-remove-member': Popup.afterConfirm('removeMember', function() { + 'click .js-remove-member': Popup.afterConfirm('removeMember', function () { const boardId = Session.get('currentBoard'); const memberId = this.userId; Cards.find({ boardId, members: memberId }).forEach(card => { @@ -578,7 +589,7 @@ BlazeComponent.extendComponent({ 'subtext-with-parent', 'no-parent', ]; - options.forEach(function(element) { + options.forEach(function (element) { if (element !== value) { $(`#${element} ${MCB}`).toggleClass(CKCLS, false); $(`#${element}`).toggleClass(CKCLS, false); diff --git a/models/settings.js b/models/settings.js index 63bcd7f3..0d671aa4 100644 --- a/models/settings.js +++ b/models/settings.js @@ -198,6 +198,10 @@ if (Meteor.isServer) { return process.env.CAS_ENABLED === 'true'; } + function isApiEnabled() { + return process.env.WITH_API === 'true'; + } + Meteor.methods({ sendInvitation(emails, boards) { check(emails, [String]); @@ -314,6 +318,10 @@ if (Meteor.isServer) { return isCasEnabled(); }, + _isApiEnabled() { + return isApiEnabled(); + }, + // Gets all connection methods to use it in the Template getAuthenticationsEnabled() { return { -- cgit v1.2.3-1-g7c22 From e661d03e8d7ea8c1d2190de2c7c59eaf0700534b Mon Sep 17 00:00:00 2001 From: Nico Date: Thu, 9 Apr 2020 02:00:15 +0200 Subject: Add vote import from Trello --- models/trelloCreator.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/models/trelloCreator.js b/models/trelloCreator.js index cb1a6a67..48dce7eb 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -1,4 +1,4 @@ -const DateString = Match.Where(function(dateAsString) { +const DateString = Match.Where(function (dateAsString) { check(dateAsString, String); return moment(dateAsString, moment.ISO_8601).isValid(); }); @@ -285,6 +285,29 @@ export class TrelloCreator { cardToCreate.members = wekanMembers; } } + // add vote + if (card.idMembersVoted) { + // Trello only know's positive votes + const positiveVotes = []; + card.idMembersVoted.forEach(trelloId => { + if (this.members[trelloId]) { + const wekanId = this.members[trelloId]; + // we may map multiple Trello members to the same wekan user + // in which case we risk adding the same user multiple times + if (!positiveVotes.find(wId => wId === wekanId)) { + positiveVotes.push(wekanId); + } + } + return true; + }) + if (positiveVotes.length > 0) { + cardToCreate.vote = { + question: cardToCreate.title, + positive: positiveVotes, + } + } + } + // insert card const cardId = Cards.direct.insert(cardToCreate); // keep track of Trello id => Wekan id @@ -345,7 +368,7 @@ export class TrelloCreator { // so we make it server only, and let UI catch up once it is done, forget about latency comp. const self = this; if (Meteor.isServer) { - file.attachData(att.url, function(error) { + file.attachData(att.url, function (error) { file.boardId = boardId; file.cardId = cardId; file.userId = self._user(att.idMemberCreator); -- cgit v1.2.3-1-g7c22