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 array> */ public function getLast(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 $res; } /** * Get all the tactics of the owner * * @return array> */ public function getAll(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 $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; } /** * Return all the tactic of a specific folder * If the folder's id is 0, we return all tactics at the root * @param int $accountId * @param int $folderId * @return array */ public function getFolderTactic(int $accountId,int $folderId): array { if($folderId == 0){ $query = "SELECT t.* FROM Tactic t WHERE t.owner = :ownerId AND t.id NOT IN (SELECT id_tactic FROM TacticFolderLink)"; $args = ["ownerId" => [$accountId, PDO::PARAM_INT]]; }else { $query = "SELECT t.* FROM Tactic t, TacticFolderLink tfl WHERE t.owner = :ownerId AND tfl.id_tactic = :folderId"; $args = ["ownerId" => [$accountId, PDO::PARAM_INT], "folderId" => [$folderId, PDO::PARAM_INT]]; } return $this->con->fetch($query,$args); } }