Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
D
Doorcode
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
5
Issues
5
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Guardians of the Kretschmar Elock System
Doorcode
Commits
655527e6
Commit
655527e6
authored
Jul 21, 2020
by
Jacob Priddy
👌
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Create frontend for managing user-group relations
parent
3e70e3f9
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
180 additions
and
51 deletions
+180
-51
src/backend/app/Http/Controllers/Web/Admin/UsersController.php
...ackend/app/Http/Controllers/Web/Admin/UsersController.php
+66
-0
src/backend/resources/views/admin/doorGroups.blade.php
src/backend/resources/views/admin/doorGroups.blade.php
+4
-49
src/backend/resources/views/admin/userGroups.blade.php
src/backend/resources/views/admin/userGroups.blade.php
+5
-0
src/backend/resources/views/layouts/admin/groups.blade.php
src/backend/resources/views/layouts/admin/groups.blade.php
+50
-0
src/backend/resources/views/partials/controls/detachDoorGroup.blade.php
...sources/views/partials/controls/detachDoorGroup.blade.php
+1
-1
src/backend/resources/views/partials/controls/detachUserGroup.blade.php
...sources/views/partials/controls/detachUserGroup.blade.php
+7
-0
src/backend/resources/views/partials/controls/user.blade.php
src/backend/resources/views/partials/controls/user.blade.php
+4
-1
src/backend/routes/frontend.php
src/backend/routes/frontend.php
+4
-0
src/backend/src/UseCases/GroupUser/GetUserGroups/WebPresenter.php
...end/src/UseCases/GroupUser/GetUserGroups/WebPresenter.php
+39
-0
No files found.
src/backend/app/Http/Controllers/Web/Admin/UsersController.php
View file @
655527e6
...
...
@@ -10,12 +10,20 @@ use Source\Exceptions\AuthorizationException;
use
Source\UseCases\Users\GetUser\GetUserUseCase
;
use
Source\UseCases\Doors\GetDoors\GetDoorsUseCase
;
use
Source\UseCases\Users\GetUsers\GetUsersUseCase
;
use
Source\UseCases\Groups\GetGroups\GetGroupsUseCase
;
use
Source\UseCases\Users\CreateUser\CreateUserUseCase
;
use
Source\UseCases\Users\DeleteUser\DeleteUserUseCase
;
use
Source\UseCases\Users\UpdateUser\UpdateUserUseCase
;
use
Source\UseCases\GroupUser\RemoveUserFromGroup\APIPresenter
as
RemoveUserGroupPresenter
;
use
Source\UseCases\GroupUser\RemoveUserFromGroup\RemoveUserFromGroupUseCase
;
use
Source\UseCases\GroupUser\AddUserToGroup\APIPresenter
as
AddUserGroupPresenter
;
use
Source\UseCases\GroupUser\AddUserToGroup\AddUserToGroupUseCase
;
use
Source\UseCases\GroupUser\GetUserGroups\WebPresenter
as
UserGroupsPresenter
;
use
Source\UseCases\Doors\GetDoors\MePresenter
as
DoorsPresenter
;
use
Source\UseCases\GroupUser\GetUserGroups\GetUserGroupsUseCase
;
use
Source\UseCases\Users\GetUser\WebPresenter
as
GetUserPresenter
;
use
Source\UseCases\Users\GetUsers\WebPresenter
as
GetUsersPresenter
;
use
Source\UseCases\Groups\GetGroups\WebPresenter
as
GroupsPresenter
;
use
Source\UseCases\Users\CreateUser\WebPresenter
as
CreateUserPresenter
;
use
Source\UseCases\Users\DeleteUser\APIPresenter
as
DeleteUserPresenter
;
use
Source\UseCases\Users\UpdateUser\WebPresenter
as
UpdateUserPresenter
;
...
...
@@ -160,4 +168,62 @@ class UsersController extends Controller
->
with
(
'doors'
,
$presenter
->
getViewModel
())
->
with
(
'userId'
,
$userId
);
}
/**
* @param string $userId
* @param \Source\UseCases\GroupUser\GetUserGroups\GetUserGroupsUseCase $userGroups
* @param \Source\UseCases\Groups\GetGroups\GetGroupsUseCase $groups
* @return \Illuminate\View\View
* @throws \Source\Exceptions\EntityNotFoundException
*/
public
function
groups
(
string
$userId
,
GetUserGroupsUseCase
$userGroups
,
GetGroupsUseCase
$groups
):
View
{
$groupsPresenter
=
new
GroupsPresenter
();
$groups
->
search
(
null
,
$groupsPresenter
);
$presenter
=
new
UserGroupsPresenter
();
$userGroups
->
getGroupsForUser
(
$userId
,
$presenter
);
return
view
(
'admin.userGroups'
,
array_merge
(
$presenter
->
getViewModel
(),
$groupsPresenter
->
all
(
'allGroups'
),
[
'userId'
=>
$userId
],
));
}
/**
* @param string $userId
* @param \Source\UseCases\GroupUser\AddUserToGroup\AddUserToGroupUseCase $userGroup
* @return \Illuminate\Http\RedirectResponse
* @throws \Illuminate\Validation\ValidationException
*/
public
function
addGroup
(
string
$userId
,
AddUserToGroupUseCase
$userGroup
):
RedirectResponse
{
$this
->
validate
(
$this
->
request
,
[
'group_id'
=>
'required|string'
,
]);
$presenter
=
new
AddUserGroupPresenter
();
$userGroup
->
addUserToGroup
([
$userId
],
[
$this
->
request
->
input
(
'group_id'
)],
$presenter
);
return
redirect
(
route
(
'web.admin.users.groups'
,
[
'userId'
=>
$userId
]))
->
with
(
$presenter
->
getViewModel
());
}
/**
* @param string $userId
* @param string $groupId
* @param \Source\UseCases\GroupUser\RemoveUserFromGroup\RemoveUserFromGroupUseCase $removeUser
* @return \Illuminate\Http\RedirectResponse
*/
public
function
removeGroup
(
string
$userId
,
string
$groupId
,
RemoveUserFromGroupUseCase
$removeUser
):
RedirectResponse
{
$presenter
=
new
RemoveUserGroupPresenter
();
$removeUser
->
removeUserFromGroup
([
$userId
],
[
$groupId
],
$presenter
);
return
redirect
(
route
(
'web.admin.users.groups'
,
[
'userId'
=>
$userId
]))
->
with
(
$presenter
->
getViewModel
());
}
}
src/backend/resources/views/admin/doorGroups.blade.php
View file @
655527e6
@
extends
(
'layouts.admin.tableData'
,
[
'title'
=>
'Door Groups'
,
'route'
=>
route
(
'web.admin.doors.groups'
,
[
'doorId'
=>
$doorId
]),
'tableParams'
=>
[
'headers'
=>
$headers
,
'paginatedData'
=>
$groups
,
'controls'
=>
'detachDoorGroup'
],
@
extends
(
'layouts.admin.groups'
,
[
'resource'
=>
'door'
,
'control'
=>
'detachDoorGroup'
,
'resourceId'
=>
$doorId
,
])
@
section
(
'controls'
)
<
button
class
=
"btn btn-primary float-right"
data
-
toggle
=
"modal"
data
-
target
=
"#attachGroup"
>
Add
Group
</
button
>
<
div
class
=
"modal fade"
id
=
"attachGroup"
tabindex
=
"-1"
role
=
"dialog"
aria
-
hidden
=
"true"
>
<
div
class
=
"modal-dialog"
role
=
"document"
>
<
div
class
=
"modal-content"
>
<
div
class
=
"modal-header"
>
<
h5
class
=
"modal-title"
>
Add
group
to
door
.
</
h5
>
<
button
class
=
"close"
type
=
"button"
data
-
dismiss
=
"modal"
aria
-
label
=
"Close"
>
<
span
aria
-
hidden
=
"true"
>
×
</
span
>
</
button
>
</
div
>
<
form
method
=
"POST"
action
=
"{{ route('web.admin.doors.addGroup', ['doorId' =>
$doorId
]) }}"
>
@
csrf
<
div
class
=
"modal-body"
>
<
label
for
=
"groupSelect"
>
Select
group
</
label
>
<
select
class
=
"form-control"
name
=
"group_id"
id
=
"groupSelect"
required
>
@
foreach
(
$allGroups
as
$group
)
<
option
value
=
"{{
$group['id']
}}"
>
{{
$group
[
'title'
]
}}
</
option
>
@
endforeach
</
select
>
</
div
>
<
div
class
=
"modal-footer"
>
<
button
class
=
"btn btn-secondary"
type
=
"button"
data
-
dismiss
=
"modal"
>
Cancel
</
button
>
<
button
class
=
"btn btn-primary"
type
=
"submit"
>
Add
Group
</
button
>
</
div
>
</
form
>
</
div
>
</
div
>
</
div
>
@
endsection
src/backend/resources/views/admin/userGroups.blade.php
0 → 100644
View file @
655527e6
@
extends
(
'layouts.admin.groups'
,
[
'resource'
=>
'user'
,
'control'
=>
'detachUserGroup'
,
'resourceId'
=>
$userId
,
])
src/backend/resources/views/layouts/admin/groups.blade.php
0 → 100644
View file @
655527e6
@
extends
(
'layouts.admin.tableData'
,
[
'title'
=>
ucfirst
(
$resource
)
.
' Groups'
,
'route'
=>
route
(
'web.admin.'
.
\
Illuminate\Support\Str
::
plural
(
$resource
)
.
'.groups'
,
[
$resource
.
'Id'
=>
$resourceId
]),
'tableParams'
=>
[
'headers'
=>
$headers
,
'paginatedData'
=>
$groups
,
'controls'
=>
$control
,
],
])
@
section
(
'controls'
)
<
button
class
=
"btn btn-primary float-right"
data
-
toggle
=
"modal"
data
-
target
=
"#attachGroup"
>
Add
Group
</
button
>
<
div
class
=
"modal fade"
id
=
"attachGroup"
tabindex
=
"-1"
role
=
"dialog"
aria
-
hidden
=
"true"
>
<
div
class
=
"modal-dialog"
role
=
"document"
>
<
div
class
=
"modal-content"
>
<
div
class
=
"modal-header"
>
<
h5
class
=
"modal-title"
>
Add
group
to
{{
$resource
}}
.
</
h5
>
<
button
class
=
"close"
type
=
"button"
data
-
dismiss
=
"modal"
aria
-
label
=
"Close"
>
<
span
aria
-
hidden
=
"true"
>
×
</
span
>
</
button
>
</
div
>
<
form
method
=
"POST"
action
=
"{{ route('web.admin.' . \Illuminate\Support\Str::plural(
$resource
) . '.groups', [
$resource
. 'Id' =>
$resourceId
]) }}"
>
@
csrf
<
div
class
=
"modal-body"
>
<
label
for
=
"groupSelect"
>
Select
group
</
label
>
<
select
class
=
"form-control"
name
=
"group_id"
id
=
"groupSelect"
required
>
@
foreach
(
$allGroups
as
$group
)
<
option
value
=
"{{
$group['id']
}}"
>
{{
$group
[
'title'
]
}}
</
option
>
@
endforeach
</
select
>
</
div
>
<
div
class
=
"modal-footer"
>
<
button
class
=
"btn btn-secondary"
type
=
"button"
data
-
dismiss
=
"modal"
>
Cancel
</
button
>
<
button
class
=
"btn btn-primary"
type
=
"submit"
>
Add
Group
</
button
>
</
div
>
</
form
>
</
div
>
</
div
>
</
div
>
@
endsection
src/backend/resources/views/partials/controls/detachDoorGroup.blade.php
View file @
655527e6
<form
action=
"{{ route('web.admin.doors.removeGroup', ['doorId' => $doorId, 'groupId' => $id]) }}"
method=
"POST"
>
@csrf
@method('DELETE')
<button
class=
"btn btn-danger"
type=
"submit"
data-toggle=
"tooltip"
title=
"Detach door
and
group."
>
<button
class=
"btn btn-danger"
type=
"submit"
data-toggle=
"tooltip"
title=
"Detach door
from
group."
>
<i
class=
"fas fa-trash"
></i>
</button>
</form>
src/backend/resources/views/partials/controls/detachUserGroup.blade.php
0 → 100644
View file @
655527e6
<form
action=
"{{ route('web.admin.users.removeGroup', ['userId' => $userId, 'groupId' => $id]) }}"
method=
"POST"
>
@csrf
@method('DELETE')
<button
class=
"btn btn-danger"
type=
"submit"
data-toggle=
"tooltip"
title=
"Detach user from group."
>
<i
class=
"fas fa-trash"
></i>
</button>
</form>
src/backend/resources/views/partials/controls/user.blade.php
View file @
655527e6
<a
class=
"btn btn-secondary"
href=
"{{ route('web.admin.entries.index', ['user_id' => $id]) }}"
data-toggle=
"tooltip"
title=
"View the user's door history"
>
<a
class=
"btn btn-secondary"
href=
"{{ route('web.admin.users.groups', ['userId' => $id]) }}"
data-toggle=
"tooltip"
title=
"Manage groups for the user."
>
<i
class=
"fas fa-object-group"
></i>
</a>
<a
class=
"btn btn-warning"
href=
"{{ route('web.admin.entries.index', ['user_id' => $id]) }}"
data-toggle=
"tooltip"
title=
"View the user's door history"
>
<i
class=
"fas fa-history"
></i>
</a>
<a
class=
"btn btn-dark"
href=
"{{ route('web.admin.users.access', ['userId' => $id]) }}"
data-toggle=
"tooltip"
title=
"View the user's access schedule"
>
...
...
src/backend/routes/frontend.php
View file @
655527e6
...
...
@@ -88,6 +88,10 @@ Route::name('web.')->middleware(['auth:api'])->group(static function () {
Route
::
put
(
'/{userId}'
,
[
UsersController
::
class
,
'update'
])
->
name
(
'update'
);
Route
::
delete
(
'/{userId}'
,
[
UsersController
::
class
,
'destroy'
])
->
name
(
'destroy'
);
Route
::
get
(
'/{userId}/access'
,
[
UsersController
::
class
,
'access'
])
->
name
(
'access'
);
Route
::
get
(
'/{userId}/groups'
,
[
UsersController
::
class
,
'groups'
])
->
name
(
'groups'
);
Route
::
post
(
'/{userId}/groups'
,
[
UsersController
::
class
,
'addGroup'
])
->
name
(
'addGroup'
);
Route
::
delete
(
'/{userId}/group/{groupId}'
,
[
UsersController
::
class
,
'removeGroup'
])
->
name
(
'removeGroup'
);
});
Route
::
name
(
'requests.'
)
...
...
src/backend/src/UseCases/GroupUser/GetUserGroups/WebPresenter.php
0 → 100644
View file @
655527e6
<?php
namespace
Source\UseCases\GroupUser\GetUserGroups
;
use
Source\Entities\Group
;
use
Source\Sanitize\Paginates
;
use
Source\UseCases\BasePresenter
;
class
WebPresenter
extends
BasePresenter
implements
Presenter
{
use
Paginates
;
protected
array
$groups
=
[];
/** @inheritDoc */
public
function
present
(
ResponseModel
$responseModel
):
void
{
$this
->
groups
=
array_map
(
static
function
(
Group
$group
)
{
return
[
'id'
=>
$group
->
getId
(),
'title'
=>
$group
->
getTitle
(),
'description'
=>
$group
->
getDescription
(),
];
},
$responseModel
->
getGroups
());
}
/** @inheritDoc */
public
function
getViewModel
():
array
{
return
[
'groups'
=>
$this
->
webPaginate
(
$this
->
groups
),
'headers'
=>
[
'ID'
=>
'id'
,
'Title'
=>
'title'
,
'Description'
=>
'description'
,
],
];
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment