From 6088788d3207f5d63a84888b1404a000313107e7 Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Fri, 31 Mar 2017 18:09:23 +0200 Subject: [PATCH 1/8] Design transactieoverzicht --- src/bootstrap.php | 3 ++ templates/transacties.phtml | 58 +++++++++++++++++++++++-------------- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/bootstrap.php b/src/bootstrap.php index b753261..61f7fa9 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -21,6 +21,9 @@ session_start(); // Get the Slim framework settings $settings = require __DIR__ . '/settings.php'; +// Set Locale +setlocale(LC_MONETARY, 'nl_NL.UTF-8'); + // Create the Slim application object with the settings /** * ============== diff --git a/templates/transacties.phtml b/templates/transacties.phtml index 852c0e3..b902d07 100644 --- a/templates/transacties.phtml +++ b/templates/transacties.phtml @@ -3,42 +3,58 @@ + Fout: niet jouw eigen rekening. -Nieuwe overboeking

-Saldo:
+ + +
+
+
+
+ IBAN/rekeningnummer
+

+
+
Saldo
+

+
+
+ +
+
- + "; - echo ""; - echo "\n"; - echo "\n"; - if($transactie['van'] === $rekening['iban']){ - echo "\n"; - echo "\n"; - }else{ - echo "\n"; - echo "\n"; - } - echo "\n"; - echo ""; -} -?> + if (!isset($transactie['omschrijving'])) { + $transactie['omschrijving'] = ""; + } + echo ""; + echo ""; + echo "\n"; + echo "\n"; + + if ($transactie['van'] === $rekening['iban']) { + echo "\n"; + echo "\n"; + } else { + echo "\n"; + echo "\n"; + } + + echo "\n"; + echo ""; + } ?>
Datum Type OmschrijvingIBANTegenrekening AF/BIJ Bedrag
" . $transactie['type'] . "" . $transactie['omschrijving'] . "" . $transactie['naar'] . "AF" . $transactie['van'] . "BIJ€" . $transactie['bedrag'] . "
" . $transactie['type'] . "" . $transactie['omschrijving'] . "" . $transactie['naar'] . "AF" . $transactie['van'] . "BIJ" . money_format('%(#1n', $transactie['bedrag']) . "
Date: Fri, 31 Mar 2017 18:13:52 +0200 Subject: [PATCH 2/8] Fix transactieoverzicht --- src/Application/Transacties.php | 4 ++-- templates/transacties.phtml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Application/Transacties.php b/src/Application/Transacties.php index f178d43..62549d5 100644 --- a/src/Application/Transacties.php +++ b/src/Application/Transacties.php @@ -40,7 +40,7 @@ class Transacties } if (!$rekening) { return $this->renderer->render($response, 'transacties.phtml', [ - 'klant' => $klant, + 'header' => Header::getHeaderData(), 'rekening' => false ]); } @@ -61,7 +61,7 @@ class Transacties return $this->renderer->render($response, 'transacties.phtml', [ 'header' => Header::getHeaderData(), 'rekening' => $rekening, - 'transacties' => $returnArray + 'transacties' => $returnArray ]); })->add(new Auth\Middleware()); } diff --git a/templates/transacties.phtml b/templates/transacties.phtml index b902d07..63936a7 100644 --- a/templates/transacties.phtml +++ b/templates/transacties.phtml @@ -4,7 +4,7 @@ if (!$rekening) { ?> -Fout: niet jouw eigen rekening. + Date: Fri, 31 Mar 2017 18:22:04 +0200 Subject: [PATCH 3/8] Main final design touches --- assets/css/main.css | 14 +++++++++++++- templates/index.phtml | 34 ++++++++++++++-------------------- templates/transacties.phtml | 12 ++++++++---- 3 files changed, 35 insertions(+), 25 deletions(-) diff --git a/assets/css/main.css b/assets/css/main.css index 6ef0522..ac7ce0d 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -45,10 +45,22 @@ ul.nv { /** Index **/ .clickable { cursor: pointer; + color: #333; } .clickable:hover { - background: #0094ff; + text-decoration: none; + color: #333; +} + +.clickable:hover > div { + background: #eaeaea; +} + +.big { + font-size: 24px; + color: #0094ff; + font-weight: 600; } /** Footer **/ diff --git a/templates/index.phtml b/templates/index.phtml index f18ad5c..75d62af 100644 --- a/templates/index.phtml +++ b/templates/index.phtml @@ -1,25 +1,19 @@ - - - - - - - - - - - - - - - Mijn rekeningenNieuwe overboeking - } - ?> -
IBANSaldoRekeningtypeRente
+ +
+
+

+

+
+
+ diff --git a/templates/transacties.phtml b/templates/transacties.phtml index 63936a7..87974b1 100644 --- a/templates/transacties.phtml +++ b/templates/transacties.phtml @@ -14,13 +14,17 @@ if (!$rekening) {
-
+
IBAN/rekeningnummer

-
Saldo
-

-
+ +
Rentetarief
+

%

+
+
Saldo
+

+
From 87907bb63377d0ac797a778dfafdf90d11d86e24 Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Fri, 31 Mar 2017 18:38:17 +0200 Subject: [PATCH 4/8] Changed codes from ING non-universal format to a Inforbank specific format (with explanation) --- src/Application/Overboeking.php | 2 +- templates/transacties.phtml | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Application/Overboeking.php b/src/Application/Overboeking.php index a201280..fe07790 100644 --- a/src/Application/Overboeking.php +++ b/src/Application/Overboeking.php @@ -82,7 +82,7 @@ class Overboeking "van" => $vanRekening['nr'], "naar" => $naarRekeningnr, "bedrag" => $bedrag, - "type" => "GT" //GT staat voor internetbankieren + "type" => "bg" //bg staat voor internetbankieren ]); //TODO update saldo diff --git a/templates/transacties.phtml b/templates/transacties.phtml index 87974b1..1eb0239 100644 --- a/templates/transacties.phtml +++ b/templates/transacties.phtml @@ -32,7 +32,7 @@ if (!$rekening) { - + @@ -60,6 +60,8 @@ foreach ($transacties as $transactie) { echo ""; } ?>
DatumTypeCode Omschrijving Tegenrekening AF/BIJ
+
+ba = betaalautomaat, bg = bankgiro/SEPA opdracht, id = Inforbank Direct Online Betalen (iDeal), sp = spoedbetaling Date: Fri, 31 Mar 2017 18:43:23 +0200 Subject: [PATCH 5/8] Fixed locale bug with timezones --- src/bootstrap.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bootstrap.php b/src/bootstrap.php index 61f7fa9..1d5b28b 100644 --- a/src/bootstrap.php +++ b/src/bootstrap.php @@ -23,6 +23,7 @@ $settings = require __DIR__ . '/settings.php'; // Set Locale setlocale(LC_MONETARY, 'nl_NL.UTF-8'); +date_default_timezone_set('Europe/Amsterdam'); // Create the Slim application object with the settings /** From 5d998b0e33c3688b42fa216a0c3524865d2aebf4 Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Fri, 31 Mar 2017 19:03:10 +0200 Subject: [PATCH 6/8] Redesigned login screen --- assets/css/login.css | 117 ++++++++++++++++++++++++++++++++++++++ src/Application/Login.php | 9 ++- templates/login.phtml | 85 ++++++++------------------- 3 files changed, 150 insertions(+), 61 deletions(-) create mode 100644 assets/css/login.css diff --git a/assets/css/login.css b/assets/css/login.css new file mode 100644 index 0000000..83f8f38 --- /dev/null +++ b/assets/css/login.css @@ -0,0 +1,117 @@ +.appinfodiv{ + background-color: #DDDDDD; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} + +.formdiv{ + background-color: #AAAAAA; + height: 100%; + display: flex; + justify-content: center; + align-items: center; +} + +@import url(http://fonts.googleapis.com/css?family=Roboto); + +/****** LOGIN MODAL ******/ +.loginmodal-container { + padding: 30px; + max-width: 350px; + width: 100% !important; + background-color: #F7F7F7; + margin: 0 auto; + border-radius: 2px; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + overflow: hidden; + font-family: roboto; +} + +.loginmodal-container h1 { + text-align: center; + font-size: 1.8em; + font-family: roboto; +} + +.loginmodal-container input[type=submit] { + width: 100%; + display: block; + margin-bottom: 10px; + position: relative; +} + +.loginmodal-container input[type=text], input[type=password] { + height: 44px; + font-size: 16px; + width: 100%; + margin-bottom: 10px; + -webkit-appearance: none; + background: #fff; + border: 1px solid #d9d9d9; + border-top: 1px solid #c0c0c0; + padding: 0 8px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +.loginmodal-container input[type=text]:hover, input[type=password]:hover { + border: 1px solid #b9b9b9; + border-top: 1px solid #a0a0a0; + -moz-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); + box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); +} + +.loginmodal { + text-align: center; + font-size: 14px; + font-family: 'Arial', sans-serif; + font-weight: 700; + height: 36px; + padding: 0 8px; +} + +.loginmodal-submit { + border: 0px; + color: #fff; + text-shadow: 0 1px rgba(0,0,0,0.1); + background-color: #4d90fe; + padding: 17px 0px; + font-family: roboto; + font-size: 14px; +} + +.loginmodal-submit:hover { + border: 0px; + text-shadow: 0 1px rgba(0,0,0,0.3); + background-color: #357ae8; +} + +.loginmodal-container a { + text-decoration: none; + color: #666; + font-weight: 400; + text-align: center; + display: inline-block; + opacity: 0.6; + transition: opacity ease 0.5s; +} + +body{ + color: #ff6000; +} + +html, body{ + height: 100%; +} + +.logo{ + display: block; +} + +.full{ + width: 100%; + height: 100%; +} diff --git a/src/Application/Login.php b/src/Application/Login.php index 5fd620a..b2eadbe 100644 --- a/src/Application/Login.php +++ b/src/Application/Login.php @@ -16,14 +16,21 @@ namespace Inforbank\Application; use \Slim\App; use Inforbank\Application\Helper\Redirect; +use Inforbank\Proxy; class Login { public function __construct(App $app) { $app->get('/login', function ($request, $response, $args) { + $query = $request->getQueryParams(); + $error = isset($query['error']); + // Render index view - return $this->renderer->render($response, 'login.phtml', $args); + return $this->renderer->render($response, 'login.phtml', array( + 'base' => Proxy::$route->getBaseUrl() . "/", + 'error' => $error + )); }); $app->post('/login', function ($request, $response, $args) { diff --git a/templates/login.phtml b/templates/login.phtml index 6b87226..34ee8c0 100644 --- a/templates/login.phtml +++ b/templates/login.phtml @@ -2,73 +2,38 @@ - InforBank - Inloggen - + Inforbank + - +
-
- -

Welkom bij de InforBank

- Bij InforBank krijg je zelfs 10% rente op betaalrekeningen.

- Je kunt bij InforBank ook online betalen.

- BIC: INFONL2N -
-
- +
+
+ +

Welkom bij de InforBank

+ Bij InforBank krijg je zelfs 10% rente op betaalrekeningen.

+ Je kunt bij InforBank ook online betalen.

+ BIC: INFONL2N +
+
+
+

Inloggen bij de Inforbank


+ +
+ +
+ + + +
+
- - From 40b7b321ec42e9353bf1f83751bdd1af2daf9cb1 Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Fri, 31 Mar 2017 19:10:28 +0200 Subject: [PATCH 7/8] Add redirects to the login page --- src/Application/Login.php | 12 ++++++++---- templates/login.phtml | 5 +++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/Application/Login.php b/src/Application/Login.php index b2eadbe..e70e27c 100644 --- a/src/Application/Login.php +++ b/src/Application/Login.php @@ -36,17 +36,21 @@ class Login $app->post('/login', function ($request, $response, $args) { // Render index view $post = $request->getParsedBody(); + $query = $request->getQueryParams(); + $redirect = $query['redirect']; try { $resp = $this->auth->login($post['rekeningnr'], $post['pascode']); - if ($resp) { - return Redirect::create($request, $response, '/'); + if ($resp && $redirect !== "") { + return Redirect::create($request, $response, $redirect); + } elseif ($resp) { + return Redirect::create($request, $response, '/rekeningen'); } else { - return Redirect::create($request, $response, '/login?error'); + return Redirect::create($request, $response, '/login?error&redirect='.$redirect); } } catch (\Exception $e) { - return Redirect::create($request, $response, '/login?error'); + return Redirect::create($request, $response, '/login?error&redirect='.$redirect); } }); diff --git a/templates/login.phtml b/templates/login.phtml index 34ee8c0..1b3c39e 100644 --- a/templates/login.phtml +++ b/templates/login.phtml @@ -26,8 +26,9 @@
- +
From 6674c9e80004209f09505657df2cd41f4e1d277c Mon Sep 17 00:00:00 2001 From: Christiaan Goossens Date: Fri, 31 Mar 2017 17:17:32 +0000 Subject: [PATCH 8/8] Replace logo.png --- assets/logo.png | Bin 2976 -> 3600 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/logo.png b/assets/logo.png index 1a51ba0f72ff550226b5280a4a7da6b67424475c..0be8b575587717a8bd14fa759a4083f5f8b80040 100644 GIT binary patch literal 3600 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