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) { $tableRows = []; $versionTable = $versions = []; $cacheKkey = '__versions_' . date('Ymd_H'); try { $versions = $update->listVersions(); // if (!empty($_SESSION[$cacheKkey])) { // $update->doLog("get versions from session."); // $versions = $_SESSION[$cacheKkey]; // } else { // $_SESSION[$cacheKkey] = $versions; // } } catch (\Exception $exception) { $error = $exception->getMessage(); } $versionHeader = [ 'checkbox' => '选择', 'tag_name' => '版本(标签)', 'name' => '名称', 'published_at' => '发布时间', ]; $tableRows[] = [ 'checkbox' => sprintf(''), 'tag_name' => '手动更新', 'name' => '如若有改动不宜全量覆盖,请勾选此选项并确保已经手动更新了代码', 'published_at' => '---', ]; foreach ($versions as $version) { if ($version['draft']) { continue; } $time = \Carbon\Carbon::parse($version['published_at']); $time->tz = nexus_env('TIMEZONE'); $versionUrl = $version['tag_name'] . '|' . $version['tarball_url']; $checked = !empty($_REQUEST['version_url']) && $_REQUEST['version_url'] == $versionUrl ? ' checked' : ''; $tableRows[] = [ 'checkbox' => sprintf('', $versionUrl, $checked), 'tag_name' => $version['tag_name'], 'name' => $version['name'], 'published_at' => $time->format('Y-m-d H:i:s'), ]; } // dd($tableRows); while ($isPost) { try { if (empty($_REQUEST['version_url'])) { throw new \RuntimeException("没有选择版本"); } if ($_REQUEST['version_url'] == 'manual') { $update->nextStep(); } $versionUrlArr = explode('|', $_REQUEST['version_url']); $version = strtolower($versionUrlArr[0]); $downloadUrl = $versionUrlArr[1]; if (\Illuminate\Support\Str::startsWith($version, 'v')) { $version = substr($version, 1); } $update->doLog("version: $version, downloadUrl: $downloadUrl, currentVersion: " . VERSION_NUMBER); if (version_compare($version, VERSION_NUMBER, '<=')) { throw new \RuntimeException("必须选择一个高于当前版本(" . VERSION_NUMBER . ")的"); } $update->downAndExtractCode($downloadUrl); $update->nextStep(); } catch (\Exception $exception) { $update->doLog($exception->getMessage() . $exception->getTraceAsString()); $error = $exception->getMessage(); break; } break; } } if ($currentStep == 3) { $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 == 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->runExtraQueries(); $update->runMigrate(); $update->nextStep(); } catch (\Exception $e) { $error = $e->getMessage(); break; } break; } } if (!empty($error)) { $pass = false; } ?>