From 9ad5eb38d4b43c07e37e8b9051f917fb9d65371e Mon Sep 17 00:00:00 2001 From: Philippe Jadin Date: Mon, 6 May 2019 15:00:48 +0200 Subject: [PATCH] This closes #220 --- app/Http/Controllers/MembershipController.php | 17 +++++++++ app/Membership.php | 5 +++ .../views/partials/preferences-show.blade.php | 35 +++++++++++++------ 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/MembershipController.php b/app/Http/Controllers/MembershipController.php index 33735310..da2d1aaa 100644 --- a/app/Http/Controllers/MembershipController.php +++ b/app/Http/Controllers/MembershipController.php @@ -125,6 +125,12 @@ public function destroyConfirm(Request $request, Group $group) // load a membership for this group and user combination $membership =Membership::where(['user_id' => $request->user()->id, 'group_id' => $group->id])->firstOrFail(); + if ($membership->isAdmin() && $group->admins->count() == 1) + { + flash('You cannot leave this group since you are the unique admin. Promote someone else as admin first.'); + return redirect()->back(); + } + return view('membership.leave') ->with('group', $group) ->with('tab', 'settings') @@ -177,6 +183,7 @@ public function edit(Request $request, Group $group, Membership $membership = nu */ public function update(Request $request, Group $group, Membership $membership = null) { + // load membership for this group and the current user combination if (!$membership) { @@ -190,7 +197,17 @@ public function update(Request $request, Group $group, Membership $membership = if ($request->has('membership_level')) { $this->authorize('manage-membership', $group); + + // handle the case an admin change his own level and is the only one admin of the group... yes it hapened... + if ($membership->isAdmin() && $group->admins->count() == 1 && $request->get('membership_level') < \App\Membership::ADMIN) + { + flash('You cannot remove you as admin since you are the unique admin. Promote someone else as admin first.'); + return redirect()->back(); + } + $membership->membership = $request->get('membership_level'); + + } diff --git a/app/Membership.php b/app/Membership.php index e135dd8b..bce72833 100644 --- a/app/Membership.php +++ b/app/Membership.php @@ -50,6 +50,11 @@ class Membership extends Model // member is blacklisted and cannot join the group again (not yet in use) const BLACKLISTED = -30; + public function isAdmin() + { + return $this->membership == \App\Membership::ADMIN; + } + public function votes() { return $this->morphedByMany('Vote', 'votable'); diff --git a/resources/views/partials/preferences-show.blade.php b/resources/views/partials/preferences-show.blade.php index e0adc747..f79d49fd 100644 --- a/resources/views/partials/preferences-show.blade.php +++ b/resources/views/partials/preferences-show.blade.php @@ -1,13 +1,26 @@ @auth - @if (Auth::user()->getPreference('show', 'my') == 'my') -
- {{trans('messages.my_groups')}} - {{trans('messages.all_groups')}} -
- @else -
- {{trans('messages.my_groups')}} - {{trans('messages.all_groups')}} -
- @endif + @if (Auth::user()->getPreference('show', 'my') == 'my') + + + + @else + + + @endif @endauth