Add project creation

The projects page will also display a few random projects now
This commit is contained in:
Markus Wang Halvorsen 2017-10-22 17:57:55 +02:00
parent 68bba332f1
commit 1da1785e46
23 changed files with 311 additions and 53 deletions

11
dist/pvv.sql vendored
View File

@ -1,5 +1,3 @@
CREATE TABLE "events" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT,
@ -9,3 +7,12 @@ CREATE TABLE "events" (
"location" TEXT,
"description" TEXT
);
CREATE TABLE "projects" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT,
"owner" TEXT,
"owneruname" TEXT,
"description" TEXT,
"active" BOOLEAN
);

18
pvv.sql Normal file
View File

@ -0,0 +1,18 @@
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,
"owner" TEXT,
"owneruname" TEXT,
"description" TEXT,
"active" BOOLEAN
);

35
src/pvv/side/project.php Normal file
View File

@ -0,0 +1,35 @@
<?php
namespace pvv\side;
class Project{
private $id, $name, $owner, $owneruname, $descr, $active;
public function __construct($id, $name, $descr, $owner, $owneruname, $active){
$this->id = $id;
$this->name = $name;
$this->descr = $descr;
$this->owner = $owner;
$this->owneruname = $owneruname;
$this->active = $active;
}
public function getID(){
return $this->id;
}
public function getName(){
return $this->name;
}
public function getDescription(){
return $this->descr;
}
public function getOwner(){
return $this->owner;
}
public function getOwnerUName(){
return $this->owneruname;
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace pvv\side;
use \PDO;
class ProjectManager{
private $pdo;
public function __construct(PDO $pdo){
$this->pdo = $pdo;
}
public function getAll() {
$query = 'SELECT * FROM projects ORDER BY id ASC';
$statement = $this->pdo->prepare($query);
$statement->execute();
$projects = [];
foreach($statement->fetchAll() as $dbProj){
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['owner'],
$dbProj['owneruname'],
$dbProj['active']
);
$projects[] = $project;
}
return $projects;
}
public function getByID($id){
$query = 'SELECT * FROM projects WHERE id=:id LIMIT 1';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$dbProj = $statement->fetch();
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['owner'],
$dbProj['active']
);
return $project;
}
}

View File

@ -3,7 +3,7 @@ namespace pvv\side;
class SimpleEvent extends Event {
private $name, $start, $end, $org, $loc;
private $id, $name, $descr, $start, $end, $org, $loc;
public function __construct($id, $name,\DateTimeImmutable $start,\DateTimeImmutable $end,$org, $loc, $descr, $isDBEvent = false){
$this->id = $id;

View File

@ -12,4 +12,4 @@ $statement->execute();
header('Location: ' . $_SERVER['HTTP_REFERER']);
?>
<a href=".?page=1">Om du ikke ble automatisk omdirigert tilbake klikk her</a>
<a href=".?page=1">Om du ikke ble omdirigert tilbake klikk her</a>

View File

@ -68,15 +68,15 @@ if($new == 0){
<p class="subtitle">Beskrivelse</p>
<textarea name="desc" cols="40" rows="5" class="boxinput"><?= implode($event->getDescription(), "\n"); ?></textarea>
</div>
<div class="gridr noborder">
<p class="subtitle">Starttid (YYYY-MM-DD HH:MM:SS)</p>
<?= '<input name="start" type="text" class="boxinput" value="' . $event->getStart()->format('Y-m-d H:00:00') . '"><br>' ?>
<p class="subtitle">Sluttid (YYYY-MM-DD HH:MM:SS)</p>
<?= '<input name="end" type="text" class="boxinput" value="' . $event->getStop()->format('Y-m-d H:00:00') . '"><br>' ?>
</div>
<div class="gridr noborder">
<p class="subtitle">Organisert av</p>
<?= '<input type="text" name="organiser" value="' . $event->getOrganiser(). '" class="boxinput">' ?><br>

View File

@ -24,6 +24,7 @@ if(isset($_GET['page'])){
<nav><ul>
<li class="active"><a href="index.php">hjem</a></li>
<li><a href="aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="kontakt">kontakt</a></li>
<li><a href="pvv/">wiki</a></li>
</nav>
@ -56,7 +57,9 @@ if(isset($_GET['page'])){
<div class="event admin">
<div class="event-info">
<h3 class="no-chin"><?= $event->getName() . " (ID: " . $eventID . ")"; ?></h3>
<p class="subnote"><?= $event->getStart()->format("(Y-m-d H:i:s)") . " - " . $event->getStop()->format("(Y-m-d H:i:s)"); ?></p>
<p class="subnote">
<?= $event->getStart()->format("(Y-m-d H:i:s)") . " - " . $event->getStop()->format("(Y-m-d H:i:s)"); ?>
</p>
<p><?= implode($event->getDescription(), "</p>\n<p>"); ?></p>
</div>

View File

@ -9,11 +9,12 @@
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>
<header class="admin">Stor&shy;-gutt&shy;-leketøy</header>
<header class="admin">Stor-&shy;gutt-&shy;leketøy</header>
<main>

View File

@ -80,6 +80,7 @@ foreach($events as $event) {
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li class="active"><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -50,6 +50,7 @@ $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li class="active"><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -55,6 +55,7 @@ $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li class="active"><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -47,10 +47,6 @@ header.admin {
text-decoration: none;
}
.no-chin {
margin-bottom: 0;
}
.gridsplit {
display: grid;
grid-template-columns: 75% 25%;
@ -78,17 +74,6 @@ header.admin {
grid-column: 1 / -1;
}
.noborder {
border: none;
}
.subnote {
margin-top: 0;
color: gray;
font-size: .7em;
font-style: italic;
}
.float-right {
float: right;
}

View File

@ -119,12 +119,26 @@ a.btn:active {
color: #048;
padding: .2em .4em;
border-radius: .2em;
white-space: nowrap;
display: inline-block;
margin-bottom: .25em;
resize: none;
}
.noborder {
border: none !important;
}
.subnote {
margin-top: 0;
color: gray;
font-size: .7em;
font-style: italic;
}
.no-chin {
margin-bottom: 0;
}
.icon.subscribe {
color: white;
background: #082;

View File

@ -93,6 +93,7 @@ For å bli med i våre prosjekter og komitéer må du søke.
<!--<li><a href="prosjekt/">prosjekter</a></li>-->
<li><a href="kalender/">kalender</a></li>
<li><a href="aktiviteter/">aktiviteter</a></li>
<li><a href="prosjekt/">prosjekter</a></li>
<li><a href="kontakt/">kontakt</a></li>
<li><a href="pvv/">wiki</a></li>
</nav>

View File

@ -103,6 +103,7 @@ $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li class="active"><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -41,6 +41,7 @@ Det er også mulig å ta i bruk analog kontakt ved å møte opp <a href="https:/
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li class="active"><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -55,6 +55,7 @@ $agenda = new \pvv\side\Agenda([
<li class="active"><a href="../kurs/">kurs</a></li>
<li><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../sosiale/">sosiale</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>

View File

@ -51,6 +51,7 @@ $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
<li><a href="../">hjem</a></li>
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li class="active"><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -60,6 +60,7 @@ p {hyphens: auto;}
<!--<li><a href="../prosjekt/">prosjekter</a></li>-->
<li><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>

View File

@ -1,4 +1,6 @@
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
date_default_timezone_set('Europe/Oslo');
setlocale(LC_ALL, 'no_NO');
require __DIR__ . '/../../src/_autoload.php';
@ -6,12 +8,9 @@ require __DIR__ . '/../../sql_config.php';
$translation = ['i dag', 'i morgen', 'denne uka', 'neste uke', 'denne måneden', 'neste måned'];
$pdo = new \PDO($dbDsn, $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$agenda = new \pvv\side\Agenda([
new \pvv\side\social\NerdepitsaActivity,
new \pvv\side\social\AnimekveldActivity,
new \pvv\side\social\BrettspillActivity,
new \pvv\side\DBActivity($pdo),
]); ?>
$projectManager = new \pvv\side\ProjectManager($pdo);
$projects = $projectManager->getAll();
?>
<!DOCTYPE html>
<html lang="no">
<title>Prosjektverkstedet</title>
@ -23,10 +22,6 @@ $agenda = new \pvv\side\Agenda([
<header>Prosjekt&shy;verk&shy;stedet</header>
<?php
include '../../inc/ticker.php';
?>
<main>
<article class="threed">
@ -42,26 +37,42 @@ include '../../inc/ticker.php';
</article>
<div class="split">
<article>
<h2>Projekter</h2>
<p>
Lyst til å gjøre noe kult? Her er de prosjektene som PVVere er ivrige i å gjøre. Mangler det noe, eller brenner du for noe annet? Sett opp et prosjekt da!<br>
<?php
if(count($projects) == 0){
?>
<p>PVV har for øyeblikket ingen aktive prosjekter. Tenker du at noe bør gjøres? Har du en kul ide for noe PVV kan samarbeide om? Sett opp et prosjekt!</p>
<br>
<a class="btn" href="/aktiviteter/lag">Lag prosjekt</a>
</p>
<ul class="calendar-events">
<li><p><a href="project.html?id=1">Fikse Brzeczyszczykiewicz</a></p>
<span><p>
Skjermen bokhyllen vår, Brzeczyszczykiewicz, sluttet å virke etter noen oppdateringer. Denne vil jeg gjerne fikse sammen med en gjeng.
</p></span>
</li>
<a class="btn" href="ny.php">Lag prosjekt</a>
<?php
}else{
?>
<p>Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har laget. Mangler det noe, eller brenner du for noe annet? Sett opp et prosjekt!</p>
<br>
<a class="btn" href="ny.php">Lag prosjekt</a>
<li><p><a href="project.html?id=2">Lage hjemmeside</a></p>
<span><p>
PVV trenger en fin hjemmeside! Hadde vært kult om noen ville være med meg å ordne denne.
</p></span>
</li>
<ul class="calendar-events">
<?php
$randProjects = array_rand($projects, min(3, count($projects)));
for($i = 0; $i < count($randProjects); $i++){
$project = $projects[$randProjects[$i]];
?>
<li>
<p class="noborder no-chin"><?= "<a href=\"project/?id=" . $project->getID() . "\">" . $project->getName() . "</a>"; ?></p>
<p class="subnote"><?= "Organisert av: " . $project->getOwner(); ?></p>
<span>
<p><?= $project->getDescription(); ?></p>
</span>
</li>
<?php } ?>
</ul>
<?php
}
?>
</article>
@ -89,7 +100,7 @@ include '../../inc/ticker.php';
<li><p><a href="styret.html">Styret</a></p>
<span><p>
Styret bestemmer hvilke kurs, hackehelger og innkjøp som skal fåretaes. Er det noen som kan ordnet opp i noe er det Styret. Intressert? Vi velger styret halvårsmøtene starten av semestrene. Kom og bli med da vel!
Styret bestemmer hvilke kurs, hackehelger og innkjøp som skal foretas. Er det noen som kan ordnet opp i noe er det Styret. Intressert? Vi velger styret halvårsmøtene starten av semestrene. Kom og bli med da vel!
</p></span>
</li>
</ul>
@ -100,9 +111,9 @@ include '../../inc/ticker.php';
<nav><ul>
<li><a href="../">hjem</a></li>
<li class="active"><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kalender/">kalender</a></li>
<li><a href="../aktiviteter/">aktiviteter</a></li>
<li class="active"><a href="../prosjekt/">prosjekter</a></li>
<li><a href="../kontakt/">kontakt</a></li>
<li><a href="../pvv/">wiki</a></li>
</nav>
</nav>

67
www/prosjekt/ny.php Normal file
View File

@ -0,0 +1,67 @@
<?php
ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo');
setlocale(LC_ALL, 'no_NO');
error_reporting(E_ALL);
require __DIR__ . '/../../src/_autoload.php';
require __DIR__ . '/../../sql_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($dbDsn, $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$projectManager = new \pvv\side\ProjectManager($pdo);
$project = new \pvv\side\Project(
0,
'Nytt Prosjekt',
'',
$attrs["cn"][0],
$attrs["uid"][0],
1
);
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<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">
<nav><ul>
<li><a href="index.php">hjem</a></li>
<li><a href="../kalender/">kalender</a></li>
<li><a href="aktiviteter/">aktiviteter</a></li>
<li class="active"><a href="../prosjekt/">prosjekter</a></li>
<li><a href="kontakt">kontakt</a></li>
<li><a href="pvv/">wiki</a></li>
</nav>
<header class="admin">Prosjekter</header>
<main>
<article>
<h2>Nytt prosjekt</h2>
<form action="update.php", method="post">
<p class="subtitle no-chin">Prosjektnavn</p>
<p class="subnote">Gi prosjektet ditt et passende navn</p>
<?= '<input type="text" name="title" value="' . $project->getName() . '" class="boxinput">' ?><br>
<p class="subtitle no-chin">Beskrivelse</p>
<p class="subnote">Hva går prosjektet ditt ut ?</p>
<textarea name="desc" cols="40" rows="5" class="boxinput"><?= $project->getDescription() ?></textarea>
<div style="margin-top: 2em;">
<hr class="ruler">
<input type="submit" class="btn" value="Opprett prosjekt"></a>
</div>
</form>
</article>
</main>

57
www/prosjekt/update.php Normal file
View File

@ -0,0 +1,57 @@
<?php
ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo');
setlocale(LC_ALL, 'no_NO');
error_reporting(E_ALL);
require __DIR__ . '/../../src/_autoload.php';
require __DIR__ . '/../../sql_config.php';
$pdo = new \PDO($dbDsn, $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(!isset($_POST['title']) or !isset($_POST['desc'])){
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit();
}
require_once(__DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();
$attrs = $as->getAttributes();
$id = 0;
if(isset($_POST['id'])){
$id = $_POST['id'];
$active = $_POST['active'];
}
$title = $_POST['title'];
$desc = $_POST['desc'];
$owner = $attrs['cn'][0];
$owneruname = $attrs['uid'][0];
$statement;
if($id == 0){
$query = 'INSERT INTO projects (name, owner, owneruname, description, active) VALUES (:title, :owner, :owneruname, :desc, 1)';
$statement = $pdo->prepare($query);
$statement->bindParam(':title', $title, PDO::PARAM_STR);
$statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement->bindParam(':owner', $owner, PDO::PARAM_STR);
$statement->bindParam(':owneruname', $owneruname, PDO::PARAM_STR);
}else{
$query = 'UPDATE projects SET name=:title, owner=:owner, owneruname=:owneruname, description=:desc WHERE id=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':title', $title, PDO::PARAM_STR);
$statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement->bindParam(':owner', $owner, PDO::PARAM_STR);
$statement->bindParam(':owneruname', $owneruname, PDO::PARAM_STR);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
}
$statement->execute();
header('Location: ..');
?>
<a href="..">Om du ikke ble omdirigert tilbake klikk her</a>