getRole(); $_SESSION["teams"] = $user->getTeams(); if ($user->getRole() == Role::PARTICIPANT) $_SESSION["team"] = sizeof($_SESSION["teams"]) > 0 ? $_SESSION["teams"][0] : null; } if (isset($_GET["view-as-admin"])) { if (isset($_SESSION["admin"])) { $_SESSION["user_id"] = $_SESSION["admin"]; unset($_SESSION["admin"]); } header("Location: /"); exit(); } } function quitTeam($user_id = -1) { global $DB, $URL_BASE; if ($user_id == -1) header("Location: $URL_BASE"); $user_id = $user_id >= 0 ? $user_id : $_SESSION["user_id"]; /** @var User $user */ $user = User::fromId($user_id); $role = $user->getRole(); if ($role == Role::ADMIN) return; if ($role == Role::PARTICIPANT) for ($i = 1; $i <= 5; ++$i) /** @noinspection SqlResolve */ $DB->exec("UPDATE `teams` SET `participant_$i` = NULL WHERE `participant_$i` = $user_id;"); else $DB->exec("UPDATE `teams` SET `encadrant` = NULL WHERE `encadrant` = $user_id;"); $user->setTeamId(null); for ($i = 1; $i <= 4; ++$i) { /** @noinspection SqlResolve */ $DB->exec("UPDATE `teams` SET `participant_$i` = `participant_" . strval($i + 1) . "`, `participant_" . strval($i + 1) . "` = NULL WHERE `participant_$i` IS NULL;"); } $DB->exec("DELETE FROM `teams` WHERE `encadrant` IS NULL AND `participant_1` IS NULL;"); $req = $DB->query("SELECT `file_id` FROM `documents` WHERE `user` = $user_id;"); while (($data = $req->fetch()) !== false) unlink("$URL_BASE/files/" . $data["file_id"]); $DB->exec("DELETE FROM `documents` WHERE `user` = $user_id;"); $_SESSION["team"] = null; unset($_SESSION["team"]); $_SESSION["teams"] = $user->getTeams(); } function userExists($email) { global $DB, $YEAR; $req = $DB->prepare("SELECT `id` FROM `users` WHERE `email` = ? AND `year` = '$YEAR';"); $req->execute([$email]); return $req->fetch(); } function teamExists($name) { global $DB, $YEAR; $req = $DB->prepare("SELECT `id` FROM `teams` WHERE `name` = ? AND `year` = '$YEAR';"); $req->execute([$name]); return $req->fetch(); } function trigramExists($trigram) { global $DB, $YEAR; $req = $DB->prepare("SELECT `id` FROM `teams` WHERE `trigram` = ? AND `year` = '$YEAR';"); $req->execute([$trigram]); return $req->fetch(); } function canValidate(Team $team) { global $DB, $CONFIG; $can_validate = date("Y-m-d H:i:s") < $CONFIG->getInscriptionDate(); $can_validate &= $team->getValidationStatus() == ValidationStatus::NOT_READY; $can_validate &= $team->getEncadrantId() != null; $can_validate &= $team->getParticipants()[2] != null; $can_validate &= preg_match("#[1-4]#", $team->getProblem()); for ($i = 0; $i < 5; ++$i) { if ($team->getParticipants()[$i] === NULL) continue; $req = $DB->prepare("SELECT COUNT(*) AS `version` FROM `documents` WHERE `user` = ? AND `problem` = ?;"); $req->execute([$team->getParticipants()[$i], $team->getProblem()]); $d = $req->fetch(); $can_validate &= $d["version"] > 0; } return $can_validate; } 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(); $user = User::fromId($document->getUserId()); $surname = $user->getSurname(); $first_name = $user->getFirstName(); $name = "Autorisation de droit à l'image"; $version = $document->getVersion(); echo "$name de $first_name $surname (version $version) : Télécharger
\n"; } echo "
\n"; } function getZipFile($problem, $team_id = -1) { global $LOCAL_PATH; $zip = new ZipArchive(); $file_name = tempnam("tmp", "corres2math-"); if ($zip->open($file_name, ZipArchive::CREATE) !== true) { die("Impossible de créer le fichier zip."); } $data = Document::getAllDocuments($problem, $team_id); /** @var Document $file */ foreach ($data as $file) { $file_id = $file->getFileId(); $user = User::fromId($file->getUserId()); $mime_type = finfo_file(finfo_open(FILEINFO_MIME_TYPE), "$LOCAL_PATH/files/$file_id"); $ext = $mime_type == "application/pdf" ? "pdf" : ($mime_type == "image/png" ? "png" : "jpg"); $name = "Autorisation de droit à l'image de " . $user->getFirstName() . " " . $user->getSurname() . "." . $ext; $zip->addFile("$LOCAL_PATH/files/$file_id", $name); } $zip->close(); return $file_name; } function exportUserData() { global $DB, $YEAR; $file_name = tempnam("tmp", "corres2math-"); $csv = "Identifiant,Nom,Prénom,E-mail,École,Ville,Pays,Classe,Description,Rôle,Équipe,Autorise l'envoi de mails,Date d'inscription\n"; $req = $DB->query("SELECT `id` FROM `users` WHERE `year` = $YEAR;"); while (($data = $req->fetch()) !== false) { $user = User::fromId($data["id"]); $csv .= $user->getId() . ","; $csv .= $user->getSurname() . ","; $csv .= $user->getFirstName() . ","; $csv .= $user->getEmail() . ","; $csv .= $user->getSchool() . ","; $csv .= $user->getCity() . ","; $csv .= $user->getCountry() . ","; $csv .= SchoolClass::getTranslatedName($user->getClass()) . ","; $csv .= $user->getDescription() . ","; $csv .= Role::getTranslatedName($user->getRole()) . ","; $csv .= ($user->getTeamId() == null ? "" : Team::fromId($user->getTeamId())->getTrigram()) . ","; $csv .= ($user->doReceiveAnimathMails() ? "oui" : "non") . ","; $csv .= $user->getInscriptionDate() . "\n"; } file_put_contents($file_name, $csv, FILE_APPEND); return $file_name; } function exportTeamData() { global $DB, $YEAR; $file_name = tempnam("tmp", "corres2math-"); $csv = "Identifiant,Nom,Trigramme,Problème,Encadrant,Participant 1,Participant 2,Participant 3,Participant 4,Participant 5," . "Date d'inscription,Autorise la publication,État de validation,Code d'accès\n"; $req = $DB->query("SELECT `id` FROM `teams` WHERE `year` = $YEAR ORDER BY `problem`;"); while (($data = $req->fetch()) !== false) { $team = Team::fromId($data["id"]); $csv .= $team->getId() . ","; $csv .= $team->getName() . ","; $csv .= $team->getTrigram() . ","; $csv .= $team->getProblem() . ","; $csv .= $team->getEncadrantId() . ","; $csv .= $team->getParticipants()[0] . ","; $csv .= $team->getParticipants()[1] . ","; $csv .= $team->getParticipants()[2] . ","; $csv .= $team->getParticipants()[3] . ","; $csv .= $team->getParticipants()[4] . ","; $csv .= $team->getInscriptionDate() . ","; $csv .= $team->allowPublish() . ","; $csv .= ValidationStatus::getTranslatedName($team->getValidationStatus()) . ","; $csv .= $team->getAccessCode() . "\n"; } file_put_contents($file_name, $csv, FILE_APPEND); return $file_name; } function exportProblemsData() { global $DB, $URL_BASE, $YEAR; $file_name = tempnam("tmp", "corres2math-"); $csv = "Équipe,Problème,Lien,Équipe 1 ayant reçu la vidéo," . "Question 1,Pièce jointe,Réponse,Pièce jointe," . "Question 2,Pièce jointe,Réponse,Pièce jointe," . "Question 3,Pièce jointe,Réponse,Pièce jointe," . "Question 4,Pièce jointe,Réponse,Pièce jointe," . "Question 5,Pièce jointe,Réponse,Pièce jointe," . "Question 6,Pièce jointe,Réponse,Pièce jointe," . "Vidéo de réponse," . "Équipe 2 ayant reçu la vidéo," . "Question 1,Pièce jointe,Réponse,Pièce jointe," . "Question 2,Pièce jointe,Réponse,Pièce jointe," . "Question 3,Pièce jointe,Réponse,Pièce jointe," . "Question 4,Pièce jointe,Réponse,Pièce jointe," . "Question 5,Pièce jointe,Réponse,Pièce jointe," . "Question 6,Pièce jointe,Réponse,Pièce jointe," . "Vidéo de réponse\n"; $req = $DB->query("SELECT `id` FROM `teams` WHERE `validation_status` = 'VALIDATED' AND `year` = $YEAR ORDER BY `problem`;"); while (($data = $req->fetch()) !== false) { $team = Team::fromId($data["id"]); $video = Video::getVideo(Reason::SOLUTION, $team); $questions_received = Question::getQuestionsTo($team); $csv .= $team->getTrigram() . ","; $csv .= $team->getProblem() . ","; $csv .= ($video == null ? "" : $video->getLink()) . ","; for ($i = 0; $i < 2; ++$i) { /** @var Question[] $questions */ $questions = $questions_received[$i]; $asker = Team::fromId($questions[0]->getFrom()); $csv .= $asker->getTrigram() . ","; for ($j = 0; $j < 6; ++$j) { $question = $questions[$j]; if ($question == null) { $csv .= ",,,,"; continue; } $csv .= $question->getQuestion() . ","; $csv .= ($question->getAttachedFile() == null ? "" : $URL_BASE . "/file/" . $question->getAttachedFile()) . ','; $csv .= $question->getAnswer() . ","; $csv .= ($question->getAttachedFileAnswer() == null ? "" : $URL_BASE . "/file/" . $question->getAttachedFileAnswer()) . ','; } $answer = Video::getVideo($asker->getVideoTeamIds()[0] == $team->getId() ? Reason::ANSWER1 : Reason::ANSWER2, $asker, Video::ACCEPTED); $csv .= $answer == null ? "" : $answer->getLink(); $csv .= ($i == 0 ? "," : "\n"); } } file_put_contents($file_name, $csv, FILE_APPEND); return $file_name; } function displayVideo($link) { if (preg_match("#(https?://|)(www\.|)(youtube\.com/watch\?v=|youtu.be/)([a-zA-Z0-9,\-,_]*)?.*?#", $link, $matches)) { $code = $matches[4]; /** @noinspection HtmlDeprecatedAttribute */ /** @noinspection HtmlDeprecatedTag */ echo "

\n"; } elseif (preg_match("#(https?://|)drive\.google\.com/(file/d/|open\?id=)([a-zA-Z0-9\-_]*)/?.*?#", $link, $matches)) { $code = $matches[3]; /** @noinspection HtmlDeprecatedAttribute */ /** @noinspection HtmlDeprecatedTag */ echo "

\n"; } elseif (preg_match("#(https?://|)(www\.|)vimeo\.com/([0-9]*)#", $link, $matches)) { $code = $matches[3]; /** @noinspection HtmlDeprecatedAttribute */ /** @noinspection HtmlDeprecatedTag */ echo "
"; } elseif (preg_match("#(https?://|)(www\.|)dailymotion\.com/video/(.*)#", $link, $matches)) { $code = $matches[3]; /** @noinspection HtmlDeprecatedAttribute */ /** @noinspection HtmlDeprecatedTag */ echo "
"; } }