namespace BookStack\Console;
-use BookStack\Facades\Theme;
-use BookStack\Theming\ThemeService;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
-use Symfony\Component\Console\Command\Command;
class Kernel extends ConsoleKernel
{
*/
protected function commands()
{
- // Default framework command loading from 'Commands' directory
$this->load(__DIR__ . '/Commands');
-
- // Load any user commands that have been registered via the theme system.
- $themeService = $this->app->make(ThemeService::class);
- foreach ($themeService->getRegisteredCommands() as $command) {
- $this->registerCommand($command);
- }
}
}
namespace BookStack\Theming;
use BookStack\Auth\Access\SocialAuthService;
+use Illuminate\Contracts\Console\Kernel;
use Symfony\Component\Console\Command\Command;
class ThemeService
{
protected $listeners = [];
- /**
- * @var Command[]
- */
- protected $commands = [];
-
/**
* Listen to a given custom theme event,
* setting up the action to be ran when the event occurs.
*/
public function registerCommand(Command $command)
{
- $this->commands[] = $command;
- }
-
- /**
- * Get the custom commands that have been registered.
- */
- public function getRegisteredCommands(): array
- {
- return $this->commands;
+ /** @var \Illuminate\Foundation\Console\Kernel $consoleKernel */
+ $consoleKernel = app()->make(Kernel::class);
+ $consoleKernel->registerCommand($command);
}
/**
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;
$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
File::deleteDirectory($themeFolderPath);
}
}
+
+class MyCustomCommand extends Command {
+ protected $signature = 'bookstack:test-custom-command';
+ public function handle() {
+ $this->line('Command ran!');
+ }
+}
\ No newline at end of file