Advanced Features
Advanced Features
Explore advanced features and configurations in Flatboard 5. This guide covers power user options, customizations, and integrations.
Advanced Configuration
Custom Configuration
Edit stockage/json/config.json directly (with caution):
{
"custom_setting": "value",
"advanced_option": {
"enabled": true,
"config": {}
}
}Always backup
config.json before editing manually. Ensure the forum is in maintenance mode or not running.Environment Variables
Use environment variables for sensitive data:
# Set environment variable
export FLATBOARD_DB_PASSWORD="secret"
# Use in PHP
$password = getenv('FLATBOARD_DB_PASSWORD');Custom Hooks
Create custom hooks in plugins:
Plugin::hook('custom.event', function($data) {
// Handle custom event
});CLI Commands
Available Commands
# Configuration
php app/Cli/console.php config:get <key>
php app/Cli/console.php config:set <key> <value>
php app/Cli/console.php config:list
# Cache
php app/Cli/console.php cache:clear
php app/Cli/console.php cache:rebuild
# Plugins
php app/Cli/console.php plugin:activate <plugin>
php app/Cli/console.php plugin:deactivate <plugin>
php app/Cli/console.php plugin:list
# Cleanup
php app/Cli/console.php cleanup:cache
php app/Cli/console.php cleanup:empty-discussions
php app/Cli/console.php cleanup:storage
# Database (Pro Edition)
php app/Cli/console.php db:optimize
php app/Cli/console.php db:backup
php app/Cli/console.php db:restore <file>Custom Commands
Create custom CLI commands:
// app/Cli/Commands/CustomCommand.php
namespace App\Cli\Commands;
class CustomCommand
{
public function handle($args)
{
// Command logic
}
}Advanced Permissions
Custom Permission Checks
Check permissions programmatically:
use App\Helpers\PermissionHelper;
if (PermissionHelper::can('create_discussion', $categoryId)) {
// User can create discussion
}Permission Overrides
Override permissions for specific users:
// In user profile
$user->setPermissionOverride('create_discussion', true);Custom Integrations
Webhook Integration
Set up webhooks for external services:
Plugin::hook('discussion.created', function($discussion) {
// Send webhook
$payload = json_encode($discussion);
file_get_contents('https://webhook.url', [
'http' => [
'method' => 'POST',
'content' => $payload
]
]);
});API Integration
Integrate with external APIs:
$response = file_get_contents('https://api.example.com/data', [
'http' => [
'header' => 'Authorization: Bearer ' . $apiKey
]
]);Performance Tuning
Advanced Caching
Configure custom cache:
use App\Core\Cache;
Cache::set('custom_key', $data, 3600);
$data = Cache::get('custom_key');Database Optimization (Pro Edition)
Advanced SQLite optimization:
-- Custom indexes
CREATE INDEX idx_custom ON table(column);
-- Query optimization
EXPLAIN QUERY PLAN SELECT * FROM table WHERE column = ?;
-- Statistics
ANALYZE table;Custom Views
Override Templates
Create custom template overrides:
themes/my-theme/views/
├── discussions/
│ └── custom-view.php
└── layouts/
└── custom-layout.phpCustom Routes
Register custom routes:
Plugin::hook('app.routes.register', function($router) {
$router->get('/custom', function() {
return view('custom.template');
});
});Advanced Security
Custom Middleware
Create custom middleware:
namespace App\Middleware;
use App\Core\Request;
use App\Core\Response;
class CustomMiddleware implements MiddlewareInterface
{
public function handle(Request $request, Response $response): bool
{
// Custom logic — return true to continue, false to stop
return true;
}
}Security Headers
Add custom security headers:
header('X-Custom-Header', 'value');
header('Content-Security-Policy', "default-src 'self'");Monitoring and Logging
Custom Logging
Create custom log entries:
use App\Core\Logger;
Logger::info('Custom event', ['data' => $data]);
Logger::error('Error occurred', ['error' => $error]);Performance Monitoring
Monitor performance:
$start = microtime(true);
// Code to monitor
$duration = microtime(true) - $start;
Logger::info('Performance', ['duration' => $duration]);Advanced Storage
Custom Storage Drivers
Create custom storage drivers (advanced):
class CustomStorageDriver implements StorageInterface
{
public function save($data) { }
public function load($id) { }
public function delete($id) { }
}Storage Migration
Advanced migration techniques:
// Custom migration script
$oldData = loadFromOldStorage();
$newData = transformData($oldData);
saveToNewStorage($newData);Custom Features
Custom User Fields
Add custom user fields:
// In plugin
Plugin::hook('user.profile.fields', function(&$fields) {
$fields[] = [
'name' => 'custom_field',
'label' => 'Custom Field',
'type' => 'text'
];
});Custom Post Types
Create custom post types:
Plugin::hook('post.types.register', function(&$types) {
$types['custom'] = [
'name' => 'Custom Post',
'handler' => CustomPostHandler::class
];
});Integration Examples
Discord Integration
Send notifications to Discord:
Plugin::hook('discussion.created', function($discussion) {
$webhook = 'https://discord.com/api/webhooks/...';
$payload = [
'content' => "New discussion: {$discussion['title']}"
];
file_get_contents($webhook, [
'http' => [
'method' => 'POST',
'content' => json_encode($payload)
]
]);
});Slack Integration
Integrate with Slack:
$slackWebhook = 'https://hooks.slack.com/services/...';
$message = ['text' => 'Forum notification'];
file_get_contents($slackWebhook, [
'http' => [
'method' => 'POST',
'content' => json_encode($message)
]
]);Best Practices
Code Organization
- Use Namespaces - Organize code with namespaces
- Follow PSR Standards - Adhere to PSR coding standards
- Document Code - Add comments and documentation
- Test Thoroughly - Test custom code
Security
- Validate Input - Always validate user input
- Sanitize Output - Sanitize all output
- Use CSRF Protection - Protect forms
- Check Permissions - Verify permissions
Performance
- Cache When Possible - Cache expensive operations
- Optimize Queries - Write efficient queries
- Minimize Requests - Reduce HTTP requests
- Use Async - Use asynchronous operations
Resources
- Developer Guide - Development documentation
- Plugin Guide - Plugin development
- API Documentation - API integration
- Troubleshooting - Advanced issues
Last updated: February 23, 2026