From 9d365d07f9223cacfa22932982e58a817f78f921 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 11 Jan 2024 04:41:38 -0700 Subject: [PATCH] Update ParentalControls, map updated saved permissions/roles --- .../ParentalControlsController.php | 6 ++- app/Services/UserRoleService.php | 41 ++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ParentalControlsController.php b/app/Http/Controllers/ParentalControlsController.php index 1dc2f578f..373021ab9 100644 --- a/app/Http/Controllers/ParentalControlsController.php +++ b/app/Http/Controllers/ParentalControlsController.php @@ -59,9 +59,13 @@ class ParentalControlsController extends Controller { $this->authPreflight($request); $uid = $request->user()->id; + $ff = $this->requestFormFields($request); $pc = ParentalControls::whereParentId($uid)->findOrFail($id); - $pc->permissions = $this->requestFormFields($request); + $pc->permissions = $ff; $pc->save(); + + $roles = UserRoleService::mapActions($pc->child_id, $ff); + UserRoles::whereUserId($pc->child_id)->update(['roles' => $roles]); return redirect($pc->manageUrl() . '?permissions'); } diff --git a/app/Services/UserRoleService.php b/app/Services/UserRoleService.php index a18810bf0..ed765a930 100644 --- a/app/Services/UserRoleService.php +++ b/app/Services/UserRoleService.php @@ -179,7 +179,7 @@ class UserRoleService ]; foreach ($map as $key => $value) { - if(!isset($data[$value], $data[substr($value, 1)])) { + if(!isset($data[$value]) && !isset($data[substr($value, 1)])) { $map[$key] = false; continue; } @@ -188,4 +188,43 @@ class UserRoleService return $map; } + + public static function mapActions($id, $data = []) + { + $res = []; + $map = [ + 'account-force-private' => 'private', + 'account-ignore-follow-requests' => 'private', + + 'can-view-public-feed' => 'discovery_feeds', + 'can-view-network-feed' => 'discovery_feeds', + 'can-view-discover' => 'discovery_feeds', + 'can-view-hashtag-feed' => 'discovery_feeds', + + 'can-post' => 'post', + 'can-comment' => 'comment', + 'can-like' => 'like', + 'can-share' => 'share', + + 'can-follow' => 'follow', + 'can-make-public' => '!private', + + 'can-direct-message' => 'dms', + 'can-use-stories' => 'story', + 'can-view-sensitive' => '!hide_cw', + 'can-bookmark' => 'bookmark', + 'can-collections' => 'collection', + 'can-federation' => 'federation', + ]; + + foreach ($map as $key => $value) { + if(!isset($data[$value]) && !isset($data[substr($value, 1)])) { + $res[$key] = false; + continue; + } + $res[$key] = str_starts_with($value, '!') ? !$data[substr($value, 1)] : $data[$value]; + } + + return $res; + } }