diff --git a/app/Http/Controllers/MemberController.php b/app/Http/Controllers/MemberController.php index 8a1f3bf..046c5e3 100644 --- a/app/Http/Controllers/MemberController.php +++ b/app/Http/Controllers/MemberController.php @@ -36,7 +36,7 @@ public function store(Request $request) if ($group == null) abort(404, __('errors.invalid_invitation')); $validator = Validator::make($request->all(), [ - 'nickname' => ['required', 'string', 'min:1', 'max:15', new UniqueNickname($group->id)], + 'nickname' => ['required', 'string', 'min:1', 'max:15', new UniqueNickname($group->id, $request->merge_with_member_id)], 'merge_with_member_id' => ['nullable', new IsMember($group)] ]); if ($validator->fails()) abort(400, $validator->errors()->first()); diff --git a/app/Rules/UniqueNickname.php b/app/Rules/UniqueNickname.php index 9457c57..40ef063 100644 --- a/app/Rules/UniqueNickname.php +++ b/app/Rules/UniqueNickname.php @@ -9,12 +9,14 @@ class UniqueNickname implements Rule { /** * Create a new rule instance. - * @param mixed $group_id + * @param int $group_id + * @param int|null $except_member_id * @return void */ - public function __construct($group_id) + public function __construct($group_id, $except_member_id) { $this->group = Group::find($group_id); + $this->except_member_id = $except_member_id; } /** @@ -26,7 +28,10 @@ public function __construct($group_id) */ public function passes($attribute, $value) { - return $this->group->members->where('member_data.nickname', $value)->count() == 0; + return $this->group->members + ->where('member_data.nickname', $value) + ->except([$this->except_member_id]) + ->count() == 0; } /**