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; } 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->birth_date = $data["birth_date"]; $this->gender = $data["gender"]; $this->address = $data["address"]; $this->postal_code = $data["postal_code"]; $this->city = $data["city"]; $this->country = $data["country"]; $this->phone_number = $data["phone_number"]; $this->school = $data["school"]; $this->class = SchoolClass::fromName($data["class"]); $this->responsible_name = $data["responsible_name"]; $this->responsible_phone = $data["responsible_phone"]; $this->responsible_email = $data["responsible_email"]; $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"]; } public static function getOrganizers() { global $DB, $YEAR; $admins = []; $req = $DB->query("SELECT * FROM `users` WHERE `role` = 'ORGANIZER' OR `role` = 'ADMIN' AND `year` = $YEAR ORDER BY `role` DESC, `surname`, `first_name`;"); while (($data = $req->fetch()) !== false) { $admin = new User(); $admin->fill($data); $admins[] = $admin; } return $admins; } public static function getAdmins() { global $DB, $YEAR; $users = []; $req = $DB->query("SELECT * FROM `users` WHERE (`role` = 'ADMIN') " . "AND `year` = $YEAR ORDER BY `role`, `inscription_date`;"); while (($data = $req->fetch()) !== false) { $orphan = new User(); $orphan->fill($data); $users[] = $orphan; } return $users; } public static function getAllUsers() { global $DB, $YEAR; $users = []; $req = $DB->query("SELECT * FROM `users` WHERE (`role` = 'PARTICIPANT' OR `role` = 'ENCADRANT') " . "AND `year` = $YEAR ORDER BY `role`, `inscription_date`;"); while (($data = $req->fetch()) !== false) { $orphan = new User(); $orphan->fill($data); $users[] = $orphan; } return $users; } 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; } 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 getBirthDate() { return $this->birth_date; } public function setBirthDate($birth_date) { global $DB; $this->birth_date = $birth_date; $DB->prepare("UPDATE `users` SET `birth_date` = ? WHERE `id` = ?;")->execute([$birth_date, $this->getId()]); } public function getGender() { return $this->gender; } public function setGender($gender) { global $DB; $this->gender = $gender; $DB->prepare("UPDATE `users` SET `gender` = ? WHERE `id` = ?;")->execute([$gender, $this->getId()]); } public function getAddress() { return $this->address; } public function setAddress($address) { global $DB; $this->address = $address; $DB->prepare("UPDATE `users` SET `address` = ? WHERE `id` = ?;")->execute([$address, $this->getId()]); } public function getPostalCode() { return $this->postal_code; } public function setPostalCode($postal_code) { global $DB; $this->postal_code = $postal_code; $DB->prepare("UPDATE `users` SET `postal_code` = ? WHERE `id` = ?;")->execute([$postal_code, $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 getPhoneNumber() { return $this->phone_number; } public function setPhoneNumber($phone_number) { global $DB; $this->phone_number = $phone_number; $DB->prepare("UPDATE `users` SET `phone_number` = ? WHERE `id` = ?;")->execute([$phone_number, $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 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 getResponsibleName() { return $this->responsible_name; } public function setResponsibleName($responsible_name) { global $DB; $this->responsible_name = $responsible_name; $DB->prepare("UPDATE `users` SET `responsible_name` = ? WHERE `id` = ?;")->execute([$responsible_name, $this->getId()]); } public function getResponsiblePhone() { return $this->responsible_phone; } public function setResponsiblePhone($responsible_phone) { global $DB; $this->responsible_phone = $responsible_phone; $DB->prepare("UPDATE `users` SET `responsible_phone` = ? WHERE `id` = ?;")->execute([$responsible_phone, $this->getId()]); } public function getResponsibleEmail() { return $this->responsible_email; } public function setResponsibleEmail($responsible_email) { global $DB; $this->responsible_email = $responsible_email; $DB->prepare("UPDATE `users` SET `responsible_email` = ? WHERE `id` = ?;")->execute([$responsible_email, $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; /** @noinspection PhpUndefinedMethodInspection */ $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 getYear() { return $this->year; } 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 getAllDocuments($tournament_id) { global $DB; $req = $DB->query("SELECT * FROM `documents` AS `t1` " . "INNER JOIN (SELECT `user`, `type`, `tournament`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `documents` GROUP BY `tournament`, `type`, `user`) `t2` " . "ON `t1`.`user` = `t2`.`user` AND `t1`.`type` = `t2`.`type` AND `t1`.`tournament` = `t2`.`tournament` " . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`tournament` = $tournament_id AND `t1`.`user` = $this->id ORDER BY `t1`.`type`;"); $docs = []; while (($data = $req->fetch()) !== false) $docs[] = Document::fromData($data); if ($this->team_id > 0) { $req = $DB->query("SELECT * FROM `documents` AS `t1` " . "INNER JOIN (SELECT `user`, `type`, `tournament`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `documents` GROUP BY `tournament`, `type`, `user`) `t2` " . "ON `t1`.`user` = `t2`.`user` AND `t1`.`type` = `t2`.`type` AND `t1`.`tournament` = `t2`.`tournament` " . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`tournament` = $tournament_id AND `t1`.`team` = $this->team_id " . "AND `t1`.`type` = 'MOTIVATION_LETTER';"); while (($data = $req->fetch()) !== false) $docs[] = Document::fromData($data); } return $docs; } public function getPayment() { global $DB; $team = Team::fromId($this->team_id); $tournament = $team->getEffectiveTournament(); $req = $DB->prepare("SELECT `id` FROM `payments` WHERE `user` = ? AND `tournament` = ?;"); $req->execute([$this->id, $tournament->getId()]); if (($data = $req->fetch()) !== false) return Payment::fromId($data["id"]); $req = $DB->prepare("INSERT INTO `payments`(`user`, `tournament`, `amount`, `method`, `transaction_infos`, `validation_status`) VALUES (?, ?, ?, ?, ?, ?);"); $req->execute([$this->id, $tournament->getId(), 0, PaymentMethod::getName(PaymentMethod::NOT_PAID), "L'inscription n'est pas encore payƩe.", ValidationStatus::getName(ValidationStatus::NOT_READY)]); return $this->getPayment(); } public function getOrganizedTournaments() { global $DB; $req = $DB->query("SELECT `tournament` FROM `organizers` JOIN `tournaments` ON `tournaments`.`id` = `tournament` WHERE `organizer` = $this->id ORDER BY `date_start`, `name`;"); $tournaments = []; while (($data = $req->fetch()) !== false) $tournaments[] = Tournament::fromId($data["tournament"]); return $tournaments; } }