currentStep(); $maxStep = $update->maxStep(); if (!$update->canAccessStep($currentStep)) { $update->gotoStep(1); } $error = $copy = ''; //step 1 if ($currentStep == 1) { $requirements = $update->listRequirementTableRows(); $pass = $requirements['pass']; if ($isPost) { $update->nextStep(); } } if ($currentStep == 2) { $envExampleFile = "$rootpath.env.example"; $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' => '.env.example', 'required' => 'exists && readable', 'current' => $envExampleFile, 'result' => $update->yesOrNo(file_exists($envExampleFile) && is_readable($envExampleFile)), ], ]; $fails = array_filter($tableRows, function ($value) {return $value['result'] == 'NO';}); $pass = empty($fails); } if ($currentStep == 3) { $pass = true; $createTables = $update->listAllTableCreate(); $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; } $tableShouldHaveFields = $update->listTableFieldsFromCreateTable($tableCreate); $tableHaveFields = $update->listTableFieldsFromDb($table); foreach ($tableShouldHaveFields as $field => $fieldCreate) { if (!isset($tableHaveFields[$field])) { //Field not exists $tableRows[] = [ "label" => "Field: $table.$field", "required" => "exists", "current" => "", "result" => 'NO', ]; $toAlterTable[$table][$field] = "add column $fieldCreate"; continue; } $fieldInfo = $tableHaveFields[$field]; //Field invalid 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 $fieldCreate"; $toUpdateTable[$table][$field] = "null"; continue; } //Field invalid if ($fieldInfo['Null'] == 'NO' && $fieldInfo['Default'] === null && $fieldInfo['Key'] != 'PRI') { $typePrefix = $fieldInfo['Type']; if (($pos = strpos($typePrefix, '(')) !== false) { $typePrefix = substr($typePrefix, 0, $pos); } if (preg_match('/varchar/', $typePrefix)) { $tableRows[] = [ 'label' => "Field: $table.$field", 'required' => "default ''", 'current' => 'null', 'result' => 'NO', ]; $toAlterTable[$table][$field] = "modify $field {$fieldInfo['Type']} not null default ''"; continue; } if (preg_match('/int/', $typePrefix)) { $tableRows[] = [ 'label' => "Field: $table.$field", 'required' => "default 0", 'current' => 'null', 'result' => 'NO', ]; $toAlterTable[$table][$field] = "modify $field {$fieldInfo['Type']} not null default 0"; continue; } } } } while ($isPost) { try { sql_query('SET sql_mode=(SELECT REPLACE(@@sql_mode,"NO_ZERO_DATE", ""))'); foreach ($toCreateTable as $query) { $update->doLog("[CREATE TABLE] $query"); sql_query($query); } 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->nextStep(); } catch (\Exception $exception) { $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; } } ?>