WizdomWeb/public/index.php

90 lines
3.5 KiB
PHP

<?php
/**
* ============================================
* File: public/index.php
* Version: v1.7
* Purpose: Application entry point for Arsha one-pager with dynamic & closure route support
* Project: Wizdom Networks Website
* ============================================
*/
// ------------------------------------------------------------
// Environment & Error Configuration
// ------------------------------------------------------------
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
// ------------------------------------------------------------
// Composer Autoload & Environment Variables
// ------------------------------------------------------------
require_once __DIR__ . '/../vendor/autoload.php';
use Dotenv\Dotenv;
$dotenv = Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();
// ------------------------------------------------------------
// Core Utilities & Session Boot
// ------------------------------------------------------------
use WizdomNetworks\WizeWeb\Utilities\SessionHelper;
use WizdomNetworks\WizeWeb\Utilities\Logger;
use WizdomNetworks\WizeWeb\Utilities\ErrorHandler;
use WizdomNetworks\WizeWeb\Core\Router;
use WizdomNetworks\WizeWeb\Core\View;
use WizdomNetworks\WizeWeb\Controllers\LandingController;
use WizdomNetworks\WizeWeb\Controllers\ContactController;
use WizdomNetworks\WizeWeb\Controllers\VerificationController;
use WizdomNetworks\WizeWeb\Controllers\ResendVerificationController;
use WizdomNetworks\WizeWeb\Controllers\SubscriberController;
use WizdomNetworks\WizeWeb\Controllers\UnsubscribeController;
// Start session before routing
SessionHelper::start();
Logger::info("Bootstrapping application");
// ------------------------------------------------------------
// Route Registration
// ------------------------------------------------------------
$router = new Router();
// Landing Page Routes
$router->add('', LandingController::class, 'index');
$router->add('/', LandingController::class, 'index');
$router->add('index.php', LandingController::class, 'index');
// Contact Form Routes
$router->add('/contact', ContactController::class, 'index', 'GET');
$router->add('/contact', ContactController::class, 'submit', 'POST');
// Verification Routes
$router->add('/verify', VerificationController::class, 'verify', 'GET'); // e.g. /verify?email=...
$router->add('/verify/{code}', ContactController::class, 'verify', 'GET'); // e.g. /verify/abc123...
// Resend / Newsletter / Unsubscribe
$router->add('/resend-verification', ResendVerificationController::class, 'handle', 'POST');
$router->add('/subscriber/update', SubscriberController::class, 'update', 'POST');
$router->add('/unsubscribe', UnsubscribeController::class, 'confirm', 'GET');
$router->add('/unsubscribe', UnsubscribeController::class, 'process', 'POST');
// Post-Redirect-GET success confirmation
$router->addClosure('/verify-success', function () {
$type = $_SESSION['update_type'] ?? 'newsletter';
$message = $_SESSION['update_success'] ? 'Thank you! Your information has been updated.' : null;
View::render('pages/verify_success', [
'type' => $type,
'message' => $message,
]);
unset($_SESSION['update_success'], $_SESSION['update_type']);
}, 'GET');
// ------------------------------------------------------------
// Dispatch Request
// ------------------------------------------------------------
$requestedPath = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$router->dispatch($requestedPath);