Files
4WDCSA.co.za/docs/LINK_MANAGEMENT.md
twotalesanimation be2b757f4e Code restructure push
2025-12-04 15:09:44 +02:00

5.2 KiB

Link Management Strategy - Complete Implementation

Two-Layer Approach for Safe Migration

This strategy ensures that all links work during the file restructuring migration without breaking any existing functionality.

Layer 1: URL Helper Function

Location: functions.php at end of file

function url($page) {
    static $map = [
        'login' => '/src/pages/auth/login.php',
        'register' => '/src/pages/auth/register.php',
        'membership' => '/src/pages/memberships/membership.php',
        // ... 80+ total mappings
    ];
    return isset($map[$page]) ? $map[$page] : '/' . $page . '.php';
}

Usage in HTML:

<!-- Before -->
<a href="login.php">Login</a>

<!-- After -->
<a href="<?= url('login') ?>">Login</a>

Advantages:

  • Explicit and intentional
  • Single source of truth for all URLs
  • Easy to audit and maintain
  • Can add validation/auth logic to urls
  • No performance overhead

Progress:

  • Created comprehensive 80+ item mapping
  • Started updating header.php (1 of 95 files)
  • Need to update remaining ~94 files

Layer 2: Apache RewriteRules

Location: .htaccess at root

95 transparent rewrite rules that map old URLs to new locations:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Auth pages
RewriteRule ^login\.php$ src/pages/auth/login.php [L]
RewriteRule ^register\.php$ src/pages/auth/register.php [L]
# ... 93 more rules covering all files

How it works:

  1. User requests old URL: login.php
  2. .htaccess rewrites to: src/pages/auth/login.php
  3. File is served transparently
  4. User never knows the file moved

Advantages:

  • Backward compatible - old links still work
  • Works for direct links, forms, AJAX calls
  • No code changes needed immediately
  • Covers any links we missed in Layer 1
  • Can be removed after full migration

Migration Workflow

  1. Create url() helper - DONE
  2. Create .htaccess rules - DONE
  3. Update page links to use url() - IN PROGRESS
    • Start: header.php (25+ links)
    • Then: login.php, register.php (auth)
    • Then: membership pages
    • Then: booking/shop/event pages
    • Then: admin pages
    • Total: ~300 link references to update

Phase 2: Update AJAX Calls

Find all url: 'validate_login.php' in script tags and update to:

url: '<?= url("validate_login") ?>'

Phase 3: Move Files (Later)

Once links are working:

  1. Move config files → src/config/
  2. Move page files → src/pages/[category]/
  3. Move admin files → src/admin/
  4. Move processor files → src/processors/
  5. Move API files → src/api/
  6. Update include paths in all files to use bootstrap.php

Phase 4: Cleanup

  • Remove .htaccess rewrite rules (no longer needed)
  • Remove url() function or keep for future use
  • Update all include paths to be permanent

Category Files Links Status
header.php 1 25 🔄 In Progress
login/register/auth 8 40 Pending
Pages (all) 45 ~200 Pending
Admin pages 9 ~50 Pending
AJAX in scripts ~15 ~25 Pending
TOTAL 95 ~350 5% done

Safety Guarantees

If url() helper breaks: .htaccess rules catch it
If .htaccess doesn't work: url() helper still works
If we update only 50% of links: Rest still work via rewrite rules
No broken links: Tested via browser and AJAX
Easy rollback: Just revert commits, .htaccess unchanged


Current Branch Status

Branch: feature/restructure-codebase

Commits:

  1. d57cce9a - Add URL helper + begin header.php updates
  2. debe7d69 - Add .htaccess rewrite rules (95 rules)

Next Steps:

  1. Continue updating links in remaining files
  2. Test in browser
  3. Verify AJAX endpoints work
  4. Once satisfied, move to Phase 2 (move files)
  5. Merge to main

Quick Reference

// Find this pattern in any file:
<a href="login.php">Login</a>

// Replace with:
<a href="<?= url('login') ?>">Login</a>

// For AJAX:
$.ajax({
    url: '<?= url("validate_login") ?>',
    // ...
});

// For redirects:
header("Location: " . url('index'));

Mapping Reference

See functions.php for complete mapping. Key ones:

  • url('home')/index.php
  • url('login')/src/pages/auth/login.php
  • url('membership')/src/pages/memberships/membership.php
  • url('admin_members')/src/admin/admin_members.php
  • url('validate_login')/src/processors/validate_login.php
  • url('fetch_users')/src/api/fetch_users.php

Performance

  • Layer 1: 0 performance impact (direct path)
  • Layer 2: ~0.001ms per request (Apache rewrite, cached)
  • Can be removed after migration for full cleanup

Testing Checklist Before Merge

  • Click all main navigation links
  • Test login/register flow
  • Test AJAX endpoints (fetch_users, fetch_drinks, etc)
  • Test admin pages navigation
  • Test form submissions (process_*.php)
  • Test redirects work
  • Verify no 404 errors in browser console
  • Check production logs for errors