This commit is contained in:
count-null 2025-02-27 16:38:19 -05:00
parent a0cb5fb6b0
commit e435d32588
88 changed files with 1781 additions and 1383 deletions

View file

@ -2,64 +2,40 @@
namespace app\controllers;
use app\models\addresses;
use app\models\users;
use app\models\emails;
use app\models\user_addresses;
use app\models\magic_links;
use app\models\users;
class account
{
public static function index($defaults): void
{
if (!isset($_SESSION['user_id'])) {
header('Location: /account/login');
}
$user_id = $_SESSION['user_id'];
$user = users::getById($user_id);
$default_shipping = null;
$default_billing = null;
$ship_addrs = [];
$bill_addrs = [];
$addresses = user_addresses::getShippingByUserId($user['id']);
foreach ($addresses as $address) {
if ($address['id'] == $user['shipping_address_id']){
$default_shipping = $address;
} else {
$ship_addrs[] = $address;
}
}
$bill_addresses = user_addresses::getBillingByUserId($_SESSION['user_id']);
foreach ($bill_addresses as $addr) {
if ($addr['id'] == $user['billing_address_id']){
$default_billing = $addr;
} else {
$bill_addrs[] = $addr;
}
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
$user = users::getById($_SESSION['user_id']);
$addresses = addresses::getByUserId($_SESSION['user_id']);
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/index.twig',
'page_title' => 'Manage Account - ' . $_ENV['APP_NAME'],
'user' => $user,
'shipping' => $ship_addrs,
'billing' => $bill_addrs,
'default_shipping' => $default_shipping,
'default_billing' => $default_billing,
'breadcrumbs' => [
'page_title' => 'Manage Account - ' . $_ENV['APP_NAME'],
'user' => $user,
'addresses' => $addresses,
'breadcrumbs' => [
[
'url' => null,
'url' => null,
'title' => 'My Account',
]
]
],
],
]));
}
public static function billing($defaults)
{
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!$_SESSION['user_id']) {
http_response_code(403);
$bill = addresses::validatePost("billing_");
if (isset($bill['error'])) {
header('Location: /account/billing');
}
$bill = addresses::validatePost("billing");
$bill_id = addresses::add(
$_SESSION['user_id'],
$bill['name'],
$bill['company'],
$bill['addressLine1'],
@ -68,51 +44,34 @@ class account
$bill['state'],
$bill['zip'],
$bill['phone'],
1,
0
);
user_addresses::add(
$_SESSION['user_id'],
$bill_id
$bill['hash']
);
$_SESSION['success'] = "Billing address saved!";
header('Location: /account/billing');
}
$user_id = $_SESSION['user_id'];
$user = users::getById($user_id);
$default_billing = null;
$bill_addrs = [];
$bill_addresses = user_addresses::getBillingByUserId($_SESSION['user_id']);
foreach ($bill_addresses as $addr) {
if ($addr['id'] == $user['billing_address_id']){
$default_billing = $addr;
} else {
$bill_addrs[] = $addr;
}
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
$user = users::getById($_SESSION['user_id']);
$addresses = addresses::getByUserId($_SESSION['user_id']);
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/billing.twig',
'page_title' => 'Billing Information - ' . $_ENV['APP_NAME'],
'billing' => $bill_addrs,
'default_billing' => $default_billing,
'breadcrumbs' => [
'page_title' => 'Billing Information - ' . $_ENV['APP_NAME'],
'user' => $user,
'addresses' => $addresses,
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account'
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Billing'
]
]
'url' => null,
'title' => 'Billing',
],
],
]));
}
public static function profile()
{
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!$_SESSION['user_id']) {
http_response_code(403);
}
users::updateProfileById($_SESSION['user_id'], $_POST);
header('Location: /account');
}
@ -120,18 +79,15 @@ class account
public static function email()
{
$user_id = $_SESSION['user_id'] ?? null;
if (empty($user_id)){
header('Location: /account/login');
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$email = $_POST['email'] ?? null;
if (empty($email)) {
$_SESSION['error'] = "Enter your email to get a login link";
header('Location: /account');
exit;
} else {
$token = magic_links::add($email, $user_id);
$user_id = $_SESSION['user_id'];
$token = magic_links::add($email, $user_id);
users::updateReplaceEmailTokenById($user_id, $token);
header('Location: /account');
exit;
@ -148,8 +104,8 @@ class account
$user = $link['user_id'] ? users::getById($link['user_id']) : users::getByEmail($link['email']);
if ($user) {
$_SESSION['user_email'] = $link['email'];
$_SESSION['user_id'] = $user['id'];
if (!$user['verified']) {
$_SESSION['user_id'] = $user['id'];
if (! $user['verified']) {
users::verify($link['email']);
}
header('Location: /account');
@ -166,19 +122,55 @@ class account
}
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/verify.twig',
'page_title' => $_ENV['APP_NAME'],
'breadcrumbs' => [
'page_title' => $_ENV['APP_NAME'],
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account'
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Verify'
]
]
'url' => null,
'title' => 'Verify',
],
],
]));
}
public static function address_edit($defaults)
{
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/address/edit.twig',
'page_title' => 'Edit Address - ' . $_ENV['APP_NAME'],
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Edit Address',
],
],
]));
}
public static function address_confirm($defaults)
{
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/address/confirm.twig',
'page_title' => 'Confirm Address - ' . $_ENV['APP_NAME'],
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Confirm Address',
],
],
]));
}
@ -199,15 +191,15 @@ class account
if (isset($_SESSION['user_id'])) {
header('Location: /account');
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/login.twig',
'page_title' => 'Sign In or Create an Account!',
'breadcrumbs' => [
'page_title' => 'Sign In or Create an Account!',
'breadcrumbs' => [
[
'url' => null,
'title' => 'My Account'
'url' => null,
'title' => 'My Account',
],
]
],
]));
}
@ -220,50 +212,48 @@ class account
public static function orders($defaults)
{
if (!isset($_SESSION['user_id'])) {
header('Location: /account/login');
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/orders.twig',
'page_title' => 'View ' . $_ENV['APP_NAME'] . ' Orders',
'breadcrumbs' => [
'page_title' => 'View ' . $_ENV['APP_NAME'] . ' Orders',
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account'
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Orders'
]
]
'url' => null,
'title' => 'Orders',
],
],
]));
}
public static function returns($defaults)
{
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/returns.twig',
'page_title' => 'View ' . $_ENV['APP_NAME'] . ' Returns',
'breadcrumbs' => [
'page_title' => 'View ' . $_ENV['APP_NAME'] . ' Returns',
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account'
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Returns'
]
]
'url' => null,
'title' => 'Returns',
],
],
]));
}
public static function shipping($defaults)
{
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!$_SESSION['user_id']) {
http_response_code(403);
$ship = addresses::validatePost("shipping_");
if (isset($ship['error'])) {
header('Location: /account/shipping');
}
$ship = addresses::validatePost("shipping");
$ship_id = addresses::add(
$_SESSION['user_id'],
$ship['name'],
$ship['company'],
$ship['addressLine1'],
@ -272,43 +262,28 @@ class account
$ship['state'],
$ship['zip'],
$ship['phone'],
0,
1
);
user_addresses::add(
$_SESSION['user_id'],
$ship_id
$ship['hash']
);
$_SESSION['success'] = "Shipping address saved!";
header('Location: /account/shipping');
}
$user_id = $_SESSION['user_id'];
$user = users::getById($user_id);
$addresses = user_addresses::getShippingByUserId($user['id']);
$default_shipping = null;
$ship_addrs = [];
foreach ($addresses as $addr) {
if ($addr['id'] == $user['shipping_address_id']){
$default_shipping = $addr;
} else {
$ship_addrs[] = $addr;
}
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
$user = users::getById($_SESSION['user_id']);
$addresses = addresses::getByUserId($_SESSION['user_id']);
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/shipping.twig',
'page_title' => $_ENV['APP_NAME'] . ' Shipping',
'shipping' => $ship_addrs,
'default_shipping' => $default_shipping,
'breadcrumbs' => [
'page_title' => $_ENV['APP_NAME'] . ' Shipping',
'addresses' => $addresses,
'breadcrumbs' => [
[
'url' => '/account',
'title' => 'My Account'
'url' => '/account',
'title' => 'My Account',
],
[
'url' => null,
'title' => 'Shipping'
]
]
'url' => null,
'title' => 'Shipping',
],
],
]));
}
@ -321,22 +296,22 @@ class account
}
$existingUser = users::getByEmail($email);
if ($existingUser) {
$_SESSION['error'] = 'Email already exists. Please choose a different email or log in.';
$_SESSION['error'] = 'Email already exists. Please choose a different email or log in.';
$_SESSION['last_post'] = $_POST;
header('Location: /account/signup');
exit;
}
$useShipping = $_POST['use_shipping'] ?? false;
$ship = addresses::validatePost("shipping");
if (!isset($ship['name'])){
$_SESSION['error'] = "Shipping address verification failed. Check your entry for errors.";
$ship = addresses::validatePost("shipping_");
if (isset($ship['error'])) {
$_SESSION['error'] = "Shipping address verification failed. " . $_SESSION['error'];
$_SESSION['last_post'] = $_POST;
header('Location: /account/signup');
}
if (!$useShipping) {
$bill = addresses::validatePost("billing");
if (!isset($bill['name'])){
$_SESSION['error'] = "Billing address verification failed. Check your entry for errors.";
if (! $useShipping) {
$bill = addresses::validatePost("billing_");
if (isset($bill['error'])) {
$_SESSION['error'] = "Billing address verification failed. " . $_SESSION['error'];
$_SESSION['last_post'] = $_POST;
header('Location: /account/signup');
}
@ -346,6 +321,7 @@ class account
header('Location: /account/signup');
}
$ship_id = addresses::add(
null,
$ship['name'],
$ship['company'],
$ship['addressLine1'],
@ -354,12 +330,12 @@ class account
$ship['state'],
$ship['zip'],
$ship['phone'],
$useShipping == 'on',
1
$ship['hash']
);
$bill_id = $ship_id;
if (!$useShipping) {
if (! $useShipping) {
$bill_id = addresses::add(
null,
$bill['name'],
$bill['company'],
$bill['addressLine1'],
@ -368,14 +344,13 @@ class account
$bill['state'],
$bill['zip'],
$bill['phone'],
1,
0
$bill['hash']
);
}
$opt_in_promotional = $_POST['opt_in_promotional'] ?? false;
$verified = isset($_SESSION['user_email']);
$dark_theme = $defaults['theme'] == 'dark';
$user_id = users::add(
$verified = isset($_SESSION['user_email']);
$dark_theme = $defaults['theme'] == 'dark';
$user_id = users::add(
$email,
$ship_id,
$bill_id,
@ -384,21 +359,11 @@ class account
$dark_theme
);
emails::updateUserIdByEmail($email, $user_id);
user_addresses::add(
user_id: $user_id,
address_id: $ship_id
);
if (!$useShipping) {
user_addresses::add(
user_id: $user_id,
address_id: $bill_id
);
}
$_SESSION['user_id'] = $user_id;
if (!$verified) {
if (! $verified) {
header("Location: /magic-link?email=$email&signup=1");
exit;
}
}
header('Location: /account');
exit;
} // endif request === POST
@ -408,9 +373,9 @@ class account
exit;
}
echo $GLOBALS['twig']->render('lib/page/index.twig', array_merge($defaults, [
echo $GLOBALS['twig']->render('lib/pages/index.twig', array_merge($defaults, [
'child_template' => 'account/signup.twig',
'page_title' => 'Create an Account - ' . $_ENV['APP_NAME']
'page_title' => 'Create an Account - ' . $_ENV['APP_NAME'],
]));
}
}
}