diff --git a/appinfo/database.xml b/appinfo/database.xml
index 056055a19..28e832e67 100644
--- a/appinfo/database.xml
+++ b/appinfo/database.xml
@@ -135,6 +135,11 @@
8
false
+
+ archived
+ boolean
+ false
+
diff --git a/appinfo/info.xml b/appinfo/info.xml
index b31ac149f..ac96842f3 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -5,7 +5,7 @@
My first ownCloud app
AGPL
Julius Härtl
- 0.0.1.13
+ 0.0.1.14
Deck
other
diff --git a/appinfo/routes.php b/appinfo/routes.php
index 13387d157..ac84404e8 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -22,10 +22,10 @@ return [
['name' => 'board#read', 'url' => '/boards/{boardId}/', 'verb' => 'GET'],
['name' => 'board#update', 'url' => '/boards/', 'verb' => 'PUT'],
['name' => 'board#delete', 'url' => '/boards/{boardId}/', 'verb' => 'DELETE'],
- // boards - sharees
- ['name' => 'board#addSharee', 'url' => '/boards/sharee', 'verb' => 'POST'],
- ['name' => 'board#removeSharee', 'url' => '/boards/sharee', 'verb' => 'DELETE'],
- ['name' => 'board#updateSharee', 'url' => '/boards/sharee', 'verb' => 'PUT'],
+ // boards - acl
+ ['name' => 'board#addAcl', 'url' => '/boards/acl', 'verb' => 'POST'],
+ ['name' => 'board#updateAcl', 'url' => '/boards/acl', 'verb' => 'PUT'],
+ ['name' => 'board#deleteAcl', 'url' => '/boards/acl/{id}', 'verb' => 'DELETE'],
// stacks
['name' => 'stack#index', 'url' => '/stacks/{boardId}/', 'verb' => 'GET'],
diff --git a/controller/boardcontroller.php b/controller/boardcontroller.php
index 5a7d4b5a5..708a0f2f9 100644
--- a/controller/boardcontroller.php
+++ b/controller/boardcontroller.php
@@ -64,7 +64,14 @@ class BoardController extends Controller {
return $this->boardService->labels($this->boardId);
}
- public function addSharee($boardId, $type, $participant, $write, $invite, $manage) {
- return $this->boardService->addParticipant($boardId, $type, $participant, $write, $invite, $manage);
+ public function addAcl($boardId, $type, $participant, $write, $invite, $manage) {
+ return $this->boardService->addAcl($boardId, $type, $participant, $write, $invite, $manage);
}
+ public function updateAcl($id, $permissionWrite, $permissionInvite, $permissionManage) {
+ return $this->boardService->updateAcl($id, $permissionWrite, $permissionInvite, $permissionManage);
+ }
+ public function deleteAcl($id) {
+ return $this->boardService->deleteAcl($id);
+ }
+
}
\ No newline at end of file
diff --git a/controller/stylecontroller.php b/controller/stylecontroller.php
index 1985bd9b9..f8d50d0b4 100644
--- a/controller/stylecontroller.php
+++ b/controller/stylecontroller.php
@@ -5,7 +5,7 @@ namespace OCA\Deck\Controller;
use OCP\IRequest;
use OCP\AppFramework\ApiController as BaseApiController;
-class ApiController extends BaseApiController {
+class StyleController extends Controller {
private $defaults;
public function __construct($appName,
IRequest $request, OC_Defaults $defaults){
@@ -15,9 +15,11 @@ class ApiController extends BaseApiController {
/**
* @PublicPage
* @NoCSRFRequired
- * @CORS
*/
public function generateCss() {
- return
+
+ $color = $this->config->getAppValue($this->appName, 'color');
+ $responseCss .= '';
+ $response = new Http\DataDownloadResponse($responseCss, 'style', 'text/css');
}
}
diff --git a/css/style.css b/css/style.css
index 3f15d6067..c61b8ab9a 100644
--- a/css/style.css
+++ b/css/style.css
@@ -634,4 +634,22 @@ margin-bottom:2px; width:100%;
#markdown pre {
background-color:#eeeeee;
padding:3px;
+}
+
+
+.shareWithList .icon {
+ display: inline-block;
+ background-size: 16px 16px;
+ width:16px;
+ height:16px;
+}
+
+.shareWithList .fa {
+ font-size:12pt;
+ width:16px;
+ text-align:center;
+}
+
+.shareOption {
+ margin-top:4px;
}
\ No newline at end of file
diff --git a/db/acl.php b/db/acl.php
index e1e37f83f..b1376cfc9 100644
--- a/db/acl.php
+++ b/db/acl.php
@@ -17,6 +17,9 @@ class Acl extends Entity implements JsonSerializable {
public function __construct() {
$this->addType('id','integer');
$this->addType('boardId','integer');
+ $this->addType('permissionWrite', 'boolean');
+ $this->addType('permissionInvite', 'boolean');
+ $this->addType('permissionManage', 'boolean');
}
public function jsonSerialize() {
return [
diff --git a/db/board.php b/db/board.php
index 74f9f662a..033b092f4 100644
--- a/db/board.php
+++ b/db/board.php
@@ -11,8 +11,8 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
protected $owner;
protected $color;
protected $archived;
- public $acl = array();
protected $labels;
+ protected $acl;
public function __construct() {
$this->addType('id','integer');
@@ -30,4 +30,16 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
'acl' => $this->acl,
];
}
+
+ public function setLabels($labels) {
+ foreach ($labels as $l) {
+ $this->labels[$l->id] = $l;
+ }
+ }
+
+ public function setAcl($acl) {
+ foreach ($acl as $a) {
+ $this->acl[$a->id] = $a;
+ }
+ }
}
\ No newline at end of file
diff --git a/db/boardmapper.php b/db/boardmapper.php
index a306c6b97..0e07fd0da 100644
--- a/db/boardmapper.php
+++ b/db/boardmapper.php
@@ -30,12 +30,15 @@ class BoardMapper extends Mapper {
$sql = 'SELECT * FROM `*PREFIX*deck_boards` ' .
'WHERE `id` = ?';
$board = $this->findEntity($sql, [$id]);
+
// Add labels
$labels = $this->labelMapper->findAll($id);
$board->setLabels($labels);
- // Add sharees
+
+ // Add acl
$acl = $this->aclMapper->findAll($id);
$board->setAcl($acl);
+
return $board;
}
diff --git a/db/card.php b/db/card.php
index 874aadc1b..b43744a7d 100644
--- a/db/card.php
+++ b/db/card.php
@@ -16,6 +16,8 @@ class Card extends Entity implements JsonSerializable {
protected $labels;
protected $owner;
protected $order;
+ protected $archived;
+
public function __construct() {
$this->addType('id','integer');
$this->addType('stackId','integer');
@@ -35,6 +37,7 @@ class Card extends Entity implements JsonSerializable {
'order' => $this->order,
'stackId' => $this->stackId,
'labels' => $this->labels,
+ 'archived' => $this->archived,
];
}
}
diff --git a/db/cardmapper.php b/db/cardmapper.php
index 94c23f3d8..d1a92d2cc 100644
--- a/db/cardmapper.php
+++ b/db/cardmapper.php
@@ -51,7 +51,16 @@ class CardMapper extends Mapper {
}
public function findAll($stackId, $limit=null, $offset=null) {
- $sql = 'SELECT * FROM `*PREFIX*deck_cards` WHERE `stack_id` = ? ORDER BY `order`';
+ $sql = 'SELECT * FROM `*PREFIX*deck_cards`
+ WHERE `stack_id` = ? AND NOT archived ORDER BY `order`';
+ $entities = $this->findEntities($sql, [$stackId], $limit, $offset);
+ return $entities;
+ }
+
+ // TODO: test
+ public function findAllArchived($boardId, $limit=null, $offset=null) {
+ $sql = 'SELECT * FROM `*PREFIX*deck_cards` as c, `*PREFIX*deck_stacks` as s
+ WHERE `s.board_id` = ? AND c.stack_id = s.id AND archived ORDER BY `last_modified`';
$entities = $this->findEntities($sql, [$stackId], $limit, $offset);
return $entities;
}
diff --git a/js/app/Config.js b/js/app/Config.js
index 506d15aa0..687cb83b1 100644
--- a/js/app/Config.js
+++ b/js/app/Config.js
@@ -49,4 +49,6 @@ app.config(function ($provide, $routeProvider, $interpolateProvider, $httpProvid
.state('board.sharing', {
});
+
+
});
\ No newline at end of file
diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js
index 444d6ff55..bd3877d4c 100644
--- a/js/controller/BoardController.js
+++ b/js/controller/BoardController.js
@@ -86,14 +86,16 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
LabelService.update(label);
}
- $scope.addSharee = function(sharee) {
+ $scope.addAcl = function(sharee) {
sharee.boardId = $scope.id;
- BoardService.addSharee(sharee);
+ BoardService.addAcl(sharee);
$scope.status.addSharee = null;
}
$scope.deleteAcl = function(acl) {
- acl.boardId = $scope.id;
- BoardService.removeAcl(acl);
+ BoardService.deleteAcl(acl.id);
+ }
+ $scope.updateAcl = function(acl) {
+ BoardService.updateAcl(acl);
}
// TODO: move to filter?
// Lighten Color of the board for background usage
diff --git a/js/package.json b/js/package.json
index e3d858e10..0f7dcc526 100644
--- a/js/package.json
+++ b/js/package.json
@@ -8,7 +8,9 @@
"type": "git",
"url": "git@github.com:juliushaertl/deck.git"
},
- "dependencies": {},
+ "dependencies": {
+ "karma": "^1.1.1"
+ },
"devDependencies": {
"bower": "*",
"grunt": "*",
diff --git a/js/public/app.js b/js/public/app.js
index cfebc3819..017fe6248 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -79,6 +79,8 @@ app.config(["$provide", "$routeProvider", "$interpolateProvider", "$httpProvider
.state('board.sharing', {
});
+
+
}]);
app.run(["$document", "$rootScope", "$transitions", function ($document, $rootScope, $transitions) {
'use strict';
@@ -203,14 +205,16 @@ app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "Stat
LabelService.update(label);
}
- $scope.addSharee = function(sharee) {
+ $scope.addAcl = function(sharee) {
sharee.boardId = $scope.id;
- BoardService.addSharee(sharee);
+ BoardService.addAcl(sharee);
$scope.status.addSharee = null;
}
$scope.deleteAcl = function(acl) {
- acl.boardId = $scope.id;
- BoardService.removeAcl(acl);
+ BoardService.deleteAcl(acl.id);
+ }
+ $scope.updateAcl = function(acl) {
+ BoardService.updateAcl(acl);
}
// TODO: move to filter?
// Lighten Color of the board for background usage
@@ -675,28 +679,59 @@ app.factory('BoardService', ["ApiService", "$http", "$q", function(ApiService, $
this.sharees = [];
$http.get(url).then(function (response) {
self.sharees = response.data;
- console.log(self.sharees);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
- }
+ };
- BoardService.prototype.addSharee = function(sharee) {
+ BoardService.prototype.addAcl = function(acl) {
var board = this.getCurrent();
- board.acl.push(sharee);
var deferred = $q.defer();
var self = this;
- $http.post(this.baseUrl + '/sharee', sharee).then(function (response) {
- console.log("Add sharee " + response);
+ var _acl = acl;
+ $http.post(this.baseUrl + '/acl', _acl).then(function (response) {
+ if(!board.acl) {
+ board.acl = {};
+ }
+ board.acl[response.data.id] = response.data;
deferred.resolve(response.data);
}, function (error) {
- deferred.reject('Error while insert ' + self.endpoint);
+ deferred.reject('Error creating ACL ' + _acl);
});
- sharee = null;
+ acl = null;
return deferred.promise;
- }
+ };
+
+ BoardService.prototype.deleteAcl = function(id) {
+ var board = this.getCurrent();
+ var deferred = $q.defer();
+ var self = this;
+ $http.delete(this.baseUrl + '/acl/' + id).then(function (response) {
+ delete board.acl[response.data.id];
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error deleting ACL ' + id);
+ });
+ acl = null;
+ return deferred.promise;
+ };
+
+ BoardService.prototype.updateAcl = function(acl) {
+ var board = this.getCurrent();
+ var deferred = $q.defer();
+ var self = this;
+ var _acl = acl;
+ $http.put(this.baseUrl + '/acl', _acl).then(function (response) {
+ board.acl[_acl.id] = response.data;
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error updating ACL ' + _acl);
+ });
+ acl = null;
+ return deferred.promise;
+ };
service = new BoardService($http, 'boards', $q)
return service;
diff --git a/js/service/BoardService.js b/js/service/BoardService.js
index 4c265679f..5d436f3e5 100644
--- a/js/service/BoardService.js
+++ b/js/service/BoardService.js
@@ -11,28 +11,59 @@ app.factory('BoardService', function(ApiService, $http, $q){
this.sharees = [];
$http.get(url).then(function (response) {
self.sharees = response.data;
- console.log(self.sharees);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
});
return deferred.promise;
- }
+ };
- BoardService.prototype.addSharee = function(sharee) {
+ BoardService.prototype.addAcl = function(acl) {
var board = this.getCurrent();
- board.acl.push(sharee);
var deferred = $q.defer();
var self = this;
- $http.post(this.baseUrl + '/sharee', sharee).then(function (response) {
- console.log("Add sharee " + response);
+ var _acl = acl;
+ $http.post(this.baseUrl + '/acl', _acl).then(function (response) {
+ if(!board.acl) {
+ board.acl = {};
+ }
+ board.acl[response.data.id] = response.data;
deferred.resolve(response.data);
}, function (error) {
- deferred.reject('Error while insert ' + self.endpoint);
+ deferred.reject('Error creating ACL ' + _acl);
});
- sharee = null;
+ acl = null;
return deferred.promise;
- }
+ };
+
+ BoardService.prototype.deleteAcl = function(id) {
+ var board = this.getCurrent();
+ var deferred = $q.defer();
+ var self = this;
+ $http.delete(this.baseUrl + '/acl/' + id).then(function (response) {
+ delete board.acl[response.data.id];
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error deleting ACL ' + id);
+ });
+ acl = null;
+ return deferred.promise;
+ };
+
+ BoardService.prototype.updateAcl = function(acl) {
+ var board = this.getCurrent();
+ var deferred = $q.defer();
+ var self = this;
+ var _acl = acl;
+ $http.put(this.baseUrl + '/acl', _acl).then(function (response) {
+ board.acl[_acl.id] = response.data;
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error updating ACL ' + _acl);
+ });
+ acl = null;
+ return deferred.promise;
+ };
service = new BoardService($http, 'boards', $q)
return service;
diff --git a/js/tests/unit/boardcontrollerspec.js b/js/tests/unit/boardcontrollerspec.js
new file mode 100644
index 000000000..8c8ccf110
--- /dev/null
+++ b/js/tests/unit/boardcontrollerspec.js
@@ -0,0 +1,19 @@
+describe('BoardController', function() {
+ 'use strict';
+
+ var $controller;
+
+ beforeEach(inject(function(_$controller_){
+ // The injector unwraps the underscores (_) from around the parameter names when matching
+ $controller = _$controller_;
+ }));
+
+ describe('$scope.rgblight', function() {
+ it('converts rbg color to a lighter color', function() {
+ var $scope = {};
+ var controller = $controller('BoardController', { $scope: $scope });
+ var hex = $scope.rgblight('red');
+ expect(hex).toEqual('#red');
+ });
+ });
+});
diff --git a/service/boardservice.php b/service/boardservice.php
index 1edcd6331..3fbe3b2bf 100644
--- a/service/boardservice.php
+++ b/service/boardservice.php
@@ -81,12 +81,9 @@ class BoardService {
$board->setColor($color);
return $this->boardMapper->update($board);
}
+
- public function labels($boardId) {
-
- }
-
- public function addParticipant($boardId, $type, $participant, $write, $invite, $manage) {
+ public function addAcl($boardId, $type, $participant, $write, $invite, $manage) {
$acl = new Acl();
$acl->setBoardId($boardId);
$acl->setType($type);
@@ -94,6 +91,19 @@ class BoardService {
$acl->setPermissionWrite($write);
$acl->setPermissionInvite($invite);
$acl->setPermissionManage($manage);
- return $this-$this->aclMapper->insert($acl);
+ return $this->aclMapper->insert($acl);
+ }
+
+ public function updateAcl($id, $write, $invite, $manage) {
+ $acl = $this->aclMapper->find($id);
+ $acl->setPermissionWrite($write);
+ $acl->setPermissionInvite($invite);
+ $acl->setPermissionManage($manage);
+ return $this->aclMapper->update($acl);
+ }
+
+ public function deleteAcl($id) {
+ $acl = $this->aclMapper->find($id);
+ return $this->aclMapper->delete($acl);
}
}
\ No newline at end of file
diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php
index f99ab330b..739d8762e 100644
--- a/templates/part.board.sidebarView.php
+++ b/templates/part.board.sidebarView.php
@@ -18,7 +18,7 @@
--
+
-
D
-
- {{ sharee.participant }}
+
+ {{ acl.participant }}
-
-
+
+
-
-
+
+
-
-
+
+
-
+ Freigabe aufheben