@@ -247,41 +247,83 @@ public function showProfilePage($id)
247247 */
248248 public function switchBookView ($ id , Request $ request )
249249 {
250- $ this ->checkPermissionOr ('users-manage ' , function () use ($ id ) {
251- return $ this ->currentUser ->id == $ id ;
252- });
250+ return $ this ->switchViewType ($ id , $ request , 'books ' );
251+ }
252+
253+ /**
254+ * Update the user's preferred shelf-list display setting.
255+ * @param $id
256+ * @param Request $request
257+ * @return \Illuminate\Http\RedirectResponse
258+ */
259+ public function switchShelfView ($ id , Request $ request )
260+ {
261+ return $ this ->switchViewType ($ id , $ request , 'bookshelves ' );
262+ }
263+
264+ /**
265+ * For a type of list, switch with stored view type for a user.
266+ * @param integer $userId
267+ * @param Request $request
268+ * @param string $listName
269+ * @return \Illuminate\Http\RedirectResponse
270+ */
271+ protected function switchViewType ($ userId , Request $ request , string $ listName )
272+ {
273+ $ this ->checkPermissionOrCurrentUser ('users-manage ' , $ userId );
253274
254275 $ viewType = $ request ->get ('view_type ' );
255276 if (!in_array ($ viewType , ['grid ' , 'list ' ])) {
256277 $ viewType = 'list ' ;
257278 }
258279
259- $ user = $ this ->user ->findOrFail ($ id );
260- setting ()->putUser ($ user , 'books_view_type ' , $ viewType );
280+ $ user = $ this ->user ->findOrFail ($ userId );
281+ $ key = $ listName . '_view_type ' ;
282+ setting ()->putUser ($ user , $ key , $ viewType );
261283
262- return redirect ()->back (302 , [], "/settings/users/ $ id " );
284+ return redirect ()->back (302 , [], "/settings/users/ $ userId " );
263285 }
264286
265287 /**
266- * Update the user's preferred shelf-list display setting .
288+ * Change the stored sort type for the books view .
267289 * @param $id
268290 * @param Request $request
269291 * @return \Illuminate\Http\RedirectResponse
270292 */
271- public function switchShelfView ($ id , Request $ request )
293+ public function changeBooksSort ($ id , Request $ request )
272294 {
273- $ this -> checkPermissionOr ( ' users-manage ' , function () use ( $ id ) {
274- return $ this ->currentUser -> id == $ id ;
275- });
295+ // TODO - Test this endpoint
296+ return $ this ->changeListSort ( $ id , $ request , ' books ' ) ;
297+ }
276298
277- $ viewType = $ request ->get ('view_type ' );
278- if (!in_array ($ viewType , ['grid ' , 'list ' ])) {
279- $ viewType = 'list ' ;
299+ /**
300+ * Changed the stored preference for a list sort order.
301+ * @param int $userId
302+ * @param Request $request
303+ * @param string $listName
304+ * @return \Illuminate\Http\RedirectResponse
305+ */
306+ protected function changeListSort (int $ userId , Request $ request , string $ listName )
307+ {
308+ $ this ->checkPermissionOrCurrentUser ('users-manage ' , $ userId );
309+
310+ $ sort = $ request ->get ('sort ' );
311+ if (!in_array ($ sort , ['name ' , 'created_at ' , 'updated_at ' ])) {
312+ $ sort = 'name ' ;
280313 }
281314
282- $ user = $ this ->user ->findOrFail ($ id );
283- setting ()->putUser ($ user , 'bookshelves_view_type ' , $ viewType );
315+ $ order = $ request ->get ('order ' );
316+ if (!in_array ($ order , ['asc ' , 'desc ' ])) {
317+ $ order = 'asc ' ;
318+ }
284319
285- return redirect ()->back (302 , [], "/settings/users/ $ id " );
320+ $ user = $ this ->user ->findOrFail ($ userId );
321+ $ sortKey = $ listName . '_sort ' ;
322+ $ orderKey = $ listName . '_sort_order ' ;
323+ setting ()->putUser ($ user , $ sortKey , $ sort );
324+ setting ()->putUser ($ user , $ orderKey , $ order );
325+
326+ return redirect ()->back (302 , [], "/settings/users/ $ userId " );
286327 }
328+
287329}
0 commit comments