2016-12-08 15:41:35 +02:00
< ? php
namespace App\Console\Commands ;
use Artisan ;
use Illuminate\Console\Command ;
2018-05-02 10:29:40 -04:00
use Symfony\Component\Console\Helper\ProgressBar ;
2016-12-08 15:41:35 +02:00
class MakeModule extends Command
{
/**
* The name and signature of the console command .
*
* @ var string
*/
2018-05-02 10:29:40 -04:00
protected $signature = 'ninja:make-module {name : Module name} {fields? : Model fields} {--migrate= : Run module migrations; default is FALSE} {--p|--plain : Generate only base module scaffold}' ;
2016-12-08 15:41:35 +02:00
/**
* The console command description .
*
* @ var string
*/
protected $description = 'Generate Module CRUD' ;
/**
* Create a new command instance .
*
* @ return void
*/
public function __construct ()
{
parent :: __construct ();
}
/**
* Execute the console command .
*
* @ return mixed
*/
public function handle ()
{
$name = $this -> argument ( 'name' );
$fields = $this -> argument ( 'fields' );
2018-05-02 10:29:40 -04:00
$migrate = strtolower ( $this -> option ( 'migrate' ));
$plain = $this -> option ( 'plain' );
2016-12-08 20:00:13 +02:00
$lower = strtolower ( $name );
2018-04-19 21:16:48 +03:00
2016-12-08 23:13:40 +02:00
// convert 'name:string,description:text' to 'name,description'
$fillable = explode ( ',' , $fields );
2017-01-30 18:05:31 +02:00
$fillable = array_map ( function ( $item ) {
2016-12-08 23:13:40 +02:00
return explode ( ':' , $item )[ 0 ];
}, $fillable );
2017-01-30 21:40:43 +02:00
$fillable = implode ( ',' , $fillable );
2016-12-08 23:13:40 +02:00
2018-05-02 10:29:40 -04:00
ProgressBar :: setFormatDefinition ( 'custom' , '%current%/%max% %elapsed:6s% [%bar%] %percent:3s%% %message%' );
$progressBar = $this -> output -> createProgressBar ( $plain ? 2 : ( $migrate === 'true' ? 15 : 14 ));
$progressBar -> setFormat ( 'custom' );
2016-12-08 15:41:35 +02:00
2018-05-02 10:29:40 -04:00
$this -> info ( " Creating module: { $name } ... " );
$progressBar -> setMessage ( " Starting module creation... " );
2016-12-08 15:41:35 +02:00
Artisan :: call ( 'module:make' , [ 'name' => [ $name ]]);
2018-05-02 10:29:40 -04:00
$progressBar -> advance ();
if ( ! $plain ) {
$progressBar -> setMessage ( " Creating migrations... " );
Artisan :: call ( 'module:make-migration' , [ 'name' => " create_ { $lower } _table " , '--fields' => $fields , 'module' => $name ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating models... " );
Artisan :: call ( 'module:make-model' , [ 'model' => $name , 'module' => $name , '--fillable' => $fillable ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating views... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'views' , '--fields' => $fields , '--filename' => 'edit.blade' ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating datatables... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'datatable' , '--fields' => $fields ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating repositories... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'repository' , '--fields' => $fields ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating presenters... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'presenter' ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating requests... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'request' ]);
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'request' , 'prefix' => 'create' ]);
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'request' , 'prefix' => 'update' ]);
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating api-controllers... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'api-controller' ]);
$progressBar -> advance ();
2016-12-08 15:41:35 +02:00
2018-05-02 10:29:40 -04:00
$progressBar -> setMessage ( " Creating transformers... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'transformer' , '--fields' => $fields ]);
$progressBar -> advance ();
if ( $migrate === 'true' ) {
$progressBar -> setMessage ( " Running migrations... " );
Artisan :: call ( 'module:migrate' , [ 'module' => $name ]);
$progressBar -> advance ();
}
}
$progressBar -> setMessage ( " Creating policies... " );
2016-12-08 20:00:13 +02:00
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'policy' ]);
2018-05-02 10:29:40 -04:00
$progressBar -> advance ();
$progressBar -> setMessage ( " Creating auth-providers... " );
2016-12-08 20:00:13 +02:00
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'auth-provider' ]);
2018-05-02 10:29:40 -04:00
$progressBar -> advance ();
2016-12-08 20:00:13 +02:00
2018-05-02 10:29:40 -04:00
$progressBar -> setMessage ( " Creating translations... " );
Artisan :: call ( 'ninja:make-class' , [ 'name' => $name , 'module' => $name , 'class' => 'lang' , '--filename' => 'texts' ]);
$progressBar -> advance ();
2016-12-09 11:51:18 +02:00
2018-05-02 10:29:40 -04:00
$progressBar -> setMessage ( " Dumping module auto-load... " );
2016-12-08 20:00:13 +02:00
Artisan :: call ( 'module:dump' );
2018-05-02 10:29:40 -04:00
$progressBar -> finish ();
$progressBar -> clear ();
2016-12-09 13:38:11 +02:00
2017-01-30 21:40:43 +02:00
$this -> info ( 'Done' );
2018-05-02 10:29:40 -04:00
if ( $migrate === 'false' && ( ! $plain )) {
$this -> info ( " ==> Migrations were not run because --migrate=false was specified. " );
$this -> info ( " ==> Use the following command to run the migrations: \n php artisan module:migrate $name " );
}
2016-12-08 15:41:35 +02:00
}
protected function getArguments ()
{
return [
[ 'name' , InputArgument :: REQUIRED , 'The name of the module.' ],
2017-01-30 21:40:43 +02:00
[ 'fields' , InputArgument :: OPTIONAL , 'The fields of the module.' ],
2016-12-08 15:41:35 +02:00
];
}
2016-12-08 23:13:40 +02:00
2016-12-09 11:51:18 +02:00
protected function getOptions ()
{
2017-01-30 21:40:43 +02:00
return [
[ 'migrate' , null , InputOption :: VALUE_OPTIONAL , 'The model attributes.' , null ],
2018-05-02 10:29:40 -04:00
[ 'plain' , 'p' , InputOption :: VALUE_NONE , 'Generate only base module scaffold.' , null ],
2017-01-30 21:40:43 +02:00
];
2016-12-09 11:51:18 +02:00
}
2016-12-08 15:41:35 +02:00
}