bank/
wesweb01/bank/manage.php1 lines
<?php
# Sida för att hantera (bank)konton.
require "modules/session.php";
require "modules/page.php";
Session::Init();
Session::RedirectIfNotLoggedIn();
$user = Session::GetUser();
function get_selected_account(): ?Account
# När man klickar på hantera bankkonto från startsidan kommer man hit. Då finns en GET query i länken
# som markerar vilket konto man vill hantera. Denna funktion hämtar ett konto-objekt utifrån det.
{
global $user;
if (!isset($_GET["account"]))
return null;
return $user->getAccountFromId($_GET["account"]);
}
$selectedAccount = get_selected_account();
if (!$selectedAccount) {
# Skickar tillbaka till startsidan ifall kontot ej finns.
header("location: index.php");
exit();
}
if (isset($_GET["action"])) {
switch ($_GET["action"]) {
case "delete-account":
# Sker ifall man vill radera sitt konto.
# Hade likt skapa konto hällre använt POST, men då hade jag behövt använda formulär.
global $user, $selectedAccount;
if ($selectedAccount->mainAccount) # Ser till att man inte kan ta bort huvudkontot.
break;
$user->logInternalTransaction( # Överför alla pengar från kontot som tas bort till huvudkontot.
$selectedAccount,
$user->getMainAccount(),
$selectedAccount->getBalance(),
"Transaktion från raderat konto"
);
$selectedAccount->active = false; # Kontot tas inte faktiskt bort, utan inaktiveras bara.
$user->saveData();
header("location: index.php"); # Efter det skickas man tillbaka till startsidan.
exit();
default:
}
}
if (isset($_POST["account-name"])) {
# Kollar ifall användaren har begärt att ändra namn på kontot.
if (strlen($_POST["account-name"]) > 0) { # Kollar så att det inte är en tom sträng som skickats.
$selectedAccount->name = $_POST["account-name"];
$user->saveData();
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Banken - Hantera konto</title>
<link rel="stylesheet" type="text/css" href="../css/materialize.css">
<script defer type="text/javascript" src="../js/materialize.js"></script>
<script defer>
// Kod kopierad från Materialize (CSS framework) dokumentering för att få modals att fungera.
var options = {};
document.addEventListener('DOMContentLoaded', function () {
var elems = document.querySelectorAll('.modal');
var instances = M.Modal.init(elems, options);
});
</script>
</head>
<body>
<?php print_navbar() ?>
<div class="container">
<div class="row">
<h1>Hantera konto</h1>
<div class="col s12 m6">
<div class="card grey lighten-3">
<div class="card-content">
<span class="card-title">
<b>Kontodetaljer</b>
</span>
<div class="card-action">
<div class="row">
<form method="POST">
<div class="col s6">
<p>
<label for="account-name">Kontonamn: </label>
<?php echo "<input id=\"account-name\" type=\"text\" name=\"account-name\" class=\"validate\" required
value=\"{$selectedAccount->name}\">";
# Skriver ut kontonamnet i formulärinputen.
?>
</p>
<p>
<input class="btn blue-grey darken" type="submit" value="Spara">
</p>
</div>
</form>
</div>
<div class="row">
<p class="col s4">
<label for="username">Saldo: </label>
<?php
echo "<input id=\"username\" type=\"text\" name=\"username\" readonly value=\"{$selectedAccount->getBalance()}\">";
# Skriver ut saldot för kontot.
?>
</p>
</div>
</div>
</div>
</div>
</div>
<div class="col s12 m6">
<div class="card grey lighten-3">
<div class="card-content">
<span class="card-title"><b>Åtgärder</b></span>
<div class="card-action">
<div class="row">
<a class="btn red lighten-1 modal-trigger <?php if ($selectedAccount->mainAccount)
echo "disabled";
# Stänger av raderaknappen ifall det är huvudkontot man hanterar.
?>" href="#delete-account">Radera
konto</a>
<div id="delete-account" class="modal">
<div class="modal-content">
<h4>Radera Konto</h4>
<p>När du raderar ett konto kommer du inte längre kunna komma åt kontot.<br>Alla
pengar kommer automatiskt överföras till ditt primära bankkonto.<br><br>
Är du säker på att du vill göra detta?</p>
</div>
<div class="modal-footer">
<a href="#!" class="modal-close btn blue-grey darken">Avbryt</a>
<a href="?account=<?php echo $_GET["account"]; ?>&action=delete-account"
class="modal-close btn red lighten-1">Ta
bort konto</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col s12 m6">
<div class="card grey lighten-3">
<div class="card-content">
<span class="card-title"><b>Transaktionshistorik</b></span>
<div class="card-action">
<ul class="collection ">
<?php
# Här skrivs alla transaktioner ut.
foreach (array_reverse($selectedAccount->transactions) as $i => $transaction) {
$colorClass = $transaction->sum > 0 ? "green-text" : "red-text"; # Skrivs i grönt ifall
# pengar har tagits emot och rött ifall pengar har skickats.
$other = "";
if (isset($transaction->otherId)) { # Skriver ut andra kontot som pengarna skickades från/till.
$account = $user->getAccountFromId($transaction->otherId);
$accountName = $account ? $account->name : "<i>{$transaction->otherId}</i>";
$type = $transaction->sum > 0 ? "Från" : "Till";
$other = "<p>{$type}: {$accountName}</p>";
}
$colorChange = $i % 2 == 0 ? 2 : 1; # Varierar bakgrunden mellan ljus- och mörkgrå.
echo "<li class=\"collection-item grey lighten-{$colorChange} row\">
<h6 class=\"right {$colorClass}\"><b>{$transaction->sum}</b></h6>
<p><b>{$transaction->name}</b></p>
<p>Datum: {$transaction->date}</p>
{$other}
</li>"; # Här skrivs själva knappen ut.
}
?>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>