save
This commit is contained in:
parent
9b15ac9fd3
commit
27df1a73b5
28 changed files with 1695 additions and 247 deletions
|
@ -4,6 +4,7 @@ namespace app\controllers;
|
|||
use app\models\addresses;
|
||||
use app\models\users;
|
||||
use app\models\user_addresses;
|
||||
use app\models\magic_links;
|
||||
|
||||
class account
|
||||
{
|
||||
|
@ -12,8 +13,8 @@ class account
|
|||
if (!isset($_SESSION['user_id'])) {
|
||||
header('Location: /account/login');
|
||||
}
|
||||
$email = $_SESSION['user_email'];
|
||||
$user = users::getByEmail($email);
|
||||
$user_id = $_SESSION['user_id'];
|
||||
$user = users::getById($user_id);
|
||||
$default_shipping = null;
|
||||
$default_billing = null;
|
||||
$ship_addrs = [];
|
||||
|
@ -60,8 +61,8 @@ class account
|
|||
$bill_id = addresses::add(
|
||||
$bill['name'],
|
||||
$bill['company'],
|
||||
$bill['street'],
|
||||
$bill['boxapt'],
|
||||
$bill['addressLine1'],
|
||||
$bill['addressLine2'],
|
||||
$bill['city'],
|
||||
$bill['state'],
|
||||
$bill['zip'],
|
||||
|
@ -76,8 +77,8 @@ class account
|
|||
$_SESSION['success'] = "Billing address saved!";
|
||||
header('Location: /account/billing');
|
||||
}
|
||||
$email = $_SESSION['user_email'];
|
||||
$user = users::getByEmail($email);
|
||||
$user_id = $_SESSION['user_id'];
|
||||
$user = users::getById($user_id);
|
||||
$default_billing = null;
|
||||
$bill_addrs = [];
|
||||
$bill_addresses = user_addresses::getBillingByUserId($_SESSION['user_id']);
|
||||
|
@ -115,8 +116,42 @@ class account
|
|||
header('Location: /account');
|
||||
}
|
||||
}
|
||||
|
||||
public static function email()
|
||||
{
|
||||
$user_id = $_SESSION['user_id'] ?? null;
|
||||
if (empty($user_id)){
|
||||
header('Location: /account/login');
|
||||
}
|
||||
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);
|
||||
users::updateReplaceEmailTokenById($user_id, $token);
|
||||
header('Location: /account');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function login($defaults)
|
||||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
$email = $_POST['email'] ?? false;
|
||||
if (empty($email)) {
|
||||
$_SESSION['error'] = "Enter your email to get a login link";
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
} else {
|
||||
$token = magic_links::add($email, null);
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
if (isset($_SESSION['user_id'])) {
|
||||
header('Location: /account');
|
||||
}
|
||||
|
@ -131,12 +166,14 @@ class account
|
|||
]
|
||||
]));
|
||||
}
|
||||
|
||||
public static function logout()
|
||||
{
|
||||
session_unset();
|
||||
session_destroy();
|
||||
header('Location: /');
|
||||
}
|
||||
|
||||
public static function orders($defaults)
|
||||
{
|
||||
if (!isset($_SESSION['user_id'])) {
|
||||
|
@ -185,8 +222,8 @@ class account
|
|||
$ship_id = addresses::add(
|
||||
$ship['name'],
|
||||
$ship['company'],
|
||||
$ship['street'],
|
||||
$ship['boxapt'],
|
||||
$ship['addressLine1'],
|
||||
$ship['addressLine2'],
|
||||
$ship['city'],
|
||||
$ship['state'],
|
||||
$ship['zip'],
|
||||
|
@ -201,8 +238,8 @@ class account
|
|||
$_SESSION['success'] = "Shipping address saved!";
|
||||
header('Location: /account/shipping');
|
||||
}
|
||||
$email = $_SESSION['user_email'];
|
||||
$user = users::getByEmail($email);
|
||||
$user_id = $_SESSION['user_id'];
|
||||
$user = users::getById($user_id);
|
||||
$addresses = user_addresses::getShippingByUserId($user['id']);
|
||||
$default_shipping = null;
|
||||
$ship_addrs = [];
|
||||
|
@ -235,27 +272,30 @@ class account
|
|||
{
|
||||
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
||||
$email = $_POST['email'];
|
||||
if (empty($email)) {
|
||||
$_SESSION['error'] = 'Email is required.';
|
||||
}
|
||||
$existingUser = users::getByEmail($email);
|
||||
if ($existingUser) {
|
||||
$_SESSION['error'] = 'Email already exists. Please choose a different email or log in.';
|
||||
$_SESSION['last_post'] = $_POST;
|
||||
header('Location: /account/signup');
|
||||
exit;
|
||||
}
|
||||
if (empty($email)) {
|
||||
$_SESSION['error'] = 'Email is required.';
|
||||
}
|
||||
if (isset($_SESSION['error'])) {
|
||||
$useShipping = $_POST['use_shipping'] ?? false;
|
||||
$ship = addresses::validatePost("shipping");
|
||||
if (!isset($ship['name'])){
|
||||
$_SESSION['error'] = "Shipping address verification failed. Check your entry for errors.";
|
||||
$_SESSION['last_post'] = $_POST;
|
||||
header('Location: /account/signup');
|
||||
}
|
||||
$useShipping = $_POST['use_shipping'] ?? false;
|
||||
if ($useShipping) {
|
||||
$ship = addresses::validatePost("shipping");
|
||||
} else {
|
||||
$ship = addresses::validatePost("shipping");
|
||||
if (!$useShipping) {
|
||||
$bill = addresses::validatePost("billing");
|
||||
}
|
||||
if (empty($email)) {
|
||||
$_SESSION['error'] = 'Email is required.';
|
||||
if (!isset($bill['name'])){
|
||||
$_SESSION['error'] = "Billing address verification failed. Check your entry for errors.";
|
||||
$_SESSION['last_post'] = $_POST;
|
||||
header('Location: /account/signup');
|
||||
}
|
||||
}
|
||||
if (isset($_SESSION['error'])) {
|
||||
$_SESSION['last_post'] = $_POST;
|
||||
|
@ -264,8 +304,8 @@ class account
|
|||
$ship_id = addresses::add(
|
||||
$ship['name'],
|
||||
$ship['company'],
|
||||
$ship['street'],
|
||||
$ship['boxapt'],
|
||||
$ship['addressLine1'],
|
||||
$ship['addressLine2'],
|
||||
$ship['city'],
|
||||
$ship['state'],
|
||||
$ship['zip'],
|
||||
|
@ -278,8 +318,8 @@ class account
|
|||
$bill_id = addresses::add(
|
||||
$bill['name'],
|
||||
$bill['company'],
|
||||
$bill['street'],
|
||||
$bill['boxapt'],
|
||||
$bill['addressLine1'],
|
||||
$bill['addressLine2'],
|
||||
$bill['city'],
|
||||
$bill['state'],
|
||||
$bill['zip'],
|
||||
|
|
|
@ -8,60 +8,45 @@ class magic_link
|
|||
{
|
||||
public static function index()
|
||||
{
|
||||
$email = $_GET['email'] ?? null;
|
||||
$token = $_GET['token'] ?? null;
|
||||
$signup = $_GET['signup'] ?? null;
|
||||
|
||||
if (empty($email) && empty($token)) {
|
||||
$_SESSION['error'] = "Enter your email to get a login link";
|
||||
if (!$token) {
|
||||
$_SESSION['error'] = "Invalid or expired link.";
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($email && empty($token) && empty($signup)) {
|
||||
$link = magic_links::add(email: $email);
|
||||
$subject = "Your Magic Sign-In Link";
|
||||
$message = "Copy and paste the link into your browser: $link";
|
||||
$HTML_message = "Click the link to sign in: <a href='$link'>$link</a>";
|
||||
app::send_mail(to: $email, from: $_ENV['SMTP_FROM'], from_name: $_ENV['APP_NAME'], subject: $subject, message: $message, HTML_message: $HTML_message);
|
||||
$_SESSION['success'] = 'Link sent to your email!';
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($email && empty($token) && $signup == "1") {
|
||||
$link = magic_links::add(email: $email);
|
||||
$subject = "Your Magic Sign-In Link";
|
||||
$message = "Copy and paste the link into your browser: $link";
|
||||
$HTML_message = "Click the link to sign in: <a href='$link'>$link</a>";
|
||||
app::send_mail(to: $email, from: $_ENV['SMTP_FROM'], from_name: $_ENV['APP_NAME'], subject: $subject, message: $message, HTML_message: $HTML_message);
|
||||
$_SESSION['success'] = 'Account created! Please check your email inbox for the verification link.';
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($token && empty($email)) {
|
||||
$link = magic_links::validate(token: $token);
|
||||
|
||||
} else {
|
||||
$link = magic_links::validateToken(token: $token);
|
||||
if (!$link) {
|
||||
$_SESSION['error'] = "Invalid or expired link.";
|
||||
header('Location: /account/login');
|
||||
exit;
|
||||
}
|
||||
// handle signup vs. login
|
||||
$user = users::getByEmail($link['email']);
|
||||
if ($user) {
|
||||
$user = $link['user_id'] ? users::getById($link['user_id']) : users::getByEmail($link['email']);
|
||||
if ($user) { // user with this email exists, log them in
|
||||
$_SESSION['user_email'] = $link['email'];
|
||||
$_SESSION['user_id'] = $user['id'];
|
||||
if (!$user['verified']) {
|
||||
users::verify($link['email']);
|
||||
}
|
||||
header('Location: /account');
|
||||
} else {
|
||||
// used to pre-fill email signup field
|
||||
$_SESSION['user_email'] = $link['email'];
|
||||
header('Location: /account/signup');
|
||||
exit;
|
||||
} else { // no users with this email
|
||||
$user_replacing_email = users::getByReplaceEmailToken($token);
|
||||
if ($user_replacing_email) { // user is replacing their email
|
||||
$user_id = $user_replacing_email['id'];
|
||||
users::updateEmailById($user_id, $link['email']);
|
||||
$_SESSION['user_email'] = $link['email'];
|
||||
$_SESSION['user_id'] = $user_id;
|
||||
if (!$user['verified']) {
|
||||
users::verify($link['email']);
|
||||
}
|
||||
header('Location: /account');
|
||||
exit;
|
||||
} else { // new user signup
|
||||
$_SESSION['user_email'] = $link['email'];
|
||||
header('Location: /account/signup');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue