con = $con; } /** * get tactic information from given identifier * @param int $id * @return TacticInfo|null */ public function get(int $id): ?TacticInfo { $res = $this->con->fetch( "SELECT * FROM Tactic WHERE id = :id", [":id" => [$id, PDO::PARAM_INT]] ); if (!isset($res[0])) { return null; } $row = $res[0]; $type = CourtType::fromName($row['court_type']); return new TacticInfo($id, $row["name"], strtotime($row["creation_date"]), $row["owner"], $type, $row['content']); } /** * Return the nb last tactics created * * @param integer $nb * @return TacticInfo[] | null */ public function getLastOwnedBy(int $nb, int $ownerId): ?array { $res = $this->con->fetch( "SELECT * FROM Tactic WHERE owner = :ownerId ORDER BY creation_date DESC LIMIT :nb", [ ":ownerId" => [$ownerId, PDO::PARAM_INT],":nb" => [$nb, PDO::PARAM_INT], ] ); if (count($res) == 0) { return []; } return array_map(fn(array $row) => $this->rowToTacticInfo($row), $res); } /** * Get all the tactics of the owner * * @return TacticInfo[] | null */ public function getAllOwnedBy(int $ownerId): ?array { $res = $this->con->fetch( "SELECT * FROM Tactic WHERE owner = :ownerId ORDER BY name DESC", [ ":ownerId" => [$ownerId, PDO::PARAM_INT], ] ); if (count($res) == 0) { return []; } return array_map(fn(array $row) => $this->rowToTacticInfo($row), $res); } /** * @param int $ownerId * @return TacticInfo[]|null */ public function getAllTacticSharedTeam(int $ownerId): ?array { $res = $this->con->fetch( "SELECT t.* FROM Tactic t, TacticSharedTeam ts, Member m WHERE ts.id_team = m.id_team AND ts.id_tactic = t.id AND m.id_user = :ownerId", [ ":ownerId" => [$ownerId, PDO::PARAM_INT] ] ); if (count($res) == 0) { return []; } return array_map(fn(array $row) => $this->rowToTacticInfo($row), $res); } /** * @param int $ownerId * @return TacticInfo[]|null */ public function getAllTacticSharedAccount(int $ownerId): ?array { $res = $this->con->fetch( "SELECT * FROM TacticSharedAccount WHERE id_account = :ownerId", [ ":ownerId" => [$ownerId, PDO::PARAM_INT] ] ); if (count($res) == 0) { return []; } return array_map(fn(array $row) => $this->rowToTacticInfo($row), $res); } /** * @param string $name * @param int $owner * @param CourtType $type * @return int inserted tactic id */ public function insert(string $name, int $owner, CourtType $type): int { $this->con->exec( "INSERT INTO Tactic(name, owner, court_type) VALUES(:name, :owner, :court_type)", [ ":name" => [$name, PDO::PARAM_STR], ":owner" => [$owner, PDO::PARAM_INT], ":court_type" => [$type->name(), PDO::PARAM_STR], ] ); return intval($this->con->lastInsertId()); } /** * update name of given tactic identifier * @param int $id * @param string $name * @return bool */ public function updateName(int $id, string $name): bool { $stmnt = $this->con->prepare("UPDATE Tactic SET name = :name WHERE id = :id"); $stmnt->execute([ ":name" => $name, ":id" => $id, ]); return $stmnt->rowCount() == 1; } /*** * Updates a given tactics content * @param int $id * @param string $json * @return bool */ public function updateContent(int $id, string $json): bool { $stmnt = $this->con->prepare("UPDATE Tactic SET content = :content WHERE id = :id"); $stmnt->execute([ ":content" => $json, ":id" => $id, ]); return $stmnt->rowCount() == 1; } private function rowToTacticInfo(array $row) : TacticInfo { $type = CourtType::fromName($row['court_type']); return new TacticInfo($row['id'], $row["name"], strtotime($row["creation_date"]), $row["owner"], $type, $row['content']); } }