Compare commits

..

4 Commits

Author SHA1 Message Date
9d8b14a08b
nix/module: fix spaceapi endpoint 2024-05-18 20:54:05 +02:00
0542a10d03
spaceapi: Moves calendar into feeds
Co-authored-by: h7x4 <h7x4@nani.wtf>
2024-05-18 20:03:20 +02:00
c6df8e6ae3 nix/module: Specify json mimetype for spaceapi.php 2024-05-14 19:29:51 +02:00
aebc14ccb5 feat: adds spaceapi endpoint 2024-05-14 19:29:51 +02:00
80 changed files with 2938 additions and 3535 deletions

1
.envrc

@ -1 +0,0 @@
use flake

@ -1,3 +0,0 @@
# The formattening
c5d308654744e116090e9ba165a968b8bf66006c
da8afe735c62e1f8ee9ad5f71291d87102fe126b

@ -1,58 +0,0 @@
<?php
$finder = (new PhpCsFixer\Finder())
->ignoreDotFiles(false)
->ignoreVCSIgnored(true)
->in([
'inc',
'src',
'dist',
])
->exclude([
'vendor',
])
->append([
__DIR__ . '/config.php',
__DIR__ . '/.php-cs-fixer',
])
;
return (new PhpCsFixer\Config())
->setRiskyAllowed(true)
->setRules([
'@PhpCsFixer' => true,
'@Symfony' => true,
'@PER-CS' => true,
'@PHP71Migration' => true,
'@PHP73Migration' => true,
'@PHP74Migration' => true,
'@PHP80Migration' => true,
'@PHP81Migration' => true,
'@PHP82Migration' => true,
'@PHP83Migration' => true,
'@PHP84Migration' => true,
'@PhpCsFixer:risky' => true,
'@Symfony:risky' => true,
'@PER-CS:risky' => true,
'@PHP74Migration:risky' => true,
'@PHP80Migration:risky' => true,
'@PHP82Migration:risky' => true,
'strict_param' => true,
'array_syntax' => ['syntax' => 'short'],
'braces_position' => [
'functions_opening_brace' => 'same_line',
'classes_opening_brace' => 'same_line',
],
'simplified_if_return' => true,
'simplified_null_return' => true,
'yoda_style' => false,
// TODO: fix these
'psr_autoloading' => false,
])
->setFinder($finder)
->setIndent(" ")
->setLineEnding("\n")
;

@ -5,12 +5,11 @@
"config": { "config": {
"allow-plugins": { "allow-plugins": {
"simplesamlphp/composer-module-installer": true, "simplesamlphp/composer-module-installer": true
"simplesamlphp/composer-xmlprovider-installer": true
} }
}, },
"require": { "require": {
"simplesamlphp/simplesamlphp": "^2.2.1", "simplesamlphp/simplesamlphp": "^2.2",
"erusev/parsedown": "^1.7.4" "erusev/parsedown": "^1.7"
} }
} }

1249
composer.lock generated

File diff suppressed because it is too large Load Diff

18
dist/config.local.php vendored

@ -1,24 +1,24 @@
<?php <?php
declare(strict_types=1); $DB_DSN = 'sqlite:'.__DIR__.DIRECTORY_SEPARATOR.'pvv.sqlite';
$DB_DSN = 'sqlite:' . __DIR__ . \DIRECTORY_SEPARATOR . 'pvv.sqlite';
$DB_USER = null; $DB_USER = null;
$DB_PASS = null; $DB_PASS = null;
$DOOR_SECRET = 'changeme'; $DOOR_SECRET = "changeme";
$GALLERY_DIR = __DIR__ . \DIRECTORY_SEPARATOR . 'www' . \DIRECTORY_SEPARATOR . 'galleri' . \DIRECTORY_SEPARATOR . 'bilder' . \DIRECTORY_SEPARATOR . 'gallery'; $GALLERY_DIR = __DIR__.DIRECTORY_SEPARATOR.'www'.DIRECTORY_SEPARATOR.'galleri'.DIRECTORY_SEPARATOR.'bilder'.DIRECTORY_SEPARATOR.'gallery';
$GALLERY_SERVER_PATH = '/images/gallery/'; $GALLERY_SERVER_PATH = '/images/gallery/';
$SLIDESHOW_DIR = __DIR__ . \DIRECTORY_SEPARATOR . 'www' . \DIRECTORY_SEPARATOR . 'galleri' . \DIRECTORY_SEPARATOR . 'bilder' . \DIRECTORY_SEPARATOR . 'slideshow'; $SLIDESHOW_DIR = __DIR__.DIRECTORY_SEPARATOR.'www'.DIRECTORY_SEPARATOR.'galleri'.DIRECTORY_SEPARATOR.'bilder'.DIRECTORY_SEPARATOR.'slideshow';
$SLIDESHOW_SERVER_PATH = '/images/slideshow/'; $SLIDESHOW_SERVER_PATH = '/images/slideshow/';
$SAML_COOKIE_SALT = 'changeme'; $SAML_COOKIE_SALT = 'changeme';
$SAML_COOKIE_SECURE = false; $SAML_COOKIE_SECURE = false;
$SAML_TRUSTED_DOMAINS = ['localhost:1080']; $SAML_TRUSTED_DOMAINS = array("localhost:1080");
$SAML_ADMIN_PASSWORD = 'changeme'; $SAML_ADMIN_PASSWORD = "changeme";
$SAML_ADMIN_NAME = 'PVV Drift'; $SAML_ADMIN_NAME = 'PVV Drift';
$SAML_ADMIN_EMAIL = 'drift@pvv.ntnu.no'; $SAML_ADMIN_EMAIL = 'drift@pvv.ntnu.no';
$CACHE_DIRECTORY = __DIR__ . \DIRECTORY_SEPARATOR . 'cache'; $CACHE_DIRECTORY = __DIR__.DIRECTORY_SEPARATOR.'cache';
?>

@ -1,6 +1,6 @@
<?php <?php
declare(strict_types=1);
$configFile = getenv('PVV_CONFIG_FILE'); $configFile = getenv('PVV_CONFIG_FILE');
require_once $configFile; require_once($configFile);
?>

50
dist/pvv.sql vendored Normal file

@ -0,0 +1,50 @@
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);

60
dist/pvv_mysql.sql vendored

@ -1,45 +1,47 @@
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 projects (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT, `id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`name` TEXT, `name` TEXT,
`description` TEXT, `description` TEXT,
`active` BOOLEAN `active` BOOLEAN
); );
CREATE TABLE projectmembers ( CREATE TABLE projectmembers (
`projectid` INTEGER, `projectid` INTEGER,
`name` TEXT, `name` TEXT,
`uname` TEXT, `uname` TEXT,
`mail` TEXT, `mail` TEXT,
`role` TEXT, `role` TEXT,
`lead` BOOLEAN DEFAULT 0, `lead` BOOLEAN DEFAULT 0,
`owner` BOOLEAN DEFAULT 0 `owner` BOOLEAN DEFAULT 0
); );
CREATE TABLE users (`uname` TEXT, `groups` INT DEFAULT 0); 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);
INSERT INTO CREATE TABLE door (
door (time, open) `time` INTEGER PRIMARY KEY,
VALUES `open` BOOLEAN
(0, FALSE); );
INSERT INTO door(time, open) VALUES (0, FALSE);

54
dist/pvv_sqlite.sql vendored

@ -1,54 +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);

@ -1,12 +1,9 @@
<?php <?php
$config = array(
declare(strict_types=1); /* This is the name of this authentication source, and will be used to access it later. */
$config = [ 'default-sp' => array(
'saml:SP',
/* This is the name of this authentication source, and will be used to access it later. */ 'idp' => 'https://idp.pvv.ntnu.no/',
'default-sp' => [ ),
'saml:SP', );
'entityID' => 'https://www.pvv.ntnu.no/simplesaml/',
'idp' => 'https://idp.pvv.ntnu.no/',
],
];

File diff suppressed because it is too large Load Diff

@ -1,21 +1,23 @@
<?php <?php
$metadata['https://idp.pvv.ntnu.no/'] = array (
declare(strict_types=1);
$metadata['https://idp.pvv.ntnu.no/'] = [
'metadata-set' => 'saml20-idp-remote', 'metadata-set' => 'saml20-idp-remote',
'entityid' => 'https://idp.pvv.ntnu.no/', 'entityid' => 'https://idp.pvv.ntnu.no/',
'SingleSignOnService' => [ 'SingleSignOnService' =>
0 => [ array (
0 =>
array (
'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
'Location' => 'https://idp.pvv.ntnu.no/simplesaml/saml2/idp/SSOService.php', 'Location' => 'https://idp.pvv.ntnu.no/simplesaml/saml2/idp/SSOService.php',
], ),
], ),
'SingleLogoutService' => [ 'SingleLogoutService' =>
0 => [ array (
0 =>
array (
'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
'Location' => 'https://idp.pvv.ntnu.no/simplesaml/saml2/idp/SingleLogoutService.php', 'Location' => 'https://idp.pvv.ntnu.no/simplesaml/saml2/idp/SingleLogoutService.php',
], ),
], ),
'certData' => 'MIIDpTCCAo2gAwIBAgIJAJIgibrB7NvsMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAk5PMR4wHAYDVQQKDBVQcm9ncmFtdmFyZXZlcmtzdGVkZXQxGDAWBgNVBAMMD2lkcC5wdnYubnRudS5ubzEgMB4GCSqGSIb3DQEJARYRZHJpZnRAcHZ2Lm50bnUubm8wHhcNMTcxMTEzMjI0NTQyWhcNMjcxMTEzMjI0NTQyWjBpMQswCQYDVQQGEwJOTzEeMBwGA1UECgwVUHJvZ3JhbXZhcmV2ZXJrc3RlZGV0MRgwFgYDVQQDDA9pZHAucHZ2Lm50bnUubm8xIDAeBgkqhkiG9w0BCQEWEWRyaWZ0QHB2di5udG51Lm5vMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAveLujCsgVCRA360y5yezy8FcSPhaqodggDqY12UTkYOMQLBFaph6uUL4oCUlXZqxScrAYVRt9yw+7BYpcm0p51VZzVCsfMxRVkn+O1eUvsaXq3f13f87QHKYP2f0uqkGf5PvnKIdSaI/ix8WJhD8XT+h0OkHEcaBvUtSG7zbEhvG21WPHwgw2rvZSneArQ8tOitZC0u8VXSfdhtf6ynRseo0xC95634UwQAZivhQ2v4A6Tp57QG5DCXIJ9/z3PkINx3KB/hOeh0EP6Dpbp+7V0/t9778E3whpm4llrH144kzROhA7EgUgkZOjAVjxGCYlcj3xQPnnItihVOZ5B5qLwIDAQABo1AwTjAdBgNVHQ4EFgQUPLhrB+Qb/Kzz7Car9GJkKmEkz6swHwYDVR0jBBgwFoAUPLhrB+Qb/Kzz7Car9GJkKmEkz6swDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAd+4E6t0j8/p8rbZE8y/gZ9GsiRhxkR4l6JbMRUfEpqHKi415qstChRcP2Lo3Yd5qdmj9tLDWoPsqet1QgyTTmQTgUmPhhMOQDqSh90LuqEJseKWafXGS/SfWLH6MWVmzDV5YofJEw2ThPiU58GiS06OLS2poq1eAesa2LQ22J8yYisXM4sxImIFte+LYQ1+1evfBWcvU1vrGsQ0VLJHdef9WoXp1swUFhq4Zk0c7gjHiB1CFVlExAAlk9L6W3CVXmKIYlf4eUnEBGkC061Ir42+uhAMWO9Y/L1NEuboTyd2KAI/6JdKdzpmfk7zPVxWlNxNCZ7OPNuvOKp6VlpB2EA==', 'certData' => 'MIIDpTCCAo2gAwIBAgIJAJIgibrB7NvsMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAk5PMR4wHAYDVQQKDBVQcm9ncmFtdmFyZXZlcmtzdGVkZXQxGDAWBgNVBAMMD2lkcC5wdnYubnRudS5ubzEgMB4GCSqGSIb3DQEJARYRZHJpZnRAcHZ2Lm50bnUubm8wHhcNMTcxMTEzMjI0NTQyWhcNMjcxMTEzMjI0NTQyWjBpMQswCQYDVQQGEwJOTzEeMBwGA1UECgwVUHJvZ3JhbXZhcmV2ZXJrc3RlZGV0MRgwFgYDVQQDDA9pZHAucHZ2Lm50bnUubm8xIDAeBgkqhkiG9w0BCQEWEWRyaWZ0QHB2di5udG51Lm5vMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAveLujCsgVCRA360y5yezy8FcSPhaqodggDqY12UTkYOMQLBFaph6uUL4oCUlXZqxScrAYVRt9yw+7BYpcm0p51VZzVCsfMxRVkn+O1eUvsaXq3f13f87QHKYP2f0uqkGf5PvnKIdSaI/ix8WJhD8XT+h0OkHEcaBvUtSG7zbEhvG21WPHwgw2rvZSneArQ8tOitZC0u8VXSfdhtf6ynRseo0xC95634UwQAZivhQ2v4A6Tp57QG5DCXIJ9/z3PkINx3KB/hOeh0EP6Dpbp+7V0/t9778E3whpm4llrH144kzROhA7EgUgkZOjAVjxGCYlcj3xQPnnItihVOZ5B5qLwIDAQABo1AwTjAdBgNVHQ4EFgQUPLhrB+Qb/Kzz7Car9GJkKmEkz6swHwYDVR0jBBgwFoAUPLhrB+Qb/Kzz7Car9GJkKmEkz6swDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAd+4E6t0j8/p8rbZE8y/gZ9GsiRhxkR4l6JbMRUfEpqHKi415qstChRcP2Lo3Yd5qdmj9tLDWoPsqet1QgyTTmQTgUmPhhMOQDqSh90LuqEJseKWafXGS/SfWLH6MWVmzDV5YofJEw2ThPiU58GiS06OLS2poq1eAesa2LQ22J8yYisXM4sxImIFte+LYQ1+1evfBWcvU1vrGsQ0VLJHdef9WoXp1swUFhq4Zk0c7gjHiB1CFVlExAAlk9L6W3CVXmKIYlf4eUnEBGkC061Ir42+uhAMWO9Y/L1NEuboTyd2KAI/6JdKdzpmfk7zPVxWlNxNCZ7OPNuvOKp6VlpB2EA==',
'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient', 'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient',
]; );

6
flake.lock generated

@ -2,11 +2,11 @@
"nodes": { "nodes": {
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1741678040, "lastModified": 1707939175,
"narHash": "sha256-rmBsz7BBcDwfvDkxnKHmolKceGJrr0nyz5PQYZg0kMk=", "narHash": "sha256-D1xan0lgxbmXDyzVqXTiSYHLmAMrMRdD+alKzEO/p3w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3ee8818da146871cd570b164fc4f438f78479a50", "rev": "f7e8132daca31b1e3859ac0fb49741754375ac3d",
"type": "github" "type": "github"
}, },
"original": { "original": {

@ -18,7 +18,7 @@
in { in {
packages = forAllSystems (system: pkgs: { packages = forAllSystems (system: pkgs: {
default = self.packages.${system}.pvv-nettsiden; default = self.packages.${system}.pvv-nettsiden;
pvv-nettsiden = pkgs.callPackage ./nix/package.nix { php = pkgs.php84; }; pvv-nettsiden = pkgs.callPackage ./nix/package.nix { php = pkgs.php82; };
}); });
overlays.default = final: prev: { overlays.default = final: prev: {
@ -33,5 +33,9 @@
devShells = forAllSystems (system: pkgs: { devShells = forAllSystems (system: pkgs: {
default = pkgs.callPackage ./nix/shell.nix { inherit pkgs; }; default = pkgs.callPackage ./nix/shell.nix { inherit pkgs; };
}); });
# TODO:
# - Relicense the project to GPL or something
# - Write a module for the project
}; };
} }

@ -1,13 +1,11 @@
<?php <?php
declare(strict_types=1);
require __DIR__ . '/../src/_autoload.php'; require __DIR__ . '/../src/_autoload.php';
require __DIR__ . '/../config.php'; require __DIR__ . '/../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$agenda = new pvv\side\Agenda([ $agenda = new \pvv\side\Agenda([
new pvv\side\social\NerdepitsaActivity(), new \pvv\side\social\NerdepitsaActivity,
new pvv\side\social\AnimekveldActivity(), new \pvv\side\social\AnimekveldActivity,
new pvv\side\DBActivity($pdo), new \pvv\side\DBActivity($pdo),
]); ]);

@ -1,36 +1,33 @@
<?php <?php
declare(strict_types=1);
// Set up database and user system, // Set up database and user system,
// and include common files such as HTML includes or SimplSAMLphp. // and include common files such as HTML includes or SimplSAMLphp.
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'agenda.php'; require_once __DIR__ . DIRECTORY_SEPARATOR . 'agenda.php';
require_once __DIR__ . \DIRECTORY_SEPARATOR . 'navbar.php'; require_once __DIR__ . DIRECTORY_SEPARATOR . 'navbar.php';
require_once dirname(__DIR__) . implode(\DIRECTORY_SEPARATOR, ['', 'config.php']); require_once dirname(__DIR__) . implode(DIRECTORY_SEPARATOR, ['', 'config.php']);
require_once dirname(__DIR__) . implode(\DIRECTORY_SEPARATOR, ['', 'src', '_autoload.php']); require_once dirname(__DIR__) . implode(DIRECTORY_SEPARATOR, ['', 'src', '_autoload.php']);
require_once dirname(__DIR__) . implode(\DIRECTORY_SEPARATOR, ['', 'vendor', 'simplesamlphp', 'simplesamlphp', 'lib', '_autoload.php']); require_once dirname(__DIR__) . implode(DIRECTORY_SEPARATOR, ['', 'vendor', 'simplesamlphp', 'simplesamlphp', 'lib', '_autoload.php']);
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
$sp = 'default-sp'; $sp = 'default-sp';
$as = new SimpleSAML\Auth\Simple($sp); $as = new \SimpleSAML\Auth\Simple($sp);
use pvv\side\Agenda; use \pvv\side\Agenda;
$agenda = new \pvv\side\Agenda([
$agenda = new Agenda([
// new \pvv\side\social\NerdepitsaActivity, // new \pvv\side\social\NerdepitsaActivity,
// new \pvv\side\social\AnimekveldActivity, // new \pvv\side\social\AnimekveldActivity,
new pvv\side\social\HackekveldActivity(), new \pvv\side\social\HackekveldActivity,
new pvv\side\social\BrettspillActivity(), new \pvv\side\social\BrettspillActivity,
new pvv\side\social\DriftkveldActivity(), new \pvv\side\social\DriftkveldActivity,
new pvv\side\DBActivity($pdo), new \pvv\side\DBActivity($pdo),
]); ]);
$months_translations = ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember']; $months_translations = ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'];

@ -1,74 +1,70 @@
<?php <?php
function navbar($depth, $active = NULL) {
declare(strict_types=1); $result = "\n\t<ul id=\"menu\">\n";
function navbar($depth, $active = null) { $menuItems = [
$result = "\n\t<ul id=\"menu\">\n"; 'Hjem' => '',
$menuItems = [ 'Hendelser' => 'hendelser',
'Hjem' => '', //'Kalender' => 'kalender',
'Hendelser' => 'hendelser', //'Aktiviteter' => 'aktiviteter',
// 'Kalender' => 'kalender', 'Prosjekter' => 'prosjekt',
// 'Aktiviteter' => 'aktiviteter', 'Kontakt' => 'kontakt',
'Prosjekter' => 'prosjekt', 'Webmail' => 'https://webmail.pvv.ntnu.no/roundcube/',
'Kontakt' => 'kontakt', 'Galleri' => 'galleri',
'Webmail' => 'https://webmail.pvv.ntnu.no/roundcube/', 'Wiki' => 'https://wiki.pvv.ntnu.no/',
'Galleri' => 'galleri', 'Git' => 'https://git.pvv.ntnu.no/',
'Wiki' => 'https://wiki.pvv.ntnu.no/', 'Tjenester' => 'tjenester',
'Git' => 'https://git.pvv.ntnu.no/', ];
'Tjenester' => 'tjenester', foreach($menuItems as $caption => $link) {
]; $isActive = $active === $link;
foreach ($menuItems as $caption => $link) { if (substr( $link, 0, 4 ) != "http") {
$isActive = $active === $link; $link = rtrim(str_repeat('../', $depth) . $link, '/') . '/';
if (substr($link, 0, 4) !== 'http') { }
$link = rtrim(str_repeat('../', $depth) . $link, '/') . '/';
} //if ($isActive) $link = '#';
// if ($isActive) $link = '#'; $result .= "\t\t<li" . ($isActive ? ' class="active"' : '') . '>'
. '<a href="' . $link . '">'
$result .= "\t\t<li" . ($isActive ? ' class="active"' : '') . '>' . $caption
. '<a href="' . $link . '">' . "</a></li>\n"
. $caption ;
. "</a></li>\n"; }
} return $result . "\t</ul>\n";
return $result . "\t</ul>\n";
} }
function loginBar($sp = null, $pdo = null) { function loginBar($sp = null, $pdo = null) {
if (null === $sp) { if (is_null($sp)) $sp = 'default-sp';
$sp = 'default-sp'; $result = "\n";
} require_once(__DIR__ . '/../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$result = "\n"; $as = new \SimpleSAML\Auth\Simple($sp);
require_once __DIR__ . '/../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php';
$as = new SimpleSAML\Auth\Simple($sp);
$svg = '<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 64 64"> $svg = '<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 64 64">
<circle cx="32" cy="27" r="14" stroke-width="0" /> <circle cx="32" cy="27" r="14" stroke-width="0" />
<ellipse cx="32" cy="66" rx="24" ry="28" stroke-width="0" /> <ellipse cx="32" cy="66" rx="24" ry="28" stroke-width="0" />
</svg> </svg>
'; ';
$attr = $as->getAttributes(); $attr = $as->getAttributes();
if ($attr) { if($attr) {
$uname = $attr['uid'][0]; $uname = $attr['uid'][0];
$isAdmin = false; $isAdmin = false;
if (isset($pdo)) { if (isset($pdo)) {
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
$isAdmin = $userManager->isAdmin($uname); $isAdmin = $userManager->isAdmin($uname);
} }
$result .= "\t<a id=\"login\" href=\"#usermenu\" aria-hidden=\"true\">{$svg}" . htmlspecialchars($uname) . "</a>\n"; $result .= "\t<a id=\"login\" href=\"#usermenu\" aria-hidden=\"true\">{$svg}" . htmlspecialchars($uname) . "</a>\n";
$result .= "\n\t<ul id=\"usermenu\">\n"; $result .= "\n\t<ul id=\"usermenu\">\n";
$result .= "\n\t\t<li><a id=\"login\" href=\"#\">{$svg}" . htmlspecialchars($uname) . "</a></li>\n"; $result .= "\n\t\t<li><a id=\"login\" href=\"#\">{$svg}" . htmlspecialchars($uname) . "</a></li>\n";
if ($isAdmin) { if ($isAdmin) {
$result .= "\n\t\t<li><a href=\"/admin/\">Admin</a></li>\n"; $result .= "\n\t\t<li><a href=\"/admin/\">Admin</a></li>\n";
} }
$result .= "\n\t\t<li><a href=\"" . htmlspecialchars($as->getLogoutURL()) . "\">Logg ut</a></li>\n"; $result .= "\n\t\t<li><a href=\"" . htmlspecialchars($as->getLogoutURL()) . "\">Logg ut</a></li>\n";
$result .= "\n\t</ul>\n"; $result .= "\n\t</ul>\n";
} else { } else {
$result .= "\t<a id=\"login\" href=\"" . htmlspecialchars($as->getLoginURL()) . "\">{$svg}Logg inn</a>\n"; $result .= "\t<a id=\"login\" href=\"" . htmlspecialchars($as->getLoginURL()) . "\">{$svg}Logg inn</a>\n";
} }
$result .= "\n\t<a href=\"#menu\" id=\"menu_toggle\" aria-hidden=\"true\"><big>&#9776;&nbsp;</big>MENU</a>\n"; $result .= "\n\t<a href=\"#menu\" id=\"menu_toggle\" aria-hidden=\"true\"><big>&#9776;&nbsp;</big>MENU</a>\n";
return $result; return $result;
} }

@ -196,6 +196,9 @@ in
include ${pkgs.nginx}/conf/fastcgi_params; include ${pkgs.nginx}/conf/fastcgi_params;
fastcgi_param SCRIPT_FILENAME ${finalPackage}/share/php/pvv-nettsiden/www$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME ${finalPackage}/share/php/pvv-nettsiden/www$fastcgi_script_name;
fastcgi_pass unix:${config.services.phpfpm.pools."pvv-nettsiden".socket}; fastcgi_pass unix:${config.services.phpfpm.pools."pvv-nettsiden".socket};
location = /spaceapi.php {
add_header Content-Type application/json;
}
''; '';
# based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx # based on https://simplesamlphp.org/docs/stable/simplesamlphp-install.html#configuring-nginx

@ -7,7 +7,7 @@ php.buildComposerProject rec {
src = ./..; src = ./..;
pname = "pvv-nettsiden"; pname = "pvv-nettsiden";
version = "0.0.1"; version = "0.0.1";
vendorHash = "sha256-8UYf7FhrTKgCa2e8GwhU8EF1AfWzZtgseTZqUAGOL0U="; vendorHash = "sha256-sWC5E60toa95re2NugvHVPT+vKYXc1I6Z3rSqXxTUu0=";
passthru.simplesamlphpPath = "share/php/pvv-nettsiden/vendor/simplesamlphp/simplesamlphp"; passthru.simplesamlphpPath = "share/php/pvv-nettsiden/vendor/simplesamlphp/simplesamlphp";

@ -1,31 +1,26 @@
{ pkgs, lib }: { pkgs }:
let let
phpEnv = pkgs.php84.buildEnv { phpEnv = pkgs.php82.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 ]);
}; };
in in
pkgs.mkShellNoCC { pkgs.mkShellNoCC {
buildInputs = with pkgs; [ buildInputs = with pkgs; [
phpEnv phpEnv
php84Packages.composer php82Packages.composer
php84Packages.php-parallel-lint
php84Packages.php-cs-fixer
sqlite-interactive
sql-formatter
];
# Prepare dev environment with sqlite and config files sqlite
git
];
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/'
declare -a PROJECT_ROOT="$("${lib.getExe pkgs.git}" rev-parse --show-toplevel)" # Prepare dev environment with sqlite and config files
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 "$PROJECT_ROOT/vendor" ] ; then if [ ! -d vendor ] ; then
pushd "$PROJECT_ROOT"
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,8 +29,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/www/ www/simplesaml
popd "$PROJECT_ROOT"
fi fi
''; '';
} }

@ -1,6 +1,4 @@
<?php <?php
declare(strict_types=1);
/* /*
* Copyright (c) 2014-2015, Jørn Åne de Jong <@jornane> * Copyright (c) 2014-2015, Jørn Åne de Jong <@jornane>
* *
@ -16,7 +14,7 @@ declare(strict_types=1);
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
/* /**
* Register SPL autoloading for classes and interfaces. Put this file in your * Register SPL autoloading for classes and interfaces. Put this file in your
* namespace root and make sure it gets included from your PHP entry-point. * namespace root and make sure it gets included from your PHP entry-point.
* *
@ -36,6 +34,6 @@ declare(strict_types=1);
* @link http://php.net/manual/en/function.spl-autoload.php * @link http://php.net/manual/en/function.spl-autoload.php
* @license http://choosealicense.com/licenses/isc/ ISC license * @license http://choosealicense.com/licenses/isc/ ISC license
*/ */
spl_autoload_extensions('.php'); spl_autoload_extensions( '.php' );
spl_autoload_register('spl_autoload'); spl_autoload_register( 'spl_autoload' );
set_include_path(realpath(__DIR__) . \PATH_SEPARATOR . get_include_path()); set_include_path( realpath( __DIR__ ) . PATH_SEPARATOR . get_include_path() );

@ -1,138 +1,134 @@
<?php <?php
declare(strict_types=1);
namespace pvv\admin; namespace pvv\admin;
class UserManager { use \PDO;
private $pdo;
public $usergroups = [ class UserManager{
'admin' => 1, private $pdo;
'prosjekt' => 2,
'aktiviteter' => 4,
];
public function __construct($pdo) { public $usergroups = [
$this->pdo = $pdo; 'admin' => 1,
} 'prosjekt' => 2,
'aktiviteter' => 4
];
public function setupUser($uname, $groups = 0): void { public function __construct($pdo){
$query = 'INSERT INTO users (uname, groups) VALUES (:uname, :groups)'; $this->pdo = $pdo;
$statement = $this->pdo->prepare($query); }
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
$statement->bindParam(':groups', $groups, \PDO::PARAM_INT);
$statement->execute();
}
public function updateFlags($uname, $flags): void { public function setupUser($uname, $groups=0){
$query = 'UPDATE users set groups=:groups WHERE uname=:uname'; $query = 'INSERT INTO users (uname, groups) VALUES (:uname, :groups)';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->bindParam(':groups', $flags, \PDO::PARAM_INT); $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR); $statement->bindParam(':groups', $groups, PDO::PARAM_INT);
} $statement->execute();
}
public function addGroup($uname, $group): void { public function updateFlags($uname, $flags){
$userFlags = $this->getUsergroups($uname); $query = 'UPDATE users set groups=:groups WHERE uname=:uname';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':groups', $flags, PDO::PARAM_INT);
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
}
if ($userFlags) { public function addGroup($uname, $group){
$newFlags = ($group | $userFlags); $userFlags = $this->getUsergroups($uname);
$this->updateFlags($uname, $newFlags);
}
}
public function removeGroup($uname, $group): void { if($userFlags){
$userFlags = $this->getUsergroups($uname); $newFlags = ($group | $userFlags);
$this->updateFlags($uname, $newFlags);
}
}
if ($userFlags) { public function removeGroup($uname, $group){
$newFlags = ($userFlags & (~ $group)); $userFlags = $this->getUsergroups($uname);
$this->updateFlags($uname, $newFlags);
}
}
public function setGroups($uname, $groups): void { if($userFlags){
$query = 'SELECT * FROM users WHERE uname=:uname LIMIT 1'; $newFlags = ($userFlags & (~ $group));
$statement = $this->pdo->prepare($query); $this->updateFlags($uname, $newFlags);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR); }
$statement->execute(); }
$row = $statement->fetch();
if ($row) { public function setGroups($uname, $groups){
$query = 'UPDATE users set groups=:groups WHERE uname=:uname'; $query = 'SELECT * FROM users WHERE uname=:uname LIMIT 1';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->bindParam(':groups', $groups, \PDO::PARAM_INT); $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR); $statement->execute();
$statement->execute(); $row = $statement->fetch();
} else {
$this->setupUser($uname, $groups);
}
}
public function hasGroup($uname, $groupName) { if($row){
$userFlags = $this->getUsergroups($uname); $query = 'UPDATE users set groups=:groups WHERE uname=:uname';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':groups', $groups, PDO::PARAM_INT);
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->execute();
}else{
$this->setupUser($uname, $groups);
}
}
return $userFlags & $this->usergroups[$groupName]; public function hasGroup($uname, $groupName){
} $userFlags = $this->getUsergroups($uname);
// for convenience return ($userFlags & $this->usergroups[$groupName]);
public function isAdmin($uname) { }
return $this->hasGroup($uname, 'admin');
}
public function getFlagfromNames($names) { // for convenience
$resultFlag = 0; public function isAdmin($uname){
return $this->hasGroup($uname, 'admin');
}
foreach ($this->usergroups as $name => $flag) { public function getFlagfromNames($names){
if (\in_array($name, $names, true)) { $resultFlag = 0;
$resultFlag = ($resultFlag | $flag);
}
}
return $resultFlag; foreach($this->usergroups as $name => $flag){
} if(in_array($name, $names)){
$resultFlag = ($resultFlag | $flag);
}
}
public function getUsergroups($uname) { return $resultFlag;
$query = 'SELECT groups FROM users WHERE uname=:uname LIMIT 1'; }
$statement = $this->pdo->prepare($query);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
$statement->execute();
$row = $statement->fetch(); public function getUsergroups($uname){
if ($row === false) { $query = 'SELECT groups FROM users WHERE uname=:uname LIMIT 1';
return 0; $statement = $this->pdo->prepare($query);
} $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->execute();
return $row[0]; $row = $statement->fetch();
} if ($row == false) return 0;
return $row[0];
}
public function getUsergroupNames($uname) { public function getUsergroupNames($uname){
$usersGroups = []; $usersGroups = [];
$userFlags = $this->getUsergroups($uname); $userFlags = $this->getUsergroups($uname);
foreach ($this->usergroups as $name => $flag) { foreach($this->usergroups as $name => $flag){
if ($userFlags & $flag) { if($userFlags & $flag){
$usersGroups[] = $name; $usersGroups[] = $name;
} }
} }
return $usersGroups; return $usersGroups;
} }
public function getAllUserData() { public function getAllUserData(){
$query = 'SELECT uname FROM users ORDER BY uname ASC'; $query = 'SELECT uname FROM users ORDER BY uname ASC';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->execute(); $statement->execute();
$users = []; $users = [];
foreach ($statement->fetchAll() as $userData) { foreach($statement->fetchAll() as $userData){
$uname = $userData['uname']; $uname = $userData['uname'];
$users[] = [ $users[] = [
'name' => $uname, 'name' => $uname,
'groups' => $this->getUsergroupNames($uname), 'groups' => $this->getUsergroupNames($uname)
]; ];
} }
return $users; return $users;
} }
} }

@ -1,11 +1,12 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
interface Activity { use \DateTimeImmutable;
public function getNextEventFrom(\DateTimeImmutable $date) /* : Event */;
interface Activity {
public function getNextEventFrom(DateTimeImmutable $date) /* : Event */;
public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */;
public function getPreviousEventFrom(\DateTimeImmutable $date) /* : Event */;
} }

@ -1,114 +1,106 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
use \DateTimeImmutable;
use \DateInterval;
class Agenda { class Agenda {
private $activities;
public const TODAY = 0; const TODAY = 0;
public const TOMORROW = 1; const TOMORROW = 1;
public const THIS_WEEK = 2; const THIS_WEEK = 2;
public const NEXT_WEEK = 3; const NEXT_WEEK = 3;
public const THIS_MONTH = 4; const THIS_MONTH = 4;
public const NEXT_MONTH = 5; const NEXT_MONTH = 5;
public function __construct($activities) { public function __construct($activities) {
$this->activities = $activities; $this->activities = $activities;
} }
public static function getFormattedDate($date) { public static function getFormattedDate($date) {
return $date->format('l j. M H.i'); return trim(strftime('%A %e. %b %H.%M', $date->getTimeStamp()));
}
public function getEventsBetween(\DateTimeImmutable $from, \DateTimeImmutable $to) {
$results = [];
for ($i = 0; $i < \count($this->activities); ++$i) {
$result = [];
do {
$run = false;
if (\count($result)) {
$date = end($result)->getStop();
} else {
$date = $from;
}
$next = $this->activities[$i]->getNextEventFrom($date);
if (isset($next) && $next->getStart() < $to) {
$result[] = $this->activities[$i]->getNextEventFrom($date);
$run = true;
}
} while ($run);
$results[] = $result;
}
$result = [];
foreach ($results as $a) {
foreach ($a as $b) {
$result[] = $b;
}
}
usort($result, static fn($a, $b) => ($a->getStart() < $b->getStart()) ? -1 : 1);
return $result;
}
public function getNextDays() {
$result = [[], [], [], [], [], []];
$events = $this->getEventsBetween(
(new \DateTimeImmutable())->setTime(0, 0),
(new \DateTimeImmutable())->setTime(23, 59)->add(new \DateInterval('P1M'))
);
foreach ($events as $event) {
$index = self::NEXT_MONTH;
if (self::isToday($event->getStart())) {
$index = self::TODAY;
} elseif (self::isTomorrow($event->getStart())) {
$index = self::TOMORROW;
} elseif (self::isThisWeek($event->getStart())) {
$index = self::THIS_WEEK;
} elseif (self::isNextWeek($event->getStart())) {
$index = self::NEXT_WEEK;
} elseif (self::isThisMonth($event->getStart())) {
$index = self::THIS_MONTH;
}
$result[$index][] = $event;
} }
return $result; public function getEventsBetween(DateTimeImmutable $from, DateTimeImmutable $to) {
} $results = [];
for($i = 0; $i < sizeof($this->activities); $i++) {
$result = [];
do {
$run = false;
if (sizeof($result)) {
$date = end($result)->getStop();
} else {
$date = $from;
}
$next = $this->activities[$i]->getNextEventFrom($date);
if (isset($next) && $next->getStart() < $to) {
$result[] = $this->activities[$i]->getNextEventFrom($date);
$run = true;
}
} while ($run);
$results[] = $result;
}
$result = [];
foreach($results as $a) foreach($a as $b) $result[] = $b;
usort($result, function($a, $b) {
return ($a->getStart() < $b->getStart()) ? -1 : 1;
});
return $result;
}
public function getNextOfEach(\DateTimeImmutable $startDate) { public function getNextDays() {
$result = array_filter(array_map( $result = [[], [], [], [], [], []];
static fn($a) => $a->getNextEventFrom($startDate), $events = $this->getEventsBetween(
$this->activities (new DateTimeImmutable)->setTime(0, 0),
), static fn($a) => isset($a)); (new DateTimeImmutable)->setTime(23, 59)->add(new DateInterval('P1M'))
usort( );
$result, foreach ($events as $event) {
static fn($a, $b) => ($a->getStart()->getTimeStamp() < $b->getStart()->getTimeStamp()) $index = self::NEXT_MONTH;
? -1 if (self::isToday($event->getStart())) $index = self::TODAY;
: 1 elseif (self::isTomorrow($event->getStart())) $index = self::TOMORROW;
); elseif (self::isThisWeek($event->getStart())) $index = self::THIS_WEEK;
elseif (self::isNextWeek($event->getStart())) $index = self::NEXT_WEEK;
elseif (self::isThisMonth($event->getStart())) $index = self::THIS_MONTH;
$result[$index][] = $event;
}
return $result;
}
return $result; public function getNextOfEach(DateTimeImmutable $startDate) {
} $result = array_filter(array_map(
function($a) use ($startDate){
return $a->getNextEventFrom($startDate);
}, $this->activities
), function($a){
return isset($a);
});
usort($result, function($a, $b) {
return ($a->getStart()->getTimeStamp() < $b->getStart()->getTimeStamp())
? -1
: 1
;
});
return $result;
}
public static function isToday(\DateTimeImmutable $date) { public static function isToday(DateTimeImmutable $date) {
return $date->format('dmY') == date('dmY'); return $date->format('dmY') == date('dmY');
} }
public static function isTomorrow(\DateTimeImmutable $date) { public static function isTomorrow(DateTimeImmutable $date) {
return $date->sub(new \DateInterval('P1D'))->format('dmY') == date('dmY'); return $date->sub(new DateInterval('P1D'))->format('dmY') == date('dmY');
} }
public static function isThisWeek(\DateTimeImmutable $date) { public static function isThisWeek(DateTimeImmutable $date) {
return $date->format('WY') == date('WY'); return $date->format('WY') == date('WY');
} }
public static function isNextWeek(\DateTimeImmutable $date) { public static function isNextWeek(DateTimeImmutable $date) {
return $date->sub(new \DateInterval('P7D'))->format('WY') == date('WY'); return $date->sub(new DateInterval('P7D'))->format('WY') == date('WY');
} }
public static function isThisMonth(DateTimeImmutable $date) {
return $date->format('mY') == date('mY');
}
public static function isThisMonth(\DateTimeImmutable $date) {
return $date->format('mY') == date('mY');
}
} }

@ -1,83 +1,84 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
use \DateTimeImmutable;
use \PDO;
class DBActivity implements Activity { class DBActivity implements Activity {
private $pdo;
public function __construct(\PDO $pdo) { public function __construct(PDO $pdo) {
$this->pdo = $pdo; $this->pdo = $pdo;
} }
public function getAllEvents() { public function getAllEvents() {
$query = 'SELECT * FROM events ORDER BY id DESC'; $query = 'SELECT * FROM events ORDER BY id DESC';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->execute(); $statement->execute();
$events = []; $events = [];
foreach ($statement->fetchAll() as $dbEvent) { foreach($statement->fetchAll() as $dbEvent){
$event = new SimpleEvent( $event = new SimpleEvent(
$dbEvent['id'], $dbEvent['id'],
$dbEvent['name'], $dbEvent['name'],
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['start']), DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['start']),
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['stop']), DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['stop']),
$dbEvent['organiser'], $dbEvent['organiser'],
$dbEvent['location'], $dbEvent['location'],
$dbEvent['description'] $dbEvent['description']
); );
$events[] = $event; $events[] = $event;
} }
return $events; return $events;
} }
public function getEventByID($id) { public function getEventByID($id) {
$query = 'SELECT * FROM events WHERE id=:id LIMIT 1'; $query = 'SELECT * FROM events 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();
$dbEvent = $statement->fetch(); $dbEvent = $statement->fetch();
$event = new SimpleEvent(
$dbEvent['id'],
$dbEvent['name'],
DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['start']),
DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['stop']),
$dbEvent['organiser'],
$dbEvent['location'],
$dbEvent['description']
);
return new SimpleEvent( return $event;
$dbEvent['id'], }
$dbEvent['name'],
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['start']),
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $dbEvent['stop']),
$dbEvent['organiser'],
$dbEvent['location'],
$dbEvent['description']
);
}
public function getNextEventFrom(\DateTimeImmutable $date) {
$query = 'SELECT id,name,start,stop,organiser,location,description FROM events WHERE start > :date ORDER BY start ASC LIMIT 1';
return $this->retrieve($date, $query); public function getNextEventFrom(DateTimeImmutable $date) {
} $query = 'SELECT id,name,start,stop,organiser,location,description FROM events WHERE start > :date ORDER BY start ASC LIMIT 1';
return $this->retrieve($date, $query);
}
public function getPreviousEventFrom(\DateTimeImmutable $date) { public function getPreviousEventFrom(DateTimeImmutable $date) {
$query = 'SELECT id,name,start,stop,organiser,location,description FROM events WHERE start < :date ORDER BY start DESC LIMIT 1'; $query = 'SELECT id,name,start,stop,organiser,location,description FROM events WHERE start < :date ORDER BY start DESC LIMIT 1';
return $this->retrieve($date, $query);
}
return $this->retrieve($date, $query); private function retrieve($date, $query) {
} $stmt = $this->pdo->prepare($query);
$stmt->execute(['date' => $date->format('Y-m-d H:i:s')]);
if ($result = $stmt->fetch(PDO::FETCH_ASSOC)){
$ev = new SimpleEvent(
$result['id'],
$result['name'],
DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $result['start']),
DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $result['stop']),
$result['organiser'],
$result['location'],
$result['description']
);
return $ev;
}
return null;
}
private function retrieve($date, $query) {
$stmt = $this->pdo->prepare($query);
$stmt->execute(['date' => $date->format('Y-m-d H:i:s')]);
if ($result = $stmt->fetch(\PDO::FETCH_ASSOC)) {
return new SimpleEvent(
$result['id'],
$result['name'],
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $result['start']),
\DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $result['stop']),
$result['organiser'],
$result['location'],
$result['description']
);
}
}
} }

@ -1,76 +1,74 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
class Door { use \PDO;
private $pdo;
public function __construct(\PDO $pdo) { class Door{
$this->pdo = $pdo; private $pdo;
}
public function getAll() { public function __construct(PDO $pdo){
$query = 'SELECT time, open FROM door ORDER BY time DESC'; $this->pdo = $pdo;
$statement = $this->pdo->prepare($query); }
$statement->execute();
$doorEvents = []; public function getAll() {
foreach ($statement->fetchAll() as $row) { $query = 'SELECT time, open FROM door ORDER BY time DESC';
$doorEvents[] = [ $statement = $this->pdo->prepare($query);
'time' => (int) $row['time'], $statement->execute();
'open' => (bool) $row['open'],
];
}
return $doorEvents; $doorEvents = [];
} foreach($statement->fetchAll() as $row){
$doorEvents[] = [
'time' => (int)$row['time'],
'open' => (bool)$row['open']
];
}
public function getEntriesAfter($startTime) { return $doorEvents;
$query = 'SELECT time, open FROM door WHERE time > :startTime ORDER BY time DESC'; }
$statement = $this->pdo->prepare($query);
$statement->bindParam(':startTime', $startTime, \PDO::PARAM_STR);
$statement->execute();
$doorEvents = []; public function getEntriesAfter($startTime) {
foreach ($statement->fetchAll() as $row) { $query = 'SELECT time, open FROM door WHERE time > :startTime ORDER BY time DESC';
$doorEvents[] = [ $statement = $this->pdo->prepare($query);
'time' => (int) $row['time'], $statement->bindParam(':startTime', $startTime, PDO::PARAM_STR);
'open' => (bool) $row['open'], $statement->execute();
];
}
return $doorEvents; $doorEvents = [];
} foreach($statement->fetchAll() as $row){
$doorEvents[] = [
'time' => (int)$row['time'],
'open' => (bool)$row['open']
];
}
public function getCurrent() { return $doorEvents;
$query = 'SELECT time, open FROM door ORDER BY time DESC LIMIT 1'; }
$statement = $this->pdo->prepare($query);
$statement->execute();
$row = $statement->fetch();
return [ public function getCurrent() {
'time' => (int) $row['time'], $query = 'SELECT time, open FROM door ORDER BY time DESC LIMIT 1';
'open' => (bool) $row['open'], $statement = $this->pdo->prepare($query);
]; $statement->execute();
} $row = $statement->fetch();
return [
'time' => (int)$row['time'],
'open' => (bool)$row['open']
];
}
private function removeOld(): void { private function removeOld() {
$firstValidTime = time() - 60 * 60 * 24 * 7; // One week before now $firstValidTime = time() - 60*60*24*7; //One week before now
$query = 'DELETE FROM door WHERE time < :firstValid'; $query = 'DELETE FROM door WHERE time < :firstValid';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->bindParam(':firstValid', $firstValidTime, \PDO::PARAM_STR); $statement->bindParam(':firstValid', $firstValidTime, PDO::PARAM_STR);
$statement->execute(); $statement->execute();
} }
public function createEvent($time, $open): void { public function createEvent($time, $open) {
$query = 'INSERT INTO door(time, open) VALUES (:time, :open)'; $query = 'INSERT INTO door(time, open) VALUES (:time, :open)';
$statement = $this->pdo->prepare($query); $statement = $this->pdo->prepare($query);
$statement->bindParam(':time', $time, \PDO::PARAM_STR); $statement->bindParam(':time', $time, PDO::PARAM_STR);
$statement->bindParam(':open', $open, \PDO::PARAM_STR); $statement->bindParam(':open', $open, PDO::PARAM_STR);
$statement->execute(); $statement->execute();
$this->removeOld(); $this->removeOld();
} }
} }

@ -1,55 +1,53 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
use DateTimeImmutable; use \DateTimeImmutable;
use \DateInterval;
abstract class Event { abstract class Event {
private $start;
public function __construct(\DateTimeImmutable $start) { private $start;
$this->start = $start;
}
public function getStart() { public function __construct(DateTimeImmutable $start) {
return $this->start; $this->start = $start;
} }
public function getRelativeDate() { public function getStart() {
if (Agenda::isToday($this->getStart())) { return $this->start;
return 'i dag'; }
}
if (Agenda::isTomorrow($this->getStart())) {
return 'i morgen';
}
if (Agenda::isThisWeek($this->getStart()) || $this->getStart()->sub(new \DateInterval('P4D'))->getTimestamp() < time()) {
return $this->getStart()->format('l');
}
if (Agenda::isNextWeek($this->getStart())) {
return 'neste uke';
}
if (Agenda::isThisMonth($this->getStart())) {
return 'denne måneden';
}
return $this->getStart()->format('j. F'); public function getRelativeDate() {
} if (Agenda::isToday($this->getStart())) {
return 'i dag';
}
if (Agenda::isTomorrow($this->getStart())) {
return 'i morgen';
}
if (Agenda::isThisWeek($this->getStart()) || $this->getStart()->sub(new DateInterval('P4D'))->getTimestamp() < time()) {
return strftime('%A', $this->getStart()->getTimestamp());
}
if (Agenda::isNextWeek($this->getStart())) {
return 'neste uke';
}
if (Agenda::isThisMonth($this->getStart())) {
return 'denne måneden';
}
return trim(strftime('%e. %B', $this->getStart()->getTimestamp()));
}
abstract public function getStop(); /* : DateTimeImmutable */ public abstract function getStop(); /* : DateTimeImmutable */
abstract public function getName(); public abstract function getName();
abstract public function getLocation(); public abstract function getLocation();
abstract public function getOrganiser(); public abstract function getOrganiser();
abstract public function getURL(); /* : string */ public abstract function getURL(); /* : string */
abstract public function getImageURL(); /* : string */ public abstract function getImageURL(); /* : string */
abstract public function getDescription(); /* : string */ public abstract function getDescription(); /* : string */
abstract public function getColor(); /* : string */ public abstract function getColor(); /* : string */
} }

@ -1,47 +1,49 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
class MOTD { use \PDO;
private $pdo;
public function __construct($pdo) { class MOTD{
$this->pdo = $pdo; private $pdo;
}
public function setMOTD($title, $content): void { public function __construct($pdo){
if (\is_array($content)) { $this->pdo = $pdo;
$content = implode('_', $content); }
}
$query = 'INSERT INTO motd(title, content) VALUES (:title, :content);';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':title', $title, \PDO::PARAM_STR); public function setMOTD($title, $content) {
$statement->bindParam(':content', $content, \PDO::PARAM_STR); if (is_array($content)) {
$content = implode("_", $content);
}
$query = 'INSERT INTO motd(title, content) VALUES (:title, :content);';
$statement = $this->pdo->prepare($query);
$statement->execute(); $statement->bindParam(':title', $title, PDO::PARAM_STR);
} $statement->bindParam(':content', $content, PDO::PARAM_STR);
public function getMOTD() { $statement->execute();
$query = 'SELECT motd.title, motd.content FROM motd ORDER BY motd.id DESC LIMIT 1'; }
$statement = $this->pdo->prepare($query);
$statement->execute(); public function getMOTD() {
$query = 'SELECT motd.title, motd.content FROM motd ORDER BY motd.id DESC LIMIT 1';
$statement = $this->pdo->prepare($query);
$statement->execute();
$data = $statement->fetch(); $data = $statement->fetch();
$motd = array("title" => $data[0], "content" => explode("\n", $data[1]));
return ['title' => $data[0], 'content' => explode("\n", $data[1])]; return $motd;
} }
public function getMOTD_history($limit = 5) {
$query = 'SELECT motd.title, motd.content FROM motd ORDER BY motd.id DESC LIMIT :limit';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':limit', $limit, PDO::PARAM_STR);
$statement->execute();
public function getMOTD_history($limit = 5) { $data = $statement->fetch();
$query = 'SELECT motd.title, motd.content FROM motd ORDER BY motd.id DESC LIMIT :limit'; $motd = array("title" => $data[0], "content" => explode("\n", $data[1]));
$statement = $this->pdo->prepare($query);
$statement->bindParam(':limit', $limit, \PDO::PARAM_STR);
$statement->execute();
$data = $statement->fetch(); return $motd;
}
return ['title' => $data[0], 'content' => explode("\n", $data[1])];
}
} }

@ -1,35 +1,29 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
class Project { class Project{
private $id; private $id, $name, $descr, $active;
private $name;
private $descr;
private $active;
public function __construct($id, $name, $descr, $active) { public function __construct($id, $name, $descr, $active){
$this->id = $id; $this->id = $id;
$this->name = $name; $this->name = $name;
$this->descr = explode("\n", $descr); $this->descr = explode("\n", $descr);
$this->active = $active; $this->active = $active;
} }
public function getID() { public function getID(){
return $this->id; return $this->id;
} }
public function getName() { public function getName(){
return $this->name; return $this->name;
} }
public function getDescription() { public function getDescription(){
return $this->descr; return $this->descr;
} }
public function getActive() { public function getActive(){
return $this->active; return $this->active;
} }
} }

@ -1,120 +1,121 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
class ProjectManager { use \PDO;
private $pdo;
public function __construct(\PDO $pdo) { class ProjectManager{
$this->pdo = $pdo; private $pdo;
}
public function getAll() { public function __construct(PDO $pdo){
$query = 'SELECT * FROM projects ORDER BY id ASC'; $this->pdo = $pdo;
$statement = $this->pdo->prepare($query); }
$statement->execute();
$projects = []; public function getAll() {
foreach ($statement->fetchAll() as $dbProj) { $query = 'SELECT * FROM projects ORDER BY id ASC';
$project = new Project( $statement = $this->pdo->prepare($query);
$dbProj['id'], $statement->execute();
$dbProj['name'],
$dbProj['description'],
$dbProj['active']
);
$projects[] = $project;
}
return $projects; $projects = [];
} foreach($statement->fetchAll() as $dbProj){
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active']
);
$projects[] = $project;
}
public function getByID($id) { return $projects;
$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(); public function getByID($id){
if (!$dbProj) { $query = 'SELECT * FROM projects WHERE id=:id LIMIT 1';
return false; $statement = $this->pdo->prepare($query);
} $statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
return new Project( $dbProj = $statement->fetch();
$dbProj['id'], if (!$dbProj) {
$dbProj['name'], return false;
$dbProj['description'], }
$dbProj['active'] $project = new Project(
); $dbProj['id'],
} $dbProj['name'],
$dbProj['description'],
$dbProj['active']
);
public function getByOwner($uname) { return $project;
$query = 'SELECT projectid FROM projectmembers WHERE uname=:uname'; }
$statement = $this->pdo->prepare($query);
$statement->bindParam(':uname', $uname, \PDO::PARAM_STR);
$statement->execute();
$projectIDs = $statement->fetchAll(); public function getByOwner($uname){
$projects = []; $query = 'SELECT projectid FROM projectmembers WHERE uname=:uname';
foreach ($projectIDs as $id) { $statement = $this->pdo->prepare($query);
$id = $id['projectid']; $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->execute();
$query = 'SELECT * FROM projects WHERE id=:id'; $projectIDs = $statement->fetchAll();
$statement = $this->pdo->prepare($query); $projects = [];
$statement->bindParam(':id', $id, \PDO::PARAM_INT); foreach($projectIDs as $id){
$statement->execute(); $id = $id['projectid'];
$query = 'SELECT * FROM projects WHERE id=:id';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
foreach($statement->fetchAll() as $dbProj){
$project = new Project(
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active']
);
$projects[] = $project;
}
}
foreach ($statement->fetchAll() as $dbProj) { return $projects;
$project = new Project( }
$dbProj['id'],
$dbProj['name'],
$dbProj['description'],
$dbProj['active']
);
$projects[] = $project;
}
}
return $projects; public function getProjectMembers($id){
} $query = 'SELECT * FROM projectmembers WHERE projectid=:id';
$statement = $this->pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_STR);
$statement->execute();
public function getProjectMembers($id) { $members = [];
$query = 'SELECT * FROM projectmembers WHERE projectid=:id'; foreach($statement->fetchAll() as $dbUsr){
$statement = $this->pdo->prepare($query); $members[] = [
$statement->bindParam(':id', $id, \PDO::PARAM_STR); 'name' => $dbUsr['name'],
$statement->execute(); 'uname' => $dbUsr['uname'],
'mail' => $dbUsr['mail'],
'role' => $dbUsr['role'],
'lead' => $dbUsr['lead'],
'owner' => $dbUsr['owner']
];
}
$members = []; return $members;
foreach ($statement->fetchAll() as $dbUsr) { }
$members[] = [
'name' => $dbUsr['name'],
'uname' => $dbUsr['uname'],
'mail' => $dbUsr['mail'],
'role' => $dbUsr['role'],
'lead' => $dbUsr['lead'],
'owner' => $dbUsr['owner'],
];
}
return $members; 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();
public function getProjectOwner($id) { $dbOwner = $statement->fetch();
$query = 'SELECT * FROM projectmembers WHERE (projectid=:id AND owner=1)'; $owner = [
$statement = $this->pdo->prepare($query); 'name' => $dbOwner['name'],
$statement->bindParam(':id', $id, \PDO::PARAM_STR); 'uname' => $dbOwner['uname'],
$statement->execute(); 'mail' => $dbOwner['mail'],
'role' => $dbOwner['role'],
'lead' => $dbOwner['lead'],
'owner' => $dbOwner['owner']
];
$dbOwner = $statement->fetch(); return $owner;
}
return [
'name' => $dbOwner['name'],
'uname' => $dbOwner['uname'],
'mail' => $dbOwner['mail'],
'role' => $dbOwner['role'],
'lead' => $dbOwner['lead'],
'owner' => $dbOwner['owner'],
];
}
} }

@ -1,63 +1,63 @@
<?php <?php
declare(strict_types=1);
namespace pvv\side; namespace pvv\side;
class SimpleEvent extends Event { class SimpleEvent extends Event {
private $id;
private $name;
private $descr;
private $start;
private $end;
private $org;
private $loc;
public function __construct($id, $name, \DateTimeImmutable $start, \DateTimeImmutable $end, $org, $loc, $descr, $_isDBEvent = false) { private $id, $name, $descr, $start, $end, $org, $loc;
$this->id = $id;
$this->name = $name;
$this->start = $start;
$this->end = $end;
$this->org = $org;
$this->loc = $loc;
$this->descr = explode("\n", $descr);
}
public function getID() { public function __construct($id, $name,\DateTimeImmutable $start,\DateTimeImmutable $end,$org, $loc, $descr, $isDBEvent = false){
return $this->id; $this->id = $id;
} $this->name = $name;
$this->start = $start;
$this->end = $end;
$this->org = $org;
$this->loc = $loc;
$this->descr = explode("\n", $descr);
$this->isDBEvent = $isDBEvent;
}
public function getStart() { public function getID(){
return $this->start; return $this->id;
} }
public function getStop() { public function getStart(){
return $this->end; return $this->start;
} }
public function getOrganiser() { public function getStop(){
return $this->org; return $this->end;
} }
public function getLocation() { public function getOrganiser(){
return $this->loc; return $this->org;
} }
public function getName() { public function getLocation(){
return $this->name; return $this->loc;
} }
public function getURL() { public function getName(){
return '/hendelser/info.php?id=' . $this->id; return $this->name;
} }
public function getImageURL(): void {} public function getURL() {
return ('/hendelser/info.php?id=' . $this->id);
}
public function getDescription() { public function getImageURL() {
return $this->descr; return null;
} }
public function getDescription() {
return $this->descr;
}
public function isDBEvent() {
return $this->isDBEvent;
}
public function getColor() {
return "#3b7";
}
public function getColor() {
return '#3b7';
}
} }

@ -1,41 +1,36 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Activity; use \pvv\side\Activity;
use \DateTimeImmutable;
use \DateInterval;
class AnimekveldActivity implements Activity { class AnimekveldActivity implements Activity {
public function nextDate(\DateTimeImmutable $date) {
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));
}
$date = $date->setTime(19, 30, 0);
if (intval($date->format('N')) !== 5) {
return $this->nextDate($date->add(new \DateInterval('P1D')));
}
return $date; public function nextDate(DateTimeImmutable $date) {
} if ($date->format('H') > 20 || $date->format('H') == 19 && $date->format('i') > 30)
return $this->nextDate($date->add(new DateInterval('P1D'))->setTime(19, 30, 0));
$date = $date->setTime(19, 30, 0);
if ($date->format('N') != 5)
return $this->nextDate($date->add(new DateInterval('P1D')));
return $date;
}
public function prevDate(\DateTimeImmutable $date) { public function prevDate(DateTimeImmutable $date) {
if (intval($date->format('H')) < 19 || intval($date->format('H')) === 20 && intval($date->format('i')) < 30) { if ($date->format('H') < 19 || $date->format('H') == 20 && $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'))); return $date;
} }
return $date; public function getNextEventFrom(DateTimeImmutable $date) /* : Event */ {
} return new AnimekveldEvent($this->nextDate($date));
}
public function getNextEventFrom(\DateTimeImmutable $date) { /* : Event */ public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */ {
return new AnimekveldEvent($this->nextDate($date)); return new AnimekveldEvent($this->prevDate($date));
} }
public function getPreviousEventFrom(\DateTimeImmutable $date) { /* : Event */
return new AnimekveldEvent($this->prevDate($date));
}
} }

@ -1,47 +1,49 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Event; use \pvv\side\Event;
use \DateInterval;
class AnimekveldEvent extends Event { class AnimekveldEvent extends Event {
public function getStop() {
return $this->getStart()->add(new \DateInterval('PT4H1800S'));
}
public function getName() { /* : string */ public function getStop() {
return 'Animekveld'; return $this->getStart()->add(new DateInterval('PT4H1800S'));
} }
public function getLocation() { /* : Location */ public function getName() /* : string */ {
return 'Koserommet'; return "Animekveld";
} }
public function getOrganiser() { /* : User */ public function getLocation() /* : Location */ {
return 'Christoffer Viken'; return "Koserommet";
} }
public function getURL() { /* : string */ public function getOrganiser() /* : User */ {
return '/anime/'; return "Christoffer Viken";
} }
public function getImageURL() { public function getURL() /* : string */ {
return '/sosiale/animekveld.jpg'; return '/anime/';
} }
public function getDescription() { public function getImageURL() {
return [ return '/sosiale/animekveld.jpg';
'Er du glad i japanske tegneserier eller bare nysgjerrig på hva anime er?', }
'Bli med oss hver fredag, der vi finner frem de nyeste episodene for sesongen!',
'', public function getDescription() {
'Alle kan være med på å anbefale eller veto serier.', return [
'', 'Er du glad i japanske tegneserier eller bare nysgjerrig på hva anime er?',
]; 'Bli med oss hver fredag, der vi finner frem de nyeste episodene for sesongen!',
} '',
'Alle kan være med på å anbefale eller veto serier.',
'',
'I disse tider blir visningene i all hovedsak holdt online på vår <a href="https://discord.gg/cx4aXU7">Discord server</a>'
];
}
public function getColor() {
return "#35a";
}
public function getColor() {
return '#35a';
}
} }

@ -1,47 +1,41 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Activity; use \pvv\side\Activity;
use \DateTimeImmutable;
use \DateInterval;
class BrettspillActivity implements Activity { class BrettspillActivity implements Activity {
public function nextDate(\DateTimeImmutable $date) {
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));
}
$date = $date->setTime(16, 15, 0);
if (intval($date->format('N')) !== 7) {
return $this->nextDate($date->add(new \DateInterval('P1D')));
}
if (intval($date->format('W')) % 2 - 1) {
return $this->nextDate($date->add(new \DateInterval('P7D')));
}
return $date; public function nextDate(DateTimeImmutable $date) {
} if ($date->format('H') > 17 || $date->format('H') == 16 && $date->format('i') > 15)
return $this->nextDate($date->add(new DateInterval('P1D'))->setTime(16, 15, 0));
$date = $date->setTime(16, 15, 0);
if ($date->format('N') != 7)
return $this->nextDate($date->add(new DateInterval('P1D')));
if ($date->format('W') % 2 - 1)
return $this->nextDate($date->add(new DateInterval('P7D')));
return $date;
}
public function prevDate(\DateTimeImmutable $date) { public function prevDate(DateTimeImmutable $date) {
if (intval($date->format('H')) < 16 || intval($date->format('H')) === 17 && intval($date->format('i')) < 15) { if ($date->format('H') < 16 || $date->format('H') == 17 && $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)
} return $this->prevDate($date->sub(new DateInterval('P7D')));
if (intval($date->format('W')) % 2 - 1) {
return $this->prevDate($date->sub(new \DateInterval('P7D')));
}
return $date; return $date;
} }
public function getNextEventFrom(\DateTimeImmutable $date) { /* : Event */ public function getNextEventFrom(DateTimeImmutable $date) /* : Event */ {
return new BrettspillEvent($this->nextDate($date)); return new BrettspillEvent($this->nextDate($date));
} }
public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */ {
return new BrettspillEvent($this->prevDate($date));
}
public function getPreviousEventFrom(\DateTimeImmutable $date) { /* : Event */
return new BrettspillEvent($this->prevDate($date));
}
} }

@ -1,64 +1,65 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Event; use \pvv\side\Event;
use \DateInterval;
class BrettspillEvent extends Event { class BrettspillEvent extends Event {
public function getStop() {
return $this->getStart()->add(new \DateInterval('PT4H1800S'));
}
public function getName() { /* : string */ public function getStop() {
return 'Brettspillkveld'; return $this->getStart()->add(new DateInterval('PT4H1800S'));
} }
public function getLocation() { /* : Location */ public function getName() /* : string */ {
return 'Programvareverkstedet'; return "Brettspillkveld";
} }
public function getOrganiser() { /* : User */ public function getLocation() /* : Location */ {
return 'Programvareverkstedet'; return "Programvareverkstedet";
} }
public function getURL() { /* : string */ public function getOrganiser() /* : User */ {
return '/brettspill/'; return "Programvareverkstedet";
} }
public function getImageURL() { public function getURL() /* : string */ {
return '/sosiale/brettspill.jpg'; return '/brettspill/';
} }
public function getDescription() { public function getImageURL() {
return [ return '/sosiale/brettspill.jpg';
'Er du en hardcore brettspillentusiast eller en nybegynner som har så vidt spilt ludo? ' . }
'Da er vår brettspillkveld noe for deg! ' .
'Vi tar ut et par spill fra vårt samling of spiller så mye vi orker. Kom innom!', public function getDescription() {
'', return [
'## Vår samling', 'Er du en hardcore brettspillentusiast eller en nybegynner som har så vidt spilt ludo? '.
'', 'Da er vår brettspillkveld noe for deg! ' .
'* Dominion\*', 'Vi tar ut et par spill fra vårt samling of spiller så mye vi orker. Kom innom!',
'* Three cheers for master', '',
'* Avalon', '## Vår samling',
'* Hanabi', '',
'* Cards aginst humanity\*', '* Dominion\*',
'* Citadels', '* Three cheers for master',
'* Munchkin\*\*', '* Avalon',
'* Exploding kittens\*\*', '* Hanabi',
'* Aye dark overlord', '* Cards aginst humanity\*',
'* Settlers of catan\*', '* Citadels',
'* Risk\*\*', '* Munchkin\*\*',
'* og mange flere...', '* Exploding kittens\*\*',
'', '* Aye dark overlord',
'\* Vi har flere ekspansjoner til spillet', '* Settlers of catan\*',
'', '* Risk\*\*',
'\*\* Vi har flere varianter av spillet', '* og mange flere...',
]; '',
} '\* Vi har flere ekspansjoner til spillet',
'',
'\*\* Vi har flere varianter av spillet',
];
}
public function getColor() {
return "#000";
}
public function getColor() {
return '#000';
}
} }

@ -1,47 +1,40 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Activity; use \pvv\side\Activity;
use \DateTimeImmutable;
use \DateInterval;
class DriftkveldActivity implements Activity { class DriftkveldActivity implements Activity {
public function nextDate(\DateTimeImmutable $date) {
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));
}
$date = $date->setTime(18, 15, 0);
if (intval($date->format('N')) !== 6) {
return $this->nextDate($date->add(new \DateInterval('P1D')));
}
if (intval($date->format('W')) % 2 - 1) {
return $this->nextDate($date->add(new \DateInterval('P7D')));
}
return $date; public function nextDate(DateTimeImmutable $date) {
} if ($date->format('H') > 18 || $date->format('H') == 17 && $date->format('i') > 30)
return $this->nextDate($date->add(new DateInterval('P1D'))->setTime(18, 15, 0));
$date = $date->setTime(18, 15, 0);
if ($date->format('N') != 6)
return $this->nextDate($date->add(new DateInterval('P1D')));
if ($date->format('W') % 2 - 1)
return $this->nextDate($date->add(new DateInterval('P7D')));
return $date;
}
public function prevDate(\DateTimeImmutable $date) { public function prevDate(DateTimeImmutable $date) {
if (intval($date->format('H')) < 17 || intval($date->format('H')) === 18 && intval($date->format('i')) < 30) { if ($date->format('H') < 17 || $date->format('H') == 18 && $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)
} return $this->prevDate($date->sub(new DateInterval('P7D')));
if (intval($date->format('W')) % 2 - 1) { return $date;
return $this->prevDate($date->sub(new \DateInterval('P7D'))); }
}
return $date; public function getNextEventFrom(DateTimeImmutable $date) /* : Event */ {
} return new DriftkveldEvent($this->nextDate($date));
}
public function getNextEventFrom(\DateTimeImmutable $date) { /* : Event */ public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */ {
return new DriftkveldEvent($this->nextDate($date)); return new DriftkveldEvent($this->prevDate($date));
} }
public function getPreviousEventFrom(\DateTimeImmutable $date) { /* : Event */
return new DriftkveldEvent($this->prevDate($date));
}
} }

@ -1,48 +1,49 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Event; use \pvv\side\Event;
use \DateInterval;
class DriftkveldEvent extends Event { class DriftkveldEvent extends Event {
public function getStop() {
return $this->getStart()->add(new \DateInterval('PT4H1800S'));
}
public function getName() { /* : string */ public function getStop() {
return 'Driftkveld'; return $this->getStart()->add(new DateInterval('PT4H1800S'));
} }
public function getLocation() { /* : Location */ public function getName() /* : string */ {
return 'Terminalrommet / Discord / IRC'; return "Driftkveld";
} }
public function getOrganiser() { /* : User */ public function getLocation() /* : Location */ {
return 'Torstein Nordgård-Hansen'; return "Terminalrommet / Discord / IRC";
} }
public function getURL() { /* : string */ public function getOrganiser() /* : User */ {
return '/driftkveld/'; return "Torstein Nordgård-Hansen";
} }
public function getImageURL() { public function getURL() /* : string */ {
return '/sosiale/drift.jpg'; return '/driftkveld/';
} }
public function getDescription() { public function getImageURL() {
return [ return '/sosiale/drift.jpg';
'Vil du drifte?', }
'Vil du være kul kis TM?',
'Kom på driftkveld!', public function getDescription() {
'', return [
'Vi møtes annenhver uke for å ta unna driftarbeid og drikke kaffe.', 'Vil du drifte?',
'Alle PVVere er velkommene, enten de er erfarne driftere eller helt utenforstående!', 'Vil du være kul kis TM?',
]; 'Kom på driftkveld!',
} '',
'Vi møtes annenhver uke for å ta unna driftarbeid og drikke kaffe.',
'Alle PVVere er velkommene, enten de er erfarne driftere eller helt utenforstående!'
];
}
public function getColor() {
return "#35a";
}
public function getColor() {
return '#35a';
}
} }

@ -1,47 +1,40 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Activity; use \pvv\side\Activity;
use \DateTimeImmutable;
use \DateInterval;
class HackekveldActivity implements Activity { class HackekveldActivity implements Activity {
public function nextDate(\DateTimeImmutable $date) {
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));
}
$date = $date->setTime(16, 15, 0);
if (intval($date->format('N')) !== 6) {
return $this->nextDate($date->add(new \DateInterval('P1D')));
}
if (intval($date->format('W')) % 2) {
return $this->nextDate($date->add(new \DateInterval('P7D')));
}
return $date; public function nextDate(DateTimeImmutable $date) {
} if ($date->format('H') > 18 || $date->format('H') == 17 && $date->format('i') > 30)
return $this->nextDate($date->add(new DateInterval('P1D'))->setTime(18, 15, 0));
$date = $date->setTime(16, 15, 0);
if ($date->format('N') != 6)
return $this->nextDate($date->add(new DateInterval('P1D')));
if ($date->format('W') % 2)
return $this->nextDate($date->add(new DateInterval('P7D')));
return $date;
}
public function prevDate(\DateTimeImmutable $date) { public function prevDate(DateTimeImmutable $date) {
if (intval($date->format('H')) < 17 || intval($date->format('H')) === 18 && intval($date->format('i')) < 30) { if ($date->format('H') < 17 || $date->format('H') == 18 && $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)
} return $this->prevDate($date->sub(new DateInterval('P7D')));
if (intval($date->format('W')) % 2) { return $date;
return $this->prevDate($date->sub(new \DateInterval('P7D'))); }
}
return $date; public function getNextEventFrom(DateTimeImmutable $date) /* : Event */ {
} return new HackekveldEvent($this->nextDate($date));
}
public function getNextEventFrom(\DateTimeImmutable $date) { /* : Event */ public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */ {
return new HackekveldEvent($this->nextDate($date)); return new HackekveldEvent($this->prevDate($date));
} }
public function getPreviousEventFrom(\DateTimeImmutable $date) { /* : Event */
return new HackekveldEvent($this->prevDate($date));
}
} }

@ -1,44 +1,45 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Event; use \pvv\side\Event;
use \DateInterval;
class HackekveldEvent extends Event { class HackekveldEvent extends Event {
public function getStop() {
return $this->getStart()->add(new \DateInterval('PT4H1800S'));
}
public function getName() { /* : string */ public function getStop() {
return 'Hackekveld'; return $this->getStart()->add(new DateInterval('PT4H1800S'));
} }
public function getLocation() { /* : Location */ public function getName() /* : string */ {
return 'Terminalrommet / Discord / IRC'; return "Hackekveld";
} }
public function getOrganiser() { /* : User */ public function getLocation() /* : Location */ {
return 'PVV'; return "Terminalrommet / Discord / IRC";
} }
public function getURL() { /* : string */ public function getOrganiser() /* : User */ {
return '#'; return "PVV";
} }
public function getImageURL() { public function getURL() /* : string */ {
return '/pvv-logo.png'; return '#';
} }
public function getDescription() { public function getImageURL() {
return [ return '/pvv-logo.png';
'Mange PVV-medlemmer liker å programmere.', }
'Hvis du også liker å programmere, så bli med! Her kan du jobbe med dine egne prosjekter eller starte noe med andre nerder her på huset. Vi møtes for en hyggelig prat, mye god programmering og delsponset pizza.',
]; public function getDescription() {
} return [
'Mange PVV-medlemmer liker å programmere.',
'Hvis du også liker å programmere, så bli med! Her kan du jobbe med dine egne prosjekter eller starte noe med andre nerder her på huset. Vi møtes for en hyggelig prat, mye god programmering og delsponset pizza.'
];
}
public function getColor() {
return "#35a";
}
public function getColor() {
return '#35a';
}
} }

@ -1,47 +1,40 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Activity; use \pvv\side\Activity;
use \DateTimeImmutable;
use \DateInterval;
class NerdepitsaActivity implements Activity { class NerdepitsaActivity implements Activity {
public function nextDate(\DateTimeImmutable $date) {
if (intval($date->format('H')) > 19) {
return $this->nextDate($date->add(new \DateInterval('P1D'))->setTime(19, 0, 0));
}
$date = $date->setTime(19, 0, 0);
if (intval($date->format('N')) !== 5) {
return $this->nextDate($date->add(new \DateInterval('P1D')));
}
if (intval($date->format('W')) % 2) {
return $this->nextDate($date->add(new \DateInterval('P7D')));
}
return $date; public function nextDate(DateTimeImmutable $date) {
} if ($date->format('H') > 19)
return $this->nextDate($date->add(new DateInterval('P1D'))->setTime(19, 0, 0));
$date = $date->setTime(19, 0, 0);
if ($date->format('N') != 5)
return $this->nextDate($date->add(new DateInterval('P1D')));
if ($date->format('W') % 2)
return $this->nextDate($date->add(new DateInterval('P7D')));
return $date;
}
public function prevDate(\DateTimeImmutable $date) { public function prevDate(DateTimeImmutable $date) {
if (intval($date->format('H')) < 19) { if ($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)
} return $this->prevDate($date->sub(new DateInterval('P7D')));
if (intval($date->format('W')) % 2) { return $date;
return $this->prevDate($date->sub(new \DateInterval('P7D'))); }
}
return $date; public function getNextEventFrom(DateTimeImmutable $date) /* : Event */ {
} return new NerdepitsaEvent($this->nextDate($date));
}
public function getNextEventFrom(\DateTimeImmutable $date) { /* : Event */ public function getPreviousEventFrom(DateTimeImmutable $date) /* : Event */ {
return new NerdepitsaEvent($this->nextDate($date)); return new NerdepitsaEvent($this->prevDate($date));
} }
public function getPreviousEventFrom(\DateTimeImmutable $date) { /* : Event */
return new NerdepitsaEvent($this->prevDate($date));
}
} }

@ -1,49 +1,50 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
use pvv\side\Event; use \pvv\side\Event;
use \DateInterval;
class NerdepitsaEvent extends Event { class NerdepitsaEvent extends Event {
public function getStop() {
return $this->getStart()->add(new \DateInterval('PT2H1800S'));
}
public function getName() { public function getStop() {
return 'Nerdepitsa'; return $this->getStart()->add(new DateInterval('PT2H1800S'));
} }
public function getLocation() { /* : Location */ public function getName() {
return 'Peppes Kjøpmansgata'; return "Nerdepitsa";
} }
public function getOrganiser() { /* : User */ public function getLocation() /* : Location */ {
return 'Anders Christensen'; return "Peppes Kjøpmansgata";
} }
public function getURL() { /* : string */ public function getOrganiser() /* : User */ {
return '/nerdepitsa/'; return "Anders Christensen";
} }
public function getImageURL() { public function getURL() /* : string */ {
return '/sosiale/nerdepitsa.jpg'; return '/nerdepitsa/';
} }
public function getDescription() { public function getImageURL() {
return [ return '/sosiale/nerdepitsa.jpg';
'Hei, har du lyst til å bli med på pizzaspising annenhver fredag? Vi møtes på Peppes i Kjøpmannsgata fredag klokken 19.00 hver partallsuke!', }
'',
'Vi er en trivelig gjeng hvis der fellestrekk er en viss interesse for data, samt har eller har hatt en tilknytning til studentmiljøet ved NTNU. For å treffe andre som også faller inn under disse kriteriene treffes vi over pizza på Peppes annenhver fredag. (Definisjon: En fredag er annenhver dersom den ligger i en partallsuke). Vi har reservasjon under navnet Christensen med storkunderabatt.', public function getDescription() {
'', return [
'Det er ikke noe krav at du er nerd... noen av oss virker faktisk nesten normale! Det er heller ikke noe krav at du kjenner noen fra før. Det er ikke engang et krav at du må like pizza! (selv om det hjelper) Dersom du har lyst til å treffe personer fra datamiljøet ved NTNU så bare still opp! Vi biter ikke, vel, bortsett fra pizzaen da.', 'Hei, har du lyst til å bli med på pizzaspising annenhver fredag? Vi møtes på Peppes i Kjøpmannsgata fredag klokken 19.00 hver partallsuke!',
'', '',
'Vi bestiller så mye pizza som vi i fellesskap klarer å stappe i oss, og splitter dermed pizza-regningen broderlig, mens hver enkelt betaler for sin egen drikke, dessert mm. Vell møtt!', 'Vi er en trivelig gjeng hvis der fellestrekk er en viss interesse for data, samt har eller har hatt en tilknytning til studentmiljøet ved NTNU. For å treffe andre som også faller inn under disse kriteriene treffes vi over pizza på Peppes annenhver fredag. (Definisjon: En fredag er annenhver dersom den ligger i en partallsuke). Vi har reservasjon under navnet Christensen med storkunderabatt.',
]; '',
} 'Det er ikke noe krav at du er nerd... noen av oss virker faktisk nesten normale! Det er heller ikke noe krav at du kjenner noen fra før. Det er ikke engang et krav at du må like pizza! (selv om det hjelper) Dersom du har lyst til å treffe personer fra datamiljøet ved NTNU så bare still opp! Vi biter ikke, vel, bortsett fra pizzaen da.',
'',
'Vi bestiller så mye pizza som vi i fellesskap klarer å stappe i oss, og splitter dermed pizza-regningen broderlig, mens hver enkelt betaler for sin egen drikke, dessert mm. Vell møtt!'
];
}
public function getColor() {
return "#c35";
}
public function getColor() {
return '#c35';
}
} }

@ -1,12 +1,9 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
ini_set('date.timezone', 'Europe/Oslo'); ini_set('date.timezone', 'Europe/Oslo');
require implode(\DIRECTORY_SEPARATOR, [\dirname(__DIR__, 3), '', '_autoload.php']); require implode(DIRECTORY_SEPARATOR, [dirname(dirname(dirname(__DIR__))), '', '_autoload.php']);
$c = new AnimekveldActivity(); $c = new AnimekveldActivity;
exit($c->nextDate(new \DateTimeImmutable())->format(\DATE_RFC2822)); die($c->nextDate(new \DateTimeImmutable)->format(DATE_RFC2822));

@ -1,12 +1,9 @@
<?php <?php //declare(strict_types=1);
declare(strict_types=1);
namespace pvv\side\social; namespace pvv\side\social;
ini_set('date.timezone', 'Europe/Oslo'); ini_set('date.timezone', 'Europe/Oslo');
require implode(\DIRECTORY_SEPARATOR, [\dirname(__DIR__, 3), '', '_autoload.php']); require implode(DIRECTORY_SEPARATOR, [dirname(dirname(dirname(__DIR__))), '', '_autoload.php']);
$c = new NerdepitsaActivity(); $c = new NerdepitsaActivity;
exit($c->prevDate(new \DateTimeImmutable())->format(\DATE_RFC2822)); die($c->prevDate(new \DateTimeImmutable)->format(DATE_RFC2822));

@ -1,19 +1,19 @@
<?php <?php
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'aktiviteter')) { if(!$userManager->hasGroup($uname, 'aktiviteter')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$eventID = $_GET['id']; $eventID = $_GET['id'];

@ -1,60 +1,61 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
$name = $attrs['cn'][0]; $name = $attrs['cn'][0];
if (!$userManager->hasGroup($uname, 'aktiviteter')) { if(!$userManager->hasGroup($uname, 'aktiviteter')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$customActivity = new pvv\side\DBActivity($pdo); $customActivity = new \pvv\side\DBActivity($pdo);
$new = 0; $new = 0;
if (isset($_GET['new'])) { if(isset($_GET['new'])){
$new = $_GET['new']; $new = $_GET['new'];
} }
$eventID = 0; $eventID = 0;
if (isset($_GET['id'])) { if(isset($_GET['id'])){
$eventID = $_GET['id']; $eventID = $_GET['id'];
} elseif ($new == 0) { }else if($new == 0){
echo "\nID not set"; echo "\nID not set";
exit; exit();
} }
$today = new DateTimeImmutable(); $today = new DateTimeImmutable;
$today = $today->setTime(18, 15); $today = $today->setTime(18, 15);
$defaultStart = $today->format('Y-m-d H:15:00'); $defaultStart = $today->format("Y-m-d H:15:00");
$inTwoHours = $today->add(new DateInterval('PT1H45M')); $inTwoHours = $today->add(new DateInterval('PT1H45M'));
$defaultEnd = $inTwoHours->format('Y-m-d H:00:00'); $defaultEnd = $inTwoHours->format("Y-m-d H:00:00");
$event;
if ($new == 0) { if($new == 0){
$event = $customActivity->getEventByID($eventID); $event = $customActivity->getEventByID($eventID);
} else { }
$event = new pvv\side\SimpleEvent( else {
0, $event = new \pvv\side\SimpleEvent(
'', 0,
$today, '',
$inTwoHours, $today,
'', $inTwoHours,
'', '',
'' '',
); ''
);
} }
@ -85,49 +86,49 @@ if ($new == 0) {
<h2>Aktivietsadministrasjon</h2> <h2>Aktivietsadministrasjon</h2>
<hr class="ruler"> <hr class="ruler">
<h2><?php echo $new == 1 ? 'Ny hendelse' : 'Rediger hendelse'; ?></h2> <h2><?= ($new == 1 ? "Ny hendelse" : "Rediger hendelse"); ?></h2>
<form action="update.php", method="post" class="gridsplit fullwidth_inputs"> <form action="update.php", method="post" class="gridsplit fullwidth_inputs">
<div class="gridl"> <div class="gridl">
<p class="subtitle">Tittel</p> <p class="subtitle">Tittel</p>
<input type="text" name="title" value="<?php echo $event->getName(); ?>" class="boxinput" required placeholder="En kul hendelse"><br> <input type="text" name="title" value="<?= $event->getName() ?>" class="boxinput" required placeholder="En kul hendelse"><br>
<div class="gridsplit5050"> <div class="gridsplit5050">
<div class="gridl"> <div class="gridl">
<p class="subtitle">Arrangør</p> <p class="subtitle">Arrangør</p>
<input type="text" name="organiser" value="<?php echo $event->getOrganiser(); ?>" class="boxinput" required placeholder="<?php echo $name; ?>"><br> <input type="text" name="organiser" value="<?= $event->getOrganiser() ?>" class="boxinput" required placeholder="<?= $name ?>"><br>
</div> </div>
<div class="gridr noborder"> <div class="gridr noborder">
<p class="subtitle">Sted</p> <p class="subtitle">Sted</p>
<input type="text" name="location" value="<?php echo $event->getLocation(); ?>" class="boxinput" required placeholder="Terminalrommet"><br> <input type="text" name="location" value="<?= $event->getLocation() ?>" class="boxinput" required placeholder="Terminalrommet"><br>
</div> </div>
</div> </div>
<p class="subtitle">Beskrivelse (<i>markdown</i>)</p> <p class="subtitle">Beskrivelse (<i>markdown</i>)</p>
<textarea name="desc" rows="8" class="boxinput" placeholder="Beskrivelse" required><?php echo implode("\n", $event->getDescription()); ?></textarea> <textarea name="desc" rows="8" class="boxinput" placeholder="Beskrivese" required><?= implode($event->getDescription(), "\n"); ?></textarea>
</div> </div>
<div class="gridr" style="line-height: 1.3em;"> <div class="gridr" style="line-height: 1.3em;">
<h4>Starttid</h4><br> <h4>Starttid</h4><br>
<i>Måned:</i><br> <i>Måned:</i><br>
<input name="start_mon" type="month" class="boxinput" required value="<?php echo $event->getStart()->format('Y-m'); ?>"><br> <input name="start_mon" type="month" class="boxinput" required value="<?= $event->getStart()->format('Y-m') ?>"><br>
<i>Dag:</i><br> <i>Dag:</i><br>
<input name="start_day" type="number" min="1" max="31" required class="boxinput" value="<?php echo $event->getStart()->format('d'); ?>"><br> <input name="start_day" type="number" min="1" max="31" required class="boxinput" value="<?= $event->getStart()->format('d') ?>"><br>
<i>Klokkeslett:</i><br> <i>Klokkeslett:</i><br>
<input name="start_time" type="time" class="boxinput" required value="<?php echo $event->getStart()->format('H:i:s'); ?>"><br> <input name="start_time" type="time" class="boxinput" required value="<?= $event->getStart()->format('H:i:s') ?>"><br>
<br> <br>
<h4>Varighet</h4><br> <h4>Varighet</h4><br>
<?php $diff = $event->getStart()->diff($event->getStop()); ?> <?php $diff = $event->getStart()->diff($event->getStop()); ?>
<i>Timer:</i><br> <i>Timer:</i><br>
<input name="lasts_hours" type="number" min="0" class="boxinput" required value="<?php echo $diff->h; ?>"><br> <input name="lasts_hours" type="number" min="0" class="boxinput" required value="<?= $diff->h ?>"><br>
<i>Minutter:</i><br> <i>Minutter:</i><br>
<input name="lasts_minutes" type="number" min="0" max="59" class="boxinput" required value="<?php echo $diff->i; ?>"><br> <input name="lasts_minutes" type="number" min="0" max="59" class="boxinput" required value="<?= $diff->i ?>"><br>
</div> </div>
<input type="hidden" name="id" value="<?php echo $event->getID(); ?>" /> <input type="hidden" name="id" value="<?= $event->getID() ?>" />
<div class="allgrids" style="margin-top: 2em;"> <div class="allgrids" style="margin-top: 2em;">
<hr class="ruler"> <hr class="ruler">
@ -135,7 +136,7 @@ if ($new == 0) {
</div> </div>
</form> </form>
<p> <p>
</main> </main>

@ -1,47 +1,49 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'aktiviteter')) { if(!$userManager->hasGroup($uname, 'aktiviteter')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$customActivity = new pvv\side\DBActivity($pdo); $customActivity = new \pvv\side\DBActivity($pdo);
$events = $customActivity->getAllEvents(); $events = $customActivity->getAllEvents();
$page = 1; $page = 1;
if (isset($_GET['page'])) { if(isset($_GET['page'])){
$page = $_GET['page']; $page = $_GET['page'];
} }
$filterTitle = ''; $filterTitle = '';
if (isset($_GET['title'])) { if(isset($_GET['title'])){
$filterTitle = $_GET['title']; $filterTitle = $_GET['title'];
} }
$filterOrganiser = ''; $filterOrganiser = '';
if (isset($_GET['organiser'])) { if(isset($_GET['organiser'])){
$filterOrganiser = $_GET['organiser']; $filterOrganiser = $_GET['organiser'];
} }
// filter // filter
$events = array_values(array_filter( $events = array_values(array_filter(
$events, $events,
static fn($event) => (preg_match('/.*' . $filterTitle . '.*/i', $event->getName()) && preg_match('/.*' . $filterOrganiser . '.*/i', $event->getOrganiser())) function($event) use ($filterTitle, $filterOrganiser){
return (preg_match('/.*'.$filterTitle.'.*/i', $event->getName()) and preg_match('/.*'.$filterOrganiser.'.*/i', $event->getOrganiser()));
}
)); ));
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -60,7 +62,7 @@ $events = array_values(array_filter(
<header>Aktivitets&shy;administrasjons&shy;verk&shy;stedet</header> <header>Aktivitets&shy;administrasjons&shy;verk&shy;stedet</header>
<body> <body>
<nav> <nav>
<?php echo navbar(2, 'admin'); ?> <?php echo navbar(2, 'admin'); ?>
<?php echo loginbar(null, $pdo); ?> <?php echo loginbar(null, $pdo); ?>
@ -77,53 +79,53 @@ $events = array_values(array_filter(
<ul class="event-list"> <ul class="event-list">
<?php <?php
$counter = 0; $counter = 0;
$pageLimit = 10; $pageLimit = 10;
for ($i = ($pageLimit * ($page - 1)); $i < count($events); ++$i) { for($i = ($pageLimit * ($page - 1)); $i < count($events) ;$i++){
if ($counter == $pageLimit) { if($counter == $pageLimit){
break; break;
} }
$event = $events[$i]; $event = $events[$i];
$eventID = $event->getID(); $eventID = $event->getID();
?> ?>
<li> <li>
<div class="event admin"> <div class="event admin">
<div class="event-info"> <div class="event-info">
<h3 class="no-chin"><?php echo $event->getName() . ' (ID: ' . $eventID . ')'; ?></h3> <h3 class="no-chin"><?= $event->getName() . " (ID: " . $eventID . ")"; ?></h3>
<p class="subnote"> <p class="subnote">
<?php echo $event->getStart()->format('(Y-m-d H:i:s)') . ' - ' . $event->getStop()->format('(Y-m-d H:i:s)'); ?> <?= $event->getStart()->format("(Y-m-d H:i:s)") . " - " . $event->getStop()->format("(Y-m-d H:i:s)"); ?>
</p> </p>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $event->getDescription())); echo $Parsedown->text(implode("\n", $event->getDescription()));
?> ?>
</div> </div>
<div class="event-actions"> <div class="event-actions">
<a class="btn" href="edit.php?id=<?php echo $eventID; ?>">Rediger</a><br> <a class="btn" href="edit.php?id=<?= $eventID ?>">Rediger</a><br>
<a class="btn" href="delete.php?id=<?php echo $eventID; ?>" onclick="return confirm('Knallsikker? (ID: <?php echo $eventID; ?>)');">Slett</a> <a class="btn" href="delete.php?id=<?= $eventID ?>" onclick="return confirm('Knallsikker? (ID: <?= $eventID ?>)');">Slett</a>
</div> </div>
</div> </div>
</li> </li>
<?php <?php
++$counter; $counter++;
} }
?> ?>
</ul> </ul>
<?php <?php
if ($page != 1) { if($page != 1){
echo '<a class="btn float-left" href="?page=' . ($page - 1) . '&title=' . urlencode($filterTitle) . '&organiser=' . urlencode($filterOrganiser) . '">Forrige side</a>'; echo '<a class="btn float-left" href="?page=' . ($page - 1) . '&title=' . urlencode($filterTitle) . '&organiser=' . urlencode($filterOrganiser) . '">Forrige side</a>';
} }
if (($counter == $pageLimit) && (($pageLimit * $page) < count($events))) { if(($counter == $pageLimit) and (($pageLimit * $page) < count($events))){
echo '<a class="btn float-right" href="?page=' . ($page + 1) . '&title=' . urlencode($filterTitle) . '&organiser=' . urlencode($filterOrganiser) . '">Neste side</a>'; echo '<a class="btn float-right" href="?page=' . ($page + 1) . '&title=' . urlencode($filterTitle) . '&organiser=' . urlencode($filterOrganiser) . '">Neste side</a>';
} }
?> ?>
</div> </div>
<div class="gridr"> <div class="gridr">
@ -132,9 +134,9 @@ $events = array_values(array_filter(
<h2>Filter</h2> <h2>Filter</h2>
<form action="." method="get"> <form action="." method="get">
<p class="no-chin">Navn</p> <p class="no-chin">Navn</p>
<?php echo '<input type="text" name="title" class="boxinput" value="' . $filterTitle . '">'; ?><br> <?= '<input type="text" name="title" class="boxinput" value="' . $filterTitle . '">' ?><br>
<p class="no-chin">Organisator</p> <p class="no-chin">Organisator</p>
<?php echo '<input type="text" name="organiser" class="boxinput" value="' . $filterOrganiser . '">'; ?><br> <?= '<input type="text" name="organiser" class="boxinput" value="' . $filterOrganiser . '">' ?><br>
<div style="margin-top: 2em;"> <div style="margin-top: 2em;">
<input type="submit" class="btn" value="Filtrer"></input> <input type="submit" class="btn" value="Filtrer"></input>

@ -1,45 +1,45 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'aktiviteter')) { if(!$userManager->hasGroup($uname, 'aktiviteter')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
if ((!isset($_POST['title'])) if((!isset($_POST['title']))
|| (!isset($_POST['desc'])) or (!isset($_POST['desc']))
|| (!isset($_POST['organiser'])) or (!isset($_POST['organiser']))
|| (!isset($_POST['location'])) or (!isset($_POST['location']))
|| (!isset($_POST['start_mon'])) or (!isset($_POST['start_mon']))
|| (!isset($_POST['start_day'])) or (!isset($_POST['start_day']))
|| (!isset($_POST['start_time'])) or (!isset($_POST['start_time']))
|| (!isset($_POST['lasts_hours'])) or (!isset($_POST['lasts_hours']))
|| (!isset($_POST['lasts_minutes']))) { or (!isset($_POST['lasts_minutes']))) {
header('Location: ' . $_SERVER['HTTP_REFERER']); header('Location: ' . $_SERVER['HTTP_REFERER']);
exit; exit();
} }
$id = 0; $id = 0;
if (isset($_POST['id'])) { if(isset($_POST['id'])){
$id = $_POST['id']; $id = $_POST['id'];
} }
$title = $_POST['title']; $title = $_POST['title'];
$desc = $_POST['desc']; $desc = $_POST['desc'];
// $start = $_POST['start']; //$start = $_POST['start'];
// $stop = $_POST['end']; //$stop = $_POST['end'];
$organiser = $_POST['organiser']; $organiser = $_POST['organiser'];
$location = $_POST['location']; $location = $_POST['location'];
@ -50,12 +50,12 @@ $date_part_lasts_hours = $_POST['lasts_hours'];
$date_part_lasts_minutes = $_POST['lasts_minutes']; $date_part_lasts_minutes = $_POST['lasts_minutes'];
while (strlen($date_part_start_day) < 2) { while (strlen($date_part_start_day) < 2) {
$date_part_start_day = '0' . $date_part_start_day; $date_part_start_day = "0" . $date_part_start_day;
} }
$start = ($date_part_start_mon . '-' . $date_part_start_day . ' ' . $date_part_start_time); $start = ($date_part_start_mon . "-" . $date_part_start_day . " " . $date_part_start_time);
if (count(explode(':', $date_part_start_time)) == 2) { if (sizeof(explode(":", $date_part_start_time))==2) {
$start .= ':00'; $start .= ":00";
} }
$start_date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $start); $start_date = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $start);
@ -64,32 +64,32 @@ $start = $start_date->format('Y-m-d H:i:s');
$stop = $stop_date->format('Y-m-d H:i:s'); $stop = $stop_date->format('Y-m-d H:i:s');
if ($start_date >= $stop_date) { if ($start_date >= $stop_date) {
echo 'Invalid dates. End date must come after the start date!'; echo 'Invalid dates. End date must come after the start date!';
exit; exit();
} }
$statement;
if($id == 0){
$query = 'INSERT INTO events (name, start, stop, organiser, location, description) VALUES (:title, :start, :stop, :organiser, :loc, :desc)';
$statement = $pdo->prepare($query);
if ($id == 0) { $statement->bindParam(':title', $title, PDO::PARAM_STR);
$query = 'INSERT INTO events (name, start, stop, organiser, location, description) VALUES (:title, :start, :stop, :organiser, :loc, :desc)'; $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement = $pdo->prepare($query); $statement->bindParam(':start', $start, PDO::PARAM_STR);
$statement->bindParam(':stop', $stop, PDO::PARAM_STR);
$statement->bindParam(':organiser', $organiser, PDO::PARAM_STR);
$statement->bindParam(':loc', $location, PDO::PARAM_STR);
}else{
$query = 'UPDATE events SET name=:title, start=:start, stop=:stop, organiser=:organiser, location=:loc, description=:desc WHERE id=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':title', $title, PDO::PARAM_STR); $statement->bindParam(':title', $title, PDO::PARAM_STR);
$statement->bindParam(':desc', $desc, PDO::PARAM_STR); $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement->bindParam(':start', $start, PDO::PARAM_STR); $statement->bindParam(':start', $start, PDO::PARAM_STR);
$statement->bindParam(':stop', $stop, PDO::PARAM_STR); $statement->bindParam(':stop', $stop, PDO::PARAM_STR);
$statement->bindParam(':organiser', $organiser, PDO::PARAM_STR); $statement->bindParam(':organiser', $organiser, PDO::PARAM_STR);
$statement->bindParam(':loc', $location, PDO::PARAM_STR); $statement->bindParam(':loc', $location, PDO::PARAM_STR);
} else { $statement->bindParam(':id', $id, PDO::PARAM_INT);
$query = 'UPDATE events SET name=:title, start=:start, stop=:stop, organiser=:organiser, location=:loc, 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(':start', $start, PDO::PARAM_STR);
$statement->bindParam(':stop', $stop, PDO::PARAM_STR);
$statement->bindParam(':organiser', $organiser, PDO::PARAM_STR);
$statement->bindParam(':loc', $location, PDO::PARAM_STR);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
} }
$statement->execute(); $statement->execute();

@ -1,28 +1,28 @@
<?php <?php
ini_set('display_errors', '1'); ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
error_reporting(\E_ALL); error_reporting(E_ALL);
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->isAdmin($uname)) { if(!$userManager->isAdmin($uname)){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$users = $userManager->getAllUserData(); $users = $userManager->getAllUserData();
@ -59,38 +59,38 @@ $users = $userManager->getAllUserData();
</tr> </tr>
<?php <?php
$users_to_update = []; $users_to_update = array();
foreach ($users as $i => $data) { foreach($users as $i => $data){
$uname = $data['name']; $uname = $data['name'];
$groupFlag = $userManager->getUsergroups($uname); $groupFlag = $userManager->getUsergroups($uname);
$users_to_update[] = $uname; array_push($users_to_update, $uname);
?> ?>
<tr> <tr>
<td><?php echo $uname; ?></td> <td><?= $uname ?></td>
<?php <?php
foreach ($userManager->usergroups as $name => $group) { foreach($userManager->usergroups as $name => $group){
echo '<td><input type="checkbox" ' . (($groupFlag & $group) ? 'checked' : '') . ' name="' . $uname . '_' . $name . '" class="usergroupcheckbox">' . $name . '</td>'; echo '<td><input type="checkbox" ' . (($groupFlag & $group) ? 'checked' : '') . ' name="' . $uname . '_' . $name . '" class="usergroupcheckbox">' . $name . '</td>';
} }
?> ?>
</tr> </tr>
<?php <?php
} }
foreach ($users_to_update as $uname) { foreach($users_to_update as $uname) {
echo '<input type="hidden" name="user_to_update" value="' . $uname . '" />'; echo '<input type="hidden" name="user_to_update" value="' . $uname . '" />';
} }
?> ?>
<tr class="newuserrow"> <tr class="newuserrow">
<td class="newuserelement"><input type="text" name="newuser" class="newuserinput"></td> <td class="newuserelement"><input type="text" name="newuser" class="newuserinput"></td>
<?php <?php
foreach ($userManager->usergroups as $name => $group) { foreach($userManager->usergroups as $name => $group){
echo '<td><input type="checkbox" name="newuser_' . $name . '" class="usergroupcheckbox">' . $name . '</td>'; echo '<td><input type="checkbox" name="newuser_' . $name . '" class="usergroupcheckbox">' . $name . '</td>';
} }
?> ?>
</tr> </tr>
</table> </table>
<input type="submit" class="btn" value="Lagre"> <input type="submit" class="btn" value="Lagre">

@ -1,73 +1,72 @@
<?php <?php
ini_set('display_errors', '1'); ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
error_reporting(\E_ALL); error_reporting(E_ALL);
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->isAdmin($uname)) { if(!$userManager->isAdmin($uname)){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$newUser;
if (isset($_POST['newuser'])) { if(isset($_POST['newuser'])){
$newUser = $_POST['newuser']; $newUser = $_POST['newuser'];
unset($_POST['newuser']); unset($_POST['newuser']);
} }
// $updatingUsers = explode('_', $_POST['users']); //$updatingUsers = explode('_', $_POST['users']);
$updatingUsers = []; $updatingUsers = array();
foreach ($_POST as $key => $value) { foreach ($_POST as $key => $value) { if ($key === "user_to_update") {
if ($key === 'user_to_update') { array_push($updatingUsers, $value);
$updatingUsers[] = $value; }
}
} }
unset($_POST['user_to_update']); unset($_POST['user_to_update']);
// 2d array of usernames and their corresponding group flags // 2d array of usernames and their corresponding group flags
$userFlags = []; $userFlags = [];
if ($newUser) { if($newUser){
$userFlags[$newUser] = 0; $userFlags[$newUser] = 0;
} }
foreach ($_POST as $namegroup => $info) { foreach($_POST as $namegroup => $info){
$data = explode('_', $namegroup); $data = explode('_', $namegroup);
$group = array_pop($data); $group = array_pop($data);
$uname = implode('_', $data); $uname = implode("_", $data);
if ($uname == 'newuser') { if($uname == 'newuser'){
if (!$newUser) { if(!$newUser){
continue; continue;
} }
$uname = $newUser; $uname = $newUser;
} }
if (!isset($userFlags[$uname])) { if(!isset($userFlags[$uname])){
$userFlags[$uname] = 0; $userFlags[$uname] = 0;
} }
$userFlags[$uname] = ($userFlags[$uname] | $userManager->usergroups[$group]); $userFlags[$uname] = ($userFlags[$uname] | $userManager->usergroups[$group]);
} }
foreach ($updatingUsers as $uname) { foreach($updatingUsers as $uname) {
if (!array_key_exists($uname, $userFlags)) { if(!array_key_exists($uname, $userFlags)){
$userFlags[$uname] = 0; $userFlags[$uname] = 0;
} }
} }
foreach ($userFlags as $uname => $flag) { foreach($userFlags as $uname => $flag){
$userManager->setGroups($uname, $flag); $userManager->setGroups($uname, $flag);
} }
header('Location: .'); header('Location: .');

@ -1,11 +1,11 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
@ -14,10 +14,10 @@ $isAdmin = $userManager->isAdmin($uname);
$projectGroup = $userManager->hasGroup($uname, 'prosjekt'); $projectGroup = $userManager->hasGroup($uname, 'prosjekt');
$activityGroup = $userManager->hasGroup($uname, 'aktiviteter'); $activityGroup = $userManager->hasGroup($uname, 'aktiviteter');
if (!($isAdmin | $projectGroup | $activityGroup)) { if(!($isAdmin | $projectGroup | $activityGroup)){
header('Content-Type: text/plain', true, 403); header('Content-Type: text/plain', true, 403);
echo "Her har du ikke lov't'å'værra!!!\r\n"; echo "Her har du ikke lov't'å'værra!!!\r\n";
exit; exit();
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -45,22 +45,22 @@ if (!($isAdmin | $projectGroup | $activityGroup)) {
<h2>Administrasjon</h2> <h2>Administrasjon</h2>
<ul class="tools"> <ul class="tools">
<?php <?php
if ($isAdmin | $activityGroup) { if($isAdmin | $activityGroup){
echo '<li><a class="btn" href="aktiviteter/?page=1">Aktiviteter/Hendelser</a></li>'; echo '<li><a class="btn" href="aktiviteter/?page=1">Aktiviteter/Hendelser</a></li>';
} }
if ($isAdmin | $projectGroup) { if($isAdmin | $projectGroup){
echo '<li><a class="btn" href="prosjekter/">Prosjekter</a></li>'; echo '<li><a class="btn" href="prosjekter/">Prosjekter</a></li>';
} }
if ($isAdmin) { if($isAdmin) {
echo '<li><a class="btn" href="motd/">Dagens melding</a></li>'; echo '<li><a class="btn" href="motd/">Dagens melding</a></li>';
} }
if ($isAdmin) { if($isAdmin){
echo '<li><a class="btn" href="brukere/">Brukerrettigheter</a></li>'; echo '<li><a class="btn" href="brukere/">Brukerrettigheter</a></li>';
} }
?> ?>
<ul> <ul>
</main> </main>
</body> </body>

@ -1,31 +1,31 @@
<?php <?php
ini_set('display_errors', '1'); ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'no_NO'); setlocale(LC_ALL, 'no_NO');
error_reporting(\E_ALL); error_reporting(E_ALL);
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->isAdmin($uname)) { if(!$userManager->isAdmin($uname)){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$motdfetcher = new pvv\side\MOTD($pdo); $motdfetcher = new \pvv\side\MOTD($pdo);
$motd = $motdfetcher->getMOTD(); $motd = $motdfetcher->getMOTD();
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -56,15 +56,15 @@ $motd = $motdfetcher->getMOTD();
<form action="update.php", method="post"> <form action="update.php", method="post">
<p class="subtitle no-chin">Tittel</p> <p class="subtitle no-chin">Tittel</p>
<p class="subnote">Ikke nødvendig</p> <p class="subnote">Ikke nødvendig</p>
<input type="text" name="title" value="<?php echo $motd['title']; ?>" class="boxinput" style="width:66%;"><br> <input type="text" name="title" value="<?= $motd['title'] ?>" class="boxinput" style="width:66%;"><br>
<p class="subtitle no-chin">Innhold (<i>markdown</i>)</p> <p class="subtitle no-chin">Innhold (<i>markdown</i>)</p>
<textarea name="content" style="width:100%" rows="8" class="boxinput"><?php echo implode("\n", $motd['content']); ?></textarea> <textarea name="content" style="width:100%" rows="8" class="boxinput"><?= implode("\n", $motd["content"]) ?></textarea>
<div style="margin-top: 2em;"> <div style="margin-top: 2em;">
<hr class="ruler"> <hr class="ruler">
<?php echo '<input type="submit" class="btn" value="Lagre endringer"></a>'; ?> <?= '<input type="submit" class="btn" value="Lagre endringer"></a>'; ?>
</div> </div>
</form> </form>
</main> </main>

@ -1,32 +1,32 @@
<?php <?php
ini_set('display_errors', '1'); ini_set('display_errors', '1');
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'no_NO'); setlocale(LC_ALL, 'no_NO');
error_reporting(\E_ALL); error_reporting(E_ALL);
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!isset($_POST['title']) || !isset($_POST['content'])) { if(!isset($_POST['title']) or !isset($_POST['content'])){
header('Location: ' . $_SERVER['HTTP_REFERER']); header('Location: ' . $_SERVER['HTTP_REFERER']);
exit; exit();
} }
if (!$userManager->isAdmin($uname)) { if(!$userManager->isAdmin($uname)){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$motdfetcher = new pvv\side\MOTD($pdo); $motdfetcher = new \pvv\side\MOTD($pdo);
$motdfetcher->setMOTD($_POST['title'], $_POST['content']); $motdfetcher->setMOTD($_POST['title'], $_POST['content']);
header('Location: .'); header('Location: .');

@ -1,19 +1,19 @@
<?php <?php
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'prosjekt')) { if(!$userManager->hasGroup($uname, 'prosjekt')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$projectID = $_GET['id']; $projectID = $_GET['id'];

@ -1,64 +1,64 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'prosjekt')) { if(!$userManager->hasGroup($uname, 'prosjekt')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$projects = $projectManager->getAll(); $projects = $projectManager->getAll();
$new = 0; $new = 0;
if (isset($_GET['new'])) { if(isset($_GET['new'])){
$new = $_GET['new']; $new = $_GET['new'];
} }
$projectID = 0; $projectID = 0;
if (isset($_GET['id'])) { if(isset($_GET['id'])){
$projectID = $_GET['id']; $projectID = $_GET['id'];
} elseif ($new == 0) { }else if($new == 0){
echo "\nID not set"; echo "\nID not set";
exit; exit();
} }
$project = new pvv\side\Project( $project = new \pvv\side\Project(
0, 0,
'Kult Prosjekt', 'Kult Prosjekt',
'', '',
'kåre knoll', 'kåre knoll',
'pvvadmin', 'pvvadmin',
'drift@pvv.ntnu.no', 'drift@pvv.ntnu.no',
0 0
); );
if ($new == 0) { if($new == 0){
$project = $projectManager->getByID($projectID); $project = $projectManager->getByID($projectID);
} }
$members = $projectManager->getProjectMembers($projectID); $members = $projectManager->getProjectMembers($projectID);
$owner = [ $owner = [
'name' => '', 'name' => '',
'uname' => '', 'uname' => '',
'mail' => '', 'mail' => '',
]; ];
foreach ($members as $i => $data) { foreach($members as $i => $data){
if ($data['owner']) { if($data['owner']){
$owner = $data; $owner = $data;
} }
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -85,34 +85,34 @@ foreach ($members as $i => $data) {
<h2>Prosjektadministrasjon</h2> <h2>Prosjektadministrasjon</h2>
<hr class="ruler"> <hr class="ruler">
<h2><?php echo $new == 1 ? 'Nytt prosjekt' : 'Rediger prosjekt'; ?></h2> <h2><?= ($new == 1 ? "Nytt prosjekt" : "Rediger prosjekt"); ?></h2>
<form action="update.php", method="post" class="gridsplit5050"> <form action="update.php", method="post" class="gridsplit5050">
<div class="gridl"> <div class="gridl">
<p class="subtitle">Tittel</p> <p class="subtitle">Tittel</p>
<?php echo '<input type="text" name="title" value="' . $project->getName() . '" class="boxinput">'; ?><br> <?= '<input type="text" name="title" value="' . $project->getName() . '" class="boxinput">' ?><br>
<p class="subtitle">Beskrivelse (<i>markdown</i>)</p> <p class="subtitle">Beskrivelse (<i>markdown</i>)</p>
<textarea name="desc" cols="40" rows="5" class="boxinput"><?php echo implode("\n", $project->getDescription()); ?></textarea> <textarea name="desc" cols="40" rows="5" class="boxinput"><?= implode($project->getDescription(), "\n"); ?></textarea>
</div> </div>
<div class="gridr noborder"> <div class="gridr noborder">
<p class="subtitle">Prosjektleder (Brukernavn)</p> <p class="subtitle">Prosjektleder (Brukernavn)</p>
<?php echo '<input type="text" name="organiser" value="' . $owner['uname'] . '" class="boxinput">'; ?><br> <?= '<input type="text" name="organiser" value="' . $owner['uname'] . '" class="boxinput">' ?><br>
<p class="subtitle">Prosjektleder (Navn)</p> <p class="subtitle">Prosjektleder (Navn)</p>
<?php echo '<input type="text" name="organisername" value="' . $owner['name'] . '" class="boxinput">'; ?> <?= '<input type="text" name="organisername" value="' . $owner['name'] . '" class="boxinput">' ?>
<p class="subtitle">Prosjektleder E-post</p> <p class="subtitle">Prosjektleder E-post</p>
<?php echo '<input type="text" name="organiseremail" value="' . $owner['mail'] . '" class="boxinput">'; ?><br> <?= '<input type="text" name="organiseremail" value="' . $owner['mail'] . '" class="boxinput">' ?><br>
<p class="subtitle">Aktiv</p> <p class="subtitle">Aktiv</p>
<?php echo '<input type="checkbox" ' . ($project->getActive() ? 'checked' : '') . ' name="active"/>'; ?> <?= '<input type="checkbox" '. ($project->getActive() ? 'checked' : '') . ' name="active"/>' ?>
</div> </div>
<?php echo '<input type="hidden" name="id" value="' . $project->getID() . '" />'; ?> <?= '<input type="hidden" name="id" value="' . $project->getID() . '" />' ?>
<?php if (!$new) { ?> <?php if(!$new){ ?>
<div style="grid-column: span 2;"> <div style="grid-column: span 2;">
<hr class="ruler"> <hr class="ruler">
</div> </div>
@ -121,11 +121,11 @@ foreach ($members as $i => $data) {
<table class="userlist" style="grid-column: span 2;"> <table class="userlist" style="grid-column: span 2;">
<tr><th>Brukernavn</th><th>Navn</th><th>Rolle</th></tr> <tr><th>Brukernavn</th><th>Navn</th><th>Rolle</th></tr>
<?php foreach ($members as $i => $data) { ?> <?php foreach($members as $i => $data) { ?>
<tr> <tr>
<td><?php echo $data['uname']; ?></td> <td><?= $data['uname']; ?></td>
<td><?php echo $data['name']; ?></td> <td><?= $data['name']; ?></td>
<td><?php echo $data['role']; ?></td> <td><?= $data['role']; ?></td>
</tr> </tr>
<?php } ?> <?php } ?>
@ -136,7 +136,7 @@ foreach ($members as $i => $data) {
</tr> </tr>
</table> </table>
<?php } ?> <?php } ?>
<div class="allgrids" style="margin-top: 2em;"> <div class="allgrids" style="margin-top: 2em;">
<hr class="ruler"> <hr class="ruler">

@ -1,49 +1,51 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../inc/navbar.php';
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'prosjekt')) { if(!$userManager->hasGroup($uname, 'prosjekt')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$projects = $projectManager->getAll(); $projects = $projectManager->getAll();
$page = 1; $page = 1;
if (isset($_GET['page'])) { if(isset($_GET['page'])){
$page = $_GET['page']; $page = $_GET['page'];
} }
$filterTitle = ''; $filterTitle = '';
if (isset($_POST['title'])) { if(isset($_POST['title'])){
$filterTitle = $_POST['title']; $filterTitle = $_POST['title'];
} }
/* Temporarily out of service :< /* Temporarily out of service :<
$filterOrganiser = ''; $filterOrganiser = '';
if(isset($_POST['organiser'])){ if(isset($_POST['organiser'])){
$filterOrganiser = $_POST['organiser']; $filterOrganiser = $_POST['organiser'];
} }
*/ */
// filter // filter
$projects = array_values(array_filter( $projects = array_values(array_filter(
$projects, $projects,
static fn($project) => preg_match('/.*' . $filterTitle . '.*/i', $project->getName()) function($project) use ($filterTitle){
return (preg_match('/.*'.$filterTitle.'.*/i', $project->getName()));
}
)); ));
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -77,52 +79,52 @@ $projects = array_values(array_filter(
<ul class="event-list"> <ul class="event-list">
<?php <?php
$counter = 0; $counter = 0;
$pageLimit = 4; $pageLimit = 4;
for ($i = ($pageLimit * ($page - 1)); $i < count($projects); ++$i) { for($i = ($pageLimit * ($page - 1)); $i < count($projects); $i++){
if ($counter == $pageLimit) { if($counter == $pageLimit){
break; break;
} }
$project = $projects[$i]; $project = $projects[$i];
$projectID = $project->getID(); $projectID = $project->getID();
$owner = $projectManager->getProjectOwner($projectID); $owner = $projectManager->getProjectOwner($projectID);
?> ?>
<li> <li>
<div class="event admin"> <div class="event admin">
<div class="event-info"> <div class="event-info">
<h3 class="no-chin"><?php echo $project->getName() . ' (ID: ' . $projectID . ')'; ?></h3> <h3 class="no-chin"><?= $project->getName() . " (ID: " . $projectID . ")"; ?></h3>
<p class="subnote"><?php echo 'Organisert av: ' . $owner['name']; ?></p> <p class="subnote"><?= 'Organisert av: ' . $owner['name']; ?></p>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $project->getDescription())); echo $Parsedown->text(implode("\n", $project->getDescription()));
?> ?>
</div> </div>
<div class="event-actions"> <div class="event-actions">
<?php echo '<a href="edit.php?id=' . $projectID . '">🖊</a>'; ?> <?= '<a href="edit.php?id=' . $projectID . '">🖊</a>'; ?>
<?php echo '<a href="delete.php?id=' . $projectID . '" onclick="return confirm(\'Knallsikker? (ID: ' . $projectID . ')\');">🗑</a>'; ?> <?= '<a href="delete.php?id=' . $projectID . '" onclick="return confirm(\'Knallsikker? (ID: ' . $projectID . ')\');">🗑</a>'; ?>
</div> </div>
</div> </div>
</li> </li>
<?php <?php
++$counter; $counter++;
} }
?> ?>
</ul> </ul>
<?php <?php
if ($page != 1) { if($page != 1){
echo '<a class="btn float-left" href="?page=' . ($page - 1) . '">Forrige side</a>'; echo '<a class="btn float-left" href="?page=' . ($page - 1) . '">Forrige side</a>';
} }
if (($counter == $pageLimit) && (($pageLimit * $page) < count($projects))) { if(($counter == $pageLimit) and (($pageLimit * $page) < count($projects))){
echo '<a class="btn float-right" href="?page=' . ($page + 1) . '">Neste side</a>'; echo '<a class="btn float-right" href="?page=' . ($page + 1) . '">Neste side</a>';
} }
?> ?>
</div> </div>
<div class="gridr"> <div class="gridr">
@ -131,9 +133,9 @@ $projects = array_values(array_filter(
<h2>Filter</h2> <h2>Filter</h2>
<form action="." method="post"> <form action="." method="post">
<p class="no-chin">Prosjektnavn</p> <p class="no-chin">Prosjektnavn</p>
<?php echo '<input type="text" name="title" class="boxinput" value="' . $filterTitle . '">'; ?><br> <?= '<input type="text" name="title" class="boxinput" value="' . $filterTitle . '">' ?><br>
<p class="no-chin">Leders brukernavn</p> <p class="no-chin">Leders brukernavn</p>
<?php echo '<input type="text" name="organiser" class="boxinput" value="">'; ?><br> <?= '<input type="text" name="organiser" class="boxinput" value="">' ?><br>
<div style="margin-top: 2em;"> <div style="margin-top: 2em;">
<input type="submit" class="btn" value="Filtrer"></input> <input type="submit" class="btn" value="Filtrer"></input>

@ -1,31 +1,31 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../src/_autoload.php';
require __DIR__ . '/../../../config.php'; require __DIR__ . '/../../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
require_once __DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
if (!$userManager->hasGroup($uname, 'prosjekt')) { if(!$userManager->hasGroup($uname, 'prosjekt')){
echo 'Her har du ikke lov\'t\'å\'værra!!!'; echo 'Her har du ikke lov\'t\'å\'værra!!!';
exit; exit();
} }
if (!isset($_POST['title']) || !isset($_POST['desc']) || !isset($_POST['organisername']) || !isset($_POST['organiser'])) { if(!isset($_POST['title']) or !isset($_POST['desc']) or !isset($_POST['organisername']) or !isset($_POST['organiser'])){
header('Location: ' . $_SERVER['HTTP_REFERER']); header('Location: ' . $_SERVER['HTTP_REFERER']);
exit; exit();
} }
$id = 0; $id = 0;
if (isset($_POST['id'])) { if(isset($_POST['id'])){
$id = $_POST['id']; $id = $_POST['id'];
} }
$title = $_POST['title']; $title = $_POST['title'];
@ -33,45 +33,45 @@ $desc = $_POST['desc'];
$name = $_POST['organisername']; $name = $_POST['organisername'];
$uname = $_POST['organiser']; $uname = $_POST['organiser'];
$mail = $_POST['organiseremail']; $mail = $_POST['organiseremail'];
$active = ($_POST['active'] ?? 0); $active = (isset($_POST['active']) ? $_POST['active'] : 0);
$statement;
if($id == 0){
$query = 'INSERT INTO projects (name, description, active) VALUES (:title, :desc, :active)';
$statement = $pdo->prepare($query);
if ($id == 0) { $statement->bindParam(':title', $title, PDO::PARAM_STR);
$query = 'INSERT INTO projects (name, description, active) VALUES (:title, :desc, :active)'; $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement = $pdo->prepare($query); $statement->bindParam(':active', $active, PDO::PARAM_INT);
$statement->bindParam(':title', $title, PDO::PARAM_STR); $statement->execute();
$statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement->bindParam(':active', $active, PDO::PARAM_INT);
$statement->execute(); $ownerQuery = 'INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (last_insert_rowid(), :owner, :owneruname, :owneremail, \'Prosjektleder\', 1, 1)';
$statement = $pdo->prepare($ownerQuery);
$statement->bindParam(':owner', $name, PDO::PARAM_STR);
$statement->bindParam(':owneruname', $uname, PDO::PARAM_STR);
$statement->bindParam(':owneremail', $mail, PDO::PARAM_STR);
$ownerQuery = 'INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (last_insert_rowid(), :owner, :owneruname, :owneremail, \'Prosjektleder\', 1, 1)'; $statement->execute();
$statement = $pdo->prepare($ownerQuery); }else{
$statement->bindParam(':owner', $name, PDO::PARAM_STR); $query = 'UPDATE projects SET name=:title, description=:desc, active=:active WHERE id=:id';
$statement->bindParam(':owneruname', $uname, PDO::PARAM_STR); $statement = $pdo->prepare($query);
$statement->bindParam(':owneremail', $mail, PDO::PARAM_STR);
$statement->execute(); $statement->bindParam(':title', $title, PDO::PARAM_STR);
} else { $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$query = 'UPDATE projects SET name=:title, description=:desc, active=:active WHERE id=:id'; $statement->bindParam(':active', $active, PDO::PARAM_INT);
$statement = $pdo->prepare($query); $statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->bindParam(':title', $title, PDO::PARAM_STR); $statement->execute();
$statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement->bindParam(':active', $active, PDO::PARAM_INT);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute(); $query = 'UPDATE projectmembers SET name=:name, uname=:uname, mail=:mail';
$statement = $pdo->prepare($query);
$query = 'UPDATE projectmembers SET name=:name, uname=:uname, mail=:mail'; $statement->bindParam(':name', $name, PDO::PARAM_STR);
$statement = $pdo->prepare($query); $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->bindParam(':mail', $mail, PDO::PARAM_STR);
$statement->bindParam(':name', $name, PDO::PARAM_STR); $statement->execute();
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->bindParam(':mail', $mail, PDO::PARAM_STR);
$statement->execute();
} }
header('Location: .'); header('Location: .');

@ -1,18 +1,15 @@
<?php <?php namespace pvv\side;
require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
namespace pvv\side;
require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$year = (isset($_GET['year'])) $year = (isset($_GET['year']))
? $_GET['year'] ? $_GET['year']
: date('Y'); : date("Y");
$month = (isset($_GET['month'])) $month = (isset($_GET['month']))
? $_GET['month'] ? $_GET['month']
: date('m'); : date("m");
$day = (isset($_GET['day'])) $day = (isset($_GET['day']))
? $_GET['day'] ? $_GET['day']
: -1; : -1;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -37,46 +34,42 @@ $day = (isset($_GET['day']))
<main> <main>
<?php <?php
use DateTimeImmutable; use \DateTimeImmutable;
$events = ($day==-1)
? $agenda->getNextOfEach(new \DateTimeImmutable)
: $agenda->getEventsBetween(
new DateTimeImmutable("$year-$month-$day 00:00:00"),
new DateTimeImmutable("$year-$month-$day 23:59:59"));
$events = ($day == -1) $limit = 0;
? $agenda->getNextOfEach(new DateTimeImmutable()) foreach($events as $event) {
: $agenda->getEventsBetween( ?>
new DateTimeImmutable("{$year}-{$month}-{$day} 00:00:00"),
new DateTimeImmutable("{$year}-{$month}-{$day} 23:59:59")
);
$limit = 0;
foreach ($events as $event) {
?>
<article> <article>
<h2> <h2>
<?php if (Agenda::isToday($event->getStart())) { ?><strong><?php } ?> <?php if (\pvv\side\Agenda::isToday($event->getStart())) { ?><strong><?php } ?>
<em><?php echo $event->getRelativeDate(); ?></em> <em><?= $event->getRelativeDate() ?></em>
<?php if (Agenda::isToday($event->getStart())) { ?></strong><?php } ?> <?php if (\pvv\side\Agenda::isToday($event->getStart())) { ?></strong><?php } ?>
<?php if ($event->getURL()) { ?> <?php if ($event->getURL()) { ?>
<a href="<?php echo $event->getURL(); ?>"><?php echo $event->getName(); ?></a> <a href="<?= $event->getURL() ?>"><?= $event->getName() ?></a>
<?php } else { ?> <?php } else { ?>
<?php echo $event->getName(); ?> <?= $event->getName() ?>
<?php } ?> <?php } ?>
<?php if ($event->getImageURL()) { ?> <?php if ($event->getImageURL()) { ?>
<img src="<?php echo $event->getImageURL(); ?>"> <img src="<?= $event->getImageURL() ?>">
<?php } ?> <?php } ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <strong><?php echo Agenda::getFormattedDate($event->getStart()); ?></strong></li> <li>Tid: <strong><?= Agenda::getFormattedDate($event->getStart()) ?></strong></li>
<li>Sted: <strong><?php echo $event->getLocation(); ?></strong></li> <li>Sted: <strong><?= $event->getLocation() ?></strong></li>
<li>Arrangør: <strong><?php echo $event->getOrganiser(); ?></strong></li> <li>Arrangør: <strong><?= $event->getOrganiser() ?></strong></li>
</ul> </ul>
<?php $description = $event->getDescription(); ?> <?php $description = $event->getDescription(); ?>
<?php if ($limit) { <?php if ($limit) array_splice($description, $limit); ?>
array_splice($description, $limit);
} ?>
<?php <?php
$Parsedown = new \Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $description)); echo $Parsedown->text(implode("\n", $description));
?> ?>
</article> </article>
<?php } ?> <?php } ?>

@ -1,7 +1,6 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
use pvv\side\Agenda; use \pvv\side\Agenda;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -21,40 +20,40 @@ use pvv\side\Agenda;
<main> <main>
<?php <?php
$activity = new pvv\side\social\AnimekveldActivity(); $activity = new \pvv\side\social\AnimekveldActivity;
$nextEvent = $activity->getNextEventFrom(new DateTimeImmutable()); $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
?> ?>
<article> <article>
<h2><em><?php echo $nextEvent->getRelativeDate(); ?></em> Animekveld <h2><em><?= $nextEvent->getRelativeDate()?></em> Animekveld
<?php if ($nextEvent->getImageURL()) { ?> <?php if ($nextEvent->getImageURL()) { ?>
<img src="<?php echo $nextEvent->getImageURL(); ?>"> <img src="<?= $nextEvent->getImageURL() ?>">
<?php } ?> <?php } ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <li>Tid:
<strong> <strong>
<?php echo Agenda::getFormattedDate($nextEvent->getStart()); ?> <?= Agenda::getFormattedDate($nextEvent->getStart());?>
</strong> </strong>
<li>Sted: <li>Sted:
<strong> <strong>
<?php echo $nextEvent->getLocation(); ?> <?= $nextEvent->getLocation();?>
</strong> </strong>
<li>Arrangør: <li>Arrangør:
<strong> <strong>
<?php echo $nextEvent->getOrganiser(); ?> <?= $nextEvent->getOrganiser();?>
</strong> </strong>
</ul> </ul>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $nextEvent->getDescription())); echo $Parsedown->text(implode("\n", $nextEvent->getDescription()));
?> ?>
</article> </article>
</main> </main>
<nav> <nav>
<?php echo navbar(1, 'aktiviteter'); ?> <?= navbar(1, 'aktiviteter'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>

@ -1,7 +1,6 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
use pvv\side\Agenda; use \pvv\side\Agenda;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -21,41 +20,41 @@ use pvv\side\Agenda;
<main> <main>
<?php <?php
$activity = new pvv\side\social\BrettspillActivity(); $activity = new \pvv\side\social\BrettspillActivity;
$nextEvent = $activity->getNextEventFrom(new DateTimeImmutable()); $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
?> ?>
<article> <article>
<h2><em><?php echo $nextEvent->getRelativeDate(); ?></em> Brettspillkveld <h2><em><?= $nextEvent->getRelativeDate()?></em> Brettspillkveld
<?php if ($nextEvent->getImageURL()) { ?> <?php if ($nextEvent->getImageURL()) { ?>
<img src="<?php echo $nextEvent->getImageURL(); ?>"> <img src="<?= $nextEvent->getImageURL() ?>">
<?php } ?> <?php } ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <li>Tid:
<strong> <strong>
<?php echo Agenda::getFormattedDate($nextEvent->getStart()); ?> <?= Agenda::getFormattedDate($nextEvent->getStart());?>
</strong> </strong>
<li>Sted: <li>Sted:
<strong> <strong>
<?php echo $nextEvent->getLocation(); ?> <?= $nextEvent->getLocation();?>
</strong> </strong>
<li>Arrangør: <li>Arrangør:
<strong> <strong>
<?php echo $nextEvent->getOrganiser(); ?> <?= $nextEvent->getOrganiser();?>
</strong> </strong>
</ul> </ul>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $nextEvent->getDescription())); echo $Parsedown->text(implode("\n", $nextEvent->getDescription()));
?> ?>
</article> </article>
</main> </main>
<nav> <nav>
<?php echo navbar(1, 'aktiviteter'); ?> <?= navbar(1, 'aktiviteter'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>

@ -65,23 +65,39 @@ img.float-right {
list-style: none; list-style: none;
} }
.calendar-events ul li :not(.date):not(.time) {
display: inline-block;
width: calc(100% - 7em);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.calendar-events ul .date {
color: rgba(0, 0, 0, 0.5);
font-size: 0.8em;
margin-top: 0.2em;
}
.calendar-events > li > p {
border-bottom: 0.1em dotted rgba(0, 0, 0, 0.2);
}
.calendar-events ul { .calendar-events ul {
list-style: none; list-style: none;
padding: 0; padding: 0;
} }
.calendar-events a { .calendar-events a,
color: rgba(0,0,0, 0.85);
}
.calendar-events ul .datetime { .calendar-events ul .time {
color: rgba(0, 0, 0, 0.5); color: rgba(0, 0, 0, 0.5);
float: right; float: right;
margin-left: 0.2em;
} }
.calendar-events ul li { .calendar-events ul .icon,
margin-bottom: 0.4em; .calendar-events ul .date {
float: right;
margin-right: 0.5em;
} }
main.contentsplit { main.contentsplit {

@ -1,95 +1,93 @@
<?php <?php
declare(strict_types=1); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
header('Content-Type: application/json'); header('Content-Type: application/json');
$door = new pvv\side\Door($pdo); $door = new \pvv\side\Door($pdo);
if ($_SERVER['REQUEST_METHOD'] === 'POST') { if($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_SERVER['HTTP_AUTHORIZATION'])) { if (isset($_SERVER["HTTP_AUTHORIZATION"])) {
[$type, $data] = explode(' ', $_SERVER['HTTP_AUTHORIZATION'], 2); list($type, $data) = explode(" ", $_SERVER["HTTP_AUTHORIZATION"], 2);
if (strcasecmp($type, 'Bearer') == 0) { if (strcasecmp($type, "Bearer") == 0) {
if (hash_equals($data, $DOOR_SECRET)) { if (hash_equals($data, $DOOR_SECRET)) {
handleSetState(); handleSetState();
} else { } else {
echo '{"status": "error", "message": "Invalid authentication key"}'; echo '{"status": "error", "message": "Invalid authentication key"}';
exit; die();
} }
} else {
echo '{"status": "error", "message": "Invalid authentication method"}';
die();
}
} else { } else {
echo '{"status": "error", "message": "Invalid authentication method"}'; echo '{"status": "error", "message": "Missing authentication"}';
exit; die();
} }
} else {
echo '{"status": "error", "message": "Missing authentication"}';
exit;
}
} elseif ($_SERVER['REQUEST_METHOD'] === 'GET') { } elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (isset($_GET['period'])) { if (isset($_GET["period"])) {
$period = (string) htmlspecialchars($_GET['period']); $period = (string)htmlspecialchars($_GET["period"]);
if ($period == "day") {
$startTime = time() - (60*60*24);
} else if ($period == "week") {
$startTime = time() - (60*60*24*7);
} else {
echo '{"status": "error", "message": "Invalid period"}';
die();
}
if ($period == 'day') { $lines = $door->getEntriesAfter($startTime);
$startTime = time() - (60 * 60 * 24); if (isset($_GET["edgeonly"]) && (bool)htmlspecialchars($_GET["edgeonly"])) {
} elseif ($period == 'week') { //Ignore repeats
$startTime = time() - (60 * 60 * 24 * 7); $lines = getChanges($lines);
}
echo json_encode([
'status' => "OK",
'entries' => $lines
]);
} else { } else {
echo '{"status": "error", "message": "Invalid period"}'; //Only last entry
exit; $line = (object)$door->getCurrent();
echo json_encode([
'status' => "OK",
'time' => $line->time,
'open' => $line->open
]);
} }
$lines = $door->getEntriesAfter($startTime);
if (isset($_GET['edgeonly']) && (bool) htmlspecialchars($_GET['edgeonly'])) {
// Ignore repeats
$lines = getChanges($lines);
}
echo json_encode([
'status' => 'OK',
'entries' => $lines,
]);
} else {
// Only last entry
$line = (object) $door->getCurrent();
echo json_encode([
'status' => 'OK',
'time' => $line->time,
'open' => $line->open,
]);
}
} }
function handleSetState(): void { function handleSetState() {
global $door; global $door;
$jsonobj = file_get_contents('php://input'); $jsonobj = file_get_contents('php://input');
$event = json_decode($jsonobj); $event = json_decode($jsonobj);
if ((!isset($event->time)) || (!is_numeric($event->time))) { if ((!isset($event->time)) || (!is_numeric($event->time))) {
echo '{"status": "error", "message": "Invalid timestamp"}'; echo '{"status": "error", "message": "Invalid timestamp"}';
exit; die();
} }
if ((!isset($event->isDoorOpen)) || (!is_bool($event->isDoorOpen))) { if ((!isset($event->isDoorOpen)) || (!is_bool($event->isDoorOpen))) {
echo '{"status": "error", "message": "Invalid door state"}'; echo '{"status": "error", "message": "Invalid door state"}';
exit; die();
} }
$door->createEvent((int) $event->time, $event->isDoorOpen ? 1 : 0); $door->createEvent((int)($event->time), $event->isDoorOpen ? 1 : 0);
echo '{"status": "OK"}'; echo '{"status": "OK"}';
} }
function getChanges($items) { function getChanges($items) {
$prevState = 2; $prevState = 2;
$res = []; $res = [];
foreach ($items as $item) { foreach($items as $item) {
if ($item['open'] !== $prevState) { if ($item["open"] !== $prevState) {
$res[] = $item; array_push($res, $item);
$prevState = $item['open']; $prevState = $item["open"];
}
} }
}
return $res; return $res;
} }

@ -1,7 +1,6 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
use pvv\side\Agenda; use \pvv\side\Agenda;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -21,40 +20,40 @@ use pvv\side\Agenda;
<main> <main>
<?php <?php
$activity = new pvv\side\social\DriftkveldActivity(); $activity = new \pvv\side\social\DriftkveldActivity;
$nextEvent = $activity->getNextEventFrom(new DateTimeImmutable()); $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
?> ?>
<article> <article>
<h2><em><?php echo $nextEvent->getRelativeDate(); ?></em> Driftkveld <h2><em><?= $nextEvent->getRelativeDate()?></em> Driftkveld
<?php if ($nextEvent->getImageURL()) { ?> <?php if ($nextEvent->getImageURL()) { ?>
<img src="<?php echo $nextEvent->getImageURL(); ?>"> <img src="<?= $nextEvent->getImageURL() ?>">
<?php } ?> <?php } ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <li>Tid:
<strong> <strong>
<?php echo Agenda::getFormattedDate($nextEvent->getStart()); ?> <?= Agenda::getFormattedDate($nextEvent->getStart());?>
</strong> </strong>
<li>Sted: <li>Sted:
<strong> <strong>
<?php echo $nextEvent->getLocation(); ?> <?= $nextEvent->getLocation();?>
</strong> </strong>
<li>Arrangør: <li>Arrangør:
<strong> <strong>
<?php echo $nextEvent->getOrganiser(); ?> <?= $nextEvent->getOrganiser();?>
</strong> </strong>
</ul> </ul>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $nextEvent->getDescription())); echo $Parsedown->text(implode("\n", $nextEvent->getDescription()));
?> ?>
</article> </article>
</main> </main>
<nav> <nav>
<?php echo navbar(1, 'aktiviteter'); ?> <?= navbar(1, 'aktiviteter'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>

@ -1,68 +1,67 @@
<?php <?php
error_reporting(0); error_reporting(0);
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userManager = new pvv\admin\UserManager($pdo); $userManager = new \pvv\admin\UserManager($pdo);
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$loginname = $attrs['uid'][0]; $loginname = $attrs['uid'][0];
if (!$loginname) { if(!$loginname) {
header('Content-Type: text/plain', true, 403); header('Content-Type: text/plain', true, 403);
echo "Du må være logget inn for å se bildegalleriet.\r\n"; echo "Du må være logget inn for å se bildegalleriet.\r\n";
exit; exit();
} }
// Sourced from config.php through include.php # Sourced from config.php through include.php
$galleryDir = $GALLERY_DIR; $galleryDir = $GALLERY_DIR;
$serverPath = $GALLERY_SERVER_PATH; $serverPath = $GALLERY_SERVER_PATH;
$allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp']; $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'webp'];
$unamefile = $galleryDir . '/usernames.txt'; $unamefile = $galleryDir . "/usernames.txt";
$unamepairs = file($unamefile); $unamepairs = file($unamefile);
function getDirContents($dir, &$results = []) { function getDirContents($dir, &$results = array()) {
$files = scandir($dir); $files = scandir($dir);
foreach ($files as $key => $value) { foreach ($files as $key => $value) {
$path = realpath($dir . \DIRECTORY_SEPARATOR . $value); $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (!is_dir($path)) { if (!is_dir($path)) {
// Remove the full path on disk, keep username and relative path to image. //Remove the full path on disk, keep username and relative path to image.
$pos = strpos($path, $GLOBALS['galleryDir']); $pos = strpos($path, $GLOBALS["galleryDir"]);
if ($pos !== false) { if ($pos !== false) {
$cleanPath = substr_replace($path, '', $pos, strlen($GLOBALS['galleryDir'])); $cleanPath = substr_replace($path, "", $pos, strlen($GLOBALS["galleryDir"]));
} }
// Check if the file is an image //Check if the file is an image
$ext = strtolower(pathinfo($path, \PATHINFO_EXTENSION)); $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
if (in_array($ext, $GLOBALS['allowedExtensions'], true)) { if (in_array($ext, $GLOBALS["allowedExtensions"])) {
$results[] = $cleanPath; $results[] = $cleanPath;
} }
} elseif ($value != '.' && $value != '..' && $value != '.thumbnails') { } else if ($value != "." && $value != ".." && $value != ".thumbnails") {
// recursively scan directories //recursively scan directories
getDirContents($path, $results); getDirContents($path, $results);
}
} }
} return $results;
return $results;
} }
$images = getDirContents($galleryDir); $images = getDirContents($galleryDir);
function cmpModifyTime($a, $b) { function cmpModifyTime($a, $b) {
global $galleryDir; global $galleryDir;
$mtime_a = filemtime($galleryDir . $a); $mtime_a = filemtime($galleryDir . $a);
$mtime_b = filemtime($galleryDir . $b); $mtime_b = filemtime($galleryDir . $b);
return ($mtime_a > $mtime_b) ? -1 : 1; return ($mtime_a > $mtime_b) ? -1 : 1;
} }
usort($images, 'cmpModifyTime'); usort($images, "cmpModifyTime");
$imageTemplate = ' $imageTemplate = '
<div class="card"> <div class="card">
@ -78,7 +77,7 @@ $imageTemplate = '
<p class="card-footer-item">%time</p> <p class="card-footer-item">%time</p>
</div> </div>
</div> </div>
'; '
?> ?>
@ -102,34 +101,34 @@ $imageTemplate = '
<main class="gallery-container"> <main class="gallery-container">
<?php <?php
foreach ($images as $key => $value) { foreach ($images as $key => $value) {
$modTime = date('d.m.Y H:i', filemtime($galleryDir . $value)); $modTime = date("d.m.Y H:i", filemtime($galleryDir . $value));
$imguser = explode('/', $value)[1]; $imguser = explode("/", $value)[1];
$displaypath = implode('/', array_slice(explode('/', $value), 2)); $displaypath = implode("/", array_slice(explode("/", $value), 2));
$realname = 'Ukjent'; $realname = "Ukjent";
foreach ($unamepairs as $unamepair) { foreach ($unamepairs as $unamepair) {
$unamepair = explode(':', $unamepair); $unamepair = explode(":", $unamepair);
if ($unamepair[0] == $imguser) { if ($unamepair[0] == $imguser) {
$realname = $unamepair[1]; $realname = $unamepair[1];
break; break;
}
} }
}
$vars = [ $vars = [
'%user' => htmlspecialchars($imguser), "%user" => htmlspecialchars($imguser),
'%time' => $modTime, "%time" => $modTime,
'%name' => htmlspecialchars($displaypath), "%name" => htmlspecialchars($displaypath),
'%path' => $serverPath . $value, "%path" => $serverPath . $value,
'%thumbnail' => $serverPath . '/.thumbnails' . $value . '.png', "%thumbnail" => $serverPath . "/.thumbnails" . $value . ".png",
'%realname' => htmlspecialchars($realname), "%realname" => htmlspecialchars($realname)
]; ];
echo strtr($imageTemplate, $vars); echo strtr($imageTemplate, $vars);
} }
if (count($images) == 0) { if (count($images) == 0) {
echo "<h3 class='no-images'>Det er dessverre ingen bilder å vise.</h3>"; echo "<h3 class='no-images'>Det er dessverre ingen bilder å vise.</h3>";
} }
?> ?>
</main> </main>
<div id="modal" class="modal"> <div id="modal" class="modal">
<span id="modal-close" class="modal-close">&#10006;</span> <span id="modal-close" class="modal-close">&#10006;</span>

@ -1,36 +1,34 @@
<?php <?php
declare(strict_types=1);
require __DIR__ . '/../../config.php'; require __DIR__ . '/../../config.php';
$searchDir = $SLIDESHOW_DIR; $searchDir = $SLIDESHOW_DIR;
$serverPath = $SLIDESHOW_SERVER_PATH; $serverPath = $SLIDESHOW_SERVER_PATH;
$splashImg = '/PNG/PVV-logo-big-bluebg.png'; $splashImg = "/PNG/PVV-logo-big-bluebg.png";
// Note: This does not support nested directories // Note: This does not support nested directories
$filenames = scandir($searchDir); $filenames = sCaNdIr($searchDir);
// Remove the expected non-images //Remove the expected non-images
foreach ($filenames as $k => $value) { foreach($filenames as $k => $value) {
if (in_array($value, ['.', '..'], true)) { if(in_array($value, [".", ".."])) {
unset($filenames[$k]); unset($filenames[$k]);
} }
} }
function getFullPath($fname) { function getFullPath($fname) { return ($GLOBALS["serverPath"] . "/" . $fname ); }
return $GLOBALS['serverPath'] . '/' . $fname;
}
// Sort filenames alphabetically and prepend the path prefix to each item. // Sort filenames alphabetically and prepend the path prefix to each item.
asort($filenames); asort($filenames);
$slideshowimagefilenames = aRrAy_MaP('getFullPath', $filenames); $slideshowimagefilenames = aRrAy_MaP("getFullPath", $filenames);
// Prepend the cover photo // Prepend the cover photo
ArRaY_uNsHiFt($slideshowimagefilenames, $splashImg); ArRaY_uNsHiFt($slideshowimagefilenames, $splashImg);
eChO '<img class="slideshowimg slideshowactive" id="slideshowImage1" src="' . $slideshowimagefilenames[0] . '">'; eChO('<img class="slideshowimg slideshowactive" id="slideshowImage1" src="' . $slideshowimagefilenames[0] . '">');
ecHo '<img class="slideshowimg" id="slideshowImage2" src="' . $slideshowimagefilenames[1] . '">'; ecHo('<img class="slideshowimg" id="slideshowImage2" src="' . $slideshowimagefilenames[1] . '">');
// Store list of file names in a globel JS variable // Store list of file names in a globel JS variable
EchO '<script> const slideshowFnames =' . jSoN_eNcOdE($slideshowimagefilenames) . '; </script>'; EchO("<script> const slideshowFnames =" . jSoN_eNcOdE($slideshowimagefilenames) . "; </script>");
?>

@ -1,8 +1,5 @@
<?php <?php namespace pvv\side;
require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
namespace pvv\side;
require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden', 'Neste måned']; $translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden', 'Neste måned'];
?> ?>
@ -21,8 +18,8 @@ $translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden',
<body> <body>
<nav> <nav>
<?php echo navbar(1, 'hendelser'); ?> <?= navbar(1, 'hendelser'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>
<main> <main>
<h1 style="pointer-events:none; text-align: left;">Hendelser</h1> <h1 style="pointer-events:none; text-align: left;">Hendelser</h1>
@ -30,45 +27,43 @@ $translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden',
<a style="padding-left: 2em; padding-right: 2em;" class="btn" style="" href="../kalender/">Kalender</a> <a style="padding-left: 2em; padding-right: 2em;" class="btn" style="" href="../kalender/">Kalender</a>
</center> </center>
<?php <?php
$description_paragraphs = 2; // description length $description_paragraphs = 2; //description length
foreach ($agenda->getNextDays() as $period => $events) { foreach($agenda->getNextDays() as $period => $events) {
if ($events) { ?> if ($events) { ?>
<h2 style="text-align: left;"><?php echo $translation[$period]; ?></h2> <h2 style="text-align: left;"><?= $translation[$period] ?></h2>
<ul class="events"> <ul class="events">
<?php foreach ($events as $event) {?> <?php foreach($events as $event) {?>
<li style="border-color: <?php echo $event->getColor(); ?>"> <li style="border-color: <?= $event->getColor() ?>">
<h4><strong> <h4><strong>
<?php if ($event->getURL()) { ?> <?php if ($event->getURL()) { ?>
<a href="<?php echo $event->getURL(); ?>"><?php echo $event->getName(); ?></a> <a href="<?= $event->getURL() ?>"><?= $event->getName() ?></a>
<?php } else { ?> <?php } else { ?>
<?php echo $event->getName(); ?> <?= $event->getName() ?>
<?php } ?> <?php } ?>
</strong></h4> </strong></h4>
<?php $description = $event->getDescription(); ?> <?php $description = $event->getDescription(); ?>
<?php if ($description_paragraphs) { <?php if ($description_paragraphs) array_splice($description, $description_paragraphs); ?>
array_splice($description, $description_paragraphs);
} ?>
<?php <?php
$Parsedown = new \Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $description)); echo $Parsedown->text(implode("\n", $description));
?> ?>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <strong><?php echo Agenda::getFormattedDate($event->getStart()); ?></strong></li> <li>Tid: <strong><?= Agenda::getFormattedDate($event->getStart()) ?></strong></li>
<li>Sted: <strong><?php echo $event->getLocation(); ?></strong></li> <li>Sted: <strong><?= $event->getLocation() ?></strong></li>
<li>Arrangør: <strong><?php echo $event->getOrganiser(); ?></strong></li> <li>Arrangør: <strong><?= $event->getOrganiser() ?></strong></li>
</ul> </ul>
</li> </li>
<?php } ?> <?php } ?>
</ul> </ul>
<?php } ?> <?php } ?>
<?php } ?> <?php } ?>
<div style="text-align: center; margin-bottom: 2em;"> <div style="text-align: center; margin-bottom: 2em;">
<a style="padding-left: 2em; padding-right: 2em;" class="btn" style="" href="../kalender/">Kalender</a> <a style="padding-left: 2em; padding-right: 2em;" class="btn" style="" href="../kalender/">Kalender</a>
</div> </div>
</main> </main>
</body> </body>

@ -1,20 +1,20 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
use pvv\side\Agenda; use \pvv\side\Agenda;
$eventID = 0; $eventID = 0;
if (isset($_GET['id'])) { if(isset($_GET['id'])){
$eventID = $_GET['id']; $eventID = $_GET['id'];
} else { }else{
echo 'No event ID provided'; echo 'No event ID provided';
exit; exit();
} }
$dbActivity = new pvv\side\DBActivity($pdo); $dbActivity = new \pvv\side\DBActivity($pdo);
$event = $dbActivity->getEventByID($eventID); $event = $dbActivity->getEventByID($eventID);
if (!$event) { if(!$event){
echo 'Failed to retrieve event info'; echo 'Failed to retrieve event info';
exit; exit();
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -34,23 +34,23 @@ if (!$event) {
<main> <main>
<article> <article>
<h2> <h2>
<?php if (Agenda::isToday($event->getStart())) { ?><strong><?php } ?> <?php if (\pvv\side\Agenda::isToday($event->getStart())) { ?><strong><?php } ?>
<em><?php echo $event->getRelativeDate(); ?></em> <em><?= $event->getRelativeDate() ?></em>
<?php if (Agenda::isToday($event->getStart())) { ?></strong><?php } ?> <?php if (\pvv\side\Agenda::isToday($event->getStart())) { ?></strong><?php } ?>
<?php echo $event->getName(); ?> <?= $event->getName() ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <strong><?php echo Agenda::getFormattedDate($event->getStart()); ?></strong></li> <li>Tid: <strong><?= Agenda::getFormattedDate($event->getStart()) ?></strong></li>
<li>Sted: <strong><?php echo $event->getLocation(); ?></strong></li> <li>Sted: <strong><?= $event->getLocation() ?></strong></li>
<li>Arrangør: <strong><?php echo $event->getOrganiser(); ?></strong></li> <li>Arrangør: <strong><?= $event->getOrganiser() ?></strong></li>
</ul> </ul>
<?php $description = $event->getDescription(); ?> <?php $description = $event->getDescription(); ?>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $description)); echo $Parsedown->text(implode("\n", $description));
?> ?>
</article> </article>
</main> </main>

@ -1,25 +1,22 @@
<?php <?php
require_once dirname(__DIR__) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(__DIR__) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden', 'Neste måned']; $translation = ['I dag', 'I morgen', 'Denne uka', 'Neste uke', 'Denne måneden', 'Neste måned'];
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$motdfetcher = new pvv\side\MOTD($pdo); $motdfetcher = new \pvv\side\MOTD($pdo);
$motd = $motdfetcher->getMOTD(); $motd = $motdfetcher->getMOTD();
$door = new pvv\side\Door($pdo); $door = new \pvv\side\Door($pdo);
$doorEntry = (object) $door->getCurrent(); $doorEntry = (object)($door->getCurrent());
if ($doorEntry->time < (time() - 60 * 30)) { if ($doorEntry->time < (time() - 60*30)) {
$doorStateText = 'Ingen data fra dørsensor'; $doorStateText = "Ingen data fra dørsensor";
} else { } else {
if ($doorEntry->open) { if ($doorEntry->open) { $doorStateText = "Døren er <b>åpen</b>";
$doorStateText = 'Døren er <b>åpen</b>'; } else { $doorStateText = "Døren er <b>ikke åpen</b>"; }
} else {
$doorStateText = 'Døren er <b>ikke åpen</b>';
}
} }
$doorTime = date('H:i', $doorEntry->time); $doorTime = date("H:i", $doorEntry->time);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -44,7 +41,7 @@ $doorTime = date('H:i', $doorEntry->time);
<header class="landing"> <header class="landing">
<div id="imageSlideshow"> <div id="imageSlideshow">
<?php include 'galleri/slideshow.php'; ?> <?php include("galleri/slideshow.php"); ?>
<script src="js/slideshow.js"></script> <script src="js/slideshow.js"></script>
</div> </div>
<div class="info"> <div class="info">
@ -55,9 +52,9 @@ $doorTime = date('H:i', $doorEntry->time);
<a class="btn" href="om/"><li>Om PVV</li></a> <a class="btn" href="om/"><li>Om PVV</li></a>
<a class="btn focus" href="paamelding/"><li>Bli medlem!</li></a> <a class="btn focus" href="paamelding/"><li>Bli medlem!</li></a>
<a class="btn" href="https://use.mazemap.com/#config=ntnu&v=1&zlevel=2&center=10.406281,63.417093&zoom=19.5&campuses=ntnu&campusid=1&sharepoitype=poi&sharepoi=38159&utm_medium=longurl">Veibeskrivelse</li></a> <a class="btn" href="https://use.mazemap.com/#config=ntnu&v=1&zlevel=2&center=10.406281,63.417093&zoom=19.5&campuses=ntnu&campusid=1&sharepoitype=poi&sharepoi=38159&utm_medium=longurl">Veibeskrivelse</li></a>
<div id="doorIndicator" class="<?php echo $doorEntry->open ? 'doorIndicator_OPEN' : 'doorIndicator_CLOSED'; ?>" onclick="location.href='/door/graph.html'"> <div id="doorIndicator" class="<?php echo($doorEntry->open ? "doorIndicator_OPEN" : "doorIndicator_CLOSED"); ?>" onclick="location.href='/door/graph.html'">
<p class="doorStateText"><?php echo $doorStateText; ?></p> <p class="doorStateText"><?php echo($doorStateText) ?></p>
<p class="doorStateTime">(Oppdatert <?php echo $doorTime; ?>)</p> <p class="doorStateTime">(Oppdatert <?php echo($doorTime) ?>)</p>
</div> </div>
</ul> </ul>
</div> </div>
@ -69,60 +66,52 @@ $doorTime = date('H:i', $doorEntry->time);
<div class="calendar-events"> <div class="calendar-events">
<?php $counter1 = 0; ?> <?php $counter1 = 0; ?>
<?php $counter2 = 0; ?> <?php $counter2 = 0; ?>
<?php foreach ($agenda->getNextDays() as $period => $events) { <?php foreach($agenda->getNextDays() as $period => $events) if ($events && $counter1 < 3 && $counter2 < 10) { $counter1++ ?>
if ($events && $counter1 < 3 && $counter2 < 10) { <p class="no-chin"><?= $translation[$period] ?></p>
$counter1++; ?>
<p class="no-chin"><?php echo $translation[$period]; ?></p>
<hr> <hr>
<ul> <ul>
<?php foreach ($events as $event) { <?php foreach($events as $event) { $counter2++ ?>
$counter2++; ?>
<li> <li>
<?php if ($event->getURL()) { ?> <?php if ($event->getURL()) { ?>
<a href="<?php echo htmlspecialchars($event->getURL()); ?>"><?php echo $event->getName(); ?></a> <a href="<?= htmlspecialchars($event->getURL()) ?>"><?= $event->getName(); ?></a>
<?php } else { ?> <?php } else { ?>
<strong><?php echo $event->getName(); ?></strong> <strong><?= $event->getName(); ?></strong>
<?php } ?> <?php } ?>
<?php /* <a class="icon subscribe">+</a> */ ?>
<span class="datetime"> <?php if ($period !== \pvv\side\Agenda::TODAY) {
<?php if ($period !== pvv\side\Agenda::TODAY) { echo '<span class="time">' . $event->getStart()->format('H:i') . '</span>';
echo $event->getStart()->format('H:i') . ' '; if (\pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) {
if (pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) { echo '<span class="date">' . strftime('%a', $event->getStart()->getTimestamp()) . '</span>';
echo $event->getStart()->format('D'); } else {
} else { echo '<span class="date">' . strftime('%e. %b', $event->getStart()->getTimestamp()) . '</span>';
echo $event->getStart()->format('j. F'); }
} } else {
} else { echo '<span class="time">' . $event->getStart()->format('H:i') . '</span>';
echo $event->getStart()->format('H:i'); }
} ?>
?>
</span>
</li> </li>
<?php } ?> <?php } ?>
</ul> </ul>
<?php <?php } ?>
}
}
?>
</div> </div>
<p><a class="btn" href="hendelser/">Flere aktiviteter</a></p> <p><a class="btn" href="hendelser/">Flere aktiviteter</a></p>
</div> </div>
<div class="gridl"> <div class="gridl">
<?php <?php
$title = $motd['title']; $title = $motd["title"];
echo '<h1>'; echo "<h1>";
if ($title == '') { if($title == ""){
echo 'Dagens melding'; echo "Dagens melding";
} else { }else{
echo $title; echo $title;
} }
echo '</h1>'; echo "</h1>";
$Parsedown = new Parsedown(); $Parsedown = new Parsedown();
echo $Parsedown->text(implode("\n", $motd['content'])); echo $Parsedown->text(implode("\n", $motd["content"]));
?> ?>
</div> </div>
</main> </main>
</body> </body>

@ -1,19 +1,17 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$year = (isset($_GET['year'])) $year = (isset($_GET['year']))
? $_GET['year'] ? $_GET['year']
: date('Y'); : date("Y");
$month = (isset($_GET['month'])) $month = (isset($_GET['month']))
? $_GET['month'] ? $_GET['month']
: date('m'); : date("m");
$days_before_the_first = (new DateTime($year . '-' . $month . '-01'))->format('w') - 1; $days_before_the_first = (new DateTime($year."-".$month."-01"))->format("w") - 1;
if ($days_before_the_first == -1) { if ($days_before_the_first==-1) {$days_before_the_first = 6;}
$days_before_the_first = 6; $day_of_month = ($month == date("m"))
} ? date("j")
$day_of_month = ($month == date('m')) : -1;
? date('j')
: -1;
$days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year)); $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
?><!DOCTYPE html> ?><!DOCTYPE html>
@ -38,27 +36,20 @@ $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
</nav> </nav>
<main> <main>
<h2 style="text-align:center;">PVV Kalender for <?php echo $months_translations[$month - 1]; ?> <?php echo $year; ?></h2> <h2 style="text-align:center;">PVV Kalender for <?=$months_translations[$month-1]?> <?=$year?></h2>
<div class="pagination_bar"> <div class="pagination_bar"><?php
<?php $pmonth = $month-1;
$pmonth = $month - 1; $nmonth = $month+1;
$nmonth = $month + 1; $pyear=$year;
$pyear = $year; $nyear=$year;
$nyear = $year; if ($pmonth==0) {$pmonth=12; $pyear--;}
if ($pmonth == 0) { if ($nmonth==13) {$nmonth=1; $nyear++;}
$pmonth = 12; ?>
--$pyear; <a class="btn noselect" href="../kalender?year=<?=$pyear?>&amp;month=<?=$pmonth?>">Forrige måned</a>
} <a class="btn noselect" href="../kalender?year=<?=$nyear?>&amp;month=<?=$nmonth?>">Neste måned</a>
if ($nmonth == 13) {
$nmonth = 1;
++$nyear;
}
?>
<a class="btn noselect" href="../kalender?year=<?php echo $pyear; ?>&amp;month=<?php echo $pmonth; ?>">Forrige måned</a>
<a class="btn noselect" href="../kalender?year=<?php echo $nyear; ?>&amp;month=<?php echo $nmonth; ?>">Neste måned</a>
</div> </div>
<figure class="calendar"> <figure class="calendar">
<ul> <ul>
<li class="header noselect">mandag <li class="header noselect">mandag
@ -68,32 +59,32 @@ $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
<li class="header noselect">fredag <li class="header noselect">fredag
<li class="header noselect">lørdag <li class="header noselect">lørdag
<li class="header noselect">søndag <li class="header noselect">søndag
<?php if ($days_before_the_first != 0) { ?> <?php if ($days_before_the_first != 0) { ?>
<li class="outOfMonth" style="grid-column: 1/<?php echo $days_before_the_first + 1; ?>;"> <li class="outOfMonth" style="grid-column: 1/<?=$days_before_the_first+1?>;">
<?php } ?> <?php } ?>
<?php for ($day = 1; $day <= $days_in_month; ++$day) { ?> <?php for ($day=1; $day <= $days_in_month; $day++) { ?>
<?php $events = $agenda->getEventsBetween( <?php $events = $agenda->getEventsBetween(
new DateTimeImmutable("{$year}-{$month}-{$day} 00:00:00"), new DateTimeImmutable("$year-$month-$day 00:00:00"),
new DateTimeImmutable("{$year}-{$month}-{$day} 23:59:59") new DateTimeImmutable("$year-$month-$day 23:59:59")); ?>
); ?> <?php if ($day==$day_of_month) { ?>
<?php if ($day == $day_of_month) { ?>
<li class="active"> <li class="active">
<?php } else { ?> <?php } else { ?>
<li> <li>
<?php } ?> <?php } ?>
<?php if (count($events) != 0) { ?> <?php if (sizeof($events)!=0) { ?>
<a href="../aktiviteter/?<?php echo "year={$year}&amp;month={$month}&amp;day={$day}"; ?>"><div> <a href="../aktiviteter/?<?="year=$year&amp;month=$month&amp;day=$day"?>"><div>
<span class="noselect day"><?php echo $day; ?>.</span> <span class="noselect day"><?= $day ?>.</span>
<?php foreach ($events as $event) { ?> <?php foreach($events as $event) { ?>
<section style="background: <?php echo $event->getColor(); ?>"><?php echo $event->getName(); ?></section> <section style="background: <?=$event->getColor()?>"><?=$event->getName()?></section>
<?php } ?> <?php } ?>
</div></a> </div></a>
<?php } else { ?> <?php } else { ?>
<span class="noselect day"><?php echo $day; ?>.</span> <span class="noselect day"><?= $day ?>.</span>
<?php } ?> <?php } ?>
<?php } ?> <?php } ?>
</ul> </ul>
</figure> </figure>
</main> </main>

@ -1,5 +1,5 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -43,11 +43,11 @@ require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'in
<p>Vi har en <a href="http://list.pvv.org/mailman/listinfo/aktive">e-postliste for aktive medlemmer</a>. All offisiell informasjon blir sendt denne listen, og alle arrengementer blir også annonsert her.</p> <p>Vi har en <a href="http://list.pvv.org/mailman/listinfo/aktive">e-postliste for aktive medlemmer</a>. All offisiell informasjon blir sendt denne listen, og alle arrengementer blir også annonsert her.</p>
<p>Vi har et <a target="_blank" href="https://matrix.to/#/#pvv:pvv.ntnu.no">Matrix Space™</a> for chat, memes, og all annen kommunikasjon. Den er bridget med IRC-kanalen og Discord-serveren vår. Hvis du er medlem kan du bruke vår egen instans av <a href="https://chat.pvv.ntnu.no">Element web</a>.</p> <p>Vi har en <a target="_blank" href="https://matrix.to/#/#pvv:pvv.ntnu.no">Matrix-server</a> for chat, memes, og all annen kommunikasjon. Den er bridget med IRC-kanalen og Discord-guilden vår. Hvis du er medlem kan du bruke vår <a href="https://chat.pvv.ntnu.no">self-hosted web client</a>.</p>
<p>Vi har en IRC-kanal <a href="http://webchat.ircnet.net/">IRCnet</a> kalt #pvv.</p> <p>Vi har en IRC-kanal <a href="http://webchat.ircnet.net/">IRCnet</a> kalt #pvv.</p>
<p>Vi har en <a target="_blank" href="https://discord.gg/8VTBr6Q">Discord-server</a> for de som foretrekker Discord over Matrix. </p> <p>Vi har en <a target="_blank" href="https://discord.gg/8VTBr6Q">Discord-guild</a> for de som foretrekker Discord over Matrix. </p>
</main> </main>
</body> </body>

@ -1,7 +1,6 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
use pvv\side\Agenda; use \pvv\side\Agenda;
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -35,40 +34,40 @@ use pvv\side\Agenda;
<main> <main>
<div id="outDatedBanner"><p><br>Denne siden er trolig utdatert! Hvis du er interessert, ta kontakt i discord-kanalen. <br> This page is probably outdated! If you're interested, check in with someone in our discord-channel. </p></div> <div id="outDatedBanner"><p><br>Denne siden er trolig utdatert! Hvis du er interessert, ta kontakt i discord-kanalen. <br> This page is probably outdated! If you're interested, check in with someone in our discord-channel. </p></div>
<?php <?php
$activity = new pvv\side\social\NerdepitsaActivity(); $activity = new \pvv\side\social\NerdepitsaActivity;
$nextEvent = $activity->getNextEventFrom(new DateTimeImmutable()); $nextEvent = $activity->getNextEventFrom(new DateTimeImmutable);
?> ?>
<article> <article>
<h2><em><?php echo $nextEvent->getRelativeDate(); ?></em> Nerdepitsa <h2><em><?= $nextEvent->getRelativeDate()?></em> Nerdepitsa
<?php if ($nextEvent->getImageURL()) { ?> <?php if ($nextEvent->getImageURL()) { ?>
<img src="<?php echo $nextEvent->getImageURL(); ?>"> <img src="<?= $nextEvent->getImageURL() ?>">
<?php } ?> <?php } ?>
</h2> </h2>
<ul class="subtext"> <ul class="subtext">
<li>Tid: <li>Tid:
<strong> <strong>
<?php echo Agenda::getFormattedDate($nextEvent->getStart()); ?> <?= Agenda::getFormattedDate($nextEvent->getStart());?>
</strong> </strong>
<li>Sted: <li>Sted:
<strong> <strong>
<?php echo $nextEvent->getLocation(); ?> <?= $nextEvent->getLocation();?>
</strong> </strong>
<li>Arrangør: <li>Arrangør:
<strong> <strong>
<?php echo $nextEvent->getOrganiser(); ?> <?= $nextEvent->getOrganiser();?>
</strong> </strong>
</ul> </ul>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new Parsedown();
echo $Parsedown->text(implode("\n", $nextEvent->getDescription())); echo $Parsedown->text(implode("\n", $nextEvent->getDescription()));
?> ?>
</article> </article>
</main> </main>
<nav> <nav>
<?php echo navbar(1, 'aktiviteter'); ?> <?= navbar(1, 'aktiviteter'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>

@ -1,5 +1,5 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -34,7 +34,7 @@ p {hyphens: auto;}
width: 100%; width: 100%;
padding-top: 56.25%; /* 16:9 Aspect Ratio (divide 9 by 16 = 0.5625) */ padding-top: 56.25%; /* 16:9 Aspect Ratio (divide 9 by 16 = 0.5625) */
} }
/* Then style the iframe to fit in the container div with full height and width */ /* Then style the iframe to fit in the container div with full height and width */
.responsive-iframe { .responsive-iframe {
position: absolute; position: absolute;
@ -45,10 +45,10 @@ p {hyphens: auto;}
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
</style> </style>
<div class="iframe-container" style="max-width: 100em;"> <div class="iframe-container" style="max-width: 100em;">
<iframe class="responsive-iframe" src="https://www.youtube.com/embed/Uy6HAvMdeuA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen ></iframe> <iframe class="responsive-iframe" src="https://www.youtube.com/embed/Uy6HAvMdeuA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen ></iframe>
</div> </div>
</article> </article>
<article> <article>
@ -89,6 +89,6 @@ p {hyphens: auto;}
</main> </main>
<nav> <nav>
<?php echo navbar(1); ?> <?= navbar(1); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>

@ -1,5 +1,5 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
session_start(); session_start();
@ -28,7 +28,7 @@ $attrs = $as->getAttributes();
<main> <main>
<h2>Å bli medlem PVV</h2> <h2>Å bli medlem PVV</h2>
<p> <p>
Første steg for å bli medlem i PVV er å betale Første steg for å bli medlem i PVV er å betale
<a href="https://wiki.pvv.ntnu.no/wiki/Medlemskontingent">medlemskontingent</a> 50kr per år. <a href="https://wiki.pvv.ntnu.no/wiki/Medlemskontingent">medlemskontingent</a> 50kr per år.
@ -44,9 +44,9 @@ $attrs = $as->getAttributes();
<p> <p>
Mer informasjon om medlemskap finner du <a href="https://wiki.pvv.ntnu.no/wiki/Medlem">her</a>. Mer informasjon om medlemskap finner du <a href="https://wiki.pvv.ntnu.no/wiki/Medlem">her</a>.
</p> </p>
<h2>Registrer deg som bruker</h2> <h2>Registrer deg som bruker</h2>
<p> <p>
PVV har for øyeblikket et manuelt system for å legge til nye brukere. PVV har for øyeblikket et manuelt system for å legge til nye brukere.
Se lenkene over for mer informasjon. Se lenkene over for mer informasjon.
@ -56,10 +56,10 @@ $attrs = $as->getAttributes();
lokalene våre slik at vi kan satt ditt passord. lokalene våre slik at vi kan satt ditt passord.
</p> </p>
<iframe id="mazeMapper" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://use.mazemap.com/embed.html#v=1&zlevel=2&center=10.406194,63.417143&zoom=18&campusid=1&sharepoitype=poi&sharepoi=38159&utm_medium=iframe" style="border: 1px solid grey" allow="geolocation"></iframe><br/> <iframe id="mazeMapper" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://use.mazemap.com/embed.html#v=1&zlevel=2&center=10.406194,63.417143&zoom=18&campusid=1&sharepoitype=poi&sharepoi=38159&utm_medium=iframe" style="border: 1px solid grey" allow="geolocation"></iframe><br/>
<?php if ($attrs) { // logged in with pvv account?> <?php if($attrs) { //logged in with pvv account?>
<p> <p>
Du er logget in som <i><?php echo htmlspecialchars($attrs['uid'][0]); ?></i>, Du er logget in som <i><?= htmlspecialchars($attrs['uid'][0]) ?></i>,
og trenger klart ikke sende melding om å ny PVV bruker. og trenger klart ikke sende melding om å ny PVV bruker.
</p> </p>
<?php } ?> <?php } ?>

@ -1,50 +1,50 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../inc/navbar.php'; require __DIR__ . '/../../inc/navbar.php';
require __DIR__ . '/../../src/_autoload.php'; require __DIR__ . '/../../src/_autoload.php';
require __DIR__ . '/../../config.php'; require __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php';
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$new = 0; $new = 0;
if (isset($_GET['new'])) { if(isset($_GET['new'])){
$new = $_GET['new']; $new = $_GET['new'];
} }
$projectID = 0; $projectID = 0;
if (isset($_GET['id'])) { if(isset($_GET['id'])){
$projectID = $_GET['id']; $projectID = $_GET['id'];
} elseif ($new == 0) { }else if($new == 0){
echo "\nID not set"; echo "\nID not set";
exit; exit();
} }
$project = new pvv\side\Project( $project = new \pvv\side\Project(
0, 0,
'Nytt Prosjekt', 'Nytt Prosjekt',
'', '',
$attrs['cn'][0], $attrs["cn"][0],
$attrs['uid'][0], $attrs["uid"][0],
$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); $owner = $projectManager->getProjectOwner($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>
@ -74,20 +74,20 @@ 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="<?= $project->getName() ?>" class="boxinput"><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 class="subnote no-chin">Hva går prosjektet ditt ut ?</p>
<p class="subnote">De første to linjene blir vist prosjektkortet, prøv å gjøre de til et fint sammendrag eller intro!</p> <p class="subnote">De første to linjene blir vist 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"><?= implode($project->getDescription(), "\n"); ?></textarea>
<?php echo '<input type="hidden" name="id" value="' . $project->getID() . '" />'; ?> <?= '<input type="hidden" name="id" value="' . $project->getID() . '" />' ?>
<input type="hidden" name="active" value="1"/> <input type="hidden" name="active" value="1"/>
<div style="margin-top: 0.2em;"> <div style="margin-top: 0.2em;">
<hr class="ruler"> <hr class="ruler">
<input type="submit" class="btn" value="<?php echo $new ? 'Opprett prosjekt' : 'Lagre endringer'; ?>"></input> <input type="submit" class="btn" value="<?= ($new ? 'Opprett prosjekt' : 'Lagre endringer') ?>"></input>
<?php if (!$new) {?><input type="submit" class="btn" name="delete" value="Slett"></input><?php } ?> <?php if (!$new){?><input type="submit" class="btn" name="delete" value="Slett"></input><?php } ?>
</div> </div>
</form> </form>
</main> </main>

@ -1,8 +1,8 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$translation = ['i dag', 'i morgen', 'denne uka', 'neste uke', 'denne måneden', 'neste måned']; $translation = ['i dag', 'i morgen', 'denne uka', 'neste uke', 'denne måneden', 'neste måned'];
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$projects = $projectManager->getAll(); $projects = $projectManager->getAll();
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -43,7 +43,7 @@ $projects = $projectManager->getAll();
<p> <p>
Styret har ansvaret for den daglige driften av PVV, og har myndighet som gitt i PVVs lover. Styret har ansvaret for den daglige driften av PVV, og har myndighet som gitt i PVVs lover.
Lederen for PVV velges om høsten og sitter i et år. Resten av styret velges for et halvår om Lederen for PVV velges om høsten og sitter i et år. Resten av styret velges for et halvår om
gangen, selv om praksis er at bare mindre justeringer gjøres i vårsemesteret. gangen, selv om praksis er at bare mindre justeringer gjøres i vårsemesteret.
</p> </p>
<p class="project-organizer">Organisert av Styreleder</p> <p class="project-organizer">Organisert av Styreleder</p>
</div> </div>
@ -52,7 +52,7 @@ $projects = $projectManager->getAll();
<div class="card-content"> <div class="card-content">
<h4 class="project-title">Drift</h4> <h4 class="project-title">Drift</h4>
<p> <p>
Drift har ansvaret for å drive maskinene PVV. Drift har ansvaret for å drive maskinene PVV.
Driftsgruppen har ingen strenge krav til aktivitet eller erfaring for å bli medlem, Driftsgruppen har ingen strenge krav til aktivitet eller erfaring for å bli medlem,
selv om du er ny i virket går det fint an å bare observere og absorbere i begynnelsen. selv om du er ny i virket går det fint an å bare observere og absorbere i begynnelsen.
Vi vil gjøre vårt beste for å gi god hjelp og service til våre brukere. Vi vil gjøre vårt beste for å gi god hjelp og service til våre brukere.
@ -60,13 +60,13 @@ $projects = $projectManager->getAll();
<p class="project-organizer">Organisert av Driftskordinator</p> <p class="project-organizer">Organisert av Driftskordinator</p>
</div> </div>
</div></a> </div></a>
<?php /* Her kan vi legge til PR og TriKom hvis det er ønskelig */ ?> <?php /*Her kan vi legge til PR og TriKom hvis det er ønskelig*/ ?>
</div> </div>
<h2>Medlems-prosjekter</h2> <h2>Medlems-prosjekter</h2>
<?php <?php
if (count($projects) == 0) { 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> <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> <br>
<center> <center>
@ -75,8 +75,8 @@ $projects = $projectManager->getAll();
</center> </center>
<br> <br>
<?php <?php
} else { }else{
?> ?>
<p> <p>
Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har holder med. Mangler det noe, eller brenner du for noe annet?<br> Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har holder med. Mangler det noe, eller brenner du for noe annet?<br>
Sett opp et eget prosjekt da vel! Sett opp et eget prosjekt da vel!
@ -84,24 +84,24 @@ $projects = $projectManager->getAll();
<div class="projects-container"> <div class="projects-container">
<?php <?php
$randProjects = array_rand($projects, min(6, count($projects))); $randProjects = array_rand($projects, min(6, count($projects)));
if (!is_array($randProjects)) { if (!is_array($randProjects)) {
$randProjects = [$randProjects]; $randProjects = [$randProjects];
} };
foreach ($randProjects as $i) { foreach($randProjects as $i) {
$project = $projects[$i]; $project = $projects[$i];
$owner = $projectManager->getProjectOwner($project->getID()); $owner = $projectManager->getProjectOwner($project->getID());
?> ?>
<a class="nostyle" href="info.php?id=<?php echo $project->getID(); ?>"><div class="project-card"> <a class="nostyle" href="info.php?id=<?= $project->getID() ?>"><div class="project-card">
<div class="card-content"> <div class="card-content">
<h4 class="project-title"><?php echo $project->getName(); ?></h4> <h4 class="project-title"><?= $project->getName(); ?></h4>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", array_slice($project->getDescription(), 0, 2))); echo $Parsedown->text(implode("\n", array_slice($project->getDescription(), 0, 2)));
?> ?>
</div> </div>
<p class="project-organizer">Organisert av <?php echo $owner['name']; ?></p> <p class="project-organizer">Organisert av <?= $owner['name']; ?></p>
</div></a> </div></a>
<?php } ?> <?php } ?>
</div> </div>
@ -110,7 +110,7 @@ $projects = $projectManager->getAll();
<a class="btn" href="mine.php">Mine prosjekter</a> <a class="btn" href="mine.php">Mine prosjekter</a>
</center> </center>
<?php <?php
} }
?> ?>
</main> </main>
</body> </body>

@ -1,46 +1,47 @@
<?php <?php
require_once dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
$projectID = 0; $projectID = 0;
if (isset($_GET['id'])) { if(isset($_GET['id'])){
$projectID = $_GET['id']; $projectID = $_GET['id'];
} else { }else{
echo 'No project ID provided'; echo 'No project ID provided';
exit; exit();
} }
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$project = $projectManager->getByID($projectID); $project = $projectManager->getByID($projectID);
if (!$project) { if (!$project) {
echo ':^)'; echo ":^)";
exit; exit();
} }
$members = $projectManager->getProjectMembers($projectID); $members = $projectManager->getProjectMembers($projectID);
$normal_members = $members; $normal_members = $members;
foreach ($normal_members as $i => $data) { foreach($normal_members as $i => $data){
if ($data['lead']) { if($data['lead']){
unset($normal_members[$i]); unset($normal_members[$i]);
} }
} }
$is_owner = false; $is_owner = False;
$is_member = false; $is_member = False;
if ($attrs) { if ($attrs){
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
foreach ($members as $member) { foreach($members as $member){
if ($member['uname'] == $uname) { if ($member['uname'] == $uname){
if ($member['owner'] == 1) { if ($member['owner']==1){
$is_owner = true; $is_owner = True;
} elseif ($member['owner'] == 0) { }
$is_member = true; else if ($member['owner']==0){
} $is_member = True;
} }
} }
}
} }
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -65,11 +66,11 @@ if ($attrs) {
<main class="contentsplit"> <main class="contentsplit">
<div class="gridr"> <div class="gridr">
<h2><?php echo $project->getName(); ?></h2> <h2><?= $project->getName(); ?></h2>
<?php <?php
$Parsedown = new Parsedown(); $Parsedown = new \Parsedown();
echo $Parsedown->text(implode("\n", $project->getDescription())); echo $Parsedown->text(implode("\n", $project->getDescription()));
?> ?>
</div> </div>
<div class="gridl"> <div class="gridl">
@ -78,49 +79,49 @@ if ($attrs) {
<div class="projectlead"> <div class="projectlead">
<h2>Prosjektledelsen</h2> <h2>Prosjektledelsen</h2>
<div class="projectmember"> <div class="projectmember">
<?php foreach ($members as $i => $data) { <?php foreach($members as $i => $data){
if ($data['lead']) { if($data['lead']){
?> ?>
<p><?php echo $data['name']; ?></p> <p><?= $data['name']; ?></p>
<p class="memberrole"><?php echo $data['role']; ?></p> <p class="memberrole"><?= $data['role'] ?></p>
<p class="memberuname"><?php echo $data['uname']; ?></p> <p class="memberuname"><?= $data['uname']; ?></p>
<p class="memberemail"><?php echo $data['mail']; ?></p> <p class="memberemail"><?= $data['mail']; ?></p>
<?php } <?php }
} ?> } ?>
</div> </div>
</div> </div>
<?php <?php
if (count($normal_members) > 0) { if(sizeof($normal_members) > 0){
?> ?>
<div class="projectmembers"> <div class="projectmembers">
<h2>Medlemmer</h2> <h2>Medlemmer</h2>
<?php foreach ($normal_members as $i => $data) { <?php foreach($normal_members as $i => $data){
?> ?>
<div class="projectmember" style="border-color: #6a0;"> <div class="projectmember" style="border-color: #6a0;">
<p><?php echo $data['name']; ?></p> <p><?= $data['name']; ?></p>
<p class="memberrole"><?php echo $data['role'] ?: 'Deltaker'; ?></p> <p class="memberrole"><?= $data['role'] ? $data['role'] : 'Deltaker' ?></p>
<p class="memberuname"><?php echo $data['uname']; ?></p> <p class="memberuname"><?= $data['uname']; ?></p>
<p class="memberemail"><?php echo $data['mail']; ?></p> <p class="memberemail"><?= $data['mail']; ?></p>
</div> </div>
<?php } ?> <?php } ?>
</div> </div>
<?php <?php
} }
if (!$is_owner) { if(!$is_owner){
?> ?>
<form action="update.php", method="post"><p> <form action="update.php", method="post"><p>
<input type="hidden" name="title" value="derp"/> <input type="hidden" name="title" value="derp"/>
<input type="hidden" name="desc" value="derp"/> <input type="hidden" name="desc" value="derp"/>
<input type="hidden" name="active" value="derp"/> <input type="hidden" name="active" value="derp"/>
<input type="hidden" name="id" value="<?php echo $projectID; ?>"/> <input type="hidden" name="id" value="<?= $projectID ?>"/>
<input type="submit" class="btn" name="join_or_leave" value="<?php echo $is_member ? 'Forlat' : 'Bli med!'; ?>"></input> <input type="submit" class="btn" name="join_or_leave" value="<?= ($is_member ? 'Forlat' : 'Bli med!') ?>"></input>
</p></form> </p></form>
<?php <?php
} }
?> ?>
</div> </div>
</div> </div>
</main> </main>

@ -1,34 +1,36 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../inc/navbar.php'; require __DIR__ . '/../../inc/navbar.php';
require __DIR__ . '/../../src/_autoload.php'; require __DIR__ . '/../../src/_autoload.php';
require __DIR__ . '/../../config.php'; require __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$projectManager = new pvv\side\ProjectManager($pdo); $projectManager = new \pvv\side\ProjectManager($pdo);
$projects = $projectManager->getByOwner($attrs['uid'][0]); $projects = $projectManager->getByOwner($attrs['uid'][0]);
$page = 1; $page = 1;
if (isset($_GET['page'])) { if(isset($_GET['page'])){
$page = $_GET['page']; $page = $_GET['page'];
} }
$filter = ''; $filter = '';
if (isset($_GET['filter'])) { if(isset($_GET['filter'])){
$filter = $_GET['filter']; $filter = $_GET['filter'];
} }
// filter // filter
$projects = array_values(array_filter( $projects = array_values(array_filter(
$projects, $projects,
static fn($project) => (preg_match('/.*' . $filter . '.*/i', $project->getName()) || preg_match('/.*' . $filter . '.*/i', implode(' ', $project->getDescription()))) function($project) use ($filter){
return (preg_match('/.*'.$filter.'.*/i', $project->getName()) or preg_match('/.*'.$filter.'.*/i', implode(" ", $project->getDescription())));
}
)); ));
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -48,8 +50,8 @@ $projects = array_values(array_filter(
<body> <body>
<nav> <nav>
<?php echo navbar(1, 'prosjekt'); ?> <?= navbar(1, 'prosjekt'); ?>
<?php echo loginbar(); ?> <?= loginbar(); ?>
</nav> </nav>
<main class="gridsplit"> <main class="gridsplit">
@ -58,49 +60,49 @@ $projects = array_values(array_filter(
<ul class="event-list"> <ul class="event-list">
<?php <?php
$counter = 0; $counter = 0;
$pageLimit = 8; $pageLimit = 8;
for ($i = ($pageLimit * ($page - 1)); $i < count($projects); ++$i) { for($i = ($pageLimit * ($page - 1)); $i < count($projects); $i++){
if ($counter == $pageLimit) { if($counter == $pageLimit){
break; break;
} }
$project = $projects[$i]; $project = $projects[$i];
$projectID = $project->getID(); $projectID = $project->getID();
$owner = $projectManager->getProjectOwner($projectID); $owner = $projectManager->getProjectOwner($projectID);
if ($owner['uname'] != $attrs['uid'][0]) { if($owner['uname'] != $attrs['uid'][0]){
continue; continue;
} }
?> ?>
<li> <li>
<div class="event"> <div class="event">
<div class="event-info"> <div class="event-info">
<a href="edit.php?id=<?php echo $project->getID(); ?>"> <a href="edit.php?id=<?= $project->getID() ?>">
<h3 class="no-chin"><?php echo $project->getName(); ?></h3> <h3 class="no-chin"><?= $project->getName()?></h3>
</a> </a>
<p style="text-decoration: none;"><?php echo implode('<br>', array_slice($project->getDescription(), 0, 4)); ?></p> <p style="text-decoration: none;"><?= implode("<br>", array_slice($project->getDescription(), 0, 4)); ?></p>
</div> </div>
</div> </div>
</li> </li>
<?php <?php
++$counter; $counter++;
} }
?> ?>
</ul> </ul>
<?php <?php
if ($page != 1) { if($page != 1){
echo '<a class="btn float-left" href="?page=' . ($page - 1) . '&filter=' . urlencode($filter) . '">Forrige side</a>'; echo '<a class="btn float-left" href="?page=' . ($page - 1) . '&filter=' . urlencode($filter) . '">Forrige side</a>';
} }
if (($counter == $pageLimit) && (($pageLimit * $page) < count($projects))) { if(($counter == $pageLimit) and (($pageLimit * $page) < count($projects))){
echo '<a class="btn float-right" href="?page=' . ($page + 1) . '&filter=' . urlencode($filter) . '">Neste side</a>'; echo '<a class="btn float-right" href="?page=' . ($page + 1) . '&filter=' . urlencode($filter) . '">Neste side</a>';
} }
?> ?>
</div> </div>
<div class="gridr"> <div class="gridr">
@ -109,7 +111,7 @@ $projects = array_values(array_filter(
<h2>Filter</h2> <h2>Filter</h2>
<form action="mine.php" method="get"> <form action="mine.php" method="get">
<p class="no-chin">Navn</p> <p class="no-chin">Navn</p>
<?php echo '<input type="text" name="filter" class="boxinput" value="' . $filter . '">'; ?><br> <?= '<input type="text" name="filter" class="boxinput" value="' . $filter . '">' ?><br>
<div style="margin-top: 2em;"> <div style="margin-top: 2em;">
<input type="submit" class="btn" value="Filtrer"></input> <input type="submit" class="btn" value="Filtrer"></input>

@ -1,18 +1,18 @@
<?php <?php
date_default_timezone_set('Europe/Oslo'); date_default_timezone_set('Europe/Oslo');
setlocale(\LC_ALL, 'nb_NO'); setlocale(LC_ALL, 'nb_NO');
require __DIR__ . '/../../src/_autoload.php'; require __DIR__ . '/../../src/_autoload.php';
require __DIR__ . '/../../config.php'; require __DIR__ . '/../../config.php';
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (!isset($_POST['title']) || !isset($_POST['desc']) || !isset($_POST['active'])) { if(!isset($_POST['title']) or !isset($_POST['desc']) or !isset($_POST['active'])){
header('Location: ' . $_SERVER['HTTP_REFERER']); header('Location: ' . $_SERVER['HTTP_REFERER']);
exit; exit();
} }
require_once __DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'; require_once(__DIR__ . '/../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML\Auth\Simple('default-sp'); $as = new \SimpleSAML\Auth\Simple('default-sp');
$as->requireAuth(); $as->requireAuth();
$attrs = $as->getAttributes(); $attrs = $as->getAttributes();
@ -28,93 +28,95 @@ $name = $attrs['cn'][0];
$uname = $attrs['uid'][0]; $uname = $attrs['uid'][0];
$mail = $attrs['mail'][0]; $mail = $attrs['mail'][0];
$statement;
if($id == 0){
$query = 'INSERT INTO projects (name, description, active) VALUES (:title, :desc, 1)';
$statement = $pdo->prepare($query);
if ($id == 0) { $statement->bindParam(':title', $title, PDO::PARAM_STR);
$query = 'INSERT INTO projects (name, description, active) VALUES (:title, :desc, 1)'; $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
$statement = $pdo->prepare($query);
$statement->bindParam(':title', $title, PDO::PARAM_STR); $statement->execute();
$statement->bindParam(':desc', $desc, PDO::PARAM_STR); $new_id = $pdo->lastInsertId();
$statement->execute(); $ownerQuery = "INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (:id, :owner, :owneruname, :owneremail, 'Prosjektleder', 1, 1)";
$new_id = $pdo->lastInsertId(); $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);
$ownerQuery = "INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (:id, :owner, :owneruname, :owneremail, 'Prosjektleder', 1, 1)"; $statement->execute();
$statement = $pdo->prepare($ownerQuery); }
$statement->bindParam(':id', $new_id, PDO::PARAM_STR); else {
$statement->bindParam(':owner', $name, PDO::PARAM_STR); $projectManager = new \pvv\side\ProjectManager($pdo);
$statement->bindParam(':owneruname', $uname, PDO::PARAM_STR); $owner = $projectManager->getProjectOwner($id);
$statement->bindParam(':owneremail', $mail, PDO::PARAM_STR); $members = $projectManager->getProjectMembers($id);
$statement->execute(); //if ($do_join_or_leave and $owner['uname'] != $uname) {
} else { if ($do_join_or_leave) {
$projectManager = new pvv\side\ProjectManager($pdo); $is_member = False;
$owner = $projectManager->getProjectOwner($id); foreach($members as $member){
$members = $projectManager->getProjectMembers($id); if ($member['uname'] == $uname and $member['owner']==0){
$is_member = True;
break;
}
}
if ($is_member){//leave
$query = "DELETE FROM projectmembers WHERE projectid=:id AND uname=:uname and lead=0 and owner=0;";
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_STR);
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
// if ($do_join_or_leave and $owner['uname'] != $uname) { $statement->execute();
if ($do_join_or_leave) { print("leave");
$is_member = false; }
foreach ($members as $member) { else{//join
if ($member['uname'] == $uname && $member['owner'] == 0) { $query = "INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (:id, :name, :uname, :mail, 'Medlem', 0, 0)";
$is_member = true; $statement = $pdo->prepare($query);
break; $statement->bindParam(':id', $id, PDO::PARAM_STR);
} $statement->bindParam(':name', $name, PDO::PARAM_STR);
} $statement->bindParam(':uname', $uname, PDO::PARAM_STR);
if ($is_member) {// leave $statement->bindParam(':mail', $mail, PDO::PARAM_STR);
$query = 'DELETE FROM projectmembers WHERE projectid=:id AND uname=:uname and lead=0 and owner=0;';
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_STR);
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->execute(); $statement->execute();
echo 'leave'; print("join");
} else {// join }
$query = "INSERT INTO projectmembers (projectid, name, uname, mail, role, lead, owner) VALUES (:id, :name, :uname, :mail, 'Medlem', 0, 0)"; header('Location: ./info.php?id=' . $id);
$statement = $pdo->prepare($query); exit();
$statement->bindParam(':id', $id, PDO::PARAM_STR); }
$statement->bindParam(':name', $name, PDO::PARAM_STR);
$statement->bindParam(':uname', $uname, PDO::PARAM_STR);
$statement->bindParam(':mail', $mail, PDO::PARAM_STR);
$statement->execute(); if($uname != $owner['uname']){
echo 'join'; header('Content-Type: text/plain', true, 403);
} echo "Illegal action, you're not the project owner for project with ID " . $id . "\r\n";
header('Location: ./info.php?id=' . $id); exit();
exit; }
}
if ($do_delete) {
// this should be done as a transaction...
$pdo->beginTransaction();
$query = 'DELETE FROM projects WHERE id=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$query = 'DELETE FROM projectmembers WHERE projectid=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$pdo->commit();
}else{
$query = 'UPDATE projects SET name=:title, description=:desc WHERE id=:id';
$statement = $pdo->prepare($query);
if ($uname != $owner['uname']) { $statement->bindParam(':title', $title, PDO::PARAM_STR);
header('Content-Type: text/plain', true, 403); $statement->bindParam(':desc', $desc, PDO::PARAM_STR);
echo "Illegal action, you're not the project owner for project with ID " . $id . "\r\n"; $statement->bindParam(':id', $id, PDO::PARAM_INT);
exit;
} $statement->execute();
}
if ($do_delete) {
// this should be done as a transaction...
$pdo->beginTransaction();
$query = 'DELETE FROM projects WHERE id=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$query = 'DELETE FROM projectmembers WHERE projectid=:id';
$statement = $pdo->prepare($query);
$statement->bindParam(':id', $id, PDO::PARAM_INT);
$statement->execute();
$pdo->commit();
} else {
$query = 'UPDATE projects SET name=:title, 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(':id', $id, PDO::PARAM_INT);
$statement->execute();
}
} }
header('Location: ./mine.php'); header('Location: ./mine.php');

@ -1,15 +1,12 @@
<?php <?php
require_once dirname(__DIR__) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']); require_once dirname(__DIR__) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
header('Content-Type: application/json'); $pdo = new \PDO($DB_DSN, $DB_USER, $DB_PASS);
header('Access-Control-Allow-Origin: *');
$pdo = new PDO($DB_DSN, $DB_USER, $DB_PASS);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$door = new pvv\side\Door($pdo); $door = new \pvv\side\Door($pdo);
$doorEntry = (object) $door->getCurrent(); $doorEntry = (object)($door->getCurrent());
?> ?>
{ {
@ -23,8 +20,8 @@ $doorEntry = (object) $door->getCurrent();
"ext_mazemap": "https://link.mazemap.com/2n2HWa7H", "ext_mazemap": "https://link.mazemap.com/2n2HWa7H",
"address": "Sem Sælands vei 1, 7034 Trondheim, Norway", "address": "Sem Sælands vei 1, 7034 Trondheim, Norway",
"timezone": "Europe/Oslo", "timezone": "Europe/Oslo",
"lon": 10.4063852, "lon": 10.242,
"lat": 63.4170226 "lat": 63.250
}, },
"contact": { "contact": {
"irc": "irc://irc.pvv.ntnu.no/pvv", "irc": "irc://irc.pvv.ntnu.no/pvv",
@ -35,14 +32,14 @@ $doorEntry = (object) $door->getCurrent();
}, },
"issue_report_channels": ["email"], "issue_report_channels": ["email"],
"state": { "state": {
"open": <?php echo $doorEntry->open ? 'true' : 'false'; ?>, "open": <?php echo($doorEntry->open ? "true" : "false"); ?>,
"lastchange": <?php echo $doorEntry->time ? $doorEntry->time : 0; ?>, "lastchange": <?php echo($doorEntry->time ? $doorEntry->time : 0); ?>,
"message": "<?php echo $doorEntry->open ? 'open for public, members are present' : 'closed'; ?>" "message": "<?php echo($doorEntry->open ? "open for public, members are present" : "closed"); ?>"
}, },
"feeds": { "feeds": {
"wiki": { "wiki": {
"type": "atom", "type": "atom",
"url": "https://wiki.pvv.ntnu.no/w/api.php?hidebots=1&urlversion=1&action=feedrecentchanges&feedformat=atom" "url": "https://www.pvv.ntnu.no/w/api.php?hidebots=1&urlversion=1&action=feedrecentchanges&feedformat=atom"
}, },
"calendar": { "calendar": {
"type": "html", "type": "html",

@ -1,8 +1,5 @@
<?php <?php namespace pvv\side;
require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
namespace pvv\side;
require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'include.php']);
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="no"> <html lang="no">
@ -19,8 +16,8 @@ require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'i
<body> <body>
<nav> <nav>
<?php echo navbar(1, 'tjenester'); ?> <?= navbar(1, 'tjenester'); ?>
<?php echo loginbar($sp, $pdo); ?> <?= loginbar($sp, $pdo); ?>
</nav> </nav>
<main> <main>
@ -113,7 +110,7 @@ require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'i
<div class="serviceContent"> <div class="serviceContent">
<h2 class="serviceTitle">Brukernettsider</h2> <h2 class="serviceTitle">Brukernettsider</h2>
<p class="serviceDescription">Alle brukere får automatisk en egen side for html og php. Denne er offentlig pvv.ntnu.no/~brukernavn.</p> <p class="serviceDescription">Alle brukere får automatisk en egen side for html og php. Denne er offentlig pvv.ntnu.no/~brukernavn.</p>
<div class="serviceLink"><a href="https://wiki.pvv.ntnu.no/wiki/Tjenester/Hjemmesider" target="_blank"> til dokumentasjon wiki</a></div> <div class="serviceLink"><a href="https://wiki.pvv.ntnu.no/wiki/Hjemmesider" target="_blank"> til dokumentasjon wiki</a></div>
</div> </div>
<img class="serviceImage" src="img/php.png" alt="En elephpant"> <img class="serviceImage" src="img/php.png" alt="En elephpant">
</div> </div>
@ -122,7 +119,7 @@ require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'i
<div class="serviceContent"> <div class="serviceContent">
<h2 class="serviceTitle">PVV-siden</h2> <h2 class="serviceTitle">PVV-siden</h2>
<p class="serviceDescription">Du befinner deg PVV sin offisielle hjemmeside. Den er skrevet i PHP og kjører en egen server.</p> <p class="serviceDescription">Du befinner deg PVV sin offisielle hjemmeside. Den er skrevet i PHP og kjører en egen server.</p>
<div class="serviceLink"><a href="https://git.pvv.ntnu.no/Projects/nettsiden" target="_blank">Se koden gitea</a></div> <div class="serviceLink"><a href="https://github.com/Programvareverkstedet/nettsiden" target="_blank">Se koden github</a></div>
</div> </div>
<img class="serviceImage" src="../pvv-logo.png" alt="PVV-logo"> <img class="serviceImage" src="../pvv-logo.png" alt="PVV-logo">
</div> </div>
@ -192,7 +189,7 @@ require_once \dirname(__DIR__, 2) . implode(\DIRECTORY_SEPARATOR, ['', 'inc', 'i
<img class="serviceImage" src="img/gallery.png" alt="RSS-Ikon"> <img class="serviceImage" src="img/gallery.png" alt="RSS-Ikon">
</div> </div>
<!-- Bokhylle /brzeczyszczykiewicz ? --> <!-- Bokhylle /brzeczyszczykiewicz ? -->
</div> </div>
</div> </div>