2019-09-09 23:48:52 +00:00
< ? php
class Document
{
private $file_id ;
private $user_id ;
private $team_id ;
2019-09-11 16:41:45 +00:00
private $problem ;
2019-09-09 23:48:52 +00:00
private $type ;
private $uploaded_at ;
private $version ;
private function __construct () {}
public static function fromId ( $id )
{
global $DB ;
$req = $DB -> prepare ( " SELECT * FROM `documents` WHERE `file_id` = ?; " );
$req -> execute ([ htmlspecialchars ( $id )]);
$data = $req -> fetch ();
if ( $data === false )
return null ;
return self :: fromData ( $data );
}
public static function fromData ( $data )
{
$doc = new Document ();
$doc -> fill ( $data );
return $doc ;
}
private function fill ( $data )
{
$this -> file_id = $data [ " file_id " ];
$this -> user_id = $data [ " user " ];
$this -> team_id = $data [ " team " ];
2019-09-11 16:41:45 +00:00
$this -> problem = $data [ " problem " ];
2019-09-09 23:48:52 +00:00
$this -> type = DocumentType :: fromName ( $data [ " type " ]);
$this -> uploaded_at = $data [ " uploaded_at " ];
$this -> version = isset ( $data [ " version " ]) ? $data [ " version " ] : 1 ;
}
public function getFileId ()
{
return $this -> file_id ;
}
public function getUserId ()
{
return $this -> user_id ;
}
public function getTeamId ()
{
return $this -> team_id ;
}
2019-09-11 16:41:45 +00:00
public function getProblem ()
2019-09-09 23:48:52 +00:00
{
2019-09-11 16:41:45 +00:00
return $this -> problem ;
2019-09-09 23:48:52 +00:00
}
public function getType ()
{
return $this -> type ;
}
public function getUploadedAt ()
{
return $this -> uploaded_at ;
}
public function getVersion ()
{
return $this -> version ;
}
2019-09-12 14:01:40 +00:00
public static function getAllDocuments ( $problem , $team_id = - 1 )
2019-09-09 23:48:52 +00:00
{
global $DB ;
2019-09-11 16:41:45 +00:00
$req = $DB -> query ( " SELECT * FROM `documents` AS `t1` "
2019-09-24 23:08:38 +00:00
. " INNER JOIN (SELECT `user`, `problem`, MAX(`uploaded_at`) AS `last_upload`, COUNT(`team`) AS `version` FROM `documents` GROUP BY `problem`, `user`) `t2` "
. " ON `t1`.`user` = `t2`.`user` AND `t1`.`problem` = `t2`.`problem` "
2019-09-12 14:01:40 +00:00
. " WHERE `t1`.`uploaded_at` = `t2`.`last_upload` AND `t1`.`problem` = $problem " . ( $team_id >= 0 ? " AND `team` = $team_id " : " " ) . " ORDER BY `t1`.`type`; " );
2019-09-09 23:48:52 +00:00
2019-09-11 16:41:45 +00:00
$docs = [];
2019-09-09 23:48:52 +00:00
2019-09-11 16:41:45 +00:00
while (( $data = $req -> fetch ()) !== false )
$docs [] = Document :: fromData ( $data );
2019-09-09 23:48:52 +00:00
2019-09-11 16:41:45 +00:00
return $docs ;
2019-09-09 23:48:52 +00:00
}
}