2019-08-21 20:56:46 +00:00
< ? php
2019-09-07 11:42:36 +00:00
if ( ! isset ( $_SESSION [ " team " ]))
require_once " server_files/403.php " ;
2019-09-02 18:57:26 +00:00
2019-09-07 17:01:23 +00:00
/**
* @ var Team $team
* @ var Tournament $tournament
*/
2019-09-07 11:42:36 +00:00
$team = $_SESSION [ " team " ];
2019-09-07 17:01:23 +00:00
$tournament = Tournament :: fromId ( $team -> isSelectedForFinal () ? $FINAL -> getId () : $team -> getTournamentId ());
2019-09-07 11:42:36 +00:00
2019-09-07 17:01:23 +00:00
if ( isset ( $_POST [ " send_solution " ])) {
$error_message = saveSolution ();
}
2019-08-21 20:56:46 +00:00
2019-09-07 17:01:23 +00:00
/** @noinspection SqlAggregates */
$solutions_req = $DB -> prepare ( " SELECT `file_id`, `problem`, COUNT(`problem`) AS `version` FROM `solutions` WHERE `team` = ? AND `tournament` = ? GROUP BY `problem` ORDER BY `problem`, `uploaded_at` DESC; " );
$solutions_req -> execute ([ $team -> getId (), $tournament -> getId ()]);
2019-09-02 18:57:26 +00:00
2019-08-21 20:56:46 +00:00
function saveSolution () {
2019-09-07 17:01:23 +00:00
global $LOCAL_PATH , $DB , $team , $tournament ;
2019-08-21 20:56:46 +00:00
try {
$problem = $_POST [ " problem " ];
if ( $problem < 1 || $problem > 9 )
return " Le numéro de problème est invalide. " ;
}
catch ( Throwable $t ) {
return " Le numéro de problème n'est pas valide. Merci de ne pas créer vos propres requêtes. " ;
}
$file = $_FILES [ " solution " ];
if ( $file [ " size " ] > 5000000 || $file [ " error " ])
return " Une erreur est survenue. Merci de vérifier que le fichier pèse moins que 5 Mo. " ;
if ( finfo_file ( finfo_open ( FILEINFO_MIME_TYPE ), $file [ " tmp_name " ]) != 'application/pdf' )
return " Le fichier doit être au format PDF. " ;
if ( ! is_dir ( " $LOCAL_PATH /files " ) && ! mkdir ( " $LOCAL_PATH /files " ))
return " Les droits sont insuffisants. Veuillez contacter l'administrateur du serveur. " ;
$alphabet = " abcdefghijklmnopqrstuvwxyz0123456789 " ;
do {
$id = " " ;
for ( $i = 0 ; $i < 64 ; ++ $i ) {
$id .= $alphabet [ rand ( 0 , strlen ( $alphabet ) - 1 )];
}
}
while ( file_exists ( " $LOCAL_PATH /files/ $id " ));
if ( ! rename ( $file [ " tmp_name " ], " $LOCAL_PATH /files/ $id " ))
return " Une erreur est survenue lors de l'envoi du fichier. " ;
2019-09-02 22:01:54 +00:00
$req = $DB -> prepare ( " INSERT INTO `solutions`(`file_id`, `team`, `tournament`, `problem`) VALUES (?, ?, ?, ?); " );
2019-09-07 17:01:23 +00:00
$req -> execute ([ $id , $team -> getId (), $tournament -> getId (), $problem ]);
2019-08-21 20:56:46 +00:00
return false ;
}
2019-09-07 11:42:36 +00:00
require_once " server_files/views/solutions.php " ;