validate($request, [ 'id_user' => 'required|integer|min:0|not_in:0', 'nom' => 'required', 'code_sponsor1' => 'required', 'code_sponsor2' => 'required', 'code_sponsor3' => 'required', 'password' => 'required', 'limite_credit' => 'required|numeric|min:0|not_in:0', ]); $user = User::findOrFail($request->id_user); if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt)) return $this->errorResponse(trans('messages.incorrect_user_password')); $group->fill($request->all()); // Envoyer des codes sponsors differents //Check sponsor 1 $resp1 = $this->checkSponsorIdentification($request->code_sponsor1, 1); if (is_numeric($resp1)) $group->id_sponsor1 = $resp1; else return $resp1; //Check sponsor 2 $resp2 = $this->checkSponsorIdentification($request->code_sponsor2, 2); if (is_numeric($resp2)) $group->id_sponsor2 = $resp2; else return $resp2; //Check sponsor 3 $resp3 = $this->checkSponsorIdentification($request->code_sponsor3, 3); if (is_numeric($resp3)) $group->id_sponsor3 = $resp3; else return $resp3; $group->id_createur = $request->id_user; $group->date_creation = new \DateTime(); $group->nombre_validation = 0; $group->actif = false; $group->valide = false; $group->save(); $this->sendNotificationToSponsor($group->id, $group->id_sponsor1); $this->sendNotificationToSponsor($group->id, $group->id_sponsor2); $this->sendNotificationToSponsor($group->id, $group->id_sponsor3); return $this->successResponse(trans('messages.successful_user_group_created')); } public function validateGroup(Request $request) { $this->validate($request, [ 'id_demande' => 'required|integer|min:0|not_in:0', 'id_user' => 'required|integer|min:0|not_in:0' ]); $demande = UsersGroupsDemandesValidation::findOrFail($request->id_demande); if ($demande->statut == 1) return $this->errorResponse(trans('errors.treated_group_demand')); if ($demande->id_sponsor != $request->id_user) return $this->errorResponse(trans('errors.not_group_sponsor')); $group = UsersGroup::findOrFail($demande->id_group); if (!in_array($demande->id_sponsor, [$group->id_sponsor1, $group->id_sponsor2, $group->id_sponsor3])) return $this->errorResponse(trans('errors.not_group_sponsor')); if ($group->actif) return $this->errorResponse(trans('errors.group_already_activated')); ++$group->nombre_validation; if ($group->nombre_validation == 3) { $group->actif = true; $group->date_activation = new \DateTime(); $group->code_groupe = $this->getGroupID(); $group->createur->group_id = $group->id; $group->sponsor1->group_id = $group->id; $group->sponsor2->group_id = $group->id; $group->sponsor3->group_id = $group->id; $group->createur->save(); $group->sponsor1->save(); $group->sponsor2->save(); $group->sponsor3->save(); } $group->save(); $demande->statut = true; $demande->date_validation = new \DateTime(); $demande->save(); // Create credit and epargne account return $this->successResponse(trans_choice('messages.successful_group_validation', 3 - $group->nombre_validation, ['count' => (3 - $group->nombre_validation)])); } public function updateGroup(Request $request) { $this->validate($request, [ 'code_groupe' => 'required', 'code_sponsor1' => 'required', 'code_sponsor2' => 'required', 'code_sponsor3' => 'required', 'password' => 'required', 'limite_credit' => 'required|numeric|min:0|not_in:0', ]); $group = UsersGroup::where('code_groupe', $request->code_groupe)->firstOrFail(); $user = User::findOrFail($group->id_createur); if (!$this->checkPassword($request->password, $user->encrypted_password, $user->salt)) return $this->errorResponse(trans('messages.incorrect_user_password')); $sponsor1 = User::where('user_code', $request->code_sponsor1)->firstOrFail(); $sponsor2 = User::where('user_code', $request->code_sponsor2)->firstOrFail(); $sponsor3 = User::where('user_code', $request->code_sponsor3)->firstOrFail(); if ($sponsor1->id != $group->id_sponsor1) { $prevSponsor1 = $group->sponsor1; //Check sponsor 1 $resp1 = $this->checkSponsorIdentification($request->code_sponsor1, 1); if (is_numeric($resp1)) $group->id_sponsor1 = $resp1; else return $resp1; --$group->nombre_validation; $prevSponsor1->group_id = null; } if ($sponsor2->id != $group->id_sponsor2) { $prevSponsor2 = $group->sponsor2; //Check sponsor 2 $resp2 = $this->checkSponsorIdentification($request->code_sponsor2, 2); if (is_numeric($resp2)) $group->id_sponsor2 = $resp2; else return $resp2; --$group->nombre_validation; $prevSponsor2->group_id = null; } if ($sponsor3->id != $group->id_sponsor3) { $prevSponsor3 = $group->sponsor3; //Check sponsor 3 $resp3 = $this->checkSponsorIdentification($request->code_sponsor3, 3); if (is_numeric($resp3)) $group->id_sponsor3 = $resp3; else return $resp3; --$group->nombre_validation; $prevSponsor3->group_id = null; } $group->fill($request->all()); $group->actif = false; $group->date_activation = null; if (isset($prevSponsor1)) { $prevSponsor1->save(); $this->sendNotificationToSponsor($group->id, $group->id_sponsor1); } if (isset($prevSponsor2)) { $prevSponsor2->save(); $this->sendNotificationToSponsor($group->id, $group->id_sponsor2); } if (isset($prevSponsor3)) { $prevSponsor3->save(); $this->sendNotificationToSponsor($group->id, $group->id_sponsor3); } $group->save(); return $this->successResponse(trans('messages.successful_user_group_modificated')); } private function sendNotificationToSponsor($id_group, $id_sponsor) { $demande = new UsersGroupsDemandesValidation(); $demande->id_group = $id_group; $demande->id_sponsor = $id_sponsor; $demande->date_creation = new \DateTime(); $demande->statut = false; $demande->save(); } private function checkSponsorIdentification($code_sponsor, $id) { $sponsor = User::where('user_code', $code_sponsor)->first(); //Verifier s'il appartient a un groupe if (isset($sponsor->group_id)) return $this->errorResponse(trans('errors.sponsor_belongs_to_group', ['id' => $id])); if ($sponsor) { return $this->checkUserIdentification($sponsor->id, $id); } else { return $this->errorResponse('Ce code sponsor' . $id . ' n\'existe pas '); } } private function checkUserIdentification($id_user, $id) { $identification = Identification::where('id_user', $id_user)->first(); if (isset($identification)) { if ($identification->status == 0) return $this->errorResponse(trans('errors.validation_sponsor_identification_required', ['id' => $id])); else return $id_user; } else { return $this->errorResponse(trans('errors.sponsor_identification_required', ['id' => $id])); } } private function getGroupID() { do { $code = $this->generateGroupCode(); $result = collect(DB::select('SELECT * FROM users_groups WHERE code_groupe = :code', ['code' => $code])); $codeCorrect = sizeof($result) < 0; } while ($codeCorrect); return $code; } private function generateGroupCode($length = 8) { $characters = '23456789ABCDEFGHJKLMNOPQRSTUVWXYZ'; $charactersLength = strlen($characters); $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, $charactersLength - 1)]; } return $randomString; } }