PluginProbe ʕ •ᴥ•ʔ
Kirki – Freeform Page Builder, Website Builder & Customizer / 6.2.0
Kirki – Freeform Page Builder, Website Builder & Customizer v6.2.0
6.2.0 6.1.1 6.1.0 6.0.14 6.0.13 6.0.12 6.0.11 6.0.10 6.0.9 6.0.8 6.0.7 6.0.6 6.0.5 6.0.4 6.0.3 6.0.2 6.0.1 3.1.3 3.1.4 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 4.0.19 4.0.20 4.0.21 4.0.22 4.0.23 4.0.24 4.1 4.2.0 5.0.0 5.1.0 5.1.1 5.2.0 5.2.1 5.2.2 5.2.3 6.0.0 trunk 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.1.0 3.1.1 3.1.2
kirki / libraries / framework / Console / Commands / SeedCommand.php
kirki / libraries / framework / Console / Commands Last commit date
FreshCommand.php 1 month ago MakeClassCommand.php 1 month ago MakeControllerCommand.php 1 month ago MakeMigrationCommand.php 1 month ago MakeModelCommand.php 1 month ago MakeProviderCommand.php 1 month ago MakeRequestCommand.php 1 month ago MakeSeederCommand.php 1 month ago MigrateCommand.php 1 month ago SeedCommand.php 5 days ago
SeedCommand.php
201 lines
1 <?php
2
3 /**
4 * Executes database seeders, optionally targeting a specific class or the default DatabaseSeeder.
5 * Wraps seeding in transaction and error handling with logging on failure.
6 * Supports fresh database population after migrations.
7 *
8 * @package Framework
9 * @subpackage Console\Commands
10 * @since 1.0.0
11 */
12 namespace Kirki\Framework\Console\Commands;
13
14 \defined('ABSPATH') || exit;
15 use Kirki\Framework\Console\CommandBase;
16 use Kirki\Framework\Console\Synopsis;
17 use Kirki\Framework\Database\Seeder;
18 use Kirki\Framework\Supports\Facades\DB;
19 use Kirki\Framework\Supports\Facades\Log;
20 use Kirki\Framework\Supports\Facades\Schema;
21 use Kirki\Framework\Supports\Str;
22 use Exception;
23 use Kirki\Framework\Database\Contracts\DatabaseSeederContract;
24 use Throwable;
25 use function Kirki\Framework\app;
26 use function Kirki\Framework\database_path;
27 class SeedCommand extends CommandBase
28 {
29 /**
30 * The sequential arguments
31 *
32 * @var array
33 *
34 * @since 1.0.0
35 */
36 protected $args;
37 /**
38 * The assoc arguments
39 *
40 * @var array
41 *
42 * @since 1.0.0
43 */
44 protected $assoc;
45 /**
46 * Run the command
47 *
48 * @param mixed $args The positional arguments.
49 * @param mixed $assoc The associative arguments.
50 *
51 * @return void
52 *
53 * @since 1.0.0
54 */
55 public function run($args, $assoc)
56 {
57 $this->args = $args;
58 $this->assoc = $assoc;
59 $this->seed();
60 }
61 /**
62 * Discover the seeders
63 *
64 * @return array
65 *
66 * @since 1.0.0
67 */
68 protected function discover()
69 {
70 $seeders = [];
71 $seeders_files = \glob(database_path('seeders/*.php'));
72 if (empty($seeders_files)) {
73 return $seeders;
74 }
75 foreach ($seeders_files as $file) {
76 $classname = $this->classname($this->filename($file));
77 if ($this->exists($classname)) {
78 $seeders[] = $classname;
79 }
80 }
81 return $seeders;
82 }
83 /**
84 * Get the seeders
85 *
86 * @return array
87 *
88 * @since 1.0.0
89 */
90 protected function seeders()
91 {
92 if (!empty($this->assoc['class'])) {
93 return $this->seeder_classes($this->assoc['class']);
94 }
95 return $this->discover();
96 }
97 /**
98 * Get the seeder classes
99 *
100 * @param mixed $class The class.
101 *
102 * @return array
103 *
104 * @since 1.0.0
105 */
106 protected function seeder_classes($class)
107 {
108 $classes = Str::split(',', $class);
109 $seeders = [];
110 foreach ($classes as $cls) {
111 $classname = $this->classname($cls);
112 if ($this->exists($classname)) {
113 $seeders[] = $classname;
114 }
115 }
116 return $seeders;
117 }
118 /**
119 * Get the filename of the seeder
120 *
121 * @param mixed $path The path.
122 *
123 * @return string
124 *
125 * @since 1.0.0
126 */
127 protected function filename($path)
128 {
129 return \basename($path, '.php');
130 }
131 /**
132 * Get the classname of the seeder
133 *
134 * @param mixed $filename The filename.
135 *
136 * @return string
137 *
138 * @since 1.0.0
139 */
140 protected function classname($filename)
141 {
142 $namespace = app()->get_seeders_namespace() . '\\';
143 return $namespace . Str::pascal($filename);
144 }
145 /**
146 * Check if the seeder exists
147 *
148 * @param mixed $class The class.
149 *
150 * @return bool
151 *
152 * @since 1.0.0
153 */
154 protected function exists($class)
155 {
156 return \class_exists($class);
157 }
158 /**
159 * Seed the database
160 *
161 * @return void
162 *
163 * @since 1.0.0
164 */
165 protected function seed()
166 {
167 $seeders = $this->seeders();
168 DB::begin_transaction();
169 try {
170 Schema::disabled_checking_foreign_key_constraints();
171 try {
172 $database_seeder = app()->make(DatabaseSeederContract::class);
173 $database_seeder->run();
174 $database_seeder();
175 } catch (Exception $exception) {
176 $instance = app()->make(Seeder::class);
177 $instance->call($seeders);
178 $instance();
179 }
180 } catch (Exception $exception) {
181 DB::rollback();
182 Log::error($exception->getMessage());
183 } finally {
184 Schema::enabled_checking_foreign_key_constraints();
185 }
186 DB::commit();
187 \WP_CLI::success('Seeder run successfully');
188 }
189 /**
190 * Prepare the command synopsis and metadata
191 *
192 * @return void
193 *
194 * @since 1.0.0
195 */
196 protected function prepare()
197 {
198 $this->summary('Seed the database')->description("## EXAMPLES \n\n wp kirki db:seed")->synopsis(Synopsis::type('assoc')->name('class')->description('The seeder class name')->optional());
199 }
200 }
201