prepare("SELECT * FROM `teams` WHERE `id` = ?;"); $req->execute([htmlspecialchars($id)]); $data = $req->fetch(); if ($data === false) return null; $team = new Team(); $team->fill($data); return $team; } /** * @param $trigram * @return Team|null */ public static function fromTrigram($trigram) { global $DB, $YEAR; $req = $DB->prepare("SELECT * FROM `teams` WHERE `trigram` = ? AND `year` = $YEAR;"); $req->execute([htmlspecialchars($trigram)]); $data = $req->fetch(); if ($data === false) return null; $team = new Team(); $team->fill($data); return $team; } public static function fromAccessCode($access_code) { global $DB, $YEAR; $req = $DB->prepare("SELECT * FROM `teams` WHERE `access_code` = ? AND `year` = $YEAR;"); $req->execute([htmlspecialchars($access_code)]); $data = $req->fetch(); if ($data === false) return null; $team = new Team(); $team->fill($data); return $team; } public static function getAllTeams($problem, $only_validated = false) { global $DB, $YEAR; $req = $DB->prepare("SELECT * FROM `teams` WHERE " . ($problem < 0 ? "" : "`problem` = ? AND ") . ($only_validated ? "`validation_status` = 'VALIDATED' AND " : "") . "`year` = $YEAR;"); $req->execute([htmlspecialchars($problem)]); $teams = []; while (($data = $req->fetch()) != false) { $team = new Team(); $team->fill($data); $teams[] = $team; } return $teams; } private function fill($data) { $this->id = $data["id"]; $this->name = $data["name"]; $this->trigram = $data["trigram"]; $this->problem = $data["problem"]; $this->encadrant = $data["encadrant"]; $this->participants = [$data["participant_1"], $data["participant_2"], $data["participant_3"], $data["participant_4"], $data["participant_5"]]; $this->inscription_date = $data["inscription_date"]; $this->allow_publish = $data["allow_publish"] ? 1 : 0; $this->validation_status = ValidationStatus::fromName($data["validation_status"]); $this->video_team_ids = [$data["video_team1"], $data["video_team2"]]; $this->access_code = $data["access_code"]; $this->year = $data["year"]; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { global $DB; $this->name = $name; $DB->prepare("UPDATE `teams` SET `name` = ? WHERE `id` = ?;")->execute([$name, $this->id]); } public function getTrigram() { return $this->trigram; } public function setTrigram($trigram) { global $DB; $this->trigram = $trigram; $DB->prepare("UPDATE `teams` SET `trigram` = ? WHERE `id` = ?;")->execute([$trigram, $this->id]); } public function getProblem() { return $this->problem; } public function setProblem($problem) { global $DB; $this->problem = $problem; $DB->prepare("UPDATE `teams` SET `problem` = ? WHERE `id` = ?;")->execute([$problem, $this->id]); } public function getEncadrantId() { return $this->encadrant; } public function setEncadrant($encadrant) { global $DB; $this->encadrant = $encadrant; /** @noinspection SqlResolve */ $DB->prepare("UPDATE `teams` SET `encadrant` = ? WHERE `id` = ?;")->execute([$encadrant, $this->id]); } public function getParticipants() { return $this->participants; } public function setParticipant($i, $participant) { global $DB; $this->participants[$i - 1] = $participant; /** @noinspection SqlResolve */ $DB->prepare("UPDATE `teams` SET `participant_$i` = ? WHERE `id` = ?;")->execute([$participant, $this->id]); } public function getInscriptionDate() { return $this->inscription_date; } public function allowPublish() { return $this->allow_publish; } public function setAllowPublish($allow_publish) { global $DB; $this->allow_publish = $allow_publish; $DB->prepare("UPDATE `teams` SET `allow_publish` = ? WHERE `id` = ?;")->execute([$allow_publish ? 1 : 0, $this->id]); } public function getValidationStatus() { return $this->validation_status; } public function setValidationStatus($status) { global $DB; $this->validation_status = $status; $DB->prepare("UPDATE `teams` SET `validation_status` = ? WHERE `id` = ?;")->execute([ValidationStatus::getName($status), $this->id]); } public function getVideoTeamIds() { return $this->video_team_ids; } public function setVideoTeamIds($video_team_ids) { global $DB; ensure(sizeof($video_team_ids) == 2, "Une équipe doit recevoir exactement deux vidéos."); $this->video_team_ids = $video_team_ids; $DB->prepare("UPDATE `teams` SET `video_team1` = ?, `video_team2` = ? WHERE `id` = ?;")->execute([$video_team_ids[0], $video_team_ids[1], $this->id]); } public function getAccessCode() { return $this->access_code; } public function getYear() { return $this->year; } public function getAllDocuments() { global $DB; $req = $DB->query("SELECT * FROM `documents` AS `t1` " . "INNER JOIN (SELECT `team`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`user`) AS `version` FROM `documents` GROUP BY `problem`, `user`, `team`) `t2` " . "ON `t1`.`team` = `t2`.`team` " . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`team` = $this->id;"); $docs = []; while (($data = $req->fetch()) !== false) $docs[] = Document::fromData($data); return $docs; } public function getAllEmails() { $emails = []; if ($this->getEncadrantId() != null) $emails[] = User::fromId($this->getEncadrantId())->getEmail(); foreach ($this->getParticipants() as $participantId) { if ($participantId != 0) $emails[] = User::fromId($participantId)->getEmail(); } return $emails; } }