1+ <?php
2+ /**
3+ * Created by PhpStorm.
4+ * User: darryl
5+ * Date: 7/2/2015
6+ * Time: 7:43 PM
7+ */
8+
9+ namespace Darryldecode \Backend \Base \Console ;
10+
11+ use Illuminate \Console \Command ;
12+ use Illuminate \Filesystem \Filesystem ;
13+
14+ class ComponentMake extends Command {
15+
16+ /**
17+ * The name and signature of the console command.
18+ *
19+ * @var string
20+ */
21+ protected $ signature = 'backend:component-create ' ;
22+
23+ /**
24+ * The console command description.
25+ *
26+ * @var string
27+ */
28+ protected $ description = 'Create a new backend custom component. ' ;
29+
30+ /**
31+ * @var Filesystem
32+ */
33+ protected $ filesystem ;
34+
35+ /**
36+ * Execute the console command.
37+ *
38+ * @param Filesystem $filesystem
39+ * @return mixed
40+ */
41+ public function handle (Filesystem $ filesystem )
42+ {
43+ $ this ->filesystem = $ filesystem ;
44+ $ scaffoldsPath = __DIR__ .'/../Etc/scaffolds/ ' ;
45+
46+ // component info
47+ $ componentTitle = $ this ->ask ('Enter component name ' );
48+ $ componentDescription = $ this ->ask ('Enter component description ' );
49+ $ componentIcon = $ this ->ask ('Enter component icon (ex. fa fa-home) ' );
50+ $ componentNamespace = $ this ->formatToComponentNamespace ($ componentTitle );
51+ $ componentUrl = $ this ->formatToComponentUrl ($ componentTitle );
52+
53+ $ componentPath = app_path ().'/Backend/Components/ ' .$ componentNamespace ;
54+
55+ if ( $ this ->filesystem ->isDirectory ($ componentPath ) )
56+ {
57+ $ this ->error ('Component already exist. ' );
58+ exit ;
59+ }
60+
61+ // create necessary component directories
62+ $ this ->filesystem ->makeDirectory ($ componentPath );
63+ $ this ->filesystem ->makeDirectory ($ componentPath .'/Controllers ' );
64+ $ this ->filesystem ->makeDirectory ($ componentPath .'/Views ' );
65+
66+ // process scaffolds
67+ $ componentScaffold = $ this ->filesystem ->get ($ scaffoldsPath .'Component ' );
68+ $ controllerScaffold = $ this ->filesystem ->get ($ scaffoldsPath .'Controller ' );
69+ $ viewScaffold = $ this ->filesystem ->get ($ scaffoldsPath .'view ' );
70+ $ routesScaffold = $ this ->filesystem ->get ($ scaffoldsPath .'routes ' );
71+
72+ $ this ->comment (PHP_EOL .'Creating component... ' .PHP_EOL );
73+
74+ $ componentScaffold = str_replace ('{{componentNamespace}} ' ,$ componentNamespace ,$ componentScaffold );
75+ $ componentScaffold = str_replace ('{{componentTitle}} ' ,$ componentTitle ,$ componentScaffold );
76+ $ componentScaffold = str_replace ('{{componentDescription}} ' ,$ componentDescription ,$ componentScaffold );
77+ $ componentScaffold = str_replace ('{{componentIcon}} ' ,$ componentIcon ,$ componentScaffold );
78+ $ componentScaffold = str_replace ('{{componentUrl}} ' ,$ componentUrl ,$ componentScaffold );
79+ $ this ->filesystem ->put ($ componentPath .'/Component.php ' ,$ componentScaffold );
80+
81+ $ controllerScaffold = str_replace ('{{componentNamespace}} ' ,$ componentNamespace ,$ controllerScaffold );
82+ $ controllerScaffold = str_replace ('{{componentTitle}} ' ,$ componentTitle ,$ controllerScaffold );
83+ $ controllerScaffold = str_replace ('{{componentDescription}} ' ,$ componentDescription ,$ controllerScaffold );
84+ $ controllerScaffold = str_replace ('{{componentIcon}} ' ,$ componentIcon ,$ controllerScaffold );
85+ $ controllerScaffold = str_replace ('{{componentUrl}} ' ,$ componentUrl ,$ controllerScaffold );
86+ $ this ->filesystem ->put ($ componentPath .'/Controllers/ ' .$ componentNamespace .'Controller.php ' ,$ controllerScaffold );
87+
88+ $ viewScaffold = str_replace ('{{componentNamespace}} ' ,$ componentNamespace ,$ viewScaffold );
89+ $ viewScaffold = str_replace ('{{componentTitle}} ' ,$ componentTitle ,$ viewScaffold );
90+ $ viewScaffold = str_replace ('{{componentDescription}} ' ,$ componentDescription ,$ viewScaffold );
91+ $ viewScaffold = str_replace ('{{componentIcon}} ' ,$ componentIcon ,$ viewScaffold );
92+ $ viewScaffold = str_replace ('{{componentUrl}} ' ,$ componentUrl ,$ viewScaffold );
93+ $ this ->filesystem ->put ($ componentPath .'/Views/index.blade.php ' ,$ viewScaffold );
94+
95+ $ routesScaffold = str_replace ('{{componentNamespace}} ' ,$ componentNamespace ,$ routesScaffold );
96+ $ routesScaffold = str_replace ('{{componentTitle}} ' ,$ componentTitle ,$ routesScaffold );
97+ $ routesScaffold = str_replace ('{{componentDescription}} ' ,$ componentDescription ,$ routesScaffold );
98+ $ routesScaffold = str_replace ('{{componentIcon}} ' ,$ componentIcon ,$ routesScaffold );
99+ $ routesScaffold = str_replace ('{{componentUrl}} ' ,$ componentUrl ,$ routesScaffold );
100+ $ this ->filesystem ->put ($ componentPath .'/routes.php ' ,$ routesScaffold );
101+
102+ $ this ->info (PHP_EOL .'Creating successfully created! ' .PHP_EOL );
103+ }
104+
105+ /**
106+ * format any component name
107+ *
108+ * @param $componentTitle
109+ * @return mixed
110+ */
111+ protected function formatToComponentNamespace ($ componentTitle )
112+ {
113+ $ componentTitle = str_replace (['/ ' ,'- ' ],' ' ,$ componentTitle );
114+
115+ return str_replace (' ' ,'' ,ucwords ($ componentTitle ));
116+ }
117+
118+ /**
119+ * format to component url
120+ *
121+ * @param $componentTitle
122+ * @return mixed
123+ */
124+ protected function formatToComponentUrl ($ componentTitle )
125+ {
126+ return str_replace (' ' ,'- ' ,strtolower ($ componentTitle ));
127+ }
128+ }
0 commit comments