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.
103 lines
2.9 KiB
103 lines
2.9 KiB
<?php
|
|
|
|
namespace IQBall\Core\Gateway;
|
|
|
|
use IQBall\Core\Connection;
|
|
use IQBall\Core\Data\Member;
|
|
use IQBall\Core\Data\User;
|
|
use PDO;
|
|
|
|
class MemberGateway {
|
|
private Connection $con;
|
|
|
|
/**
|
|
* @param Connection $con
|
|
*/
|
|
public function __construct(Connection $con) {
|
|
$this->con = $con;
|
|
}
|
|
|
|
/**
|
|
* insert member to a team
|
|
* @param int $idTeam
|
|
* @param int $userId
|
|
* @param string $role
|
|
* @return void
|
|
*/
|
|
public function insert(int $idTeam, int $userId, string $role): void {
|
|
$this->con->exec(
|
|
"INSERT INTO Member(id_team, id_user, role) VALUES (:id_team, :id_user, :role)",
|
|
[
|
|
":id_team" => [$idTeam, PDO::PARAM_INT],
|
|
":id_user" => [$userId, PDO::PARAM_INT],
|
|
":role" => [$role, PDO::PARAM_STR],
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param int $teamId
|
|
* @return Member[]
|
|
*/
|
|
public function getMembersOfTeam(int $teamId): array {
|
|
$rows = $this->con->fetch(
|
|
"SELECT a.id,a.email,a.username,a.profilePicture,m.role FROM Account a,Team t,Member m WHERE t.id = :id AND m.id_team = t.id AND m.id_user = a.id",
|
|
[
|
|
":id" => [$teamId, PDO::PARAM_INT],
|
|
]
|
|
);
|
|
return array_map(fn($row) => new Member(new User($row['email'],$row['username'],$row['id'],$row['profilePicture']), $teamId, $row['role']),$rows);
|
|
}
|
|
|
|
/**
|
|
* remove member from given team
|
|
* @param int $idTeam
|
|
* @param int $idMember
|
|
* @return void
|
|
*/
|
|
public function remove(int $idTeam, int $idMember): void {
|
|
$this->con->exec(
|
|
"DELETE FROM Member WHERE id_team = :id_team AND id_user = :id_user",
|
|
[
|
|
":id_team" => [$idTeam, PDO::PARAM_INT],
|
|
":id_user" => [$idMember, PDO::PARAM_INT],
|
|
]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param string $email
|
|
* @param int $idTeam
|
|
* @return bool
|
|
*/
|
|
public function isCoach(string $email, int $idTeam): bool {
|
|
$result = $this->con->fetch(
|
|
"SELECT role FROM Member WHERE id_team=:team AND id_user = (SELECT id FROM Account WHERE email=:email)",
|
|
[
|
|
"team" => [$idTeam, PDO::PARAM_INT],
|
|
"email" => [$email, PDO::PARAM_STR]
|
|
]
|
|
)[0]['role'];
|
|
|
|
return $result == 'COACH';
|
|
}
|
|
|
|
/**
|
|
* @param int $idTeam
|
|
* @param int $idCurrentUser
|
|
* @return bool
|
|
*/
|
|
public function isMemberOfTeam(int $idTeam,int $idCurrentUser): bool {
|
|
$result = $this->con->fetch(
|
|
"SELECT id_user FROM Member WHERE id_team = :team AND id_user = :user",
|
|
[
|
|
"team" => [$idTeam, PDO::PARAM_INT],
|
|
"user" => [$idCurrentUser, PDO::PARAM_INT]
|
|
]
|
|
)[0]['id_user'] ?? null;
|
|
return $result == null;
|
|
}
|
|
|
|
|
|
}
|