diff --git a/dispatcher.php b/dispatcher.php index 38cafc9..4cc396f 100644 --- a/dispatcher.php +++ b/dispatcher.php @@ -33,6 +33,7 @@ $ROUTES["^ajouter_equipe$"] = ["server_files/controllers/ajouter_equipe.php"]; $ROUTES["^ajouter_admin$"] = ["server_files/controllers/ajouter_admin.php"]; $ROUTES["^calendrier/(modifier)$"] = ["server_files/controllers/calendrier.php", "edit"]; $ROUTES["^calendrier/?$"] = ["server_files/controllers/calendrier.php"]; +$ROUTES["^commenter-echange-4$"] = ["server_files/controllers/commenter_echange.php"]; $ROUTES["^confirmer-mail/([a-z0-9]*)/?$"] = ["server_files/controllers/confirmer_mail.php", "token"]; $ROUTES["^connexion/(confirmation-mail)/?$"] = ["server_files/controllers/connexion.php", "confirmation-mail"]; $ROUTES["^connexion/(mdp-oublie)/?$"] = ["server_files/controllers/connexion.php", "mdp_oublie"]; diff --git a/server_files/classes/Phase.php b/server_files/classes/Phase.php index eb81e41..da18e96 100644 --- a/server_files/classes/Phase.php +++ b/server_files/classes/Phase.php @@ -4,11 +4,13 @@ class Phase { const INSCRIPTION = 0; const PHASE1 = 1; - const PHASE2 = 2; - const PHASE3 = 3; - const PHASE4 = 4; - const END = 5; - const BETWEEN_PHASES = 6; + const PHASE12 = 2; + const PHASE2 = 3; + const PHASE23 = 4; + const PHASE3 = 5; + const PHASE34 = 6; + const PHASE4 = 7; + const END = 8; public static function getCurrentPhase() { @@ -23,19 +25,19 @@ class Phase return self::PHASE1; if ($date < $CONFIG->getStartPhase2Date()) - return self::BETWEEN_PHASES; + return self::PHASE12; if ($date < $CONFIG->getEndPhase2Date()) return self::PHASE2; if ($date < $CONFIG->getStartPhase3Date()) - return self::BETWEEN_PHASES; + return self::PHASE23; if ($date < $CONFIG->getEndPhase3Date()) return self::PHASE3; if ($date < $CONFIG->getStartPhase4Date()) - return self::BETWEEN_PHASES; + return self::PHASE34; if ($date < $CONFIG->getEndPhase4Date()) return self::PHASE4; @@ -57,10 +59,10 @@ class Phase return "Phase 3 (réponses)"; case self::PHASE4: return "Phase 4 (vidéo de réponse)"; - case self::BETWEEN_PHASES: - return "Entre deux phases"; - default: + case self::END: return "Le tournoi est terminé"; + default: + return "Entre deux phases"; } } } \ No newline at end of file diff --git a/server_files/classes/Question.php b/server_files/classes/Question.php index cac707c..40279ad 100644 --- a/server_files/classes/Question.php +++ b/server_files/classes/Question.php @@ -61,7 +61,7 @@ class Question ensure($from->getProblem() == $to->getProblem(), "Les deux équipes doivent travailler sur le même problème."); - $req = $DB->prepare("SELECT * FROM `questions` WHERE `from` = ? AND `to` = ?;"); + $req = $DB->prepare("SELECT * FROM `questions` WHERE `from` = ? AND `to` = ? ORDER BY `from`;"); $req->execute([$from->getId(), $to->getId()]); $questions = []; diff --git a/server_files/classes/Reason.php b/server_files/classes/Reason.php index d14ae09..dece59f 100644 --- a/server_files/classes/Reason.php +++ b/server_files/classes/Reason.php @@ -4,11 +4,13 @@ class Reason { const SOLUTION = 0; - const ANSWER = 1; + const ANSWER1 = 1; + const ANSWER2 = 2; public static function getTranslatedName($class) { switch ($class) { - case self::ANSWER: + case self::ANSWER1: + case self::ANSWER2: return "Réponse"; default: return "Solution"; @@ -17,8 +19,10 @@ class Reason public static function getName($class) { switch ($class) { - case self::ANSWER: - return "ANSWER"; + case self::ANSWER1: + return "ANSWER1"; + case self::ANSWER2: + return "ANSWER2"; default: return "SOLUTION"; } @@ -26,8 +30,10 @@ class Reason public static function fromName($name) { switch ($name) { - case "ANSWER": - return self::ANSWER; + case "ANSWER1": + return self::ANSWER1; + case "ANSWER2": + return self::ANSWER2; default: return self::SOLUTION; } diff --git a/server_files/controllers/commenter_echange.php b/server_files/controllers/commenter_echange.php new file mode 100644 index 0000000..66d1301 --- /dev/null +++ b/server_files/controllers/commenter_echange.php @@ -0,0 +1,67 @@ +makeVerifications(); + $new_video->uploadVideo(); + } catch (AssertionError $e) { + $has_error = true; + $error_message = $e->getMessage(); + } +} + +class NewAnswer +{ + public $link; + public $team; + private $valid_link; + private $no_change; + + public function __construct($data) + { + foreach ($data as $key => $value) + $this->$key = $value; + } + + public function makeVerifications() + { + ensure(preg_match("#(https?\:\/\/|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?#", $this->link), "Ce n'est pas une URL valide."); + $this->link = preg_replace('/^(?!https?:\/\/)/', 'https://', $this->link); + ensure(preg_match("#[1|2]#", $this->team), "L'équipe n'a pas été trouvée."); + ensure($this->valid_link != null, "Vous devez confirmer que le lien est valide."); + ensure($this->no_change != null, "Vous devez vous engager à ne pas changer le contenu du lien et de la vidéo."); + } + + public function uploadVideo() + { + global $DB, $YEAR, $team; + + $req = $DB->prepare("INSERT INTO `videos`(`team`, `problem`, `link`, `reason`, `year`) VALUES (?, ?, ?, ?, ?)"); + $req->execute([$team->getId(), $team->getProblem(), $this->link, "ANSWER" . $this->team, $YEAR]); + + Mailer::sendNewAnswer($this, $team); + } +} + +$team1 = Team::fromId($team->getVideoTeamIds()[0]); +$sol1 = Video::getVideo(Reason::SOLUTION, $team1); +$answer1 = Video::getVideo(Reason::ANSWER1, $team); +$answer1_validated = Video::getVideo(Reason::ANSWER1, $team, Video::ACCEPTED); +$team2 = Team::fromId($team->getVideoTeamIds()[1]); +$sol2 = Video::getVideo(Reason::SOLUTION, $team2); +$answer2 = Video::getVideo(Reason::ANSWER2, $team); +$answer2_validated = Video::getVideo(Reason::ANSWER2, $team, Video::ACCEPTED); + +$teams = [$team1, $team2]; +$sols = [$sol1, $sol2]; +$answers = [$answer1, $answer2]; +$answers_validated = [$answer1_validated, $answer2_validated]; + +require_once "server_files/views/commenter_echange.php"; \ No newline at end of file diff --git a/server_files/controllers/envoyer_video.php b/server_files/controllers/envoyer_video.php index 4025ae1..72a119f 100644 --- a/server_files/controllers/envoyer_video.php +++ b/server_files/controllers/envoyer_video.php @@ -45,7 +45,7 @@ class NewVideo global $DB, $YEAR, $team; $req = $DB->prepare("INSERT INTO `videos`(`team`, `problem`, `link`, `reason`, `year`) VALUES (?, ?, ?, ?, ?)"); - $req->execute([$team->getId(), $team->getProblem(), $this->link, "SOLUTION", $YEAR]); + $req->execute([$team->getId(), $team->getProblem(), $this->link, Reason::getName(Reason::SOLUTION), $YEAR]); Mailer::sendNewVideo($this, $team); } diff --git a/server_files/services/mail.php b/server_files/services/mail.php index 252ecd6..b244f68 100644 --- a/server_files/services/mail.php +++ b/server_files/services/mail.php @@ -162,13 +162,31 @@ class Mailer self::broadcastToAdmins("Nouvelle vidéo Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); } + public static function sendNewAnswer(NewAnswer $video, Team $team) + { + global $YEAR; + + $content = self::getTemplate("new_answer"); + $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); + $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); + $dest = Team::fromId($team->getVideoTeamIds()[$video->team - 1]); + $content = preg_replace("#{DEST_TEAM_NAME}#", $dest->getName(), $content); + $content = preg_replace("#{DEST_TRIGRAM}#", $dest->getTrigram(), $content); + $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); + $content = preg_replace("#{VIDEO_LINK}#", $video->link, $content); + self::broadcastToAdmins("Nouvelle vidéo de réponse Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + } + public static function validateVideo(Video $video) { global $YEAR; $team = Team::fromId($video->getTeam()); - $content = self::getTemplate($video->getValidation() == Video::ACCEPTED ? "video_accepted" : "video_rejected"); + $template = "video_"; + $template .= $video->getValidation() == Video::ACCEPTED ? "accepted" : "rejected"; + $template .= $video->getReason() == Reason::SOLUTION ? "_solution" : "_answer"; + $content = self::getTemplate($template); $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); $content = preg_replace("#{VIDEO_LINK}#", $video->getLink(), $content); diff --git a/server_files/services/mail_templates/new_answer.html b/server_files/services/mail_templates/new_answer.html new file mode 100644 index 0000000..8832d29 --- /dev/null +++ b/server_files/services/mail_templates/new_answer.html @@ -0,0 +1,19 @@ + + +
+ ++ Question = $question->getNumber() ?> : + | ++ = $question->getQuestion() ?> + | +
+ Pièce jointe attachée : + | ++ Télécharger + | +
+ Réponse : + | ++ = $question->getAnswer() ?> + | +
+ Pièce jointe attachée : + | ++ Télécharger + | +