Compare commits
9 Commits
the-format
...
revamp-pro
Author | SHA1 | Date | |
---|---|---|---|
47d5f24690
|
|||
0f37f3f264
|
|||
c3d8ce017d
|
|||
02cfe9feaa
|
|||
4d4ec78ea3
|
|||
a74ea31356
|
|||
0653672a17
|
|||
8a1ff1a265
|
|||
c1802e7cf2
|
@@ -51,7 +51,6 @@ return (new PhpCsFixer\Config())
|
|||||||
|
|
||||||
// TODO: fix these
|
// TODO: fix these
|
||||||
'psr_autoloading' => false,
|
'psr_autoloading' => false,
|
||||||
'strict_comparison' => false,
|
|
||||||
])
|
])
|
||||||
->setFinder($finder)
|
->setFinder($finder)
|
||||||
->setIndent(" ")
|
->setIndent(" ")
|
||||||
|
50
dist/pvv.sql
vendored
50
dist/pvv.sql
vendored
@@ -1,50 +0,0 @@
|
|||||||
CREATE TABLE "events" (
|
|
||||||
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"name" TEXT,
|
|
||||||
"start" TEXT,
|
|
||||||
"stop" TEXT,
|
|
||||||
"organiser" TEXT,
|
|
||||||
"location" TEXT,
|
|
||||||
"description" TEXT
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "projects" (
|
|
||||||
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"name" TEXT,
|
|
||||||
"description" TEXT,
|
|
||||||
"active" BOOLEAN
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "projectmembers" (
|
|
||||||
"projectid" INTEGER,
|
|
||||||
"name" TEXT,
|
|
||||||
"uname" TEXT,
|
|
||||||
"mail" TEXT,
|
|
||||||
"role" TEXT,
|
|
||||||
"lead" BOOLEAN DEFAULT 0,
|
|
||||||
"owner" BOOLEAN DEFAULT 0
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "users" (
|
|
||||||
"uname" TEXT,
|
|
||||||
"groups" INT DEFAULT 0
|
|
||||||
);
|
|
||||||
|
|
||||||
CREATE TABLE "motd" (
|
|
||||||
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
"title" TEXT,
|
|
||||||
"content" TEXT
|
|
||||||
);
|
|
||||||
INSERT INTO motd (title, content)
|
|
||||||
VALUES ('MOTD ./dev.sh', 'du kan endre motd i admin panelet');
|
|
||||||
|
|
||||||
CREATE TABLE "door" (
|
|
||||||
"time" INTEGER PRIMARY KEY,
|
|
||||||
"open" BOOLEAN
|
|
||||||
);
|
|
||||||
INSERT INTO door (time, open)
|
|
||||||
VALUES (0, FALSE);
|
|
||||||
|
|
||||||
|
|
||||||
INSERT INTO users (uname, groups)
|
|
||||||
VALUES ('min_test_bruker', 1);
|
|
78
dist/pvv_mysql.sql
vendored
78
dist/pvv_mysql.sql
vendored
@@ -1,47 +1,63 @@
|
|||||||
CREATE TABLE events (
|
CREATE TABLE events (
|
||||||
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||||
`name` TEXT,
|
`name` TEXT,
|
||||||
`start` TEXT,
|
`start` TEXT,
|
||||||
`stop` TEXT,
|
`stop` TEXT,
|
||||||
`organiser` TEXT,
|
`organiser` TEXT,
|
||||||
`location` TEXT,
|
`location` TEXT,
|
||||||
`description` TEXT
|
`description` TEXT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE projects (
|
CREATE TABLE project_group (
|
||||||
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||||
`name` TEXT,
|
`title` TEXT NOT NULL,
|
||||||
`description` TEXT,
|
`description_en` TEXT NOT NULL,
|
||||||
`active` BOOLEAN
|
`description_no` TEXT NOT NULL,
|
||||||
|
`gitea_link` TEXT NOT NULL,
|
||||||
|
`wiki_link` TEXT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE projectmembers (
|
CREATE TABLE project (
|
||||||
`projectid` INTEGER,
|
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||||
`name` TEXT,
|
`group_id` INTEGER NOT NULL REFERENCES project_group (id),
|
||||||
`uname` TEXT,
|
`title` TEXT NOT NULL,
|
||||||
`mail` TEXT,
|
`description_en` TEXT NOT NULL,
|
||||||
`role` TEXT,
|
`description_no` TEXT NOT NULL,
|
||||||
`lead` BOOLEAN DEFAULT 0,
|
`gitea_link` TEXT NOT NULL,
|
||||||
`owner` BOOLEAN DEFAULT 0
|
`issue_board_link` TEXT NOT NULL,
|
||||||
|
`wiki_link` TEXT,
|
||||||
|
`languages` TEXT,
|
||||||
|
`technologies` TEXT,
|
||||||
|
`keywords` TEXT,
|
||||||
|
`license` TEXT,
|
||||||
|
`logo_url` TEXT,
|
||||||
|
FOREIGN KEY (group_id) REFERENCES project_group (id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE users (
|
CREATE TABLE project_maintainer (
|
||||||
`uname` TEXT,
|
`uname` TEXT PRIMARY KEY,
|
||||||
`groups` INT DEFAULT 0
|
`name` TEXT NOT NULL,
|
||||||
|
`link` TEXT NOT NULL,
|
||||||
|
`mail` TEXT NOT NULL,
|
||||||
|
FOREIGN KEY (project_id) REFERENCES project (id),
|
||||||
|
FOREIGN KEY (uname) REFERENCES maintainer (uname),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE users (`uname` TEXT, `groups` INT DEFAULT 0);
|
||||||
|
|
||||||
CREATE TABLE motd (
|
CREATE TABLE motd (
|
||||||
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||||
`title` TEXT,
|
`title` TEXT,
|
||||||
`content` TEXT
|
`content` TEXT
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
INSERT INTO motd (title, content)
|
INSERT INTO motd (title, content)
|
||||||
VALUES ("MOTD ./dev.sh", "du kan endre motd i admin panelet");
|
VALUES ("MOTD ./dev.sh", "du kan endre motd i admin panelet");
|
||||||
*/
|
*/
|
||||||
|
CREATE TABLE door (`time` INTEGER PRIMARY KEY, `open` BOOLEAN);
|
||||||
|
|
||||||
CREATE TABLE door (
|
INSERT INTO
|
||||||
`time` INTEGER PRIMARY KEY,
|
door (time, open)
|
||||||
`open` BOOLEAN
|
VALUES
|
||||||
);
|
(0, FALSE);
|
||||||
INSERT INTO door(time, open) VALUES (0, FALSE);
|
|
||||||
|
75
dist/pvv_sqlite.sql
vendored
Normal file
75
dist/pvv_sqlite.sql
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
CREATE TABLE "events" (
|
||||||
|
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
"name" TEXT,
|
||||||
|
"start" TEXT,
|
||||||
|
"stop" TEXT,
|
||||||
|
"organiser" TEXT,
|
||||||
|
"location" TEXT,
|
||||||
|
"description" TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project_group" (
|
||||||
|
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
"title" TEXT NOT NULL,
|
||||||
|
"description_en" TEXT NOT NULL,
|
||||||
|
"description_no" TEXT NOT NULL,
|
||||||
|
"gitea_link" TEXT NOT NULL,
|
||||||
|
"wiki_link" TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project" (
|
||||||
|
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
"group_id" INTEGER NOT NULL REFERENCES project_group (id),
|
||||||
|
"title" TEXT NOT NULL,
|
||||||
|
"description_en" TEXT NOT NULL,
|
||||||
|
"description_no" TEXT NOT NULL,
|
||||||
|
"gitea_link" TEXT NOT NULL,
|
||||||
|
"issue_board_link" TEXT NOT NULL,
|
||||||
|
"wiki_link" TEXT,
|
||||||
|
"languages" TEXT,
|
||||||
|
"technologies" TEXT,
|
||||||
|
"keywords" TEXT,
|
||||||
|
"license" TEXT,
|
||||||
|
"logo_url" TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project_maintainer" (
|
||||||
|
"uname" TEXT PRIMARY KEY,
|
||||||
|
"name" TEXT NOT NULL,
|
||||||
|
"link" TEXT NOT NULL,
|
||||||
|
"mail" TEXT NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "project__project_maintainer" (
|
||||||
|
"project_id" INTEGER REFERENCES project (id),
|
||||||
|
"uname" TEXT REFERENCES maintainer (uname),
|
||||||
|
PRIMARY KEY (project_id, uname)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "users" ("uname" TEXT, "groups" INT DEFAULT 0);
|
||||||
|
|
||||||
|
CREATE TABLE "motd" (
|
||||||
|
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
"title" TEXT,
|
||||||
|
"content" TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
motd (title, content)
|
||||||
|
VALUES
|
||||||
|
(
|
||||||
|
'MOTD ./dev.sh',
|
||||||
|
'du kan endre motd i admin panelet'
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE "door" ("time" INTEGER PRIMARY KEY, "open" BOOLEAN);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
door (time, open)
|
||||||
|
VALUES
|
||||||
|
(0, FALSE);
|
||||||
|
|
||||||
|
INSERT INTO
|
||||||
|
users (uname, groups)
|
||||||
|
VALUES
|
||||||
|
('min_test_bruker', 1);
|
@@ -18,7 +18,7 @@ function navbar($depth, $active = null) {
|
|||||||
];
|
];
|
||||||
foreach ($menuItems as $caption => $link) {
|
foreach ($menuItems as $caption => $link) {
|
||||||
$isActive = $active === $link;
|
$isActive = $active === $link;
|
||||||
if (substr($link, 0, 4) != 'http') {
|
if (substr($link, 0, 4) !== 'http') {
|
||||||
$link = rtrim(str_repeat('../', $depth) . $link, '/') . '/';
|
$link = rtrim(str_repeat('../', $depth) . $link, '/') . '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
{ pkgs }:
|
{ pkgs, lib }:
|
||||||
let
|
let
|
||||||
phpEnv = pkgs.php84.buildEnv {
|
phpEnv = pkgs.php84.buildEnv {
|
||||||
extensions = { enabled, all }: enabled ++ (with all; [ iconv mbstring pdo_mysql pdo_sqlite ]);
|
extensions = { enabled, all }: enabled ++ (with all; [ iconv mbstring pdo_mysql pdo_sqlite ]);
|
||||||
@@ -11,20 +11,21 @@ pkgs.mkShellNoCC {
|
|||||||
php84Packages.php-parallel-lint
|
php84Packages.php-parallel-lint
|
||||||
php84Packages.php-cs-fixer
|
php84Packages.php-cs-fixer
|
||||||
sqlite-interactive
|
sqlite-interactive
|
||||||
|
sql-formatter
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# Prepare dev environment with sqlite and config files
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
alias runDev='php -S localhost:1080 -d error_reporting=E_ALL -d display_errors=1 -t www/'
|
alias runDev='php -S localhost:1080 -d error_reporting=E_ALL -d display_errors=1 -t www/'
|
||||||
|
|
||||||
# Prepare dev environment with sqlite and config files
|
declare -a PROJECT_ROOT="$("${lib.getExe pkgs.git}" rev-parse --show-toplevel)"
|
||||||
test -e pvv.sqlite || sqlite3 pvv.sqlite < dist/pvv.sql
|
|
||||||
test -e config.php || cp -v dist/config.local.php config.php
|
|
||||||
|
|
||||||
|
mkdir -p "$PROJECT_ROOT/www/galleri/bilder/slideshow"
|
||||||
|
test -e "$PROJECT_ROOT/pvv.sqlite" || sqlite3 "$PROJECT_ROOT/pvv.sqlite" < "$PROJECT_ROOT/dist/pvv_sqlite.sql"
|
||||||
|
test -e "$PROJECT_ROOT/config.php" || cp -v "$PROJECT_ROOT/dist/config.local.php" "$PROJECT_ROOT/config.php"
|
||||||
|
|
||||||
if [ ! -d www/galleri/bilder/slideshow ] ; then
|
if [ ! -d "$PROJECT_ROOT/vendor" ] ; then
|
||||||
mkdir -p www/galleri/bilder/slideshow
|
pushd "$PROJECT_ROOT"
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d vendor ] ; then
|
|
||||||
composer install || exit $?
|
composer install || exit $?
|
||||||
|
|
||||||
cp dist/simplesamlphp-authsources.php vendor/simplesamlphp/simplesamlphp/config/authsources.php
|
cp dist/simplesamlphp-authsources.php vendor/simplesamlphp/simplesamlphp/config/authsources.php
|
||||||
@@ -34,6 +35,7 @@ pkgs.mkShellNoCC {
|
|||||||
cp dist/config.local.php config.php
|
cp dist/config.local.php config.php
|
||||||
|
|
||||||
ln -s ../vendor/simplesamlphp/simplesamlphp/public/ www/simplesaml
|
ln -s ../vendor/simplesamlphp/simplesamlphp/public/ www/simplesaml
|
||||||
|
popd "$PROJECT_ROOT"
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
@@ -98,7 +98,7 @@ class UserManager {
|
|||||||
$statement->execute();
|
$statement->execute();
|
||||||
|
|
||||||
$row = $statement->fetch();
|
$row = $statement->fetch();
|
||||||
if ($row == false) {
|
if ($row === false) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,30 +6,91 @@ namespace pvv\side;
|
|||||||
|
|
||||||
class Project {
|
class Project {
|
||||||
private $id;
|
private $id;
|
||||||
private $name;
|
private $title;
|
||||||
private $descr;
|
private $descrition_en;
|
||||||
private $active;
|
private $description_no;
|
||||||
|
private $gitea_link;
|
||||||
|
private $issue_board_link;
|
||||||
|
private $wiki_link;
|
||||||
|
private $languages;
|
||||||
|
private $technologies;
|
||||||
|
private $keywords;
|
||||||
|
private $license;
|
||||||
|
private $logo_url;
|
||||||
|
|
||||||
public function __construct($id, $name, $descr, $active) {
|
public function __construct(
|
||||||
|
int $id,
|
||||||
|
string $title,
|
||||||
|
string $description_en,
|
||||||
|
string $description_no,
|
||||||
|
string $gitea_link,
|
||||||
|
string $issue_board_link,
|
||||||
|
string $wiki_link,
|
||||||
|
string $languages,
|
||||||
|
string $technologies,
|
||||||
|
string $keywords,
|
||||||
|
string $license,
|
||||||
|
string $logo_url
|
||||||
|
) {
|
||||||
$this->id = $id;
|
$this->id = $id;
|
||||||
$this->name = $name;
|
$this->title = $title;
|
||||||
$this->descr = explode("\n", $descr);
|
$this->description_en = explode("\n", $description_en);
|
||||||
$this->active = $active;
|
$this->description_no = explode("\n", $description_no);
|
||||||
|
$this->gitea_link = $gitea_link;
|
||||||
|
$this->issue_board_link = $issue_board_link;
|
||||||
|
$this->wiki_link = $wiki_link;
|
||||||
|
$this->languages = $languages;
|
||||||
|
$this->technologies = $technologies;
|
||||||
|
$this->keywords = $keywords;
|
||||||
|
$this->license = $license;
|
||||||
|
$this->logo_url = $logo_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getID() {
|
public function getID() {
|
||||||
return $this->id;
|
return $this->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName() {
|
public function getTitle() {
|
||||||
return $this->name;
|
return $this->title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDescription() {
|
public function getDescriptionEn() {
|
||||||
return $this->descr;
|
return $this->description_en;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getActive() {
|
public function getDescriptionNo() {
|
||||||
return $this->active;
|
return $this->description_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGiteaLink() {
|
||||||
|
return $this->gitea_link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIssueBoardLink() {
|
||||||
|
return $this->issue_board_link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getWikiLink() {
|
||||||
|
return $this->wiki_link;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLanguages() {
|
||||||
|
return $this->languages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTechnologies() {
|
||||||
|
return $this->technologies;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKeywords() {
|
||||||
|
return $this->keywords;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLicense() {
|
||||||
|
return $this->license;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogoURL() {
|
||||||
|
return $this->logo_url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ class ProjectManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getAll() {
|
public function getAll() {
|
||||||
$query = 'SELECT * FROM projects ORDER BY id ASC';
|
$query = 'SELECT * FROM project ORDER BY id ASC';
|
||||||
$statement = $this->pdo->prepare($query);
|
$statement = $this->pdo->prepare($query);
|
||||||
$statement->execute();
|
$statement->execute();
|
||||||
|
|
||||||
@@ -20,9 +20,17 @@ class ProjectManager {
|
|||||||
foreach ($statement->fetchAll() as $dbProj) {
|
foreach ($statement->fetchAll() as $dbProj) {
|
||||||
$project = new Project(
|
$project = new Project(
|
||||||
$dbProj['id'],
|
$dbProj['id'],
|
||||||
$dbProj['name'],
|
$dbProj['title'],
|
||||||
$dbProj['description'],
|
$dbProj['description_en'],
|
||||||
$dbProj['active']
|
$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;
|
$projects[] = $project;
|
||||||
}
|
}
|
||||||
@@ -31,7 +39,7 @@ class ProjectManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function getByID($id) {
|
public function getByID($id) {
|
||||||
$query = 'SELECT * FROM projects WHERE id=:id LIMIT 1';
|
$query = 'SELECT * FROM project WHERE id=:id LIMIT 1';
|
||||||
$statement = $this->pdo->prepare($query);
|
$statement = $this->pdo->prepare($query);
|
||||||
$statement->bindParam(':id', $id, \PDO::PARAM_INT);
|
$statement->bindParam(':id', $id, \PDO::PARAM_INT);
|
||||||
$statement->execute();
|
$statement->execute();
|
||||||
@@ -43,14 +51,28 @@ class ProjectManager {
|
|||||||
|
|
||||||
return new Project(
|
return new Project(
|
||||||
$dbProj['id'],
|
$dbProj['id'],
|
||||||
$dbProj['name'],
|
$dbProj['title'],
|
||||||
$dbProj['description'],
|
$dbProj['description_en'],
|
||||||
$dbProj['active']
|
$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) {
|
public function getByOwner($uname) {
|
||||||
$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 = $this->pdo->prepare($query);
|
||||||
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
|
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
|
||||||
$statement->execute();
|
$statement->execute();
|
||||||
@@ -68,9 +90,17 @@ class ProjectManager {
|
|||||||
foreach ($statement->fetchAll() as $dbProj) {
|
foreach ($statement->fetchAll() as $dbProj) {
|
||||||
$project = new Project(
|
$project = new Project(
|
||||||
$dbProj['id'],
|
$dbProj['id'],
|
||||||
$dbProj['name'],
|
$dbProj['title'],
|
||||||
$dbProj['description'],
|
$dbProj['description_en'],
|
||||||
$dbProj['active']
|
$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;
|
$projects[] = $project;
|
||||||
}
|
}
|
||||||
@@ -79,42 +109,28 @@ class ProjectManager {
|
|||||||
return $projects;
|
return $projects;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getProjectMembers($id) {
|
public function getProjectMaintainers($id) {
|
||||||
$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 = $this->pdo->prepare($query);
|
||||||
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
|
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
|
||||||
$statement->execute();
|
$statement->execute();
|
||||||
|
|
||||||
$members = [];
|
$maintainers = [];
|
||||||
foreach ($statement->fetchAll() as $dbUsr) {
|
foreach ($statement->fetchAll() as $dbUsr) {
|
||||||
$members[] = [
|
$maintainers[] = [
|
||||||
'name' => $dbUsr['name'],
|
'name' => $dbUsr['name'],
|
||||||
'uname' => $dbUsr['uname'],
|
'uname' => $dbUsr['uname'],
|
||||||
|
'link' => $dbOwner['link'],
|
||||||
'mail' => $dbUsr['mail'],
|
'mail' => $dbUsr['mail'],
|
||||||
'role' => $dbUsr['role'],
|
|
||||||
'lead' => $dbUsr['lead'],
|
|
||||||
'owner' => $dbUsr['owner'],
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $members;
|
return maintainers;
|
||||||
}
|
|
||||||
|
|
||||||
public function getProjectOwner($id) {
|
|
||||||
$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'],
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,11 +8,11 @@ use pvv\side\Activity;
|
|||||||
|
|
||||||
class AnimekveldActivity implements Activity {
|
class AnimekveldActivity implements Activity {
|
||||||
public function nextDate(\DateTimeImmutable $date) {
|
public function nextDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') > 20 || $date->format('H') == 19 && $date->format('i') > 30) {
|
if (intval($date->format('H')) > 20 || intval($date->format('H')) === 19 && intval($date->format('i')) > 30) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(19, 30, 0));
|
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(19, 30, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(19, 30, 0);
|
$date = $date->setTime(19, 30, 0);
|
||||||
if ($date->format('N') != 5) {
|
if (intval($date->format('N')) !== 5) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,11 +20,11 @@ class AnimekveldActivity implements Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function prevDate(\DateTimeImmutable $date) {
|
public function prevDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') < 19 || $date->format('H') == 20 && $date->format('i') < 30) {
|
if (intval($date->format('H')) < 19 || intval($date->format('H')) === 20 && intval($date->format('i')) < 30) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(19, 30, 0));
|
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(19, 30, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(19, 30, 0);
|
$date = $date->setTime(19, 30, 0);
|
||||||
if ($date->format('N') != 5) {
|
if (intval($date->format('N')) !== 5) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,14 +8,14 @@ use pvv\side\Activity;
|
|||||||
|
|
||||||
class BrettspillActivity implements Activity {
|
class BrettspillActivity implements Activity {
|
||||||
public function nextDate(\DateTimeImmutable $date) {
|
public function nextDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') > 17 || $date->format('H') == 16 && $date->format('i') > 15) {
|
if (intval($date->format('H')) > 17 || intval($date->format('H')) === 16 && intval($date->format('i')) > 15) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(16, 15, 0));
|
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(16, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(16, 15, 0);
|
$date = $date->setTime(16, 15, 0);
|
||||||
if ($date->format('N') != 7) {
|
if (intval($date->format('N')) !== 7) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2 - 1) {
|
if (intval($date->format('W')) % 2 - 1) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,14 +23,14 @@ class BrettspillActivity implements Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function prevDate(\DateTimeImmutable $date) {
|
public function prevDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') < 16 || $date->format('H') == 17 && $date->format('i') < 15) {
|
if (intval($date->format('H')) < 16 || intval($date->format('H')) === 17 && intval($date->format('i')) < 15) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(16, 15, 0));
|
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(16, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(16, 15, 0);
|
$date = $date->setTime(16, 15, 0);
|
||||||
if ($date->format('N') != 7) {
|
if (intval($date->format('N')) !== 7) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2 - 1) {
|
if (intval($date->format('W')) % 2 - 1) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,14 +8,14 @@ use pvv\side\Activity;
|
|||||||
|
|
||||||
class DriftkveldActivity implements Activity {
|
class DriftkveldActivity implements Activity {
|
||||||
public function nextDate(\DateTimeImmutable $date) {
|
public function nextDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') > 18 || $date->format('H') == 17 && $date->format('i') > 30) {
|
if (intval($date->format('H')) > 18 || intval($date->format('H')) === 17 && intval($date->format('i')) > 30) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(18, 15, 0);
|
$date = $date->setTime(18, 15, 0);
|
||||||
if ($date->format('N') != 6) {
|
if (intval($date->format('N')) !== 6) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2 - 1) {
|
if (intval($date->format('W')) % 2 - 1) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,14 +23,14 @@ class DriftkveldActivity implements Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function prevDate(\DateTimeImmutable $date) {
|
public function prevDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') < 17 || $date->format('H') == 18 && $date->format('i') < 30) {
|
if (intval($date->format('H')) < 17 || intval($date->format('H')) === 18 && intval($date->format('i')) < 30) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(18, 15, 0);
|
$date = $date->setTime(18, 15, 0);
|
||||||
if ($date->format('N') != 6) {
|
if (intval($date->format('N')) !== 6) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2 - 1) {
|
if (intval($date->format('W')) % 2 - 1) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,14 +8,14 @@ use pvv\side\Activity;
|
|||||||
|
|
||||||
class HackekveldActivity implements Activity {
|
class HackekveldActivity implements Activity {
|
||||||
public function nextDate(\DateTimeImmutable $date) {
|
public function nextDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') > 18 || $date->format('H') == 17 && $date->format('i') > 30) {
|
if (intval($date->format('H')) > 18 || intval($date->format('H')) === 17 && intval($date->format('i')) > 30) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(16, 15, 0);
|
$date = $date->setTime(16, 15, 0);
|
||||||
if ($date->format('N') != 6) {
|
if (intval($date->format('N')) !== 6) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2) {
|
if (intval($date->format('W')) % 2) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,14 +23,14 @@ class HackekveldActivity implements Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function prevDate(\DateTimeImmutable $date) {
|
public function prevDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') < 17 || $date->format('H') == 18 && $date->format('i') < 30) {
|
if (intval($date->format('H')) < 17 || intval($date->format('H')) === 18 && intval($date->format('i')) < 30) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(18, 15, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(18, 15, 0);
|
$date = $date->setTime(18, 15, 0);
|
||||||
if ($date->format('N') != 6) {
|
if (intval($date->format('N')) !== 6) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2) {
|
if (intval($date->format('W')) % 2) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,14 +8,14 @@ use pvv\side\Activity;
|
|||||||
|
|
||||||
class NerdepitsaActivity implements Activity {
|
class NerdepitsaActivity implements Activity {
|
||||||
public function nextDate(\DateTimeImmutable $date) {
|
public function nextDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') > 19) {
|
if (intval($date->format('H')) > 19) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(19, 0, 0));
|
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(19, 0, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(19, 0, 0);
|
$date = $date->setTime(19, 0, 0);
|
||||||
if ($date->format('N') != 5) {
|
if (intval($date->format('N')) !== 5) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
return $this->nextDate($date->add(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2) {
|
if (intval($date->format('W')) % 2) {
|
||||||
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
return $this->nextDate($date->add(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,14 +23,14 @@ class NerdepitsaActivity implements Activity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function prevDate(\DateTimeImmutable $date) {
|
public function prevDate(\DateTimeImmutable $date) {
|
||||||
if ($date->format('H') < 19) {
|
if (intval($date->format('H')) < 19) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(19, 0, 0));
|
return $this->prevDate($date->sub(new \DateInterval('P1D'))->setTime(19, 0, 0));
|
||||||
}
|
}
|
||||||
$date = $date->setTime(19, 0, 0);
|
$date = $date->setTime(19, 0, 0);
|
||||||
if ($date->format('N') != 5) {
|
if (intval($date->format('N')) !== 5) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
return $this->prevDate($date->sub(new \DateInterval('P1D')));
|
||||||
}
|
}
|
||||||
if ($date->format('W') % 2) {
|
if (intval($date->format('W')) % 2) {
|
||||||
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
return $this->prevDate($date->sub(new \DateInterval('P7D')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -36,16 +36,16 @@ $project = new pvv\side\Project(
|
|||||||
$attrs['mail'][0],
|
$attrs['mail'][0],
|
||||||
1
|
1
|
||||||
);
|
);
|
||||||
if ($new == 0) {
|
// if ($new == 0) {
|
||||||
$project = $projectManager->getByID($projectID);
|
// $project = $projectManager->getByID($projectID);
|
||||||
$owner = $projectManager->getProjectOwner($projectID);
|
// $maintainers = $projectManager->getProjectMaintainers($projectID);
|
||||||
|
|
||||||
if ($owner['uname'] != $attrs['uid'][0]) {
|
// if ($owner['uname'] != $attrs['uid'][0]) {
|
||||||
header('HTTP/1.0 403 Forbidden');
|
// header('HTTP/1.0 403 Forbidden');
|
||||||
echo 'wrong user';
|
// echo 'wrong user';
|
||||||
exit;
|
// exit;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="no">
|
<html lang="no">
|
||||||
@@ -74,12 +74,48 @@ if ($new == 0) {
|
|||||||
<form action="update.php", method="post">
|
<form action="update.php", method="post">
|
||||||
<p class="subtitle no-chin">Prosjektnavn</p>
|
<p class="subtitle no-chin">Prosjektnavn</p>
|
||||||
<p class="subnote">Gi prosjektet ditt et passende navn</p>
|
<p class="subnote">Gi prosjektet ditt et passende navn</p>
|
||||||
<input class="wide" type="text" name="title" value="<?php echo $project->getName(); ?>" class="boxinput"><br>
|
<input class="wide" type="text" name="title" value="<?php echo $project->getTitle(); ?>" class="boxinput" required><br>
|
||||||
|
|
||||||
<p class="subtitle no-chin">Beskrivelse (<i style="opacity:0.5;">markdown</i>)</p>
|
<p class="subtitle no-chin">Beskrivelse (<i style="opacity:0.5;">markdown</i>)</p>
|
||||||
<p class="subnote no-chin">Hva går prosjektet ditt ut på?</p>
|
<p class="subnote no-chin">Hva går prosjektet ditt ut på?</p>
|
||||||
<p class="subnote">De første to linjene blir vist på prosjektkortet, prøv å gjøre de til et fint sammendrag eller intro!</p>
|
<p class="subnote">De første to linjene blir vist på prosjektkortet, prøv å gjøre de til et fint sammendrag eller intro!</p>
|
||||||
<textarea class="tall" name="desc" style="width:100%" rows="8" class="boxinput"><?php echo implode("\n", $project->getDescription()); ?></textarea>
|
<textarea class="tall" name="desc" style="width:100%" rows="8" class="boxinput" required><?php echo implode("\n", $project->getDescriptionNo()); ?></textarea>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Beskrivelse på engelsk (<i style="opacity:0.5;">markdown</i>)</p>
|
||||||
|
<p class="subnote no-chin">Gjenta på engelsk</p>
|
||||||
|
<textarea class="tall" name="desc_en" style="width:100%" rows="8" class="boxinput" required><?php echo implode("\n", $project->getDescriptionEn()); ?></textarea>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Gitea-link</p>
|
||||||
|
<p class="subnote">Link til prosjektet på Gitea</p>
|
||||||
|
<input class="wide" type="text" name="gitea" value="<?php echo $project->getGiteaLink(); ?>" class="boxinput" required><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Issue board-link</p>
|
||||||
|
<p class="subnote">Link til issue board på Gitea</p>
|
||||||
|
<input class="wide" type="text" name="issue" value="<?php echo $project->getIssueBoardLink(); ?>" class="boxinput" required><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Wiki-link</p>
|
||||||
|
<p class="subnote">Link til wiki-side</p>
|
||||||
|
<input class="wide" type="text" name="wiki" value="<?php echo $project->getWikiLink(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Programmeringsspråk</p>
|
||||||
|
<p class="subnote">Hvilke språk brukes i prosjektet?</p>
|
||||||
|
<input class="wide" type="text" name="langs" value="<?php echo $project->getLanguages(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Teknologier</p>
|
||||||
|
<p class="subnote">Hvilke teknologier brukes i prosjektet?</p>
|
||||||
|
<input class="wide" type="text" name="techs" value="<?php echo $project->getTechnologies(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Nøkkelord</p>
|
||||||
|
<p class="subnote">Nøkkelord som beskriver prosjektet</p>
|
||||||
|
<input class="wide" type="text" name="keywords" value="<?php echo $project->getKeywords(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Lisens</p>
|
||||||
|
<p class="subnote">Hvilken lisens bruker prosjektet?</p>
|
||||||
|
<input class="wide" type="text" name="license" value="<?php echo $project->getLicense(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
|
<p class="subtitle no-chin">Logo-URL</p>
|
||||||
|
<p class="subnote">Link til logo for prosjektet</p>
|
||||||
|
<input class="wide" type="text" name="logo" value="<?php echo $project->getLogoURL(); ?>" class="boxinput"><br>
|
||||||
|
|
||||||
<?php echo '<input type="hidden" name="id" value="' . $project->getID() . '" />'; ?>
|
<?php echo '<input type="hidden" name="id" value="' . $project->getID() . '" />'; ?>
|
||||||
<input type="hidden" name="active" value="1"/>
|
<input type="hidden" name="active" value="1"/>
|
||||||
|
@@ -71,7 +71,6 @@ $projects = $projectManager->getAll();
|
|||||||
<br>
|
<br>
|
||||||
<center>
|
<center>
|
||||||
<a class="btn" href="edit.php?new=1">Lag prosjekt</a>
|
<a class="btn" href="edit.php?new=1">Lag prosjekt</a>
|
||||||
<a class="btn" href="mine.php">Mine prosjekter</a>
|
|
||||||
</center>
|
</center>
|
||||||
<br>
|
<br>
|
||||||
<?php
|
<?php
|
||||||
|
@@ -1,120 +0,0 @@
|
|||||||
<?php
|
|
||||||
date_default_timezone_set('Europe/Oslo');
|
|
||||||
setlocale(\LC_ALL, 'nb_NO');
|
|
||||||
require __DIR__ . '/../../inc/navbar.php';
|
|
||||||
require __DIR__ . '/../../src/_autoload.php';
|
|
||||||
require __DIR__ . '/../../config.php';
|
|
||||||
|
|
||||||
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php';
|
|
||||||
$as = new SimpleSAML\Auth\Simple('default-sp');
|
|
||||||
$as->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())))
|
|
||||||
));
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="no">
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
|
||||||
<link rel="shortcut icon" href="favicon.ico">
|
|
||||||
<link rel="stylesheet" href="../css/normalize.css">
|
|
||||||
<link rel="stylesheet" href="../css/style.css">
|
|
||||||
<link rel="stylesheet" href="../css/events.css">
|
|
||||||
<link rel="stylesheet" href="../css/admin.css">
|
|
||||||
<meta name="theme-color" content="#024" />
|
|
||||||
<title>Prosjektverkstedet</title>
|
|
||||||
|
|
||||||
<header>Prosjekt­verk­stedet</header>
|
|
||||||
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<nav>
|
|
||||||
<?php echo navbar(1, 'prosjekt'); ?>
|
|
||||||
<?php echo loginbar(); ?>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<main class="gridsplit">
|
|
||||||
<div class="gridl">
|
|
||||||
<h2 class="no-chin">Mine Prosjekter</h2>
|
|
||||||
|
|
||||||
<ul class="event-list">
|
|
||||||
<?php
|
|
||||||
$counter = 0;
|
|
||||||
$pageLimit = 8;
|
|
||||||
|
|
||||||
for ($i = ($pageLimit * ($page - 1)); $i < count($projects); ++$i) {
|
|
||||||
if ($counter == $pageLimit) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$project = $projects[$i];
|
|
||||||
$projectID = $project->getID();
|
|
||||||
|
|
||||||
$owner = $projectManager->getProjectOwner($projectID);
|
|
||||||
if ($owner['uname'] != $attrs['uid'][0]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<div class="event">
|
|
||||||
<div class="event-info">
|
|
||||||
<a href="edit.php?id=<?php echo $project->getID(); ?>">
|
|
||||||
<h3 class="no-chin"><?php echo $project->getName(); ?></h3>
|
|
||||||
</a>
|
|
||||||
<p style="text-decoration: none;"><?php echo implode('<br>', array_slice($project->getDescription(), 0, 4)); ?></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
++$counter;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
if ($page != 1) {
|
|
||||||
echo '<a class="btn float-left" href="?page=' . ($page - 1) . '&filter=' . urlencode($filter) . '">Forrige side</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($counter == $pageLimit) && (($pageLimit * $page) < count($projects))) {
|
|
||||||
echo '<a class="btn float-right" href="?page=' . ($page + 1) . '&filter=' . urlencode($filter) . '">Neste side</a>';
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="gridr">
|
|
||||||
<h2>Verktøy</h2>
|
|
||||||
<a class="btn" href="edit.php?new=1">Lag prosjekt</a>
|
|
||||||
<h2>Filter</h2>
|
|
||||||
<form action="mine.php" method="get">
|
|
||||||
<p class="no-chin">Navn</p>
|
|
||||||
<?php echo '<input type="text" name="filter" class="boxinput" value="' . $filter . '">'; ?><br>
|
|
||||||
|
|
||||||
<div style="margin-top: 2em;">
|
|
||||||
<input type="submit" class="btn" value="Filtrer"></input>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
</body>
|
|
Reference in New Issue
Block a user