This commit is contained in:
count-null 2025-03-04 19:43:01 -05:00
parent 662394d7c3
commit a2d5494f15
16 changed files with 303 additions and 142 deletions

View file

@ -4,6 +4,7 @@
//
use app\app;
use app\controllers\account;
use app\controllers\address;
use app\controllers\admin;
use app\controllers\cart;
use app\controllers\category;
@ -14,6 +15,7 @@ use app\controllers\lost;
use app\controllers\magic_link;
use app\controllers\support;
use app\controllers\transaction;
use app\models\user_settings;
require_once __DIR__ . '/../vendor/autoload.php';
@ -36,17 +38,25 @@ if (! isset($_SESSION['fingerprint'])) {
}
// these will be available to use in all twig templates
$user_settings = isset($_SESSION['user_id']) ? user_settings::getByUserId($_SESSION['user_id']) : null;
$theme = 'light';
if (isset($_SESSION['user_id']) && $user_settings !== null && isset($user_settings['dark_theme'])) {
$theme = $user_settings['dark_theme'] ? 'dark' : 'light';
} elseif (isset($_COOKIE["theme"])) {
$theme = $_COOKIE["theme"];
}
$defaults = [
'copyright_year' => date('Y'),
'session' => $_SESSION,
'http_host' => $_SERVER['HTTP_HOST'],
'env' => $_ENV,
'is_user' => isset($_SESSION['user_id']),
'user_settings' => $user_settings,
'is_admin' => isset($_SESSION['user_id']) && $_SESSION['user_id'] == 1,
// uses cookie-js to get the client's preferred theme
// used to conditionally deliver image assets
// or styles based on theme
'theme' => isset($_COOKIE["theme"]) ? $_COOKIE["theme"] : 'light',
'theme' => $theme,
// set your tailwind colors here for app themeing
// the idea is to avoid using colors in your templates
'colors' => require dirname(__DIR__) . '/src/colors.php',
@ -64,23 +74,25 @@ if (str_starts_with(haystack: $route, needle: '/.well-known/lnurlp/')) {
$route = '/lnurlp';
}
// Combined regex to match multiple dynamic routes in one go
if (preg_match('/^\/(transaction|user|order|product)\/([\w-]+)$/', $route, $matches)) {
// Use this controller for routes that include a model ID
if (preg_match('/^\/(address(?:\/edit|\/delete)?|transaction|user|order|quote|product|subscription|cart)\/([\w-]+)$/', $route, $matches)) {
[$full, $type, $id] = $matches;
$controllers = [
'transaction' => fn($id) => transaction::view($defaults, $id),
'user' => fn($id) => users::view($id),
'order' => fn($id) => orders::view($id),
'quote' => fn($id) => quotes::view($id),
'product' => fn($id) => products::view($id),
'subscription' => fn($id) => subscriptions::view($id),
'cart' => fn($id) => cart::index($id),
$controller = [
'address/edit' => fn($id) => address::edit($defaults, $id),
'address/delete' => fn($id) => address::delete($defaults, $id),
'transaction' => fn($id) => transaction::view($defaults, $id),
'user' => fn($id) => users::view($id),
'order' => fn($id) => orders::view($id),
'quote' => fn($id) => quotes::view($id),
'product' => fn($id) => products::view($id),
'subscription' => fn($id) => subscriptions::view($id),
'cart' => fn($id) => cart::index($id),
];
if (isset($controllers[$type])) {
$controller = $controllers[$type]($id);
if (isset($controller[$type])) {
$controller = $controller[$type]($id);
}
} else {
} else { // Use this controller for static routes
$controller = match ($route) {
'/' => home::index($defaults),
'/account/login' => account::login($defaults),
@ -95,7 +107,8 @@ if (preg_match('/^\/(transaction|user|order|product)\/([\w-]+)$/', $route, $matc
'/account/orders' => $defaults['is_user'] ? account::orders($defaults) : header('Location: /account/login'),
'/account/shipping' => $defaults['is_user'] ? account::shipping($defaults) : header('Location: /account/login'),
'/account/address/edit' => $defaults['is_user'] ? account::address_edit($defaults) : header('Location: /account/login'),
'/account/address/confirm' => $defaults['is_user'] ? account::address_confirm($defaults) : header('Location: /account/login'),
'/account/address/set-default-shipping' => $defaults['is_user'] ? account::set_default_shipping($defaults) : header('Location: /account/login'),
'/account/address/set-default-billing' => $defaults['is_user'] ? account::set_default_billing($defaults) : header('Location: /account/login'),
'/admin' => $defaults['is_admin'] ? admin::index($defaults) : lost::index($defaults),
'/admin/users' => $defaults['is_admin'] ? admin::users($defaults) : lost::index($defaults),
'/admin/orders' => $defaults['is_admin'] ? admin::orders($defaults) : lost::index($defaults),