From c54eb51b3569f47407ea18e2055cc455bab2fcc3 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 18 Mar 2025 23:53:43 +0100 Subject: [PATCH] WIP: revamp projects: redesign webpage --- src/pvv/side/project.php | 100 +++++++++++++++++--- src/pvv/side/projectmanager.php | 93 ++++++++++-------- src/pvv/side/social/brettspillevent.php | 16 ++-- www/prosjekt/edit.php | 58 +++++++++--- www/prosjekt/index.php | 3 +- www/prosjekt/mine.php | 120 ------------------------ 6 files changed, 194 insertions(+), 196 deletions(-) delete mode 100644 www/prosjekt/mine.php diff --git a/src/pvv/side/project.php b/src/pvv/side/project.php index 655fae9..552939e 100644 --- a/src/pvv/side/project.php +++ b/src/pvv/side/project.php @@ -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; } } diff --git a/src/pvv/side/projectmanager.php b/src/pvv/side/projectmanager.php index 77dc702..8e514ab 100644 --- a/src/pvv/side/projectmanager.php +++ b/src/pvv/side/projectmanager.php @@ -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 */ 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 - */ - 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; } } diff --git a/src/pvv/side/social/brettspillevent.php b/src/pvv/side/social/brettspillevent.php index dc7f728..8f29328 100644 --- a/src/pvv/side/social/brettspillevent.php +++ b/src/pvv/side/social/brettspillevent.php @@ -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', ]; } diff --git a/www/prosjekt/edit.php b/www/prosjekt/edit.php index 849168b..2c114a0 100644 --- a/www/prosjekt/edit.php +++ b/www/prosjekt/edit.php @@ -36,16 +36,16 @@ $project = new pvv\side\Project( $attrs['mail'][0], 1 ); -if ($new == 0) { - $project = $projectManager->getByID($projectID); - $owner = $projectManager->getProjectOwner($projectID); +// if ($new == 0) { +// $project = $projectManager->getByID($projectID); +// $maintainers = $projectManager->getProjectMaintainers($projectID); - if ($owner['uname'] != $attrs['uid'][0]) { - header('HTTP/1.0 403 Forbidden'); - echo 'wrong user'; - exit; - } -} +// if ($owner['uname'] != $attrs['uid'][0]) { +// header('HTTP/1.0 403 Forbidden'); +// echo 'wrong user'; +// exit; +// } +// } ?> @@ -74,12 +74,48 @@ if ($new == 0) {

Prosjektnavn

Gi prosjektet ditt et passende navn

-
+

Beskrivelse (markdown)

Hva går prosjektet ditt ut på?

De første to linjene blir vist på prosjektkortet, prøv å gjøre de til et fint sammendrag eller intro!

- + + +

Beskrivelse på engelsk (markdown)

+

Gjenta på engelsk

+ + +

Gitea-link

+

Link til prosjektet på Gitea

+
+ +

Issue board-link

+

Link til issue board på Gitea

+
+ +

Wiki-link

+

Link til wiki-side

+
+ +

Programmeringsspråk

+

Hvilke programmeringsspråk brukes i prosjektet?

+
+ +

Teknologier

+

Hvilke teknologier brukes i prosjektet?

+
+ +

Nøkkelord

+

Nøkkelord som beskriver prosjektet

+
+ +

Lisens

+

Hvilken lisens bruker prosjektet?

+
+ +

Logo-URL

+

Link til logo for prosjektet

+
getID() . '" />'; ?> diff --git a/www/prosjekt/index.php b/www/prosjekt/index.php index 2d3d6bd..5e832c3 100644 --- a/www/prosjekt/index.php +++ b/www/prosjekt/index.php @@ -71,7 +71,6 @@ $projects = $projectManager->getAll();
Lag prosjekt - Mine prosjekter

getAll();
requireAuth(); -$attrs = $as->getAttributes(); - -$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); -$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -$projectManager = new pvv\side\ProjectManager($pdo); -$projects = $projectManager->getByOwner($attrs['uid'][0]); - -$page = 1; -if (isset($_GET['page'])) { - $page = $_GET['page']; -} - -$filter = ''; -if (isset($_GET['filter'])) { - $filter = $_GET['filter']; -} - -// filter -$projects = array_values(array_filter( - $projects, - static fn($project) => (preg_match('/.*' . $filter . '.*/i', $project->getName()) || preg_match('/.*' . $filter . '.*/i', implode(' ', $project->getDescription()))) -)); -?> - - - - - - - - - - -Prosjektverkstedet - -
Prosjekt­verk­stedet
- - - - - -
-
-

Mine Prosjekter

- -
    - getID(); - - $owner = $projectManager->getProjectOwner($projectID); - if ($owner['uname'] != $attrs['uid'][0]) { - continue; - } - ?> - -
  • -
    -
    - -

    getName(); ?>

    -
    -

    ', array_slice($project->getDescription(), 0, 4)); ?>

    -
    -
    -
  • - - -
- - Forrige side'; - } - - if (($counter == $pageLimit) && (($pageLimit * $page) < count($projects))) { - echo 'Neste side'; - } - ?> -
- -
-

Verktøy

- Lag prosjekt -

Filter

- -

Navn

- '; ?>
- -
- -
- -
-
-