From a8db4a421c7a71160960af24930d41c940c598cc Mon Sep 17 00:00:00 2001 From: galaxyoyo Date: Tue, 17 Sep 2019 00:04:45 +0200 Subject: [PATCH] =?UTF-8?q?Phase=201=20:=20envoi=20des=20vid=C3=A9os=20(en?= =?UTF-8?q?=20cours)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dispatcher.php | 2 + server_files/classes/Reason.php | 35 +++++++ server_files/classes/User.php | 5 - server_files/classes/Video.php | 112 +++++++++++++++++++++ server_files/controllers/envoyer_video.php | 5 +- server_files/controllers/mon_compte.php | 1 + server_files/views/envoyer_video.php | 14 +-- 7 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 server_files/classes/Reason.php create mode 100644 server_files/classes/Video.php 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 "

"; +if ($video !== null) { + $link = $video->getLink(); + echo "Lien de la vidéo déjà envoyée : $link (version " . $video->getVersion() . ")
"; + if (preg_match("#(https?\://|)(www\.|)youtube\.com\/watch\?v=(.*)#", $link, $matches)) { + $code = $matches[3]; + echo "

"; } } ?> @@ -24,7 +24,7 @@ while (($data = $videos_req->fetch()) !== false) { - +