Overview
Thank You for Purchasing Travel In!
Welcome to Travel In - a comprehensive travel booking management system built with Laravel 10. This documentation will guide you through installation, configuration, and all the amazing features this system offers.
What's New in Version 4.5
Visas Module
Full visa listing, booking flow with Stripe/PayPal/Paystack, document upload, and tracking. Complete API for mobile apps.
Change & Cancel Flights
Duffel-powered change and cancel with fare rules, penalty display, and payment for change total. Buttons only when allowed.
Fare Rules & Baggage
Fare rules (change/refund, penalties) and baggage info from Duffel shown on booking details and in API responses.
System Settings
Updated system settings view and layout for clearer organization of Flights, Payments, and general options.
What's New in Version 4.2
Enhanced Registration Security
Advanced name validation with spam detection, honeypot protection, and real-time validation feedback to prevent bot registrations.
Stronger Password Validation
Enforced password requirements (uppercase, lowercase, numbers, symbols) with real-time strength indicators for better security.
GDPR Compliance
Cookie consent banner with preference management and GDPR consent checkbox in registration form for full compliance.
Booking Management
Delete functionality for flight, tour, and hotel bookings with confirmation dialogs and audit logging.
reCAPTCHA Integration
Google reCAPTCHA v3 protection for registration and contact forms with admin settings management.
Bug Fixes
Fixed CMS menu saving issues and menu model mass assignment errors for improved stability.
What's New in Version 4.1
Passport Information
Complete passport details collection for all passengers (adults, children, infants) with 5 required fields.
Age-Based Validation
Smart date of birth validation - 18+ for adults, under 18 for children with dynamic date picker limits.
Enhanced PDFs
All booking PDFs now include passport information with country name resolution and formatted display.
API Updates
Complete API documentation for mobile apps with React Native and Flutter integration examples.
Core Features
Main Modules
- Users Management - Complete user CRUD operations
- Hotels Management - Hotel listings, bookings, reviews
- Tours Management - Tour packages, pricing, availability
- Flights Management - Flight search, booking, Duffel API integration
- Blogs Management - Content management system
- Services Management - Additional services management
- CMS Pages - Custom page creation
Location Management
- Countries - Complete country database with flags
- States/Provinces - State management with country association
- Cities - City management with state/country linking
- Airports - Airport database with IATA/ICAO codes
Multilingual Support
- Dynamic Language Management - Add/edit/delete languages through admin panel
- RTL Support - Automatic Right-to-Left layout for Arabic, Hebrew, etc.
- Content Translation - Translate all dynamic content (tours, hotels, blogs)
- Menu Translation - Translate navigation menus
- Flag Images - Upload custom flag images for each language
Booking System
- Tour Bookings - Complete tour booking management with email notifications
- Hotel Bookings - Hotel reservation system with room selection
- Flight Bookings - Duffel API integration for real-time flight data
- Payment Gateway - PayPal, Stripe, and Paystack integration
Server Requirements
Travel In requires a web server with the following specifications:
Minimum Requirements
PHP Requirements
- PHP Version: 8.1 or higher (8.2+ recommended)
- Extensions Required:
- BCMath PHP Extension
- Ctype PHP Extension
- Fileinfo PHP Extension
- JSON PHP Extension
- Mbstring PHP Extension
- OpenSSL PHP Extension
- PDO PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
- GD Library / Imagick (for image processing)
- cURL Extension
- Zip Extension
Database Requirements
- MySQL: Version 5.7 or higher
- MariaDB: Version 10.2 or higher
- Collation: utf8mb4_unicode_ci (recommended)
- Permissions: CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT
Web Server
- Apache 2.4+ with mod_rewrite enabled
- Nginx 1.10+ (alternative to Apache)
- Document Root: Must point to
/publicdirectory
Server Configuration
- Memory Limit: 256M or higher (512M recommended)
- Max Execution Time: 300 seconds or higher
- Max Upload Size: 20M or higher (for image uploads)
- Max Post Size: 25M or higher
Installation
Server Requirements
- PHP Version: 8.1 or higher
- Laravel: 10.10 or higher
- Database: MySQL 5.7+ or MariaDB 10.2+
- Web Server: Apache or Nginx
- Extensions: OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, BCMath
Upload Files
For Local Development (XAMPP/WAMP):
- Navigate to your XAMPP
htdocsfolder (or WAMPwwwfolder) - Create a new folder (e.g.,
travelnew) - Extract all files from the package ZIP into this folder
- Your path should be:
C:\xampp\htdocs\travelnew\
For Production Server:
- Upload all files to your domain's public_html directory
- Ensure proper file permissions are set
Database Setup
You have two options for database setup:
Option A: Using SQL File (Quick Setup)
- Create a new database in phpMyAdmin
- Import the
travelin25.sqlfile located in the root directory - Wait for the import to complete
Option B: Using Laravel Migrations (Recommended)
- Create a new database in phpMyAdmin
- Configure your
.envfile with database credentials - Run the following command:
php artisan migrate
Migrations provide better version control and are recommended for production deployments.
Configure Environment
Open the .env file in the root directory and update the following:
APP_NAME=TravelIn
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost/travelnew
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
Clear Cache & Link Storage
Run the following commands in your terminal:
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Create Storage Link: Visit http://yourdomain.com/storage-link to create the symbolic link for profile photos and other uploads.
Default Admin Credentials
Login to the admin panel using:
URL: http://yourdomain.com/login
Email: admin@demo.com
Password: demo2626
Getting Started
Initial Configuration
1. Site Settings
Navigate to Admin Panel → Settings → Site Settings and configure:
- Site Logo & Favicon
- Company Name & Contact Information
- SMTP Email Configuration
- Duffel API Credentials (for flight search)
- Payment Gateway Settings (PayPal, Stripe, Paystack)
2. Add Languages
Navigate to Admin Panel → Languages → Add New:
- Enter Language Name (e.g., "Arabic")
- Enter Language Code (e.g., "ar")
- Upload Flag Image
- Check "RTL" if applicable
- Save
3. Add Location Data
Start adding your location data:
- Countries: Admin → Locations → Countries
- States: Admin → Locations → States
- Cities: Admin → Locations → Cities
- Airports: Admin → Locations → Airports
Content Management
Add Hotels
Create hotel listings with multiple images, pricing, amenities, and location details.
Add Tours
Create tour packages with itinerary, pricing, duration, and booking information.
Add Blogs
Create blog posts with categories, tags, and SEO optimization.
Manage Menu
Customize navigation menus with multi-level dropdown support.
Admin Panel Features
The admin panel provides complete control over the entire Travel In system. Access it at: http://yourdomain.com/login
Email:
admin@demo.comPassword:
demo2626⚠️ Change these immediately after first login!
Dashboard Overview
The admin dashboard displays key statistics and quick access to important features:
- Statistics Cards: Total bookings, revenue, active users
- Recent Bookings: Latest tour, hotel, and flight bookings
- Revenue Charts: Monthly revenue visualization
- Quick Actions: Access to frequently used features
- System Notifications: Important alerts and updates
User Management
Features
- View All Users: Complete list with search and filters
- Add New User: Create user accounts manually
- Edit User: Update profile information, email, password
- Delete User: Remove user accounts
- User Status: Activate/deactivate accounts
- View Bookings: See all bookings by specific user
- Team Management: Manage team members and permissions
Tours Management
Tour Operations
- Create Tours: Add new tour packages with complete details
- Edit Tours: Update tour information, pricing, availability
- Delete Tours: Remove old or discontinued tours
- Tour Gallery: Upload multiple images per tour
- Pricing Management: Set prices, discounts, seasonal rates
- Itinerary Builder: Day-by-day tour schedule
- Inclusions/Exclusions: What's included in the package
Tour Bookings
- View All Bookings: Filter by status, date, customer
- Booking Details: Complete customer and payment info
- Status Management: Pending, Confirmed, Completed, Cancelled
- Email Notifications: Send confirmations and updates
- Payment Tracking: View payment status and amounts
Hotels Management
Hotel Operations
- Add Hotels: Create hotel listings with complete details
- Edit Hotels: Update hotel information and amenities
- Delete Hotels: Remove hotel listings
- Hotel Gallery: Upload hotel photos and images
- Room Management: Different room types with pricing
- Amenities: WiFi, pool, gym, parking, etc.
- Location Details: Map integration and address
Hotel Bookings
- View Bookings: All hotel reservations
- Check-in/Check-out: Manage arrival and departure dates
- Guest Details: Complete guest information
- Special Requests: Customer requirements and notes
- Status Updates: Booking confirmation and management
Flights Management
Flight System
- Duffel API Integration: Real-time flight data
- Flight Search: One-way, round-trip, multi-city
- Airlines Management: Manage airline information
- Airports Database: IATA/ICAO codes management
- Pricing Controls: Service fees and markups
Flight Bookings (Version 4.1)
- View All Bookings: Complete flight reservation list
- Passenger Details: All passenger information
- Passport Information: Complete passport data for all passengers
- Age Validation: Automatic age verification
- PDF Downloads: Booking tickets with all details
- Payment Status: Track payment completion
- Booking Reference: Unique booking IDs
Location Management
Countries
- Add/Edit/Delete countries
- Country flags upload
- ISO codes management
- Status management
States/Provinces
- State management
- Country association
- State codes
- Sort order
Cities
- City database
- State/Country linking
- Featured cities
- Status control
Airports
- Airport database
- IATA/ICAO codes
- City association
- Type (Intl/Domestic)
Multilingual System
Language Management
- Add Languages: Create new language entries
- Edit Languages: Update language details
- Delete Languages: Remove unused languages
- Flag Upload: Custom flag images for each language
- RTL Support: Enable Right-to-Left for Arabic, Hebrew, etc.
- Default Language: Set primary site language
- Status Control: Enable/disable languages
Translation Management
- Menu Translations: Translate navigation menus
- Content Translations: Translate tours, hotels, blogs
- Widget Translations: Homepage widgets and sections
- Static Text: Frontend labels and buttons
- Bulk Translation: Translate multiple items at once
Content Management
Blogs
- Create/Edit blog posts
- Categories & tags
- Featured images
- SEO optimization
CMS Pages
- About Us
- Terms & Conditions
- Privacy Policy
- Custom pages
Our Experts
- Team members
- Expert profiles
- Social media links
- Photo upload
Testimonials
- Customer reviews
- Rating system
- Featured testimonials
- Approval system
Menu Management
Navigation Menus
- Create Menus: Multiple menu locations
- Menu Items: Add/edit/delete menu items
- Nested Menus: Multi-level dropdown support
- Menu Types: Header, Footer, Sidebar menus
- External Links: Link to external websites
- Menu Translations: Translate menu items
- Sort Order: Drag-and-drop menu ordering
- Custom URLs: Add any URL to menu
Site Settings
General Settings
- Site Logo: Upload main and footer logos
- Favicon: Site icon
- Company Info: Name, address, contact details
- Social Media: Facebook, Twitter, Instagram, etc.
- Copyright Text: Footer copyright message
- Currency: Default currency for bookings
Email Configuration
- SMTP Settings: Host, port, username, password
- From Email: Sender email address
- From Name: Sender name
- Test Email: Send test emails
- Email Templates: Booking confirmations, notifications
Payment Gateway Settings
- PayPal: Client ID, Secret, Mode (Sandbox/Live)
- Stripe: Publishable Key, Secret Key
- Paystack: Public Key, Secret Key
- Service Fees: Add percentage or fixed fees
- Currency Settings: Payment currency configuration
Duffel API Settings
- API Token: Duffel access token
- API Mode: Test or Live environment
- Service Fees: Flight booking fees
- Currency: Default flight currency
Contact Messages
Message Management
- View Messages: All contact form submissions
- Message Details: Name, email, subject, message
- Reply: Respond directly from admin panel
- Delete Messages: Remove old messages
- Mark as Read: Organize messages
- Export: Download messages as CSV
Reviews Management
Review System
- View All Reviews: Tours, hotels, flights reviews
- Approve/Reject: Moderate customer reviews
- Edit Reviews: Update review content if needed
- Delete Reviews: Remove inappropriate reviews
- Rating System: 1-5 star ratings
- Featured Reviews: Highlight best reviews
- Email Notifications: Alert admins of new reviews
Reports & Analytics
Available Reports
- Booking Reports: Daily, weekly, monthly booking stats
- Revenue Reports: Total revenue by period
- Payment Reports: Payment gateway wise reports
- User Reports: Registration and activity stats
- Popular Destinations: Most booked locations
- Export Data: Download reports as PDF/Excel
Security & Permissions
Security Features
- Admin Roles: Different permission levels
- Team Management: Multiple admin accounts
- Activity Log: Track admin actions
- Password Protection: Secure password hashing
- Two-Factor Auth: Enhanced security (optional)
- Session Management: Control active sessions
Homepage Settings
Customize Homepage
- Hero Section: Banner image and text
- Search Widget: Homepage search form
- Featured Tours: Highlight top tours
- Featured Hotels: Showcase hotels
- Popular Destinations: Display top cities
- Testimonials Section: Customer reviews
- Blog Posts: Latest blog entries
- Call-to-Action: Custom CTA sections
http://yourdomain.com/login and use your admin credentials to access all these powerful features.
- ✓ Change default admin credentials immediately
- ✓ Use strong passwords with special characters
- ✓ Limit admin user accounts to trusted personnel only
- ✓ Regularly backup your database and files
- ✓ Keep Laravel and dependencies updated
- ✓ Use SSL certificate (HTTPS) in production
Booking System
Travel In includes comprehensive booking management for tours, hotels, and flights with complete payment integration.
Tour Bookings
Features
- Online Booking: Users can book tours directly from the frontend
- Pricing Management: Dynamic pricing with per-person or per-group options
- Date Selection: Availability calendar for tour dates
- Email Notifications: Automatic confirmation emails to customers and admin
- Booking Management: Admin panel to view and manage all bookings
- Status Tracking: Pending, Confirmed, Completed, Cancelled statuses
Hotel Bookings
Features
- Room Selection: Multiple room types with different pricing
- Check-in/Check-out: Date range selection with automatic rate calculation
- Guest Details: Collect guest information during booking
- Special Requests: Allow customers to add special requirements
- Payment Integration: Multiple payment gateway support
- Booking Confirmation: Instant confirmation with booking reference
Flight Bookings
Features
- Duffel API Integration: Real-time flight search and booking
- Multi-Passenger Support: Adults, children, and infants
- Passport Information: Complete passport details collection (Version 4.1)
- Age Validation: Smart age-based DOB validation (Version 4.1)
- Optional Add-ons: Extra services like meals, baggage, seats
- Price Breakdown: Transparent pricing with taxes and fees
- PDF Tickets: Downloadable booking confirmation PDFs
- Admin Management: Full booking management in admin panel
Admin Booking Management
Navigate to Admin Panel → Bookings to:
- View all tour, hotel, and flight bookings
- Filter bookings by status, date, or customer
- Update booking status
- View complete passenger and passport details
- Download booking PDFs
- Send confirmation emails
- Manage cancellations and refunds
Payment Gateway Integration
Travel In supports multiple payment gateways for processing tour, hotel, and flight bookings. Below are detailed setup guides for each gateway:
Supported Payment Gateways
PayPal
Global payment processor with worldwide coverage
Stripe
Modern payment platform for credit/debit cards
Paystack
African payment gateway integration
1. PayPal Setup Guide
Create PayPal Developer Account
- Visit https://developer.paypal.com
- Click "Log In" or "Sign Up" if you don't have an account
- Use your existing PayPal account or create a new one
- Accept the developer agreement
Create a PayPal App
- Go to Dashboard > My Apps & Credentials
- Select "Sandbox" for testing or "Live" for production
- Click "Create App" button
- Enter your App Name (e.g., "TravelIn")
- Select app type: "Merchant"
- Click "Create App"
Get API Credentials
After creating the app, you'll see:
- Client ID: Copy this value
- Secret: Click "Show" and copy this value
Configure in Travel In Admin
- Login to Admin Panel
- Navigate to Settings → PayPal Settings
- Enable PayPal:
Yes - PayPal Mode:
sandbox(for testing) orlive(for production) - Paste your Client ID
- Paste your Secret
- Click "Save Settings"
2. Stripe Setup Guide
Create Stripe Account
- Visit https://stripe.com
- Click "Sign Up" or "Start Now"
- Enter your email and create a password
- Complete business information
- Verify your email address
Get API Keys
- Login to Stripe Dashboard
- Click "Developers" in the left sidebar
- Click "API keys"
- You'll see two sets of keys:
- Test keys (for development)
- Live keys (for production - visible after activation)
- For each set, copy:
- Publishable key: Starts with
pk_test_orpk_live_ - Secret key: Starts with
sk_test_orsk_live_(click "Reveal" first)
- Publishable key: Starts with
Configure in Travel In Admin
- Login to Admin Panel
- Navigate to Settings → Stripe Settings
- Enable Stripe:
Yes - Paste your Publishable Key
- Paste your Secret Key
- Click "Save Settings"
Testing Payment Gateways
General Testing Steps
- Use sandbox/test mode credentials for all gateways
- Test card numbers (each gateway provides their own):
- Stripe:
4242 4242 4242 4242 - PayPal: Use PayPal sandbox accounts
- Paystack:
4084 0840 8408 4081
- Stripe:
- Make a test booking (tour, hotel, or flight)
- Verify transaction appears in:
- Gateway dashboard
- Travel In admin panel
- Customer email confirmation
- Test both successful and failed transactions
- Once satisfied, switch to live mode credentials
- ✓ Complete business verification on the gateway
- ✓ Replace test keys with live/production keys
- ✓ Change mode from sandbox/test to live/production
- ✓ Test with a small real transaction
- ✓ Ensure SSL certificate is installed on your domain
- ✓ Review gateway's terms of service and fees
Database Migrations
Travel In includes complete Laravel migration files for all database tables, providing version-controlled database management.
What are Migrations?
Migrations are Laravel's way of version controlling your database schema. They allow you to:
- ✅ Track database schema changes in version control
- ✅ Set up fresh databases easily
- ✅ Share schema with team members
- ✅ Roll back changes if needed
- ✅ Test with fresh database instances
Available Migration Files
All migration files are located in database/migrations/ including:
Core System
Languages, translations, modules, menus, settings
Location Data
Countries, states, cities, airports
Booking System
Tour bookings, hotel bookings, flight bookings
Content
Content translations, widget translations
Using Migrations
Fresh Installation (New Environment)
php artisan migrate
This creates all tables in your database automatically.
Fresh Database for Testing
php artisan migrate:fresh
Rollback Last Migration
php artisan migrate:rollback
Check Migration Status
php artisan migrate:status
Run Specific Migration
php artisan migrate --path=database/migrations/filename.php
Migration Benefits
Development
- Version control integration
- Team collaboration
- Environment consistency
Deployment
- Automated database setup
- Production deployment
- Database updates
How to Update
Update Process Overview
When a new update is released, follow these steps to safely update your Travel In installation:
Backup Everything
Create backups before starting any update:
- Database Backup:
# Using phpMyAdmin: - Select your database - Click "Export" tab - Choose "Quick" or "Custom" method - Click "Go" to download SQL file # Using Command Line: mysqldump -u username -p database_name > backup_$(date +%Y%m%d).sql - Files Backup:
# Backup entire project folder # Or use your hosting control panel backup feature
Download Update Files
Download the update package from CodeCanyon. The update package contains:
- Updated files in the
Updatefolder - Database SQL files in the
databasefolder - Update instructions (README.txt)
Upload Updated Files
Copy files from Update folder to your project:
- Extract the update package
- Open the
Updatefolder - Copy all files and folders maintaining the exact directory structure
- Overwrite existing files in your project root
- Ensure folder permissions remain correct (755 for folders, 644 for files)
Update/app/Http/Controllers/...→app/Http/Controllers/...Update/resources/views/...→resources/views/...Update/routes/...→routes/...
Run Database Updates
Execute SQL queries if provided:
- Open phpMyAdmin (or your database management tool)
- Select your database
- Go to the "SQL" tab
- Open the SQL file from the
databasefolder - Copy and paste the SQL queries into the SQL tab
- Click "Go" to execute
- Verify the queries executed successfully
ON DUPLICATE KEY UPDATE, it's safe to run multiple times. If not, check if records already exist before running.
Example SQL file location:
database/payment_gateway_settings.sql- For Payment Gateway Settings update
Clear All Caches
Clear Laravel caches to ensure changes take effect:
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan optimize:clear
Or use the combined command:
php artisan optimize:clear
Update Configuration
Configure any new features in admin panel:
- Login to admin panel
- Check for new settings or configuration pages
- Configure new features as needed
- Test all updated functionality
For Payment Gateway Settings Update:
- Go to: Settings → Payment Gateways
- Configure each payment gateway (PayPal, Stripe, Paystack)
- Enter your API keys and secrets
- Select mode (Test/Sandbox or Live)
- Enable/disable payment gateways as needed
- Click "Save Settings"
Test Everything
Thoroughly test all updated features:
- Test payment processing for all gateways
- Verify payment methods show/hide correctly based on admin settings
- Test booking flows (flights, hotels, tours)
- Check admin panel functionality
- Verify email notifications still work
- Test on different browsers and devices
Update Specific: Payment Gateway Settings (v4.1.1)
What This Update Includes
- ✅ Payment Gateway Management System in Admin Panel
- ✅ Complete Paystack Integration (Flights, Hotels, Tours)
- ✅ Conditional Payment Method Display (based on admin settings)
- ✅ Settings stored in database (no .env configuration needed)
Files Updated
The following files have been updated (located in Update folder):
app/Http/Controllers/Admin/SettingsController.phpapp/Http/Controllers/FlightsController.phpapp/Http/Controllers/HotelsController.phpapp/Http/Controllers/ToursController.phpapp/Http/Controllers/Api/PaymentController.phpapp/Providers/AppServiceProvider.phproutes/admin.phpresources/views/admin/settings/payment-gateways.blade.php(NEW)resources/views/livewire/admin/common/sidebar.blade.phpresources/views/flights/payment.blade.phpresources/views/hotel-payment.blade.phpresources/views/tours/payment-selection.blade.php
Database Changes
Run this SQL file: database/payment_gateway_settings.sql
This will add the following settings to your settings table:
- PayPal: paypal_account, paypal_client_id, paypal_secret, paypal_mode, paypal_active
- Stripe: stripe_key, stripe_secret, stripe_mode, stripe_active
- Paystack: paystack_public_key, paystack_secret_key, paystack_merchant_email, paystack_mode, paystack_active
Common Update Issues & Solutions
❌ White Screen After Update
Solution:
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
Then check storage/logs/laravel.log for specific errors.
❌ Payment Gateway Not Showing
Solutions:
- Ensure you ran the database SQL file
- Go to Admin → Settings → Payment Gateways
- Configure and enable the payment gateway
- Clear cache:
php artisan config:clear
❌ Database Error After SQL Import
Solutions:
- Check if settings already exist (use
INSERT IGNOREversion if needed) - Verify database connection
- Check if
settingstable exists - Ensure you're running SQL on the correct database
❌ Routes Not Working
Solution:
php artisan route:clear
php artisan route:cache
Rollback Instructions
- Restore files from your backup
- Restore database from your backup
- Clear all caches
This is why backups are essential before any update!
After Update Checklist
✅ Verification
- Admin panel loads correctly
- Payment gateways page accessible
- All payment methods working
- No PHP errors in logs
✅ Testing
- Test payment processing
- Verify payment visibility
- Check booking flows
- Test email notifications
✅ Configuration
- Configure payment gateways
- Set API keys
- Enable/disable gateways
- Test in both modes
✅ Production
- Set APP_DEBUG=false
- Run optimization commands
- Monitor error logs
- Inform users of updates
Troubleshooting
Common Issues & Solutions
❌ 500 Internal Server Error
Causes & Solutions:
- Permission Issues:
chmod -R 775 storage bootstrap/cache - Cache Issues:
php artisan config:clear php artisan cache:clear php artisan view:clear php artisan route:clear - Check Error Logs:
storage/logs/laravel.log - Missing APP_KEY: Run
php artisan key:generate
❌ Database Connection Error
Solutions:
- Verify database credentials in
.envfile - Ensure database exists and user has proper privileges
- Check if MySQL service is running
- Try
DB_HOST=localhostinstead of127.0.0.1or vice versa - Ensure database port (3306) is correct
❌ Blank Page / White Screen
Solutions:
- Check PHP error logs
- Ensure
.envfile exists and is properly configured - Run:
php artisan key:generate - Clear all caches (see above)
- Check file permissions for
storage/andbootstrap/cache/
❌ Images Not Uploading
Solutions:
- Check
public/directory permissions (755 or 775) - Increase
upload_max_filesizeinphp.ini(e.g., 20M) - Increase
post_max_sizeinphp.ini(e.g., 25M) - Ensure
storage/is writable - Create storage link: Visit
http://yourdomain.com/storage-link
❌ Emails Not Sending
Solutions:
- Verify MAIL settings in
.envfile - Test SMTP credentials using a tool like Mailtrap
- Check
storage/logs/laravel.logfor email errors - Ensure port 587 or 465 is not blocked by firewall
- For Gmail: Use "App Password" not regular password (enable 2FA first)
- Verify your email provider allows SMTP access
❌ Payment Gateway Not Working
Solutions:
- Verify API credentials are correct in admin settings
- Ensure gateway is enabled in admin panel
- Check if in test/sandbox mode for testing
- Review gateway error logs in Laravel logs
- Verify webhook URLs are configured (if required)
- Ensure SSL certificate is installed (required for live payments)
❌ Flight Search Not Working (Duffel API)
Solutions:
- Verify Duffel API token in admin settings
- Check if API token is active and not expired
- Ensure airports are properly configured in database
- Check Laravel logs for API error messages
- Verify your Duffel account has sufficient credits/access
Maintenance Commands
Useful commands for maintaining your installation:
Clear All Caches
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
php artisan view:clear
php artisan route:clear
Optimize for Production
php artisan config:cache
php artisan route:cache
php artisan view:cache
Check System Status
php artisan about
Test Database Connection
php artisan tinker
DB::connection()->getPdo();
migrate:fresh on production!
storage/logs/laravel.log file for detailed error messages. Most errors are logged there with stack traces to help identify the problem.
New Updates - Version 4.1
Major Updates in Version 4.1
Version 4.1 introduces significant enhancements to the flight booking system with passport information collection and smart age validation.
1. Passport Information Collection
The system now collects complete passport information for all passengers (adults, children, and infants) during flight booking.
Required Passport Fields
The following 5 fields are now required for each passenger:
| Field Name | Type | Validation | Description |
|---|---|---|---|
| Passport Number | String | Max 50 characters | The passport number as it appears on the passport |
| Passport Issue Date | Date | Must be before today | Date the passport was issued |
| Passport Expiry Date | Date | Must be after today | Date the passport expires |
| Passport Issuing Country | Country ID | Must exist in countries table | The country that issued the passport |
| Country of Residence | Country ID | Must exist in countries table | Passenger's country of residence |
Where Passport Info Appears
- Booking Form: Input fields during booking process
- Booking Details Page: Full passport information display
- User PDF Download: Included in booking confirmation PDF
- Admin Order Details: View passport info in admin panel
- Admin PDF Download: Included in admin PDF ticket
Data Storage
All passport data is stored in the existing passenger_details JSON column in the flight_bookings table. No database migration is required!
{
"pas_0000AzdG1RvyfvV6hLTiHi": {
"title": "mr",
"given_name": "John",
"family_name": "Doe",
"email": "john@example.com",
"phone_number": "1234567890",
"phonecode": "1",
"born_on": "1990-01-01",
"gender": "m",
"passport_number": "AB1234567",
"passport_issue_date": "2020-01-01",
"passport_expiry_date": "2030-12-31",
"passport_issuing_country": 1,
"country_of_residence": 1
}
}
Multi-Language Support
All passport field labels are translatable in 3 languages:
- English (en) - Passport Number, Passport Issue Date, etc.
- Arabic (ar) - رقم الجواز، تاريخ إصدار الجواز، إلخ
- Spanish (es) - Número de pasaporte, Fecha de emisión, etc.
2. Age-Based Date Validation
Smart age-based date of birth validation ensures passengers enter correct birth dates based on their passenger type.
Validation Rules
Adult Passengers
Age Requirement: 18-100 years old
Date Range: From 100 years ago to 18 years ago
Example (Oct 27, 2025):
Can select DOB between:
Oct 27, 1925 to Oct 27, 2007
Children/Infants
Age Requirement: Under 18 years old
Date Range: From 18 years ago to today
Example (Oct 27, 2025):
Can select DOB between:
Oct 27, 2007 to Oct 27, 2025
Frontend Implementation
The date picker automatically adjusts its min/max dates based on passenger type:
<!-- For Adults -->
<input type="date"
min="1925-10-27" <!-- 100 years ago -->
max="2007-10-27" <!-- 18 years ago -->
required>
<!-- For Children -->
<input type="date"
min="2007-10-27" <!-- 18 years ago -->
max="2025-10-27" <!-- Today -->
required>
Backend Validation
Server-side validation ensures data integrity even if frontend validation is bypassed:
// For Adults
'born_on' => 'required|date|before_or_equal:18_years_ago|after_or_equal:100_years_ago'
// For Children
'born_on' => 'required|date|before_or_equal:today|after_or_equal:18_years_ago'
Benefits
- ✅ Prevents booking errors before form submission
- ✅ Improves user experience with appropriate date ranges
- ✅ Data validation on both frontend and backend
- ✅ Supports newborns (children can be born today)
- ✅ Handles elderly passengers (up to 100 years old)
Testing the New Features
Test Case 1: Adult Passenger with Passport
- Search for a flight with 1 adult
- Fill in passenger details
- Try to select date of birth - should be limited to 18-100 years old
- Fill in all 5 passport fields
- Submit booking
- Expected: Booking successful with passport data saved
Test Case 2: Child Passenger
- Search for a flight with 1 child
- Try to select date of birth
- Expected: Can select any date up to today (including today)
- Expected: Cannot select dates older than 18 years ago
- Complete passport fields and submit
Test Case 3: Verify Passport Display
- Complete a flight booking
- Go to booking details page
- Download user PDF
- Check admin panel for booking
- Download admin PDF
- Expected: All pages show complete passport information
Changelog
Flight Booking Updates
- Add PNR missing number in flight booking
- Fix Booking Error from Duffel if it's not support Hold booking
- Remove additional Gateways from flight booking as DUffel only accept Stripe payments through cards
- Update flight booking flow for better user experience
- API Updates
Api Updates
- New API endpoints for duffel flights booking for fare rules, baggage with change and cancel options
- Add api for change flight process along with payment handling
- API: Full visa API—list visas, get by ID/slug, create booking, mark paid, required documents, upload documents, track by reference; payment endpoints support
booking_type: 'visa'
NEW Visas Module
- Full visa listing with filters (keyword, visa type, country, price range)
- Visa detail pages with required documents, validity, processing time, and related visas
- Multi-step visa booking flow: travel details (step 1), traveler details (step 2), payment (step 3)
- Payment integration: Stripe, PayPal, and Paystack for visa bookings
- Document upload after payment: required documents per visa, PDF/JPG/PNG support (max 5MB)
- User visa bookings list and booking tracking by reference
- Admin: visa booking management, document review, status updates
- API: Full visa API—list visas, get by ID/slug, create booking, mark paid, required documents, upload documents, track by reference; payment endpoints support
booking_type: 'visa'
NEW Duffel Flight Change & Cancel
- Change flight: request change options, select new flight, pay change total (penalty + fare difference) via Stripe/PayPal/Paystack or balance
- Cancel flight: Duffel order cancellation with refund; only when fare rules allow and within deadline
- Change/Cancel buttons shown only when booking has a Duffel order and is within fare rules time
- Change total on change-offers page shows breakdown: “Includes change penalty and any fare difference”; penalty amount displayed when provided by API
NEW Fare Rules & Baggage (Duffel)
- Fare rules (conditions) displayed on booking details and in API: change/refund allowed, penalty amount and currency
- Baggage info from offer: checked bags and carry-on per slice, exposed in booking and in API
- Booking API responses include
fare_rules,baggages,can_show_change_cancel_buttons,is_past_fare_rules_deadline,order_expire_at
FIXED Flight Booking Without Duffel Hold
- Booking is only created when Duffel hold is successful (e.g. sufficient balance); no payment redirect without a valid hold
- Payment success handlers (Stripe, PayPal, Paystack) only confirm booking when a Duffel order exists and
payDuffelHoldsucceeds - If payment was received but no Duffel order: user sees support message instead of false “confirmed”; Change/Cancel remain unavailable
UPDATED System Settings & UI
- Updated system settings view and layout for clearer organization
- Improved settings sections and navigation for Flights (Duffel), Payments, and general options
- Tawk.to Live Chat integration and settings
- Vonage OTP settings for SMS verification
- Google Analytics integration and settings
NEW Enhanced Registration Security
- Added comprehensive name field validation to prevent spam and bot registrations
- Implemented custom ValidName rule to detect URLs, emails, spam keywords, and invalid patterns
- Added honeypot field (website) to catch automated bot submissions
- Reduced name field maxlength from 100 to 50 characters for better data quality
- Added real-time client-side validation with visual feedback indicators
NEW Stronger Password Validation
- Enforced password requirements: minimum 8 characters, uppercase, lowercase, numbers, and symbols
- Added real-time password strength indicators with visual feedback
- Updated server-side validation using Laravel's Password rule class
- Enhanced user experience with clear requirement indicators
NEW GDPR Compliance Features
- Added GDPR consent checkbox to user registration form
- Implemented cookie consent banner with preference management
- Created admin panel for managing cookie consent settings (title, message, active status)
- Added cookie preference modal with granular control options
- Integrated cookie consent with existing settings system
NEW Admin Booking Management
- Added delete functionality for flight bookings with confirmation dialogs
- Added delete functionality for tour bookings with confirmation dialogs
- Added delete functionality for hotel bookings with confirmation dialogs
- Implemented audit logging for all booking deletions
- Added success/error message display for all booking operations
FIXED CMS Menu Saving Bug
- Fixed "show in menu" checkbox not saving state for CMS pages
- Corrected menu entry creation/update/deletion logic in ModulesDataController
- Fixed checkbox value attribute for proper form submission
- Improved menu order calculation logic
FIXED Menu Model Mass Assignment
- Added $fillable property to Menu model to allow mass assignment
- Fixed "Add [title] to fillable property" error when saving menu entries
UPDATED Code Improvements
- Updated CreateNewUser action with enhanced validation rules
- Improved PasswordValidationRules trait with comprehensive password checks
- Enhanced SettingsController with cookie consent management
- Updated admin routes with new delete endpoints
- Improved admin sidebar navigation with cookie consent settings link
NEW Passport Information Collection
- Added 5 passport fields (Number, Issue Date, Expiry Date, Issuing Country, Country of Residence)
- Integrated with booking form and all display pages
- Added to user and admin PDF downloads
- Complete API documentation for mobile apps
NEW Age-Based Date Validation
- Adults must be 18-100 years old
- Children must be under 18 years old
- Dynamic date picker limits based on passenger type
- Server-side validation for data integrity
UPDATED API Endpoints
- Updated booking API to require passport fields
- Added age-based DOB validation in API
- Complete mobile app integration guide with React Native & Flutter examples
FIXED Bug Fixes
- Fixed optional add-ons price update issue
- Fixed PDF generation errors
- Fixed passenger loop iteration issues
NEW Migration System
- Added 17 Laravel migration files
- Replaced manual SQL imports with version-controlled migrations
- Improved team collaboration and deployment
NEW Enhanced Multilingual System
- Complete translation system for all content
- RTL language support (Arabic, Hebrew, etc.)
- Dynamic language switching with flag images
Support & Resources
Documentation Files
API_DOCUMENTATION.md
Complete API reference with all endpoints and request/response formats
API_PASSPORT_UPDATE.md
Mobile app integration guide with React Native and Flutter examples
API_QUICK_REFERENCE.md
Quick reference for API endpoints and validation rules
COMPLETE_UPDATE_SUMMARY.md
Complete summary of all changes in version 4.1
Important Notice
Customization Support: The code is provided "as is". Customizing code and design-related issues can be done as freelance work on a $10-40 hourly rate only with PayPal and/or Western Union, if Travel In is available.
For Beginners: If you are new to programming, please understand that I cannot fix your site for free. I suggest reading documentation available online regarding using PHP, server requirements, Laravel framework, etc.
Getting Help
- Item Discussion: Visit the CodeCanyon item discussion section
- Documentation: Read all documentation files thoroughly
- Code Issues: Check code comments for implementation details