| 
									
										
										
										
											2017-07-22 22:54:17 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Console\Commands; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Illuminate\Console\Command; | 
					
						
							|  |  |  | use Illuminate\Support\Facades\DB; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class UpgradeDatabaseEncoding extends Command | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The name and signature of the console command. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var string | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2017-07-22 23:19:17 +08:00
										 |  |  |     protected $signature = 'bookstack:db-utf8mb4 {--database= : The database connection to use.}'; | 
					
						
							| 
									
										
										
										
											2017-07-22 22:54:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * The console command description. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var string | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     protected $description = 'Generate SQL commands to upgrade the database to UTF8mb4'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Create a new command instance. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::__construct(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Execute the console command. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return mixed | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function handle() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $connection = DB::getDefaultConnection(); | 
					
						
							|  |  |  |         if ($this->option('database') !== null) { | 
					
						
							|  |  |  |             DB::setDefaultConnection($this->option('database')); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $database = DB::getDatabaseName(); | 
					
						
							|  |  |  |         $tables = DB::select('SHOW TABLES'); | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |         $this->line('ALTER DATABASE `' . $database . '` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | 
					
						
							|  |  |  |         $this->line('USE `' . $database . '`;'); | 
					
						
							| 
									
										
										
										
											2017-07-22 22:54:17 +08:00
										 |  |  |         $key = 'Tables_in_' . $database; | 
					
						
							|  |  |  |         foreach ($tables as $table) { | 
					
						
							|  |  |  |             $tableName = $table->$key; | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             $this->line('ALTER TABLE `' . $tableName . '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'); | 
					
						
							| 
									
										
										
										
											2017-07-22 22:54:17 +08:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         DB::setDefaultConnection($connection); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |