diff --git a/api/boardRoutes.php b/api/boardRoutes.php index 1d2e2d4..35fea6f 100644 --- a/api/boardRoutes.php +++ b/api/boardRoutes.php @@ -136,3 +136,23 @@ $app->post('/lanes/:laneId/toggle', function($laneId) use($app, $jsonResponse) { } $app->response->setBody($jsonResponse->asJson()); })->conditions(['laneId' => '\d+']); // Numbers only. + +$app->post('/boards/:boardId/toggleActive', function($boardId) use($app, $jsonResponse) { + if (validateToken()) { + $user = getUser(); + if ($user->isAdmin) { + $board = R::load('board', $boardId); + $before = $board->export(); + $board->active = !$board->active; + R::store($board); + + $state = $board->active ? 'active' : 'inactive'; + $jsonResponse->message = 'Set board ' . $board->name . ' ' . $state; + $jsonResponse->addBeans(getBoards()); + + logAction($user->username . ' changed active status of board ' . $board->name, + $before, $board->export()); + } + } + $app->response->setBody($jsonResponse->asJson()); +})->conditions(['boardId' => '\d+']); // Numbers only. diff --git a/api/helpers.php b/api/helpers.php index 30a27d0..ecfd218 100644 --- a/api/helpers.php +++ b/api/helpers.php @@ -97,10 +97,10 @@ function addUserToBoard($boardId, $user) { } } -// Get all active boards. +// Get all boards. function getBoards() { $user = getUser(); - $boards = R::find('board', ' active = 1 '); + $boards = R::find('board'); foreach($boards as $board) { foreach($board->sharedUser as $boardUser) { diff --git a/css/styles.css b/css/styles.css index 5d86118..477c5b1 100644 --- a/css/styles.css +++ b/css/styles.css @@ -516,6 +516,9 @@ td > .list-group { fieldset > .list-group { margin-bottom: 10px; } +span.filter { + margin-left: 5px; +} #change-password, #default-board, #change-username { width: 48%; float: left; diff --git a/js/controllers/boards.js b/js/controllers/boards.js index 22af7cc..1511a97 100644 --- a/js/controllers/boards.js +++ b/js/controllers/boards.js @@ -115,6 +115,17 @@ function ($scope, $routeParams, $location, $interval, $window, var pendingResponse = false, updateCounter = 0; + $scope.isActiveFilter = function(element) { + var retVal = false; + $scope.boards.forEach(function(board) { + if (board.id === element.id) { + retVal = (board.active === '1'); + } + }, this); + + return retVal; + }; + $scope.loadBoards = function() { // Don't update the boards if an update is pending. if (pendingResponse || updateCounter) { @@ -188,6 +199,13 @@ function ($scope, $routeParams, $location, $interval, $window, if (boardFound) { $scope.filterChanged(); // Make sure any filters are still applied. $scope.currentBoard.loading = false; + if ($scope.currentBoard.active === '0') { + $scope.currentBoard = { + loading: true, + name: 'Kanban Board App', + error: true + }; + } } else { $scope.currentBoard.error = true; } diff --git a/js/controllers/settingsBoard.js b/js/controllers/settingsBoard.js index 1c22bc2..11f0dea 100644 --- a/js/controllers/settingsBoard.js +++ b/js/controllers/settingsBoard.js @@ -37,6 +37,34 @@ function ($scope, $interval, BoardService) { sort: 'name' }; + $scope.boardFilter = { + options: [ + { filter: 'all', name: 'All Boards' }, + { filter: 'active', name: 'Active' }, + { filter: 'inactive', name: 'Inactive' }, + ], + filter: 'all' + }; + + $scope.boardsFilter = function(element) { + switch ($scope.boardFilter.filter) { + case 'all': + return true; + case 'active': + return element.active === '1'; + case 'inactive': + return element.active === '0'; + } + }; + + $scope.toggleActiveState = function(boardId) { + BoardService.toggleActiveState(boardId) + .success(function(data) { + $scope.alerts.showAlerts(data.alerts); + $scope.boards = data.data; + }); + }; + $scope.isDeleting = []; $scope.removeBoard = function(boardId) { noty({ @@ -52,7 +80,7 @@ function ($scope, $interval, BoardService) { $noty.close(); $scope.boards.forEach(function(board) { - if (board.id == boardId) { + if (board.id === boardId) { $scope.isDeleting[boardId] = true; } }); diff --git a/js/services/board.js b/js/services/board.js index 994f8b1..d66c651 100644 --- a/js/services/board.js +++ b/js/services/board.js @@ -35,6 +35,10 @@ function($http) { return $http.post('api/lanes/' + laneId + '/toggle'); }, + toggleActiveState: function(boardId) { + return $http.post('api/boards/' + boardId + '/toggleActive'); + }, + getAutoActions: function() { return $http.get('api/autoactions'); }, diff --git a/partials/board.html b/partials/board.html index a1aaef8..ee6be5f 100644 --- a/partials/board.html +++ b/partials/board.html @@ -1,9 +1,9 @@
-

+

Select Board:

diff --git a/partials/settingsBoardTable.html b/partials/settingsBoardTable.html index e185b2d..4f8feb2 100644 --- a/partials/settingsBoardTable.html +++ b/partials/settingsBoardTable.html @@ -1,5 +1,10 @@

Current Boards + Filter By: + + Sort By: