1+ <?php
2+
3+ /**
4+ * SPDX-License-Identifier: MIT
5+ * Copyright (c) 2017-2018 Tobias Reich
6+ * Copyright (c) 2018-2025 LycheeOrg.
7+ */
8+
9+ namespace App \Http \Controllers \Admin ;
10+
11+ use App \Actions \Statistics \Spaces ;
12+ use App \Actions \User \Create ;
13+ use App \Actions \User \Save ;
14+ use App \Exceptions \UnauthorizedException ;
15+ use App \Http \Requests \UserManagement \AddUserRequest ;
16+ use App \Http \Requests \UserManagement \DeleteUserRequest ;
17+ use App \Http \Requests \UserManagement \ManagmentListUsersRequest ;
18+ use App \Http \Requests \UserManagement \SetUserSettingsRequest ;
19+ use App \Http \Resources \Models \UserManagementResource ;
20+ use App \Models \User ;
21+ use Illuminate \Routing \Controller ;
22+ use Illuminate \Support \Collection ;
23+ use Illuminate \Support \Facades \Auth ;
24+
25+ /**
26+ * Controller responsible for user management.
27+ */
28+ class UserGroupsController extends Controller
29+ {
30+ /**
31+ * Get the list of users for management purposes.
32+ *
33+ * @param ManagmentListUsersRequest $request
34+ * @param Spaces $spaces
35+ *
36+ * @return Collection<array-key, UserManagementResource>
37+ */
38+ public function list (ManagmentListUsersRequest $ request , Spaces $ spaces ): Collection
39+ {
40+ /** @var Collection<int,User> $users */
41+ $ users = User::select (['id ' , 'username ' , 'may_administrate ' , 'may_upload ' , 'may_edit_own_settings ' , 'quota_kb ' , 'description ' , 'note ' ])->orderBy ('id ' , 'asc ' )->get ();
42+ $ spacesPerUser = $ spaces ->getFullSpacePerUser ();
43+ /** @var Collection<int,array{0:User,1:array{id:int,username:string,size:int}}> $zipped */
44+ $ zipped = $ users ->zip ($ spacesPerUser );
45+
46+ return $ zipped ->map (fn ($ item ) => new UserManagementResource ($ item [0 ], $ item [1 ], $ request ->is_se ()));
47+ }
48+
49+ /**
50+ * Save modification done to a user.
51+ * Note that an admin can change the password of a user at will.
52+ *
53+ * @param SetUserSettingsRequest $request
54+ * @param Save $save
55+ *
56+ * @return void
57+ */
58+ public function save (SetUserSettingsRequest $ request , Save $ save ): void
59+ {
60+ $ save ->do (
61+ user: $ request ->user2 (),
62+ username: $ request ->username (),
63+ password: $ request ->password (),
64+ mayUpload: $ request ->mayUpload (),
65+ mayEditOwnSettings: $ request ->mayEditOwnSettings (),
66+ quota_kb: $ request ->quota_kb (),
67+ note: $ request ->note ()
68+ );
69+ }
70+
71+ /**
72+ * Deletes a user.
73+ *
74+ * The albums and photos owned by the user are re-assigned to the
75+ * admin user.
76+ *
77+ * @param DeleteUserRequest $request
78+ *
79+ * @return void
80+ */
81+ public function delete (DeleteUserRequest $ request ): void
82+ {
83+ if ($ request ->user2 ()->id === Auth::id ()) {
84+ throw new UnauthorizedException ('You are not allowed to delete yourself ' );
85+ }
86+ $ request ->user2 ()->delete ();
87+ }
88+
89+ /**
90+ * Create a new user.
91+ *
92+ * @param AddUserRequest $request
93+ * @param Create $create
94+ *
95+ * @return UserManagementResource
96+ */
97+ public function create (AddUserRequest $ request , Create $ create ): UserManagementResource
98+ {
99+ $ user = $ create ->do (
100+ username: $ request ->username (),
101+ password: $ request ->password (),
102+ mayUpload: $ request ->mayUpload (),
103+ mayEditOwnSettings: $ request ->mayEditOwnSettings (),
104+ quota_kb: $ request ->quota_kb (),
105+ note: $ request ->note ()
106+ );
107+
108+ return new UserManagementResource ($ user , ['id ' => $ user ->id , 'size ' => 0 ], $ request ->is_se ());
109+ }
110+ }
0 commit comments