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

370 lines
11 KiB
Markdown

# 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
<?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
<?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
```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)