2019-09-09 23:48:52 +00:00
< ? php
if ( isset ( $_POST [ " leave_team " ])) {
quitTeam ();
exit ();
}
$has_error = false ;
$error_message = null ;
if ( isset ( $_POST [ " send_document " ])) {
$send_document = new SendDocument ();
try {
$send_document -> makeVerifications ();
$send_document -> sendDocument ();
}
catch ( AssertionError $e ) {
$has_error = true ;
$error_message = $e -> getMessage ();
}
}
if ( isset ( $_POST [ " team_edit " ])) {
$my_team = new MyTeam ( $_POST );
try {
$my_team -> makeVerifications ();
$my_team -> updateTeam ();
}
catch ( AssertionError $e ) {
$has_error = true ;
$error_message = $e -> getMessage ();
}
}
if ( isset ( $_POST [ " request_validation " ])) {
2019-09-24 23:08:38 +00:00
if ( ! canValidate ( $_SESSION [ " team " ])) {
2019-09-23 22:47:04 +00:00
$has_error = true ;
2019-09-09 23:48:52 +00:00
$error_message = " Votre équipe ne peut pas demander la validation : il manque soit des participants, soit des documents. " ;
2019-09-23 22:47:04 +00:00
}
else if ( ! isset ( $_POST [ " engage " ])) {
$has_error = true ;
$error_message = " Vous devez cocher la case qui vous engage à participer à l'intégralité des Correspondances. " ;
}
2019-09-09 23:48:52 +00:00
else
$_SESSION [ " team " ] -> setValidationStatus ( ValidationStatus :: WAITING );
}
2019-09-24 08:42:20 +00:00
$documents = [];
/** @var Question[][] $questions_received */
$questions_received = [];
2019-09-09 23:48:52 +00:00
if ( isset ( $_SESSION [ " user_id " ]) && isset ( $_SESSION [ " team " ]) && $_SESSION [ " team " ] !== null ) {
/**
* @ var User $user
* @ var Team $team
*/
$user = $_SESSION [ " user " ];
$team = $_SESSION [ " team " ];
2019-09-11 16:41:45 +00:00
$documents = $user -> getAllDocuments ( $team -> getProblem ());
2019-09-24 08:42:20 +00:00
$video = Video :: getVideo ( Reason :: SOLUTION , $team );
$questions_received = Question :: getQuestionsTo ( $team );
2019-09-09 23:48:52 +00:00
}
else
require_once " server_files/403.php " ;
2019-09-24 08:08:53 +00:00
if ( isset ( $_GET [ " publish_videos " ])) {
$team -> setAllowPublish ( ! $team -> allowPublish ());
header ( " Location: /mon-equipe " );
exit ();
}
2019-09-09 23:48:52 +00:00
class SendDocument
{
private $file ;
public function __construct ()
{
$this -> file = $_FILES [ " document " ];
}
public function makeVerifications ()
{
global $LOCAL_PATH ;
ensure ( $this -> file [ " size " ] <= 2e6 , " Le fichier doit peser moins que 2 Mo. " );
ensure ( ! $this -> file [ " error " ], " Une erreur est survenue. " );
ensure ( finfo_file ( finfo_open ( FILEINFO_MIME_TYPE ), $this -> file [ " tmp_name " ]) == " application/pdf " , " Le fichier doit être au format PDF. " );
ensure ( is_dir ( " $LOCAL_PATH /files " ) || mkdir ( " $LOCAL_PATH /files " ), " Un problème est survenue dans l'envoi du fichier. Veuillez contacter l'administrateur du serveur. " );
}
public function sendDocument ()
{
2019-09-11 16:41:45 +00:00
global $LOCAL_PATH , $DB ;
2019-09-09 23:48:52 +00:00
do
$id = genRandomPhrase ( 64 );
while ( file_exists ( " $LOCAL_PATH /files/ $id " ));
if ( ! rename ( $this -> file [ " tmp_name " ], " $LOCAL_PATH /files/ $id " ))
throw new AssertionError ( " Une erreur est survenue lors de l'envoi du fichier. " );
2019-09-24 23:08:38 +00:00
$req = $DB -> prepare ( " INSERT INTO `documents`(`file_id`, `user`, `team`, `problem`)
VALUES ( ? , ? , ? , ? ); " );
$req -> execute ([ $id , $_SESSION [ " user_id " ], $_SESSION [ " team " ] -> getId (), $_SESSION [ " team " ] -> getProblem ()]);
2019-09-09 23:48:52 +00:00
}
}
class MyTeam
{
public $name ;
public $trigram ;
2019-09-11 16:41:45 +00:00
public $problem ;
/** @var Team */
2019-09-09 23:48:52 +00:00
private $team ;
public function __construct ( $data )
{
foreach ( $data as $key => $value )
$this -> $key = htmlspecialchars ( $value );
$this -> trigram = strtoupper ( $this -> trigram );
$this -> team = $_SESSION [ " team " ];
}
public function makeVerifications ()
{
2019-09-24 08:08:53 +00:00
global $CONFIG ;
2019-09-09 23:48:52 +00:00
ensure ( $this -> name != " " && $this -> name != null , " Veuillez spécifier un nom d'équipe. " );
ensure ( $this -> name == $this -> team -> getName () || ! teamExists ( $this -> name ), " Une équipe existe déjà avec ce nom. " );
2019-09-12 10:18:15 +00:00
ensure ( preg_match ( " #^[ \ p { L} ]+ $ #ui " , $this -> name ), " Le nom de l'équipe ne doit pas comporter de caractères spéciaux. " );
2019-09-09 23:48:52 +00:00
ensure ( preg_match ( " #^[A-Z] { 3} $ # " , $this -> trigram ), " Le trigramme n'est pas valide. " );
ensure ( $this -> trigram == $this -> team -> getTrigram () || ! trigramExists ( $this -> trigram ), " Une équipe a déjà choisi ce trigramme. " );
2019-09-11 16:41:45 +00:00
ensure ( preg_match ( " #^[1-4] $ # " , $this -> problem ), " Le problème indiqué n'existe pas. " );
2019-09-24 08:08:53 +00:00
ensure ( date ( " Y-m-d H:i:s " ) <= $CONFIG -> getInscriptionDate (), " Les inscriptions sont terminées. " );
2019-09-09 23:48:52 +00:00
ensure ( $this -> team -> getValidationStatus () == ValidationStatus :: NOT_READY , " Votre équipe est déjà validée ou en cours de validation. " );
}
public function updateTeam ()
{
global $URL_BASE ;
$this -> team -> setName ( $this -> name );
$this -> team -> setTrigram ( $this -> trigram );
2019-09-11 16:41:45 +00:00
$this -> team -> setProblem ( $this -> problem );
2019-09-09 23:48:52 +00:00
2019-09-16 22:19:01 +00:00
header ( " Location: $URL_BASE /mon-equipe " );
2019-09-09 23:48:52 +00:00
}
}
require_once " server_files/views/mon_equipe.php " ;