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

11 KiB

File Restructuring Plan - feature/restructure-codebase

New Directory Structure

4WDCSA.co.za/
├── src/
│   ├── pages/
│   │   ├── index.php (homepage - moved from root)
│   │   ├── about.php
│   │   ├── contact.php
│   │   ├── privacy_policy.php
│   │   │
│   │   ├── auth/
│   │   │   ├── login.php
│   │   │   ├── register.php
│   │   │   ├── forgot_password.php
│   │   │   ├── reset_password.php
│   │   │   ├── verify.php
│   │   │   ├── resend_verification.php
│   │   │   ├── change_password.php
│   │   │   └── update_password.php
│   │   │
│   │   ├── memberships/
│   │   │   ├── membership.php
│   │   │   ├── membership_details.php
│   │   │   ├── membership_application.php
│   │   │   ├── membership_payment.php
│   │   │   ├── renew_membership.php
│   │   │   └── member_info.php
│   │   │
│   │   ├── bookings/
│   │   │   ├── bookings.php
│   │   │   ├── campsites.php
│   │   │   ├── campsite_booking.php
│   │   │   ├── trips.php
│   │   │   ├── trip-details.php
│   │   │   ├── course_details.php
│   │   │   └── driver_training.php
│   │   │
│   │   ├── shop/
│   │   │   ├── view_cart.php
│   │   │   ├── add_to_cart.php
│   │   │   ├── bar_tabs.php
│   │   │   ├── payment_confirmation.php
│   │   │   ├── confirm.php
│   │   │   └── confirm2.php
│   │   │
│   │   ├── events/
│   │   │   ├── events.php
│   │   │   ├── blog.php
│   │   │   ├── blog_details.php
│   │   │   ├── best_of_the_eastern_cape_2024.php
│   │   │   ├── 2025_agm_minutes.php
│   │   │   ├── agm_content.php
│   │   │   └── instapage.php
│   │   │
│   │   └── other/
│   │       ├── 404.php
│   │       ├── account_settings.php
│   │       ├── rescue_recovery.php
│   │       ├── bush_mechanics.php
│   │       ├── indemnity.php
│   │       ├── indemnity_waiver.php
│   │       ├── basic_indemnity.php
│   │       ├── view_indemnity.php
│   │       ├── ad_banner.php
│   │       ├── logos.php
│   │       ├── review_box.php
│   │       ├── comment_box.php
│   │       ├── modal.php
│   │       ├── insta_footer.php
│   │       └── index2.php
│   │
│   ├── admin/
│   │   ├── admin_members.php
│   │   ├── admin_payments.php
│   │   ├── admin_web_users.php
│   │   ├── admin_course_bookings.php
│   │   ├── admin_camp_bookings.php
│   │   ├── admin_trip_bookings.php
│   │   ├── admin_visitors.php
│   │   ├── admin_efts.php
│   │   └── add_campsite.php
│   │
│   ├── api/
│   │   ├── fetch_users.php
│   │   ├── fetch_drinks.php
│   │   ├── fetch_bar_tabs.php
│   │   ├── get_campsites.php
│   │   ├── get_tab_total.php
│   │   └── google_validate_login.php
│   │
│   ├── processors/
│   │   ├── validate_login.php
│   │   ├── register_user.php
│   │   ├── process_application.php
│   │   ├── process_booking.php
│   │   ├── process_camp_booking.php
│   │   ├── process_course_booking.php
│   │   ├── process_trip_booking.php
│   │   ├── process_membership_payment.php
│   │   ├── process_payments.php
│   │   ├── process_eft.php
│   │   ├── submit_order.php
│   │   ├── submit_pop.php
│   │   ├── process_signature.php
│   │   ├── create_bar_tab.php
│   │   ├── update_application.php
│   │   ├── update_user.php
│   │   ├── upload_profile_picture.php
│   │   ├── send_reset_link.php
│   │   └── logout.php
│   │
│   ├── config/
│   │   ├── connection.php (database service init)
│   │   ├── session.php
│   │   ├── env.php
│   │   └── functions.php
│   │
│   └── classes/
│       ├── DatabaseService.php
│       ├── FormValidator.php (future)
│       └── ... (other services)
│
├── components/
│   ├── header.php
│   ├── banner.php
│   ├── footer.php (unified)
│   └── ... (shared components)
│
├── assets/
│   ├── css/
│   ├── js/
│   ├── images/
│   ├── fonts/
│   ├── uploads/
│   └── sass/
│
├── vendor/ (Composer)
├── mailers/ (Mailer templates)
├── uploads/ (User uploads)
├── google-client/ (OAuth client)
│
├── .htaccess (already in root - stays there)
├── index.php (PHP entry point - stays in root, requires src/pages/index.php)
├── sitemap.xml
└── phpinfo.php (debug - should remove later)

Migration Strategy

Phase 1: Create Structure & Map Files

  • Create all directories
  • Create this migration plan
  • Create index.php router in root that includes src/pages/index.php
  • Create .htaccess rules to serve from src/ transparently

Phase 2: Move Core Config Files

# Must do first - everything depends on these
- Move: connection.php → src/config/
- Move: session.php → src/config/
- Move: env.php → src/config/
- Move: functions.php → src/config/
- Update all includes in every file (this is automated by search/replace)

Phase 3: Move Page Files (45 files)

# Priority: High-traffic pages first
1. Auth pages (8 files) → src/pages/auth/
   - login.php, register.php, forgot_password.php, etc.

2. Membership pages (6 files) → src/pages/memberships/
   - membership.php, membership_application.php, etc.

3. Booking pages (7 files) → src/pages/bookings/
   - campsites.php, bookings.php, trips.php, etc.

4. Shop/Bar pages (6 files) → src/pages/shop/
   - view_cart.php, bar_tabs.php, etc.

5. Events/Blog pages (7 files) → src/pages/events/
   - blog.php, events.php, etc.

6. Misc pages (11 files) → src/pages/other/
   - about.php, contact.php, indemnity.php, etc.

Phase 4: Move Admin Files (9 files)

Move all admin_*.php files → src/admin/
- admin_members.php
- admin_payments.php
- etc.

Phase 5: Move API Files (6 files)

Move all fetch_*.php and get_*.php files → src/api/
- fetch_users.php
- fetch_drinks.php
- get_campsites.php
- etc.

Phase 6: Move Processor Files (18 files)

Move all process_*.php, validate_*.php, submit_*.php → src/processors/
- validate_login.php
- process_booking.php
- submit_order.php
- etc.

Phase 7: Update All Include Paths

# This is the critical step - all files reference each other
- connection.php → src/config/connection.php
- session.php → src/config/session.php
- env.php → src/config/env.php
- functions.php → src/config/functions.php

# Update relative includes in each file to use __DIR__ or __FILE__
# Example: require_once(__DIR__ . '/../../config/connection.php');

Phase 8: .htaccess Routes (Optional - Keep Simple for Now)

# Can be done separately - initially just use new paths as-is
# .htaccess rules to make old URLs still work (forward compatibility)

Include Path Changes

Before (Root-based includes):

require_once('connection.php');
require_once('session.php');
require_once('functions.php');
include_once('header.php');

After (New structure):

// From: src/pages/auth/login.php
require_once(__DIR__ . '/../../config/connection.php');
require_once(__DIR__ . '/../../config/session.php');
require_once(__DIR__ . '/../../config/functions.php');
include_once(__DIR__ . '/../../components/header.php');

// Or use a bootstrap loader in root index.php that sets up paths globally

Create a common bootstrap file that all pages include:

// src/bootstrap.php
<?php
define('APP_ROOT', __DIR__ . '/..');
define('SRC_ROOT', APP_ROOT . '/src');
define('CONFIG_PATH', SRC_ROOT . '/config');
define('CLASSES_PATH', SRC_ROOT . '/classes');
define('COMPONENTS_PATH', APP_ROOT . '/components');

require_once(CONFIG_PATH . '/env.php');
require_once(CONFIG_PATH . '/connection.php');
require_once(CONFIG_PATH . '/session.php');
require_once(CONFIG_PATH . '/functions.php');
?>

Then every page only needs:

<?php require_once(__DIR__ . '/../../bootstrap.php'); ?>

Testing Strategy

Before Merge

  1. Test each moved file - Load page in browser, verify no 404s
  2. Test includes - Check all require_once/include work
  3. Test database - Verify queries still execute
  4. Test sessions - Login/logout still works
  5. Test links - Navigation between pages works
  6. Test APIs - AJAX endpoints respond correctly

Rollback Plan

# If issues found:
git reset --hard HEAD
git checkout main
# All original files restored

File Count Summary

├── Pages:        45 files (auth 8, memberships 6, bookings 7, shop 6, events 7, other 11)
├── Admin:         9 files
├── API:           6 files
├── Processors:   18 files
├── Config:        4 files (connection, session, env, functions)
├── Classes:       1 file (DatabaseService, more later)
└── Components:    2 files (header, banner)

Total: ~95 PHP files organized into logical groups

Benefits of This Structure

Organization - Clear, logical file hierarchy
Security - Can restrict web access to sensitive folders (API, processors)
Maintenance - Related files grouped together
Onboarding - New developers find files easily
Testing - Can write tests per folder
Scalability - Easy to add new features in existing folders
Performance - Can set different caching rules per folder
Version Control - Smaller diffs, easier to review changes


Next Steps

  1. Create bootstrap.php (centralizes all includes)
  2. Start Phase 2 - Move config files first
  3. Create find/replace automation for include path updates
  4. Test 1-2 files from each category
  5. If successful, batch move remaining files in each category
  6. Test full site
  7. Commit in batches by category
  8. Merge to main after validation

Commands Reference

# List files to move for each phase
ls *.php | grep -E '^(login|register|forgot)' | xargs -I {} mv {} src/pages/auth/

# Find all require_once and include statements
grep -r "require_once\|include" src/ | grep -v "vendor"

# Test that no broken includes exist
php -l src/**/*.php

Current Status

Branch created: feature/restructure-codebase
Directories created (all folders)
This plan documented

Next Action: Create bootstrap.php and start Phase 2 (config files)