Advanced Features
Advanced Features
Advanced Configuration
Custom Configuration
Edit stockage/json/config.json directly (with caution):
{
"custom_setting": "value",
"advanced_option": {
"enabled": true,
"config": {}
}
}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
Run php app/Cli/console.php with no argument to print the built-in list of available commands.
# Cache
php app/Cli/console.php cache:clear # clear the cache
# Users
php app/Cli/console.php user:create --username=NAME --email=EMAIL --password=PASS [--admin]
# Backups (alternative to admin UI)
php app/Cli/console.php backup:create # create a full backup archive
php app/Cli/console.php backup:restore <file> # restore from a backup archive
php app/Cli/console.php backup:list # list available backups
# Statistics
php app/Cli/console.php stats:show # show forum statistics summary
php app/Cli/console.php stats:rebuild # recalculate per-user statistics
# Rebuild caches/counters
php app/Cli/console.php markdown:rebuild # re-render every post's Markdown to HTML
php app/Cli/console.php categories:rebuild # recalculate discussion/post counters per category
# Cleanup
php app/Cli/console.php cleanup:stockage # remove obsolete files in stockage/
php app/Cli/console.php cleanup:visitors # purge old anonymous visitor entries (default: 60 min)
php app/Cli/console.php cleanup:unverified-users # delete unverified accounts older than N days (default: 7)
php app/Cli/console.php cleanup:duplicate-posts # remove duplicate post files
php app/Cli/console.php cleanup:logs # purge old log files (default: 30 days, --all)
# Sitemap
php app/Cli/console.php sitemap:generate # generate sitemap.xml manually
# Updates
php app/Cli/console.php update:renew-cacert # force-download the latest Mozilla CA bundle (SSL)
# Webhooks
php app/Cli/console.php webhook:process # process pending webhook deliveries
php app/Cli/console.php webhook:cleanup # clean up old webhook jobs
php app/Cli/console.php webhook:stats # show webhook queue statistics
# Storage migration (Pro Edition)
php app/Cli/console.php migrate:to-sqlite # migrate JSON storage to SQLite
php app/Cli/console.php migrate:to-json # migrate SQLite storage to JSONCustom 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: March 28, 2026