2019-09-16 22:19:01 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
if (!isset($_SESSION["user_id"]) || $_SESSION["role"] != Role::ADMIN)
|
|
|
|
require_once "server_files/403.php";
|
|
|
|
|
2019-09-18 22:31:53 +00:00
|
|
|
$has_error = false;
|
|
|
|
$error_message = null;
|
|
|
|
|
|
|
|
if (isset($_POST["validate_video"])) {
|
|
|
|
$validate_video = new ValidateVideo($_POST);
|
|
|
|
try {
|
|
|
|
$validate_video->makeVerifications();
|
|
|
|
$validate_video->validate();
|
|
|
|
}
|
|
|
|
catch (AssertionError $e) {
|
|
|
|
$has_error = true;
|
|
|
|
$error_message = $e->getMessage();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
class ValidateVideo
|
|
|
|
{
|
|
|
|
private $video_id;
|
|
|
|
private $accept;
|
|
|
|
private $reject;
|
|
|
|
/** @var Video */
|
|
|
|
private $video;
|
2019-10-21 21:48:24 +00:00
|
|
|
private $message;
|
2019-09-18 22:31:53 +00:00
|
|
|
|
|
|
|
public function __construct($data)
|
|
|
|
{
|
|
|
|
foreach ($data as $key => $value)
|
|
|
|
$this->$key = $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function makeVerifications()
|
|
|
|
{
|
|
|
|
$this->video = Video::fromId($this->video_id);
|
|
|
|
ensure($this->video != null, "La vidéo n'existe pas.");
|
2019-10-08 23:08:23 +00:00
|
|
|
ensure($this->video->getValidation() != 1, "La vidéo est déjà validée / rejetée.");
|
2019-09-18 22:31:53 +00:00
|
|
|
ensure(($this->accept == null || $this->reject == null) && $this->accept != $this->reject, "Impossible de déterminer s'il faut accepter ou non la vidéo.");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validate()
|
|
|
|
{
|
|
|
|
$this->video->setValidation($this->accept ? 1 : -1);
|
2019-10-21 21:48:24 +00:00
|
|
|
Mailer::validateVideo($this->video, $this->message);
|
2019-09-18 22:31:53 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-09-16 22:19:01 +00:00
|
|
|
$videos = [];
|
|
|
|
|
|
|
|
for ($problem = 1; $problem <= 4; ++$problem)
|
|
|
|
$videos[] = Video::getVideos(Reason::SOLUTION, $problem);
|
|
|
|
|
2019-09-30 22:15:04 +00:00
|
|
|
$waiting_teams = [];
|
2019-12-13 18:50:32 +00:00
|
|
|
$waiting_emails = [];
|
2019-09-30 22:15:04 +00:00
|
|
|
|
|
|
|
switch (Phase::getCurrentPhase()) {
|
|
|
|
case Phase::PHASE1:
|
2020-01-01 20:11:28 +00:00
|
|
|
case Phase::PHASE12:
|
2019-12-13 18:50:32 +00:00
|
|
|
$req = $DB->query("SELECT DISTINCT `teams`.`id`, `teams`.`problem`, `teams`.`trigram` FROM `teams` WHERE `validation_status` = '" . ValidationStatus::getName(ValidationStatus::VALIDATED) . "'"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " AND `id` NOT IN (SELECT DISTINCT `team` FROM `videos` WHERE `reason` = 'SOLUTION' AND `validation` = " . Video::ACCEPTED . ")"
|
2019-12-13 18:50:32 +00:00
|
|
|
. " AND `year` = $YEAR ORDER BY `problem`, `trigram`;");
|
2019-09-30 22:15:04 +00:00
|
|
|
break;
|
|
|
|
case Phase::PHASE2:
|
2020-01-01 20:11:28 +00:00
|
|
|
case Phase::PHASE23:
|
2019-12-13 18:50:32 +00:00
|
|
|
$req = $DB->query("SELECT DISTINCT `teams`.`id`, `teams`.`problem`, `teams`.`trigram` FROM `teams`"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " WHERE `id` NOT IN (SELECT `q1`.`from` FROM `questions` AS `q1`"
|
2019-10-22 12:55:33 +00:00
|
|
|
. " JOIN `questions` AS `q2` ON `q2`.`from` = `q1`.`from` AND `q2`.`number` = 2"
|
|
|
|
. " JOIN `questions` AS `q3` ON `q3`.`from` = `q1`.`from` AND `q3`.`number` = 3"
|
|
|
|
. " JOIN `questions` AS `q4` ON `q4`.`from` = `q1`.`from` AND `q4`.`number` = 4"
|
|
|
|
. " JOIN `questions` AS `q5` ON `q5`.`from` = `q1`.`from` AND `q5`.`number` = 5"
|
|
|
|
. " JOIN `questions` AS `q6` ON `q6`.`from` = `q1`.`from` AND `q6`.`number` = 6"
|
|
|
|
. " WHERE `q1`.`number` = 1"
|
2019-10-16 09:01:16 +00:00
|
|
|
. " AND (`q1`.`question` != '" . Question::DEFAULT_QUESTIONS[0] . "'"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " OR `q2`.`question` != '" . Question::DEFAULT_QUESTIONS[1] . "'"
|
|
|
|
. " OR `q3`.`question` != '" . Question::DEFAULT_QUESTIONS[2] . "'"
|
|
|
|
. " OR `q4`.`question` IS NOT NULL"
|
|
|
|
. " OR `q5`.`question` IS NOT NULL"
|
2019-10-16 09:01:16 +00:00
|
|
|
. " OR `q6`.`question` IS NOT NULL))"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " AND `validation_status` = '" . ValidationStatus::getName(ValidationStatus::VALIDATED) . "'"
|
2019-12-13 18:50:32 +00:00
|
|
|
. " AND `year` = $YEAR ORDER BY `problem`, `trigram`;");
|
2019-09-30 22:15:04 +00:00
|
|
|
break;
|
|
|
|
case Phase::PHASE3:
|
2020-01-01 20:11:28 +00:00
|
|
|
case Phase::PHASE34:
|
2019-12-13 18:50:32 +00:00
|
|
|
$req = $DB->query("SELECT DISTINCT `teams`.`id`, `teams`.`problem`, `teams`.`trigram` FROM `teams`"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " WHERE `id` NOT IN (SELECT `q1`.`to` FROM `questions` AS `q1`"
|
2019-10-22 12:55:33 +00:00
|
|
|
. " JOIN `questions` AS `q2` ON `q2`.`to` = `q1`.`to` AND `q2`.`number` = 2"
|
|
|
|
. " JOIN `questions` AS `q3` ON `q3`.`to` = `q1`.`to` AND `q3`.`number` = 3"
|
|
|
|
. " JOIN `questions` AS `q4` ON `q4`.`to` = `q1`.`to` AND `q4`.`number` = 4"
|
|
|
|
. " JOIN `questions` AS `q5` ON `q5`.`to` = `q1`.`to` AND `q5`.`number` = 5"
|
|
|
|
. " JOIN `questions` AS `q6` ON `q6`.`to` = `q1`.`to` AND `q6`.`number` = 6"
|
2020-01-23 18:40:48 +00:00
|
|
|
. " WHERE `q1`.`number` = 1"
|
2019-10-16 09:01:16 +00:00
|
|
|
. " AND (`q1`.`answer` IS NOT NULL"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " OR `q2`.`answer` IS NOT NULL"
|
|
|
|
. " OR `q3`.`answer` IS NOT NULL"
|
|
|
|
. " OR `q4`.`answer` IS NOT NULL"
|
|
|
|
. " OR `q5`.`answer` IS NOT NULL"
|
2019-10-16 09:01:16 +00:00
|
|
|
. " OR `q6`.`answer` IS NOT NULL))"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " AND `validation_status` = '" . ValidationStatus::getName(ValidationStatus::VALIDATED) . "'"
|
2019-12-13 18:50:32 +00:00
|
|
|
. " AND `year` = $YEAR ORDER BY `problem`, `trigram`;");
|
2019-09-30 22:15:04 +00:00
|
|
|
break;
|
|
|
|
case Phase::PHASE4:
|
2020-01-01 20:11:28 +00:00
|
|
|
case Phase::END:
|
2019-12-13 18:50:32 +00:00
|
|
|
$req = $DB->query("SELECT DISTINCT `teams`.`id`, `teams`.`problem`, `teams`.`trigram` FROM `teams` WHERE `validation_status` = '" . ValidationStatus::getName(ValidationStatus::VALIDATED) . "'"
|
2019-09-30 22:15:04 +00:00
|
|
|
. " AND (`id` NOT IN (SELECT DISTINCT `team` FROM `videos` WHERE `reason` = 'ANSWER1' AND `validation` = " . Video::ACCEPTED . ")"
|
|
|
|
. " OR `id` NOT IN (SELECT DISTINCT `team` FROM `videos` WHERE `reason` = 'ANSWER2' AND `validation` = " . Video::ACCEPTED . "))"
|
2019-12-13 18:50:32 +00:00
|
|
|
. " AND `year` = $YEAR ORDER BY `problem`, `trigram`;");
|
2019-09-30 22:15:04 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (isset($req)) {
|
2019-12-13 18:50:32 +00:00
|
|
|
$waiting_emails = [];
|
|
|
|
while (($data = $req->fetch()) !== false) {
|
|
|
|
$team = Team::fromId($data["id"]);
|
2020-01-01 20:11:28 +00:00
|
|
|
if (Phase::getCurrentPhase() >= Phase::PHASE12 && $team->getSolution() == null)
|
|
|
|
continue;
|
2019-12-13 18:50:32 +00:00
|
|
|
$waiting_teams[] = $team;
|
|
|
|
$waiting_emails = array_merge($waiting_emails, $team->getAllEmails());
|
|
|
|
}
|
2019-09-30 22:15:04 +00:00
|
|
|
}
|
2019-09-18 22:31:53 +00:00
|
|
|
|
2020-01-01 20:27:28 +00:00
|
|
|
$all_emails = [];
|
|
|
|
foreach (Team::getAllTeams() as $team) {
|
|
|
|
if (Phase::getCurrentPhase() >= Phase::PHASE12 && $team->getSolution() == null)
|
|
|
|
continue;
|
|
|
|
$all_emails = array_merge($all_emails, $team->getAllEmails());
|
|
|
|
}
|
|
|
|
|
2019-10-06 22:12:23 +00:00
|
|
|
require_once "server_files/views/suivi_correspondances.php";
|