You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
4.3 KiB
159 lines
4.3 KiB
<?php
|
|
|
|
namespace IQBall\Core\Gateway;
|
|
|
|
use IQBall\Core\Connection;
|
|
use IQBall\Core\Data\CourtType;
|
|
use IQBall\Core\Data\TacticInfo;
|
|
use PDO;
|
|
|
|
class TacticInfoGateway {
|
|
private Connection $con;
|
|
|
|
/**
|
|
* @param Connection $con
|
|
*/
|
|
public function __construct(Connection $con) {
|
|
$this->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<array<string,mixed>>
|
|
*/
|
|
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<array<string,mixed>>
|
|
*/
|
|
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);
|
|
}
|
|
|
|
}
|