Add and test board behaviors when adding user

This commit is contained in:
kiswa 2016-09-23 21:07:38 +00:00
parent f2a5cc20f6
commit ab3521e5ea
2 changed files with 90 additions and 11 deletions

View File

@ -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)) {

View File

@ -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();