mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-24 20:02:35 +01:00
Merge pull request #3072 from BookStackApp/logical_theme_commands
Support custom commands via logical theme system
This commit is contained in:
commit
c6e196989e
@ -3,6 +3,8 @@
|
||||
namespace BookStack\Theming;
|
||||
|
||||
use BookStack\Auth\Access\SocialAuthService;
|
||||
use Illuminate\Contracts\Console\Kernel;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
|
||||
class ThemeService
|
||||
{
|
||||
@ -43,6 +45,16 @@ class ThemeService
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a new custom artisan command to be available.
|
||||
*/
|
||||
public function registerCommand(Command $command)
|
||||
{
|
||||
/** @var \Illuminate\Foundation\Console\Kernel $consoleKernel */
|
||||
$consoleKernel = app()->make(Kernel::class);
|
||||
$consoleKernel->registerCommand($command);
|
||||
}
|
||||
|
||||
/**
|
||||
* Read any actions from the set theme path if the 'functions.php' file exists.
|
||||
*/
|
||||
|
@ -77,6 +77,32 @@ Theme::listen(ThemeEvents::APP_BOOT, function($app) {
|
||||
});
|
||||
```
|
||||
|
||||
## Custom Commands
|
||||
|
||||
The logical theme system supports adding custom [artisan commands](https://laravel.com/docs/8.x/artisan) to BookStack. These can be registered in your `functions.php` file by calling `Theme::registerCommand($command)`, where `$command` is an instance of `\Symfony\Component\Console\Command\Command`.
|
||||
|
||||
Below is an example of registering a command that could then be ran using `php artisan bookstack:meow` on the command line.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use BookStack\Facades\Theme;
|
||||
use Illuminate\Console\Command;
|
||||
|
||||
class MeowCommand extends Command
|
||||
{
|
||||
protected $signature = 'bookstack:meow';
|
||||
protected $description = 'Say meow on the command line';
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$this->line('Meow there!');
|
||||
}
|
||||
}
|
||||
|
||||
Theme::registerCommand(new MeowCommand);
|
||||
```
|
||||
|
||||
## Custom Socialite Service Example
|
||||
|
||||
The below shows an example of adding a custom reddit socialite service to BookStack.
|
||||
|
@ -7,8 +7,10 @@ use BookStack\Entities\Models\Page;
|
||||
use BookStack\Entities\Tools\PageContent;
|
||||
use BookStack\Facades\Theme;
|
||||
use BookStack\Theming\ThemeEvents;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use League\CommonMark\ConfigurableEnvironmentInterface;
|
||||
|
||||
@ -206,6 +208,16 @@ class ThemeTest extends TestCase
|
||||
$this->assertStringContainsString('donkey=donut', $redirect);
|
||||
}
|
||||
|
||||
public function test_register_command_allows_provided_command_to_be_usable_via_artisan()
|
||||
{
|
||||
Theme::registerCommand(new MyCustomCommand);
|
||||
|
||||
Artisan::call('bookstack:test-custom-command', []);
|
||||
$output = Artisan::output();
|
||||
|
||||
$this->assertStringContainsString('Command ran!', $output);
|
||||
}
|
||||
|
||||
protected function usingThemeFolder(callable $callback)
|
||||
{
|
||||
// Create a folder and configure a theme
|
||||
@ -220,3 +232,10 @@ class ThemeTest extends TestCase
|
||||
File::deleteDirectory($themeFolderPath);
|
||||
}
|
||||
}
|
||||
|
||||
class MyCustomCommand extends Command {
|
||||
protected $signature = 'bookstack:test-custom-command';
|
||||
public function handle() {
|
||||
$this->line('Command ran!');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user