WIP: revamp projects: redesign webpage

This commit is contained in:
2025-03-18 23:53:43 +01:00
parent be1cedade7
commit bc57216254
6 changed files with 194 additions and 196 deletions

View File

@@ -6,35 +6,105 @@ namespace pvv\side;
class Project {
private int $id;
private string $name;
private array $descr;
private bool $active;
private string $title;
private array $description_en;
private array $description_no;
private ?string $gitea_link;
private ?string $issue_board_link;
private ?string $wiki_link;
private array $programming_languages;
private array $technologies;
private array $keywords;
// NOTE: spdx identifier
private ?string $license;
private ?string $logo_url;
public function __construct(
int $id,
string $name,
string $descr,
bool $active,
string $title,
?string $description_en,
?string $description_no,
?string $gitea_link,
?string $issue_board_link,
?string $wiki_link,
?string $programming_languages,
?string $technologies,
?string $keywords,
?string $license,
?string $logo_url,
) {
$this->id = $id;
$this->name = $name;
$this->descr = explode("\n", $descr);
$this->active = $active;
$this->title = $title;
$this->description_en
= $description_en === null || $description_en === ''
? []
: explode("\n", $description_en);
$this->description_no
= $description_no === null || $description_no === ''
? []
: explode("\n", $description_no);
$this->gitea_link = $gitea_link;
$this->issue_board_link = $issue_board_link;
$this->wiki_link = $wiki_link;
$this->programming_languages
= $programming_languages === null || $programming_languages === ''
? []
: explode(',', $programming_languages);
$this->technologies
= $technologies === null || $technologies === ''
? []
: explode(',', $technologies);
$this->keywords
= $keywords === null || $keywords === '' ? [] : explode(',', $keywords);
$this->license = $license;
$this->logo_url = $logo_url;
}
public function getID(): int {
return $this->id;
}
public function getName(): string {
return $this->name;
public function getTitle(): string {
return $this->title;
}
public function getDescription(): array {
return $this->descr;
public function getDescriptionEn(): array {
return $this->description_en;
}
public function getActive(): bool {
return $this->active;
public function getDescriptionNo(): array {
return $this->description_no;
}
public function getGiteaLink(): ?string {
return $this->gitea_link;
}
public function getIssueBoardLink(): ?string {
return $this->issue_board_link;
}
public function getWikiLink(): ?string {
return $this->wiki_link;
}
public function getProgrammingLanguages(): array {
return $this->programming_languages;
}
public function getTechnologies(): array {
return $this->technologies;
}
public function getKeywords(): array {
return $this->keywords;
}
public function getLicense(): ?string {
return $this->license;
}
public function getLogoURL(): ?string {
return $this->logo_url;
}
}

View File

@@ -15,7 +15,7 @@ class ProjectManager {
* @return Project[]
*/
public function getAll(): array {
$query = 'SELECT * FROM projects ORDER BY id ASC';
$query = 'SELECT * FROM project ORDER BY id ASC';
$statement = $this->pdo->prepare($query);
$statement->execute();
@@ -23,9 +23,17 @@ class ProjectManager {
foreach ($statement->fetchAll() as $dbProj) {
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active'],
$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;
}
@@ -34,7 +42,7 @@ class ProjectManager {
}
public function getByID(int $id): ?Project {
$query = 'SELECT * FROM projects WHERE id=:id LIMIT 1';
$query = 'SELECT * FROM project WHERE id=:id LIMIT 1';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, \PDO::PARAM_INT);
$statement->execute();
@@ -46,9 +54,17 @@ class ProjectManager {
return new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active'],
$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']
);
}
@@ -56,7 +72,13 @@ class ProjectManager {
* @return Project[]
*/
public function getByOwner(string $uname): array {
$query = 'SELECT projectid FROM projectmembers WHERE uname=: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();
@@ -74,9 +96,17 @@ class ProjectManager {
foreach ($statement->fetchAll() as $dbProj) {
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active'],
$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;
}
@@ -89,44 +119,27 @@ class ProjectManager {
* @return array<int,array>
*/
public function getProjectMembers(int $id): array {
$query = 'SELECT * FROM projectmembers WHERE projectid=: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();
$members = [];
$maintainers = [];
foreach ($statement->fetchAll() as $dbUsr) {
$members[] = [
$maintainers[] = [
'name' => $dbUsr['name'],
'uname' => $dbUsr['uname'],
'link' => $dbUsr['link'],
'mail' => $dbUsr['mail'],
'role' => $dbUsr['role'],
'lead' => $dbUsr['lead'],
'owner' => $dbUsr['owner'],
];
}
return $members;
}
/**
* @return array<string,mixed>
*/
public function getProjectOwner(int $id): array {
$query = 'SELECT * FROM projectmembers WHERE (projectid=:id AND owner=1)';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
$statement->execute();
$dbOwner = $statement->fetch();
return [
'name' => $dbOwner['name'],
'uname' => $dbOwner['uname'],
'mail' => $dbOwner['mail'],
'role' => $dbOwner['role'],
'lead' => $dbOwner['lead'],
'owner' => $dbOwner['owner'],
];
return $maintainers;
}
}

View File

@@ -39,22 +39,22 @@ class BrettspillEvent extends Event {
'',
'## Vår samling',
'',
'* Dominion\\*',
'* Dominion\*',
'* Three cheers for master',
'* Avalon',
'* Hanabi',
'* Cards aginst humanity\\*',
'* Cards aginst humanity\*',
'* Citadels',
'* Munchkin\\*\\*',
'* Exploding kittens\\*\\*',
'* Munchkin\*\*',
'* Exploding kittens\*\*',
'* Aye dark overlord',
'* Settlers of catan\\*',
'* Risk\\*\\*',
'* Settlers of catan\*',
'* Risk\*\*',
'* og mange flere...',
'',
'\\* Vi har flere ekspansjoner til spillet',
'\* Vi har flere ekspansjoner til spillet',
'',
'\\*\\* Vi har flere varianter av spillet',
'\*\* Vi har flere varianter av spillet',
];
}