2018-05-21 01:16:01 +08:00
< ? php
namespace BookStack\Console\Commands ;
2018-09-25 19:30:50 +08:00
use BookStack\Uploads\ImageService ;
2018-05-21 01:16:01 +08:00
use Illuminate\Console\Command ;
2018-05-27 21:33:50 +08:00
use Symfony\Component\Console\Output\OutputInterface ;
2018-05-21 01:16:01 +08:00
class CleanupImages extends Command
{
/**
* The name and signature of the console command .
*
* @ var string
*/
protected $signature = ' bookstack : cleanup - images
2020-12-19 06:54:53 +08:00
{ -- a | all : Also delete images that are only used in old revisions }
{ -- f | force : Actually run the deletions , Defaults to a dry - run }
2018-05-21 01:16:01 +08:00
' ;
/**
* The console command description .
*
* @ var string
*/
protected $description = 'Cleanup images and drawings' ;
protected $imageService ;
/**
* Create a new command instance .
2021-06-26 23:23:15 +08:00
*
2018-09-25 19:30:50 +08:00
* @ param \BookStack\Uploads\ImageService $imageService
2018-05-21 01:16:01 +08:00
*/
public function __construct ( ImageService $imageService )
{
$this -> imageService = $imageService ;
parent :: __construct ();
}
/**
* Execute the console command .
*
* @ return mixed
*/
public function handle ()
{
$checkRevisions = $this -> option ( 'all' ) ? false : true ;
$dryRun = $this -> option ( 'force' ) ? false : true ;
if ( ! $dryRun ) {
2018-05-27 21:33:50 +08:00
$proceed = $this -> confirm ( " This operation is destructive and is not guaranteed to be fully accurate. \n Ensure you have a backup of your images. \n Are you sure you want to proceed? " );
2018-05-21 01:16:01 +08:00
if ( ! $proceed ) {
return ;
}
}
2018-05-28 02:40:07 +08:00
$deleted = $this -> imageService -> deleteUnusedImages ( $checkRevisions , $dryRun );
2018-05-27 21:33:50 +08:00
$deleteCount = count ( $deleted );
2018-05-21 01:16:01 +08:00
if ( $dryRun ) {
$this -> comment ( 'Dry run, No images have been deleted' );
$this -> comment ( $deleteCount . ' images found that would have been deleted' );
2018-05-27 21:33:50 +08:00
$this -> showDeletedImages ( $deleted );
2018-05-21 01:16:01 +08:00
$this -> comment ( 'Run with -f or --force to perform deletions' );
2021-06-26 23:23:15 +08:00
2018-05-21 01:16:01 +08:00
return ;
}
2018-05-27 21:33:50 +08:00
$this -> showDeletedImages ( $deleted );
2018-05-21 01:16:01 +08:00
$this -> comment ( $deleteCount . ' images deleted' );
}
2018-05-27 21:33:50 +08:00
protected function showDeletedImages ( $paths )
{
2018-09-22 01:48:47 +08:00
if ( $this -> getOutput () -> getVerbosity () <= OutputInterface :: VERBOSITY_NORMAL ) {
return ;
}
2018-05-27 21:33:50 +08:00
if ( count ( $paths ) > 0 ) {
$this -> line ( 'Images to delete:' );
}
foreach ( $paths as $path ) {
$this -> line ( $path );
}
}
2018-05-21 01:16:01 +08:00
}