2019-09-09 23:48:52 +00:00
< ? php
if ( isset ( $_SESSION [ " team " ]) || ! isset ( $_SESSION [ " user " ]) || ( $_SESSION [ " role " ] != Role :: PARTICIPANT && $_SESSION [ " role " ] != Role :: ENCADRANT ))
require_once " server_files/403.php " ;
$has_error = false ;
$error_message = null ;
2019-09-24 21:18:32 +00:00
if ( isset ( $_POST [ " join_team " ])) {
2019-09-09 23:48:52 +00:00
$join_team = new JoinTeam ( $_POST );
try {
$join_team -> makeVerifications ();
$join_team -> joinTeam ();
} catch ( AssertionError $e ) {
$has_error = true ;
$error_message = $e -> getMessage ();
}
}
class JoinTeam
{
private $access_code ;
private $team ;
private $min_null_index ;
public function __construct ( $data )
{
$this -> access_code = strtolower ( htmlspecialchars ( $data [ " access_code " ]));
$this -> team = Team :: fromAccessCode ( $this -> access_code );
}
public function makeVerifications ()
{
2019-09-12 16:47:57 +00:00
global $CONFIG ;
ensure ( date ( " Y-m-d H:i:s " ) < $CONFIG -> getInscriptionDate (), " La date limite d'inscription est dépassée. " );
2019-09-09 23:48:52 +00:00
ensure ( preg_match ( " #[a-z0-9] { 6}# " , $this -> access_code ), " Le code d'accès doit comporter 6 caractères alphanumériques. " );
ensure ( $this -> team != null , " Ce code d'accès est invalide. " );
ensure ( $this -> team -> getValidationStatus () == ValidationStatus :: NOT_READY , " Cette équipe est déjà validée ou en cours de validation, vous ne pouvez pas la rejoindre. " );
2019-09-12 12:11:59 +00:00
for ( $i = 1 ; $i <= $_SESSION [ " role " ] == Role :: PARTICIPANT ? 5 : 1 ; ++ $i ) {
2019-09-11 16:41:45 +00:00
if (( $_SESSION [ " role " ] == Role :: PARTICIPANT ? $this -> team -> getParticipants ()[ $i - 1 ] : $this -> team -> getEncadrantId ()) == NULL )
2019-09-09 23:48:52 +00:00
break ;
}
$this -> min_null_index = $i ;
2019-09-12 12:11:59 +00:00
ensure ( $_SESSION [ " role " ] == Role :: PARTICIPANT && $this -> min_null_index <= 5 || $_SESSION [ " role " ] == Role :: ENCADRANT && $this -> min_null_index <= 2 , " Il n'y a plus de place pour vous dans l'équipe. " );
2019-09-09 23:48:52 +00:00
}
public function joinTeam ()
{
$user = $_SESSION [ " user " ];
$user -> setTeamId ( $this -> team -> getId ());
if ( $_SESSION [ " role " ] == Role :: ENCADRANT )
2019-09-11 16:41:45 +00:00
$this -> team -> setEncadrant ( $user -> getId ());
2019-09-09 23:48:52 +00:00
else
$this -> team -> setParticipant ( $this -> min_null_index , $user -> getId ());
$_SESSION [ " team " ] = $this -> team ;
2019-09-11 16:41:45 +00:00
Mailer :: sendJoinTeamMail ( $user , $this -> team );
2019-09-09 23:48:52 +00:00
}
}
require_once " server_files/views/rejoindre_equipe.php " ;