Wallos v0.9

This commit is contained in:
ellite
2023-10-05 22:39:37 +02:00
commit 63ce5b099a
166 changed files with 6337 additions and 0 deletions
+68
View File
@@ -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();
}
}
?>
+6
View File
@@ -0,0 +1,6 @@
<?php
$query = "SELECT COUNT(*) as count FROM user";
$result = $db->query($query);
$row = $result->fetchArray(SQLITE3_ASSOC);
$userCount = $row['count'];
?>
+13
View File
@@ -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();
?>
+11
View File
@@ -0,0 +1,11 @@
<?php
$databaseFile = '../../db/wallos.db';
$db = new SQLite3($databaseFile);
$db->busyTimeout(5000);
if (!$db) {
die('Connection to the database failed.');
}
?>
+11
View File
@@ -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.');
}
?>
+28
View File
@@ -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>
+51
View File
@@ -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;
}
?>
+60
View File
@@ -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>
+100
View File
@@ -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'];
?>