implementing the add of member in a team
continuous-integration/drone/push Build is failing Details

pull/84/head
Maël DAIM 1 year ago
parent cd14647750
commit c0a02c91c5

@ -81,3 +81,45 @@ section {
align-items: center; align-items: center;
background-color: #666666; background-color: #666666;
} }
#headMembers{
width: 33%;
display: flex;
flex-direction: row;
justify-content: space-between;
}
#addMember{
height: 30px;
aspect-ratio: 1/1;
border-radius: 100%;
align-self: center;
}
.popup {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.7);
}
.popup-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
padding: 20px;
text-align: center;
}
.close {
position: absolute;
top: 10px;
right: 10px;
font-size: 20px;
cursor: pointer;
}

@ -6,7 +6,7 @@ export default function TeamPanel({isCoach, team}: {isCoach: boolean, team: Team
return ( return (
<div id="mainDiv"> <div id="mainDiv">
<header> <header>
<h1><a href="{{ path('/') }}">IQBall</a></h1> <h1><a href="/" >IQBall</a></h1>
</header> </header>
<TeamDisplay team={team.info}/> <TeamDisplay team={team.info}/>
@ -49,13 +49,16 @@ function CoachOptions ({id}:{id:number}){
) )
} }
function MembersDisplay({members}:{members : Member[]}){ function MembersDisplay({members,isCoach}:{members : Member[], isCoach : boolean}){
const listMember = members.map((member) => const listMember = members.map((member) =>
<MemberDisplay member={member}/> <MemberDisplay member={member}/>
); );
return ( return (
<div id="Members"> <div id="Members">
<h2>Membres :</h2> <div id="headMembers">
<h2>Membres :</h2>
<button id="addMember" onClick={()=> window.location.href=`${BASE}/team//addMember`}>+</button>
</div>
{listMember} {listMember}
</div> </div>
) )

@ -105,7 +105,7 @@ function getRoutes(): AltoRouter {
$ar->map("GET", "/team/[i:id]", Action::auth(fn(int $id, SessionHandle $s) => getTeamController()->displayTeam($id, $s))); $ar->map("GET", "/team/[i:id]", Action::auth(fn(int $id, SessionHandle $s) => getTeamController()->displayTeam($id, $s)));
$ar->map("GET", "/team/[i:id]/delete", Action::auth(fn(int $id,SessionHandle $s) => getTeamController()->deleteTeamById($id,$s))); $ar->map("GET", "/team/[i:id]/delete", Action::auth(fn(int $id,SessionHandle $s) => getTeamController()->deleteTeamById($id,$s)));
$ar->map("GET", "/team/members/add", Action::auth(fn(SessionHandle $s) => getTeamController()->displayAddMember($s))); $ar->map("GET", "/team/members/add", Action::auth(fn(SessionHandle $s) => getTeamController()->displayAddMember($s)));
$ar->map("POST", "/team/members/add", Action::auth(fn(SessionHandle $s) => getTeamController()->addMember($_POST, $s))); $ar->map("POST", "/team/[i:id]/addMember", Action::auth(fn(int $id,SessionHandle $s) => getTeamController()->addMember($id,$_POST, $s)));
$ar->map("GET", "/team/members/remove", Action::auth(fn(SessionHandle $s) => getTeamController()->displayDeleteMember($s))); $ar->map("GET", "/team/members/remove", Action::auth(fn(SessionHandle $s) => getTeamController()->displayDeleteMember($s)));
$ar->map("POST", "/team/members/remove", Action::auth(fn(SessionHandle $s) => getTeamController()->deleteMember($_POST, $s))); $ar->map("POST", "/team/members/remove", Action::auth(fn(SessionHandle $s) => getTeamController()->deleteMember($_POST, $s)));

@ -32,13 +32,7 @@ class TeamController {
} }
/**
* @param SessionHandle $session
* @return ViewHttpResponse the team panel to add a member
*/
public function displayAddMember(SessionHandle $session): ViewHttpResponse {
return ViewHttpResponse::twig("add_member.html.twig", []);
}
/** /**
@ -74,7 +68,7 @@ class TeamController {
} }
$teamId = $this->model->createTeam($request['name'], $request['picture'], $request['main_color'], $request['second_color']); $teamId = $this->model->createTeam($request['name'], $request['picture'], $request['main_color'], $request['second_color']);
$this->model->addMember($session->getAccount()->getUser()->getEmail(),$teamId,'COACH'); $this->model->addMember($session->getAccount()->getUser()->getEmail(),$teamId,'COACH');
return $this->displayTeam($teamId, $session); return ViewHttpResponse::redirect('/team/'.$teamId);
} }
/** /**
@ -138,7 +132,7 @@ class TeamController {
} }
else{ else{
$role = $this->model->isCoach($id,$session->getAccount()->getUser()->getEmail()); $role = $this->model->isCoach($id,$session->getAccount()->getUser()->getEmail());
var_dump($role);
return ViewHttpResponse::react('views/TeamPanel.tsx', [ return ViewHttpResponse::react('views/TeamPanel.tsx', [
'team' => [ 'team' => [
"info" => $result->getInfo(), "info" => $result->getInfo(),
@ -147,13 +141,21 @@ class TeamController {
} }
} }
/**
* @param SessionHandle $session
* @return ViewHttpResponse the team panel to add a member
*/
public function displayAddMember(SessionHandle $session): ViewHttpResponse {
return ViewHttpResponse::twig("add_member.html.twig", []);
}
/** /**
* add a member to a team * add a member to a team
* @param array<string, mixed> $request * @param array<string, mixed> $request
* @param SessionHandle $session * @param SessionHandle $session
* @return HttpResponse * @return HttpResponse
*/ */
public function addMember(array $request, SessionHandle $session): HttpResponse { public function addMember(int $idTeam,array $request, SessionHandle $session): HttpResponse {
$errors = []; $errors = [];
$request = HttpRequest::from($request, $errors, [ $request = HttpRequest::from($request, $errors, [
@ -161,9 +163,8 @@ class TeamController {
"email" => [Validators::email(), Validators::lenBetween(5, 256)], "email" => [Validators::email(), Validators::lenBetween(5, 256)],
]); ]);
$teamId = intval($request['team']); $this->model->addMember($request['email'], $idTeam, $request['role']);
$this->model->addMember($request['email'], $teamId, $request['role']); return ViewHttpResponse::redirect('/team/'.$idTeam);
return $this->displayTeam($teamId, $session);
} }
/** /**

@ -73,10 +73,8 @@
<div class="container"> <div class="container">
<h2>Ajouter un membre à votre équipe</h2> <h2>Ajouter un membre à votre équipe</h2>
<form action="{{ path('/team/members/add') }}" method="POST"> <form action="{{ path('/team/#/addMember') }}" method="POST">
<div class="form-group"> <div class="form-group">
<label for="team">Team où ajouter le membre :</label>
<input type="text" id="team" name="team" required>
<label for="mail">Email du membre :</label> <label for="mail">Email du membre :</label>
<input type="text" id="mail" name="mail" required> <input type="text" id="mail" name="mail" required>

@ -29,7 +29,7 @@ class Color implements \JsonSerializable {
public static function from(string $value): Color { public static function from(string $value): Color {
$color = self::tryFrom($value); $color = self::tryFrom($value);
if ($color == null) { if ($color == null) {
var_dump($value);
throw new InvalidArgumentException("The string is not an hexadecimal code"); throw new InvalidArgumentException("The string is not an hexadecimal code");
} }
return $color; return $color;

@ -78,7 +78,7 @@ class MemberGateway {
"email" => [$email, PDO::PARAM_STR] "email" => [$email, PDO::PARAM_STR]
] ]
)[0]['role']; )[0]['role'];
var_dump($result);
return $result == 'COACH'; return $result == 'COACH';
} }

Loading…
Cancel
Save