2019-09-20 12:57:06 +00:00
< ? php
if ( ! isset ( $_SESSION [ " user_id " ]) || $_SESSION [ " role " ] != Role :: PARTICIPANT && $_SESSION [ " role " ] != Role :: ENCADRANT )
require_once " server_files/403.php " ;
/** @var Team $team */
$team = $_SESSION [ " team " ];
if ( $team == null )
require_once " server_files/403.php " ;
$has_error = false ;
$error_message = null ;
if ( isset ( $_POST [ " give_questions " ])) {
2019-09-21 11:37:48 +00:00
$give_questions = new GiveQuestions ( $_POST , $_FILES );
2019-09-20 12:57:06 +00:00
try {
$give_questions -> makeVerifications ();
$give_questions -> giveQuestions ();
} catch ( AssertionError $e ) {
$has_error = true ;
$error_message = $e -> getMessage ();
}
}
class GiveQuestions
{
private $to ;
2019-09-21 10:21:42 +00:00
/**
* @ var Team $to_team
*/
2019-09-20 12:57:06 +00:00
private $to_team ;
private $question_1 ;
private $question_2 ;
private $question_3 ;
private $question_4 ;
private $question_5 ;
2019-09-21 10:21:42 +00:00
private $question_6 ;
2019-09-21 11:37:48 +00:00
private $no_drawing ;
private $files ;
2019-09-20 12:57:06 +00:00
2019-09-21 11:37:48 +00:00
public function __construct ( $data , $files )
2019-09-20 12:57:06 +00:00
{
foreach ( $data as $key => $value ) {
$this -> $key = $value ;
}
2019-09-21 11:37:48 +00:00
$this -> files = [];
for ( $i = 1 ; $i <= 6 ; ++ $i )
$this -> files [] = strlen ( $files [ " file_ $i " ][ " name " ]) > 0 ? $files [ " file_ $i " ] : null ;
2019-09-20 12:57:06 +00:00
}
public function makeVerifications ()
{
2019-09-21 11:37:48 +00:00
global $LOCAL_PATH , $team ;
2019-09-21 10:21:42 +00:00
$this -> to_team = Team :: fromTrigram ( $this -> to );
2019-09-20 12:57:06 +00:00
ensure ( $this -> to_team , " L'équipe indiquée n'existe pas. " );
2019-09-21 10:21:42 +00:00
ensure ( $team -> getProblem () == $this -> to_team -> getProblem (), " Les équipes ne travaillent pas sur le même problème. " );
2019-09-21 11:37:48 +00:00
ensure ( $this -> question_1 != null && $this -> question_1 != " " && $this -> question_2 != null && $this -> question_2 != " " && $this -> question_3 != null && $this -> question_3 != " " ,
2019-09-21 10:21:42 +00:00
" Vous devez poser au moins 3 questions. " );
2019-09-21 11:37:48 +00:00
ensure ( sizeof ( $_FILES ) == 0 || $this -> no_drawing , " Vous devez confirmer ne pas avoir inclus de texte dans vos pièces jointes. " );
for ( $i = 0 ; $i < 6 ; ++ $i ) {
ensure ( $this -> files [ $i ][ " size " ] <= 2e6 , " Le fichier doit peser moins que 2 Mo. " );
ensure ( ! $this -> files [ $i ][ " error " ], " Une erreur est survenue. " );
//ensure(finfo_file(finfo_open(FILEINFO_MIME_TYPE), $this->files[$i]["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. " );
2019-09-20 12:57:06 +00:00
}
public function giveQuestions ()
{
2019-09-21 11:37:48 +00:00
global $DB , $LOCAL_PATH , $team ;
$attached_file = [];
for ( $i = 0 ; $i < 5 ; ++ $i )
{
if ( $this -> files [ $i ] == null )
$attached_file [] = null ;
else {
do
$id = genRandomPhrase ( 64 );
while ( file_exists ( " $LOCAL_PATH /files/ $id " ));
if ( ! rename ( $this -> files [ $i ][ " tmp_name " ], " $LOCAL_PATH /files/ $id " ))
throw new AssertionError ( " Une erreur est survenue lors de l'envoi du fichier. " );
$attached_file [] = $id ;
}
}
2019-09-20 12:57:06 +00:00
2019-09-21 10:21:42 +00:00
$DB -> exec ( " DELETE FROM `questions` WHERE `from` = " . $team -> getId () . " AND `to` = " . $this -> to_team -> getId () . " ; " );
2019-09-21 11:37:48 +00:00
$req = $DB -> prepare ( " INSERT INTO `questions`(`from`, `to`, `problem`, `question`, `attached_file`) VALUES "
. " (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?), (?, ?, ?, ?, ?); " );
$req -> execute ([ $team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_1 , $attached_file [ 0 ],
$team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_2 , $attached_file [ 1 ],
$team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_3 , $attached_file [ 2 ],
$team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_4 , $attached_file [ 3 ],
$team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_5 , $attached_file [ 4 ],
$team -> getId (), $this -> to_team -> getId (), $team -> getProblem (), $this -> question_6 , $attached_file [ 5 ]]);
2019-09-20 12:57:06 +00:00
}
}
/**
* @ var Team [] $receivers
* @ var Video [] $videos
* @ var Question [][] $questions
*/
$receivers = [ Team :: fromId ( $team -> getVideoTeamIds ()[ 0 ]), Team :: fromId ( $team -> getVideoTeamIds ()[ 1 ])];
$videos = [ Video :: getVideo ( Reason :: SOLUTION , $receivers [ 0 ], Video :: ACCEPTED ),
Video :: getVideo ( Reason :: SOLUTION , $receivers [ 1 ], Video :: ACCEPTED )];
$questions = [ Question :: getQuestions ( $team , $receivers [ 0 ]),
Question :: getQuestions ( $team , $receivers [ 1 ])];
require_once " server_files/views/poser_questions.php " ;