mirror of
https://gitlab.com/animath/si/plateforme-corres2math.git
synced 2025-07-22 00:59:12 +02:00
.idea
assets
server_files
classes
Document.php
Phase.php
Question.php
Reason.php
Role.php
SchoolClass.php
Team.php
User.php
ValidationStatus.php
Video.php
controllers
services
views
403.php
404.php
config.php
model.php
utils.php
setup
.htaccess
Dockerfile
dispatcher.php
index.html
304 lines
7.0 KiB
PHP
304 lines
7.0 KiB
PHP
<?php
|
|
|
|
class User
|
|
{
|
|
private $id;
|
|
public $email;
|
|
private $pwd_hash;
|
|
public $surname;
|
|
public $first_name;
|
|
public $school;
|
|
public $city;
|
|
public $country;
|
|
public $class;
|
|
public $description;
|
|
private $role;
|
|
private $team_id;
|
|
private $year;
|
|
private $confirm_email;
|
|
private $forgotten_password;
|
|
private $inscription_date;
|
|
private $receive_animath_mails;
|
|
|
|
private function __construct() {}
|
|
|
|
public static function fromId($id)
|
|
{
|
|
global $DB;
|
|
$req = $DB->prepare("SELECT * FROM `users` WHERE `id` = ?;");
|
|
$req->execute([htmlspecialchars($id)]);
|
|
$data = $req->fetch();
|
|
|
|
if ($data === false)
|
|
return null;
|
|
|
|
$user = new User();
|
|
$user->fill($data);
|
|
return $user;
|
|
}
|
|
|
|
public static function fromEmail($email)
|
|
{
|
|
global $DB, $YEAR;
|
|
$req = $DB->prepare("SELECT * FROM `users` WHERE `email` = ? AND `year` = $YEAR;");
|
|
$req->execute([htmlspecialchars($email)]);
|
|
$data = $req->fetch();
|
|
|
|
if ($data === false)
|
|
return null;
|
|
|
|
$user = new User();
|
|
$user->fill($data);
|
|
return $user;
|
|
}
|
|
|
|
public static function getAdmins()
|
|
{
|
|
global $DB, $YEAR;
|
|
$admins = [];
|
|
$req = $DB->query("SELECT * FROM `users` WHERE `role` = 'ADMIN' AND `year` = $YEAR;");
|
|
|
|
while (($data = $req->fetch()) !== false) {
|
|
$admin = new User();
|
|
$admin->fill($data);
|
|
$admins[] = $admin;
|
|
}
|
|
|
|
return $admins;
|
|
}
|
|
|
|
public static function getOrphanUsers()
|
|
{
|
|
global $DB, $YEAR;
|
|
$orphans = [];
|
|
$req = $DB->query("SELECT * FROM `users` WHERE `role` != 'ADMIN' AND `team_id` IS NULL AND `year` = $YEAR ORDER BY `role`, `inscription_date`;");
|
|
|
|
while (($data = $req->fetch()) !== false) {
|
|
$orphan = new User();
|
|
$orphan->fill($data);
|
|
$orphans[] = $orphan;
|
|
}
|
|
|
|
return $orphans;
|
|
}
|
|
|
|
private function fill($data)
|
|
{
|
|
$this->id = $data["id"];
|
|
$this->email = $data["email"];
|
|
$this->pwd_hash = $data["pwd_hash"];
|
|
$this->surname = $data["surname"];
|
|
$this->first_name = $data["first_name"];
|
|
$this->school = $data["school"];
|
|
$this->city = $data["city"];
|
|
$this->country = $data["country"];
|
|
$this->class = SchoolClass::fromName($data["class"]);
|
|
$this->description = $data["description"];
|
|
$this->role = Role::fromName($data["role"]);
|
|
$this->team_id = $data["team_id"];
|
|
$this->year = $data["year"];
|
|
$this->confirm_email = $data["confirm_email"];
|
|
$this->forgotten_password = $data["forgotten_password"];
|
|
$this->inscription_date = $data["inscription_date"];
|
|
$this->receive_animath_mails = $data["receive_animath_mails"];
|
|
}
|
|
|
|
public function getEmail()
|
|
{
|
|
return $this->email;
|
|
}
|
|
|
|
public function setEmail($email)
|
|
{
|
|
global $DB;
|
|
$this->email = $email;
|
|
$DB->prepare("UPDATE `users` SET `email` = ? WHERE `id` = ?;")->execute([$email, $this->getId()]);
|
|
}
|
|
|
|
public function getId()
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function checkPassword($password)
|
|
{
|
|
return password_verify($password, $this->pwd_hash);
|
|
}
|
|
|
|
public function setPassword($password)
|
|
{
|
|
$this->setPasswordHash(password_hash($password, PASSWORD_BCRYPT));
|
|
}
|
|
|
|
private function setPasswordHash($password_hash)
|
|
{
|
|
global $DB;
|
|
$this->pwd_hash = $password_hash;
|
|
$DB->prepare("UPDATE `users` SET `pwd_hash` = ? WHERE `id` = ?;")->execute([$password_hash, $this->getId()]);
|
|
}
|
|
|
|
public function getSurname()
|
|
{
|
|
return $this->surname;
|
|
}
|
|
|
|
public function setSurname($surname)
|
|
{
|
|
global $DB;
|
|
$this->surname = $surname;
|
|
$DB->prepare("UPDATE `users` SET `surname` = ? WHERE `id` = ?;")->execute([$surname, $this->getId()]);
|
|
}
|
|
|
|
public function getFirstName()
|
|
{
|
|
return $this->first_name;
|
|
}
|
|
|
|
public function setFirstName($first_name)
|
|
{
|
|
global $DB;
|
|
$this->first_name = $first_name;
|
|
$DB->prepare("UPDATE `users` SET `first_name` = ? WHERE `id` = ?;")->execute([$first_name, $this->getId()]);
|
|
}
|
|
|
|
public function getSchool()
|
|
{
|
|
return $this->school;
|
|
}
|
|
|
|
public function setSchool($school)
|
|
{
|
|
global $DB;
|
|
$this->school = $school;
|
|
$DB->prepare("UPDATE `users` SET `school` = ? WHERE `id` = ?;")->execute([$school, $this->getId()]);
|
|
}
|
|
|
|
public function getCity()
|
|
{
|
|
return $this->city;
|
|
}
|
|
|
|
public function setCity($city)
|
|
{
|
|
global $DB;
|
|
$this->city = $city;
|
|
$DB->prepare("UPDATE `users` SET `city` = ? WHERE `id` = ?;")->execute([$city, $this->getId()]);
|
|
}
|
|
|
|
public function getCountry()
|
|
{
|
|
return $this->country;
|
|
}
|
|
|
|
public function setCountry($country)
|
|
{
|
|
global $DB;
|
|
$this->country = $country;
|
|
$DB->prepare("UPDATE `users` SET `country` = ? WHERE `id` = ?;")->execute([$country, $this->getId()]);
|
|
}
|
|
|
|
public function getClass()
|
|
{
|
|
return $this->class;
|
|
}
|
|
|
|
public function setClass($class)
|
|
{
|
|
global $DB;
|
|
$this->class = $class;
|
|
$DB->prepare("UPDATE `users` SET `class` = ? WHERE `id` = ?;")->execute([SchoolClass::getName($class), $this->getId()]);
|
|
}
|
|
|
|
public function getDescription()
|
|
{
|
|
return $this->description;
|
|
}
|
|
|
|
public function setDescription($desc)
|
|
{
|
|
global $DB;
|
|
$this->description = $desc;
|
|
$DB->prepare("UPDATE `users` SET `description` = ? WHERE `id` = ?;")->execute([$desc, $this->getId()]);
|
|
}
|
|
|
|
public function getRole()
|
|
{
|
|
return $this->role;
|
|
}
|
|
|
|
public function setRole($role)
|
|
{
|
|
global $DB;
|
|
$this->role = $role;
|
|
$DB->prepare("UPDATE `users` SET `role` = ? WHERE `id` = ?;")->execute([Role::getName($role), $this->getId()]);
|
|
}
|
|
|
|
public function getTeamId()
|
|
{
|
|
return $this->team_id;
|
|
}
|
|
|
|
public function setTeamId($team_id)
|
|
{
|
|
global $DB;
|
|
$this->team_id = $team_id;
|
|
$DB->prepare("UPDATE `users` SET `team_id` = ? WHERE `id` = ?;")->execute([$team_id, $this->getId()]);
|
|
}
|
|
|
|
public function getConfirmEmailToken()
|
|
{
|
|
return $this->confirm_email;
|
|
}
|
|
|
|
public function setConfirmEmailToken($token)
|
|
{
|
|
global $DB;
|
|
$this->confirm_email = $token;
|
|
$DB->prepare("UPDATE `users` SET `confirm_email` = ? WHERE `id` = ?;")->execute([$token, $this->getId()]);
|
|
}
|
|
|
|
public function getForgottenPasswordToken()
|
|
{
|
|
return $this->forgotten_password;
|
|
}
|
|
|
|
public function setForgottenPasswordToken($token)
|
|
{
|
|
global $DB;
|
|
$this->forgotten_password = $token;
|
|
$DB->prepare("UPDATE `users` SET `forgotten_password` = ? WHERE `id` = ?;")->execute([$token, $this->getId()]);
|
|
}
|
|
|
|
public function getInscriptionDate()
|
|
{
|
|
return $this->inscription_date;
|
|
}
|
|
|
|
public function doReceiveAnimathMails()
|
|
{
|
|
return $this->receive_animath_mails;
|
|
}
|
|
|
|
public function setReceiveAnimathMails($receive_animath_mails)
|
|
{
|
|
global $DB;
|
|
$this->receive_animath_mails = $receive_animath_mails;
|
|
$DB->prepare("UPDATE `users` SET `receive_animath_mails` = ? WHERE `id` = ?;")->execute([$receive_animath_mails ? 1 : 0, $this->getId()]);
|
|
}
|
|
|
|
public function getAllDocuments()
|
|
{
|
|
global $DB;
|
|
$req = $DB->query("SELECT * FROM `documents` AS `t1` "
|
|
. "INNER JOIN (SELECT `user`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `documents` GROUP BY `problem`, `user`) `t2` "
|
|
. "ON `t1`.`user` = `t2`.`user` "
|
|
. "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`user` = $this->id;");
|
|
|
|
$docs = [];
|
|
|
|
while (($data = $req->fetch()) !== false)
|
|
$docs[] = Document::fromData($data);
|
|
|
|
return $docs;
|
|
}
|
|
} |