Advanced Features

Advanced Features

Advanced Configuration

Custom Configuration

Edit stockage/json/config.json directly (with caution):

{
  "custom_setting": "value",
  "advanced_option": {
    "enabled": true,
    "config": {}
  }
}

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.php

Custom 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

Last updated: February 23, 2026