model = $model; } /** * @param SessionHandle $session * @return ViewHttpResponse the team creation panel */ public function displayCreateTeam(SessionHandle $session): ViewHttpResponse { return ViewHttpResponse::twig("insert_team.html.twig", []); } /** * @param SessionHandle $session * @return ViewHttpResponse the team panel to delete a member */ public function displayDeleteMember(SessionHandle $session): ViewHttpResponse { return ViewHttpResponse::twig("delete_member.html.twig", []); } /** * create a new team from given request name, mainColor, secondColor and picture url * @param array $request * @param SessionHandle $session * @return HttpResponse */ public function submitTeam(array $request, SessionHandle $session): HttpResponse { $failures = []; $request = HttpRequest::from($request, $failures, [ "name" => [Validators::lenBetween(1, 32), Validators::nameWithSpaces()], "main_color" => [Validators::hexColor()], "second_color" => [Validators::hexColor()], "picture" => [Validators::isURL()], ]); if (!empty($failures)) { $badFields = []; foreach ($failures as $e) { if ($e instanceof FieldValidationFail) { $badFields[] = $e->getFieldName(); } } return ViewHttpResponse::twig('insert_team.html.twig', ['bad_fields' => $badFields]); } $teamId = $this->model->createTeam($request['name'], $request['picture'], $request['main_color'], $request['second_color']); $this->model->addMember($session->getAccount()->getUser()->getEmail(),$teamId,'COACH'); return ViewHttpResponse::redirect('/team/'.$teamId); } /** * @param SessionHandle $session * @return ViewHttpResponse the panel to search a team by its name */ public function displayListTeamByName(SessionHandle $session): ViewHttpResponse { return ViewHttpResponse::twig("list_team_by_name.html.twig", []); } /** * returns a view that contains all the teams description whose name matches the given name needle. * @param array $request * @param SessionHandle $session * @return HttpResponse */ public function listTeamByName(array $request, SessionHandle $session): HttpResponse { $errors = []; $request = HttpRequest::from($request, $errors, [ "name" => [Validators::lenBetween(1, 32), Validators::nameWithSpaces()], ]); if (!empty($errors) && $errors[0] instanceof FieldValidationFail) { $badField = $errors[0]->getFieldName(); return ViewHttpResponse::twig('list_team_by_name.html.twig', ['bad_field' => $badField]); } $teams = $this->model->listByName($request['name'],$session->getAccount()->getUser()->getId()); if (empty($teams)) { return ViewHttpResponse::twig('display_teams.html.twig', []); } return ViewHttpResponse::twig('display_teams.html.twig', ['teams' => $teams]); } /** * @param int $id * @param SessionHandle $session * @return HttpResponse */ public function deleteTeamById(int $id, SessionHandle $session):HttpResponse{ $a = $session->getAccount(); $ret = $this->model->deleteTeam($a->getUser()->getEmail(),$id); if($ret != 0){ return ViewHttpResponse::twig('display_team.html.twig',['notDeleted' => true]); } return ViewHttpResponse::redirect('/'); } /** * @param int $id * @param SessionHandle $session * @return ViewHttpResponse a view that displays given team information */ public function displayTeam(int $id, SessionHandle $session): ViewHttpResponse { $result = $this->model->getTeam($id,$session->getAccount()->getUser()->getId()); if($result == null){ return ViewHttpResponse::twig('error.html.twig', [ 'failures' => [ValidationFail::unauthorized("Vous n'avez pas accès à cette équipe.")], ], HttpCodes::FORBIDDEN); } else{ $role = $this->model->isCoach($id,$session->getAccount()->getUser()->getEmail()); return ViewHttpResponse::react('views/TeamPanel.tsx', [ 'team' => [ "info" => $result->getInfo(), "members" => $result->listMembers() ], 'isCoach' => $role, 'currentUserId'=>$session->getAccount()->getUser()->getId()] ); } } /** * @param SessionHandle $session * @return ViewHttpResponse the team panel to add a member */ public function displayAddMember(int $idTeam,SessionHandle $session): ViewHttpResponse { return ViewHttpResponse::twig("add_member.html.twig", ['idTeam'=> $idTeam]); } /** * add a member to a team * @param array $request * @param SessionHandle $session * @return HttpResponse */ public function addMember(int $idTeam,array $request, SessionHandle $session): HttpResponse { $errors = []; if(!$this->model->isCoach($idTeam,$session->getAccount()->getUser()->getEmail())){ return ViewHttpResponse::twig('error.html.twig', [ 'failures' => [ValidationFail::unauthorized("Vous n'avez pas accès à cette équipe.")], ], HttpCodes::FORBIDDEN); } $request = HttpRequest::from($request, $errors, [ "email" => [Validators::email(), Validators::lenBetween(5, 256)], ]); if(!empty($errors)){ return ViewHttpResponse::twig('add_member.html.twig',['badEmail' => true,'idTeam'=> $idTeam]); } $ret = $this->model->addMember($request['email'], $idTeam, $request['role']); switch($ret){ case -1: return ViewHttpResponse::twig('add_member.html.twig',['notFound' => true,'idTeam'=> $idTeam]); case -2: return ViewHttpResponse::twig('add_member.html.twig',['alreadyExisting' => true,'idTeam'=> $idTeam]); default: return ViewHttpResponse::redirect('/team/'.$idTeam); } } /** * remove a member from a team * @param array $request * @param SessionHandle $session * @return HttpResponse */ public function deleteMember(int $idTeam,int $idMember, SessionHandle $session): HttpResponse { $ret = $this->model->deleteMember($idMember,$idTeam); if($ret == -1 || $session->getAccount()->getUser()->getId() == $idMember ){ return ViewHttpResponse::redirect('/'); } return $this->displayTeam($ret,$session); } }