# 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 ✅ - [x] Create all directories - [x] 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 ```bash # 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) ```bash # 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) ```bash Move all admin_*.php files → src/admin/ - admin_members.php - admin_payments.php - etc. ``` ### Phase 5: Move API Files (6 files) ```bash 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) ```bash 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 ```bash # 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) ```bash # 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): ```php require_once('connection.php'); require_once('session.php'); require_once('functions.php'); include_once('header.php'); ``` ### After (New structure): ```php // 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 ``` ### Recommended: Bootstrap Approach Create a common bootstrap file that all pages include: ```php // src/bootstrap.php ``` Then every page only needs: ```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 ```bash # 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 ```bash # 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)