Sixtens hemsida Uppgifter Blogg Om

Bankapplikation

Gå till sida

Källkod

bank/

logout.php

transfer.php

index.php

login.php

manage.php

signup.php

change_password.php

modules/

user.php

page.php

session.php

utility.php

users/

hjk.json

sixten2.json

sixten.json

wesweb01/bank/manage.php

1 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 "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 "Från" "Till";
                                        
$other "<p>{$type}{$accountName}</p>";
                                    }
                                    
$colorChange $i == 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>