Wallos v0.9
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
session_start();
|
||||
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] === true) {
|
||||
$username = $_SESSION['username'];
|
||||
$sql = "SELECT * FROM user WHERE username = :username";
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->bindValue(':username', $username, SQLITE3_TEXT);
|
||||
$result = $stmt->execute();
|
||||
$userData = $result->fetchArray(SQLITE3_ASSOC);
|
||||
if ($userData['avatar'] == "") {
|
||||
$userData['avatar'] = "0";
|
||||
}
|
||||
} else {
|
||||
|
||||
if (isset($_COOKIE['wallos_login'])) {
|
||||
$cookie = explode('|', $_COOKIE['wallos_login'], 2) ;
|
||||
$username = $cookie[0];
|
||||
$token = $cookie[1];
|
||||
|
||||
$sql = "SELECT * FROM user WHERE username = :username";
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->bindValue(':username', $username, SQLITE3_TEXT);
|
||||
$result = $stmt->execute();
|
||||
|
||||
if ($result) {
|
||||
$userData = $result->fetchArray(SQLITE3_ASSOC);
|
||||
if (!isset($userData['id'])) {
|
||||
$db->close();
|
||||
header("Location: logout.php");
|
||||
exit();
|
||||
}
|
||||
|
||||
if ($userData['avatar'] == "") {
|
||||
$userData['avatar'] = "0";
|
||||
}
|
||||
$userId = $userData['id'];
|
||||
$main_currency = $userData['main_currency'];
|
||||
$sql = "SELECT * FROM login_tokens WHERE user_id = ? AND token = ?";
|
||||
$stmt = $db->prepare($sql);
|
||||
$stmt->bindParam(1, $userId, SQLITE3_TEXT);
|
||||
$stmt->bindParam(2, $token, SQLITE3_TEXT);
|
||||
$result = $stmt->execute();
|
||||
$row = $result->fetchArray(SQLITE3_ASSOC);
|
||||
|
||||
if ($row != false) {
|
||||
$_SESSION['username'] = $username;
|
||||
$_SESSION['token'] = $token;
|
||||
$_SESSION['loggedin'] = true;
|
||||
$_SESSION['main_currency'] = $main_currency;
|
||||
} else {
|
||||
$db->close();
|
||||
header("Location: logout.php");
|
||||
exit();
|
||||
}
|
||||
} else {
|
||||
$db->close();
|
||||
header("Location: logout.php");
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
$db->close();
|
||||
header("Location: login.php");
|
||||
exit();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
$query = "SELECT COUNT(*) as count FROM user";
|
||||
$result = $db->query($query);
|
||||
$row = $result->fetchArray(SQLITE3_ASSOC);
|
||||
$userCount = $row['count'];
|
||||
?>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
$databaseFile = 'db/wallos.db';
|
||||
|
||||
$db = new SQLite3($databaseFile);
|
||||
$db->busyTimeout(5000);
|
||||
|
||||
if (!$db) {
|
||||
die('Connection to the database failed.');
|
||||
}
|
||||
|
||||
// $db->close();
|
||||
?>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
$databaseFile = '../../db/wallos.db';
|
||||
$db = new SQLite3($databaseFile);
|
||||
$db->busyTimeout(5000);
|
||||
|
||||
if (!$db) {
|
||||
die('Connection to the database failed.');
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
$databaseFile = '/var/www/html/db/wallos.db';
|
||||
$db = new SQLite3($databaseFile);
|
||||
$db->busyTimeout(5000);
|
||||
|
||||
if (!$db) {
|
||||
die('Connection to the database failed.');
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,28 @@
|
||||
</main>
|
||||
|
||||
<div class="toast" id="errorToast">
|
||||
<div class="toast-content">
|
||||
<i class="fas fa-solid fa-x toast-icon error"></i>
|
||||
<div class="message">
|
||||
<span class="text text-1">Error</span>
|
||||
<span class="text text-2 errorMessage"></span>
|
||||
</div>
|
||||
</div>
|
||||
<i class="fa-solid fa-xmark close close-error"></i>
|
||||
<div class="progress error"></div>
|
||||
</div>
|
||||
|
||||
<div class="toast" id="successToast">
|
||||
<div class="toast-content">
|
||||
<i class="fas fa-solid fa-check toast-icon success"></i>
|
||||
<div class="message">
|
||||
<span class="text text-1">Success</span>
|
||||
<span class="text text-2 successMessage"></span>
|
||||
</div>
|
||||
</div>
|
||||
<i class="fa-solid fa-xmark close close-success"></i>
|
||||
<div class="progress success"></div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
$currencies = array();
|
||||
$query = "SELECT * FROM currencies";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$currencyId = $row['id'];
|
||||
$currencies[$currencyId] = $row;
|
||||
}
|
||||
|
||||
$members = array();
|
||||
$query = "SELECT * FROM household";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$memberId = $row['id'];
|
||||
$members[$memberId] = $row;
|
||||
}
|
||||
|
||||
$payment_methods = array();
|
||||
$query = "SELECT * FROM payment_methods";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$payment_methodId = $row['id'];
|
||||
$payment_methods[$payment_methodId] = $row;
|
||||
}
|
||||
|
||||
$categories = array();
|
||||
$query = "SELECT * FROM categories";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$categoryId = $row['id'];
|
||||
$categories[$categoryId] = $row;
|
||||
}
|
||||
|
||||
$cycles = array();
|
||||
$query = "SELECT * FROM cycles";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$cycleId = $row['id'];
|
||||
$cycles[$cycleId] = $row;
|
||||
}
|
||||
|
||||
$frequencies = array();
|
||||
$query = "SELECT * FROM frequencies";
|
||||
$result = $db->query($query);
|
||||
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||
$frequencyId = $row['id'];
|
||||
$frequencies[$frequencyId] = $row;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
require_once 'connect.php';
|
||||
require_once 'checkuser.php';
|
||||
require_once 'checksession.php';
|
||||
|
||||
if ($userCount == 0) {
|
||||
$db->close();
|
||||
header("Location: registration.php");
|
||||
exit();
|
||||
}
|
||||
|
||||
$theme = "light";
|
||||
if (isset($_COOKIE['theme'])) {
|
||||
$theme = $_COOKIE['theme'];
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<title>Wallos - Subscription Tracker</title>
|
||||
<link rel="icon" type="image/png" href="images/icon/favicon.ico" sizes="16x16">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="images/icon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="images/icon/site.webmanifest">
|
||||
<link rel="stylesheet" href="styles/styles.css">
|
||||
<link rel="stylesheet" href="styles/dark-theme.css" id="dark-theme" <?= $theme == "light" ? "disabled" : "" ?>>
|
||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Barlow:300,400,500,600,700">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">
|
||||
<script type="text/javascript" src="scripts/common.js"></script>
|
||||
<script type="text/javascript">
|
||||
window.theme = "<?= $theme ?>";
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="contain">
|
||||
<div class="logo">
|
||||
<a href="/">
|
||||
<div class="logo-image"></div>
|
||||
</a>
|
||||
</div>
|
||||
<nav>
|
||||
<div class="dropdown">
|
||||
<button class="dropbtn" onClick="toggleDropdown()">
|
||||
<img src="images/avatars/<?= $userData['avatar'] ?>.svg" alt="me" id="avatar">
|
||||
<span id="user"><?= $username ?></span>
|
||||
</button>
|
||||
<div class="dropdown-content">
|
||||
<a href="settings.php"><i class="fa-solid fa-gear"></i>Settings</a>
|
||||
<a href="stats.php"><i class="fa-solid fa-chart-simple"></i>Stats</a>
|
||||
<a href="logout.php"><i class="fa-solid fa-arrow-right-from-bracket"></i>Logout</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
function getBillingCycle($cycle, $frequency) {
|
||||
switch ($cycle) {
|
||||
case 1:
|
||||
return $frequency == 1 ? "Daily" : $frequency . " days";
|
||||
break;
|
||||
case 2:
|
||||
return $frequency == 1 ? "Weekly" : $frequency . " weeks";
|
||||
break;
|
||||
case 3:
|
||||
return $frequency == 1 ? "Monthly" : $frequency . " months";
|
||||
break;
|
||||
case 4:
|
||||
return $frequency == 1 ? "Yearly" : $frequency . " years";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function getPricePerMonth($cycle, $frequency, $price) {
|
||||
switch ($cycle) {
|
||||
case 1:
|
||||
$numberOfPaymentsPerMonth = (30 / $frequency);
|
||||
return $price * $numberOfPaymentsPerMonth;
|
||||
break;
|
||||
case 2:
|
||||
$numberOfPaymentsPerMonth = (4.35 / $frequency);
|
||||
return $price * $numberOfPaymentsPerMonth;
|
||||
break;
|
||||
case 3:
|
||||
$numberOfPaymentsPerMonth = (1 / $frequency);
|
||||
return $price * $numberOfPaymentsPerMonth;
|
||||
break;
|
||||
case 4:
|
||||
$numberOfPaymentsPerMonth = (0.083 / $frequency);
|
||||
return $price * $numberOfPaymentsPerMonth;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getPriceConverted($price, $currency, $database) {
|
||||
$query = "SELECT rate FROM currencies WHERE id = :currency";
|
||||
$stmt = $database->prepare($query);
|
||||
$stmt->bindParam(':currency', $currency, SQLITE3_INTEGER);
|
||||
$result = $stmt->execute();
|
||||
|
||||
$exchangeRate = $result->fetchArray(SQLITE3_ASSOC);
|
||||
if ($exchangeRate === false) {
|
||||
return $price;
|
||||
} else {
|
||||
$fromRate = $exchangeRate['rate'];
|
||||
return number_format($price * $fromRate, 2);
|
||||
}
|
||||
}
|
||||
|
||||
function printSubscriptons($subscriptions, $sort, $categories) {
|
||||
if ($sort === "price") {
|
||||
usort($subscriptions, function($a, $b) {
|
||||
return $a['price'] < $b['price'] ? 1 : -1;
|
||||
});
|
||||
}
|
||||
|
||||
$currentCategory = 0;
|
||||
foreach ($subscriptions as $subscription) {
|
||||
if ($sort == "category_id" && $subscription['category_id'] != $currentCategory) {
|
||||
?>
|
||||
<div class="subscription-list-title">
|
||||
<?= $categories[$subscription['category_id']]['name'] ?>
|
||||
</div>
|
||||
<?php
|
||||
$currentCategory = $subscription['category_id'];
|
||||
}
|
||||
?>
|
||||
<div class="subscription">
|
||||
<span class="logo <?= $subscription['hidelogo'] ?>"><img src="<?= $subscription['logo'] ?>"></span>
|
||||
<span class="name <?= $subscription['hidename'] ?> <?= $subscription['resizename'] ?>"><?= $subscription['name'] ?></span>
|
||||
<span class="cycle"><?= $subscription['billing_cycle'] ?></span>
|
||||
<span class="next"><?= $subscription['next_payment'] ?></span>
|
||||
<span class="price">
|
||||
<img src="<?= $subscription['payment_method_icon'] ?>" title="Payment Method: <?= $subscription['payment_method_name'] ?>"/>
|
||||
<?= $subscription['price'] ?><?= $subscription['currency'] ?>
|
||||
</span>
|
||||
<span class="actions">
|
||||
<button class="image-button medium" onClick="openEditSubscription(<?= $subscription['id'] ?>)" name="edit">
|
||||
<img src="images/siteicons/edit.png" title="Edit subscription">
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
|
||||
$query = "SELECT main_currency FROM user WHERE id = 1";
|
||||
$stmt = $db->prepare($query);
|
||||
$result = $stmt->execute();
|
||||
$row = $result->fetchArray(SQLITE3_ASSOC);
|
||||
$mainCurrencyId = $row['main_currency'];
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user