Compare commits
4 Commits
main
...
revamp-pro
| Author | SHA1 | Date | |
|---|---|---|---|
|
41082c2866
|
|||
|
e3df6337e3
|
|||
|
bdc0f22182
|
|||
|
f47ce08760
|
54
dist/sql/pvv_mysql.sql
vendored
54
dist/sql/pvv_mysql.sql
vendored
@@ -8,21 +8,51 @@ CREATE TABLE events (
|
||||
`description` TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE projects (
|
||||
CREATE TABLE project_group (
|
||||
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||
`name` TEXT,
|
||||
`description` TEXT,
|
||||
`active` BOOLEAN DEFAULT TRUE
|
||||
`title` TEXT NOT NULL,
|
||||
`description_en` TEXT NOT NULL,
|
||||
`description_no` TEXT NOT NULL,
|
||||
`gitea_link` TEXT NOT NULL,
|
||||
`wiki_link` TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE projectmembers (
|
||||
`projectid` INTEGER,
|
||||
`name` TEXT,
|
||||
`uname` TEXT,
|
||||
`mail` TEXT,
|
||||
`role` TEXT,
|
||||
`lead` BOOLEAN DEFAULT FALSE,
|
||||
`owner` BOOLEAN DEFAULT FALSE
|
||||
INSERT INTO
|
||||
project_group (title, description_en, description_no, gitea_link, wiki_link)
|
||||
VALUES
|
||||
(
|
||||
'Projects',
|
||||
'Projects developed by members of PVV.',
|
||||
'Prosjekter utviklet av medlemmer i PVV.',
|
||||
'https://git.pvv.ntnu.no/Projects',
|
||||
'https://wiki.pvv.ntnu.no/wiki/Programvareutvikling'
|
||||
);
|
||||
|
||||
CREATE TABLE project (
|
||||
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
|
||||
`group_id` INTEGER NOT NULL REFERENCES project_group (id) DEFAULT 1,
|
||||
`title` TEXT NOT NULL,
|
||||
`description_en` TEXT NOT NULL,
|
||||
`description_no` TEXT NOT NULL,
|
||||
`gitea_link` TEXT,
|
||||
`issue_board_link` TEXT,
|
||||
`wiki_link` TEXT,
|
||||
`languages` TEXT,
|
||||
`technologies` TEXT,
|
||||
`keywords` TEXT,
|
||||
`license` TEXT,
|
||||
`logo_url` TEXT,
|
||||
FOREIGN KEY (group_id) REFERENCES project_group (id) ON DELETE SET DEFAULT
|
||||
);
|
||||
|
||||
CREATE TABLE project_maintainer (
|
||||
`uname` TEXT NOT NULL,
|
||||
`project_id` INTEGER NOT NULL,
|
||||
`name` TEXT NOT NULL,
|
||||
`email` TEXT,
|
||||
`is_owner` BOOLEAN DEFAULT FALSE,
|
||||
PRIMARY KEY (uname, project_id),
|
||||
FOREIGN KEY (project_id) REFERENCES project (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE users (`uname` TEXT, `groups` INT DEFAULT 0);
|
||||
|
||||
58
dist/sql/pvv_sqlite.sql
vendored
58
dist/sql/pvv_sqlite.sql
vendored
@@ -8,23 +8,57 @@ CREATE TABLE "events" (
|
||||
"description" TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE "projects" (
|
||||
-- PROJECTS
|
||||
|
||||
CREATE TABLE "project_group" (
|
||||
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
"name" TEXT,
|
||||
"description" TEXT,
|
||||
"active" BOOLEAN DEFAULT TRUE
|
||||
"title" TEXT NOT NULL,
|
||||
"description_en" TEXT NOT NULL,
|
||||
"description_no" TEXT NOT NULL,
|
||||
"gitea_link" TEXT NOT NULL,
|
||||
"wiki_link" TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE "projectmembers" (
|
||||
"projectid" INTEGER,
|
||||
"name" TEXT,
|
||||
"uname" TEXT,
|
||||
"mail" TEXT,
|
||||
"role" TEXT,
|
||||
"lead" BOOLEAN DEFAULT FALSE,
|
||||
"owner" BOOLEAN DEFAULT FALSE
|
||||
INSERT INTO
|
||||
project_group (title, description_en, description_no, gitea_link, wiki_link)
|
||||
VALUES
|
||||
(
|
||||
'Projects',
|
||||
'Projects developed by members of PVV.',
|
||||
'Prosjekter utviklet av medlemmer i PVV.',
|
||||
'https://git.pvv.ntnu.no/Projects',
|
||||
'https://wiki.pvv.ntnu.no/wiki/Programvareutvikling'
|
||||
);
|
||||
|
||||
CREATE TABLE "project" (
|
||||
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
"group_id" INTEGER NOT NULL DEFAULT 1,
|
||||
"title" TEXT NOT NULL,
|
||||
"description_en" TEXT NOT NULL,
|
||||
"description_no" TEXT NOT NULL,
|
||||
"gitea_link" TEXT,
|
||||
"issue_board_link" TEXT,
|
||||
"wiki_link" TEXT,
|
||||
"languages" TEXT,
|
||||
"technologies" TEXT,
|
||||
"keywords" TEXT,
|
||||
"license" TEXT,
|
||||
"logo_url" TEXT,
|
||||
FOREIGN KEY (group_id) REFERENCES project_group (id) ON DELETE SET DEFAULT
|
||||
);
|
||||
|
||||
CREATE TABLE "project_maintainer" (
|
||||
"uname" TEXT NOT NULL,
|
||||
"project_id" INTEGER NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"email" TEXT,
|
||||
"is_owner" BOOLEAN DEFAULT FALSE,
|
||||
PRIMARY KEY (uname, project_id),
|
||||
FOREIGN KEY (project_id) REFERENCES project (id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
--
|
||||
|
||||
CREATE TABLE "users" ("uname" TEXT, "groups" INT DEFAULT 0);
|
||||
|
||||
CREATE TABLE "motd" (
|
||||
|
||||
@@ -6,35 +6,120 @@ 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;
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getDescriptionEn(): array {
|
||||
return $this->description_en;
|
||||
}
|
||||
|
||||
public function getActive(): bool {
|
||||
return $this->active;
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getProgrammingLanguages(): array {
|
||||
return $this->programming_languages;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getTechnologies(): array {
|
||||
return $this->technologies;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function getKeywords(): array {
|
||||
return $this->keywords;
|
||||
}
|
||||
|
||||
public function getLicense(): ?string {
|
||||
return $this->license;
|
||||
}
|
||||
|
||||
public function getLogoURL(): ?string {
|
||||
return $this->logo_url;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,11 +11,13 @@ class ProjectManager {
|
||||
$this->pdo = $pdo;
|
||||
}
|
||||
|
||||
// TODO: groupid
|
||||
|
||||
/**
|
||||
* @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 +25,17 @@ class ProjectManager {
|
||||
foreach ($statement->fetchAll() as $dbProj) {
|
||||
$project = new Project(
|
||||
$dbProj['id'],
|
||||
$dbProj['name'],
|
||||
$dbProj['description'],
|
||||
(bool) $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;
|
||||
}
|
||||
@@ -33,8 +43,9 @@ class ProjectManager {
|
||||
return $projects;
|
||||
}
|
||||
|
||||
// TODO: groupid
|
||||
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,17 +57,33 @@ class ProjectManager {
|
||||
|
||||
return new Project(
|
||||
$dbProj['id'],
|
||||
$dbProj['name'],
|
||||
$dbProj['description'],
|
||||
(bool) $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']
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// TODO: groupid
|
||||
/**
|
||||
* @return Project[]
|
||||
*/
|
||||
public function getByOwner(string $uname): array {
|
||||
$query = 'SELECT projectid FROM projectmembers WHERE uname=:uname';
|
||||
$query = '
|
||||
SELECT project.id FROM project
|
||||
JOIN project_maintainer ON project.id = project_maintainer.project_id
|
||||
WHERE project_maintainer.uname = :uname
|
||||
AND project_maintainer.is_owner = TRUE
|
||||
';
|
||||
|
||||
$statement = $this->pdo->prepare($query);
|
||||
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
|
||||
$statement->execute();
|
||||
@@ -74,9 +101,17 @@ class ProjectManager {
|
||||
foreach ($statement->fetchAll() as $dbProj) {
|
||||
$project = new Project(
|
||||
$dbProj['id'],
|
||||
$dbProj['name'],
|
||||
$dbProj['description'],
|
||||
(bool) $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;
|
||||
}
|
||||
@@ -86,47 +121,66 @@ class ProjectManager {
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<int,array>
|
||||
* @return {uname:string,name:string,link:string,email:string,is_owner:bool}[]
|
||||
*/
|
||||
public function getProjectMembers(int $id): array {
|
||||
$query = 'SELECT * FROM projectmembers WHERE projectid=:id';
|
||||
public function getProjectMembers(int $project_id): array {
|
||||
$query = '
|
||||
SELECT
|
||||
project_maintainer.uname,
|
||||
project_maintainer.name,
|
||||
project_maintainer.email,
|
||||
project_maintainer.is_owner
|
||||
FROM project_maintainer
|
||||
WHERE project_maintainer.project_id = :id
|
||||
';
|
||||
|
||||
$statement = $this->pdo->prepare($query);
|
||||
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
|
||||
$statement->bindParam(':id', $project_id, \PDO::PARAM_STR);
|
||||
$statement->execute();
|
||||
|
||||
$members = [];
|
||||
$maintainers = [];
|
||||
foreach ($statement->fetchAll() as $dbUsr) {
|
||||
$members[] = [
|
||||
'name' => $dbUsr['name'],
|
||||
$maintainers[] = [
|
||||
'uname' => $dbUsr['uname'],
|
||||
'mail' => $dbUsr['mail'],
|
||||
'role' => $dbUsr['role'],
|
||||
'lead' => (bool) $dbUsr['lead'],
|
||||
'owner' => (bool) $dbUsr['owner'],
|
||||
'name' => $dbUsr['name'],
|
||||
'email' => $dbUsr['email'],
|
||||
'is_owner' => (bool)$dbUsr['is_owner'],
|
||||
];
|
||||
}
|
||||
|
||||
return $members;
|
||||
return $maintainers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string,mixed>
|
||||
* @return array{name:string,uname:string,email:string,is_owner:bool}|null
|
||||
*/
|
||||
public function getProjectOwner(int $id): array {
|
||||
$query = 'SELECT * FROM projectmembers WHERE (projectid=:id AND owner=1)';
|
||||
public function getProjectOwner(int $project_id): ?array {
|
||||
$query = '
|
||||
SELECT
|
||||
project_maintainer.name,
|
||||
project_maintainer.uname,
|
||||
project_maintainer.email,
|
||||
project_maintainer.is_owner
|
||||
FROM project_maintainer
|
||||
WHERE project_maintainer.project_id = :id
|
||||
AND project_maintainer.is_owner = TRUE
|
||||
LIMIT 1
|
||||
';
|
||||
|
||||
$statement = $this->pdo->prepare($query);
|
||||
$statement->bindParam(':id', $id, \PDO::PARAM_STR);
|
||||
$statement->bindParam(':id', $project_id, \PDO::PARAM_STR);
|
||||
$statement->execute();
|
||||
|
||||
$dbOwner = $statement->fetch();
|
||||
$owner = $statement->fetch();
|
||||
if (!$owner) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return [
|
||||
'name' => $dbOwner['name'],
|
||||
'uname' => $dbOwner['uname'],
|
||||
'mail' => $dbOwner['mail'],
|
||||
'role' => $dbOwner['role'],
|
||||
'lead' => (bool) $dbOwner['lead'],
|
||||
'owner' => (bool) $dbOwner['owner'],
|
||||
'name' => $owner['name'],
|
||||
'uname' => $owner['uname'],
|
||||
'email' => $owner['email'],
|
||||
'is_owner' => (bool)$owner['is_owner'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ if (!$userManager->hasGroup($uname, 'prosjekt')) {
|
||||
|
||||
$projectID = $_GET['id'];
|
||||
|
||||
$query = 'DELETE FROM projects WHERE id=\'' . $projectID . '\'';
|
||||
$query = 'DELETE FROM project WHERE id=\'' . $projectID . '\'';
|
||||
$statement = $pdo->prepare($query);
|
||||
$statement->execute();
|
||||
|
||||
|
||||
@@ -37,13 +37,18 @@ if (isset($_GET['id'])) {
|
||||
}
|
||||
|
||||
$project = new pvv\side\Project(
|
||||
0,
|
||||
'Kult Prosjekt',
|
||||
'',
|
||||
'kåre knoll',
|
||||
'pvvadmin',
|
||||
'drift@pvv.ntnu.no',
|
||||
0
|
||||
id: 0,
|
||||
title: 'Kult Prosjekt',
|
||||
description_en: '',
|
||||
description_no: '',
|
||||
gitea_link: 'https://git.pvv.ntnu.no/Projects/kultprosjekt',
|
||||
issue_board_link: 'https://git.pvv.ntnu.no/Projects/kultprosjekt/issues',
|
||||
wiki_link: 'https://wiki.pvv.ntnu.no/wiki/Kult_Prosjekt',
|
||||
programming_languages: 'PHP, HTML, CSS, JavaScript',
|
||||
technologies: 'MySQL, REST, AJAX',
|
||||
keywords: 'web, very-cool',
|
||||
license: 'GPL-3.0',
|
||||
logo_url: '',
|
||||
);
|
||||
if ($new == 0) {
|
||||
$project = $projectManager->getByID($projectID);
|
||||
@@ -56,7 +61,7 @@ $owner = [
|
||||
'mail' => '',
|
||||
];
|
||||
foreach ($members as $i => $data) {
|
||||
if ($data['owner']) {
|
||||
if ($data['is_owner']) {
|
||||
$owner = $data;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,161 +1,92 @@
|
||||
a.nostyle {
|
||||
text-decoration: none;
|
||||
color:inherit;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.project-card {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
border-radius: .15em;
|
||||
border: 0 solid #048;
|
||||
border-left-width: .3em;
|
||||
border-radius: .2em;
|
||||
border-left: .3em solid #048;
|
||||
box-shadow: 0 .1em .3em -.1em rgba(0,0,0,0.5);
|
||||
overflow: hidden;
|
||||
top: 0;
|
||||
min-height: 6em;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
background: #fff;
|
||||
min-height: 8em;
|
||||
transition: box-shadow .15s ease, transform .15s ease;
|
||||
}
|
||||
|
||||
.project-card:hover {
|
||||
box-shadow: 0.1em 0.2em 0.5em 0em rgba(0,0,0,0.5);
|
||||
box-shadow: 0.2em 0.3em 0.6em rgba(0,0,0,0.45);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* Header */
|
||||
.project-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: .6em;
|
||||
padding: .6em;
|
||||
}
|
||||
|
||||
.project-logo {
|
||||
width: 2.4em;
|
||||
height: 2.4em;
|
||||
object-fit: contain;
|
||||
border-radius: .2em;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
padding-bottom: .1em;
|
||||
margin: 0;
|
||||
font-size: 1.05em;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
display: block;
|
||||
margin: .6em;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.card-content p {
|
||||
line-height: 1.25em;
|
||||
}
|
||||
|
||||
.card-content * {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.project-organizer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
font-size: .8em;
|
||||
text-align: right;
|
||||
font-style: italic;
|
||||
opacity: 0.5;
|
||||
padding: 0.1em 0.4em;
|
||||
}
|
||||
|
||||
.projects-container {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 3em;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
grid-column-gap: 0.5em;
|
||||
grid-row-gap: 1.3em;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 60em) {
|
||||
.projects-container {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 50rem) {
|
||||
.contentsplit {
|
||||
display: grid;
|
||||
grid-template-columns: 17em 2.7fr;
|
||||
grid-template-areas: "left right";
|
||||
grid-column-gap: 0.9em;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 50rem) {
|
||||
.contentsplit {
|
||||
display: grid;
|
||||
grid-template-rows: auto auto;
|
||||
grid-template-areas: "right"
|
||||
"left";
|
||||
}
|
||||
}
|
||||
@media screen and (min-width: 33rem) and (max-width: 50rem) {
|
||||
.projectmember-container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
grid-template-rows: auto auto;
|
||||
grid-template-areas: "organizers members"
|
||||
"join join";
|
||||
}
|
||||
}
|
||||
|
||||
.gridl {
|
||||
grid-area: left;
|
||||
}
|
||||
|
||||
.projectmember-container {
|
||||
padding: 0.1em 1em;
|
||||
box-shadow: 0 2px 10px 0 rgba(0,0,0,0.2);
|
||||
}
|
||||
.projectmember-container h2 {
|
||||
text-align: center;
|
||||
}
|
||||
.projectmember-container >form {
|
||||
text-align: center;
|
||||
grid-area: join;
|
||||
}
|
||||
|
||||
.gridr {
|
||||
border-left: 0;
|
||||
grid-area: right;
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.projectmember {
|
||||
margin-bottom: 1em;
|
||||
padding: 0 .5em 0 .5em;
|
||||
overflow: hidden;
|
||||
border-left: 4px solid #35a;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.projectmember p {
|
||||
/* Content */
|
||||
.card-content {
|
||||
padding: 0 .6em .4em;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.project-description {
|
||||
line-height: 1.3em;
|
||||
margin: 0;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.projectmember p {
|
||||
font-size: .8em;
|
||||
/* Tags */
|
||||
.project-tags {
|
||||
margin-top: .4em;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .3em;
|
||||
}
|
||||
|
||||
.projectmember p:first-child {
|
||||
font-size: 1em;
|
||||
margin-bottom: .2em;
|
||||
.tag {
|
||||
font-size: .7em;
|
||||
padding: .15em .45em;
|
||||
border-radius: .3em;
|
||||
background: #eef3f7;
|
||||
color: #345;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.memberuname, .memberemail {
|
||||
display: inline-block;
|
||||
color: #888;
|
||||
/* Footer */
|
||||
.project-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: .2em .5em;
|
||||
font-size: .75em;
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.memberuname {
|
||||
float: left;
|
||||
.project-links a {
|
||||
margin-left: .4em;
|
||||
text-decoration: none;
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.memberemail {
|
||||
float: right;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 50rem) {
|
||||
.projects {
|
||||
display: inline-block;
|
||||
|
||||
}
|
||||
.project-links a:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/* edit */
|
||||
|
||||
@@ -14,31 +14,37 @@ $pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS);
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
$projectManager = new pvv\side\ProjectManager($pdo);
|
||||
|
||||
$new = 0;
|
||||
$project_is_new = false;
|
||||
if (isset($_GET['new'])) {
|
||||
$new = $_GET['new'];
|
||||
$project_is_new = $_GET['new'];
|
||||
}
|
||||
|
||||
$projectID = 0;
|
||||
if (isset($_GET['id'])) {
|
||||
$projectID = $_GET['id'];
|
||||
} elseif ($new == 0) {
|
||||
} elseif (!$project_is_new) {
|
||||
echo "\nID not set";
|
||||
exit;
|
||||
}
|
||||
|
||||
$project = new pvv\side\Project(
|
||||
0,
|
||||
'Nytt Prosjekt',
|
||||
'',
|
||||
$attrs['cn'][0],
|
||||
$attrs['uid'][0],
|
||||
$attrs['mail'][0],
|
||||
1
|
||||
id: 0,
|
||||
title: 'Nytt Prosjekt',
|
||||
description_en: null,
|
||||
description_no: null,
|
||||
gitea_link: null,
|
||||
issue_board_link: null,
|
||||
wiki_link: null,
|
||||
programming_languages: null,
|
||||
technologies: null,
|
||||
keywords: null,
|
||||
license: null,
|
||||
logo_url: null
|
||||
);
|
||||
if ($new == 0) {
|
||||
|
||||
if (!$project_is_new) {
|
||||
$project = $projectManager->getByID($projectID);
|
||||
$owner = $projectManager->getProjectOwner($projectID);
|
||||
$maintainers = $projectManager->getProjectMaintainers($projectID);
|
||||
|
||||
if ($owner['uname'] != $attrs['uid'][0]) {
|
||||
header('HTTP/1.0 403 Forbidden');
|
||||
@@ -46,6 +52,7 @@ if ($new == 0) {
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="no">
|
||||
@@ -74,20 +81,56 @@ if ($new == 0) {
|
||||
<form action="update.php", method="post">
|
||||
<p class="subtitle no-chin">Prosjektnavn</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="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>
|
||||
<textarea class="tall" name="desc" style="width:100%" rows="8" class="boxinput"><?php echo implode("\n", $project->getDescription()); ?></textarea>
|
||||
<textarea class="tall" name="desc_no" 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"><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"><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 programmeringsspråk brukes i prosjektet?</p>
|
||||
<input class="wide" type="text" name="langs" value="<?php echo implode("\n", $project->getProgrammingLanguages()); ?>" 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 implode("\n", $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 implode("\n", $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() . '" />'; ?>
|
||||
<input type="hidden" name="active" value="1"/>
|
||||
|
||||
<div style="margin-top: 0.2em;">
|
||||
<hr class="ruler">
|
||||
<input type="submit" class="btn" value="<?php echo $new ? 'Opprett prosjekt' : 'Lagre endringer'; ?>"></input>
|
||||
<?php if (!$new) {?><input type="submit" class="btn" name="delete" value="Slett"></input><?php } ?>
|
||||
<input type="submit" class="btn" value="<?php echo $project_is_new ? 'Opprett prosjekt' : 'Lagre endringer'; ?>"></input>
|
||||
<?php if (!$project_is_new) {?><input type="submit" class="btn" name="delete" value="Slett"></input><?php } ?>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
@@ -71,7 +71,6 @@ $projects = $projectManager->getAll();
|
||||
<br>
|
||||
<center>
|
||||
<a class="btn" href="edit.php?new=1">Lag prosjekt</a>
|
||||
<a class="btn" href="mine.php">Mine prosjekter</a>
|
||||
</center>
|
||||
<br>
|
||||
<?php
|
||||
@@ -84,7 +83,7 @@ $projects = $projectManager->getAll();
|
||||
<div class="projects-container">
|
||||
|
||||
<?php
|
||||
$randProjects = array_rand($projects, min(6, count($projects)));
|
||||
$randProjects = array_rand($projects, min(8, count($projects)));
|
||||
if (!is_array($randProjects)) {
|
||||
$randProjects = [$randProjects];
|
||||
}
|
||||
@@ -93,16 +92,60 @@ $projects = $projectManager->getAll();
|
||||
$owner = $projectManager->getProjectOwner($project->getID());
|
||||
?>
|
||||
|
||||
<a class="nostyle" href="info.php?id=<?php echo $project->getID(); ?>"><div class="project-card">
|
||||
<div class="card-content">
|
||||
<h4 class="project-title"><?php echo $project->getName(); ?></h4>
|
||||
<?php
|
||||
$Parsedown = new Parsedown();
|
||||
echo $Parsedown->text(implode("\n", array_slice($project->getDescription(), 0, 2)));
|
||||
?>
|
||||
</div>
|
||||
<p class="project-organizer">Organisert av <?php echo $owner['name']; ?></p>
|
||||
</div></a>
|
||||
<a class="nostyle" href="info.php?id=<?php echo $project->getID(); ?>">
|
||||
<article class="project-card">
|
||||
|
||||
<header class="project-header">
|
||||
<?php if (!empty($project->getLogoURL())): ?>
|
||||
<img src="<?php echo htmlspecialchars($project->getLogoURL()); ?>"
|
||||
alt=""
|
||||
class="project-logo">
|
||||
<?php endif; ?>
|
||||
|
||||
<h4 class="project-title">
|
||||
<?php echo htmlspecialchars($project->getTitle()); ?>
|
||||
</h4>
|
||||
</header>
|
||||
|
||||
<div class="card-content">
|
||||
<p class="project-description">
|
||||
<?php
|
||||
$Parsedown = new Parsedown();
|
||||
echo $Parsedown->text(
|
||||
implode("\n", $project->getDescriptionEn())
|
||||
);
|
||||
?>
|
||||
</p>
|
||||
|
||||
<?php if (!empty($project->getTechnologies())): ?>
|
||||
<div class="project-tags">
|
||||
<?php foreach ($project->getTechnologies() as $tech): ?>
|
||||
<span class="tag"><?php echo trim($tech); ?></span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<footer class="project-footer">
|
||||
<span class="project-organizer">
|
||||
Organisert av <?php echo htmlspecialchars($owner['name']); ?>
|
||||
</span>
|
||||
|
||||
<div class="project-links">
|
||||
<?php if ($project->getGiteaLink()): ?>
|
||||
<a href="<?php echo $project->getGiteaLink(); ?>" title="Repository"></a>
|
||||
<?php endif; ?>
|
||||
<?php if ($project->getIssueBoardLink()): ?>
|
||||
<a href="<?php echo $project->getIssueBoardLink(); ?>" title="Issues">🐞</a>
|
||||
<?php endif; ?>
|
||||
<?php if ($project->getWikiLink()): ?>
|
||||
<a href="<?php echo $project->getWikiLink(); ?>" title="Wiki">📖</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</article>
|
||||
</a>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<center>
|
||||
|
||||
@@ -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>
|
||||
@@ -6,9 +6,25 @@ require __DIR__ . '/../../config.php';
|
||||
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS);
|
||||
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||
|
||||
if (!isset($_POST['title']) || !isset($_POST['desc']) || !isset($_POST['active'])) {
|
||||
header('Location: ' . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
$required_fields = [
|
||||
'title',
|
||||
'desc_no',
|
||||
'desc_en',
|
||||
'gitea',
|
||||
'issue',
|
||||
'wiki',
|
||||
'langs',
|
||||
'techs',
|
||||
'keywords',
|
||||
'license',
|
||||
'logo'
|
||||
];
|
||||
|
||||
foreach ($required_fields as $field) {
|
||||
if (!isset($_POST[$field])) {
|
||||
header('Location: ' . $_SERVER['HTTP_REFERER']);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php';
|
||||
@@ -16,38 +32,99 @@ $as = new SimpleSAML\Auth\Simple('default-sp');
|
||||
$as->requireAuth();
|
||||
$attrs = $as->getAttributes();
|
||||
|
||||
$id = $_POST['id'];
|
||||
$id = $_POST['id'] ?? 0;
|
||||
$do_delete = isset($_POST['delete']);
|
||||
$do_join_or_leave = isset($_POST['join_or_leave']);
|
||||
|
||||
$active = $_POST['active'];
|
||||
|
||||
$title = $_POST['title'];
|
||||
$desc = $_POST['desc'];
|
||||
$desc_no = $_POST['desc_no'];
|
||||
$desc_en = $_POST['desc_en'];
|
||||
$gitea = $_POST['gitea'];
|
||||
$issue = $_POST['issue'];
|
||||
$wiki = $_POST['wiki'];
|
||||
$langs = $_POST['langs'];
|
||||
$techs = $_POST['techs'];
|
||||
$keywords = $_POST['keywords'];
|
||||
$license = $_POST['license'];
|
||||
$logo = $_POST['logo'];
|
||||
|
||||
$name = $attrs['cn'][0];
|
||||
$uname = $attrs['uid'][0];
|
||||
$mail = $attrs['mail'][0];
|
||||
|
||||
|
||||
if ($id == 0) {
|
||||
$query = 'INSERT INTO projects (name, description, active) VALUES (:title, :desc, TRUE)';
|
||||
if ($id == 0) { // Create new project
|
||||
$query = <<<END
|
||||
INSERT INTO
|
||||
project(
|
||||
title,
|
||||
description_no,
|
||||
description_en,
|
||||
gitea_link,
|
||||
issue_board_link,
|
||||
wiki_link,
|
||||
languages,
|
||||
technologies,
|
||||
keywords,
|
||||
license,
|
||||
logo_url
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
:title,
|
||||
:desc_no,
|
||||
:desc_en,
|
||||
:gitea,
|
||||
:issue,
|
||||
:wiki,
|
||||
:langs,
|
||||
:techs,
|
||||
:keywords,
|
||||
:license,
|
||||
:logo
|
||||
)
|
||||
END;
|
||||
$statement = $pdo->prepare($query);
|
||||
|
||||
$statement->bindParam(':title', $title, PDO::PARAM_STR);
|
||||
$statement->bindParam(':desc', $desc, PDO::PARAM_STR);
|
||||
$statement->bindParam(':desc_no', $desc_no, PDO::PARAM_STR);
|
||||
$statement->bindParam(':desc_en', $desc_en, PDO::PARAM_STR);
|
||||
$statement->bindParam(':gitea', $gitea, PDO::PARAM_STR);
|
||||
$statement->bindParam(':issue', $issue, PDO::PARAM_STR);
|
||||
$statement->bindParam(':wiki', $wiki, PDO::PARAM_STR);
|
||||
$statement->bindParam(':langs', $langs, PDO::PARAM_STR);
|
||||
$statement->bindParam(':techs', $techs, PDO::PARAM_STR);
|
||||
$statement->bindParam(':keywords', $keywords, PDO::PARAM_STR);
|
||||
$statement->bindParam(':license', $license, PDO::PARAM_STR);
|
||||
$statement->bindParam(':logo', $logo, PDO::PARAM_STR);
|
||||
|
||||
$statement->execute();
|
||||
$new_id = $pdo->lastInsertId();
|
||||
$new_project_id = $pdo->lastInsertId();
|
||||
|
||||
$ownerQuery = <<<END
|
||||
INSERT INTO
|
||||
project_maintainer (
|
||||
uname,
|
||||
project_id,
|
||||
name,
|
||||
email
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
:username,
|
||||
:project_id,
|
||||
:user_real_name,
|
||||
:user_email
|
||||
)
|
||||
END;
|
||||
|
||||
$ownerQuery = "INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (:id, :owner, :owneruname, :owneremail, 'Prosjektleder', TRUE, TRUE)";
|
||||
$statement = $pdo->prepare($ownerQuery);
|
||||
$statement->bindParam(':id', $new_id, PDO::PARAM_STR);
|
||||
$statement->bindParam(':owner', $name, PDO::PARAM_STR);
|
||||
$statement->bindParam(':owneruname', $uname, PDO::PARAM_STR);
|
||||
$statement->bindParam(':owneremail', $mail, PDO::PARAM_STR);
|
||||
$statement->bindParam(':username', $uname, PDO::PARAM_STR);
|
||||
$statement->bindParam(':project_id', $new_project_id, PDO::PARAM_INT);
|
||||
$statement->bindParam(':user_real_name', $name, PDO::PARAM_STR);
|
||||
$statement->bindParam(':user_email', $mail, PDO::PARAM_STR);
|
||||
|
||||
$statement->execute();
|
||||
} else {
|
||||
} else { // Update existing project
|
||||
$projectManager = new pvv\side\ProjectManager($pdo);
|
||||
$owner = $projectManager->getProjectOwner($id);
|
||||
$members = $projectManager->getProjectMembers($id);
|
||||
|
||||
Reference in New Issue
Block a user