currentStep(); $maxStep = $update->maxStep(); if (!$update->canAccessStep($currentStep)) { $update->gotoStep(1); } $error = $copy = ''; $pass = true; //step 1 if ($currentStep == 1) { $requirements = $update->listRequirementTableRows(); $pass = $requirements['pass']; if ($isPost) { $update->nextStep(); } } if ($currentStep == 2) { $envExampleFile = $rootpath . ".env.example"; // $dbstructureFile = $rootpath . "_db/dbstructure_v1.6.sql"; $envExampleData = readEnvFile($envExampleFile); $envFormControls = $update->listEnvFormControls(); $newData = array_column($envFormControls, 'value', 'name'); while ($isPost) { try { $update->createEnvFile($_POST); $update->nextStep(); } catch (\Exception $exception) { $error = $exception->getMessage(); break; } break; } $tableRows = [ [ 'label' => basename($envExampleFile), 'required' => 'exists && readable', 'current' => $envExampleFile, 'result' => $update->yesOrNo(file_exists($envExampleFile) && is_readable($envExampleFile)), ], // [ // 'label' => basename($dbstructureFile), // 'required' => 'exists && readable', // 'current' => $dbstructureFile, // 'result' => $update->yesOrNo(file_exists($dbstructureFile) && is_readable($dbstructureFile)), // ], ]; $fails = array_filter($tableRows, function ($value) {return $value['result'] == 'NO';}); $pass = empty($fails); } if ($currentStep == 3) { // $createTables = $update->listAllTableCreate(); $createTables = $update->listAllTableCreateFromMigrations(); $existsTables = $update->listExistsTable(); $tableRows = []; $toCreateTable = $toAlterTable = $toUpdateTable = []; foreach ($createTables as $table => $tableCreate) { //Table not exists if (!in_array($table, $existsTables)) { $tableRows[] = [ "label" => "Table: $table", "required" => "exists", "current" => "", "result" => 'NO', ]; $toCreateTable[$table] = $tableCreate; continue; } $tableHaveFields = $update->listTableFieldsFromDb($table); foreach ($tableHaveFields as $field => $fieldInfo) { if ($fieldInfo['Type'] == 'datetime' && $fieldInfo['Default'] == '0000-00-00 00:00:00') { $tableRows[] = [ 'label' => "Field: $table.$field", 'required' => 'default null', 'current' => '0000-00-00 00:00:00', 'result' => 'NO', ]; $toAlterTable[$table][$field] = "modify $field datetime default null"; $toUpdateTable[$table][$field] = "null"; } } } while ($isPost) { try { sql_query('SET sql_mode=(SELECT REPLACE(@@sql_mode,"NO_ZERO_DATE", ""))'); $command = "php " . ROOT_PATH . "artisan migrate --force"; $result = exec($command, $output, $result_code); $update->doLog(sprintf('command: %s, result_code: %s, result: %s', $command, $result_code, $result)); $update->doLog("output: " . json_encode($output)); if ($result_code != 0) { throw new \RuntimeException(json_encode($output)); } else { $update->doLog("[MIGRATE] success."); } foreach ($toAlterTable as $table => $modies) { $query = "alter table $table " . implode(', ', $modies); $update->doLog("[ALTER TABLE] $query"); sql_query($query); } foreach ($toUpdateTable as $table => $updates) { foreach ($updates as $field => $fieldUpdate) { $query = sprintf("update %s set %s = %s where %s = '0000-00-00 00:00:00'", $table, $field, $fieldUpdate, $field); $update->doLog("[UPDATE TABLE] $query, affectedRows: " . mysql_affected_rows()); sql_query($query); } } $update->runExtraQueries(); $update->nextStep(); } catch (\Exception $exception) { $update->doLog($exception->getMessage() . $exception->getTraceAsString()); $error = $exception->getMessage(); break; } break; } } if ($currentStep == 4) { $settingTableRows = $update->listSettingTableRows(); $settings = $settingTableRows['settings']; $symbolicLinks = $settingTableRows['symbolic_links']; $tableRows = $settingTableRows['table_rows']; $pass = $settingTableRows['pass']; while ($isPost) { try { $update->createSymbolicLinks($symbolicLinks); $update->saveSettings($settings); $update->nextStep(); } catch (\Exception $e) { $error = $e->getMessage(); break; } break; } } if (!empty($error)) { $pass = false; } ?>