environment require disable mysql extension

This commit is contained in:
xiaomlove
2025-05-11 21:21:29 +07:00
parent de07fc932c
commit 9a864b817a
11 changed files with 110 additions and 96 deletions
+1
View File
@@ -60,6 +60,7 @@ if [ "$SERVICE_NAME" = "php" ]; then
# composer install # composer install
if [ ! -d "$VENDOR_DIR" ]; then if [ ! -d "$VENDOR_DIR" ]; then
echo_info "vendor dir: $VENDOR_DIR not exists, run composer install ..." echo_info "vendor dir: $VENDOR_DIR not exists, run composer install ..."
git config --global --add safe.directory ${ROOT_PATH}
composer install --working-dir=${ROOT_PATH} composer install --working-dir=${ROOT_PATH}
else else
echo_success "vendor dir: $VENDOR_DIR already exists, skip run composer install ..." echo_success "vendor dir: $VENDOR_DIR already exists, skip run composer install ..."
+2 -2
View File
@@ -118,11 +118,11 @@ class NexusUpdate extends Command
return 0; return 0;
} }
if (!$mysqlInfo['match']) { if (!$mysqlInfo['match']) {
$this->doLog("Error: MySQL version: {$mysqlInfo['version']} is too low, please use the newest version of 5.7 or above.", 'error'); $this->doLog("Error: MySQL version: {$mysqlInfo['version']} is too low, please use the newest version of {$mysqlInfo['minVersion']} or above.", 'error');
return 0; return 0;
} }
if (!$redisInfo['match']) { if (!$redisInfo['match']) {
$this->doLog("Error: Redis version: {$mysqlInfo['version']} is too low, please use 2.0.0 or above.", 'error'); $this->doLog("Error: Redis version: {$mysqlInfo['version']} is too low, please use {$mysqlInfo['minVersion']} or above.", 'error');
return 0; return 0;
} }
if ($includeComposer) { if ($includeComposer) {
+1 -2
View File
@@ -56,8 +56,7 @@ class Test extends Command
*/ */
public function handle() public function handle()
{ {
$rep = new SeedBoxRepository(); Language::updateTransStatus();
$rep->updateCacheCronjob();
} }
} }
+1 -1
View File
@@ -68,7 +68,7 @@ class Kernel extends ConsoleKernel
private function registerScheduleCleanup(Schedule $schedule): void private function registerScheduleCleanup(Schedule $schedule): void
{ {
if (!Schema::hasTable("settings")) { if (!file_exists(base_path(".env")) || !Schema::hasTable("settings")) {
return; return;
} }
$interval = get_setting("main.autoclean_interval_one"); $interval = get_setting("main.autoclean_interval_one");
+14 -14
View File
@@ -38,72 +38,72 @@ class Language extends NexusModel
'cs' => [ 'cs' => [
'lang_name' => 'Czech', 'lang_name' => 'Czech',
'lang_name_cn' => '捷克语', 'lang_name_cn' => '捷克语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'da' => [ 'da' => [
'lang_name' => 'Danish', 'lang_name' => 'Danish',
'lang_name_cn' => '丹麦语', 'lang_name_cn' => '丹麦语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'nl' => [ 'nl' => [
'lang_name' => 'Dutch', 'lang_name' => 'Dutch',
'lang_name_cn' => '荷兰语', 'lang_name_cn' => '荷兰语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'fi' => [ 'fi' => [
'lang_name' => 'Finnish', 'lang_name' => 'Finnish',
'lang_name_cn' => '芬兰语', 'lang_name_cn' => '芬兰语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'fr' => [ 'fr' => [
'lang_name' => 'French', 'lang_name' => 'French',
'lang_name_cn' => '法语', 'lang_name_cn' => '法语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'de' => [ 'de' => [
'lang_name' => 'German', 'lang_name' => 'German',
'lang_name_cn' => '德语', 'lang_name_cn' => '德语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'el' => [ 'el' => [
'lang_name' => 'Greek', 'lang_name' => 'Greek',
'lang_name_cn' => '希腊语', 'lang_name_cn' => '希腊语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'nb' => [ 'nb' => [
'lang_name' => 'Norwegian', 'lang_name' => 'Norwegian',
'lang_name_cn' => '挪威语', 'lang_name_cn' => '挪威语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'pl' => [ 'pl' => [
'lang_name' => 'Polish', 'lang_name' => 'Polish',
'lang_name_cn' => '波兰语', 'lang_name_cn' => '波兰语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'pt' => [ 'pt' => [
'lang_name' => 'Portuguese', 'lang_name' => 'Portuguese',
'lang_name_cn' => '葡萄牙语', 'lang_name_cn' => '葡萄牙语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'ro' => [ 'ro' => [
'lang_name' => 'Romanian', 'lang_name' => 'Romanian',
'lang_name_cn' => '罗马尼亚语', 'lang_name_cn' => '罗马尼亚语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'ru' => [ 'ru' => [
'lang_name' => 'Russian', 'lang_name' => 'Russian',
'lang_name_cn' => '俄语', 'lang_name_cn' => '俄语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'es' => [ 'es' => [
'lang_name' => 'Spanish', 'lang_name' => 'Spanish',
'lang_name_cn' => '西班牙语', 'lang_name_cn' => '西班牙语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
'sv' => [ 'sv' => [
'lang_name' => 'Swedish', 'lang_name' => 'Swedish',
'lang_name_cn' => '瑞典语', 'lang_name_cn' => '瑞典语',
'trans_state' => self::TRANS_STATE_INCOMPLETE, 'trans_state' => self::TRANS_STATE_NEED_NEW,
], ],
]; ];
+3 -3
View File
@@ -22,7 +22,7 @@ class PluginStore extends Model
'description' => 'array', 'description' => 'array',
]; ];
const PLUGIN_LIST_API = "https://nppl.nexusphp.workers.dev"; const PLUGIN_LIST_API = "https://nexusphp.org/plugin-store";
const BLOG_POST_INFO_API = "https://nexusphp.org/wp-json/wp/v2/posts/%d"; const BLOG_POST_INFO_API = "https://nexusphp.org/wp-json/wp/v2/posts/%d";
const BLOG_POST_URL = "https://nexusphp.org/?p=%d"; const BLOG_POST_URL = "https://nexusphp.org/?p=%d";
@@ -98,7 +98,7 @@ class PluginStore extends Model
} else { } else {
$log .= ", not_null"; $log .= ", not_null";
} }
do_log($log, 'debug'); do_log($log);
return self::$rows; return self::$rows;
} }
@@ -132,7 +132,7 @@ class PluginStore extends Model
$count = 0; $count = 0;
foreach ($list as $row) { foreach ($list as $row) {
$installedVersion = $enabled[$row['plugin_id']] ?? ''; $installedVersion = $enabled[$row['plugin_id']] ?? '';
if ($installedVersion && version_compare($installedVersion, $row['version'], '<=')) { if ($installedVersion && version_compare($installedVersion, $row['version'], '<')) {
$count++; $count++;
} }
} }
+45 -45
View File
@@ -48,9 +48,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'czechrep.gif', 'flagpic' => 'czechrep.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'cs',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
3 => 3 =>
array ( array (
@@ -59,9 +59,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'denmark.gif', 'flagpic' => 'denmark.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'da',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
4 => 4 =>
array ( array (
@@ -70,9 +70,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'netherlands.gif', 'flagpic' => 'netherlands.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'nl',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
5 => 5 =>
array ( array (
@@ -103,9 +103,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'finland.gif', 'flagpic' => 'finland.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'fi',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
8 => 8 =>
array ( array (
@@ -114,9 +114,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'france.gif', 'flagpic' => 'france.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'fr',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
9 => 9 =>
array ( array (
@@ -125,9 +125,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'germany.gif', 'flagpic' => 'germany.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'de',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
10 => 10 =>
array ( array (
@@ -136,9 +136,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'greece.gif', 'flagpic' => 'greece.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'el',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
11 => 11 =>
array ( array (
@@ -180,9 +180,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'japan.gif', 'flagpic' => 'japan.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'ja',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
15 => 15 =>
array ( array (
@@ -202,9 +202,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'norway.gif', 'flagpic' => 'norway.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'nb',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
17 => 17 =>
array ( array (
@@ -224,9 +224,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'poland.gif', 'flagpic' => 'poland.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'pl',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
19 => 19 =>
array ( array (
@@ -235,9 +235,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'portugal.gif', 'flagpic' => 'portugal.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'pt',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
20 => 20 =>
array ( array (
@@ -246,9 +246,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'romania.gif', 'flagpic' => 'romania.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'ro',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
21 => 21 =>
array ( array (
@@ -257,9 +257,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'russia.gif', 'flagpic' => 'russia.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'ru',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
22 => 22 =>
array ( array (
@@ -301,9 +301,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'spain.gif', 'flagpic' => 'spain.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'es',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
26 => 26 =>
array ( array (
@@ -312,9 +312,9 @@ class LanguageTableSeeder extends Seeder
'flagpic' => 'sweden.gif', 'flagpic' => 'sweden.gif',
'sub_lang' => 1, 'sub_lang' => 1,
'rule_lang' => 0, 'rule_lang' => 0,
'site_lang' => 0, 'site_lang' => 1,
'site_lang_folder' => '', 'site_lang_folder' => 'sv',
'trans_state' => 'unavailable', 'trans_state' => 'need-new',
), ),
27 => 27 =>
array ( array (
+20 -4
View File
@@ -37,6 +37,10 @@ class Install
'mysqli', 'bcmath', 'redis', 'gd', 'gmp', 'Zend OPcache', 'pcntl', 'posix', 'sockets', 'zip', 'intl', 'mysqli', 'bcmath', 'redis', 'gd', 'gmp', 'Zend OPcache', 'pcntl', 'posix', 'sockets', 'zip', 'intl',
'sqlite3', 'pdo_sqlite' 'sqlite3', 'pdo_sqlite'
]; ];
protected array $conflictExtensions = [
'mysql',
];
protected array $optionalExtensions = [ protected array $optionalExtensions = [
// ['name' => 'swoole', 'desc' => "If use swoole for Octane, make sure 'current' shows 1"], // ['name' => 'swoole', 'desc' => "If use swoole for Octane, make sure 'current' shows 1"],
]; ];
@@ -193,6 +197,16 @@ class Install
'result' => $this->yesOrNo(empty($disabledFunctions)), 'result' => $this->yesOrNo(empty($disabledFunctions)),
]; ];
foreach ($this->conflictExtensions as $extension) {
$loaded = extension_loaded($extension);
$tableRows[] = [
'label' => "PHP extension $extension",
'required' => 'disabled',
'current' => (int)$loaded,
'result' => $loaded ? 'NO' : 'YES',
];
}
foreach ($this->requiredExtensions as $extension) { foreach ($this->requiredExtensions as $extension) {
if ($extension == 'pcntl' && function_exists('exec')) { if ($extension == 'pcntl' && function_exists('exec')) {
$output = []; $output = [];
@@ -707,8 +721,9 @@ class Install
$sql = 'select version() as v'; $sql = 'select version() as v';
$result = NexusDB::select($sql); $result = NexusDB::select($sql);
$version = $result[0]['v']; $version = $result[0]['v'];
$match = version_compare($version, '5.7.8', '>='); $minVersion = '5.7.8';
return compact('version', 'match'); $match = version_compare($version, $minVersion, '>=');
return compact('version', 'match', 'minVersion');
} }
public function getRedisVersionInfo(): array public function getRedisVersionInfo(): array
@@ -716,8 +731,9 @@ class Install
$redis = NexusDB::redis(); $redis = NexusDB::redis();
$result = $redis->info(); $result = $redis->info();
$version = $result['redis_version']; $version = $result['redis_version'];
$match = version_compare($version, '2.6.12', '>='); $minVersion = '2.6.12';
return compact('version', 'match'); $match = version_compare($version, $minVersion, '>=');
return compact('version', 'match', 'minVersion');
} }
public function checkLock() public function checkLock()
+1
View File
@@ -95,6 +95,7 @@ return array (
'upload_deny_approval_deny_count' => 2, 'upload_deny_approval_deny_count' => 2,
'enable_global_search' => 'yes', 'enable_global_search' => 'yes',
'tmp_invite_count' => 0, 'tmp_invite_count' => 0,
'complain_enabled' => 'yes',
), ),
'smtp' => 'smtp' =>
array ( array (
+22
View File
@@ -74,3 +74,25 @@ img.hitandrun {
.word-break-all { .word-break-all {
word-break: break-all; word-break: break-all;
} }
.form-box {
padding: 15px;
}
.form-control-row {
display: flex;
align-items: center;
padding: 10px 0;
}
.form-control-row .label {
width: 80px
}
.form-control-row .field {
}
.form-control-row input[type=text],textarea {
width: 300px;
padding: 4px;
}
.form-control-row input[type=checkbox] {
vertical-align: sub;
}
-25
View File
@@ -1033,30 +1033,6 @@ if (get_setting('seed_box.enabled') == 'yes') {
} }
$seedBox .= sprintf('<div><input type="button" id="add-seed-box-btn" value="%s"/></div>', $lang_usercp['add_seed_box_btn']); $seedBox .= sprintf('<div><input type="button" id="add-seed-box-btn" value="%s"/></div>', $lang_usercp['add_seed_box_btn']);
tr_small($lang_usercp['row_seed_box'], $seedBox, 1); tr_small($lang_usercp['row_seed_box'], $seedBox, 1);
$seedBoxCss = <<<CSS
.form-box {
padding: 15px;
}
.form-control-row {
display: flex;
align-items: center;
padding: 10px 0;
}
.form-control-row .label {
width: 80px
}
.form-control-row .field {
}
.form-control-row input[type=text],textarea {
width: 300px;
padding: 4px;
}
.form-control-row input[type=checkbox] {
vertical-align: sub;
}
CSS;
$seedBoxForm = <<<FORM $seedBoxForm = <<<FORM
<div class="form-box"> <div class="form-box">
<form id="seed-box-form"> <form id="seed-box-form">
@@ -1117,7 +1093,6 @@ jQuery('#seed-box-table').on('click', '.remove-seed-box-btn', function () {
}); });
JS; JS;
\Nexus\Nexus::js($seedBoxJs, 'footer', false); \Nexus\Nexus::js($seedBoxJs, 'footer', false);
\Nexus\Nexus::css($seedBoxCss, 'footer', false);
} }
//end seed box //end seed box