diff --git a/dispatcher.php b/dispatcher.php
index a1b79f7..cf5e91b 100644
--- a/dispatcher.php
+++ b/dispatcher.php
@@ -4,11 +4,13 @@ require_once "server_files/config.php";
require_once "server_files/classes/Document.php";
require_once "server_files/classes/Phase.php";
+require_once "server_files/classes/Reason.php";
require_once "server_files/classes/Role.php";
require_once "server_files/classes/SchoolClass.php";
require_once "server_files/classes/Team.php";
require_once "server_files/classes/User.php";
require_once "server_files/classes/ValidationStatus.php";
+require_once "server_files/classes/Video.php";
require_once "server_files/services/mail.php";
require_once "server_files/utils.php";
require_once "server_files/model.php";
diff --git a/server_files/classes/Reason.php b/server_files/classes/Reason.php
new file mode 100644
index 0000000..d14ae09
--- /dev/null
+++ b/server_files/classes/Reason.php
@@ -0,0 +1,35 @@
+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;
diff --git a/server_files/classes/Video.php b/server_files/classes/Video.php
new file mode 100644
index 0000000..25f0c52
--- /dev/null
+++ b/server_files/classes/Video.php
@@ -0,0 +1,112 @@
+prepare("SELECT * FROM `videos` WHERE `id` = ?;");
+ $req->execute([htmlspecialchars($id)]);
+ $data = $req->fetch();
+
+ if ($data === false)
+ return null;
+
+ $video = new Video();
+ $video->fill($data);
+ return $video;
+ }
+
+ public static function getVideos($reason, $problem, $team_id = -1)
+ {
+ global $DB;
+ $req = $DB->query("SELECT * FROM `videos` AS `t1` "
+ . "INNER JOIN (SELECT `team`, `problem`, `reason`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `videos` GROUP BY `problem`, `reason`, `team`) `t2` "
+ . "ON `t1`.`team` = `t2`.`team` AND `t1`.`reason` = `t2`.`reason` AND `t1`.`problem` = `t2`.`problem` "
+ . "WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`problem` = $problem AND `t1`.`reason` = '" . Reason::getName($reason) . "'"
+ . ($team_id >= 0 ? " AND `t1`.`team` = $team_id" : "") . " ORDER BY `t1`.`problem`, `t1`.`reason`;");
+
+ $videos = [];
+
+ while (($data = $req->fetch()) !== false) {
+ $video = new Video();
+ $video->fill($data);
+ $videos[] = $video;
+ }
+
+ return $videos;
+ }
+
+ /**
+ * @param int $reason
+ * @param Team $team
+ * @return Video|null
+ */
+ public static function getVideo($reason, Team $team) {
+ $videos = self::getVideos($reason, $team->getProblem(), $team->getId());
+ if (sizeof($videos) == 0)
+ return null;
+ else
+ return $videos[0];
+ }
+
+ private function fill($data)
+ {
+ foreach ($data as $key => $value)
+ $this->$key = $value;
+
+ $this->reason = Reason::fromName($this->reason);
+ }
+
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ public function getTeam()
+ {
+ return $this->team;
+ }
+
+ public function getProblem()
+ {
+ return $this->problem;
+ }
+
+ public function getLink()
+ {
+ return $this->link;
+ }
+
+ public function getReason()
+ {
+ return $this->reason;
+ }
+
+ public function getUploadedAt()
+ {
+ return $this->uploaded_at;
+ }
+
+ public function getYear()
+ {
+ return $this->year;
+ }
+
+ public function getVersion()
+ {
+ return $this->version;
+ }
+}
\ No newline at end of file
diff --git a/server_files/controllers/envoyer_video.php b/server_files/controllers/envoyer_video.php
index c894cc1..7817ec1 100644
--- a/server_files/controllers/envoyer_video.php
+++ b/server_files/controllers/envoyer_video.php
@@ -31,7 +31,8 @@ class NewVideo
public function makeVerifications()
{
- ensure(preg_match("#(https?)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?#", $this->link), "Ce n'est pas une URL valide.");
+ ensure(preg_match("#(https?\:\/\/|)[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?#", $this->link), "Ce n'est pas une URL valide.");
+ $this->link = preg_replace('/^(?!https?:\/\/)/', 'https://', $this->link);
}
public function uploadVideo()
@@ -43,6 +44,6 @@ class NewVideo
}
}
-$videos_req = $DB->query("SELECT * FROM `videos` WHERE `year` = $YEAR;");
+$video = Video::getVideo(Reason::SOLUTION, $team);
require_once "server_files/views/envoyer_video.php";
\ No newline at end of file
diff --git a/server_files/controllers/mon_compte.php b/server_files/controllers/mon_compte.php
index aee24ca..f6740dc 100644
--- a/server_files/controllers/mon_compte.php
+++ b/server_files/controllers/mon_compte.php
@@ -41,6 +41,7 @@ class MyAccount
public $school;
public $class;
public $description;
+ /** @var User */
private $user;
public function __construct($data)
diff --git a/server_files/views/envoyer_video.php b/server_files/views/envoyer_video.php
index d015e33..9686249 100644
--- a/server_files/views/envoyer_video.php
+++ b/server_files/views/envoyer_video.php
@@ -9,12 +9,12 @@ elseif (isset($new_video))
?>
fetch()) !== false) {
- $link = $data["link"];
- echo "$link
";
- if (preg_match("#https?\://www\.youtube\.com\/watch\?v=(.*)#", $link, $matches)) {
- $code = $matches[1];
- echo "