From c6cd02486d69c7e6bd17f97a596ef7ed5935b7eb Mon Sep 17 00:00:00 2001 From: halworsen Date: Mon, 13 Nov 2017 13:21:51 +0100 Subject: [PATCH 01/25] Redesign navbar and landing page --- inc/navbar.php | 16 ++- www/css/landing.css | 49 ++++++++ www/css/style.css | 287 +++++++++++++++----------------------------- www/index.php | 153 +++++++++++------------ 4 files changed, 229 insertions(+), 276 deletions(-) create mode 100644 www/css/landing.css diff --git a/inc/navbar.php b/inc/navbar.php index 1f61c74..b10f523 100644 --- a/inc/navbar.php +++ b/inc/navbar.php @@ -1,22 +1,20 @@ \n"; + $result = "\n"; + return $result . "\t\t\n"; } function loginBar($sp = 'default-sp') { @@ -27,9 +25,9 @@ function loginBar($sp = 'default-sp') { $attr = $as->getAttributes(); if($attr) { $uname = $attr['uid'][0]; - $result .= "\t

logget inn som: " . htmlspecialchars($uname) . "

\n"; + $result .= "\t\t

logget inn som: " . htmlspecialchars($uname) . "

\n"; } else { - $result .= "\tgetLoginURL()) . "\">logg inn\n"; + $result .= "\t\tgetLoginURL()) . "\">logg inn\n"; } return $result; diff --git a/www/css/landing.css b/www/css/landing.css new file mode 100644 index 0000000..e9da5bc --- /dev/null +++ b/www/css/landing.css @@ -0,0 +1,49 @@ +header { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + + margin-top: 50px; + padding: 2em 0; + width: 100vw; + height: 40vh; + background-color: #002244; + color: #fff; +} + +header img { + width: 30vh; + height: 30vh; +} + +main { + margin-top: 0; +} + +.intro { + text-align: center; +} + +.essentials { + margin: 1.8em 0; + padding: .2em 0; + list-style: none; + display: flex; + justify-content: center; + align-items: center; +} + +.essentials li { + display: inline-block; +} + +.essentials a { + margin: 0 2em; + height: 100%; +} + +.essentials .join { + padding: 1em; + font-size: 1.2em; +} \ No newline at end of file diff --git a/www/css/style.css b/www/css/style.css index 7c5851a..696ff19 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -1,216 +1,119 @@ -nav ul { +body { + overflow-y: scroll; + overflow-x: hidden; +} + +* { + font-style: -apple-system, 'avenir next', avenir, roboto, noto, ubuntu, 'helvetica neue', helvetica, arial, sans-serif; +} + +nav { position: fixed; + z-index: 99; top: 0; - left: 0; - right: 0; - margin: .1em auto 0 auto; - text-align: center; - background: rgba(255,255,255,.8); - margin: 0; - z-index: 3; -} -nav li { - display: inline-block; - line-height: 3em; - margin: auto 1em; -} -nav a { - display: inline-block; - margin: auto; - color: gray; - text-decoration: none; -} -nav li.active a { - color: #048; -} -nav .login{ - position: fixed; - top: .8em; - right: .8em; - margin: auto; - z-index: 3; - color: gray; -} -header { - margin-top: 3rem; - height: 16rem; + width: 100vw; + height: 50px; + background-color: #002244; overflow: hidden; - text-align: right; - color: #fff; - font-family: monospace; - padding: 1rem; - font-size: 4em; - background: url('pvv-background.png') no-repeat 1% 50% #024; - background-size: contain; + + box-shadow: 0 0 5px #000; } -main { - max-width: 60rem; - margin: -7rem auto 0 auto; + +nav * { + background-color: #002244; + color: #fff; + margin: 0; padding: 0; } -article { - padding: .1rem 1rem 1rem 1rem; - margin: 0 1rem 0 1rem; - background: white; - z-index: 2; - position: relative; -} -article p { - text-align: justify; - hyphens: auto; -} -article:first-child { - border-radius: .5rem .5rem 0 0; -} -main:before { - content: " "; - display: block; - position: absolute; - top: 16rem; - left: 1rem; - right: 1rem; - margin: 0 auto; - height: 8em; - z-index: 1; - max-width: 58rem; - box-shadow: 0 -.2rem .15rem rgba(0,0,0,.3); - border-radius: 0 0 .3em .3em; - background: white; +nav h2 { + display: inline-block; + position: fixed; + top: 0; + margin-left: .65em; + + line-height: 5vh; + + color: #002244; } -.split { +nav img{ + width: 50px; + height: 50px; +} + +nav ul { display: table; - width: 100%; table-layout: fixed; - border-spacing: 1em; + position: fixed; + top: 0; + left: 15vw; + right: 15vw; + width: 70vw; + height: 50px; + + list-style: none; } -.split > * { + +nav a { display: table-cell; -} + height: 100%; + margin: 0; -.subtitle { - font-weight: bold; -} - -.ruler { - border: none; - border-bottom: 1px dotted rgba(0,0,0,.5); -} - -a.btn { text-decoration: none; - border: 1px solid #048; - color: #048; - padding: .2em 1em; - border-radius: .2em; - white-space: nowrap; - display: inline-block; - margin-bottom: .25em; -} -a.btn:hover { - border-color: #084; - background: #eee; - color: #084; -} -a.btn:active { - border-color: #084; - background: #084; - color: white; -} - -.boxinput { - text-decoration: none; - border: 1px solid #048; - color: #048; - padding: .2em .4em; - border-radius: .2em; - display: inline-block; - margin-bottom: .25em; - resize: none; -} - -.noborder { - border: none !important; -} - -.subnote { - margin-top: 0; - color: gray; - font-size: .7em; - font-style: italic; -} - -.no-chin { - margin-bottom: 0; -} - -.icon.subscribe { - color: white; - background: #082; - border-radius: 1em; - width: 1em; - line-height: 1em; + font-size: 1.2em; text-align: center; + line-height: 48px; + + border-bottom: 2px solid rgba(255, 255, 255, 0); + + transition: border-bottom .3s ease; } -@media screen and (max-width: 50rem) { - .split, .split > * { - display: block; - } - img.float-right { - display: none; - } - nav li { - margin: auto .5em; - } - header { - font-size: 2em; - } - main { - margin: -13rem auto 0 auto; - } - article { - margin: 0 .5rem 0 .5rem; - } - main:before { - left: .5rem; - right: .5rem; - } -} -@media screen and (max-width: 23rem) { - body { - font-size: 0.8em; - } - header { - margin-top: 2.4rem; - } - main:before { - top: 13rem; - height: 13em; - } +nav a:hover { + border-bottom: 2px solid rgba(255, 255, 255, 1); + + transition: border-bottom .3s ease; } +nav a.active { + border-bottom: 2px solid rgba(255, 255, 255, 1); - -.collapsable { - display: none; -} -.collapsable:target { - display: block; + transition: none; } -.noselect { - /* iOS Safari */ - -webkit-touch-callout: none; - /* Safari */ - -webkit-user-select: none; - /* Konqueror HTML */ - -khtml-user-select: none; - /* Firefox */ - -moz-user-select: none; - /* Internet Explorer/Edge */ - -ms-user-select: none; - /* Non-prefixed version, currently supported by Chrome and Opera */ - user-select: none; +nav .login { + position: fixed; + top: 0; + right: 0; + height: 48px; + padding: 0 1em; } + +main { + padding: 1em 15vw; + height: 100vh; + margin-top: 5vh; + + background-color: #fff; +} + +main h2 { + color: #002244; +} + +.btn { + padding: .5em; + border-radius: 4px; + text-decoration: none; + color: #fff; + background-color: #002244; + + transition: background-color .2s ease; +} + +.btn:hover { + background-color: #00407F; + + transition: background-color .2s ease; +} \ No newline at end of file diff --git a/www/index.php b/www/index.php index e0aa316..6fecf71 100644 --- a/www/index.php +++ b/www/index.php @@ -14,84 +14,87 @@ $agenda = new \pvv\side\Agenda([ new \pvv\side\DBActivity($pdo), ]); ?> + -Programvareverkstedet - - - - - + + Programvareverkstedet + + + + + + + -
Program­vare­verk­stedet
+ + -
+
+ +

Velkommen til Programvareverkstedet

+
-
- -

Velkommen til Program­vare­verk­stedet

-

Programvareverkstedet (PVV) vil skape et miljø for datainteresserte personer tilknyttet universitetet. Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer.

-

- Om PVV +

+
+

Velkommen til Program­vare­verk­stedet

+

Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet. Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer.

+ +
+ +

Kommende arrangement

+
    + + + getNextDays() as $period => $events) if ($events && $counter1 < 2 && $counter2 < 10) { $counter1++ ?> +
  • +

    +
      + +
    • + getName(); ?> + + */ ?> + ' . $event->getStart()->format('H:i') . ''; + if (\pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) { + echo '' . strftime('%a', $event->getStart()->getTimestamp()) . ''; + } else { + echo '' . strftime('%e. %b', $event->getStart()->getTimestamp()) . ''; + } + } else { + echo '' . $event->getStart()->format('H:i') . ''; + } + ?> +
    • + +
    +
  • + +
+

Flere aktiviteter

+ +

Opptak

+

+ Alle med tilknytning til NTNU kan bli medlem hos oss + og benytte seg av våre ressurser. + +

+

Bli medlem - Veibeskrivelse -

-
- -
-
-

Kommende arrangement

-
    - - -getNextDays() as $period => $events) if ($events && $counter1 < 2 && $counter2 < 10) { $counter1++ ?> -
  • -

    -
      - -
    • -getName(); ?> -+ */ ?> -' . $event->getStart()->format('H:i') . ''; - if (\pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) { - echo '' . strftime('%a', $event->getStart()->getTimestamp()) . ''; - } else { - echo '' . strftime('%e. %b', $event->getStart()->getTimestamp()) . ''; - } -} else { - echo '' . $event->getStart()->format('H:i') . ''; -} -?> -
    • - -
    - -
-

Flere aktiviteter

-
-
-

Opptak

-

-Alle med tilknytning til NTNU kan bli medlem hos oss -og benytte seg av våre ressurser. - -

-

-Bli medlem - -

-
-
- -
- - + +

+ + + \ No newline at end of file From ede224c2f210168aeb7367c68bedb88610696965 Mon Sep 17 00:00:00 2001 From: halworsen Date: Mon, 13 Nov 2017 14:18:08 +0100 Subject: [PATCH 02/25] Move general info to landing header --- www/css/landing.css | 9 ++++++--- www/index.php | 16 +++++++++------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/www/css/landing.css b/www/css/landing.css index e9da5bc..4c0041b 100644 --- a/www/css/landing.css +++ b/www/css/landing.css @@ -7,7 +7,7 @@ header { margin-top: 50px; padding: 2em 0; width: 100vw; - height: 40vh; + height: 50vh; background-color: #002244; color: #fff; } @@ -21,8 +21,11 @@ main { margin-top: 0; } -.intro { +.info { text-align: center; + padding: 1em 15vw; + height: 20vh; + margin-top: 0; } .essentials { @@ -46,4 +49,4 @@ main { .essentials .join { padding: 1em; font-size: 1.2em; -} \ No newline at end of file +} diff --git a/www/index.php b/www/index.php index 6fecf71..5c56ae1 100644 --- a/www/index.php +++ b/www/index.php @@ -35,20 +35,22 @@ $agenda = new \pvv\side\Agenda([
-

Velkommen til Programvareverkstedet

-
- -
-
-

Velkommen til Program­vare­verk­stedet

-

Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet. Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer.

+
+

Velkommen til Programvareverkstedet

+

+ Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet. +
+ Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer. +

+ +

Kommende arrangement

    From 1f47b3849e9c0b7c5eb3a1c895a2680f30c9b58c Mon Sep 17 00:00:00 2001 From: halworsen Date: Mon, 13 Nov 2017 14:20:07 +0100 Subject: [PATCH 03/25] Landing changes i forgot to stage im smart :) --- www/css/landing.css | 26 +++++++++++++++++++------- www/index.php | 9 +++------ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/www/css/landing.css b/www/css/landing.css index 4c0041b..8d6d1a6 100644 --- a/www/css/landing.css +++ b/www/css/landing.css @@ -5,16 +5,15 @@ header { flex-direction: column; margin-top: 50px; - padding: 2em 0; - width: 100vw; - height: 50vh; + padding: 3vh 15vw; + width: 70vw; background-color: #002244; color: #fff; } header img { - width: 30vh; - height: 30vh; + width: 24vh; + height: 24vh; } main { @@ -23,12 +22,15 @@ main { .info { text-align: center; - padding: 1em 15vw; - height: 20vh; + width: 100%; + padding: 0 0; margin-top: 0; + + overflow-y: hidden; } .essentials { + width: 100%; margin: 1.8em 0; padding: .2em 0; list-style: none; @@ -50,3 +52,13 @@ main { padding: 1em; font-size: 1.2em; } + +@media(max-width: 600px){ + .essentials { + flex-direction: column; + } + + .essentials a { + margin: .2em 0; + } +} \ No newline at end of file diff --git a/www/index.php b/www/index.php index 5c56ae1..e233dce 100644 --- a/www/index.php +++ b/www/index.php @@ -36,12 +36,9 @@ $agenda = new \pvv\side\Agenda([
    -

    Velkommen til Programvareverkstedet

    -

    - Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet. -
    - Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer. -

    +

    Velkommen til Programvare­verkstedet

    +

    Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet.

    +

    Nåværende og tidligere studenter ved NTNU, samt ansatte ved NTNU og tilstøtende miljø, kan bli medlemmer.

    • Om PVV
    • Bli medlem
    • From 2ee9a98277b2f53ddbfe85c04e8f57b4d3beb25a Mon Sep 17 00:00:00 2001 From: halworsen Date: Mon, 13 Nov 2017 22:01:33 +0100 Subject: [PATCH 04/25] white logos --- www/css/landing.css | 2 +- www/css/logo-disk-white.png | Bin 0 -> 23520 bytes www/css/logo-white.png | Bin 0 -> 53516 bytes www/index.php | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 www/css/logo-disk-white.png create mode 100644 www/css/logo-white.png diff --git a/www/css/landing.css b/www/css/landing.css index 8d6d1a6..9a1d313 100644 --- a/www/css/landing.css +++ b/www/css/landing.css @@ -11,7 +11,7 @@ header { color: #fff; } -header img { +header .logo { width: 24vh; height: 24vh; } diff --git a/www/css/logo-disk-white.png b/www/css/logo-disk-white.png new file mode 100644 index 0000000000000000000000000000000000000000..02ac7c59eb273562efce0d15d7a60ab0f0681ad0 GIT binary patch literal 23520 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 DzD8HX literal 0 HcmV?d00001 diff --git a/www/css/logo-white.png b/www/css/logo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..ed797a9a0727b3a2d6a61247b08145ea3d6091ac GIT binary patch literal 53516 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
      - +

      Velkommen til Programvare­verkstedet

      Programvareverkstedet (PVV) er en studentorganisasjon ved NTNU som vil skape et miljø for datainteresserte personer tilknyttet universitetet.

      From 1ea96f5c0d281d5d8b31d29cf8e7fb51929b1e82 Mon Sep 17 00:00:00 2001 From: halworsen Date: Mon, 13 Nov 2017 23:13:24 +0100 Subject: [PATCH 05/25] New navbar mobile still wip --- inc/navbar.php | 20 ++++---- www/css/style.css | 115 +++++++++++++++++++++++++++++++++++++++------- www/index.php | 13 +++++- 3 files changed, 122 insertions(+), 26 deletions(-) diff --git a/inc/navbar.php b/inc/navbar.php index b10f523..2401b46 100644 --- a/inc/navbar.php +++ b/inc/navbar.php @@ -1,19 +1,21 @@ \n"; + $result = '\n"; + $result .= "\t\t
        \n"; $menuItems = [ - 'hjem' => '', - 'kalender' => 'kalender', - 'aktiviteter' => 'aktiviteter', - 'prosjekter' => 'prosjekt', - 'kontakt' => 'kontakt', - 'wiki' => 'pvv' + 'Hjem' => '', + 'Kalender' => 'kalender', + 'Aktiviteter' => 'aktiviteter', + 'Prosjekter' => 'prosjekt', + 'Kontakt' => 'kontakt', + 'Wiki' => 'pvv' ]; foreach($menuItems as $caption => $link) { $result .= "\t\t\t" . "
      • " . $caption . "
      • \n" ; } + $result .= "\t\t\t" . '' . "\n"; return $result . "\t\t
      \n"; } @@ -25,9 +27,9 @@ function loginBar($sp = 'default-sp') { $attr = $as->getAttributes(); if($attr) { $uname = $attr['uid'][0]; - $result .= "\t\t

      logget inn som: " . htmlspecialchars($uname) . "

      \n"; + $result .= "\t\t

      Logget inn som: " . htmlspecialchars($uname) . "

      \n"; } else { - $result .= "\t\tgetLoginURL()) . "\">logg inn\n"; + $result .= "\t\tgetLoginURL()) . "\">Logg inn\n"; } return $result; diff --git a/www/css/style.css b/www/css/style.css index 696ff19..693b9bd 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -15,8 +15,6 @@ nav { height: 50px; background-color: #002244; overflow: hidden; - - box-shadow: 0 0 5px #000; } nav * { @@ -37,33 +35,37 @@ nav h2 { color: #002244; } -nav img{ - width: 50px; - height: 50px; +nav .logo{ + position: fixed; + top: 6px; + left: 6px; + width: 38px; + height: 38px; } nav ul { - display: table; - table-layout: fixed; position: fixed; top: 0; - left: 15vw; - right: 15vw; - width: 70vw; - height: 50px; + left: 50px; + width: 100vw; + height: 45px; list-style: none; } +nav li { + height: 45px; + line-height: 55px; +} + nav a { - display: table-cell; + display: inline-block; height: 100%; - margin: 0; + margin: 0 .7em; text-decoration: none; font-size: 1.2em; text-align: center; - line-height: 48px; border-bottom: 2px solid rgba(255, 255, 255, 0); @@ -86,8 +88,12 @@ nav .login { position: fixed; top: 0; right: 0; - height: 48px; - padding: 0 1em; + height: 45px; + line-height: 55px; +} + +#navopen { + display: none; } main { @@ -116,4 +122,81 @@ main h2 { background-color: #00407F; transition: background-color .2s ease; +} + +@media(max-width: 800px){ + nav .logo { + visibility: hidden; + } + + nav .login { + display: none; + } + + nav ul { + left: 0px; + height: 50px; + } + + nav a { + display: none; + border-bottom: none; + text-align: left; + margin: 0; + } + + nav a:hover { + border-bottom: none; + } + + nav a.active { + display: block; + height: 50px; + line-height: 50px; + padding: 0 .5em; + border-bottom: none; + } + + #navopen { + display: block; + position: fixed; + top: 0; + right: 0; + line-height: 50px; + text-align: center; + width: 50px; + height: 50px; + margin: 0; + padding: 0; + background-color: #002244; + } + + .opennav a { + display: block; + text-align: left; + margin: 0; + padding: 0 .5em; + } + + .opennav a:hover { + background-color: #00407F; + } + + .opennav a:hover li { + background-color: #00407F; + } + + .opennav a.active:hover { + background-color: #002244; + } + + .opennav a.active:hover li { + background-color: #002244; + } + + .opennav .login { + position: relative; + display: block; + border-top: 1px solid gray; + } } \ No newline at end of file diff --git a/www/index.php b/www/index.php index 7d794c0..0dadbe3 100644 --- a/www/index.php +++ b/www/index.php @@ -25,10 +25,21 @@ $agenda = new \pvv\side\Agenda([ + + -
      - -
      -

      Verktøy

      - Legg inn ny aktivitet -

      Filter

      -
      -

      Navn

      - ' ?>
      -

      Organisator

      - ' ?>
      - -
      - + if(($counter == $pageLimit) and (($pageLimit * $page) < count($events))){ + echo 'Neste side'; + } + ?>
      -
      -
      - -
+
+

Verktøy

+ Legg inn ny aktivitet +

Filter

+
+

Navn

+ ' ?>
+

Organisator

+ ' ?>
- +
+ +
+
+
+
+
+ \ No newline at end of file diff --git a/www/admin/brukere/index.php b/www/admin/brukere/index.php index 14c1e26..0f25e7e 100644 --- a/www/admin/brukere/index.php +++ b/www/admin/brukere/index.php @@ -3,6 +3,7 @@ ini_set('display_errors', '1'); date_default_timezone_set('Europe/Oslo'); setlocale(LC_ALL, 'no_NO'); error_reporting(E_ALL); +require __DIR__ . '/../../../inc/navbar.php'; require __DIR__ . '/../../../src/_autoload.php'; require __DIR__ . '/../../../sql_config.php'; require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'); @@ -27,80 +28,68 @@ if(!$userManager->isAdmin($uname)){ $users = $userManager->getAllUserData(); ?> - - - - - - + + + + + + + - + + -
Bruker­administrasjon
+
+

Brukeradministrasjon

+
-
-
+
+ + - -
BrukernavnBrukergrupper
- - - $data){ - $uname = $data['name']; - $groupFlag = $userManager->getUsergroups($uname); - - if(!$users_value){ - $users_value = $uname; - }else{ - $users_value = $users_value . '_' . $uname; - } - ?> - - - usergroups as $name => $group){ - echo ''; - } + $users_value = ''; + foreach($users as $i => $data){ + $uname = $data['name']; + $groupFlag = $userManager->getUsergroups($uname); + + if(!$users_value){ + $users_value = $uname; + }else{ + $users_value = $users_value . '_' . $uname; + } ?> - - '; - ?> + + + usergroups as $name => $group){ + echo ''; + } + ?> + - - - usergroups as $name => $group){ - echo ''; + - -
BrukernavnBrukergrupper
' . $name . '
' . $name . '
' . $name . '
- -
+ echo ''; + ?> -
-
\ No newline at end of file + + + usergroups as $name => $group){ + echo '' . $name . ''; + } + ?> + + + + +
+ \ No newline at end of file diff --git a/www/admin/index.php b/www/admin/index.php index 98e7a95..1ed4423 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -23,37 +23,37 @@ if(!($isAdmin | $projectGroup | $activityGroup)){ } ?> - - - - - - + + + + + + + + -
Stor-­gutt-­leketøy
+ + -
+
+

Stor-gutt-leketøy

+
- - + if($isAdmin){ + echo '
  • Brukere
  • '; + } + ?> +
      +
    + \ No newline at end of file diff --git a/www/admin/prosjekter/edit.php b/www/admin/prosjekter/edit.php index d3b7bfe..63e3fc1 100644 --- a/www/admin/prosjekter/edit.php +++ b/www/admin/prosjekter/edit.php @@ -49,53 +49,55 @@ if($new == 0){ } ?> - - - - - + + + + + + + + -
    Prosjekt­administrasjon
    + + -
    +
    +

    Prosjektadministrasjon

    +
    -
    -

    +

    -
    -
    -

    Tittel

    - getName() . '" class="boxinput">' ?>
    + +
    +

    Tittel

    + getName() . '" class="boxinput">' ?>
    -

    Beskrivelse

    - -
    +

    Beskrivelse

    + +
    -
    -

    Prosjekteier (Brukernavn)

    - getOwnerUName(). '" class="boxinput">' ?>
    +
    +

    Prosjektleder (Brukernavn)

    + getOwnerUName(). '" class="boxinput">' ?>
    -

    Prosjekteier (Navn)

    - getOwner(). '" class="boxinput">' ?> +

    Prosjektleder (Navn)

    + getOwner(). '" class="boxinput">' ?> -

    Aktiv

    - getActive() ? 'checked' : '') . ' name="active"/>' ?> -
    +

    Aktiv

    + getActive() ? 'checked' : '') . ' name="active"/>' ?> +
    - getID() . '" />' ?> + getID() . '" />' ?> -
    -
    +
    +
    - -
    - -

    -

    - -
    - - + + + +

    +

    + \ No newline at end of file diff --git a/www/admin/prosjekter/index.php b/www/admin/prosjekter/index.php index fd64b39..7211c75 100644 --- a/www/admin/prosjekter/index.php +++ b/www/admin/prosjekter/index.php @@ -47,87 +47,91 @@ $projects = array_values(array_filter( )); ?> - - - - - - + + + + + + + + -
    Prosjekt­administrasjon
    + + -
    +
    +

    Prosjektadministrasjon

    +
    -
    -
    -

    Prosjekter

    +
    +
    +

    Prosjekter

    -
      - + getID(); + ?> + +
    • +
      +
      +

      getName() . " (ID: " . $projectID . ")"; ?>

      +

      getOwner(); ?>

      +

      getDescription(); ?>

      +
      + +
      + 🖊'; ?> + 🗑'; ?> +
      +
      +
    • + + +
    + + Forrige side'; } - $project = $projects[$i]; - $projectID = $project->getID(); - ?> - -
  • -
    -
    -

    getName() . " (ID: " . $projectID . ")"; ?>

    -

    getOwner(); ?>

    -

    getDescription(); ?>

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

    Verktøy

    - Legg inn nytt prosjekt -

    Filter

    -
    -

    Navn

    - ' ?>
    -

    Organisator

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

    Verktøy

    + Legg inn nytt prosjekt +

    Filter

    +
    +

    Prosjektnavn

    + ' ?>
    +

    Leders brukernavn

    + ' ?>
    - +
    + +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/www/css/admin.css b/www/css/admin.css index 89649e9..d30aae9 100644 --- a/www/css/admin.css +++ b/www/css/admin.css @@ -1,14 +1,12 @@ -header.admin { - margin-top: 3rem; - height: 16rem; - overflow: hidden; - text-align: right; - color: #fff; - font-family: monospace; - padding: 1rem; - font-size: 4em; - background: url('ja.png') no-repeat 1% 50% #024; - background-size: contain; +.tools { + width: 100%; + margin: 0; + padding: 0; + list-style: none; +} + +.tools li { + margin: 1.5em 0; } .event-list { @@ -101,27 +99,6 @@ header.admin { float: left; } -.btn { - text-decoration: none; - border: 1px solid #048; - color: #048; - padding: .2em 1em; - border-radius: .2em; - white-space: nowrap; - display: inline-block; - margin-bottom: .25em; -} -.btn:hover { - border-color: #084; - background: #eee; - color: #084; -} -.btn:active { - border-color: #084; - background: #084; - color: white; -} - .userlist { table-layout: fixed; width: 100%; @@ -153,4 +130,20 @@ header.admin { .newuserelement input { border: none; background-color: #ddd; +} + +.subnote { + margin-top: 0; + color: gray; + font-size: .7em; + font-style: italic; +} + +.no-chin { + margin-bottom: 0; +} + +.ruler { + border: none; + border-bottom: 1px dotted rgba(0,0,0,.5); } \ No newline at end of file diff --git a/www/css/nav.css b/www/css/nav.css index 9522412..22a826e 100644 --- a/www/css/nav.css +++ b/www/css/nav.css @@ -49,7 +49,7 @@ nav li { line-height: 50px; } -nav a { +nav a, nav p { display: inline-block; height: 40px; margin: 0 .7em; @@ -83,6 +83,10 @@ nav .login { line-height: 55px; } +nav p.login { + right: .5em; +} + #navopen { display: none; } diff --git a/www/css/style.css b/www/css/style.css index 27a9ba6..b059b32 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -10,7 +10,7 @@ body { main { padding: 1em 15vw; height: 100vh; - margin-top: 5vh; + margin-top: 7vh; background-color: #fff; } From 0b0707eafe840ac7dc28dfc1ff8053b0beaf863b Mon Sep 17 00:00:00 2001 From: halworsen Date: Sat, 10 Feb 2018 16:23:17 +0100 Subject: [PATCH 10/25] Fix html for the rest of the main pages --- www/admin/aktiviteter/edit.php | 4 +- www/aktiviteter/index.php | 102 ++++++++++++------------ www/kalender/index.php | 137 ++++++++++++++++----------------- www/kontakt/index.php | 61 ++++++++------- www/paamelding/index.php | 94 +++++++++++----------- www/prosjekt/index.php | 103 ++++++++++++------------- 6 files changed, 249 insertions(+), 252 deletions(-) diff --git a/www/admin/aktiviteter/edit.php b/www/admin/aktiviteter/edit.php index a539b29..4edb47a 100644 --- a/www/admin/aktiviteter/edit.php +++ b/www/admin/aktiviteter/edit.php @@ -91,10 +91,10 @@ if($new == 0){

    Sluttid (YYYY-MM-DD HH:MM:SS)

    getStop()->format('Y-m-d H:00:00') . '">
    ' ?> -

    Organisert av

    +

    Arrangør

    getOrganiser(). '" class="boxinput">' ?>
    -

    Hvor?

    +

    Sted

    getLocation(). '" class="boxinput">' ?>
    diff --git a/www/aktiviteter/index.php b/www/aktiviteter/index.php index f41069b..f14b83f 100644 --- a/www/aktiviteter/index.php +++ b/www/aktiviteter/index.php @@ -27,59 +27,61 @@ $day = (isset($_GET['day'])) ?> -Aktivitetsverkstedet - - - - - - -
    Aktivitets­verk­stedet
    + + Aktivitetsverkstedet + + + + + + + -
    + + -getNextOfEach(new \DateTimeImmutable) - : $agenda->getEventsBetween( - new DateTimeImmutable("$year-$month-$day 00:00:00"), - new DateTimeImmutable("$year-$month-$day 23:59:59")); +
    + getNextOfEach(new \DateTimeImmutable) + : $agenda->getEventsBetween( + new DateTimeImmutable("$year-$month-$day 00:00:00"), + new DateTimeImmutable("$year-$month-$day 23:59:59")); -$limit = 0; -foreach($events as $event) { -?> -
    -

    - getImageURL()) { ?> - + $limit = 0; + foreach($events as $event) { + ?> +
    +

    + getImageURL()) { ?> + + + getStart())) { ?> + getRelativeDate() ?> + getStart())) { ?> + getURL()) { ?> + getName() ?> + + getName() ?> + +

    +
      +
    • Tid: getStart()) ?>
    • +
    • Sted: getLocation() ?>
    • +
    • Arrangør: getOrganiser() ?>
    • +
    + + getDescription(); ?> + + \n

    ") ?> +

    + + 4) {$limit = 4;} else $limit = 2; ?> - getStart())) { ?> - getRelativeDate() ?> - getStart())) { ?> - getURL()) { ?> - getName() ?> - - getName() ?> - -

    -
      -
    • Tid: getStart()) ?> -
    • Sted: getLocation() ?> -
    • Arrangør: getOrganiser() ?> -
    +
    - getDescription(); ?> - - \n

    ") ?> - - - 4) {$limit = 4;} else $limit = 2; ?> - - -

    - - + diff --git a/www/kalender/index.php b/www/kalender/index.php index b13e7ec..9c3ea38 100644 --- a/www/kalender/index.php +++ b/www/kalender/index.php @@ -30,78 +30,77 @@ $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year)); ?> -Kalenderverkstedet - - - - - - - -
    Kalender­verk­stedet
    + + Kalenderverkstedet + + + + + + + + -
    - -
    -

    Aktiviteter for

    + + -

    - Forrige måned - Neste måned -

    - - -
    -
    - -
    - - + + + + + + diff --git a/www/kontakt/index.php b/www/kontakt/index.php index ed94d8b..254f7c2 100755 --- a/www/kontakt/index.php +++ b/www/kontakt/index.php @@ -7,38 +7,37 @@ require __DIR__ . '/../../src/_autoload.php'; require __DIR__ . '/../../sql_config.php'; ?> -Kommunikasjonsverkstedet - - - - - - -
    Kommunikasjons­verk­stedet
    + + Kommunikasjonsverkstedet + + + + + + + -
    + + -
    -

    Kommunikasjon

    -

    -Det er ulike måter å kommunisere med PVV-medlemmer på. -

    -

    -Vi har en IRC-kanal på IRCnet kalt #pvv. -

    -

    -Vi har også en Discord-kanal. Denne kanalen er satt opp slik at man i Discord-kanalen ser hva som skrives i IRC-kanalen, og vice versa. For å bli med i Discord-kanalen, klikk her. -

    -

    -Det er også mulig å ta i bruk analog kontakt ved å møte opp på stripa. -

    -
    - -
    - - +
    +

    Kommunikasjon

    +

    + Det er ulike måter å kommunisere med PVV-medlemmer på. +

    +

    + Vi har en IRC-kanal på IRCnet kalt #pvv. +

    +

    + Vi har også en Discord-kanal. Denne kanalen er satt opp slik at man i Discord-kanalen ser hva som skrives i IRC-kanalen, og vice versa. For å bli med i Discord-kanalen, klikk her. +

    +

    + Det er også mulig å ta i bruk analog kontakt ved å møte opp på stripa. +

    +
    + \ No newline at end of file diff --git a/www/paamelding/index.php b/www/paamelding/index.php index 85de18a..5ac4309 100644 --- a/www/paamelding/index.php +++ b/www/paamelding/index.php @@ -37,55 +37,53 @@ if (isset($_SESSION['userdata'])) { // if logged in with feide ?> -PVV registrering - - - - + + PVV registrering + + + + + -
    Registrerings­verks­stedet
    + + -
    - -
    -

    Registrer deg som bruker

    - -

    - PVV har for øyeblikket et manuelt system for å legge til nye brukere. - Vi foretrekker at du kommer inn på besøk på våre lokaler på stripa - for å sette sette opp din PVV bruker. Hvis du vil, kan du også sende oss - en melding fra denne siden med ditt navn, epost og NTNU brukernavn. - For å aktivere din brukerkonto på PVV, må du møte opp på - lokalene våre slik at vi kan få satt et passord. -

    - -

    Meldingen som du kan sendes:

    - - - -

    - Du er logget in som , - du trenger ikke sende melding om ny bruker fordi du helt klart har en. -

    - - - Til: drift@pvv.ntnu.no
    - Fra: nettsiden
    -
    - -

    -
    - Todo: Legg til en "send mail" knapp - - æ kanj itj lææv uten dæ piær! - +
    +

    Registrer deg som bruker

    -
    - -
    - - +

    + PVV har for øyeblikket et manuelt system for å legge til nye brukere. + Vi foretrekker at du kommer inn på besøk på våre lokaler på stripa + for å sette sette opp din PVV bruker. Hvis du vil, kan du også sende oss + en melding fra denne siden med ditt navn, epost og NTNU brukernavn. + For å aktivere din brukerkonto på PVV, må du møte opp på + lokalene våre slik at vi kan få satt et passord. +

    + +

    Meldingen du kan sende:

    + + + +

    + Du er logget in som , + du trenger ikke sende melding om ny bruker fordi du helt klart har en. +

    + + + Til: drift@pvv.ntnu.no
    + Fra: nettsiden
    +
    + +

    +
    + Todo: Legg til en "send mail" knapp + + æ kanj itj lææv uten dæ piær! + + + + diff --git a/www/prosjekt/index.php b/www/prosjekt/index.php index 7c1d6f3..474465c 100644 --- a/www/prosjekt/index.php +++ b/www/prosjekt/index.php @@ -11,64 +11,63 @@ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $projectManager = new \pvv\side\ProjectManager($pdo); $projects = $projectManager->getAll(); ?> + -Prosjektverkstedet - - - - - - + + Prosjektverkstedet + + + + + + + -
    Prosjekt­verk­stedet
    + + -
    - -
    -

    Prosjekter

    - -

    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!

    -
    - Lag prosjekt - Mine prosjekter - -

    Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har laget. Mangler det noe, eller brenner du for noe annet? Sett opp et eget prosjekt!

    - Lag prosjekt - Mine prosjekter - -
      +
      +

      Prosjekter

      +

      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!

      +
      + Lag prosjekt + Mine prosjekter + +

      Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har laget. Mangler det noe, eller brenner du for noe annet? Sett opp et eget prosjekt!

      + Lag prosjekt + Mine prosjekter -
    • -

      getID() . "\">" . $project->getName() . ""; ?>

      -

      getOwner(); ?>

      - -

      getDescription(); ?>

      -
      -
    • +
        + - -
      - -
    +
  • +

    getID() . "\">" . $project->getName() . ""; ?>

    +

    getOwner(); ?>

    + +

    getDescription(); ?>

    +
    +
  • -
    - - + + + + + From 689428241c3536796e1aca0de8663ddce87352c6 Mon Sep 17 00:00:00 2001 From: halworsen Date: Sat, 10 Feb 2018 16:39:30 +0100 Subject: [PATCH 11/25] Fix html for project pages --- www/css/admin.css | 16 ----- www/css/style.css | 16 +++++ www/prosjekt/edit.php | 60 +++++++++---------- www/prosjekt/mine.php | 133 +++++++++++++++++++++--------------------- 4 files changed, 113 insertions(+), 112 deletions(-) diff --git a/www/css/admin.css b/www/css/admin.css index d30aae9..a8daeba 100644 --- a/www/css/admin.css +++ b/www/css/admin.css @@ -130,20 +130,4 @@ .newuserelement input { border: none; background-color: #ddd; -} - -.subnote { - margin-top: 0; - color: gray; - font-size: .7em; - font-style: italic; -} - -.no-chin { - margin-bottom: 0; -} - -.ruler { - border: none; - border-bottom: 1px dotted rgba(0,0,0,.5); } \ No newline at end of file diff --git a/www/css/style.css b/www/css/style.css index b059b32..f94a00b 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -33,4 +33,20 @@ main h2 { background-color: #00407F; transition: background-color .2s ease; +} + +.subnote { + margin-top: 0; + color: gray; + font-size: .7em; + font-style: italic; +} + +.no-chin { + margin-bottom: 0; +} + +.ruler { + border: none; + border-bottom: 1px dotted rgba(0,0,0,.5); } \ No newline at end of file diff --git a/www/prosjekt/edit.php b/www/prosjekt/edit.php index 72ea662..2a26854 100644 --- a/www/prosjekt/edit.php +++ b/www/prosjekt/edit.php @@ -46,41 +46,39 @@ if($new == 0){ } ?> - - - - - + + + + + + + -
    Prosjekt­verk­stedet
    + + -
    +
    +

    Nytt prosjekt

    -
    -

    Nytt prosjekt

    +
    +

    Prosjektnavn

    +

    Gi prosjektet ditt et passende navn

    +
    - -

    Prosjektnavn

    -

    Gi prosjektet ditt et passende navn

    -
    +

    Beskrivelse

    +

    Hva går prosjektet ditt ut på?

    + -

    Beskrivelse

    -

    Hva går prosjektet ditt ut på?

    - + getID() . '" />' ?> - getID() . '" />' ?> +
    +
    -
    -
    - - '; ?> -
    - -
    - -
    - - + '; ?> + + +
    + \ No newline at end of file diff --git a/www/prosjekt/mine.php b/www/prosjekt/mine.php index 28244cf..820ff60 100644 --- a/www/prosjekt/mine.php +++ b/www/prosjekt/mine.php @@ -1,6 +1,7 @@ - - - - - + + + + + + + + -
    Prosjekt­verkstedet
    + + -
    - -
    -
    +

    Mine Prosjekter

    +
    -
      - +
      +
        + getID(); + ?> + +
      • +
        +
        +

        getID() . '">' . $project->getName() . ''; ?>

        +

        getDescription(); ?>

        +
        +
        +
      • + + +
      + + Forrige side'; } - $project = $projects[$i]; - $projectID = $project->getID(); - ?> - -
    • -
      -
      -

      getID() . '">' . $project->getName() . ''; ?>

      -

      getDescription(); ?>

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

    Verktøy

    - Lag prosjekt -

    Filter

    -
    -

    Navn

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

    Verktøy

    + Lag prosjekt +

    Filter

    +
    +

    Navn

    + ' ?>
    - +
    + +
    +
    +
    + + + From 05dee57dede64a0a5ee89c9057cc851e189b5425 Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 15:00:14 +0100 Subject: [PATCH 12/25] Remove gender inequality Got a complaint that the admin tools title wasn't very inclusive towards the fairer sex. The title has been edited to be gender neutral --- www/admin/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/admin/index.php b/www/admin/index.php index 1ed4423..68710d1 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -39,7 +39,7 @@ if(!($isAdmin | $projectGroup | $activityGroup)){
    -

    Stor-gutt-leketøy

    +

    Voksenleketøy

      Date: Tue, 13 Feb 2018 15:50:45 +0100 Subject: [PATCH 13/25] Redo landing page main body MOTD is WIP --- www/css/admin.css | 33 ------------------ www/css/landing.css | 58 ++++++++++++++++++++++++++++++- www/css/splash.css | 70 ------------------------------------- www/css/style.css | 47 ++++++++++++++++++++++++- www/index.php | 85 ++++++++++++++++++++++----------------------- 5 files changed, 144 insertions(+), 149 deletions(-) delete mode 100644 www/css/splash.css diff --git a/www/css/admin.css b/www/css/admin.css index a8daeba..44a0678 100644 --- a/www/css/admin.css +++ b/www/css/admin.css @@ -54,39 +54,6 @@ text-decoration: none; } -.gridsplit { - padding-top: 1.3em; - display: grid; - grid-template-columns: 3fr 1fr; -} - -.gridsplit5050 { - display: grid; - grid-template-columns: 1fr 1fr; -} - -.gridl { - height: 100%; - grid-column: 1; -} - -.gridr { - height: 100%; - padding: 0 1em; - margin-left: 1em; - border-left: 1px dotted rgba(0,0,0,0.5); - grid-column: 2; -} - -.gridsplit h1:first-child, -.gridsplit h2:first-child, -.gridsplit h3:first-child, -.gridsplit h4:first-child, -.gridsplit h5:first-child, -.gridsplit h6:first-child { - margin-top: 0; -} - .allgrids { grid-column: 1 / -1; } diff --git a/www/css/landing.css b/www/css/landing.css index 11bc3af..2dc1fba 100644 --- a/www/css/landing.css +++ b/www/css/landing.css @@ -1,5 +1,5 @@ header { - margin-top: 50px; + margin: 0; padding: 3vh 15vw; width: 70vw; background-color: #002244; @@ -50,6 +50,62 @@ main { font-size: 1.2em; } +img.float-right { + float: right; + max-width: 12em; + max-height: 12em; + vertical-align: baseline; +} + +.calendar-events { + padding: 0; + list-style: none; +} + +.calendar-events ul .date { + color: rgba(0,0,0,.5); + font-size: 0.8em; + margin-top: .2em; +} + +.calendar-events > li > p { + border-bottom: .1em dotted rgba(0,0,0,.2); +} + +.calendar-events ul { + list-style: none; + padding: 0; +} + +.calendar-events a, #ticker a { + text-decoration: none; + font-weight: bold; + color: black; +} + +.calendar-events a:hover, #ticker a:hover { + text-decoration: underline; +} + +.calendar-events ul .time { + color: rgba(0,0,0,.5); + float: right; +} + +.calendar-events ul .icon, .calendar-events ul .date { + float: right; + margin-right: .5em; +} + +.contentsplit { + display: grid; + grid-template-columns: 2.5fr 1.5fr; +} + +.gridr { + border-left: 0; +} + @media(max-width: 600px){ .essentials { flex-direction: column; diff --git a/www/css/splash.css b/www/css/splash.css deleted file mode 100644 index 86339b8..0000000 --- a/www/css/splash.css +++ /dev/null @@ -1,70 +0,0 @@ -img.float-right { - float: right; - max-width: 12em; - max-height: 12em; - vertical-align: baseline; -} - -.calendar-events { - padding: 0; - list-style: none; -} -.calendar-events ul .date { - color: rgba(0,0,0,.5); - font-size: 0.8em; - margin-top: .2em; -} -.calendar-events > li > p { - border-bottom: .1em dotted rgba(0,0,0,.2); -} - -.calendar-events ul { - list-style: none; - padding: 0 .5em; -} -.calendar-events a, #ticker a { - text-decoration: none; - font-weight: bold; - color: black; -} -.calendar-events a:hover, #ticker a:hover { - text-decoration: underline; -} -.calendar-events ul .time { - color: rgba(0,0,0,.5); - float: right; -} -.calendar-events ul .icon, .calendar-events ul .date { - float: right; - margin-right: .5em; -} - -#ticker { - position: absolute; - max-width: 60rem; - margin: 0 auto; - top: 11rem; - left: 0; - right: 0; - padding: 0; - list-style: none; -} -#ticker li { - margin: 0 1rem; - padding: .5em 1em; - background: linear-gradient(to bottom, #fff 75%,#fafafa 100%); - border-radius: .5rem; - box-shadow: 0 .1rem .15rem rgba(0,0,0,.3); -} - -@media screen and (max-width: 50rem) { - #ticker { - top: 7rem; - } - #ticker li { - margin: 0 .5rem; - } - main { - margin: -11rem auto 0 auto; - } -} diff --git a/www/css/style.css b/www/css/style.css index f94a00b..e7a9b9a 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -19,6 +19,51 @@ main h2 { color: #002244; } +article { + margin-bottom: 7vh; +} + +.gridsplit { + padding-top: 1.3em; + display: grid; + grid-template-columns: 3fr 1fr; +} + +.gridsplit5050 { + display: grid; + grid-template-columns: 1fr 1fr; +} + +.gridsplitthirds { + display: grid; + grid-column-gap: 2em; + column-rule-style: dotted; + grid-template-columns: 1fr 1fr 1fr; +} + +.gridl { + height: 100%; + grid-column: 1; + grid-row: 1; +} + +.gridr { + height: 100%; + padding: 0 1em; + margin-left: 1em; + border-left: 1px dotted rgba(0,0,0,0.5); + grid-column: 2; +} + +.gridsplit h1:first-child, +.gridsplit h2:first-child, +.gridsplit h3:first-child, +.gridsplit h4:first-child, +.gridsplit h5:first-child, +.gridsplit h6:first-child { + margin-top: 0; +} + .btn { padding: .5em; border-radius: 4px; @@ -49,4 +94,4 @@ main h2 { .ruler { border: none; border-bottom: 1px dotted rgba(0,0,0,.5); -} \ No newline at end of file +} diff --git a/www/index.php b/www/index.php index 3ccba50..06b3b9b 100644 --- a/www/index.php +++ b/www/index.php @@ -59,53 +59,50 @@ $agenda = new \pvv\side\Agenda([ -
      -

      Kommende arrangement

      -
        - - - getNextDays() as $period => $events) if ($events && $counter1 < 2 && $counter2 < 10) { $counter1++ ?> -
      • -

        -
          - -
        • - getName(); ?> - + */ ?> - ' . $event->getStart()->format('H:i') . ''; - if (\pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) { - echo '' . strftime('%a', $event->getStart()->getTimestamp()) . ''; +
          +
          +

          Kommende aktiviteter

          +
          + + + getNextDays() as $period => $events) if ($events && $counter1 < 3 && $counter2 < 10) { $counter1++ ?> +

          +
          +
            + +
          • + getName(); ?> + + */ ?> + ' . $event->getStart()->format('H:i') . ''; + if (\pvv\side\Agenda::isThisWeek($event->getStart()) || $event->getStart()->sub(new DateInterval('P3D'))->getTimestamp() < time()) { + echo '' . strftime('%a', $event->getStart()->getTimestamp()) . ''; + } else { + echo '' . strftime('%e. %b', $event->getStart()->getTimestamp()) . ''; + } } else { - echo '' . strftime('%e. %b', $event->getStart()->getTimestamp()) . ''; + echo '' . $event->getStart()->format('H:i') . ''; } - } else { - echo '' . $event->getStart()->format('H:i') . ''; - } - ?> -
          • - -
          -
        • - -
        -

        Flere aktiviteter

        + ?> +
      • + +
      + + +
      +

      Flere aktiviteter

      + + +
      +

      Dagens melding

      +

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Odio tempor orci dapibus ultrices in. Et odio pellentesque diam volutpat commodo. Porttitor leo a diam sollicitudin. Nisl nisi scelerisque eu ultrices. Ipsum dolor sit amet consectetur. Mattis pellentesque id nibh tortor id. Quam adipiscing vitae proin sagittis nisl rhoncus mattis. Integer malesuada nunc vel risus commodo. Curabitur gravida arcu ac tortor dignissim. Mi sit amet mauris commodo quis imperdiet. Enim nulla aliquet porttitor lacus luctus accumsan tortor posuere. Pretium quam vulputate dignissim suspendisse in est. Velit egestas dui id ornare. Urna condimentum mattis pellentesque id nibh tortor id aliquet.

      -

      Opptak

      -

      - Alle med tilknytning til NTNU kan bli medlem hos oss - og benytte seg av våre ressurser. - -

      -

      - Bli medlem - -

      +Maecenas pharetra convallis posuere morbi leo urna molestie. Egestas sed sed risus pretium. At erat pellentesque adipiscing commodo elit. Ut tortor pretium viverra suspendisse potenti nullam ac. Sit amet volutpat consequat mauris nunc congue nisi vitae suscipit. Faucibus purus in massa tempor nec feugiat nisl. Viverra tellus in hac habitasse platea dictumst vestibulum. Tincidunt vitae semper quis lectus nulla at. Id consectetur purus ut faucibus. Ultricies integer quis auctor elit sed vulputate. Suscipit adipiscing bibendum est ultricies integer quis auctor elit.

      + +Nulla malesuada pellentesque elit eget. Odio tempor orci dapibus ultrices in iaculis nunc. Iaculis at erat pellentesque adipiscing. Volutpat ac tincidunt vitae semper. Posuere ac ut consequat semper viverra nam libero justo. Enim tortor at auctor urna nunc id cursus metus. Sit amet cursus sit amet. Eu non diam phasellus vestibulum lorem sed risus. Consequat interdum varius sit amet mattis vulputate enim nulla aliquet. Enim sed faucibus turpis in eu mi bibendum. Eu consequat ac felis donec et odio pellentesque. Cursus eget nunc scelerisque viverra mauris in aliquam sem. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Quis commodo odio aenean sed adipiscing. Et ultrices neque ornare aenean euismod elementum nisi. Turpis in eu mi bibendum neque egestas congue. Sed arcu non odio euismod. Risus quis varius quam quisque.

      + +Consequat interdum varius sit amet mattis vulputate enim nulla. Tristique et egestas quis ipsum suspendisse. Amet massa vitae tortor condimentum lacinia quis vel eros donec. Varius vel pharetra vel turpis nunc eget. Convallis posuere morbi leo urna molestie at elementum eu facilisis. Congue eu consequat ac felis donec et odio pellentesque. Nunc sed velit dignissim sodales ut eu sem integer. Mattis enim ut tellus elementum sagittis. Molestie ac feugiat sed lectus. Cursus vitae congue mauris rhoncus aenean vel elit. Mauris augue neque gravida in. Velit sed ullamcorper morbi tincidunt ornare massa eget egestas purus. Et tortor at risus viverra adipiscing at in tellus integer.

      +
      \ No newline at end of file From 774f2754a0e361af4d087ec44015f61ddb1a0cda Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 15:51:57 +0100 Subject: [PATCH 14/25] Remove rogue header tag --- www/admin/brukere/index.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/www/admin/brukere/index.php b/www/admin/brukere/index.php index 0f25e7e..56a3ea3 100644 --- a/www/admin/brukere/index.php +++ b/www/admin/brukere/index.php @@ -35,8 +35,6 @@ $users = $userManager->getAllUserData(); - -
      Bruker­administrasjon
      From 5e10d53c364602af74db98962ef09e2d8a365dcc Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 16:28:59 +0100 Subject: [PATCH 15/25] Fix newlines in project descriptions --- src/pvv/side/project.php | 2 +- www/admin/prosjekter/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pvv/side/project.php b/src/pvv/side/project.php index 93d3a9a..e46a6ce 100644 --- a/src/pvv/side/project.php +++ b/src/pvv/side/project.php @@ -7,7 +7,7 @@ class Project{ public function __construct($id, $name, $descr, $owner, $owneruname, $active){ $this->id = $id; $this->name = $name; - $this->descr = $descr; + $this->descr = explode("\n", $descr); $this->owner = $owner; $this->owneruname = $owneruname; $this->active = $active; diff --git a/www/admin/prosjekter/index.php b/www/admin/prosjekter/index.php index 7211c75..fb1ec50 100644 --- a/www/admin/prosjekter/index.php +++ b/www/admin/prosjekter/index.php @@ -89,7 +89,7 @@ $projects = array_values(array_filter(

      getName() . " (ID: " . $projectID . ")"; ?>

      getOwner(); ?>

      -

      getDescription(); ?>

      +

      getDescription(), "

      \n

      "); ?>

      From 98f882233c7e9a290f5b11c0aab75b84465bbd3f Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 16:41:03 +0100 Subject: [PATCH 16/25] Implode project description everywhere else Forgot these --- www/admin/prosjekter/edit.php | 2 +- www/prosjekt/edit.php | 2 +- www/prosjekt/index.php | 2 +- www/prosjekt/mine.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/www/admin/prosjekter/edit.php b/www/admin/prosjekter/edit.php index 63e3fc1..d7baf17 100644 --- a/www/admin/prosjekter/edit.php +++ b/www/admin/prosjekter/edit.php @@ -76,7 +76,7 @@ if($new == 0){ getName() . '" class="boxinput">' ?>

      Beskrivelse

      - +
      diff --git a/www/prosjekt/edit.php b/www/prosjekt/edit.php index 2a26854..f11b361 100644 --- a/www/prosjekt/edit.php +++ b/www/prosjekt/edit.php @@ -70,7 +70,7 @@ if($new == 0){

      Beskrivelse

      Hva går prosjektet ditt ut på?

      - + getID() . '" />' ?> diff --git a/www/prosjekt/index.php b/www/prosjekt/index.php index 474465c..cb767c0 100644 --- a/www/prosjekt/index.php +++ b/www/prosjekt/index.php @@ -60,7 +60,7 @@ $projects = $projectManager->getAll();

      getID() . "\">" . $project->getName() . ""; ?>

      getOwner(); ?>

      -

      getDescription(); ?>

      +

      getDescription(), "

      \n

      "); ?>

      diff --git a/www/prosjekt/mine.php b/www/prosjekt/mine.php index 820ff60..a77d805 100644 --- a/www/prosjekt/mine.php +++ b/www/prosjekt/mine.php @@ -78,7 +78,7 @@ $projects = array_values(array_filter(

      getID() . '">' . $project->getName() . ''; ?>

      -

      getDescription(); ?>

      +

      getDescription(), "

      \n

      "); ?>

      From af97383e01d71800ce51253d71f116b424e11973 Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 16:54:39 +0100 Subject: [PATCH 17/25] last one of these i promise --- www/admin/prosjekter/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/admin/prosjekter/index.php b/www/admin/prosjekter/index.php index fb1ec50..62186b0 100644 --- a/www/admin/prosjekter/index.php +++ b/www/admin/prosjekter/index.php @@ -89,7 +89,7 @@ $projects = array_values(array_filter(

      getName() . " (ID: " . $projectID . ")"; ?>

      getOwner(); ?>

      -

      getDescription(), "

      \n

      "); ?>

      +

      getDescription(), "

      \n

      "); ?>

      From 1db31b9e56aa27423f35630bac5bf33132b70a83 Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 16:58:54 +0100 Subject: [PATCH 18/25] Add MOTD --- pvv.sql | 5 +++ src/pvv/side/motd.php | 23 ++++++++++++++ www/admin/index.php | 4 +++ www/admin/motd/index.php | 66 +++++++++++++++++++++++++++++++++++++++ www/admin/motd/update.php | 39 +++++++++++++++++++++++ www/index.php | 21 ++++++++----- 6 files changed, 151 insertions(+), 7 deletions(-) create mode 100644 src/pvv/side/motd.php create mode 100644 www/admin/motd/index.php create mode 100644 www/admin/motd/update.php diff --git a/pvv.sql b/pvv.sql index 4325a96..cc6a70c 100644 --- a/pvv.sql +++ b/pvv.sql @@ -20,4 +20,9 @@ CREATE TABLE "projects" ( CREATE TABLE "users" ( "uname" TEXT, "groups" INT DEFAULT 0 +); + +CREATE TABLE "motd" ( +"title" TEXT, +"content" TEXT ); \ No newline at end of file diff --git a/src/pvv/side/motd.php b/src/pvv/side/motd.php new file mode 100644 index 0000000..c5fb3dd --- /dev/null +++ b/src/pvv/side/motd.php @@ -0,0 +1,23 @@ +pdo = $pdo; + } + + public function getMOTD(){ + $query = 'SELECT * FROM motd LIMIT 1'; + $statement = $this->pdo->prepare($query); + $statement->execute(); + + $data = $statement->fetch(); + $motd = array("title" => $data[0], "content" => explode("\n", $data[1])); + + return $motd; + } +} \ No newline at end of file diff --git a/www/admin/index.php b/www/admin/index.php index 68710d1..0930903 100644 --- a/www/admin/index.php +++ b/www/admin/index.php @@ -50,6 +50,10 @@ if(!($isAdmin | $projectGroup | $activityGroup)){ echo '
    • Prosjekter
    • '; } + if($isAdmin) { + echo '
    • Dagens melding
    • '; + } + if($isAdmin){ echo '
    • Brukere
    • '; } diff --git a/www/admin/motd/index.php b/www/admin/motd/index.php new file mode 100644 index 0000000..0663f0d --- /dev/null +++ b/www/admin/motd/index.php @@ -0,0 +1,66 @@ +getAttributes(); + +$pdo = new \PDO($dbDsn, $dbUser, $dbPass); +$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$userManager = new \pvv\admin\UserManager($pdo); + +require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'); +$as = new SimpleSAML_Auth_Simple('default-sp'); +$as->requireAuth(); +$attrs = $as->getAttributes(); +$uname = $attrs['uid'][0]; + +if(!$userManager->isAdmin($uname)){ + echo 'Her har du ikke lov\'t\'å\'værra!!!'; + exit(); +} + +$motdfetcher = new \pvv\side\MOTD($pdo); +$motd = $motdfetcher->getMOTD(); +?> + + + + + + + + + + + + + +
      +

      Dagens melding

      +
      + +
      +

      Tittel

      +

      Ikke nødvendig

      +
      + +

      Innhold

      + + +
      +
      + + '; ?> +
      +
      +
      + \ No newline at end of file diff --git a/www/admin/motd/update.php b/www/admin/motd/update.php new file mode 100644 index 0000000..a7af78b --- /dev/null +++ b/www/admin/motd/update.php @@ -0,0 +1,39 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$userManager = new \pvv\admin\UserManager($pdo); + +require_once(__DIR__ . '/../../../vendor/simplesamlphp/simplesamlphp/lib/_autoload.php'); +$as = new SimpleSAML_Auth_Simple('default-sp'); +$as->requireAuth(); +$attrs = $as->getAttributes(); +$uname = $attrs['uid'][0]; + +if(!isset($_POST['title']) or !isset($_POST['content'])){ + header('Location: ' . $_SERVER['HTTP_REFERER']); + exit(); +} + +if(!$userManager->isAdmin($uname)){ + echo 'Her har du ikke lov\'t\'å\'værra!!!'; + exit(); +} + +$query = 'UPDATE motd SET title=:title, content=:content'; +$statement = $pdo->prepare($query); + +$statement->bindParam(':title', $_POST['title'], PDO::PARAM_STR); +$statement->bindParam(':content', $_POST['content'], PDO::PARAM_STR); + +$statement->execute(); + +header('Location: .'); +?> + +Om du ikke ble automatisk omdirigert tilbake klikk her \ No newline at end of file diff --git a/www/index.php b/www/index.php index 06b3b9b..7a4887c 100644 --- a/www/index.php +++ b/www/index.php @@ -13,6 +13,9 @@ $agenda = new \pvv\side\Agenda([ new \pvv\side\social\AnimekveldActivity, new \pvv\side\DBActivity($pdo), ]); + +$motdfetcher = new \pvv\side\MOTD($pdo); +$motd = $motdfetcher->getMOTD(); ?> @@ -92,16 +95,20 @@ $agenda = new \pvv\side\Agenda([

      Flere aktiviteter

      - +
      -

      Dagens melding

      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Odio tempor orci dapibus ultrices in. Et odio pellentesque diam volutpat commodo. Porttitor leo a diam sollicitudin. Nisl nisi scelerisque eu ultrices. Ipsum dolor sit amet consectetur. Mattis pellentesque id nibh tortor id. Quam adipiscing vitae proin sagittis nisl rhoncus mattis. Integer malesuada nunc vel risus commodo. Curabitur gravida arcu ac tortor dignissim. Mi sit amet mauris commodo quis imperdiet. Enim nulla aliquet porttitor lacus luctus accumsan tortor posuere. Pretium quam vulputate dignissim suspendisse in est. Velit egestas dui id ornare. Urna condimentum mattis pellentesque id nibh tortor id aliquet.

      +
      + echo "

      Dagens melding"; + if($title != ""){ + echo $title_text; + } + echo "

      "; -Nulla malesuada pellentesque elit eget. Odio tempor orci dapibus ultrices in iaculis nunc. Iaculis at erat pellentesque adipiscing. Volutpat ac tincidunt vitae semper. Posuere ac ut consequat semper viverra nam libero justo. Enim tortor at auctor urna nunc id cursus metus. Sit amet cursus sit amet. Eu non diam phasellus vestibulum lorem sed risus. Consequat interdum varius sit amet mattis vulputate enim nulla aliquet. Enim sed faucibus turpis in eu mi bibendum. Eu consequat ac felis donec et odio pellentesque. Cursus eget nunc scelerisque viverra mauris in aliquam sem. Accumsan in nisl nisi scelerisque eu ultrices vitae auctor eu. Quis commodo odio aenean sed adipiscing. Et ultrices neque ornare aenean euismod elementum nisi. Turpis in eu mi bibendum neque egestas congue. Sed arcu non odio euismod. Risus quis varius quam quisque.

      - -Consequat interdum varius sit amet mattis vulputate enim nulla. Tristique et egestas quis ipsum suspendisse. Amet massa vitae tortor condimentum lacinia quis vel eros donec. Varius vel pharetra vel turpis nunc eget. Convallis posuere morbi leo urna molestie at elementum eu facilisis. Congue eu consequat ac felis donec et odio pellentesque. Nunc sed velit dignissim sodales ut eu sem integer. Mattis enim ut tellus elementum sagittis. Molestie ac feugiat sed lectus. Cursus vitae congue mauris rhoncus aenean vel elit. Mauris augue neque gravida in. Velit sed ullamcorper morbi tincidunt ornare massa eget egestas purus. Et tortor at risus viverra adipiscing at in tellus integer.

      + echo "

      " . implode($motd["content"], "

      \n

      ") . "

      "; + ?>
    From f2a14f37918db345d14cf38a9038b8a904ebd1e9 Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 17:02:03 +0100 Subject: [PATCH 19/25] Only show MOTD title if it is set --- www/index.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/www/index.php b/www/index.php index 7a4887c..ab3f237 100644 --- a/www/index.php +++ b/www/index.php @@ -99,11 +99,12 @@ $motd = $motdfetcher->getMOTD();
    Dagens melding"; - if($title != ""){ - echo $title_text; + echo "

    "; + if($title == ""){ + echo "Dagens melding"; + }else{ + echo $title; } echo "

    "; From 87c6523f35303fcfd9c96366f85a86f9d0b5b232 Mon Sep 17 00:00:00 2001 From: halworsen Date: Tue, 13 Feb 2018 17:23:21 +0100 Subject: [PATCH 20/25] Responsive design for landing page content --- www/css/landing.css | 26 +++++++++++++++++++++++++- www/index.php | 1 - 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/www/css/landing.css b/www/css/landing.css index 2dc1fba..03cf505 100644 --- a/www/css/landing.css +++ b/www/css/landing.css @@ -59,6 +59,7 @@ img.float-right { .calendar-events { padding: 0; + margin-bottom: 1.5em; list-style: none; } @@ -106,7 +107,7 @@ img.float-right { border-left: 0; } -@media(max-width: 600px){ +@media screen and (max-width: 50rem) { .essentials { flex-direction: column; } @@ -114,4 +115,27 @@ img.float-right { .essentials a { margin: .2em 0; } +} + +@media screen and (max-width: 65rem) { + .contentsplit { + display: block; + } + + .gridr { + height: auto; + padding: 0; + margin-left: 0; + margin-bottom: 3em; + } + + .gridr br { + margin: 0; + height: 0px; + } + + .gridl { + margin-top: 0; + padding: 0; + } } \ No newline at end of file diff --git a/www/index.php b/www/index.php index ab3f237..c7e5890 100644 --- a/www/index.php +++ b/www/index.php @@ -92,7 +92,6 @@ $motd = $motdfetcher->getMOTD();
    -

    Flere aktiviteter

    From 9f935cd8107739105905d227af5307265b17f6f7 Mon Sep 17 00:00:00 2001 From: halworsen Date: Wed, 14 Feb 2018 17:55:41 +0100 Subject: [PATCH 21/25] Implode with
    --- www/admin/aktiviteter/index.php | 2 +- www/admin/prosjekter/index.php | 2 +- www/aktiviteter/index.php | 2 +- www/index.php | 2 +- www/kurs/index.php | 2 +- www/prosjekt/mine.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/www/admin/aktiviteter/index.php b/www/admin/aktiviteter/index.php index 204a291..9b9c567 100644 --- a/www/admin/aktiviteter/index.php +++ b/www/admin/aktiviteter/index.php @@ -92,7 +92,7 @@ $events = array_values(array_filter(

    getStart()->format("(Y-m-d H:i:s)") . " - " . $event->getStop()->format("(Y-m-d H:i:s)"); ?>

    -

    getDescription(), "

    \n

    "); ?>

    +

    getDescription(), "
    "); ?>

    diff --git a/www/admin/prosjekter/index.php b/www/admin/prosjekter/index.php index 62186b0..9d6f5fb 100644 --- a/www/admin/prosjekter/index.php +++ b/www/admin/prosjekter/index.php @@ -89,7 +89,7 @@ $projects = array_values(array_filter(

    getName() . " (ID: " . $projectID . ")"; ?>

    getOwner(); ?>

    -

    getDescription(), "

    \n

    "); ?>

    +

    getDescription(), "
    "); ?>

    diff --git a/www/aktiviteter/index.php b/www/aktiviteter/index.php index f14b83f..64eb82b 100644 --- a/www/aktiviteter/index.php +++ b/www/aktiviteter/index.php @@ -77,7 +77,7 @@ $day = (isset($_GET['day'])) getDescription(); ?> - \n

    ") ?> + ") ?>

    4) {$limit = 4;} else $limit = 2; ?> diff --git a/www/index.php b/www/index.php index c7e5890..c6317cb 100644 --- a/www/index.php +++ b/www/index.php @@ -107,7 +107,7 @@ $motd = $motdfetcher->getMOTD(); } echo ""; - echo "

    " . implode($motd["content"], "

    \n

    ") . "

    "; + echo "

    " . implode($motd["content"], "
    ") . "

    "; ?>
    diff --git a/www/kurs/index.php b/www/kurs/index.php index 9fdf1e3..2877b76 100644 --- a/www/kurs/index.php +++ b/www/kurs/index.php @@ -43,7 +43,7 @@ $agenda = new \pvv\side\Agenda([ getDescription(); ?> - \n

    ") ?> + ") ?> 4) {$limit = 4;} else $limit = 2; ?> diff --git a/www/prosjekt/mine.php b/www/prosjekt/mine.php index a77d805..62231df 100644 --- a/www/prosjekt/mine.php +++ b/www/prosjekt/mine.php @@ -78,7 +78,7 @@ $projects = array_values(array_filter(

    getID() . '">' . $project->getName() . ''; ?>

    -

    getDescription(), "

    \n

    "); ?>

    +

    getDescription(), "
    "); ?>

    From cf058dc7a93598e97fc2286f66d06abb78485cf5 Mon Sep 17 00:00:00 2001 From: halworsen Date: Wed, 14 Feb 2018 17:56:19 +0100 Subject: [PATCH 22/25] Project cards --- www/css/projects.css | 59 ++++++++++++++++++++++++++++++++++++++++++ www/prosjekt/edit.php | 3 ++- www/prosjekt/index.php | 36 +++++++++++++------------- 3 files changed, 79 insertions(+), 19 deletions(-) create mode 100644 www/css/projects.css diff --git a/www/css/projects.css b/www/css/projects.css new file mode 100644 index 0000000..098f81e --- /dev/null +++ b/www/css/projects.css @@ -0,0 +1,59 @@ +.project-card { + position: relative; + display: inline-block; + vertical-align: top; + border-radius: 4px; + width: 18em; + height: 8em; + padding: 0; + margin: 0 1em 1em 0; + border: 1px solid #002244; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); +} + +.project-title { + padding-bottom: .1em; + margin: 0; + text-overflow: ellipsis; +} + +.card-content { + display: block; + overflow: hidden; + margin: 0; + padding: .6em; + height: 4.3em; +} + +.card-content p { + height: 2.5em; + overflow: hidden; + line-height: 1.25em; +} + +.project-organizer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + margin: 0; + padding: .3em .6em; + border-top: 1px solid #002244; + font-size: .8em; +} + +.card-content * { + margin-top: 0; +} + +.projects-divider { + border: 0; + margin-bottom: 2em; +} + +@media screen and (max-width: 50rem) { + .projects { + display: inline-block; + + } +} \ No newline at end of file diff --git a/www/prosjekt/edit.php b/www/prosjekt/edit.php index f11b361..e6b69fa 100644 --- a/www/prosjekt/edit.php +++ b/www/prosjekt/edit.php @@ -69,7 +69,8 @@ if($new == 0){

    Beskrivelse

    -

    Hva går prosjektet ditt ut på?

    +

    Hva går prosjektet ditt ut på?

    +

    Den første linjen blir vist på prosjektkortet, prøv å holde den kort!

    getID() . '" />' ?> diff --git a/www/prosjekt/index.php b/www/prosjekt/index.php index cb767c0..709b86d 100644 --- a/www/prosjekt/index.php +++ b/www/prosjekt/index.php @@ -22,6 +22,7 @@ $projects = $projectManager->getAll(); + @@ -45,27 +46,26 @@ $projects = $projectManager->getAll();

    Lyst til å gjøre noe kult? Her er et utvalg av de prosjektene som PVVere har laget. Mangler det noe, eller brenner du for noe annet? Sett opp et eget prosjekt!

    Lag prosjekt Mine prosjekter +
    -
      - + -
    • -

      getID() . "\">" . $project->getName() . ""; ?>

      -

      getOwner(); ?>

      - -

      getDescription(), "

      \n

      "); ?>

      -
      -
    • +
      +
      +

      getName(); ?>

      +

      getDescription()[0]; ?>

      +
      +

      Organisert av
      getOwner(); ?>

      +
      - -
    + From d44cf9573615f31983828e070e8c332c0a7cc375 Mon Sep 17 00:00:00 2001 From: Markus Date: Sat, 17 Feb 2018 13:58:57 +0100 Subject: [PATCH 23/25] Create MOTD table in SQL setup --- dist/pvv.sql | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dist/pvv.sql b/dist/pvv.sql index 4325a96..cc6a70c 100644 --- a/dist/pvv.sql +++ b/dist/pvv.sql @@ -20,4 +20,9 @@ CREATE TABLE "projects" ( CREATE TABLE "users" ( "uname" TEXT, "groups" INT DEFAULT 0 +); + +CREATE TABLE "motd" ( +"title" TEXT, +"content" TEXT ); \ No newline at end of file From 3832d3fde04c673cc6d958fdb7b801f5f782c9e0 Mon Sep 17 00:00:00 2001 From: Markus Date: Sat, 24 Feb 2018 16:57:38 +0100 Subject: [PATCH 24/25] Fix project description error in my projects page --- www/prosjekt/mine.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/prosjekt/mine.php b/www/prosjekt/mine.php index cd0818e..817123f 100644 --- a/www/prosjekt/mine.php +++ b/www/prosjekt/mine.php @@ -71,7 +71,7 @@ $projects = array_values(array_filter(

    getID() . '">' . $project->getName() . ''; ?>

    -

    getDescription(); ?>

    +

    getDescription()); ?>

    From 6777048dacbae0e85ed7fd7eeff77062996ac807 Mon Sep 17 00:00:00 2001 From: Markus Date: Sat, 24 Feb 2018 17:02:00 +0100 Subject: [PATCH 25/25] Fix login button on all pages By passing PDO to the login bar so admins get their link --- www/admin/aktiviteter/edit.php | 2 +- www/admin/aktiviteter/index.php | 2 +- www/admin/brukere/index.php | 2 +- www/admin/motd/index.php | 2 +- www/admin/prosjekter/edit.php | 2 +- www/admin/prosjekter/index.php | 2 +- www/aktiviteter/index.php | 2 +- www/kalender/index.php | 2 +- www/kontakt/index.php | 2 +- www/paamelding/index.php | 2 +- www/prosjekt/edit.php | 2 +- www/prosjekt/index.php | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/www/admin/aktiviteter/edit.php b/www/admin/aktiviteter/edit.php index 58562eb..69435f9 100644 --- a/www/admin/aktiviteter/edit.php +++ b/www/admin/aktiviteter/edit.php @@ -66,7 +66,7 @@ if($new == 0){
    diff --git a/www/admin/aktiviteter/index.php b/www/admin/aktiviteter/index.php index fbb9b86..06ccdab 100644 --- a/www/admin/aktiviteter/index.php +++ b/www/admin/aktiviteter/index.php @@ -59,7 +59,7 @@ $events = array_values(array_filter(
    diff --git a/www/admin/brukere/index.php b/www/admin/brukere/index.php index 053b1e7..132fc4d 100644 --- a/www/admin/brukere/index.php +++ b/www/admin/brukere/index.php @@ -39,7 +39,7 @@ $users = $userManager->getAllUserData();
    diff --git a/www/admin/motd/index.php b/www/admin/motd/index.php index 0663f0d..7695025 100644 --- a/www/admin/motd/index.php +++ b/www/admin/motd/index.php @@ -41,7 +41,7 @@ $motd = $motdfetcher->getMOTD();
    diff --git a/www/admin/prosjekter/edit.php b/www/admin/prosjekter/edit.php index 8adec7e..374c83e 100644 --- a/www/admin/prosjekter/edit.php +++ b/www/admin/prosjekter/edit.php @@ -61,7 +61,7 @@ if($new == 0){
    diff --git a/www/admin/prosjekter/index.php b/www/admin/prosjekter/index.php index 970b717..6eb471b 100644 --- a/www/admin/prosjekter/index.php +++ b/www/admin/prosjekter/index.php @@ -59,7 +59,7 @@ $projects = array_values(array_filter(
    diff --git a/www/aktiviteter/index.php b/www/aktiviteter/index.php index a6da4fe..0e84225 100644 --- a/www/aktiviteter/index.php +++ b/www/aktiviteter/index.php @@ -27,7 +27,7 @@ $day = (isset($_GET['day']))
    diff --git a/www/kalender/index.php b/www/kalender/index.php index 2d19551..6e1314f 100644 --- a/www/kalender/index.php +++ b/www/kalender/index.php @@ -30,7 +30,7 @@ $days_in_month = date('t', mktime(0, 0, 0, $month, 1, $year));
    diff --git a/www/kontakt/index.php b/www/kontakt/index.php index ae0ec4c..6c7f985 100755 --- a/www/kontakt/index.php +++ b/www/kontakt/index.php @@ -16,7 +16,7 @@ require_once dirname(dirname(__DIR__)) . implode(DIRECTORY_SEPARATOR, ['', 'inc'
    diff --git a/www/paamelding/index.php b/www/paamelding/index.php index 2cda8b0..16524e9 100644 --- a/www/paamelding/index.php +++ b/www/paamelding/index.php @@ -57,7 +57,7 @@ if (isset($_SESSION['userdata'])) { // if logged in with feide
    diff --git a/www/prosjekt/edit.php b/www/prosjekt/edit.php index cf0e18a..84bfdd2 100644 --- a/www/prosjekt/edit.php +++ b/www/prosjekt/edit.php @@ -57,7 +57,7 @@ if($new == 0){
    diff --git a/www/prosjekt/index.php b/www/prosjekt/index.php index 6e585ae..04a360c 100644 --- a/www/prosjekt/index.php +++ b/www/prosjekt/index.php @@ -22,7 +22,7 @@ $projects = $projectManager->getAll();