diff --git a/assets/style.css b/assets/style.css index fc68852..5c8d3ff 100644 --- a/assets/style.css +++ b/assets/style.css @@ -11,14 +11,19 @@ html, body { min-height: 78%; } -footer { - text-align: center; -} - .inner { margin: 20px; } +.alert { + text-align: justify; +} + + +footer .alert { + text-align: center; +} + #navbar-logo { height: var(--navbar-height); display: block; diff --git a/server_files/classes/Question.php b/server_files/classes/Question.php index f49ab8b..f31fe3c 100644 --- a/server_files/classes/Question.php +++ b/server_files/classes/Question.php @@ -68,7 +68,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` = ? ORDER BY `from`;"); + $req = $DB->prepare("SELECT * FROM `questions` WHERE `from` = ? AND `to` = ? ORDER BY `from`, `number`;"); $req->execute([$from->getId(), $to->getId()]); $questions = []; @@ -80,9 +80,11 @@ class Question } if (sizeof($questions) == 0) { - for ($i = 0; $i < 6; ++$i) { + $req = $DB->prepare("INSERT INTO `questions`(`from`, `to`, `problem`, `number`, `question`) VALUES (?, ?, ?, ?, ?);"); + $req->execute([$from->getId(), $to->getId(), $from->getProblem(), 0, ""]); + for ($i = 1; $i <= 6; ++$i) { $req = $DB->prepare("INSERT INTO `questions`(`from`, `to`, `problem`, `number`, `question`) VALUES (?, ?, ?, ?, ?);"); - $req->execute([$from->getId(), $to->getId(), $from->getProblem(), $i, self::DEFAULT_QUESTIONS[$i]]); + $req->execute([$from->getId(), $to->getId(), $from->getProblem(), $i, self::DEFAULT_QUESTIONS[$i - 1]]); } return self::getQuestions($from, $to); } diff --git a/server_files/classes/SchoolClass.php b/server_files/classes/SchoolClass.php index 7159047..6a6efd1 100644 --- a/server_files/classes/SchoolClass.php +++ b/server_files/classes/SchoolClass.php @@ -5,30 +5,35 @@ class SchoolClass const SECONDE = 0; const PREMIERE = 1; const TERMINALE = 2; + const ADULT = 3; public static function getTranslatedName($class) { switch ($class) { - case null: - return "Adulte"; case self::SECONDE: return "Seconde ou inférieur"; case self::PREMIERE: return "Première"; case self::TERMINALE: return "Terminale"; + case self::ADULT: + return "Adulte"; + default: + return null; } } public static function getName($class) { switch ($class) { - case null: - return null; case self::SECONDE: return "SECONDE"; case self::PREMIERE: return "PREMIERE"; case self::TERMINALE: return "TERMINALE"; + case self::ADULT: + return "ADULT"; + default: + return null; } } @@ -40,6 +45,8 @@ class SchoolClass return self::PREMIERE; case "TERMINALE": return self::TERMINALE; + case "ADULT": + return self::ADULT; default: return null; } diff --git a/server_files/config.php b/server_files/config.php index 9cbd5c6..6c1ae13 100644 --- a/server_files/config.php +++ b/server_files/config.php @@ -43,27 +43,32 @@ class Config public function initDB() { - global $DB, $LOCAL_PATH; + global $DB, $LOCAL_PATH, $YEAR; $index_template_page = htmlspecialchars(file_get_contents($LOCAL_PATH . "/server_files/views/index.html")); $DB->exec("SET GLOBAL time_zone = 'Europe/Paris';"); - $DB->prepare("INSERT IGNORE INTO `config` VALUES ('inscription_date', CURRENT_TIMESTAMP + INTERVAL 2 DAY), - ('start_phase1_date', CURRENT_TIMESTAMP + INTERVAL 1 DAY), ('end_phase1_date', CURRENT_TIMESTAMP + INTERVAL 3 DAY), - ('start_phase2_date', CURRENT_TIMESTAMP + INTERVAL 4 DAY), ('end_phase2_date', CURRENT_TIMESTAMP + INTERVAL 5 DAY), - ('start_phase3_date', CURRENT_TIMESTAMP + INTERVAL 6 DAY), ('end_phase3_date', CURRENT_TIMESTAMP + INTERVAL 7 DAY), - ('start_phase4_date', CURRENT_TIMESTAMP + INTERVAL 8 DAY), ('end_phase4_date', CURRENT_TIMESTAMP + INTERVAL 9 DAY), - ('index_page', ?);")->execute([$index_template_page]); + $DB->prepare("INSERT IGNORE INTO `config`(`key`, `value`) + VALUES ('inscription_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 2 DAY), + ('start_phase1_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 1 DAY), + ('end_phase1_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 3 DAY), + ('start_phase2_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 4 DAY), + ('end_phase2_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 5 DAY), + ('start_phase3_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 6 DAY), + ('end_phase3_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 7 DAY), + ('start_phase4_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 8 DAY), + ('end_phase4_date_$YEAR', CURRENT_TIMESTAMP + INTERVAL 9 DAY), + ('index_page_$YEAR', ?);")->execute([$index_template_page]); } public function loadConfigValues() { - global $DB; + global $DB, $YEAR; - $req = $DB->query("SELECT * FROM `config`;"); + $req = $DB->query("SELECT * FROM `config` WHERE `key` REGEXP '$YEAR';"); while (($data = $req->fetch()) !== false) { - $key = $data["key"]; + $key = substr($data["key"], 0, -5); $this->$key = $data["value"]; } } @@ -75,8 +80,8 @@ class Config public function setInscriptionDate($inscription_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$inscription_date' WHERE `key` = 'inscription_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$inscription_date' WHERE `key` = 'inscription_date_$YEAR'"); $this->inscription_date = $inscription_date; } @@ -88,8 +93,8 @@ class Config public function setStartPhase1Date($start_phase1_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$start_phase1_date' WHERE `key` = 'start_phase1_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$start_phase1_date' WHERE `key` = 'start_phase1_date_$YEAR'"); $this->start_phase1_date = $start_phase1_date; } @@ -101,8 +106,8 @@ class Config public function setEndPhase1Date($end_phase1_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$end_phase1_date' WHERE `key` = 'end_phase1_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$end_phase1_date' WHERE `key` = 'end_phase1_date_$YEAR'"); $this->end_phase1_date = $end_phase1_date; } @@ -114,8 +119,8 @@ class Config public function setStartPhase2Date($start_phase2_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$start_phase2_date' WHERE `key` = 'start_phase2_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$start_phase2_date' WHERE `key` = 'start_phase2_date_$YEAR'"); $this->start_phase2_date = $start_phase2_date; } @@ -127,8 +132,8 @@ class Config public function setEndPhase2Date($end_phase2_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$end_phase2_date' WHERE `key` = 'end_phase2_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$end_phase2_date' WHERE `key` = 'end_phase2_date_$YEAR'"); $this->end_phase2_date = $end_phase2_date; } @@ -140,8 +145,8 @@ class Config public function setStartPhase3Date($start_phase3_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$start_phase3_date' WHERE `key` = 'start_phase3_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$start_phase3_date' WHERE `key` = 'start_phase3_date_$YEAR'"); $this->start_phase3_date = $start_phase3_date; } @@ -153,8 +158,8 @@ class Config public function setEndPhase3Date($end_phase3_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$end_phase3_date' WHERE `key` = 'end_phase3_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$end_phase3_date' WHERE `key` = 'end_phase3_date_$YEAR'"); $this->end_phase3_date = $end_phase3_date; } @@ -166,8 +171,8 @@ class Config public function setStartPhase4Date($start_phase4_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$start_phase4_date' WHERE `key` = 'start_phase4_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$start_phase4_date' WHERE `key` = 'start_phase4_date_$YEAR'"); $this->start_phase4_date = $start_phase4_date; } @@ -179,8 +184,8 @@ class Config public function setEndPhase4Date($end_phase4_date) { - global $DB; - $DB->exec("UPDATE `config` SET `value` = '$end_phase4_date' WHERE `key` = 'end_phase4_date';"); + global $DB, $YEAR; + $DB->exec("UPDATE `config` SET `value` = '$end_phase4_date' WHERE `key` = 'end_phase4_date_$YEAR'"); $this->end_phase4_date = $end_phase4_date; } @@ -192,8 +197,8 @@ class Config public function setIndexPage($index_page) { - global $DB; - $DB->prepare("UPDATE `config` SET `value` = ? WHERE `key` = 'index_page';")->execute([$index_page]); + global $DB, $YEAR; + $DB->prepare("UPDATE `config` SET `value` = ? WHERE `key` = 'index_page_$YEAR'")->execute([$index_page]); $this->index_page = $index_page; } diff --git a/server_files/controllers/ajouter_admin.php b/server_files/controllers/ajouter_admin.php index 395349c..ed7b589 100644 --- a/server_files/controllers/ajouter_admin.php +++ b/server_files/controllers/ajouter_admin.php @@ -44,9 +44,10 @@ class NewAdmin { $this->password = genRandomPhrase(16, true); - $req = $DB->prepare("INSERT INTO `users`(`email`, `pwd_hash`, `surname`, `first_name`, `role`, `year`) - VALUES (?, ?, ?, ?, ?, ?);"); - $req->execute([$this->email, password_hash($this->password, PASSWORD_BCRYPT), $this->surname, $this->first_name, "ADMIN", $YEAR]); + $req = $DB->prepare("INSERT INTO `users`(`email`, `pwd_hash`, `surname`, `first_name`, `class`, `role`, `year`) + VALUES (?, ?, ?, ?, ?, ?, ?);"); + $req->execute([$this->email, password_hash($this->password, PASSWORD_BCRYPT), $this->surname, + $this->first_name, "ADULT", "ADMIN", $YEAR]); Mailer::sendAddAdminMail($this); } diff --git a/server_files/controllers/poser_questions.php b/server_files/controllers/poser_questions.php index 170bbcf..de5b3f4 100644 --- a/server_files/controllers/poser_questions.php +++ b/server_files/controllers/poser_questions.php @@ -30,7 +30,8 @@ class GiveQuestions * @var Team $to_team */ private $to_team; - private $question_1; + private $question_0; + private $question_1; private $question_2; private $question_3; private $question_4; @@ -50,7 +51,7 @@ class GiveQuestions $this->files = []; $this->has_files = false; - for ($i = 1; $i <= 6; ++$i) { + for ($i = 0; $i <= 6; ++$i) { if (strlen($files["file_$i"]["name"]) > 0) { $this->files[] = $files["file_$i"]; $this->has_files = true; @@ -59,7 +60,7 @@ class GiveQuestions $this->files[] = null; } - $this->questions = [$this->question_1, $this->question_2, $this->question_3, $this->question_4, $this->question_5, $this->question_6]; + $this->questions = [$this->question_0, $this->question_1, $this->question_2, $this->question_3, $this->question_4, $this->question_5, $this->question_6]; } public function makeVerifications() @@ -73,12 +74,12 @@ class GiveQuestions "Vous devez poser au moins 3 questions."); ensure(!$this->has_files || $this->no_drawing, "Vous devez confirmer ne pas avoir inclus de texte dans vos pièces jointes."); - for ($i = 3; $i < 6; ++$i) { + for ($i = 4; $i <= 6; ++$i) { if ($this->questions[$i] == "") $this->questions[$i] = null; } - for ($i = 0; $i < 6; ++$i) { + 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. Veuillez vérifier vos pièces jointes. Elles ne doivent pas peser plus de 2 Mo chacune."); } @@ -92,7 +93,7 @@ class GiveQuestions /** @var Question[] $questions */ $questions = Question::getQuestions($team, $this->to_team); - for ($i = 0; $i < 6; ++$i) { + for ($i = 0; $i <= 6; ++$i) { $question = $questions[$i]; if ($question->getQuestion() != $this->questions[$i] && $question->getAttachedFile() != null) { unlink("$LOCAL_PATH/files/" . $question->getAttachedFile()); diff --git a/server_files/controllers/probleme.php b/server_files/controllers/probleme.php index c7370d3..42085a2 100644 --- a/server_files/controllers/probleme.php +++ b/server_files/controllers/probleme.php @@ -5,7 +5,7 @@ $problem = htmlspecialchars($_GET["probleme"]); if (!preg_match("#[0-4]#", $problem)) require_once "server_files/404.php"; -if (isset($_GET["modifier"]) && $_SESSION["role"] != Role::ADMIN) +if (!isset($_SESSION["user_id"]) || $_SESSION["role"] != Role::ADMIN) require_once "server_files/403.php"; $has_error = false; diff --git a/server_files/controllers/repondre_questions.php b/server_files/controllers/repondre_questions.php index 69988ba..318a48d 100644 --- a/server_files/controllers/repondre_questions.php +++ b/server_files/controllers/repondre_questions.php @@ -26,6 +26,7 @@ class AnswerQuestions * @var Team $to_team */ private $from_team; + private $answer_0; private $answer_1; private $answer_2; private $answer_3; @@ -46,7 +47,7 @@ class AnswerQuestions $this->files = []; $this->has_files = false; - for ($i = 1; $i <= 6; ++$i) { + for ($i = 0; $i <= 6; ++$i) { if (strlen($files["file_$i"]["name"]) > 0) { $this->files[] = $files["file_$i"]; $this->has_files = true; @@ -55,7 +56,7 @@ class AnswerQuestions $this->files[] = null; } - $this->answers = [$this->answer_1, $this->answer_2, $this->answer_3, $this->answer_4, $this->answer_5, $this->answer_6]; + $this->answers = [$this->answer_0, $this->answer_1, $this->answer_2, $this->answer_3, $this->answer_4, $this->answer_5, $this->answer_6]; } public function makeVerifications() @@ -67,12 +68,12 @@ class AnswerQuestions ensure($team->getProblem() == $this->from_team->getProblem(), "Les équipes ne travaillent pas sur le même problème."); ensure(!$this->has_files || $this->no_drawing, "Vous devez confirmer ne pas avoir inclus de texte dans vos pièces jointes."); - for ($i = 0; $i < 6; ++$i) { + for ($i = 1; $i <= 6; ++$i) { if ($this->answers[$i] == "") $this->answers[$i] = null; } - for ($i = 0; $i < 6; ++$i) { + 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. Veuillez vérifier vos pièces jointes. Elles ne doivent pas peser plus de 2 Mo chacune."); } @@ -86,7 +87,7 @@ class AnswerQuestions /** @var Question[] $questions */ $questions = Question::getQuestions($this->from_team, $team); - for ($i = 0; $i < 6; ++$i) { + for ($i = 0; $i <= 6; ++$i) { $question = $questions[$i]; if ($question->getAnswer() != $this->answers[$i] && $question->getAttachedFileAnswer() != null) { unlink("$LOCAL_PATH/files/" . $question->getAttachedFileAnswer()); diff --git a/server_files/controllers/suivi_correspondances.php b/server_files/controllers/suivi_correspondances.php index a120b5d..e76005d 100644 --- a/server_files/controllers/suivi_correspondances.php +++ b/server_files/controllers/suivi_correspondances.php @@ -64,12 +64,12 @@ switch (Phase::getCurrentPhase()) { case Phase::PHASE2: $req = $DB->query("SELECT DISTINCT `teams`.`id` FROM `teams`" . " WHERE `id` NOT IN (SELECT `q1`.`from` FROM `questions` AS `q1`" - . " JOIN `questions` AS `q2` ON `q2`.`from` = `q1`.`from` AND `q2`.`number` = 1" - . " JOIN `questions` AS `q3` ON `q3`.`from` = `q1`.`from` AND `q3`.`number` = 2" - . " JOIN `questions` AS `q4` ON `q4`.`from` = `q1`.`from` AND `q4`.`number` = 3" - . " JOIN `questions` AS `q5` ON `q5`.`from` = `q1`.`from` AND `q5`.`number` = 4" - . " JOIN `questions` AS `q6` ON `q6`.`from` = `q1`.`from` AND `q6`.`number` = 5" - . " WHERE `q1`.`number` = 0" + . " 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" . " AND (`q1`.`question` != '" . Question::DEFAULT_QUESTIONS[0] . "'" . " OR `q2`.`question` != '" . Question::DEFAULT_QUESTIONS[1] . "'" . " OR `q3`.`question` != '" . Question::DEFAULT_QUESTIONS[2] . "'" @@ -82,12 +82,12 @@ switch (Phase::getCurrentPhase()) { case Phase::PHASE3: $req = $DB->query("SELECT DISTINCT `teams`.`id` FROM `teams`" . " WHERE `id` NOT IN (SELECT `q1`.`to` FROM `questions` AS `q1`" - . " JOIN `questions` AS `q2` ON `q2`.`to` = `q1`.`to` AND `q2`.`number` = 1" - . " JOIN `questions` AS `q3` ON `q3`.`to` = `q1`.`to` AND `q3`.`number` = 2" - . " JOIN `questions` AS `q4` ON `q4`.`to` = `q1`.`to` AND `q4`.`number` = 3" - . " JOIN `questions` AS `q5` ON `q5`.`to` = `q1`.`to` AND `q5`.`number` = 4" - . " JOIN `questions` AS `q6` ON `q6`.`to` = `q1`.`to` AND `q6`.`number` = 5" - . " WHERE `q1`.`question` = 0" + . " 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" + . " WHERE `q1`.`question` = 1" . " AND (`q1`.`answer` IS NOT NULL" . " OR `q2`.`answer` IS NOT NULL" . " OR `q3`.`answer` IS NOT NULL" diff --git a/server_files/model.php b/server_files/model.php index 07aeeaa..1f73cfd 100644 --- a/server_files/model.php +++ b/server_files/model.php @@ -119,6 +119,11 @@ function canValidate(Team $team) function printDocuments($documents) { + if (sizeof($documents) == 0) { + echo "
\nPas de document envoyé pour le moment.\n
\n"; + return; + } + echo "
\n"; foreach ($documents as $document) { $file_id = $document->getFileId(); diff --git a/server_files/services/mail.php b/server_files/services/mail.php index 07d6979..f3963eb 100644 --- a/server_files/services/mail.php +++ b/server_files/services/mail.php @@ -7,7 +7,7 @@ class Mailer global $MAIL_DOMAIN, $URL_BASE, $YEAR; $content = preg_replace("#{URL_BASE}#", $URL_BASE, $content); - $content = preg_replace("#{YEAR}#", $YEAR, $content); + $content = preg_replace("#{YEAR}#", $YEAR . "- " . ($YEAR + 1), $content); $headers = "From: \"Contact Corres2Math\" <" . $from . "@" . $MAIL_DOMAIN . ">\r\n"; $headers .= "Reply-To: \"Contact corres2Math\" \r\n"; @@ -68,7 +68,7 @@ class Mailer $content = preg_replace("#{SURNAME}#", $new_user->surname, $content); $content = preg_replace("#{TOKEN}#", $new_user->confirm_email_token, $content); - self::sendMail($new_user->email, "Inscription aux Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::sendMail($new_user->email, "Inscription aux Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendConfirmEmail(User $user) @@ -80,36 +80,42 @@ class Mailer $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); $content = preg_replace("#{TOKEN}#", $user->getConfirmEmailToken(), $content); - self::sendMail($user->getEmail(), "Confirmation d'adresse e-mail – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::sendMail($user->getEmail(), "Confirmation d'adresse e-mail – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendChangeEmailAddressMail(User $user) { + global $YEAR; + $content = self::getTemplate("change_email_address"); $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); $content = preg_replace("#{TOKEN}#", $user->getConfirmEmailToken(), $content); - self::sendMail($user->getEmail(), "Changement d'adresse e-mail – Correspondances des Jeunes Mathématicien·ne·s", $content); + self::sendMail($user->getEmail(), "Changement d'adresse e-mail – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendForgottenPasswordProcedureMail(User $user) { + global $YEAR; + $content = self::getTemplate("forgotten_password"); $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); $content = preg_replace("#{TOKEN}#", $user->getForgottenPasswordToken(), $content); - self::sendMail($user->getEmail(), "Mot de passe oublié – Correspondances des Jeunes Mathématicien·ne·s", $content); + self::sendMail($user->getEmail(), "Mot de passe oublié – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendChangePasswordMail(User $user) { + global $YEAR; + $content = self::getTemplate("change_password"); $content = preg_replace("#{FIRST_NAME}#", $user->getFirstName(), $content); $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); - self::sendMail($user->getEmail(), "Mot de passe changé – Correspondances des Jeunes Mathématicien·ne·s", $content); + self::sendMail($user->getEmail(), "Mot de passe changé – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendAddAdminMail(NewAdmin $new_admin) @@ -121,7 +127,7 @@ class Mailer $content = preg_replace("#{SURNAME}#", $new_admin->surname, $content); $content = preg_replace("#{PASSWORD}#", $new_admin->password, $content); - self::sendMail($new_admin->email, "Ajout d'un administrateur – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::sendMail($new_admin->email, "Ajout d'un administrateur – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendAddTeamMail(User $user, Team $team) @@ -133,10 +139,13 @@ class Mailer $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); - $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); - $content = preg_replace("#{ACCESS_CODE}#", $team->getAccessCode(), $content); + $content = preg_replace("#{ACCESS_CODE}#", $team->getAccessCode(), $content); + if ($team->getProblem() > 0) + $content = preg_replace("#{PROBLEM}#", "pour le problème" . $team->getProblem(), $content); + else + $content = preg_replace("#{PROBLEM}#", "", $content); - self::sendMail($user->getEmail(), "Ajout d'une équipe – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::sendMail($user->getEmail(), "Ajout d'une équipe – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendJoinTeamMail(User $user, Team $team) @@ -148,9 +157,12 @@ class Mailer $content = preg_replace("#{SURNAME}#", $user->getSurname(), $content); $content = preg_replace("#{TEAM_NAME}#", $team->getName(), $content); $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); - $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); + if ($team->getProblem() > 0) + $content = preg_replace("#{PROBLEM}#", "pour le problème" . $team->getProblem(), $content); + else + $content = preg_replace("#{PROBLEM}#", "", $content); - self::sendMail($user->getEmail(), "Équipe rejointe – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::sendMail($user->getEmail(), "Équipe rejointe – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendRequestValidationMail(Team $team) @@ -163,7 +175,7 @@ class Mailer $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); $content = preg_replace("#{ACCESS_CODE}#", $team->getAccessCode(), $content); - self::broadcastToAdmins("Ajout d'une équipe – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::broadcastToAdmins("Demande de validation – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendValidateTeam($team, $message) @@ -176,7 +188,7 @@ class Mailer $message = preg_replace("#\n#", "
\n", $message); $content = preg_replace("#{MESSAGE}#", $message, $content); - self::broadcastToTeam($team, "Équipe validée – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::broadcastToTeam($team, "Équipe validée – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendUnvalidateTeam($team, $message) @@ -189,7 +201,7 @@ class Mailer $message = preg_replace("#\n#", "
\n", $message); $content = preg_replace("#{MESSAGE}#", $message, $content); - self::broadcastToTeam($team, "Équipe non validée – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::broadcastToTeam($team, "Équipe non validée – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendNewVideo(NewVideo $video, Team $team) @@ -201,7 +213,7 @@ class Mailer $content = preg_replace("#{TRIGRAM}#", $team->getTrigram(), $content); $content = preg_replace("#{PROBLEM}#", $team->getProblem(), $content); $content = preg_replace("#{VIDEO_LINK}#", $video->link, $content); - self::broadcastToAdmins("Nouvelle vidéo – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::broadcastToAdmins("Nouvelle vidéo – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function sendNewAnswer(NewAnswer $video, Team $team) @@ -217,7 +229,7 @@ class Mailer $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); + self::broadcastToAdmins("Nouvelle vidéo de réponse – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } public static function validateVideo(Video $video, $message) @@ -238,6 +250,7 @@ class Mailer $message = preg_replace("#\n#", "
\n", $message); $content = preg_replace("#{MESSAGE}#", $message, $content); - self::broadcastToTeam($team, ($video->getValidation() == Video::REJECTED ? "Vidéo refusée " : "Vidéo acceptée ") . $team->getTrigram() . " – Correspondances des Jeunes Mathématicien·ne·s $YEAR", $content); + self::broadcastToTeam($team, ($video->getValidation() == Video::REJECTED ? "Vidéo refusée " : "Vidéo acceptée ") + . $team->getTrigram() . " – Correspondances des Jeunes Mathématicien·ne·s $YEAR - " . ($YEAR + 1), $content); } } diff --git a/server_files/services/mail_templates/add_team.html b/server_files/services/mail_templates/add_team.html index 5bd8944..0b2b0a6 100644 --- a/server_files/services/mail_templates/add_team.html +++ b/server_files/services/mail_templates/add_team.html @@ -7,7 +7,8 @@ Bonjour {FIRST_NAME} {SURNAME},

-Vous venez de créer l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour les Correspondances des Jeunes Mathématicien·ne·s pour le problème {PROBLEM} et nous vous en remercions.
+Vous venez de créer l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour les Correspondances des Jeunes Mathématicien·ne·s +{PROBLEM} et nous vous en remercions.
Afin de permettre aux autres membres de votre équipe de vous rejoindre, veuillez leur transmettre le code d'accès : {ACCESS_CODE}

diff --git a/server_files/services/mail_templates/join_team.html b/server_files/services/mail_templates/join_team.html index 2d24d97..aa63d65 100644 --- a/server_files/services/mail_templates/join_team.html +++ b/server_files/services/mail_templates/join_team.html @@ -7,8 +7,8 @@ Bonjour {FIRST_NAME} {SURNAME},

-Vous venez de rejoindre l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour les Correspondances des Jeunes Mathématicien·ne·s pour le problème {PROBLEM} et nous vous en -remercions.
+Vous venez de rejoindre l'équipe « {TEAM_NAME} » ({TRIGRAM}) pour les Correspondances des Jeunes Mathématicien·ne·s +{PROBLEM} et nous vous en remercions.

Cordialement,

diff --git a/server_files/services/mail_templates/unvalidate_team.html b/server_files/services/mail_templates/unvalidate_team.html index 0d7f226..3c80990 100644 --- a/server_files/services/mail_templates/unvalidate_team.html +++ b/server_files/services/mail_templates/unvalidate_team.html @@ -11,7 +11,7 @@ Maleureusement, votre équipe « {TEAM_NAME} » ({TRIGRAM}) n'a pas été valid de droit à l'image sont correctes. {MESSAGE}

-
N'hésitez pas à nous contacter à l'adresse contact@correspondances-maths.fr +N'hésitez pas à nous contacter à l'adresse contact@correspondances-maths.fr pour plus d'informations.
Cordialement,
diff --git a/server_files/services/mail_templates/validate_team.html b/server_files/services/mail_templates/validate_team.html index 90ecd99..f34caab 100644 --- a/server_files/services/mail_templates/validate_team.html +++ b/server_files/services/mail_templates/validate_team.html @@ -9,7 +9,7 @@ Bonjour {FIRST_NAME} {SURNAME},

Félicitations ! Votre équipe « {TEAM_NAME} » ({TRIGRAM}) est désormais validée ! Vous êtes désormais apte à travailler sur votre problème. Lorsque les Correspondances auront débutées, vous pourrez soumettre votre vidéo sur la plateforme d'inscription. -{MESSAGE} +{MESSAGE}

Cordialement,

diff --git a/server_files/services/mail_templates/video_rejected_answer.html b/server_files/services/mail_templates/video_rejected_answer.html index 94876aa..fdf4700 100644 --- a/server_files/services/mail_templates/video_rejected_answer.html +++ b/server_files/services/mail_templates/video_rejected_answer.html @@ -7,10 +7,13 @@ Bonjour {FIRST_NAME} {SURNAME},

-Malheureusement, votre vidéo de réponse pour le problème {PROBLEM} n'a pas été validée. Pour rappel, vous aviez soumis ce lien : {VIDEO_LINK}.
+Malheureusement, votre vidéo de réponse pour le problème {PROBLEM} n'a pas été validée. Pour rappel, vous aviez soumis +ce lien : {VIDEO_LINK}.
Si vous aviez soumis une précédente vidéo qui a été validée, elle reste conservée. -Vous êtes désormais invités à retravailler vos réponses ou votre présentation orale afin que votre prestation soit validée par les organisateurs. -N'hésitez pas à nous contacter à contact@correspondances-maths.fr si vous souhaitez avoir plus d'informations ou contester ce refus. +Vous êtes désormais invités à retravailler vos réponses ou votre présentation orale afin que votre prestation soit +validée par les organisateurs. N'hésitez pas à nous contacter à +contact@correspondances-maths.fr si vous souhaitez avoir plus +d'informations ou contester ce refus.

{MESSAGE} Cordialement,
diff --git a/server_files/services/mail_templates/video_rejected_solution.html b/server_files/services/mail_templates/video_rejected_solution.html index bf0b59b..3fe16da 100644 --- a/server_files/services/mail_templates/video_rejected_solution.html +++ b/server_files/services/mail_templates/video_rejected_solution.html @@ -7,10 +7,13 @@ Bonjour {FIRST_NAME} {SURNAME},

-Malheureusement, votre vidéo pour le problème {PROBLEM} n'a pas été validée. Pour rappel, vous aviez soumis ce lien : {VIDEO_LINK}.
+Malheureusement, votre vidéo pour le problème {PROBLEM} n'a pas été validée. Pour rappel, vous aviez soumis ce lien : +{VIDEO_LINK}.
Si vous aviez soumis une précédente vidéo qui a été validée, elle reste conservée. -Vous êtes désormais invités à retravailler vos résultats ou votre présentation orale afin que votre prestation soit validée par les organisateurs. -N'hésitez pas à nous contacter à contact@correspondances-maths.fr si vous souhaitez avoir plus d'informations ou contester ce refus. +Vous êtes désormais invités à retravailler vos résultats ou votre présentation orale afin que votre prestation soit +validée par les organisateurs. N'hésitez pas à nous contacter à +contact@correspondances-maths.fr si vous souhaitez avoir plus +d'informations ou contester ce refus.

{MESSAGE} Cordialement,
diff --git a/server_files/views/ajouter_equipe.php b/server_files/views/ajouter_equipe.php index 5e72501..0e7aacf 100644 --- a/server_files/views/ajouter_equipe.php +++ b/server_files/views/ajouter_equipe.php @@ -8,7 +8,8 @@ require_once "header.php";
- Votre équipe a bien été créée ! Voici le code d'accès à transmettre aux autres membres de votre équipe : access_code ?> + Votre équipe a bien été créée ! Voici le code d'accès à transmettre aux autres membres de votre équipe : + access_code ?>
@@ -21,7 +22,7 @@ require_once "header.php";
- Chacune des informations pourra être modifiée avant que l'équipe soit validée. + Chacune des informations pourra être modifiée avant que l'équipe tant que l'équipe n'est pas validée.
@@ -45,7 +46,7 @@ require_once "header.php"; problem == $i ? "selected" : "") . ">$i"; + echo ""; ?>
diff --git a/server_files/views/commenter_echange.php b/server_files/views/commenter_echange.php index 65d87f3..4a77653 100644 --- a/server_files/views/commenter_echange.php +++ b/server_files/views/commenter_echange.php @@ -12,76 +12,88 @@ require_once "header.php";
+
+ Pour clore vos Correspondances, vous devez produire, pour chaque vidéo reçue d'une autre équipe, une vidéo de + synthèse d'au plus 4 minutes. + Cette vidéo doit mettre en perspective de la vidéo initiale en tenant compte de l'échange qui a eu lieu. + Vous devez mettre en valeur l’échange questions/réponses, et montrer l'évolution de la résolution au problème. +
+ +
+ Date limite de soumission : getEndPhase4Date(), true) ?> +
+ + /** @var Team $answer_team */ + $answer_team = $teams[$i]; + /** @var Video $sol */ + $sol = $sols[$i]; + /** @var Video $answer */ + $answer = $answers[$i]; + /** @var Video $answer_validated */ + $answer_validated = $answers_validated[$i]; + /** @var Question[] $questions */ + $questions = Question::getQuestions($team, $answer_team); + ?>

Vidéo de l'équipe getName() ?> (getTrigram() ?>) :

Lien de la vidéo de présentation de la solution au problème : getLink() ?>
- getLink()) ?> + getLink()) ?>
Questions échangées :
- getQuestion() === null) - continue; - ?> + 0 && $question->getQuestion() === null) + continue; + ?>
- Question getNumber() + 1 ?> : getQuestion() ?>
- getAttachedFile() !== null) { ?> + getNumber() . " :" ?> + getQuestion() ?>
+ getAttachedFile() !== null) { ?> Pièce jointe attachée : - Télécharger
- - Réponse : getAnswer() ?>
- getAttachedFile() !== null) { ?> + Télécharger
+ + Réponse : getAnswer() ?>
+ getAttachedFileAnswer() !== null) { ?> Pièce jointe attachée : - Télécharger
- + Télécharger
+
- +
Vidéo de réponse :
- getLink(); - echo "
Lien de la vidéo déjà envoyée : $link (version " . $answer->getVersion() . ")
\n"; - displayVideo($link); - switch ($answer->getValidation()) { - case 0: - echo "
La vidéo n'a pas encore été vérifiée par l'équipe d'organisation.
"; - break; - case 1: - echo "
La vidéo a été acceptée par l'équipe d'organisation.
"; - break; - case -1: - echo "
La vidéo a été rejetée par l'équipe d'organisation.
"; - break; - } - } - if ($answer_validated != null && $answer_validated->getId() != $answer->getId()) { - $link = $answer_validated->getLink(); - echo "
\n
Lien de la dernière vidéo validée : $link
\n"; - displayVideo($link); - } - ?> + getLink(); + echo "
Lien de la vidéo déjà envoyée : $link (version " . $answer->getVersion() . ")
\n"; + displayVideo($link); + switch ($answer->getValidation()) { + case 0: + echo "
La vidéo n'a pas encore été vérifiée par l'équipe d'organisation.
"; + break; + case 1: + echo "
La vidéo a été acceptée par l'équipe d'organisation.
"; + break; + case -1: + echo "
La vidéo a été rejetée par l'équipe d'organisation.
"; + break; + } + } + if ($answer_validated != null && $answer_validated->getId() != $answer->getId()) { + $link = $answer_validated->getLink(); + echo "
\n
Lien de la dernière vidéo validée : $link
\n"; + displayVideo($link); + } + ?> @@ -92,16 +104,19 @@ for ($i = 0; $i < 2; ++$i) {
-