- Created complete documentation in docs/ directory - Added PROJECT_OVERVIEW.md with feature highlights and getting started guide - Added ARCHITECTURE.md with system design and technical details - Added SECURITY.md with comprehensive security implementation guide - Added DEVELOPMENT.md with development workflows and best practices - Added DEPLOYMENT.md with production deployment instructions - Added API.md with complete REST API documentation - Added CONTRIBUTING.md with contribution guidelines - Added CHANGELOG.md with version history and migration notes - Reorganized all documentation files into docs/ directory for better organization - Updated README.md with proper documentation links and quick navigation - Enhanced project structure with professional documentation standards
20 KiB
EasyStream Settings System - Complete Guide
Configure your entire platform through the admin panel - no code changes required!
Table of Contents
- Quick Installation
- Accessing Settings
- Settings Categories
- Usage Examples
- Settings Reference
- Advanced Features
- Troubleshooting
Quick Installation
Step 1: Run the SQL Migration
Using Docker:
docker exec -i easystream-db mysql -u easystream -peasystream easystream < __install/install_settings_system.sql
Using MySQL directly:
mysql -u easystream -p easystream < __install/install_settings_system.sql
Step 2: Access the Settings Panel
- Log in to admin panel:
http://yoursite.com/admin_login.php - Navigate to Settings in the sidebar
- Or go directly to:
http://yoursite.com/admin_settings.php
Step 3: Start Configuring
Choose from 8 comprehensive categories and configure your platform without touching any code!
Accessing Settings
Admin Panel UI
The settings panel provides a beautiful, organized interface with:
- 8 Tabbed Categories - General, Modules, Branding, Payments, Email, Payouts, SEO, Security
- Live Search - Press
Ctrl+K(orCmd+Kon Mac) to instantly search settings - Category Filtering - Filter by category to focus on specific configuration areas
- Visual Feedback - Color-coded inputs, helpful descriptions, validation messages
- Bulk Save - Save multiple settings at once with a single click
Search & Filter Features
-
Keyboard Shortcuts:
Ctrl+KorCmd+K- Focus search boxEscape- Clear search
-
Search Capabilities:
- Search by setting name
- Search by label text
- Search by help text
- Real-time highlighting of matches
- Result count display
Settings Categories
1. General Settings
Configure your site's basic identity and system settings.
Key Settings:
- Site name and title
- Admin email address
- Main website URL
- Debug mode toggle
- Maintenance mode
Example:
$settings = new Settings($pdo);
$settings->set('website_shortname', 'MyTube');
$settings->set('head_title', 'MyTube - Video Sharing Platform');
2. Modules Management
Enable or disable platform features with visual toggle switches.
Available Modules:
- Video uploads
- Live streaming
- Shorts (TikTok-style)
- Images
- Audio
- Documents
- Blogs
- Paid memberships
- Token economy
Example:
$settings = new Settings($pdo);
// Disable blogs and documents
$settings->setModuleEnabled('blog', false);
$settings->setModuleEnabled('document', false);
// Check if a module is enabled
if ($settings->isModuleEnabled('video')) {
// Show video upload interface
}
3. Branding & Appearance
Customize your platform's look and feel.
Customizable Elements:
- Primary color (buttons, links, accents)
- Secondary color (highlights, hover states)
- Logo URL
- Favicon URL
- Custom footer text
Example:
$settings = new Settings($pdo);
$settings->setMultiple([
'branding_primary_color' => '#FF0000',
'branding_secondary_color' => '#282828',
'branding_logo_url' => 'https://mysite.com/logo.png',
'branding_favicon_url' => 'https://mysite.com/favicon.ico'
]);
Live Color Picker: The admin UI includes a built-in color picker for instant visual feedback.
4. Payment Gateways
Configure PayPal and Stripe for payments.
PayPal Settings:
- PayPal email
- Client ID
- Secret key
- Test mode toggle
Stripe Settings:
- Publishable key
- Secret key
- Webhook secret
- Enable/disable toggle
Example:
$settings = new Settings($pdo);
// Enable Stripe payments
$settings->setMultiple([
'stripe_enabled' => '1',
'stripe_publishable_key' => 'pk_live_xxxxx',
'stripe_secret_key' => 'sk_live_xxxxx',
'stripe_webhook_secret' => 'whsec_xxxxx',
'payment_methods' => 'Paypal,Stripe'
]);
// Access payment config in your code
$paymentConfig = $settings->getPaymentConfig();
if ($paymentConfig['stripe']['enabled']) {
// Initialize Stripe SDK
\Stripe\Stripe::setApiKey($paymentConfig['stripe']['secret_key']);
}
5. Email Configuration
Set up SMTP for transactional emails.
SMTP Settings:
- Host (e.g., smtp.gmail.com)
- Port (587 for TLS, 465 for SSL)
- Username
- Password
- Encryption type (TLS/SSL)
- Authentication enabled
Example:
$settings = new Settings($pdo);
// Configure SendGrid SMTP
$settings->setMultiple([
'mail_type' => 'smtp',
'mail_smtp_host' => 'smtp.sendgrid.net',
'mail_smtp_port' => '587',
'mail_smtp_username' => 'apikey',
'mail_smtp_password' => 'your-sendgrid-api-key',
'mail_smtp_auth' => 'true',
'mail_smtp_prefix' => 'tls',
'backend_email' => 'noreply@mysite.com',
'backend_email_fromname' => 'MyTube Team'
]);
// Access email config
$emailConfig = $settings->getEmailConfig();
6. Creator Payouts
Configure revenue sharing with content creators.
Payout Settings:
- Enable/disable payout system
- Revenue share percentage (0-100%)
- Minimum payout amount
- Payout schedule (weekly, monthly, quarterly, manual)
- Default payout method (PayPal, Stripe, bank transfer)
Example:
$settings = new Settings($pdo);
// Enable creator payouts with 80% revenue share
$settings->setMultiple([
'creator_payout_enabled' => '1',
'creator_payout_percentage' => '80',
'minimum_payout_amount' => '100.00',
'payout_schedule' => 'monthly',
'payout_method' => 'paypal'
]);
7. SEO & Marketing
Optimize your site for search engines.
SEO Settings:
- Meta description
- Meta keywords
- Site title optimization
Example:
$settings = new Settings($pdo);
$settings->setMultiple([
'head_title' => 'MyTube - Best Video Sharing Platform',
'metaname_description' => 'Upload, share, and watch videos on MyTube. Join millions of creators.',
'metaname_keywords' => 'video sharing, streaming, upload videos, watch videos'
]);
8. Security Settings
Configure user registration and authentication requirements.
Security Controls:
- Minimum/maximum age for signup
- Username length requirements
- Password length requirements
- Username format (strict/relaxed)
- Remember me feature
Example:
$settings = new Settings($pdo);
$settings->setMultiple([
'signup_min_age' => '13',
'signup_max_age' => '120',
'signup_min_username' => '3',
'signup_max_username' => '20',
'signup_min_password' => '8',
'signup_max_password' => '50',
'username_format' => 'relaxed'
]);
Usage Examples
Method 1: Using the Settings Class (Recommended)
<?php
require_once 'f_core/f_classes/class.settings.php';
// Initialize
$settings = new Settings($pdo);
// Get a single setting
$siteName = $settings->get('website_shortname', 'EasyStream');
// Set a single setting
$settings->set('website_shortname', 'My Awesome Site');
// Get multiple settings at once
$emailConfig = $settings->getEmailConfig();
$paymentConfig = $settings->getPaymentConfig();
// Set multiple settings at once (bulk operation)
$settings->setMultiple([
'website_shortname' => 'My Site',
'head_title' => 'My Site - Video Platform',
'branding_primary_color' => '#FF0000'
]);
// Get all settings in a category
$brandingSettings = $settings->getByPrefix('branding_');
// Check if a module is enabled
if ($settings->isModuleEnabled('video')) {
// Show video upload interface
}
// Set module status
$settings->setModuleEnabled('blog', false);
Method 2: Using Data Providers (Admin Panel)
<?php
require_once 'admin/includes/data_providers.php';
// Get a single setting
$siteName = admin_get_setting($pdo, 'website_shortname');
// Save a setting
admin_save_setting($pdo, 'website_shortname', 'New Site Name');
// Save multiple settings
admin_save_multiple_settings($pdo, [
'website_shortname' => 'New Site',
'head_title' => 'New Title'
]);
// Get module status
$modules = admin_fetch_module_status($pdo);
// Toggle a module
admin_toggle_module($pdo, 'video_module', true);
Method 3: Legacy Database Class
<?php
global $class_database;
// Load specific settings
$class_database->getConfigurations('website_shortname,head_title,backend_email');
// Access via $cfg array
global $cfg;
echo $cfg['website_shortname']; // Site name
Settings Reference
Complete Settings List
| Category | Setting Name | Description | Type | Default |
|---|---|---|---|---|
| General | website_shortname |
Short site name | text | EasyStream |
head_title |
Browser tab title | text | EasyStream | |
backend_email |
Admin email | admin@example.com | ||
main_url |
Main website URL | url | http://localhost:8083 | |
debug_mode |
Enable debug mode | boolean | 0 | |
| Modules | video_module |
Enable videos | boolean | 1 |
live_module |
Enable live streaming | boolean | 1 | |
short_module |
Enable shorts | boolean | 1 | |
image_module |
Enable images | boolean | 1 | |
audio_module |
Enable audio | boolean | 1 | |
document_module |
Enable documents | boolean | 1 | |
blog_module |
Enable blogs | boolean | 1 | |
paid_memberships |
Enable memberships | boolean | 0 | |
token_system_enabled |
Enable tokens | boolean | 1 | |
| Branding | branding_primary_color |
Primary UI color | color | #1a73e8 |
branding_secondary_color |
Secondary UI color | color | #34a853 | |
branding_logo_url |
Logo URL | url | (empty) | |
branding_favicon_url |
Favicon URL | url | (empty) | |
branding_footer_text |
Custom footer | text | (empty) | |
| Payments | paypal_email |
PayPal email | (empty) | |
paypal_test |
PayPal test mode | boolean | 1 | |
paypal_client_id |
PayPal client ID | text | (empty) | |
paypal_secret |
PayPal secret (encrypted) | password | (empty) | |
stripe_enabled |
Enable Stripe | boolean | 0 | |
stripe_publishable_key |
Stripe public key | text | (empty) | |
stripe_secret_key |
Stripe secret (encrypted) | password | (empty) | |
stripe_webhook_secret |
Webhook secret (encrypted) | password | (empty) | |
mail_type |
Mailer type | select | smtp | |
mail_smtp_host |
SMTP hostname | text | smtp.gmail.com | |
mail_smtp_port |
SMTP port | number | 587 | |
mail_smtp_username |
SMTP username | text | (empty) | |
mail_smtp_password |
SMTP password (encrypted) | password | (empty) | |
mail_smtp_auth |
SMTP authentication | boolean | true | |
mail_smtp_prefix |
Encryption type | select | tls | |
| Payouts | creator_payout_enabled |
Enable payouts | boolean | 0 |
creator_payout_percentage |
Revenue share % | number | 70 | |
minimum_payout_amount |
Minimum payout | decimal | 50.00 | |
payout_schedule |
Payout frequency | select | monthly | |
payout_method |
Default method | select | paypal | |
| SEO | metaname_description |
Meta description | textarea | (empty) |
metaname_keywords |
Meta keywords | textarea | (empty) | |
| Security | signup_min_age |
Minimum age | number | 18 |
signup_max_age |
Maximum age | number | 70 | |
signup_min_username |
Min username length | number | 5 | |
signup_max_username |
Max username length | number | 15 | |
signup_min_password |
Min password length | number | 5 | |
signup_max_password |
Max password length | number | 15 | |
username_format |
Username format | select | strict | |
login_remember |
Enable remember me | boolean | 1 |
Advanced Features
1. Redis Caching (10-100x Faster)
The Settings class automatically uses Redis when available:
$settings = new Settings($pdo);
// First call - queries database
$siteName = $settings->get('website_shortname');
// Subsequent calls - served from Redis cache (milliseconds instead of seconds)
$siteName = $settings->get('website_shortname');
// Cache is automatically cleared when settings are updated
$settings->set('website_shortname', 'New Name'); // Invalidates cache
Cache Details:
- TTL: 1 hour (3600 seconds)
- Automatic invalidation on updates
- Uses existing
VRedissingleton - Falls back to database if Redis unavailable
2. Input Validation
All settings are validated before being saved:
$settings = new Settings($pdo);
try {
// Valid email required
$settings->set('backend_email', 'admin@example.com'); // ✅ Valid
// Invalid email throws exception
$settings->set('backend_email', 'not-an-email'); // ❌ Throws exception
// Port must be 1-65535
$settings->set('mail_smtp_port', 587); // ✅ Valid
$settings->set('mail_smtp_port', 99999); // ❌ Throws exception
// Colors must be valid hex
$settings->set('branding_primary_color', '#FF0000'); // ✅ Valid
$settings->set('branding_primary_color', 'red'); // ❌ Throws exception
} catch (InvalidArgumentException $e) {
echo "Validation error: " . $e->getMessage();
}
Validation Rules:
email- Valid email formaturl- Valid URL formatcolor- Valid hex color (#RRGGBB)int- Integer with optional min/maxfloat- Decimal number with optional min/maxbool- Boolean (0/1, true/false, yes/no)string- Text with optional min/max length
3. Encryption for Sensitive Data
Sensitive settings are automatically encrypted:
$settings = new Settings($pdo);
// These are automatically encrypted in the database:
$settings->set('paypal_secret', 'secret_key_here');
$settings->set('stripe_secret_key', 'sk_live_xxxxx');
$settings->set('mail_smtp_password', 'smtp_password');
$settings->set('google_client_secret', 'oauth_secret');
// When you retrieve them, they're automatically decrypted:
$secret = $settings->get('paypal_secret'); // Returns decrypted value
Encrypted Settings:
- PayPal secret
- Stripe secret key
- Stripe webhook secret
- SMTP password
- Google client secret
- Facebook app secret
- Twitter API secret
Encryption Method: AES-256-CBC using keys from config.define.php (ENC_FIRSTKEY, ENC_SECONDKEY)
4. Audit Trail & Change History
Every settings change is tracked with complete audit trail:
$settings = new Settings($pdo);
// Change a setting
$settings->set('website_shortname', 'New Site Name');
// View change history (last 20 changes)
$history = $settings->getHistory('website_shortname');
foreach ($history as $change) {
echo "Changed on: " . $change['changed_at'] . "\n";
echo "Changed by: User #" . $change['changed_by'] . "\n";
echo "Old value: " . $change['old_value'] . "\n";
echo "New value: " . $change['new_value'] . "\n";
echo "IP address: " . $change['ip_address'] . "\n";
}
// Rollback to a previous value
$settings->rollback('website_shortname', $historyId);
Tracked Information:
- Setting name
- Old value
- New value
- User who made the change
- Timestamp
- IP address
- User agent
- Optional change reason
5. Bulk Operations
Efficiently update multiple settings at once:
$settings = new Settings($pdo);
// Atomic transaction - all or nothing
$settings->setMultiple([
'website_shortname' => 'MyTube',
'head_title' => 'MyTube - Video Platform',
'branding_primary_color' => '#FF0000',
'branding_secondary_color' => '#282828',
'backend_email' => 'admin@mytube.com'
]);
// If any setting fails validation, the entire operation is rolled back
6. Export & Import
Backup and restore your configuration:
$settings = new Settings($pdo);
// Export all settings to JSON
$backup = $settings->exportJSON();
file_put_contents('settings_backup.json', $backup);
// Import settings from JSON
$json = file_get_contents('settings_backup.json');
$settings->importJSON($json);
Use Cases:
- Backup before major changes
- Duplicate configuration across environments
- Version control your settings
- Disaster recovery
Troubleshooting
Settings Not Saving
Symptoms: Changes don't persist after clicking Save
Solutions:
- Check database connection in
f_core/config.database.php - Verify PDO is initialized in
admin/includes/bootstrap.php - Check error logs:
f_data/data_logs/log_error/ - Ensure
db_settingstable exists - Check file permissions on log directories
Settings Not Loading
Symptoms: Settings page shows errors or empty values
Solutions:
- Clear Redis cache (if using Redis)
- Verify
db_settingstable exists - Run the installation script:
__install/install_settings_system.sql - Check that settings were inserted:
SELECT COUNT(*) FROM db_settings; - Review PHP error logs
Validation Errors
Symptoms: "Invalid value" errors when saving
Solutions:
- Check the error message for specific validation requirements
- Ensure email addresses are properly formatted
- Verify URLs include protocol (http:// or https://)
- Check number ranges (e.g., SMTP port must be 1-65535)
- Use hex color codes for color settings (#RRGGBB)
PayPal/Stripe Not Working
Symptoms: Payments fail or aren't processed
Solutions:
- Verify API keys are correct (check for spaces/typos)
- Ensure test mode is disabled for production
- Check webhook URLs are configured in payment gateway dashboard
- Review payment gateway API documentation
- Test API keys using gateway's test tools
- Check error logs for detailed error messages
Email Not Sending
Symptoms: No emails received from the platform
Solutions:
- Test SMTP connection manually
- Verify SMTP credentials are correct
- Check firewall allows outbound connections on port 587 (TLS) or 465 (SSL)
- Try a different SMTP provider (SendGrid, Mailgun, etc.)
- Review email logs in
f_data/data_logs/ - Test with a simple mail client first
- Check spam/junk folders
Search Not Working
Symptoms: Settings search doesn't filter results
Solutions:
- Clear browser cache
- Check JavaScript console for errors (F12)
- Ensure
admin/includes/settings_search.phpis included - Verify settings have
data-setting-*attributes - Try a different browser
Security Best Practices
1. Protect Sensitive Settings
// ✅ Good - Use environment variables for production secrets
$settings->set('stripe_secret_key', getenv('STRIPE_SECRET_KEY'));
// ❌ Bad - Don't hardcode secrets
$settings->set('stripe_secret_key', 'sk_live_abc123');
2. Regular Backups
// Backup before major changes
$backup = $settings->exportJSON();
file_put_contents("backup_" . date('Y-m-d') . ".json", $backup);
3. Access Control
- Settings page requires admin authentication
- Regular users cannot access
/admin_settings.php - Use role-based access control (RBAC)
4. Audit Review
Regularly review change history:
$history = $settings->getHistory('stripe_secret_key', 50);
// Review who changed sensitive settings and when
File Reference
Core Files
- admin_settings.php - Main settings UI
- f_core/f_classes/class.settings.php - Settings management class
- admin/includes/data_providers.php - Settings data providers (lines 759-1041)
- admin/includes/settings_search.php - Search & filter UI component
- admin/includes/layout.php - Shared UI with sidebar navigation
- __install/install_settings_system.sql - Complete installation script
License
This settings system is part of EasyStream and subject to the EasyStream Proprietary License Agreement.
Copyright (c) 2025 Sami Ahmed. All rights reserved.