nettsiden/src/pvv/side/projectmanager.php
2025-03-19 16:06:14 +01:00

137 lines
3.5 KiB
PHP

<?php
declare(strict_types=1);
namespace pvv\side;
class ProjectManager {
private $pdo;
public function __construct(\PDO $pdo) {
$this->pdo = $pdo;
}
public function getAll() {
$query = 'SELECT * FROM project ORDER BY id ASC';
$statement = $this->pdo->prepare($query);
$statement->execute();
$projects = [];
foreach ($statement->fetchAll() as $dbProj) {
$project = new Project(
$dbProj['id'],
$dbProj['title'],
$dbProj['description_en'],
$dbProj['description_no'],
$dbProj['gitea_link'],
$dbProj['issue_board_link'],
$dbProj['wiki_link'],
$dbProj['languages'],
$dbProj['technologies'],
$dbProj['keywords'],
$dbProj['license'],
$dbProj['logo_url']
);
$projects[] = $project;
}
return $projects;
}
public function getByID($id) {
$query = 'SELECT * FROM project WHERE id=:id LIMIT 1';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, \PDO::PARAM_INT);
$statement->execute();
$dbProj = $statement->fetch();
if (!$dbProj) {
return false;
}
return new Project(
$dbProj['id'],
$dbProj['title'],
$dbProj['description_en'],
$dbProj['description_no'],
$dbProj['gitea_link'],
$dbProj['issue_board_link'],
$dbProj['wiki_link'],
$dbProj['languages'],
$dbProj['technologies'],
$dbProj['keywords'],
$dbProj['license'],
$dbProj['logo_url']
);
}
public function getByOwner($uname) {
$query = '
SELECT projectid FROM project
JOIN project__project_maintainer ON project.id = project__project_maintainer.project_id
JOIN project_maintainer ON project__project_maintainer.uname = project_maintainer.uname
WHERE project_maintainer.uname = :uname
';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
$statement->execute();
$projectIDs = $statement->fetchAll();
$projects = [];
foreach ($projectIDs as $id) {
$id = $id['projectid'];
$query = 'SELECT * FROM projects WHERE id=:id';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, \PDO::PARAM_INT);
$statement->execute();
foreach ($statement->fetchAll() as $dbProj) {
$project = new Project(
$dbProj['id'],
$dbProj['title'],
$dbProj['description_en'],
$dbProj['description_no'],
$dbProj['gitea_link'],
$dbProj['issue_board_link'],
$dbProj['wiki_link'],
$dbProj['languages'],
$dbProj['technologies'],
$dbProj['keywords'],
$dbProj['license'],
$dbProj['logo_url']
);
$projects[] = $project;
}
}
return $projects;
}
public function getProjectMaintainers($id) {
$query = '
SELECT id FROM project
JOIN project__project_maintainer ON project.id = project__project_maintainer.project_id
JOIN project_maintainer ON project__project_maintainer.uname = project_maintainer.uname
WHERE project.id = :id
';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
$statement->execute();
$maintainers = [];
foreach ($statement->fetchAll() as $dbUsr) {
$maintainers[] = [
'name' => $dbUsr['name'],
'uname' => $dbUsr['uname'],
'link' => $dbOwner['link'],
'mail' => $dbUsr['mail'],
];
}
return maintainers;
}
}