Add and test board behaviors when adding user
This commit is contained in:
parent
f2a5cc20f6
commit
ab3521e5ea
@ -87,6 +87,12 @@ class Users extends BaseController {
|
||||
return $this->jsonResponse($response);
|
||||
}
|
||||
|
||||
if ($data->default_board_id) {
|
||||
$this->addUserToBoard($data->default_board_id, $user, $request);
|
||||
}
|
||||
|
||||
$this->updateBoardAccess($data, $request);
|
||||
|
||||
$actor = new User($this->container, Auth::GetUserId($request));
|
||||
$this->dbLogger->logChange($this->container, $actor->id,
|
||||
$actor->username . ' added user ' . $user->username . '.',
|
||||
@ -182,12 +188,7 @@ class Users extends BaseController {
|
||||
$this->addUserToBoard($newId, $user, $request);
|
||||
}
|
||||
|
||||
if (isset($data->boardAccess)) {
|
||||
foreach($data->boardAccess as $boardId) {
|
||||
$this->addUserToBoard($boardId, $user, $request);
|
||||
}
|
||||
unset($data->boardAccess);
|
||||
}
|
||||
$this->updateBoardAccess($data, $request);
|
||||
|
||||
$update->save();
|
||||
|
||||
@ -285,6 +286,30 @@ class Users extends BaseController {
|
||||
return $this->jsonResponse($response);
|
||||
}
|
||||
|
||||
private function updateBoardAccess(&$userData, $request) {
|
||||
$boardIds = $this->getBoardIdsByAccess($userData->id);
|
||||
|
||||
if (isset($userData->boardAccess)) {
|
||||
$user = new User($this->container, $userData->id);
|
||||
|
||||
foreach($userData->boardAccess as $boardId) {
|
||||
if (!in_array($boardId, $boardIds)) {
|
||||
$this->addUserToBoard($boardId, $user, $request);
|
||||
}
|
||||
}
|
||||
|
||||
if (count($userData->boardAccess) !== count($boardIds)) {
|
||||
foreach($boardIds as $removeId) {
|
||||
if (!in_array($removeId, $userData->boardAccess)) {
|
||||
$this->removeUserFromBoard($removeId, $user);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unset($userData->boardAccess);
|
||||
}
|
||||
}
|
||||
|
||||
private function addUserToBoard($boardId, $user, $request) {
|
||||
if ($boardId > 0 && !Auth::HasBoardAccess($this->container, $request,
|
||||
$boardId, $user->id)) {
|
||||
@ -294,6 +319,14 @@ class Users extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
private function removeUserFromBoard($boardId, $user) {
|
||||
if ($boardId > 0) {
|
||||
$board = new Board($this->container, $boardId);
|
||||
unset($board->users[$user->id - 1]);
|
||||
$board->save();
|
||||
}
|
||||
}
|
||||
|
||||
private function getAllUsersCleaned($request) {
|
||||
$userBeans = R::findAll('user');
|
||||
$userId = Auth::GetUserId($request);
|
||||
@ -321,15 +354,26 @@ class Users extends BaseController {
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function getUserIdsByBoardAccess($userId) {
|
||||
$userIds = [];
|
||||
private function getBoardIdsByAccess($userId) {
|
||||
$boardIds = [];
|
||||
|
||||
$boardIds = R::getAll('SELECT board_id FROM board_user ' .
|
||||
$boards = R::getAll('SELECT board_id FROM board_user ' .
|
||||
'WHERE user_id = :user_id',
|
||||
[':user_id' => $userId]);
|
||||
|
||||
foreach($boards as $board) {
|
||||
$boardIds[] = (int) $board['board_id'];
|
||||
}
|
||||
|
||||
return $boardIds;
|
||||
}
|
||||
|
||||
private function getUserIdsByBoardAccess($userId) {
|
||||
$userIds = [];
|
||||
$boardIds = $this->getBoardIdsByAccess($userId);
|
||||
|
||||
foreach($boardIds as $id) {
|
||||
$board = R::load('board', (int) $id['board_id']);
|
||||
$board = R::load('board', $id);
|
||||
|
||||
foreach($board->sharedUserList as $user) {
|
||||
if (!in_array((int) $user->id, $userIds)) {
|
||||
|
@ -122,7 +122,7 @@ class UsersTest extends PHPUnit_Framework_TestCase {
|
||||
$user = DataMock::getUser();
|
||||
$user->id = 0;
|
||||
$user->user_option_id = 0;
|
||||
$user->default_board_id = 0;
|
||||
$user->default_board_id = 1;
|
||||
|
||||
$user->password = 'test';
|
||||
$user->password_verify = 'test';
|
||||
@ -477,6 +477,41 @@ class UsersTest extends PHPUnit_Framework_TestCase {
|
||||
$this->assertEquals('failure', $response->status);
|
||||
}
|
||||
|
||||
public function testUpdateBoardAccess() {
|
||||
$this->createUser();
|
||||
$this->createBoard();
|
||||
|
||||
$user = new User(new ContainerMock(), 2);
|
||||
$this->assertEquals(1, count($user->board_access));
|
||||
|
||||
$user->boardAccess = [1, 2];
|
||||
$args = ['id' => $user->id];
|
||||
|
||||
$request = new RequestMock();
|
||||
$request->payload = $user;
|
||||
$request->header = [DataMock::getJwt()];
|
||||
|
||||
$response = $this->users->updateUser($request,
|
||||
new ResponseMock(), $args);
|
||||
$this->assertEquals('success', $response->status);
|
||||
|
||||
$this->users = new Users(new ContainerMock());
|
||||
|
||||
$user = new User(new ContainerMock(), 2);
|
||||
$this->assertEquals(2, count($user->board_access));
|
||||
|
||||
$user->boardAccess = [2];
|
||||
$request->payload = $user;
|
||||
$request->header = [DataMock::getJwt()];
|
||||
|
||||
$response = $this->users->updateUser($request,
|
||||
new ResponseMock(), $args);
|
||||
$this->assertEquals('success', $response->status);
|
||||
|
||||
$user = new User(new ContainerMock(), 2);
|
||||
$this->assertEquals(1, count($user->board_access));
|
||||
}
|
||||
|
||||
private function createBoard() {
|
||||
$board = DataMock::getBoardForDb();
|
||||
|
||||
|
Reference in New Issue
Block a user