More fixes
This commit is contained in:
@@ -328,4 +328,50 @@
|
|||||||
</field>
|
</field>
|
||||||
</declaration>
|
</declaration>
|
||||||
</table>
|
</table>
|
||||||
|
<table>
|
||||||
|
<name>*dbprefix*deck_board_acl</name>
|
||||||
|
<declaration>
|
||||||
|
<field>
|
||||||
|
<name>id</name>
|
||||||
|
<type>integer</type>
|
||||||
|
<default>0</default>
|
||||||
|
<notnull>true</notnull>
|
||||||
|
<autoincrement>1</autoincrement>
|
||||||
|
<length>4</length>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>board_id</name>
|
||||||
|
<type>integer</type>
|
||||||
|
<notnull>true</notnull>
|
||||||
|
<length>8</length>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>type</name>
|
||||||
|
<type>integer</type>
|
||||||
|
<notnull>true</notnull>
|
||||||
|
<length>4</length>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>participant</name>
|
||||||
|
<type>text</type>
|
||||||
|
<notnull>true</notnull>
|
||||||
|
<length>64</length>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>permission_write</name>
|
||||||
|
<type>boolean</type>
|
||||||
|
<default>false</default>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>permission_invite</name>
|
||||||
|
<type>boolean</type>
|
||||||
|
<default>false</default>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>permission_manage</name>
|
||||||
|
<type>boolean</type>
|
||||||
|
<default>false</default>
|
||||||
|
</field>
|
||||||
|
</declaration>
|
||||||
|
</table>
|
||||||
</database>
|
</database>
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<description>My first ownCloud app</description>
|
<description>My first ownCloud app</description>
|
||||||
<licence>AGPL</licence>
|
<licence>AGPL</licence>
|
||||||
<author>Julius Härtl</author>
|
<author>Julius Härtl</author>
|
||||||
<version>0.0.1.10</version>
|
<version>0.0.1.11</version>
|
||||||
<namespace>Deck</namespace>
|
<namespace>Deck</namespace>
|
||||||
<category>other</category>
|
<category>other</category>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ return [
|
|||||||
['name' => 'board#read', 'url' => '/boards/{boardId}/', 'verb' => 'GET'],
|
['name' => 'board#read', 'url' => '/boards/{boardId}/', 'verb' => 'GET'],
|
||||||
['name' => 'board#update', 'url' => '/boards/', 'verb' => 'PUT'],
|
['name' => 'board#update', 'url' => '/boards/', 'verb' => 'PUT'],
|
||||||
['name' => 'board#delete', 'url' => '/boards/{boardId}/', 'verb' => 'DELETE'],
|
['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
|
// stacks
|
||||||
['name' => 'stack#index', 'url' => '/stacks/{boardId}/', 'verb' => 'GET'],
|
['name' => 'stack#index', 'url' => '/stacks/{boardId}/', 'verb' => 'GET'],
|
||||||
|
|||||||
32
db/acl.php
Normal file
32
db/acl.php
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
// db/author.php
|
||||||
|
namespace OCA\Deck\Db;
|
||||||
|
|
||||||
|
use JsonSerializable;
|
||||||
|
|
||||||
|
class Acl extends Entity implements JsonSerializable {
|
||||||
|
|
||||||
|
public $id;
|
||||||
|
protected $participant;
|
||||||
|
protected $type;
|
||||||
|
protected $boardId;
|
||||||
|
protected $permissionWrite;
|
||||||
|
protected $permissionInvite;
|
||||||
|
protected $permissionManage;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
$this->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,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
21
db/aclmapper.php
Normal file
21
db/aclmapper.php
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace OCA\Deck\Db;
|
||||||
|
|
||||||
|
use OCP\AppFramework\Db\Entity;
|
||||||
|
use OCP\IDb;
|
||||||
|
use OCP\AppFramework\Db\Mapper;
|
||||||
|
|
||||||
|
|
||||||
|
class AclMapper extends DeckMapper {
|
||||||
|
|
||||||
|
public function __construct(IDb $db) {
|
||||||
|
parent::__construct($db, 'deck_board_acl', '\OCA\Deck\Db\Acl');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function findAll($boardId, $limit=null, $offset=null) {
|
||||||
|
$sql = 'SELECT * FROM `*PREFIX*deck_board_acl` WHERE `board_id` = ?';
|
||||||
|
return $this->findEntities($sql, [$boardId], $limit, $offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -11,11 +11,13 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
|
|||||||
protected $owner;
|
protected $owner;
|
||||||
protected $color;
|
protected $color;
|
||||||
protected $archived;
|
protected $archived;
|
||||||
|
public $acl = array();
|
||||||
protected $labels;
|
protected $labels;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
$this->addType('id','integer');
|
$this->addType('id','integer');
|
||||||
$this->addRelation('labels');
|
$this->addRelation('labels');
|
||||||
|
$this->addRelation('acl');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function jsonSerialize() {
|
public function jsonSerialize() {
|
||||||
@@ -25,6 +27,7 @@ class Board extends \OCA\Deck\Db\Entity implements JsonSerializable {
|
|||||||
'owner' => $this->owner,
|
'owner' => $this->owner,
|
||||||
'color' => $this->color,
|
'color' => $this->color,
|
||||||
'labels' => $this->labels,
|
'labels' => $this->labels,
|
||||||
|
'acl' => $this->acl,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,9 +15,10 @@ class BoardMapper extends Mapper {
|
|||||||
$this->_relationMappers[$name] = $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');
|
parent::__construct($db, 'deck_boards', '\OCA\Deck\Db\Board');
|
||||||
$this->labelMapper = $labelMapper;
|
$this->labelMapper = $labelMapper;
|
||||||
|
$this->aclMapper = $aclMapper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -29,12 +30,22 @@ class BoardMapper extends Mapper {
|
|||||||
$sql = 'SELECT * FROM `*PREFIX*deck_boards` ' .
|
$sql = 'SELECT * FROM `*PREFIX*deck_boards` ' .
|
||||||
'WHERE `id` = ?';
|
'WHERE `id` = ?';
|
||||||
$board = $this->findEntity($sql, [$id]);
|
$board = $this->findEntity($sql, [$id]);
|
||||||
|
// Add labels
|
||||||
$labels = $this->labelMapper->findAll($id);
|
$labels = $this->labelMapper->findAll($id);
|
||||||
$board->setLabels($labels);
|
$board->setLabels($labels);
|
||||||
|
// Add sharees
|
||||||
|
$acl = $this->aclMapper->findAll($id);
|
||||||
|
$board->setAcl($acl);
|
||||||
return $board;
|
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) {
|
public function findAll($userId, $limit=null, $offset=null) {
|
||||||
$sql = 'SELECT * FROM `*PREFIX*deck_boards` WHERE `owner` = ? ORDER BY `title`';
|
$sql = 'SELECT * FROM `*PREFIX*deck_boards` WHERE `owner` = ? ORDER BY `title`';
|
||||||
return $this->findEntities($sql, [$userId], $limit, $offset);
|
return $this->findEntities($sql, [$userId], $limit, $offset);
|
||||||
|
|||||||
@@ -24,12 +24,12 @@ class LabelMapper extends DeckMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function findAssignedLabelsForCard($cardId) {
|
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);
|
return $this->findEntities($sql, [$cardId], $limit, $offset);
|
||||||
}
|
}
|
||||||
public function findAssignedLabelsForBoard($boardId, $limit=null, $offset=null) {
|
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 " .
|
$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);
|
$entities = $this->findEntities($sql, [$boardId], $limit, $offset);
|
||||||
return $entities;
|
return $entities;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
|||||||
});
|
});
|
||||||
|
|
||||||
BoardService.searchUsers();
|
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();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
@@ -86,6 +86,11 @@ app.controller('BoardController', function ($rootScope, $scope, $stateParams, St
|
|||||||
LabelService.update(label);
|
LabelService.update(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.addSharee = function(sharee) {
|
||||||
|
sharee.boardId = $scope.id;
|
||||||
|
BoardService.addSharee(sharee);
|
||||||
|
$scope.status.addSharee = null;
|
||||||
|
}
|
||||||
// TODO: move to filter?
|
// TODO: move to filter?
|
||||||
// Lighten Color of the board for background usage
|
// Lighten Color of the board for background usage
|
||||||
$scope.rgblight = function (hex) {
|
$scope.rgblight = function (hex) {
|
||||||
|
|||||||
@@ -137,9 +137,9 @@ app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "Stat
|
|||||||
});
|
});
|
||||||
|
|
||||||
BoardService.searchUsers();
|
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();
|
$scope.statusservice.releaseWaiting();
|
||||||
}, function(error) {
|
}, function(error) {
|
||||||
$scope.statusservice.setError('Error occured', error);
|
$scope.statusservice.setError('Error occured', error);
|
||||||
@@ -194,6 +194,11 @@ app.controller('BoardController', ["$rootScope", "$scope", "$stateParams", "Stat
|
|||||||
LabelService.update(label);
|
LabelService.update(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$scope.addSharee = function(sharee) {
|
||||||
|
sharee.boardId = $scope.id;
|
||||||
|
BoardService.addSharee(sharee);
|
||||||
|
$scope.status.addSharee = null;
|
||||||
|
}
|
||||||
// TODO: move to filter?
|
// TODO: move to filter?
|
||||||
// Lighten Color of the board for background usage
|
// Lighten Color of the board for background usage
|
||||||
$scope.rgblight = function (hex) {
|
$scope.rgblight = function (hex) {
|
||||||
@@ -643,8 +648,8 @@ app.factory('BoardService', ["ApiService", "$http", "$q", function(ApiService, $
|
|||||||
var self = this;
|
var self = this;
|
||||||
this.sharees = [];
|
this.sharees = [];
|
||||||
$http.get(url).then(function (response) {
|
$http.get(url).then(function (response) {
|
||||||
self.sharees = response.data.users;
|
self.sharees = response.data;
|
||||||
console.log(this.sharees);
|
console.log(self.sharees);
|
||||||
deferred.resolve(response.data);
|
deferred.resolve(response.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while update ' + self.endpoint);
|
deferred.reject('Error while update ' + self.endpoint);
|
||||||
@@ -652,8 +657,24 @@ app.factory('BoardService', ["ApiService", "$http", "$q", function(ApiService, $
|
|||||||
return deferred.promise;
|
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)
|
service = new BoardService($http, 'boards', $q)
|
||||||
return service;
|
return service;
|
||||||
|
|
||||||
}]);
|
}]);
|
||||||
app.factory('CardService', ["ApiService", "$http", "$q", function(ApiService, $http, $q){
|
app.factory('CardService', ["ApiService", "$http", "$q", function(ApiService, $http, $q){
|
||||||
var CardService = function($http, ep, $q) {
|
var CardService = function($http, ep, $q) {
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ app.factory('BoardService', function(ApiService, $http, $q){
|
|||||||
var self = this;
|
var self = this;
|
||||||
this.sharees = [];
|
this.sharees = [];
|
||||||
$http.get(url).then(function (response) {
|
$http.get(url).then(function (response) {
|
||||||
self.sharees = response.data.users;
|
self.sharees = response.data;
|
||||||
console.log(this.sharees);
|
console.log(self.sharees);
|
||||||
deferred.resolve(response.data);
|
deferred.resolve(response.data);
|
||||||
}, function (error) {
|
}, function (error) {
|
||||||
deferred.reject('Error while update ' + self.endpoint);
|
deferred.reject('Error while update ' + self.endpoint);
|
||||||
@@ -19,6 +19,22 @@ app.factory('BoardService', function(ApiService, $http, $q){
|
|||||||
return deferred.promise;
|
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)
|
service = new BoardService($http, 'boards', $q)
|
||||||
return service;
|
return service;
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace OCA\Deck\Service;
|
namespace OCA\Deck\Service;
|
||||||
|
|
||||||
|
use OCA\Deck\Db\Acl;
|
||||||
|
use OCA\Deck\Db\AclMapper;
|
||||||
use OCA\Deck\Db\Label;
|
use OCA\Deck\Db\Label;
|
||||||
use OCP\ILogger;
|
use OCP\ILogger;
|
||||||
use OCP\IL10N;
|
use OCP\IL10N;
|
||||||
@@ -16,6 +18,7 @@ use \OCA\Deck\Db\LabelMapper;
|
|||||||
class BoardService {
|
class BoardService {
|
||||||
|
|
||||||
private $boardMapper;
|
private $boardMapper;
|
||||||
|
private $aclMapper;
|
||||||
private $labelMapper;
|
private $labelMapper;
|
||||||
private $logger;
|
private $logger;
|
||||||
private $l10n;
|
private $l10n;
|
||||||
@@ -24,9 +27,11 @@ class BoardService {
|
|||||||
public function __construct(BoardMapper $boardMapper, ILogger $logger,
|
public function __construct(BoardMapper $boardMapper, ILogger $logger,
|
||||||
IL10N $l10n,
|
IL10N $l10n,
|
||||||
ITimeFactory $timeFactory,
|
ITimeFactory $timeFactory,
|
||||||
LabelMapper $labelMapper) {
|
LabelMapper $labelMapper,
|
||||||
|
AclMapper $aclMapper) {
|
||||||
$this->boardMapper = $boardMapper;
|
$this->boardMapper = $boardMapper;
|
||||||
$this->labelMapper = $labelMapper;
|
$this->labelMapper = $labelMapper;
|
||||||
|
$this->aclMapper = $aclMapper;
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +41,7 @@ class BoardService {
|
|||||||
|
|
||||||
public function find($userId, $boardId) {
|
public function find($userId, $boardId) {
|
||||||
$board = $this->boardMapper->find($boardId);
|
$board = $this->boardMapper->find($boardId);
|
||||||
if($board->getOwner() === $userId)
|
if ($board->getOwner() === $userId)
|
||||||
return $board;
|
return $board;
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
@@ -80,4 +85,15 @@ class BoardService {
|
|||||||
public function labels($boardId) {
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -18,26 +18,39 @@
|
|||||||
<div class="tabsContainer">
|
<div class="tabsContainer">
|
||||||
<div id="commentsTabView" class="tab commentsTabView" ng-if="status.boardtab==0 || !status.boardtab">
|
<div id="commentsTabView" class="tab commentsTabView" ng-if="status.boardtab==0 || !status.boardtab">
|
||||||
|
|
||||||
<ui-select multiple tagging="" ng-model="board.sharees" theme="bootstrap" style="width:100%;" title="Choose a user to assign" placeholder="Assign users ..."
|
<ui-select ng-model="status.addSharee" theme="bootstrap" style="width:100%;" title="Choose a user to assign" placeholder="Assign users ..." on-select="addSharee(status.addSharee)">
|
||||||
on-select="userAssign($item, $model)" on-remove="userRemove($item, $model)">
|
<ui-select-match placeholder="Select users...">
|
||||||
<ui-select-match placeholder="Select users...">{{$item.id}}</ui-select-match>
|
<span><i class="fa fa-{{$item.type}}"></i> {{ $item.participant }}</span>
|
||||||
<ui-select-choices repeat="sharee in boardservice.sharees | filter: $select.search track by $index">
|
</ui-select-match>
|
||||||
<span><i class="fa fa-{{sharee.type}}"></i> {{ sharee.id }}</span>
|
<!-- FIXME: filter by selected or add multiple //-->
|
||||||
|
<ui-select-choices repeat="sharee in boardservice.sharees | filter: board.sharees | filter: $select.search track by $index">
|
||||||
|
<span><i class="fa fa-{{sharee.type}}"></i> {{ sharee.participant }}</span>
|
||||||
</ui-select-choices>
|
</ui-select-choices>
|
||||||
|
<ui-select-no-choice>
|
||||||
|
Dang! We couldn't find any choices...
|
||||||
|
</ui-select-no-choice>
|
||||||
</ui-select>
|
</ui-select>
|
||||||
|
|
||||||
<ul id="shareWithList" class="shareWithList">
|
<ul id="shareWithList" class="shareWithList">
|
||||||
<li data-share-id="57" data-share-type="0" data-share-with="directmenu">
|
<li ng-repeat="sharee in boardservice.getCurrent().acl track by $index">
|
||||||
<a href="#" class="unshare"><span class="icon-loading-small"></span><span class="icon icon-delete"><br /></span><span class="hidden-visually">Freigabe aufheben</span></a>
|
<span class="icon-loading-small" style="display:none;"></span>
|
||||||
<div class="avatar " data-username="directmenu" style="height: 32px; width: 32px; color: rgb(255, 255, 255); font-weight: normal; text-align: center; line-height: 32px; font-size: 17.6px; background-color: rgb(195, 222, 124);">D</div>
|
<div class="avatar " data-username="directmenu" style="height: 32px; width: 32px; color: rgb(255, 255, 255); font-weight: normal; text-align: center; line-height: 32px; font-size: 17.6px; background-color: rgb(195, 222, 124);">D</div>
|
||||||
<span class="has-tooltip username" title="" data-original-title="directmenu" aria-describedby="tooltip777914">directmenu</span>
|
<span class="has-tooltip username">
|
||||||
|
<i class="fa fa-{{sharee.type}}"></i>
|
||||||
|
{{ sharee.participant }}</span>
|
||||||
<span class="shareOption">
|
<span class="shareOption">
|
||||||
<input id="canShare-view17-directmenu" type="checkbox" name="share" class="permissions checkbox" checked="checked" data-permissions="16">
|
<input type="checkbox" name="edit" class="permissions checkbox" checked="checked" id=checkbox-permission-{{ $index }}">
|
||||||
<label for="canShare-view17-directmenu">kann teilen</label>
|
<label for="checkbox-permission-{{ $index }}">teilen</label>
|
||||||
</span>
|
</span>
|
||||||
<span class="shareOption"><input id="canEdit-view17-directmenu" type="checkbox" name="edit" class="permissions checkbox" checked="checked">
|
<span class="shareOption">
|
||||||
<label for="canEdit-view17-directmenu">kann bearbeiten</label>
|
<input type="checkbox" name="edit" class="permissions checkbox" checked="checked" id=checkbox-permission-{{ $index }}">
|
||||||
|
<label for="checkbox-permission-{{ $index }}">bearbeiten</label>
|
||||||
</span>
|
</span>
|
||||||
|
<span class="shareOption">
|
||||||
|
<input type="checkbox" name="edit" class="permissions checkbox" checked="checked" id=checkbox-permission-{{ $index }}">
|
||||||
|
<label for="checkbox-permission-{{ $index }}">verwalten</label>
|
||||||
|
</span>
|
||||||
|
<a href="#"><span class="icon icon-delete"> </span></a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
@@ -46,8 +59,8 @@
|
|||||||
|
|
||||||
<ul class="labels">
|
<ul class="labels">
|
||||||
<li ng-repeat="label in boardservice.getCurrent().labels">
|
<li ng-repeat="label in boardservice.getCurrent().labels">
|
||||||
<span class="label-title" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }};" ng-if="!label.edit">
|
<span class="label-title" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }};" ng-if="!label.edit" ng-click="label.edit=true">
|
||||||
{{ label.title }}
|
<span ng-if="label.title">{{ label.title }}</span><i ng-if="!label.title"><br /></i>
|
||||||
</span>
|
</span>
|
||||||
<span class="label-title" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }}; width:188px;" ng-if="label.edit">
|
<span class="label-title" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }}; width:188px;" ng-if="label.edit">
|
||||||
<input type="text" placeholder="" ng-model="label.title" class="input-inline" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }};" />
|
<input type="text" placeholder="" ng-model="label.title" class="input-inline" style="background-color:#{{label.color}}; color:{{ textColor(label.color) }};" />
|
||||||
|
|||||||
Reference in New Issue
Block a user