241 lines
5.6 KiB
PHP
241 lines
5.6 KiB
PHP
<?php
|
|
|
|
class Team
|
|
{
|
|
private $id;
|
|
private $name;
|
|
private $trigram;
|
|
private $problem;
|
|
private $encadrant;
|
|
private $participants;
|
|
private $inscription_date;
|
|
private $allow_publish;
|
|
private $validation_status;
|
|
private $video_team_ids;
|
|
private $access_code;
|
|
private $year;
|
|
|
|
private function __construct() {}
|
|
|
|
/**
|
|
* @param $id
|
|
* @return Team|null
|
|
*/
|
|
public static function fromId($id)
|
|
{
|
|
global $DB;
|
|
$req = $DB->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;
|
|
}
|
|
}
|