'Custom Field Manage', 'url' => $url, 'info' => 'Manage custom fields', ]; $id = NexusDB::insert($table, $insert); $this->doLog("[ADD CUSTOM FIELD MENU] insert: " . json_encode($insert) . " to table: $table, id: $id"); } //since beta8 if (WITH_LARAVEL && NexusDB::schema()->hasColumn('categories', 'icon_id')) { $this->doLog('[INIT CATEGORY ICON_ID]'); $icon = Icon::query()->orderBy('id', 'asc')->first(); if ($icon) { Category::query()->where('icon_id', 0)->update(['icon_id' => $icon->id]); } } //fix base url, since beta8 if (WITH_LARAVEL && NexusDB::schema()->hasTable('settings')) { $settingBasic = get_setting('basic'); if (isset($settingBasic['BASEURL']) && Str::startsWith($settingBasic['BASEURL'], 'localhost')) { $this->doLog('[RESET CONFIG basic.BASEURL]'); Setting::query()->where('name', 'basic.BASEURL')->update(['value' => '']); } if (isset($settingBasic['announce_url']) && Str::startsWith($settingBasic['announce_url'], 'localhost')) { $this->doLog('[RESET CONFIG basic.announce_url]'); Setting::query()->where('name', 'basic.announce_url')->update(['value' => '']); } } //torrent support sticky second level if (WITH_LARAVEL) { $columnInfo = NexusDB::getMysqlColumnInfo('torrents', 'pos_state'); $this->doLog("[TORRENT POS_STATE], column info: " . json_encode($columnInfo)); if ($columnInfo['DATA_TYPE'] == 'enum') { $sql = "alter table torrents modify `pos_state` varchar(32) NOT NULL DEFAULT 'normal'"; $this->doLog("[ALTER TORRENT POS_STATE TYPE TO VARCHAR], $sql"); sql_query($sql); } } if (WITH_LARAVEL && VERSION_NUMBER == '1.6.0-beta9') { $this->migrateExamProgress(); } } public function migrateExamProgress() { if (!NexusDB::schema()->hasColumn('exam_progress', 'init_value')) { sql_query('alter table exam_progress add column `init_value` bigint(20) NOT NULL after `index`'); $log = 'add column init_value on table exam_progress.'; $this->doLog($log); } else { $log = 'column init_value already exists on table exam_progress.'; $this->doLog($log); } $examUsersQuery = ExamUser::query()->where('status', ExamUser::STATUS_NORMAL)->with('user'); $page = 1; $size = 100; while (true) { $examUsers = $examUsersQuery->forPage($page, $size)->get(); $log = "fetch exam user by: " . last_query(); $this->doLog($log); if ($examUsers->isEmpty()) { $log = "no more exam user to handle..."; $this->doLog($log); break; } $log = 'get init_vlaue...'; $this->doLog($log); foreach ($examUsers as $examUser) { $oldProgress = $examUser->progress; $user = $examUser->user; $currentLogPrefix = "examUser: " . $examUser->toJson(); $log = sprintf("$currentLogPrefix, progress: %s", json_encode($oldProgress)); $this->doLog($log); foreach ($oldProgress as $index => $progressValue) { if ($index == Exam::INDEX_DOWNLOADED) { $value = $user->downloaded; $initValue = $value - $progressValue; } elseif ($index == Exam::INDEX_UPLOADED) { $value = $user->uploaded; $initValue = $value - $progressValue; } elseif ($index == Exam::INDEX_SEED_BONUS) { $value = $user->seedbonus; $initValue = $value - $progressValue; } elseif ($index == Exam::INDEX_SEED_TIME_AVERAGE) { $value = $progressValue; $initValue = 0; } else { $log = sprintf("$currentLogPrefix, invalid index: %s, skip!", $index); $this->doLog($log); continue; } $insert = [ 'exam_user_id' => $examUser->id, 'exam_id' => $examUser->exam_id, 'uid' => $examUser->uid, 'index' => $index, 'torrent_id' => -1, 'value' => $value, 'init_value' => $initValue, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]; $exists = NexusDB::table('exam_progress') ->where('exam_user_id', $examUser->id) ->where('index', $insert) ->where('torrent_id', -1) ->orderBy('id', 'desc') ->first(); if ($exists) { NexusDB::table('exam_progress')->where('id', $exists->id)->update($insert); $log = "$currentLogPrefix, progress exists: {$exists->id}, update index: $index progress: " . json_encode($insert); } else { NexusDB::table('exam_progress')->insert($insert); $log = "$currentLogPrefix, insert index: $index progress: " . json_encode($insert); } $this->doLog($log); } } $page++; } } }