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