diff --git a/.env.base b/.env.base index 38504067a9..483a796d63 100644 --- a/.env.base +++ b/.env.base @@ -26,6 +26,8 @@ FEATURE__MATOMO_INTEGRATION=false FEATURE__WORDPRESS_INTEGRATION=false FEATURE__WIKI_INTEGRATION=false FEATURE__DISCOURSE_INTEGRATION=false +FEATURE__AUTO_APPROVE_GROUPS=false +FEATURE__AUTO_APPROVE_EVENTS=false # ============================================================================= # LOGGING CONFIGURATION diff --git a/.env.template b/.env.template index 41f8a35131..ffe9907314 100644 --- a/.env.template +++ b/.env.template @@ -26,6 +26,8 @@ FEATURE__MATOMO_INTEGRATION="$FEATURE__MATOMO_INTEGRATION" FEATURE__WORDPRESS_INTEGRATION="$FEATURE__WORDPRESS_INTEGRATION" FEATURE__WIKI_INTEGRATION="$FEATURE__WIKI_INTEGRATION" FEATURE__DISCOURSE_INTEGRATION="$FEATURE__DISCOURSE_INTEGRATION" +FEATURE__AUTO_APPROVE_GROUPS="$FEATURE__AUTO_APPROVE_GROUPS" +FEATURE__AUTO_APPROVE_EVENTS="$FEATURE__AUTO_APPROVE_EVENTS" # ============================================================================= # LOGGING CONFIGURATION diff --git a/app/Http/Controllers/API/EventController.php b/app/Http/Controllers/API/EventController.php index 9acb35a75e..e3eae326b2 100644 --- a/app/Http/Controllers/API/EventController.php +++ b/app/Http/Controllers/API/EventController.php @@ -543,8 +543,9 @@ public function createEventv2(Request $request): JsonResponse } } - if ($autoapprove) { - Log::info("Auto-approve event $idParty"); + // Only auto-approve if the feature is enabled AND the user has privileged role (Root, Admin, Host) + if ($autoapprove && $user->role <= ROLE::HOST) { + Log::info("Auto-approve event $idParty for user {$user->id} (role {$user->role})"); Party::find($idParty)->approve(); } diff --git a/app/Http/Controllers/API/GroupController.php b/app/Http/Controllers/API/GroupController.php index 03a9aa44d9..4ea66944d2 100644 --- a/app/Http/Controllers/API/GroupController.php +++ b/app/Http/Controllers/API/GroupController.php @@ -27,6 +27,7 @@ use Illuminate\Auth\AuthenticationException; use Illuminate\Database\QueryException; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Log; use Notification; use Illuminate\Validation\ValidationException; @@ -867,12 +868,29 @@ public function createGroupv2(Request $request): JsonResponse { $file->upload('image', 'image', $idGroup, env('TBL_GROUPS'), false, true, true); } - // Notify relevant admins. - $notify_admins = Fixometer::usersWhoHavePreference('admin-moderate-group'); - Notification::send($notify_admins, new AdminModerationGroup([ - 'group_name' => $name, - 'group_url' => url('/group/edit/'.$idGroup), - ])); + // Check if groups should be auto-approved + if (env('FEATURE__AUTO_APPROVE_GROUPS', false) && $user->role <= ROLE::RESTARTER) { + // Auto-approve the group + $group->update(['approved' => true]); + + // Fire the approval event + event(new \App\Events\ApproveGroup($group, $data)); + + // Notify the creator that their group was approved + Notification::send($user, new \App\Notifications\GroupConfirmed([ + 'group_name' => $name, + 'group_url' => url('/group/view/'.$idGroup), + ])); + + Log::info("Auto-approved group: $idGroup for user {$user->id} (role {$user->role})"); + } else { + // Notify relevant admins for moderation. + $notify_admins = Fixometer::usersWhoHavePreference('admin-moderate-group'); + Notification::send($notify_admins, new AdminModerationGroup([ + 'group_name' => $name, + 'group_url' => url('/group/edit/'.$idGroup), + ])); + } return response()->json([ 'id' => $idGroup, diff --git a/app/Models/Group.php b/app/Models/Group.php index f98b558084..71caf81ecf 100644 --- a/app/Models/Group.php +++ b/app/Models/Group.php @@ -427,21 +427,8 @@ public function getMaxUpdatedAtDevicesUpdatedAtAttribute() public function getAutoApproveAttribute() { - // A group's events are auto-approved iff all the networks that the group belongs to are set to auto-approve - // events. - $autoapprove = false; - - $networks = $this->networks; - - if ($networks && count($networks)) { - $autoapprove = true; - - foreach ($networks as $network) { - $autoapprove &= $network->auto_approve_events; - } - } - - return $autoapprove; + // Events are auto-approved based on environment configuration + return env('FEATURE__AUTO_APPROVE_EVENTS', false); } public function getDistanceAttribute() diff --git a/charts/restarters/values.yaml b/charts/restarters/values.yaml index 0de524e348..6d573c2c8d 100644 --- a/charts/restarters/values.yaml +++ b/charts/restarters/values.yaml @@ -233,6 +233,8 @@ envGroups: FEATURE__WORDPRESS_INTEGRATION: "false" FEATURE__WIKI_INTEGRATION: "false" FEATURE__DISCOURSE_INTEGRATION: "false" + FEATURE__AUTO_APPROVE_GROUPS: "false" + FEATURE__AUTO_APPROVE_EVENTS: "false" # Logging configuration logging: