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(); } if (!$isPost) { $versionHeader = [ 'checkbox' => '选择', 'tag_name' => '版本(标签)', 'name' => '名称', 'published_at' => '发布时间', ]; $tableRows[] = [ 'checkbox' => sprintf(''), 'tag_name' => '手动更新', 'name' => '如若有改动不宜全量覆盖,请勾选此选项并确保已经手动更新了代码', 'published_at' => '---', ]; $latestCommit = $update->getLatestCommit(); $time = \Carbon\Carbon::parse($latestCommit['committer']['date']); $time->tz = nexus_env('TIMEZONE'); $tableRows[] = [ 'checkbox' => sprintf('', $latestCommit['sha']), 'tag_name' => '最新开发代码', 'name' => "仅限开发测试!最新提交:" . $latestCommit['commit']['message'], 'published_at' => $time->format('Y-m-d H:i:s'), ]; 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("没有选择版本"); } $downloadUrl = ''; if ($_REQUEST['version_url'] == 'manual') { $update->nextStep(); } elseif (\Illuminate\Support\Str::startsWith($_REQUEST['version_url'], 'development')) { $downloadUrlArr = explode('|', $_REQUEST['version_url']); $downloadUrl = sprintf('https://github.com/xiaomlove/nexusphp/archive/%s.zip', $downloadUrlArr[1]); } else { $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->updateDependencies(); $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; } ?> Update NexusPHP | step <?php echo $currentStep?>
renderSteps()?>
'; $header = [ 'label' => '项目', 'required' => '要求', 'current'=> '当前', 'result'=> '结果' ]; if ($currentStep == 1) { echo $update->renderTable($header, $requirements['table_rows']); } elseif ($currentStep == 3) { echo $update->renderTable($header, $tableRows); echo '
若 Redis 不启用,相关项目留空
'; echo $update->renderForm($envFormControls); } elseif ($currentStep == 2) { if (empty($tableRows)) { echo '
抱歉,暂无任何版可以选择!
'; } else { echo $update->renderTable($versionHeader, $tableRows); } } elseif ($currentStep == 4) { echo $update->renderTable($header, $tableRows); echo '
'; echo sprintf('这一步会把 %s 的数据合并到 %s, 然后插入数据库中。', $tableRows[1]['label'], $tableRows[0]['label']); echo '
'; } elseif ($currentStep > $maxStep) { echo '
恭喜,一切就绪!
'; echo '
有问题可查阅升级日志:' . $update->getLogFile() . '
'; echo '
为安全起见,请删除以下目录
'; echo '
' . $update->getUpdateDirectory() . '
'; } echo'
'; if (!empty($error)) { echo sprintf('
Error: %s
', nl2br($error)); unset($error); } if (!empty($copy)) { echo sprintf('
', $copy); unset($copy); } ?>
回首页
欢迎使用 NexusPHP 升级程序,如有疑问,点击这里获取帮助。