mirror of
https://gitlab.com/animath/si/plateforme-corres2math.git
synced 2024-12-25 19:42:22 +00:00
171 lines
4.5 KiB
PHP
171 lines
4.5 KiB
PHP
<?php
|
|
|
|
function loadUserValues()
|
|
{
|
|
$_SESSION["user"] = $_SESSION["team"] = null;
|
|
unset($_SESSION["user"]);
|
|
unset($_SESSION["role"]);
|
|
unset($_SESSION["team"]);
|
|
|
|
if (isset($_SESSION["user_id"])) {
|
|
$user = $_SESSION["user"] = User::fromId($_SESSION["user_id"]);
|
|
$_SESSION["role"] = $user->getRole();
|
|
|
|
if ($user->getTeamId() !== null)
|
|
$_SESSION["team"] = Team::fromId($user->getTeamId());
|
|
|
|
if (isset($_GET["be-admin"])) {
|
|
quitTeam();
|
|
$user->setRole(Role::ADMIN);
|
|
exit();
|
|
}
|
|
|
|
if (isset($_GET["be-participant"])) {
|
|
quitTeam();
|
|
$user->setRole(Role::PARTICIPANT);
|
|
exit();
|
|
}
|
|
|
|
if (isset($_GET["be-encadrant"])) {
|
|
quitTeam();
|
|
$user->setRole(Role::ENCADRANT);
|
|
exit();
|
|
}
|
|
}
|
|
}
|
|
|
|
function quitTeam()
|
|
{
|
|
global $DB, $URL_BASE;
|
|
|
|
header("Location: $URL_BASE");
|
|
|
|
/** @var User $user */
|
|
$user = $_SESSION["user"];
|
|
$user_id = $user->getId();
|
|
$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;");
|
|
}
|
|
|
|
$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"]);
|
|
}
|
|
|
|
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;
|
|
|
|
$can_validate = $team->getValidationStatus() == ValidationStatus::NOT_READY;
|
|
$can_validate &= $team->getEncadrantId() != null;
|
|
$can_validate &= $team->getParticipants()[2] != null;
|
|
|
|
if ($team->getEncadrantId() != null) {
|
|
$req = $DB->prepare("SELECT COUNT(*) AS `version` FROM `documents` WHERE `user` = ? AND `problem` = ? AND `type` = ?;");
|
|
$req->execute([$team->getEncadrantId(), $team->getProblem(), "PHOTO_CONSENT"]);
|
|
$d = $req->fetch();
|
|
$can_validate &= $d["version"] > 0;
|
|
}
|
|
|
|
for ($i = 1; $i <= 5; ++$i) {
|
|
if ($team->getParticipants()[$i] === NULL)
|
|
continue;
|
|
|
|
$req = $DB->prepare("SELECT COUNT(*) AS `version` FROM `documents` WHERE `user` = ? AND `problem` = ? AND `type` = ?;");
|
|
$req->execute([$team->getParticipants()[$i], $team->getProblem(), "PHOTO_CONSENT"]);
|
|
$d = $req->fetch();
|
|
$can_validate &= $d["version"] > 0;
|
|
}
|
|
|
|
return $can_validate;
|
|
}
|
|
|
|
function printDocuments($documents)
|
|
{
|
|
global $URL_BASE;
|
|
|
|
foreach ($documents as $document) {
|
|
$file_id = $document->getFileId();
|
|
$user = User::fromId($document->getUserId());
|
|
$surname = $user->getSurname();
|
|
$first_name = $user->getFirstName();
|
|
$name = DocumentType::getTranslatedName($document->getType());
|
|
$version = $document->getVersion();
|
|
echo "$name de $first_name $surname (version $version) : <a href=\"$URL_BASE/file/$file_id\">Télécharger</a><br />";
|
|
}
|
|
}
|
|
|
|
function getZipFile($problem, $team_id = -1)
|
|
{
|
|
global $LOCAL_PATH, $DB;
|
|
|
|
$zip = new ZipArchive();
|
|
|
|
$file_name = tempnam("tmp", "corres2math-");
|
|
|
|
if ($zip->open($file_name, ZipArchive::CREATE) !== true) {
|
|
die("Impossible de créer le fichier zip.");
|
|
}
|
|
|
|
// TODO Replace DB query
|
|
$resp = $DB->query("SELECT * FROM `documents` WHERE `problem` = $problem" . ($team_id >= 0 ? " AND `team` = $team_id" : "") . ";");
|
|
|
|
/** @var Document $file */
|
|
//foreach ($data as $file) {
|
|
while (($data = $resp->fetch()) != false) {
|
|
$file = Document::fromData($data);
|
|
$file_id = $file->getFileId();
|
|
$user = User::fromId($file->getUserId());
|
|
$name = "Autorisation de droit à l'image de " . $user->getFirstName() . " " . $user->getSurname() . ".pdf";
|
|
|
|
$zip->addFile("$LOCAL_PATH/files/$file_id", $name);
|
|
}
|
|
|
|
$zip->close();
|
|
|
|
return $file_name;
|
|
}
|