diff --git a/appinfo/database.xml b/appinfo/database.xml
index ed5c2d7ad..3404b0772 100644
--- a/appinfo/database.xml
+++ b/appinfo/database.xml
@@ -328,4 +328,50 @@
+
+ *dbprefix*deck_board_acl
+
+
+ id
+ integer
+ 0
+ true
+ 1
+ 4
+
+
+ board_id
+ integer
+ true
+ 8
+
+
+ type
+ integer
+ true
+ 4
+
+
+ participant
+ text
+ true
+ 64
+
+
+ permission_write
+ boolean
+ false
+
+
+ permission_invite
+ boolean
+ false
+
+
+ permission_manage
+ boolean
+ false
+
+
+
diff --git a/appinfo/info.xml b/appinfo/info.xml
index e4ce548b8..30b2ef54a 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -5,7 +5,7 @@
My first ownCloud app
AGPL
Julius Härtl
- 0.0.1.10
+ 0.0.1.11
Deck
other
diff --git a/appinfo/routes.php b/appinfo/routes.php
index bbddc7186..13387d157 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -22,6 +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'],
// stacks
['name' => 'stack#index', 'url' => '/stacks/{boardId}/', 'verb' => 'GET'],
diff --git a/db/acl.php b/db/acl.php
new file mode 100644
index 000000000..e1e37f83f
--- /dev/null
+++ b/db/acl.php
@@ -0,0 +1,32 @@
+addType('id','integer');
+ $this->addType('boardId','integer');
+ }
+ public function jsonSerialize() {
+ return [
+ 'id' => $this->id,
+ 'participant' => $this->participant,
+ 'type' => $this->type,
+ 'boardId' => $this->boardId,
+ 'permissionWrite' => $this->permissionWrite,
+ 'permissionInvite' => $this->permissionInvite,
+ 'permissionManage' => $this->permissionManage,
+ ];
+ }
+}
\ No newline at end of file
diff --git a/db/aclmapper.php b/db/aclmapper.php
new file mode 100644
index 000000000..41c81acb1
--- /dev/null
+++ b/db/aclmapper.php
@@ -0,0 +1,21 @@
+findEntities($sql, [$boardId], $limit, $offset);
+ }
+
+}
diff --git a/db/board.php b/db/board.php
index 5ed0344ea..74f9f662a 100644
--- a/db/board.php
+++ b/db/board.php
@@ -11,11 +11,13 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
protected $owner;
protected $color;
protected $archived;
+ public $acl = array();
protected $labels;
public function __construct() {
$this->addType('id','integer');
$this->addRelation('labels');
+ $this->addRelation('acl');
}
public function jsonSerialize() {
@@ -25,6 +27,7 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
'owner' => $this->owner,
'color' => $this->color,
'labels' => $this->labels,
+ 'acl' => $this->acl,
];
}
}
\ No newline at end of file
diff --git a/db/boardmapper.php b/db/boardmapper.php
index b7118deaa..a306c6b97 100644
--- a/db/boardmapper.php
+++ b/db/boardmapper.php
@@ -15,9 +15,10 @@ class BoardMapper extends Mapper {
$this->_relationMappers[$name] = $mapper;
}
- public function __construct(IDb $db, LabelMapper $labelMapper) {
+ public function __construct(IDb $db, LabelMapper $labelMapper, AclMapper $aclMapper) {
parent::__construct($db, 'deck_boards', '\OCA\Deck\Db\Board');
$this->labelMapper = $labelMapper;
+ $this->aclMapper = $aclMapper;
}
@@ -29,12 +30,22 @@ 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
+ $acl = $this->aclMapper->findAll($id);
+ $board->setAcl($acl);
return $board;
}
-
+ /**
+ * Find all boards for a given user
+ * @param $userId
+ * @param null $limit
+ * @param null $offset
+ * @return array
+ */
public function findAll($userId, $limit=null, $offset=null) {
$sql = 'SELECT * FROM `*PREFIX*deck_boards` WHERE `owner` = ? ORDER BY `title`';
return $this->findEntities($sql, [$userId], $limit, $offset);
diff --git a/db/labelmapper.php b/db/labelmapper.php
index 241da83fe..da41f2938 100644
--- a/db/labelmapper.php
+++ b/db/labelmapper.php
@@ -24,12 +24,12 @@ class LabelMapper extends DeckMapper {
}
public function findAssignedLabelsForCard($cardId) {
- $sql = 'SELECT l.* FROM `*PREFIX*deck_assigned_labels` as al INNER JOIN *PREFIX*deck_labels as l ON l.id = al.label_id WHERE `card_id` = ?';
+ $sql = 'SELECT l.* FROM `*PREFIX*deck_assigned_labels` as al INNER JOIN *PREFIX*deck_labels as l ON l.id = al.label_id WHERE `card_id` = ? ORDER BY l.id';
return $this->findEntities($sql, [$cardId], $limit, $offset);
}
public function findAssignedLabelsForBoard($boardId, $limit=null, $offset=null) {
$sql = "SELECT c.id as card_id, l.id as id, l.title as title, l.color as color FROM oc_deck_cards as c " .
- " INNER JOIN oc_deck_assigned_labels as al ON al.card_id = c.id INNER JOIN oc_deck_labels as l ON al.label_id = l.id WHERE board_id=?";
+ " INNER JOIN oc_deck_assigned_labels as al ON al.card_id = c.id INNER JOIN oc_deck_labels as l ON al.label_id = l.id WHERE board_id=? ORDER BY l.id";
$entities = $this->findEntities($sql, [$boardId], $limit, $offset);
return $entities;
}
diff --git a/js/controller/BoardController.js b/js/controller/BoardController.js
index 193804541..a6bf06ced 100644
--- a/js/controller/BoardController.js
+++ b/js/controller/BoardController.js
@@ -29,9 +29,9 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
});
BoardService.searchUsers();
- console.log(BoardService.sharees);
- BoardService.fetchOne($scope.id).then(function(data) {
+ BoardService.fetchOne($scope.id).then(function(data) {
+ console.log(BoardService.getCurrent());
$scope.statusservice.releaseWaiting();
}, function(error) {
$scope.statusservice.setError('Error occured', error);
@@ -86,6 +86,11 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
LabelService.update(label);
}
+ $scope.addSharee = function(sharee) {
+ sharee.boardId = $scope.id;
+ BoardService.addSharee(sharee);
+ $scope.status.addSharee = null;
+ }
// TODO: move to filter?
// Lighten Color of the board for background usage
$scope.rgblight = function (hex) {
diff --git a/js/public/app.js b/js/public/app.js
index b0c43d261..3b031e4ca 100644
--- a/js/public/app.js
+++ b/js/public/app.js
@@ -137,9 +137,9 @@ app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "Stat
});
BoardService.searchUsers();
- console.log(BoardService.sharees);
- BoardService.fetchOne($scope.id).then(function(data) {
+ BoardService.fetchOne($scope.id).then(function(data) {
+ console.log(BoardService.getCurrent());
$scope.statusservice.releaseWaiting();
}, function(error) {
$scope.statusservice.setError('Error occured', error);
@@ -194,6 +194,11 @@ app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "Stat
LabelService.update(label);
}
+ $scope.addSharee = function(sharee) {
+ sharee.boardId = $scope.id;
+ BoardService.addSharee(sharee);
+ $scope.status.addSharee = null;
+ }
// TODO: move to filter?
// Lighten Color of the board for background usage
$scope.rgblight = function (hex) {
@@ -643,8 +648,8 @@ app.factory('BoardService', ["ApiService", "$http", "$q", function(ApiService, $
var self = this;
this.sharees = [];
$http.get(url).then(function (response) {
- self.sharees = response.data.users;
- console.log(this.sharees);
+ self.sharees = response.data;
+ console.log(self.sharees);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
@@ -652,8 +657,24 @@ app.factory('BoardService', ["ApiService", "$http", "$q", function(ApiService, $
return deferred.promise;
}
+ BoardService.prototype.addSharee = function(sharee) {
+ 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);
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error while insert ' + self.endpoint);
+ });
+ sharee = null;
+ return deferred.promise;
+ }
+
service = new BoardService($http, 'boards', $q)
return service;
+
}]);
app.factory('CardService', ["ApiService", "$http", "$q", function(ApiService, $http, $q){
var CardService = function($http, ep, $q) {
diff --git a/js/service/BoardService.js b/js/service/BoardService.js
index e63a6f084..4c265679f 100644
--- a/js/service/BoardService.js
+++ b/js/service/BoardService.js
@@ -10,8 +10,8 @@ app.factory('BoardService', function(ApiService, $http, $q){
var self = this;
this.sharees = [];
$http.get(url).then(function (response) {
- self.sharees = response.data.users;
- console.log(this.sharees);
+ self.sharees = response.data;
+ console.log(self.sharees);
deferred.resolve(response.data);
}, function (error) {
deferred.reject('Error while update ' + self.endpoint);
@@ -19,6 +19,22 @@ app.factory('BoardService', function(ApiService, $http, $q){
return deferred.promise;
}
+ BoardService.prototype.addSharee = function(sharee) {
+ 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);
+ deferred.resolve(response.data);
+ }, function (error) {
+ deferred.reject('Error while insert ' + self.endpoint);
+ });
+ sharee = null;
+ return deferred.promise;
+ }
+
service = new BoardService($http, 'boards', $q)
return service;
+
});
\ No newline at end of file
diff --git a/service/boardservice.php b/service/boardservice.php
index 4973794b6..1edcd6331 100644
--- a/service/boardservice.php
+++ b/service/boardservice.php
@@ -2,6 +2,8 @@
namespace OCA\Deck\Service;
+use OCA\Deck\Db\Acl;
+use OCA\Deck\Db\AclMapper;
use OCA\Deck\Db\Label;
use OCP\ILogger;
use OCP\IL10N;
@@ -13,9 +15,10 @@ use \OCA\Deck\Db\BoardMapper;
use \OCA\Deck\Db\LabelMapper;
-class BoardService {
+class BoardService {
private $boardMapper;
+ private $aclMapper;
private $labelMapper;
private $logger;
private $l10n;
@@ -24,9 +27,11 @@ class BoardService {
public function __construct(BoardMapper $boardMapper, ILogger $logger,
IL10N $l10n,
ITimeFactory $timeFactory,
- LabelMapper $labelMapper) {
+ LabelMapper $labelMapper,
+ AclMapper $aclMapper) {
$this->boardMapper = $boardMapper;
$this->labelMapper = $labelMapper;
+ $this->aclMapper = $aclMapper;
$this->logger = $logger;
}
@@ -36,7 +41,7 @@ class BoardService {
public function find($userId, $boardId) {
$board = $this->boardMapper->find($boardId);
- if($board->getOwner() === $userId)
+ if ($board->getOwner() === $userId)
return $board;
else
return null;
@@ -78,6 +83,17 @@ class BoardService {
}
public function labels($boardId) {
-
+
+ }
+
+ public function addParticipant($boardId, $type, $participant, $write, $invite, $manage) {
+ $acl = new Acl();
+ $acl->setBoardId($boardId);
+ $acl->setType($type);
+ $acl->setParticipant($participant);
+ $acl->setPermissionWrite($write);
+ $acl->setPermissionInvite($invite);
+ $acl->setPermissionManage($manage);
+ return $this-$this->aclMapper->insert($acl);
}
}
\ No newline at end of file
diff --git a/templates/part.board.sidebarView.php b/templates/part.board.sidebarView.php
index 4b121709d..4cdf33115 100644
--- a/templates/part.board.sidebarView.php
+++ b/templates/part.board.sidebarView.php
@@ -18,26 +18,39 @@
--
-
-
+
D
- directmenu
+
+
+ {{ sharee.participant }}
-
-
+
+
-
-
+
+
+
+
+
+
+
+
@@ -46,8 +59,8 @@Freigabe aufheben +