mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-27 15:57:04 +03: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;
|
namespace BookStack\Theming;
|
||||||
|
|
||||||
use BookStack\Auth\Access\SocialAuthService;
|
use BookStack\Auth\Access\SocialAuthService;
|
||||||
|
use Illuminate\Contracts\Console\Kernel;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
|
||||||
class ThemeService
|
class ThemeService
|
||||||
{
|
{
|
||||||
@ -43,6 +45,16 @@ class ThemeService
|
|||||||
return null;
|
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.
|
* 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
|
## Custom Socialite Service Example
|
||||||
|
|
||||||
The below shows an example of adding a custom reddit socialite service to BookStack.
|
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\Entities\Tools\PageContent;
|
||||||
use BookStack\Facades\Theme;
|
use BookStack\Facades\Theme;
|
||||||
use BookStack\Theming\ThemeEvents;
|
use BookStack\Theming\ThemeEvents;
|
||||||
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
use Illuminate\Support\Facades\File;
|
use Illuminate\Support\Facades\File;
|
||||||
use League\CommonMark\ConfigurableEnvironmentInterface;
|
use League\CommonMark\ConfigurableEnvironmentInterface;
|
||||||
|
|
||||||
@ -206,6 +208,16 @@ class ThemeTest extends TestCase
|
|||||||
$this->assertStringContainsString('donkey=donut', $redirect);
|
$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)
|
protected function usingThemeFolder(callable $callback)
|
||||||
{
|
{
|
||||||
// Create a folder and configure a theme
|
// Create a folder and configure a theme
|
||||||
@ -220,3 +232,10 @@ class ThemeTest extends TestCase
|
|||||||
File::deleteDirectory($themeFolderPath);
|
File::deleteDirectory($themeFolderPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MyCustomCommand extends Command {
|
||||||
|
protected $signature = 'bookstack:test-custom-command';
|
||||||
|
public function handle() {
|
||||||
|
$this->line('Command ran!');
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user