diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js index aab1e2c6d..acb531494 100644 --- a/client/components/boards/boardArchive.js +++ b/client/components/boards/boardArchive.js @@ -18,6 +18,13 @@ BlazeComponent.extendComponent({ events() { return [{ 'click .js-restore-board'() { + // TODO : Make isSandstorm variable global + const isSandstorm = Meteor.settings && Meteor.settings.public && + Meteor.settings.public.sandstorm; + if (isSandstorm && Session.get('currentBoard')) { + const currentBoard = Boards.findOne(Session.get('currentBoard')); + currentBoard.archive(); + } const board = this.currentData(); board.restore(); Utils.goBoardId(board._id); diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade index d33ee11b1..3d98322dc 100644 --- a/client/components/boards/boardHeader.jade +++ b/client/components/boards/boardHeader.jade @@ -71,6 +71,12 @@ template(name="boardHeaderBar") title="{{_ 'log-in'}}") i.fa.fa-sign-in span {{_ 'log-in'}} + + if isSandstorm + if currentUser + a.board-header-btn.js-open-archived-board + i.fa.fa-archive + span {{_ 'archives'}} a.board-header-btn.js-open-filter-view( title="{{#if Filter.isActive}}{{_ 'filter-on-desc'}}{{else}}{{_ 'filter'}}{{/if}}" @@ -113,6 +119,11 @@ template(name="boardMenuPopup") li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} li: a.js-archive-board {{_ 'archive-board'}} li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}} + if isSandstorm + hr + ul.pop-over-list + li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}} + li: a.js-import-board {{_ 'import-board-c'}} template(name="boardVisibilityList") ul.pop-over-list @@ -197,9 +208,9 @@ template(name="createBoard") template(name="chooseBoardSource") ul.pop-over-list li - a(href="{{pathFor 'import/trello'}}") {{_ 'from-trello'}} + a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}} li - a(href="{{pathFor 'import/wekan'}}") {{_ 'from-wekan'}} + a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}} template(name="boardChangeTitlePopup") form diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js index dafbfd300..2ee21905d 100644 --- a/client/components/boards/boardHeader.js +++ b/client/components/boards/boardHeader.js @@ -14,6 +14,7 @@ Template.boardMenuPopup.events({ FlowRouter.go('home'); }), 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'), + 'click .js-import-board': Popup.open('chooseBoardSource'), }); Template.boardMenuPopup.helpers({ @@ -76,6 +77,9 @@ BlazeComponent.extendComponent({ 'click .js-open-board-menu': Popup.open('boardMenu'), 'click .js-change-visibility': Popup.open('boardChangeVisibility'), 'click .js-watch-board': Popup.open('boardChangeWatch'), + 'click .js-open-archived-board'() { + Modal.open('archivedBoards'); + }, 'click .js-open-filter-view'() { Sidebar.setView('filter'); }, diff --git a/client/components/import/import.jade b/client/components/import/import.jade index d1b3489a1..5e737cc61 100644 --- a/client/components/import/import.jade +++ b/client/components/import/import.jade @@ -15,6 +15,8 @@ template(name="importTextarea") p: label(for='import-textarea') {{_ instruction}} textarea.js-import-json(placeholder="{{_ 'import-json-placeholder'}}" autofocus) | {{jsonText}} + if isSandstorm + p.warning {{_ 'import-sandstorm-warning'}} input.primary.wide(type="submit" value="{{_ 'import'}}") template(name="importMapMembers") diff --git a/client/components/import/import.js b/client/components/import/import.js index d72a02dd1..64170c1d5 100644 --- a/client/components/import/import.js +++ b/client/components/import/import.js @@ -68,10 +68,12 @@ BlazeComponent.extendComponent({ this.importedData.get(), additionalData, this.importSource, + Session.get('fromBoard'), (err, res) => { if (err) { this.setError(err.error); } else { + Session.set('fromBoard', null); Utils.goBoardId(res); } } diff --git a/config/router.js b/config/router.js index d4d13be5e..ea85c7e62 100644 --- a/config/router.js +++ b/config/router.js @@ -84,6 +84,9 @@ FlowRouter.route('/import/:source', { name: 'import', triggersEnter: [AccountsTemplates.ensureSignedIn], action(params) { + if (Session.get('currentBoard')) { + Session.set('fromBoard', Session.get('currentBoard')); + } Session.set('currentBoard', null); Session.set('currentCard', null); Session.set('importSource', params.source); diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json index 05d86ff6a..da47e1c62 100644 --- a/i18n/en.i18n.json +++ b/i18n/en.i18n.json @@ -206,8 +206,10 @@ "home": "Home", "import": "Import", "import-board": "import board", + "import-board-c": "Import board", "import-board-title-trello": "Import board from Trello", "import-board-title-wekan": "Import board from Wekan", + "import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.", "from-trello": "From Trello", "from-wekan": "From Wekan", "import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.", diff --git a/models/import.js b/models/import.js index 2e58c90f7..09769794f 100644 --- a/models/import.js +++ b/models/import.js @@ -2,10 +2,11 @@ import { TrelloCreator } from './trelloCreator'; import { WekanCreator } from './wekanCreator'; Meteor.methods({ - importBoard(board, data, importSource) { + importBoard(board, data, importSource, currentBoard) { check(board, Object); check(data, Object); check(importSource, String); + check(currentBoard, Match.Maybe(String)); let creator; switch (importSource) { case 'trello': @@ -23,6 +24,6 @@ Meteor.methods({ // authorized) nothing to check, everyone can import boards in their account // 3. create all elements - return creator.create(board); + return creator.create(board, currentBoard); }, }); diff --git a/models/trelloCreator.js b/models/trelloCreator.js index fbc4a8785..aa86a5c86 100644 --- a/models/trelloCreator.js +++ b/models/trelloCreator.js @@ -488,7 +488,14 @@ export class TrelloCreator { } } - create(board) { + create(board, currentBoardId) { + // TODO : Make isSandstorm variable global + const isSandstorm = Meteor.settings && Meteor.settings.public && + Meteor.settings.public.sandstorm; + if (isSandstorm && currentBoardId) { + const currentBoard = Boards.findOne(currentBoardId); + currentBoard.archive(); + } this.parseActions(board.actions); const boardId = this.createBoardAndLabels(board); this.createLists(board.lists, boardId); diff --git a/models/wekanCreator.js b/models/wekanCreator.js index 6dd56fb19..b5f9b0ff1 100644 --- a/models/wekanCreator.js +++ b/models/wekanCreator.js @@ -478,7 +478,14 @@ export class WekanCreator { } } - create(board) { + create(board, currentBoardId) { + // TODO : Make isSandstorm variable global + const isSandstorm = Meteor.settings && Meteor.settings.public && + Meteor.settings.public.sandstorm; + if (isSandstorm && currentBoardId) { + const currentBoard = Boards.findOne(currentBoardId); + currentBoard.archive(); + } this.parseActivities(board); const boardId = this.createBoardAndLabels(board); this.createLists(board.lists, boardId);