mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-06-26 02:07:33 +08:00
Compare commits
24 Commits
527a2d2162
..
php8
| Author | SHA1 | Date | |
|---|---|---|---|
| dd2716427e | |||
| c50867a71a | |||
| fab32bf63d | |||
| e4cdb26c2f | |||
| f823dc191a | |||
| 1372776ba1 | |||
| 7d18a7f76a | |||
| dc77ab7b40 | |||
| 94a35b81dc | |||
| dfe9436f1d | |||
| 4afcb1bb08 | |||
| e3376c3f1b | |||
| 00fdc2d08f | |||
| 4d54e08918 | |||
| 4d4af87dc9 | |||
| f271e28b15 | |||
| 9995767bf7 | |||
| d115a3879a | |||
| 431fbfff56 | |||
| 9e632811ef | |||
| db4982f8f7 | |||
| af66ec806d | |||
| 09b785902f | |||
| d79031f24d |
@@ -4,7 +4,7 @@ FROM openresty/openresty:alpine
|
|||||||
RUN apk add --no-cache gettext bash curl openssl socat
|
RUN apk add --no-cache gettext bash curl openssl socat
|
||||||
|
|
||||||
# 拷贝 entrypoint
|
# 拷贝 entrypoint
|
||||||
COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
|
COPY .docker/openresty/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
CMD ["/bin/sh", "/usr/local/bin/entrypoint.sh"]
|
CMD ["/bin/sh", "/usr/local/bin/entrypoint.sh"]
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local
|
|||||||
ENV LOG_CHANNEL=stderr
|
ENV LOG_CHANNEL=stderr
|
||||||
ENV RUNNING_IN_DOCKER=1
|
ENV RUNNING_IN_DOCKER=1
|
||||||
|
|
||||||
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
COPY .docker/php/entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
RUN chmod +x /usr/local/bin/entrypoint.sh
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
ENTRYPOINT ["entrypoint.sh"]
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ DB_PORT=3306
|
|||||||
DB_DATABASE=nexusphp
|
DB_DATABASE=nexusphp
|
||||||
DB_USERNAME=nexusphp
|
DB_USERNAME=nexusphp
|
||||||
DB_PASSWORD=nexusphp
|
DB_PASSWORD=nexusphp
|
||||||
|
DB_SCHEMA=public
|
||||||
|
|
||||||
BROADCAST_DRIVER=log
|
BROADCAST_DRIVER=log
|
||||||
CACHE_DRIVER=redis
|
CACHE_DRIVER=redis
|
||||||
|
|||||||
+2
-2
@@ -40,8 +40,8 @@ Welcome to participate in internationalization work, click [here](https://github
|
|||||||
- Section H&R
|
- Section H&R
|
||||||
- TGBot
|
- TGBot
|
||||||
## System Requirements
|
## System Requirements
|
||||||
- PHP: 8.2|8.3|8.4|8.5, must have extensions: bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
|
- PHP: 8.2|8.3|8.4|8.5, must have extensions: bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3, pdo_pgsql
|
||||||
- Mysql: 5.7 latest version or above
|
- Database: MySQL 5.7 latest version or above/PostgreSQL 16 or above
|
||||||
- Redis:4.0.0 or above
|
- Redis:4.0.0 or above
|
||||||
- Others: supervisor, rsync
|
- Others: supervisor, rsync
|
||||||
|
|
||||||
|
|||||||
@@ -40,8 +40,8 @@
|
|||||||
- TGBot
|
- TGBot
|
||||||
|
|
||||||
## 系统要求
|
## 系统要求
|
||||||
- PHP: 8.2|8.3|8.4|8.5,必须扩展:bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3
|
- PHP: 8.2|8.3|8.4|8.5,必须扩展:bcmath, ctype, curl, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis, pcntl, sockets, posix, gmp, zend opcache, zip, intl, pdo_sqlite, sqlite3, pdo_pgsql
|
||||||
- Mysql: 5.7 最新版或以上版本
|
- Database: MySQL 5.7 最新版或以上版本/PostgreSQL 16 或以上版本
|
||||||
- Redis:4.0.0 或以上版本
|
- Redis:4.0.0 或以上版本
|
||||||
- 其他:supervisor, rsync
|
- 其他:supervisor, rsync
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ class NexusUpdate extends Command
|
|||||||
// $settings = $settingTableRows['settings'];
|
// $settings = $settingTableRows['settings'];
|
||||||
$symbolicLinks = $settingTableRows['symbolic_links'];
|
$symbolicLinks = $settingTableRows['symbolic_links'];
|
||||||
$fails = $settingTableRows['fails'];
|
$fails = $settingTableRows['fails'];
|
||||||
$mysqlInfo = $this->update->getMysqlVersionInfo();
|
$mysqlInfo = $this->update->getDatabaseVersionInfo();
|
||||||
$redisInfo = $this->update->getRedisVersionInfo();
|
$redisInfo = $this->update->getRedisVersionInfo();
|
||||||
|
|
||||||
if (!empty($fails)) {
|
if (!empty($fails)) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class MigrateTorrentsTableTextColumn extends Command
|
|||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
if (Schema::hasTable("torrent_extras") && Schema::hasColumn("torrents", "descr")) {
|
if (Schema::hasTable("torrent_extras") && Schema::hasColumn("torrents", "descr")) {
|
||||||
NexusDB::statement("insert into torrent_extras (torrent_id, descr, media_info, nfo, pt_gen, created_at) select id, descr, technical_info, nfo, pt_gen, now() from torrents on duplicate key update torrent_id = values(torrent_id)");
|
NexusDB::statement("insert into torrent_extras (torrent_id, descr, media_info, nfo, pt_gen, created_at) select id, descr, technical_info, nfo, pt_gen, now() from torrents " . NexusDB::upsertField(['torrent_id'], ['torrent_id']));
|
||||||
}
|
}
|
||||||
$columns = ["ori_descr", "descr", "nfo", "technical_info", "pt_gen"];
|
$columns = ["ori_descr", "descr", "nfo", "technical_info", "pt_gen"];
|
||||||
$sql = "alter table torrents ";
|
$sql = "alter table torrents ";
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use App\Events\HitAndRunUpdated;
|
|||||||
use App\Events\MessageCreated;
|
use App\Events\MessageCreated;
|
||||||
use App\Events\NewsCreated;
|
use App\Events\NewsCreated;
|
||||||
use App\Events\SnatchedUpdated;
|
use App\Events\SnatchedUpdated;
|
||||||
|
use App\Events\StaffMessageCreated;
|
||||||
use App\Events\TorrentCreated;
|
use App\Events\TorrentCreated;
|
||||||
use App\Events\TorrentDeleted;
|
use App\Events\TorrentDeleted;
|
||||||
use App\Events\TorrentUpdated;
|
use App\Events\TorrentUpdated;
|
||||||
@@ -28,6 +29,7 @@ use App\Models\HitAndRun;
|
|||||||
use App\Models\Message;
|
use App\Models\Message;
|
||||||
use App\Models\News;
|
use App\Models\News;
|
||||||
use App\Models\Snatch;
|
use App\Models\Snatch;
|
||||||
|
use App\Models\StaffMessage;
|
||||||
use App\Models\Torrent;
|
use App\Models\Torrent;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
@@ -59,6 +61,8 @@ final class ModelEventEnum {
|
|||||||
const SNATCHED_UPDATED = 'snatched_updated';
|
const SNATCHED_UPDATED = 'snatched_updated';
|
||||||
const MESSAGE_CREATED = 'message_created';
|
const MESSAGE_CREATED = 'message_created';
|
||||||
|
|
||||||
|
const STAFF_MESSAGE_CREATED = 'staff_message_created';
|
||||||
|
|
||||||
public static array $eventMaps = [
|
public static array $eventMaps = [
|
||||||
self::TORRENT_CREATED => ['event' => TorrentCreated::class, 'model' => Torrent::class],
|
self::TORRENT_CREATED => ['event' => TorrentCreated::class, 'model' => Torrent::class],
|
||||||
self::TORRENT_UPDATED => ['event' => TorrentUpdated::class, 'model' => Torrent::class],
|
self::TORRENT_UPDATED => ['event' => TorrentUpdated::class, 'model' => Torrent::class],
|
||||||
@@ -87,5 +91,7 @@ final class ModelEventEnum {
|
|||||||
self::AGENT_DENY_CREATED => ['event' => AgentDenyCreated::class, 'model' => AgentDeny::class],
|
self::AGENT_DENY_CREATED => ['event' => AgentDenyCreated::class, 'model' => AgentDeny::class],
|
||||||
self::AGENT_DENY_UPDATED => ['event' => AgentDenyUpdated::class, 'model' => AgentDeny::class],
|
self::AGENT_DENY_UPDATED => ['event' => AgentDenyUpdated::class, 'model' => AgentDeny::class],
|
||||||
self::AGENT_DENY_DELETED => ['event' => AgentDenyDeleted::class, 'model' => AgentDeny::class],
|
self::AGENT_DENY_DELETED => ['event' => AgentDenyDeleted::class, 'model' => AgentDeny::class],
|
||||||
|
|
||||||
|
self::STAFF_MESSAGE_CREATED => ['event' => StaffMessageCreated::class, 'model' => StaffMessage::class],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Events;
|
||||||
|
|
||||||
|
use Illuminate\Broadcasting\Channel;
|
||||||
|
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||||
|
use Illuminate\Broadcasting\PresenceChannel;
|
||||||
|
use Illuminate\Broadcasting\PrivateChannel;
|
||||||
|
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Foundation\Events\Dispatchable;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class StaffMessageCreated
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||||
|
|
||||||
|
public ?Model $model = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new event instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct(Model $model)
|
||||||
|
{
|
||||||
|
$this->model = $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the channels the event should broadcast on.
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Broadcasting\Channel|array
|
||||||
|
*/
|
||||||
|
public function broadcastOn()
|
||||||
|
{
|
||||||
|
return new PrivateChannel('channel-name');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\System\SettingResource\Pages;
|
namespace App\Filament\Resources\System\SettingResource\Pages;
|
||||||
|
|
||||||
|
use Filament\Actions\Action;
|
||||||
use Filament\Forms\Contracts\HasForms;
|
use Filament\Forms\Contracts\HasForms;
|
||||||
use Filament\Forms\Concerns\InteractsWithForms;
|
use Filament\Forms\Concerns\InteractsWithForms;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
@@ -41,8 +42,6 @@ class EditSetting extends Page implements HasForms
|
|||||||
|
|
||||||
protected static string $resource = SettingResource::class;
|
protected static string $resource = SettingResource::class;
|
||||||
|
|
||||||
protected string $view = 'filament.resources.system.setting-resource.pages.edit-hit-and-run';
|
|
||||||
|
|
||||||
public ?array $data = [];
|
public ?array $data = [];
|
||||||
|
|
||||||
public function getTitle(): string
|
public function getTitle(): string
|
||||||
@@ -56,7 +55,7 @@ class EditSetting extends Page implements HasForms
|
|||||||
$this->fillForm();
|
$this->fillForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function form(Schema $schema): Schema
|
public function content(Schema $schema): Schema
|
||||||
{
|
{
|
||||||
return $schema
|
return $schema
|
||||||
->components($this->getFormSchema())
|
->components($this->getFormSchema())
|
||||||
@@ -76,7 +75,7 @@ class EditSetting extends Page implements HasForms
|
|||||||
}
|
}
|
||||||
Arr::set($settings, 'captcha.attendance.enabled', $normalized);
|
Arr::set($settings, 'captcha.attendance.enabled', $normalized);
|
||||||
|
|
||||||
$this->form->fill($settings);
|
$this->content->fill($settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -85,7 +84,10 @@ class EditSetting extends Page implements HasForms
|
|||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
Tabs::make('Heading')
|
Tabs::make('Heading')
|
||||||
->tabs($this->getTabs())
|
->tabs($this->getTabs()),
|
||||||
|
Action::make('submit')
|
||||||
|
->label(__('label.save'))
|
||||||
|
->action(fn() => $this->submit()),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +95,7 @@ class EditSetting extends Page implements HasForms
|
|||||||
{
|
{
|
||||||
static::authorizeResourceAccess();
|
static::authorizeResourceAccess();
|
||||||
|
|
||||||
$formData = $this->form->getState();
|
$formData = $this->content->getState();
|
||||||
$notAutoloadNames = ['donation_custom'];
|
$notAutoloadNames = ['donation_custom'];
|
||||||
$data = [];
|
$data = [];
|
||||||
foreach ($formData as $prefix => $parts) {
|
foreach ($formData as $prefix => $parts) {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Filament\Resources\User;
|
namespace App\Filament\Resources\User;
|
||||||
|
|
||||||
|
use Filament\Infolists\Components\RepeatableEntry;
|
||||||
|
use Filament\Infolists\Components\RepeatableEntry\TableColumn;
|
||||||
use Filament\Schemas\Schema;
|
use Filament\Schemas\Schema;
|
||||||
use Filament\Tables\Columns\TextColumn;
|
use Filament\Tables\Columns\TextColumn;
|
||||||
use Filament\Tables\Columns\BooleanColumn;
|
use Filament\Tables\Columns\BooleanColumn;
|
||||||
@@ -193,10 +195,21 @@ class ExamUserResource extends Resource
|
|||||||
->columns(2)
|
->columns(2)
|
||||||
,
|
,
|
||||||
Group::make([
|
Group::make([
|
||||||
ViewEntry::make('progressFormatted')
|
RepeatableEntry::make('progressFormatted')
|
||||||
->label('进度')
|
->hiddenLabel()
|
||||||
->view('filament.resources.user.exam-user-resource.pages.detail-v3')
|
->table([
|
||||||
])->columnSpan(1),
|
TableColumn::make(__('label.exam.index_required_label')),
|
||||||
|
TableColumn::make(__('label.exam.index_required_value')),
|
||||||
|
TableColumn::make(__('label.exam.index_current_value')),
|
||||||
|
TableColumn::make(__('label.exam.index_result')),
|
||||||
|
])
|
||||||
|
->schema([
|
||||||
|
TextEntry::make('index_formatted'),
|
||||||
|
TextEntry::make('require_value_formatted'),
|
||||||
|
TextEntry::make('current_value_formatted'),
|
||||||
|
TextEntry::make('index_result')->html(),
|
||||||
|
])
|
||||||
|
])->columnSpan(1),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class UserPasskeyResource extends Resource
|
|||||||
->formatStateUsing(fn($state) => username_for_admin($state))
|
->formatStateUsing(fn($state) => username_for_admin($state))
|
||||||
->label(__('label.username'))
|
->label(__('label.username'))
|
||||||
,
|
,
|
||||||
Tables\Columns\TextColumn::make('AAGUID')
|
Tables\Columns\TextColumn::make('aaguid')
|
||||||
->label("AAGUID")
|
->label("AAGUID")
|
||||||
,
|
,
|
||||||
Tables\Columns\TextColumn::make('credential_id')
|
Tables\Columns\TextColumn::make('credential_id')
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Http;
|
namespace App\Http;
|
||||||
|
|
||||||
|
use App\Http\Middleware\CheckSiteStatus;
|
||||||
use App\Http\Middleware\Filament;
|
use App\Http\Middleware\Filament;
|
||||||
use App\Http\Middleware\Locale;
|
use App\Http\Middleware\Locale;
|
||||||
use App\Http\Middleware\LogUserIp;
|
use App\Http\Middleware\LogUserIp;
|
||||||
@@ -48,6 +49,7 @@ class Kernel extends HttpKernel
|
|||||||
'api' => [
|
'api' => [
|
||||||
'throttle:api',
|
'throttle:api',
|
||||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
CheckSiteStatus::class,
|
||||||
],
|
],
|
||||||
'filament' => [
|
'filament' => [
|
||||||
\Illuminate\Session\Middleware\StartSession::class,
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use App\Exceptions\NexusException;
|
||||||
|
use App\Models\Setting;
|
||||||
|
use App\Models\User;
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
|
||||||
|
class CheckSiteStatus
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||||
|
*/
|
||||||
|
public function handle(Request $request, Closure $next): Response
|
||||||
|
{
|
||||||
|
$user = $request->user();
|
||||||
|
if ($user && $user->class < User::CLASS_ADMINISTRATOR && !Setting::getIsSiteOnline()) {
|
||||||
|
throw new NexusException(nexus_trans('misc.site_down_for_maintenance'));
|
||||||
|
}
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -28,7 +28,6 @@ class RemoveUserDonorStatus
|
|||||||
->with('language')
|
->with('language')
|
||||||
->where('donor', 'yes')
|
->where('donor', 'yes')
|
||||||
->whereNotNull('donoruntil')
|
->whereNotNull('donoruntil')
|
||||||
->where('donoruntil', '!=', '0000-00-00 00:00:00')
|
|
||||||
->where('donoruntil', '<', now())
|
->where('donoruntil', '<', now())
|
||||||
->get();
|
->get();
|
||||||
$userModifyLogs = [];
|
$userModifyLogs = [];
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class BonusLogs extends NexusModel
|
|||||||
const DEFAULT_BONUS_BUY_TEMPORARY_INVITE = 500;
|
const DEFAULT_BONUS_BUY_TEMPORARY_INVITE = 500;
|
||||||
const DEFAULT_BONUS_BUY_RAINBOW_ID = 5000;
|
const DEFAULT_BONUS_BUY_RAINBOW_ID = 5000;
|
||||||
const DEFAULT_BONUS_BUY_CHANGE_USERNAME_CARD = 100000;
|
const DEFAULT_BONUS_BUY_CHANGE_USERNAME_CARD = 100000;
|
||||||
|
const DEFAULT_BONUS_SELF_ENABLE = 100000;
|
||||||
|
|
||||||
//扣除类,1开始
|
//扣除类,1开始
|
||||||
const BUSINESS_TYPE_CANCEL_HIT_AND_RUN = 1;
|
const BUSINESS_TYPE_CANCEL_HIT_AND_RUN = 1;
|
||||||
@@ -46,6 +47,7 @@ class BonusLogs extends NexusModel
|
|||||||
const BUSINESS_TYPE_TASK_PASS_REWARD = 21;
|
const BUSINESS_TYPE_TASK_PASS_REWARD = 21;
|
||||||
const BUSINESS_TYPE_REWARD_TORRENT = 22;
|
const BUSINESS_TYPE_REWARD_TORRENT = 22;
|
||||||
const BUSINESS_TYPE_CLAIMED_UNREACHED = 23;
|
const BUSINESS_TYPE_CLAIMED_UNREACHED = 23;
|
||||||
|
const BUSINESS_TYPE_SELF_ENABLE = 24;
|
||||||
|
|
||||||
//获得类,普通获得,1000 起步
|
//获得类,普通获得,1000 起步
|
||||||
const BUSINESS_TYPE_ROLE_WORK_SALARY = 1000;
|
const BUSINESS_TYPE_ROLE_WORK_SALARY = 1000;
|
||||||
@@ -87,6 +89,7 @@ class BonusLogs extends NexusModel
|
|||||||
self::BUSINESS_TYPE_TASK_PASS_REWARD => ['text' => 'Task success reward'],
|
self::BUSINESS_TYPE_TASK_PASS_REWARD => ['text' => 'Task success reward'],
|
||||||
self::BUSINESS_TYPE_REWARD_TORRENT => ['text' => 'Reward torrent'],
|
self::BUSINESS_TYPE_REWARD_TORRENT => ['text' => 'Reward torrent'],
|
||||||
self::BUSINESS_TYPE_CLAIMED_UNREACHED => ['text' => 'Claimed torrent unreached'],
|
self::BUSINESS_TYPE_CLAIMED_UNREACHED => ['text' => 'Claimed torrent unreached'],
|
||||||
|
self::BUSINESS_TYPE_SELF_ENABLE => ['text' => 'Self enable'],
|
||||||
|
|
||||||
self::BUSINESS_TYPE_ROLE_WORK_SALARY => ['text' => 'Role work salary'],
|
self::BUSINESS_TYPE_ROLE_WORK_SALARY => ['text' => 'Role work salary'],
|
||||||
self::BUSINESS_TYPE_TORRENT_BE_DOWNLOADED => ['text' => 'Torrent be downloaded'],
|
self::BUSINESS_TYPE_TORRENT_BE_DOWNLOADED => ['text' => 'Torrent be downloaded'],
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
|
||||||
|
class Faq extends NexusModel
|
||||||
|
{
|
||||||
|
protected $table = 'faq';
|
||||||
|
}
|
||||||
@@ -15,7 +15,10 @@ class NexusModel extends Model
|
|||||||
|
|
||||||
protected $perPage = 50;
|
protected $perPage = 50;
|
||||||
|
|
||||||
protected $connection = NexusDB::ELOQUENT_CONNECTION_NAME;
|
public function getConnectionName()
|
||||||
|
{
|
||||||
|
return NexusDB::getConnectionName();
|
||||||
|
}
|
||||||
|
|
||||||
protected function usernameForAdmin(): Attribute
|
protected function usernameForAdmin(): Attribute
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ class Passkey extends NexusModel
|
|||||||
public $timestamps = true;
|
public $timestamps = true;
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'id', 'user_id', 'AAGUID', 'credential_id', 'public_key', 'counter',
|
'id', 'user_id', 'aaguid', 'credential_id', 'public_key', 'counter',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function user()
|
public function user()
|
||||||
@@ -17,8 +17,9 @@ class Passkey extends NexusModel
|
|||||||
return $this->belongsTo(User::class, 'user_id');
|
return $this->belongsTo(User::class, 'user_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function AAGUID() {
|
public function getAaguidFormatted(): string
|
||||||
$guid = $this->AAGUID;
|
{
|
||||||
|
$guid = $this->aaguid;
|
||||||
return sprintf(
|
return sprintf(
|
||||||
'%s-%s-%s-%s-%s',
|
'%s-%s-%s-%s-%s',
|
||||||
substr($guid, 0, 8),
|
substr($guid, 0, 8),
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Models\Traits\NexusActivityLogTrait;
|
||||||
|
|
||||||
|
class RegImage extends NexusModel
|
||||||
|
{
|
||||||
|
protected $table = 'regimages';
|
||||||
|
|
||||||
|
protected $fillable = ['imagehash', 'imagestring', 'dateline'];
|
||||||
|
}
|
||||||
@@ -334,4 +334,14 @@ class Setting extends NexusModel
|
|||||||
{
|
{
|
||||||
return self::get('main.showimdbinfo') == 'yes';
|
return self::get('main.showimdbinfo') == 'yes';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getSelfEnableBonus(): int
|
||||||
|
{
|
||||||
|
return (int)self::get("bonus.self_enable", BonusLogs::DEFAULT_BONUS_SELF_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getIsSiteOnline(): bool
|
||||||
|
{
|
||||||
|
return self::get('main.site_online') == 'yes';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Repositories\ToolRepository;
|
use App\Enums\ModelEventEnum;
|
||||||
use Google\Service\Testing\ToolResultsExecution;
|
|
||||||
|
|
||||||
class StaffMessage extends NexusModel
|
class StaffMessage extends NexusModel
|
||||||
{
|
{
|
||||||
@@ -27,4 +26,16 @@ class StaffMessage extends NexusModel
|
|||||||
return $this->belongsTo(User::class, 'answeredby');
|
return $this->belongsTo(User::class, 'answeredby');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function add(int $sender, string $subject, string $msg)
|
||||||
|
{
|
||||||
|
$record = self::query()->create([
|
||||||
|
'sender' => $sender,
|
||||||
|
'subject' => $subject,
|
||||||
|
'msg' => $msg,
|
||||||
|
'added' => now(),
|
||||||
|
]);
|
||||||
|
fire_event(ModelEventEnum::STAFF_MESSAGE_CREATED, $record);
|
||||||
|
return $record;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-1
@@ -5,6 +5,7 @@ namespace App\Models;
|
|||||||
use App\Repositories\TagRepository;
|
use App\Repositories\TagRepository;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
|
use Nexus\Database\NexusDB;
|
||||||
|
|
||||||
class Torrent extends NexusModel
|
class Torrent extends NexusModel
|
||||||
{
|
{
|
||||||
@@ -186,6 +187,37 @@ class Torrent extends NexusModel
|
|||||||
self::NFO_VIEW_STYLE_WINDOWS => ['text' => 'Windows-vy'],
|
self::NFO_VIEW_STYLE_WINDOWS => ['text' => 'Windows-vy'],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
public function scopeWhereInfoHash($query, string $binaryHash)
|
||||||
|
{
|
||||||
|
if (NexusDB::isPgsql()) {
|
||||||
|
return $query->whereRaw(
|
||||||
|
"info_hash = decode(?, 'hex')",
|
||||||
|
[bin2hex($binaryHash)]
|
||||||
|
);
|
||||||
|
} elseif (NexusDB::isMysql()) {
|
||||||
|
return $query->where('info_hash', $binaryHash);
|
||||||
|
}
|
||||||
|
throw new \RuntimeException("Not supported database");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重写获取 info_hash 的方法,确保从数据库读出时是正确的格式
|
||||||
|
* 注意:不要使用 getInfoHashAttribute(),不带缓存,第1次有值,第2次指针到头,数据是空!!!
|
||||||
|
*/
|
||||||
|
public function infoHash(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute::make(
|
||||||
|
get: function ($value) {
|
||||||
|
// PostgreSQL 返回 bytea 时可能是十六进制流或资源
|
||||||
|
if (is_resource($value)) {
|
||||||
|
rewind($value);
|
||||||
|
return stream_get_contents($value);
|
||||||
|
}
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
)->shouldCache();
|
||||||
|
}
|
||||||
|
|
||||||
public function getPickInfoAttribute()
|
public function getPickInfoAttribute()
|
||||||
{
|
{
|
||||||
$info = self::$pickTypes[$this->picktype] ?? null;
|
$info = self::$pickTypes[$this->picktype] ?? null;
|
||||||
@@ -521,8 +553,16 @@ class Torrent extends NexusModel
|
|||||||
|
|
||||||
public function tags(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
public function tags(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
|
||||||
{
|
{
|
||||||
|
$idsString = TagRepository::getOrderByFieldIdString();
|
||||||
|
if (NexusDB::isPgsql()) {
|
||||||
|
$orderByRaw = "array_position(ARRAY[$idsString]::int[], tags.id)";
|
||||||
|
} else if (NexusDB::isMysql()) {
|
||||||
|
$orderByRaw = "FIELD(tags.id, $idsString)";
|
||||||
|
} else {
|
||||||
|
throw new \RuntimeException("Unsupported database");
|
||||||
|
}
|
||||||
return $this->belongsToMany(Tag::class, 'torrent_tags', 'torrent_id', 'tag_id')
|
return $this->belongsToMany(Tag::class, 'torrent_tags', 'torrent_id', 'tag_id')
|
||||||
->orderByRaw(sprintf("field(`tags`.`id`,%s)", TagRepository::getOrderByFieldIdString()));
|
->orderByRaw($orderByRaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reward_logs(): \Illuminate\Database\Eloquent\Relations\HasMany
|
public function reward_logs(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||||
|
|||||||
+5
-3
@@ -31,8 +31,6 @@ class User extends Authenticatable implements FilamentUser, HasName
|
|||||||
|
|
||||||
protected $perPage = 50;
|
protected $perPage = 50;
|
||||||
|
|
||||||
protected $connection = NexusDB::ELOQUENT_CONNECTION_NAME;
|
|
||||||
|
|
||||||
const STATUS_CONFIRMED = 'confirmed';
|
const STATUS_CONFIRMED = 'confirmed';
|
||||||
const STATUS_PENDING = 'pending';
|
const STATUS_PENDING = 'pending';
|
||||||
|
|
||||||
@@ -109,6 +107,11 @@ class User extends Authenticatable implements FilamentUser, HasName
|
|||||||
|
|
||||||
private const USER_ENABLE_LATELY = "user_enable_lately:%s";
|
private const USER_ENABLE_LATELY = "user_enable_lately:%s";
|
||||||
|
|
||||||
|
public function getConnectionName()
|
||||||
|
{
|
||||||
|
return NexusDB::getConnectionName();
|
||||||
|
}
|
||||||
|
|
||||||
public static function getUserEnableLatelyCacheKey(int $userId): string
|
public static function getUserEnableLatelyCacheKey(int $userId): string
|
||||||
{
|
{
|
||||||
return sprintf(self::USER_ENABLE_LATELY, $userId);
|
return sprintf(self::USER_ENABLE_LATELY, $userId);
|
||||||
@@ -369,7 +372,6 @@ class User extends Authenticatable implements FilamentUser, HasName
|
|||||||
{
|
{
|
||||||
return $query->where('donor', 'yes')->where(function (Builder $query) {
|
return $query->where('donor', 'yes')->where(function (Builder $query) {
|
||||||
return $query->whereNull('donoruntil')
|
return $query->whereNull('donoruntil')
|
||||||
->orWhere('donoruntil', '0000-00-00 00:00:00')
|
|
||||||
->orWhere('donoruntil', '>=', now());
|
->orWhere('donoruntil', '>=', now());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ class UserBanLog extends NexusModel
|
|||||||
|
|
||||||
protected $fillable = ['uid', 'username', 'operator', 'reason'];
|
protected $fillable = ['uid', 'username', 'operator', 'reason'];
|
||||||
|
|
||||||
|
public $timestamps = true;
|
||||||
|
|
||||||
public static function clearUserBanLogDuplicate()
|
public static function clearUserBanLogDuplicate()
|
||||||
{
|
{
|
||||||
$lists = UserBanLog::query()
|
$lists = UserBanLog::query()
|
||||||
|
|||||||
@@ -244,8 +244,8 @@ class AttendanceRepository extends BaseRepository
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
"insert into `%s` (`uid`, `points`, `date`) values %s on duplicate key update `uid` = values(`uid`)",
|
'insert into %s (uid, points, "date") values %s %s',
|
||||||
$table, implode(',', $insert)
|
$table, implode(',', $insert), NexusDB::upsertField(['uid'], ['uid'])
|
||||||
);
|
);
|
||||||
NexusDB::statement($sql);
|
NexusDB::statement($sql);
|
||||||
$insertCount = count($insert);
|
$insertCount = count($insert);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class BaseRepository
|
|||||||
return $perPage;
|
return $perPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function handleAnonymous($username, $user, User $authenticator, Torrent $torrent = null)
|
protected function handleAnonymous($username, $user, User $authenticator, ?Torrent $torrent = null)
|
||||||
{
|
{
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -47,10 +47,11 @@ class DashboardRepository extends BaseRepository
|
|||||||
'value' => PHP_VERSION,
|
'value' => PHP_VERSION,
|
||||||
];
|
];
|
||||||
$name = 'mysql_version';
|
$name = 'mysql_version';
|
||||||
|
$databaseInfo = NexusDB::getDatabaseVersionInfo();
|
||||||
$result[$name] = [
|
$result[$name] = [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'text' => nexus_trans("dashboard.system_info.$name"),
|
'text' => nexus_trans("dashboard.system_info.$name"),
|
||||||
'value' => NexusDB::select('select version() as info')[0]['info'],
|
'value' => sprintf("%s: %s", $databaseInfo['dbType'], $databaseInfo['version']),
|
||||||
];
|
];
|
||||||
// $name = 'os';
|
// $name = 'os';
|
||||||
// $result[$name] = [
|
// $result[$name] = [
|
||||||
|
|||||||
@@ -269,8 +269,12 @@ class ExamRepository extends BaseRepository
|
|||||||
$now = Carbon::now();
|
$now = Carbon::now();
|
||||||
$query = Exam::query()
|
$query = Exam::query()
|
||||||
->where('status', Exam::STATUS_ENABLED)
|
->where('status', Exam::STATUS_ENABLED)
|
||||||
->whereRaw("if(begin is not null and end is not null, begin <= '$now' and end >= '$now', duration > 0 or recurring is not null)")
|
->whereRaw('
|
||||||
;
|
CASE
|
||||||
|
WHEN begin IS NOT NULL AND "end" IS NOT NULL
|
||||||
|
THEN begin <= ? AND "end" >= ?
|
||||||
|
ELSE duration > 0 OR recurring IS NOT NULL
|
||||||
|
END', [$now, $now]);
|
||||||
|
|
||||||
if (!is_null($excludeId)) {
|
if (!is_null($excludeId)) {
|
||||||
$query->whereNotIn('id', Arr::wrap($excludeId));
|
$query->whereNotIn('id', Arr::wrap($excludeId));
|
||||||
@@ -1045,13 +1049,13 @@ class ExamRepository extends BaseRepository
|
|||||||
if ($donateStatus == User::DONATE_YES) {
|
if ($donateStatus == User::DONATE_YES) {
|
||||||
$baseQuery->where(function (Builder $query) {
|
$baseQuery->where(function (Builder $query) {
|
||||||
$query->where('donor', 'yes')->where(function (Builder $query) {
|
$query->where('donor', 'yes')->where(function (Builder $query) {
|
||||||
$query->where('donoruntil', '0000-00-00 00:00:00')->orWhereNull('donoruntil')->orWhere('donoruntil', '>=', Carbon::now());
|
$query->whereNull('donoruntil')->orWhere('donoruntil', '>=', Carbon::now());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} elseif ($donateStatus == User::DONATE_NO) {
|
} elseif ($donateStatus == User::DONATE_NO) {
|
||||||
$baseQuery->where(function (Builder $query) {
|
$baseQuery->where(function (Builder $query) {
|
||||||
$query->where('donor', 'no')->orWhere(function (Builder $query) {
|
$query->where('donor', 'no')->orWhere(function (Builder $query) {
|
||||||
$query->where('donoruntil', '!=','0000-00-00 00:00:00')->whereNotNull('donoruntil')->where('donoruntil', '<', Carbon::now());
|
$query->whereNotNull('donoruntil')->where('donoruntil', '<', Carbon::now());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -1139,10 +1143,22 @@ class ExamRepository extends BaseRepository
|
|||||||
->orderBy("$examUserTable.id", "asc");
|
->orderBy("$examUserTable.id", "asc");
|
||||||
if (!$ignoreTimeRange) {
|
if (!$ignoreTimeRange) {
|
||||||
$whenThens = [];
|
$whenThens = [];
|
||||||
$whenThens[] = "when $examUserTable.`end` is not null then $examUserTable.`end` < '$now'";
|
$params = [];
|
||||||
$whenThens[] = "when $examTable.`end` is not null then $examTable.`end` < '$now'";
|
|
||||||
$whenThens[] = "when $examTable.duration > 0 then date_add($examUserTable.created_at, interval $examTable.duration day) < '$now'";
|
$whenThens[] = "WHEN $examUserTable.\"end\" IS NOT NULL THEN $examUserTable.\"end\" < ?";
|
||||||
$baseQuery->whereRaw(sprintf("case %s else false end", implode(" ", $whenThens)));
|
$params[] = $now;
|
||||||
|
|
||||||
|
$whenThens[] = "WHEN $examTable.\"end\" IS NOT NULL THEN $examTable.\"end\" < ?";
|
||||||
|
$params[] = $now;
|
||||||
|
|
||||||
|
if (NexusDB::isMysql()) {
|
||||||
|
$whenThens[] = "when $examTable.duration > 0 then date_add($examUserTable.created_at, interval $examTable.duration day) < ?";
|
||||||
|
} elseif (NexusDB::isPgsql()) {
|
||||||
|
$whenThens[] = "WHEN $examTable.duration > 0 THEN ($examUserTable.created_at + ($examTable.duration || ' day')::INTERVAL) < ?";
|
||||||
|
}
|
||||||
|
$params[] = $now;
|
||||||
|
|
||||||
|
$baseQuery->whereRaw(sprintf("CASE %s ELSE false END", implode(" ", $whenThens)), $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
$size = 1000;
|
$size = 1000;
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ class HitAndRunRepository extends BaseRepository
|
|||||||
->selectRaw("count(*) as counts, uid")
|
->selectRaw("count(*) as counts, uid")
|
||||||
->where('status', HitAndRun::STATUS_UNREACHED)
|
->where('status', HitAndRun::STATUS_UNREACHED)
|
||||||
->groupBy('uid')
|
->groupBy('uid')
|
||||||
->having("counts", '>=', $disableCounts)
|
->havingRaw("count(*) >= $disableCounts")
|
||||||
;
|
;
|
||||||
if ($setting['diff_in_section']) {
|
if ($setting['diff_in_section']) {
|
||||||
$query->whereHas('torrent.basic_category', function (Builder $query) use ($setting) {
|
$query->whereHas('torrent.basic_category', function (Builder $query) use ($setting) {
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ class SeedBoxRepository extends BaseRepository
|
|||||||
$size = 1000;
|
$size = 1000;
|
||||||
$page = 1;
|
$page = 1;
|
||||||
$logPrefix = "isAllowed: $isAllowed->name, field: $field->name, page: $page, size: $size";
|
$logPrefix = "isAllowed: $isAllowed->name, field: $field->name, page: $page, size: $size";
|
||||||
$selectRaw = sprintf("uid, group_concat(%s) as str", $field == IpAsnEnum::ASN ? 'asn' : 'ip');
|
$selectRaw = sprintf("uid, %s as str", NexusDB::groupConcatField($field == IpAsnEnum::ASN ? 'asn' : 'ip'));
|
||||||
while (true) {
|
while (true) {
|
||||||
$list = SeedBoxRecord::getValidQuery(TypeEnum::USER, $isAllowed, $field)
|
$list = SeedBoxRecord::getValidQuery(TypeEnum::USER, $isAllowed, $field)
|
||||||
->selectRaw($selectRaw)
|
->selectRaw($selectRaw)
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ class SettingRepository extends BaseRepository
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
$sql = sprintf(
|
$sql = sprintf(
|
||||||
"insert into `%s` (`name`, `value`) values %s on duplicate key update `value` = values(`value`)",
|
'insert into %s (name, "value") values %s %s',
|
||||||
$settingModel->getTable(), implode(', ', $values)
|
$settingModel->getTable(), implode(', ', $values), NexusDB::upsertField(['name'], ['value'])
|
||||||
);
|
);
|
||||||
$result = DB::insert($sql);
|
$result = DB::insert($sql);
|
||||||
do_log("sql: $sql, result: $result");
|
do_log("sql: $sql, result: $result");
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ class TagRepository extends BaseRepository
|
|||||||
}
|
}
|
||||||
$page++;
|
$page++;
|
||||||
}
|
}
|
||||||
$sql .= sprintf("%s on duplicate key update updated_at = values(updated_at)", implode(', ', $values));
|
$sql .= sprintf("%s %s", implode(', ', $values), NexusDB::upsertField(['torrent_id', 'tag_id'], ['updated_at']));
|
||||||
do_log("migrate sql: $sql");
|
do_log("migrate sql: $sql");
|
||||||
NexusDB::statement($sql);
|
NexusDB::statement($sql);
|
||||||
do_log("[MIGRATE_TORRENT_TAG] done!");
|
do_log("[MIGRATE_TORRENT_TAG] done!");
|
||||||
|
|||||||
@@ -511,8 +511,9 @@ class ToolRepository extends BaseRepository
|
|||||||
$stickyPromotionExists = NexusDB::hasTable($stickyPromotionParticipatorsTable);
|
$stickyPromotionExists = NexusDB::hasTable($stickyPromotionParticipatorsTable);
|
||||||
$claimTableExists = NexusDB::hasTable($claimTable);
|
$claimTableExists = NexusDB::hasTable($claimTable);
|
||||||
$hitAndRunTableExists = NexusDB::hasTable($hitAndRunTable);
|
$hitAndRunTableExists = NexusDB::hasTable($hitAndRunTable);
|
||||||
|
$idsField = NexusDB::groupConcatField('id');
|
||||||
while (true) {
|
while (true) {
|
||||||
$snatchRes = NexusDB::select("select userid, torrentid, group_concat(id) as ids from snatched group by userid, torrentid having(count(*)) > 1 limit $size");
|
$snatchRes = NexusDB::select("select userid, torrentid, $idsField as ids from snatched group by userid, torrentid having(count(*)) > 1 limit $size");
|
||||||
if (empty($snatchRes)) {
|
if (empty($snatchRes)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -542,8 +543,9 @@ class ToolRepository extends BaseRepository
|
|||||||
public function removeDuplicatePeer()
|
public function removeDuplicatePeer()
|
||||||
{
|
{
|
||||||
$size = 2000;
|
$size = 2000;
|
||||||
|
$idsField = NexusDB::groupConcatField('id');
|
||||||
while (true) {
|
while (true) {
|
||||||
$results = NexusDB::select("select torrent, userid, group_concat(id) as ids from peers group by torrent, peer_id, userid having(count(*)) > 1 limit $size");
|
$results = NexusDB::select("select torrent, userid, $idsField as ids from peers group by torrent, peer_id, userid having(count(*)) > 1 limit $size");
|
||||||
if (empty($results)) {
|
if (empty($results)) {
|
||||||
do_log("[DELETE_DUPLICATED_PEERS], no data: ". last_query());
|
do_log("[DELETE_DUPLICATED_PEERS], no data: ". last_query());
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -749,7 +749,7 @@ class TorrentRepository extends BaseRepository
|
|||||||
$values[] = sprintf("(%s, %s, '%s', '%s')", $torrentId, $tagId, $time, $time);
|
$values[] = sprintf("(%s, %s, '%s', '%s')", $torrentId, $tagId, $time, $time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$sql .= implode(', ', $values) . " on duplicate key update updated_at = values(updated_at)";
|
$sql .= implode(', ', $values) . " " . NexusDB::upsertField(['torrent_id', 'tag_id'], ['updated_at']);
|
||||||
if ($remove) {
|
if ($remove) {
|
||||||
TorrentTag::query()->whereIn('torrent_id', $idArr)->delete();
|
TorrentTag::query()->whereIn('torrent_id', $idArr)->delete();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ class UserPasskeyRepository extends BaseRepository
|
|||||||
<td>
|
<td>
|
||||||
<div style="display:flex;align-items:center;padding:4px">
|
<div style="display:flex;align-items:center;padding:4px">
|
||||||
<?php
|
<?php
|
||||||
$meta = $AAGUIDS[$passkey->AAGUID()];
|
$meta = $AAGUIDS[$passkey->getAaguidFormatted()];
|
||||||
if (isset($meta)) {
|
if (isset($meta)) {
|
||||||
printf('<img style="width: 32px" src="%s" alt="%s" /><div style="margin-right:4px"><b>%s</b> (%s)', $meta['icon_dark'], $meta['name'], $meta['name'], $passkey->credential_id);
|
printf('<img style="width: 32px" src="%s" alt="%s" /><div style="margin-right:4px"><b>%s</b> (%s)', $meta['icon_dark'], $meta['name'], $meta['name'], $passkey->credential_id);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
namespace App\Repositories;
|
namespace App\Repositories;
|
||||||
|
|
||||||
use App\Enums\ModelEventEnum;
|
use App\Enums\ModelEventEnum;
|
||||||
use App\Enums\RedisKeysEnum;
|
|
||||||
use App\Exceptions\InsufficientPermissionException;
|
use App\Exceptions\InsufficientPermissionException;
|
||||||
use App\Exceptions\NexusException;
|
use App\Exceptions\NexusException;
|
||||||
use App\Http\Resources\ExamUserResource;
|
use App\Http\Resources\ExamUserResource;
|
||||||
@@ -29,7 +28,6 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Facades\Gate;
|
use Illuminate\Support\Facades\Gate;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Nexus\Database\NexusDB;
|
use Nexus\Database\NexusDB;
|
||||||
@@ -228,9 +226,9 @@ class UserRepository extends BaseRepository
|
|||||||
'operator' => $operator->id,
|
'operator' => $operator->id,
|
||||||
];
|
];
|
||||||
$modCommentText = sprintf("%s - Disable by %s, reason: %s.", now()->format('Y-m-d'), $operator->username, $reason);
|
$modCommentText = sprintf("%s - Disable by %s, reason: %s.", now()->format('Y-m-d'), $operator->username, $reason);
|
||||||
DB::transaction(function () use ($targetUser, $banLog, $modCommentText) {
|
NexusDB::transaction(function () use ($targetUser, $banLog, $modCommentText) {
|
||||||
$targetUser->updateWithModComment(['enabled' => User::ENABLED_NO], $modCommentText);
|
$targetUser->updateWithModComment(['enabled' => User::ENABLED_NO], $modCommentText);
|
||||||
UserBanLog::query()->insert($banLog);
|
UserBanLog::query()->create($banLog);
|
||||||
});
|
});
|
||||||
do_log("user: $uid, $modCommentText");
|
do_log("user: $uid, $modCommentText");
|
||||||
$this->clearCache($targetUser);
|
$this->clearCache($targetUser);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Services\Captcha\Drivers;
|
namespace App\Services\Captcha\Drivers;
|
||||||
|
|
||||||
|
use App\Models\RegImage;
|
||||||
use App\Services\Captcha\CaptchaDriverInterface;
|
use App\Services\Captcha\CaptchaDriverInterface;
|
||||||
use App\Services\Captcha\Exceptions\CaptchaValidationException;
|
use App\Services\Captcha\Exceptions\CaptchaValidationException;
|
||||||
|
|
||||||
@@ -67,16 +68,11 @@ class ImageCaptchaDriver implements CaptchaDriverInterface
|
|||||||
$random = random_str();
|
$random = random_str();
|
||||||
$imagehash = md5($random);
|
$imagehash = md5($random);
|
||||||
$dateline = time();
|
$dateline = time();
|
||||||
|
RegImage::query()->insert([
|
||||||
$sql = sprintf(
|
'imagehash' => $imagehash,
|
||||||
"INSERT INTO `regimages` (`imagehash`, `imagestring`, `dateline`) VALUES ('%s', '%s', '%s')",
|
'dateline' => $dateline,
|
||||||
mysql_real_escape_string($imagehash),
|
'imagestring' => $random,
|
||||||
mysql_real_escape_string($random),
|
]);
|
||||||
mysql_real_escape_string((string) $dateline)
|
|
||||||
);
|
|
||||||
|
|
||||||
sql_query($sql);
|
|
||||||
|
|
||||||
return $imagehash;
|
return $imagehash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -35,6 +35,7 @@
|
|||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"ext-zend-opcache": "*",
|
"ext-zend-opcache": "*",
|
||||||
"ext-zip": "*",
|
"ext-zip": "*",
|
||||||
|
"ext-pdo": "*",
|
||||||
"calebporzio/sushi": "^2.5",
|
"calebporzio/sushi": "^2.5",
|
||||||
"cybercog/laravel-clickhouse": "dev-master",
|
"cybercog/laravel-clickhouse": "dev-master",
|
||||||
"elasticsearch/elasticsearch": "^7.16",
|
"elasticsearch/elasticsearch": "^7.16",
|
||||||
@@ -87,7 +88,8 @@
|
|||||||
"@php artisan key:generate --ansi"
|
"@php artisan key:generate --ansi"
|
||||||
],
|
],
|
||||||
"post-update-cmd": [
|
"post-update-cmd": [
|
||||||
"@php artisan filament:upgrade"
|
"@php artisan filament:upgrade",
|
||||||
|
"@php artisan livewire:publish --assets"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
|
|||||||
+1
-1
@@ -74,7 +74,7 @@ return [
|
|||||||
'charset' => 'utf8',
|
'charset' => 'utf8',
|
||||||
'prefix' => '',
|
'prefix' => '',
|
||||||
'prefix_indexes' => true,
|
'prefix_indexes' => true,
|
||||||
'schema' => 'public',
|
'schema' => env('DB_SCHEMA', 'public'),
|
||||||
'sslmode' => 'prefer',
|
'sslmode' => 'prefer',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,45 @@ return [
|
|||||||
|
|
||||||
'log_split' => nexus_env('LOG_SPLIT', 'daily'),
|
'log_split' => nexus_env('LOG_SPLIT', 'daily'),
|
||||||
|
|
||||||
|
'database' => [
|
||||||
|
'default' => nexus_env('DB_CONNECTION', 'mysql'),
|
||||||
|
'connections' => [
|
||||||
|
'mysql' => [
|
||||||
|
'driver' => 'mysql',
|
||||||
|
'url' => nexus_env('DATABASE_URL'),
|
||||||
|
'host' => nexus_env('DB_HOST', '127.0.0.1'),
|
||||||
|
'port' => (int)nexus_env('DB_PORT', 3306),
|
||||||
|
'username' => nexus_env('DB_USERNAME', 'root'),
|
||||||
|
'password' => nexus_env('DB_PASSWORD', ''),
|
||||||
|
'database' => nexus_env('DB_DATABASE', 'nexusphp'),
|
||||||
|
'unix_socket' => nexus_env('DB_SOCKET', ''),
|
||||||
|
'charset' => 'utf8mb4',
|
||||||
|
'collation' => 'utf8mb4_unicode_ci',
|
||||||
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
|
'strict' => false,
|
||||||
|
'engine' => null,
|
||||||
|
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||||
|
PDO::MYSQL_ATTR_SSL_CA => nexus_env('MYSQL_ATTR_SSL_CA'),
|
||||||
|
]) : [],
|
||||||
|
],
|
||||||
|
'pgsql' => [
|
||||||
|
'driver' => 'pgsql',
|
||||||
|
'url' => nexus_env('DATABASE_URL'),
|
||||||
|
'host' => nexus_env('DB_HOST', '127.0.0.1'),
|
||||||
|
'port' => nexus_env('DB_PORT', '5432'),
|
||||||
|
'database' => nexus_env('DB_DATABASE', 'nexusphp'),
|
||||||
|
'username' => nexus_env('DB_USERNAME', 'nexusphp'),
|
||||||
|
'password' => nexus_env('DB_PASSWORD', ''),
|
||||||
|
'charset' => 'utf8',
|
||||||
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
|
'schema' => nexus_env('DB_SCHEMA', 'public'),
|
||||||
|
'sslmode' => 'prefer',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
'mysql' => [
|
'mysql' => [
|
||||||
'driver' => 'mysql',
|
'driver' => 'mysql',
|
||||||
'url' => nexus_env('DATABASE_URL'),
|
'url' => nexus_env('DATABASE_URL'),
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return new class extends Migration
|
|||||||
$table->unsignedBigInteger('user_id')->index();
|
$table->unsignedBigInteger('user_id')->index();
|
||||||
$table->unsignedBigInteger('client_id');
|
$table->unsignedBigInteger('client_id');
|
||||||
$table->text('scopes')->nullable();
|
$table->text('scopes')->nullable();
|
||||||
$table->boolean('revoked');
|
$table->smallInteger('revoked');
|
||||||
$table->dateTime('expires_at')->nullable();
|
$table->dateTime('expires_at')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ return new class extends Migration
|
|||||||
$table->unsignedBigInteger('client_id');
|
$table->unsignedBigInteger('client_id');
|
||||||
$table->string('name')->nullable();
|
$table->string('name')->nullable();
|
||||||
$table->text('scopes')->nullable();
|
$table->text('scopes')->nullable();
|
||||||
$table->boolean('revoked');
|
$table->smallInteger('revoked');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
$table->dateTime('expires_at')->nullable();
|
$table->dateTime('expires_at')->nullable();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
Schema::create('oauth_refresh_tokens', function (Blueprint $table) {
|
Schema::create('oauth_refresh_tokens', function (Blueprint $table) {
|
||||||
$table->string('id', 100)->primary();
|
$table->string('id', 100)->primary();
|
||||||
$table->string('access_token_id', 100)->index();
|
$table->string('access_token_id', 100)->index();
|
||||||
$table->boolean('revoked');
|
$table->smallInteger('revoked');
|
||||||
$table->dateTime('expires_at')->nullable();
|
$table->dateTime('expires_at')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ return new class extends Migration
|
|||||||
$table->string('secret', 100)->nullable();
|
$table->string('secret', 100)->nullable();
|
||||||
$table->string('provider')->nullable();
|
$table->string('provider')->nullable();
|
||||||
$table->text('redirect');
|
$table->text('redirect');
|
||||||
$table->boolean('personal_access_client');
|
$table->smallInteger('personal_access_client');
|
||||||
$table->boolean('password_client');
|
$table->smallInteger('password_client');
|
||||||
$table->boolean('revoked');
|
$table->smallInteger('revoked');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateAdvertisementsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('advertisements', function (Blueprint $table) {
|
Schema::create('advertisements', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->boolean('enabled')->default(0);
|
$table->smallInteger('enabled')->default(0);
|
||||||
$table->enum('type', ['bbcodes', 'xhtml', 'text', 'image', 'flash']);
|
$table->enum('type', ['bbcodes', 'xhtml', 'text', 'image', 'flash']);
|
||||||
$table->enum('position', ['header', 'footer', 'belownav', 'belowsearchbox', 'torrentdetail', 'comment', 'interoverforums', 'forumpost', 'popup']);
|
$table->enum('position', ['header', 'footer', 'belownav', 'belowsearchbox', 'torrentdetail', 'comment', 'interoverforums', 'forumpost', 'popup']);
|
||||||
$table->tinyInteger('displayorder')->default(0);
|
$table->tinyInteger('displayorder')->default(0);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ class CreateAgentAllowedExceptionTable extends Migration
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Schema::create('agent_allowed_exception', function (Blueprint $table) {
|
Schema::create('agent_allowed_exception', function (Blueprint $table) {
|
||||||
$table->unsignedTinyInteger('family_id')->default(0)->index('family_id');
|
$table->unsignedTinyInteger('family_id')->default(0)->index();
|
||||||
$table->string('name', 100)->default('');
|
$table->string('name', 100)->default('');
|
||||||
$table->string('peer_id', 20)->default('');
|
$table->string('peer_id', 20)->default('');
|
||||||
$table->string('agent', 100)->default('');
|
$table->string('agent', 100)->default('');
|
||||||
|
|||||||
@@ -22,15 +22,15 @@ class CreateAttachmentsTable extends Migration
|
|||||||
$table->unsignedSmallInteger('width')->default(0);
|
$table->unsignedSmallInteger('width')->default(0);
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
$table->string('filename')->default('');
|
$table->string('filename')->default('');
|
||||||
$table->char('dlkey', 32)->index('idx_delkey');
|
$table->char('dlkey', 32)->index();
|
||||||
$table->string('filetype', 50)->default('');
|
$table->string('filetype', 50)->default('');
|
||||||
$table->unsignedBigInteger('filesize')->default(0);
|
$table->unsignedBigInteger('filesize')->default(0);
|
||||||
$table->string('location')->default('');
|
$table->string('location')->default('');
|
||||||
$table->mediumInteger('downloads')->default(0);
|
$table->mediumInteger('downloads')->default(0);
|
||||||
$table->boolean('isimage')->unsigned()->default(0);
|
$table->smallInteger('isimage')->unsigned()->default(0);
|
||||||
$table->boolean('thumb')->unsigned()->default(0);
|
$table->smallInteger('thumb')->unsigned()->default(0);
|
||||||
$table->index(['userid', 'id'], 'pid');
|
$table->index(['userid', 'id'], 'pid');
|
||||||
$table->index(['added', 'isimage', 'downloads'], 'dateline');
|
$table->index(['added', 'isimage', 'downloads'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateAttendanceTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('attendance', function (Blueprint $table) {
|
Schema::create('attendance', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->unsignedInteger('uid')->default(0)->index('idx_uid');
|
$table->unsignedInteger('uid')->default(0)->index();
|
||||||
$table->dateTime('added')->index();
|
$table->dateTime('added')->index();
|
||||||
$table->unsignedInteger('points')->default(0);
|
$table->unsignedInteger('points')->default(0);
|
||||||
$table->unsignedInteger('days')->default(1);
|
$table->unsignedInteger('days')->default(1);
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class CreateBansTable extends Migration
|
|||||||
$table->string('comment')->default('');
|
$table->string('comment')->default('');
|
||||||
$table->bigInteger('first')->default(0);
|
$table->bigInteger('first')->default(0);
|
||||||
$table->bigInteger('last')->default(0);
|
$table->bigInteger('last')->default(0);
|
||||||
$table->index(['first', 'last'], 'first_last');
|
$table->index(['first', 'last'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class CreateBlocksTable extends Migration
|
|||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->unsignedMediumInteger('blockid')->default(0);
|
$table->unsignedMediumInteger('blockid')->default(0);
|
||||||
$table->unique(['userid', 'blockid'], 'userfriend');
|
$table->unique(['userid', 'blockid'],);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class CreateBookmarksTable extends Migration
|
|||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('torrentid')->default(0);
|
$table->unsignedMediumInteger('torrentid')->default(0);
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->index(['userid', 'torrentid'], 'userid_torrentid');
|
$table->index(['userid', 'torrentid'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CreateCategoriesTable extends Migration
|
|||||||
$table->string('image')->default('');
|
$table->string('image')->default('');
|
||||||
$table->unsignedSmallInteger('sort_index')->default(0);
|
$table->unsignedSmallInteger('sort_index')->default(0);
|
||||||
$table->integer('icon_id')->default(0);
|
$table->integer('icon_id')->default(0);
|
||||||
$table->index(['mode', 'sort_index'], 'mode_sort');
|
$table->index(['mode', 'sort_index'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class CreateCheatersTable extends Migration
|
|||||||
$table->unsignedMediumInteger('leechers')->default(0);
|
$table->unsignedMediumInteger('leechers')->default(0);
|
||||||
$table->unsignedTinyInteger('hit')->default(0);
|
$table->unsignedTinyInteger('hit')->default(0);
|
||||||
$table->unsignedMediumInteger('dealtby')->default(0);
|
$table->unsignedMediumInteger('dealtby')->default(0);
|
||||||
$table->boolean('dealtwith')->default(0);
|
$table->smallInteger('dealtwith')->default(0);
|
||||||
$table->string('comment')->default('');
|
$table->string('comment')->default('');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateChronicleTable extends Migration
|
|||||||
Schema::create('chronicle', function (Blueprint $table) {
|
Schema::create('chronicle', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->dateTime('added')->nullable()->index('added');
|
$table->dateTime('added')->nullable()->index();
|
||||||
$table->text('txt')->nullable();
|
$table->text('txt')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateCommentsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('comments', function (Blueprint $table) {
|
Schema::create('comments', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('user')->default(0)->index('user');
|
$table->unsignedMediumInteger('user')->default(0)->index();
|
||||||
$table->unsignedMediumInteger('torrent')->default(0);
|
$table->unsignedMediumInteger('torrent')->default(0);
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
$table->text('text')->nullable();
|
$table->text('text')->nullable();
|
||||||
@@ -28,8 +28,8 @@ class CreateCommentsTable extends Migration
|
|||||||
$table->unsignedMediumInteger('offer')->default(0);
|
$table->unsignedMediumInteger('offer')->default(0);
|
||||||
$table->integer('request')->default(0);
|
$table->integer('request')->default(0);
|
||||||
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
||||||
$table->index(['torrent', 'id'], 'torrent_id');
|
$table->index(['torrent', 'id'], );
|
||||||
$table->index(['offer', 'id'], 'offer_id');
|
$table->index(['offer', 'id'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateFilesTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('files', function (Blueprint $table) {
|
Schema::create('files', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('torrent')->default(0)->index('torrent');
|
$table->unsignedMediumInteger('torrent')->default(0)->index();
|
||||||
$table->string('filename')->default('');
|
$table->string('filename')->default('');
|
||||||
$table->unsignedBigInteger('size')->default(0);
|
$table->unsignedBigInteger('size')->default(0);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateForummodsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('forummods', function (Blueprint $table) {
|
Schema::create('forummods', function (Blueprint $table) {
|
||||||
$table->smallIncrements('id');
|
$table->smallIncrements('id');
|
||||||
$table->unsignedSmallInteger('forumid')->default(0)->index('forumid');
|
$table->unsignedSmallInteger('forumid')->default(0)->index();
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class CreateFriendsTable extends Migration
|
|||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->unsignedMediumInteger('friendid')->default(0);
|
$table->unsignedMediumInteger('friendid')->default(0);
|
||||||
$table->unique(['userid', 'friendid'], 'userfriend');
|
$table->unique(['userid', 'friendid']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class CreateInvitesTable extends Migration
|
|||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('inviter')->default(0);
|
$table->unsignedMediumInteger('inviter')->default(0);
|
||||||
$table->string('invitee', 80)->default('');
|
$table->string('invitee', 80)->default('');
|
||||||
$table->char('hash', 32)->index('hash');
|
$table->char('hash', 32)->index();
|
||||||
$table->dateTime('time_invited')->nullable();
|
$table->dateTime('time_invited')->nullable();
|
||||||
$table->tinyInteger('valid')->default(1);
|
$table->tinyInteger('valid')->default(1);
|
||||||
$table->integer('invitee_register_uid')->nullable();
|
$table->integer('invitee_register_uid')->nullable();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateIplogTable extends Migration
|
|||||||
Schema::create('iplog', function (Blueprint $table) {
|
Schema::create('iplog', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->string('ip', 64)->default('');
|
$table->string('ip', 64)->default('');
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->dateTime('access')->nullable();
|
$table->dateTime('access')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateMagicTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('magic', function (Blueprint $table) {
|
Schema::create('magic', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->integer('torrentid')->default(0)->index('idx_torrentid');
|
$table->integer('torrentid')->default(0)->index();
|
||||||
$table->integer('userid')->default(0)->index('idx_userid');
|
$table->integer('userid')->default(0)->index();
|
||||||
$table->integer('value')->default(0);
|
$table->integer('value')->default(0);
|
||||||
$table->timestamp('created_at')->useCurrent();
|
$table->timestamp('created_at')->useCurrent();
|
||||||
$table->timestamp('updated_at')->useCurrent();
|
$table->timestamp('updated_at')->useCurrent();
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateMessagesTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('messages', function (Blueprint $table) {
|
Schema::create('messages', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('sender')->default(0)->index('sender');
|
$table->unsignedMediumInteger('sender')->default(0)->index();
|
||||||
$table->unsignedMediumInteger('receiver')->default(0)->index('receiver');
|
$table->unsignedMediumInteger('receiver')->default(0)->index();
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
$table->string('subject', 128)->default('');
|
$table->string('subject', 128)->default('');
|
||||||
$table->text('msg')->nullable();
|
$table->text('msg')->nullable();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateNewsTable extends Migration
|
|||||||
Schema::create('news', function (Blueprint $table) {
|
Schema::create('news', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->dateTime('added')->nullable()->index('added');
|
$table->dateTime('added')->nullable()->index();
|
||||||
$table->text('body')->nullable();
|
$table->text('body')->nullable();
|
||||||
$table->string('title')->default('');
|
$table->string('title')->default('');
|
||||||
$table->enum('notify', ['yes', 'no'])->default('no');
|
$table->enum('notify', ['yes', 'no'])->default('no');
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateOffersTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('offers', function (Blueprint $table) {
|
Schema::create('offers', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->string('name', 225)->default('');
|
$table->string('name', 225)->default('');
|
||||||
$table->text('descr')->nullable();
|
$table->text('descr')->nullable();
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateOffervotesTable extends Migration
|
|||||||
Schema::create('offervotes', function (Blueprint $table) {
|
Schema::create('offervotes', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('offerid')->default(0);
|
$table->unsignedMediumInteger('offerid')->default(0);
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->enum('vote', ['yeah', 'against'])->default('yeah');
|
$table->enum('vote', ['yeah', 'against'])->default('yeah');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreatePeersTable extends Migration
|
|||||||
Schema::create('peers', function (Blueprint $table) {
|
Schema::create('peers', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id');
|
$table->bigIncrements('id');
|
||||||
$table->unsignedMediumInteger('torrent')->default(0);
|
$table->unsignedMediumInteger('torrent')->default(0);
|
||||||
$table->char('peer_id', 20)->charset('binary')->index();
|
$table->binary('peer_id', 20)->index();
|
||||||
$table->string('ip', 64)->default('');
|
$table->string('ip', 64)->default('');
|
||||||
$table->unsignedSmallInteger('port')->default(0);
|
$table->unsignedSmallInteger('port')->default(0);
|
||||||
$table->unsignedBigInteger('uploaded')->default(0);
|
$table->unsignedBigInteger('uploaded')->default(0);
|
||||||
@@ -36,7 +36,7 @@ class CreatePeersTable extends Migration
|
|||||||
$table->unsignedBigInteger('downloadoffset')->default(0);
|
$table->unsignedBigInteger('downloadoffset')->default(0);
|
||||||
$table->unsignedBigInteger('uploadoffset')->default(0);
|
$table->unsignedBigInteger('uploadoffset')->default(0);
|
||||||
$table->char('passkey', 32)->default('');
|
$table->char('passkey', 32)->default('');
|
||||||
$table->unique(['torrent', 'peer_id']);
|
$table->unique(['torrent', 'peer_id', 'userid']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class CreatePollanswersTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('pollanswers', function (Blueprint $table) {
|
Schema::create('pollanswers', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('pollid')->default(0)->index('pollid');
|
$table->unsignedMediumInteger('pollid')->default(0)->index();
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->unsignedTinyInteger('selection')->default(0)->index('selection');
|
$table->unsignedTinyInteger('selection')->default(0)->index();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,15 +19,14 @@ class CreatePostsTable extends Migration
|
|||||||
Schema::create('posts', function (Blueprint $table) {
|
Schema::create('posts', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('topicid')->default(0);
|
$table->unsignedMediumInteger('topicid')->default(0);
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->dateTime('added')->nullable()->index('added');
|
$table->dateTime('added')->nullable()->index();
|
||||||
$table->text('body')->nullable();
|
$table->text('body')->nullable();
|
||||||
$table->text('ori_body')->nullable();
|
$table->text('ori_body')->nullable();
|
||||||
$table->unsignedMediumInteger('editedby')->default(0);
|
$table->unsignedMediumInteger('editedby')->default(0);
|
||||||
$table->dateTime('editdate')->nullable();
|
$table->dateTime('editdate')->nullable();
|
||||||
$table->index(['topicid', 'id'], 'topicid_id');
|
$table->index(['topicid', 'id']);
|
||||||
});
|
});
|
||||||
\Illuminate\Support\Facades\DB::statement('alter table posts add fulltext body(body)');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateReadpostsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('readposts', function (Blueprint $table) {
|
Schema::create('readposts', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->unsignedMediumInteger('topicid')->default(0)->index('topicid');
|
$table->unsignedMediumInteger('topicid')->default(0)->index();
|
||||||
$table->unsignedInteger('lastpostread')->default(0);
|
$table->unsignedInteger('lastpostread')->default(0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CreateReportsTable extends Migration
|
|||||||
$table->enum('type', ['torrent', 'user', 'offer', 'request', 'post', 'comment', 'subtitle'])->default('torrent');
|
$table->enum('type', ['torrent', 'user', 'offer', 'request', 'post', 'comment', 'subtitle'])->default('torrent');
|
||||||
$table->string('reason')->default('');
|
$table->string('reason')->default('');
|
||||||
$table->unsignedMediumInteger('dealtby')->default(0);
|
$table->unsignedMediumInteger('dealtby')->default(0);
|
||||||
$table->boolean('dealtwith')->default(0);
|
$table->smallInteger('dealtwith')->default(0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateRequestsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('requests', function (Blueprint $table) {
|
Schema::create('requests', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->unsignedInteger('userid')->default(0)->index('userid');
|
$table->unsignedInteger('userid')->default(0)->index();
|
||||||
$table->string('request', 225)->default('');
|
$table->string('request', 225)->default('');
|
||||||
$table->text('descr');
|
$table->text('descr');
|
||||||
$table->unsignedInteger('comments')->default(0);
|
$table->unsignedInteger('comments')->default(0);
|
||||||
@@ -31,7 +31,7 @@ class CreateRequestsTable extends Migration
|
|||||||
$table->string('ori_descr')->default('');
|
$table->string('ori_descr')->default('');
|
||||||
$table->integer('ori_amount')->default(0);
|
$table->integer('ori_amount')->default(0);
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
$table->index(['finish', 'userid'], 'finish, userid');
|
$table->index(['finish', 'userid']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateResreqTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('resreq', function (Blueprint $table) {
|
Schema::create('resreq', function (Blueprint $table) {
|
||||||
$table->integer('id', true);
|
$table->integer('id', true);
|
||||||
$table->integer('reqid')->default(0)->index('reqid');
|
$table->integer('reqid')->default(0)->index();
|
||||||
$table->integer('torrentid')->default(0);
|
$table->integer('torrentid')->default(0);
|
||||||
$table->enum('chosen', ['yes', 'no'])->default('no');
|
$table->enum('chosen', ['yes', 'no'])->default('no');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class CreateSearchboxFieldsTable extends Migration
|
|||||||
$table->integer('field_id')->default(0);
|
$table->integer('field_id')->default(0);
|
||||||
$table->timestamp('created_at')->useCurrent();
|
$table->timestamp('created_at')->useCurrent();
|
||||||
$table->timestamp('update_at')->useCurrent();
|
$table->timestamp('update_at')->useCurrent();
|
||||||
$table->unique(['searchbox_id', 'field_type', 'field_id'], 'uniq_searchbox_type_id');
|
$table->unique(['searchbox_id', 'field_type', 'field_id']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ class CreateSearchboxTable extends Migration
|
|||||||
Schema::create('searchbox', function (Blueprint $table) {
|
Schema::create('searchbox', function (Blueprint $table) {
|
||||||
$table->smallIncrements('id');
|
$table->smallIncrements('id');
|
||||||
$table->string('name', 30)->nullable();
|
$table->string('name', 30)->nullable();
|
||||||
$table->boolean('showsubcat')->default(0);
|
$table->smallInteger('showsubcat')->default(0);
|
||||||
$table->boolean('showsource')->default(0);
|
$table->smallInteger('showsource')->default(0);
|
||||||
$table->boolean('showmedium')->default(0);
|
$table->smallInteger('showmedium')->default(0);
|
||||||
$table->boolean('showcodec')->default(0);
|
$table->smallInteger('showcodec')->default(0);
|
||||||
$table->boolean('showstandard')->default(0);
|
$table->smallInteger('showstandard')->default(0);
|
||||||
$table->boolean('showprocessing')->default(0);
|
$table->smallInteger('showprocessing')->default(0);
|
||||||
$table->boolean('showteam')->default(0);
|
$table->smallInteger('showteam')->default(0);
|
||||||
$table->boolean('showaudiocodec')->default(0);
|
$table->smallInteger('showaudiocodec')->default(0);
|
||||||
$table->unsignedSmallInteger('catsperrow')->default(7);
|
$table->unsignedSmallInteger('catsperrow')->default(7);
|
||||||
$table->unsignedSmallInteger('catpadding')->default(25);
|
$table->unsignedSmallInteger('catpadding')->default(25);
|
||||||
$table->text('custom_fields')->nullable();
|
$table->text('custom_fields')->nullable();
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateSettingsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('settings', function (Blueprint $table) {
|
Schema::create('settings', function (Blueprint $table) {
|
||||||
$table->integer('id', true);
|
$table->integer('id', true);
|
||||||
$table->string('name')->default('')->unique('uniqe_name');
|
$table->string('name')->default('')->unique();
|
||||||
$table->mediumText('value')->nullable();
|
$table->mediumText('value')->nullable();
|
||||||
$table->timestamp('created_at')->useCurrent();
|
$table->timestamp('created_at')->useCurrent();
|
||||||
$table->timestamp('updated_at')->useCurrent();
|
$table->timestamp('updated_at')->useCurrent();
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class CreateSitelogTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('sitelog', function (Blueprint $table) {
|
Schema::create('sitelog', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->dateTime('added')->nullable()->index('added');
|
$table->dateTime('added')->nullable()->index();
|
||||||
$table->text('txt');
|
$table->text('txt');
|
||||||
$table->enum('security_level', ['normal', 'mod'])->default('normal');
|
$table->enum('security_level', ['normal', 'mod'])->default('normal');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ class CreateSnatchedTable extends Migration
|
|||||||
Schema::create('snatched', function (Blueprint $table) {
|
Schema::create('snatched', function (Blueprint $table) {
|
||||||
$table->bigIncrements('id', true);
|
$table->bigIncrements('id', true);
|
||||||
$table->unsignedMediumInteger('torrentid')->default(0);
|
$table->unsignedMediumInteger('torrentid')->default(0);
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->string('ip', 64)->default('');
|
$table->string('ip', 64)->default('');
|
||||||
$table->unsignedSmallInteger('port')->default(0);
|
$table->unsignedSmallInteger('port')->default(0);
|
||||||
$table->unsignedBigInteger('uploaded')->default(0);
|
$table->unsignedBigInteger('uploaded')->default(0);
|
||||||
@@ -31,7 +31,7 @@ class CreateSnatchedTable extends Migration
|
|||||||
$table->dateTime('startdat')->nullable();
|
$table->dateTime('startdat')->nullable();
|
||||||
$table->dateTime('completedat')->nullable();
|
$table->dateTime('completedat')->nullable();
|
||||||
$table->enum('finished', ['yes', 'no'])->default('no');
|
$table->enum('finished', ['yes', 'no'])->default('no');
|
||||||
$table->unique(['torrentid', 'userid'], 'torrentid_userid');
|
$table->unique(['torrentid', 'userid']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class CreateStaffmessagesTable extends Migration
|
|||||||
$table->text('msg')->nullable();
|
$table->text('msg')->nullable();
|
||||||
$table->string('subject', 128)->default('');
|
$table->string('subject', 128)->default('');
|
||||||
$table->unsignedMediumInteger('answeredby')->default(0);
|
$table->unsignedMediumInteger('answeredby')->default(0);
|
||||||
$table->boolean('answered')->default(0);
|
$table->smallInteger('answered')->default(0);
|
||||||
$table->text('answer')->nullable();
|
$table->text('answer')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class CreateSubsTable extends Migration
|
|||||||
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
||||||
$table->unsignedMediumInteger('hits')->default(0);
|
$table->unsignedMediumInteger('hits')->default(0);
|
||||||
$table->string('ext', 10)->default('');
|
$table->string('ext', 10)->default('');
|
||||||
$table->index(['torrent_id', 'lang_id'], 'torrentid_langid');
|
$table->index(['torrent_id', 'lang_id'],);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class CreateSuggestTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('suggest', function (Blueprint $table) {
|
Schema::create('suggest', function (Blueprint $table) {
|
||||||
$table->increments('id');
|
$table->increments('id');
|
||||||
$table->string('keywords')->default('')->index('keywords');
|
$table->string('keywords')->default('')->index();
|
||||||
$table->unsignedMediumInteger('userid')->default(0);
|
$table->unsignedMediumInteger('userid')->default(0);
|
||||||
$table->dateTime('adddate')->nullable()->index('adddate');
|
$table->dateTime('adddate')->nullable()->index();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateTopicsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('topics', function (Blueprint $table) {
|
Schema::create('topics', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->unsignedMediumInteger('userid')->default(0)->index('userid');
|
$table->unsignedMediumInteger('userid')->default(0)->index();
|
||||||
$table->string('subject', 128)->default('')->index('subject');
|
$table->string('subject', 128)->default('')->index();
|
||||||
$table->enum('locked', ['yes', 'no'])->default('no');
|
$table->enum('locked', ['yes', 'no'])->default('no');
|
||||||
$table->unsignedSmallInteger('forumid')->default(0);
|
$table->unsignedSmallInteger('forumid')->default(0);
|
||||||
$table->unsignedInteger('firstpost')->default(0);
|
$table->unsignedInteger('firstpost')->default(0);
|
||||||
@@ -27,8 +27,8 @@ class CreateTopicsTable extends Migration
|
|||||||
$table->enum('sticky', ['no', 'yes'])->default('no');
|
$table->enum('sticky', ['no', 'yes'])->default('no');
|
||||||
$table->unsignedTinyInteger('hlcolor')->default(0);
|
$table->unsignedTinyInteger('hlcolor')->default(0);
|
||||||
$table->unsignedInteger('views')->default(0);
|
$table->unsignedInteger('views')->default(0);
|
||||||
$table->index(['forumid', 'lastpost'], 'forumid_lastpost');
|
$table->index(['forumid', 'lastpost'], );
|
||||||
$table->index(['forumid', 'sticky', 'lastpost'], 'forumid_sticky_lastpost');
|
$table->index(['forumid', 'sticky', 'lastpost'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateTorrentSecretsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('torrent_secrets', function (Blueprint $table) {
|
Schema::create('torrent_secrets', function (Blueprint $table) {
|
||||||
$table->integer('id', true);
|
$table->integer('id', true);
|
||||||
$table->integer('uid')->index('idx_uid');
|
$table->integer('uid')->index();
|
||||||
$table->integer('torrent_id')->default(0)->index('idx_torrent_id');
|
$table->integer('torrent_id')->default(0)->index();
|
||||||
$table->string('secret');
|
$table->string('secret');
|
||||||
$table->timestamp('created_at')->useCurrent();
|
$table->timestamp('created_at')->useCurrent();
|
||||||
$table->timestamp('updated_at')->useCurrent();
|
$table->timestamp('updated_at')->useCurrent();
|
||||||
|
|||||||
@@ -18,13 +18,16 @@ class CreateTorrentsCustomFieldValuesTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('torrents_custom_field_values', function (Blueprint $table) {
|
Schema::create('torrents_custom_field_values', function (Blueprint $table) {
|
||||||
$table->integer('id', true);
|
$table->integer('id', true);
|
||||||
$table->integer('torrent_id')->default(0)->index('idx_torrent_id');
|
$table->integer('torrent_id')->default(0)->index();
|
||||||
$table->integer('custom_field_id')->default(0)->index('idx_field_id');
|
$table->integer('custom_field_id')->default(0)->index();
|
||||||
$table->mediumText('custom_field_value')->nullable();
|
$table->mediumText('custom_field_value')->nullable();
|
||||||
$table->dateTime('created_at');
|
$table->dateTime('created_at');
|
||||||
$table->dateTime('updated_at');
|
$table->dateTime('updated_at');
|
||||||
});
|
});
|
||||||
\Illuminate\Support\Facades\DB::statement('alter table torrents_custom_field_values add index(custom_field_value(191))');
|
if (\Nexus\Database\NexusDB::isMysql()) {
|
||||||
|
\Illuminate\Support\Facades\DB::statement('alter table torrents_custom_field_values add index(custom_field_value(191))');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ class CreateTorrentsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('torrents', function (Blueprint $table) {
|
Schema::create('torrents', function (Blueprint $table) {
|
||||||
$table->mediumIncrements('id');
|
$table->mediumIncrements('id');
|
||||||
$table->string('name')->default('')->index('name');
|
$table->binary('info_hash', 20)->nullable()->unique();
|
||||||
|
$table->string('name')->default('')->index();
|
||||||
$table->string('filename')->default('');
|
$table->string('filename')->default('');
|
||||||
$table->string('save_as')->default('');
|
$table->string('save_as')->default('');
|
||||||
$table->text('descr')->nullable();
|
$table->text('descr')->nullable();
|
||||||
@@ -45,27 +46,26 @@ class CreateTorrentsTable extends Migration
|
|||||||
$table->dateTime('last_action')->nullable();
|
$table->dateTime('last_action')->nullable();
|
||||||
$table->enum('visible', ['yes', 'no'])->default('yes');
|
$table->enum('visible', ['yes', 'no'])->default('yes');
|
||||||
$table->enum('banned', ['yes', 'no'])->default('no');
|
$table->enum('banned', ['yes', 'no'])->default('no');
|
||||||
$table->unsignedMediumInteger('owner')->default(0)->index('owner');
|
$table->unsignedMediumInteger('owner')->default(0)->index();
|
||||||
$table->binary('nfo')->nullable();
|
$table->binary('nfo')->nullable();
|
||||||
$table->unsignedTinyInteger('sp_state')->default(1);
|
$table->unsignedTinyInteger('sp_state')->default(1);
|
||||||
$table->unsignedTinyInteger('promotion_time_type')->default(0);
|
$table->unsignedTinyInteger('promotion_time_type')->default(0);
|
||||||
$table->dateTime('promotion_until')->nullable();
|
$table->dateTime('promotion_until')->nullable();
|
||||||
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
$table->enum('anonymous', ['yes', 'no'])->default('no');
|
||||||
$table->unsignedInteger('url')->nullable()->index('url');
|
$table->unsignedInteger('url')->nullable()->index();
|
||||||
$table->string('pos_state', 32)->default('normal');
|
$table->string('pos_state', 32)->default('normal');
|
||||||
$table->unsignedTinyInteger('cache_stamp')->default(0);
|
$table->unsignedTinyInteger('cache_stamp')->default(0);
|
||||||
$table->enum('picktype', ['hot', 'classic', 'recommended', 'normal'])->default('normal');
|
$table->enum('picktype', ['hot', 'classic', 'recommended', 'normal'])->default('normal');
|
||||||
$table->dateTime('picktime')->nullable();
|
$table->dateTime('picktime')->nullable();
|
||||||
$table->dateTime('last_reseed')->nullable();
|
$table->dateTime('last_reseed')->nullable();
|
||||||
$table->mediumText('pt_gen')->nullable();
|
$table->mediumText('pt_gen')->nullable();
|
||||||
// $table->integer('tags')->default(0);
|
|
||||||
$table->text('technical_info')->nullable();
|
$table->text('technical_info')->nullable();
|
||||||
$table->index(['visible', 'pos_state', 'id'], 'visible_pos_id');
|
$table->index(['visible', 'pos_state', 'id'] );
|
||||||
$table->index(['category', 'visible', 'banned'], 'category_visible_banned');
|
$table->index(['category', 'visible', 'banned']);
|
||||||
$table->index(['visible', 'banned', 'pos_state', 'id'], 'visible_banned_pos_id');
|
$table->index(['visible', 'banned', 'pos_state', 'id']);
|
||||||
});
|
});
|
||||||
$sql = 'alter table torrents add column `info_hash` binary(20) NOT NULL after id, add unique info_hash(`info_hash`)';
|
// $sql = 'alter table torrents add column `info_hash` binary(20) NOT NULL after id, add unique info_hash(`info_hash`)';
|
||||||
\Illuminate\Support\Facades\DB::statement($sql);
|
// \Illuminate\Support\Facades\DB::statement($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ class CreateUserBanLogsTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('user_ban_logs', function (Blueprint $table) {
|
Schema::create('user_ban_logs', function (Blueprint $table) {
|
||||||
$table->bigInteger('id', true);
|
$table->bigInteger('id', true);
|
||||||
$table->integer('uid')->default(0)->index('idx_uid');
|
$table->integer('uid')->default(0)->index();
|
||||||
$table->string('username')->default('')->index('idx_username');
|
$table->string('username')->default('')->index();
|
||||||
$table->integer('operator')->default(0);
|
$table->integer('operator')->default(0);
|
||||||
$table->string('reason')->nullable();
|
$table->string('reason')->nullable();
|
||||||
$table->timestamp('created_at')->nullable()->useCurrent();
|
$table->timestamp('created_at')->nullable()->useCurrent();
|
||||||
|
|||||||
@@ -22,14 +22,14 @@ class CreateUsersTable extends Migration
|
|||||||
}
|
}
|
||||||
Schema::create('users', function (Blueprint $table) use ($uidStarts) {
|
Schema::create('users', function (Blueprint $table) use ($uidStarts) {
|
||||||
$table->id('id')->startingValue($uidStarts);
|
$table->id('id')->startingValue($uidStarts);
|
||||||
$table->string('username', 40)->default('')->unique('username');
|
$table->string('username', 40)->default('')->unique();
|
||||||
$table->string('passhash', 32)->default('');
|
$table->string('passhash', 32)->default('');
|
||||||
$table->binary('secret');
|
$table->binary('secret');
|
||||||
$table->string('email', 80)->default('');
|
$table->string('email', 80)->default('');
|
||||||
$table->enum('status', ['pending', 'confirmed'])->default('pending');
|
$table->enum('status', ['pending', 'confirmed'])->default('pending');
|
||||||
$table->dateTime('added')->nullable();
|
$table->dateTime('added')->nullable();
|
||||||
$table->dateTime('last_login')->nullable();
|
$table->dateTime('last_login')->nullable();
|
||||||
$table->dateTime('last_access')->nullable()->index('last_access');
|
$table->dateTime('last_access')->nullable()->index();
|
||||||
$table->dateTime('last_home')->nullable();
|
$table->dateTime('last_home')->nullable();
|
||||||
$table->dateTime('last_offer')->nullable();
|
$table->dateTime('last_offer')->nullable();
|
||||||
$table->dateTime('forum_access')->nullable();
|
$table->dateTime('forum_access')->nullable();
|
||||||
@@ -48,25 +48,25 @@ class CreateUsersTable extends Migration
|
|||||||
$table->text('info')->nullable();
|
$table->text('info')->nullable();
|
||||||
$table->enum('acceptpms', ['yes', 'friends', 'no'])->default('yes');
|
$table->enum('acceptpms', ['yes', 'friends', 'no'])->default('yes');
|
||||||
$table->enum('commentpm', ['yes', 'no'])->default('yes');
|
$table->enum('commentpm', ['yes', 'no'])->default('yes');
|
||||||
$table->string('ip', 64)->default('')->index('ip');
|
$table->string('ip', 64)->default('')->index();
|
||||||
$table->unsignedTinyInteger('class')->default(1)->index('class');
|
$table->unsignedTinyInteger('class')->default(1)->index();
|
||||||
$table->tinyInteger('max_class_once')->default(1);
|
$table->tinyInteger('max_class_once')->default(1);
|
||||||
$table->string('avatar')->default('');
|
$table->string('avatar')->default('');
|
||||||
$table->unsignedBigInteger('uploaded')->default(0)->index('uploaded');
|
$table->unsignedBigInteger('uploaded')->default(0)->index();
|
||||||
$table->unsignedBigInteger('downloaded')->default(0)->index('downloaded');
|
$table->unsignedBigInteger('downloaded')->default(0)->index();
|
||||||
$table->unsignedBigInteger('seedtime')->default(0);
|
$table->unsignedBigInteger('seedtime')->default(0);
|
||||||
$table->unsignedBigInteger('leechtime')->default(0);
|
$table->unsignedBigInteger('leechtime')->default(0);
|
||||||
$table->string('title', 30)->default('');
|
$table->string('title', 30)->default('');
|
||||||
$table->unsignedSmallInteger('country')->default(107)->index('country');
|
$table->unsignedSmallInteger('country')->default(107)->index();
|
||||||
$table->string('notifs', 500)->nullable();
|
$table->string('notifs', 500)->nullable();
|
||||||
$table->text('modcomment')->nullable();
|
$table->text('modcomment')->nullable();
|
||||||
$table->enum('enabled', ['yes', 'no'])->default('yes')->index('enabled');
|
$table->enum('enabled', ['yes', 'no'])->default('yes')->index();
|
||||||
$table->enum('avatars', ['yes', 'no'])->default('yes');
|
$table->enum('avatars', ['yes', 'no'])->default('yes');
|
||||||
$table->enum('donor', ['yes', 'no'])->default('no');
|
$table->enum('donor', ['yes', 'no'])->default('no');
|
||||||
$table->decimal('donated')->default(0.00);
|
$table->decimal('donated')->default(0.00);
|
||||||
$table->decimal('donated_cny')->default(0.00);
|
$table->decimal('donated_cny')->default(0.00);
|
||||||
$table->dateTime('donoruntil')->nullable();
|
$table->dateTime('donoruntil')->nullable();
|
||||||
$table->enum('warned', ['yes', 'no'])->default('no')->index('warned');
|
$table->enum('warned', ['yes', 'no'])->default('no')->index();
|
||||||
$table->dateTime('warneduntil')->nullable();
|
$table->dateTime('warneduntil')->nullable();
|
||||||
$table->enum('noad', ['yes', 'no'])->default('no');
|
$table->enum('noad', ['yes', 'no'])->default('no');
|
||||||
$table->dateTime('noaduntil')->nullable();
|
$table->dateTime('noaduntil')->nullable();
|
||||||
@@ -84,7 +84,7 @@ class CreateUsersTable extends Migration
|
|||||||
$table->string('supportfor')->default('');
|
$table->string('supportfor')->default('');
|
||||||
$table->string('pickfor')->default('');
|
$table->string('pickfor')->default('');
|
||||||
$table->string('supportlang', 50)->default('');
|
$table->string('supportlang', 50)->default('');
|
||||||
$table->string('passkey', 32)->default('')->index('passkey');
|
$table->string('passkey', 32)->default('')->index();
|
||||||
$table->string('promotion_link', 32)->nullable();
|
$table->string('promotion_link', 32)->nullable();
|
||||||
$table->enum('uploadpos', ['yes', 'no'])->default('yes');
|
$table->enum('uploadpos', ['yes', 'no'])->default('yes');
|
||||||
$table->enum('forumpost', ['yes', 'no'])->default('yes');
|
$table->enum('forumpost', ['yes', 'no'])->default('yes');
|
||||||
@@ -93,7 +93,7 @@ class CreateUsersTable extends Migration
|
|||||||
$table->enum('signatures', ['yes', 'no'])->default('yes');
|
$table->enum('signatures', ['yes', 'no'])->default('yes');
|
||||||
$table->string('signature', 800)->default('');
|
$table->string('signature', 800)->default('');
|
||||||
$table->unsignedSmallInteger('lang')->default(6);
|
$table->unsignedSmallInteger('lang')->default(6);
|
||||||
$table->smallInteger('cheat')->default(0)->index('cheat');
|
$table->smallInteger('cheat')->default(0)->index();
|
||||||
$table->unsignedInteger('download')->default(0);
|
$table->unsignedInteger('download')->default(0);
|
||||||
$table->unsignedInteger('upload')->default(0);
|
$table->unsignedInteger('upload')->default(0);
|
||||||
$table->unsignedTinyInteger('isp')->default(0);
|
$table->unsignedTinyInteger('isp')->default(0);
|
||||||
@@ -118,7 +118,7 @@ class CreateUsersTable extends Migration
|
|||||||
$table->enum('showdescription', ['yes', 'no'])->nullable()->default('yes');
|
$table->enum('showdescription', ['yes', 'no'])->nullable()->default('yes');
|
||||||
$table->enum('showcomment', ['yes', 'no'])->nullable()->default('yes');
|
$table->enum('showcomment', ['yes', 'no'])->nullable()->default('yes');
|
||||||
$table->enum('showclienterror', ['yes', 'no'])->default('no');
|
$table->enum('showclienterror', ['yes', 'no'])->default('no');
|
||||||
$table->boolean('showdlnotice')->default(1);
|
$table->smallInteger('showdlnotice')->default(1);
|
||||||
$table->enum('tooltip', ['minorimdb', 'medianimdb', 'off'])->default('off');
|
$table->enum('tooltip', ['minorimdb', 'medianimdb', 'off'])->default('off');
|
||||||
$table->enum('shownfo', ['yes', 'no'])->nullable()->default('yes');
|
$table->enum('shownfo', ['yes', 'no'])->nullable()->default('yes');
|
||||||
$table->enum('timetype', ['timeadded', 'timealive'])->nullable()->default('timealive');
|
$table->enum('timetype', ['timeadded', 'timealive'])->nullable()->default('timealive');
|
||||||
@@ -136,7 +136,7 @@ class CreateUsersTable extends Migration
|
|||||||
$table->unsignedSmallInteger('school')->default(35);
|
$table->unsignedSmallInteger('school')->default(35);
|
||||||
$table->enum('showfb', ['yes', 'no'])->default('yes');
|
$table->enum('showfb', ['yes', 'no'])->default('yes');
|
||||||
$table->string('page')->nullable()->default('');
|
$table->string('page')->nullable()->default('');
|
||||||
$table->index(['status', 'added'], 'status_added');
|
$table->index(['status', 'added']);
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
|
if (\Nexus\Database\NexusDB::isPgsql()) {
|
||||||
|
//fresh install no need
|
||||||
|
return;
|
||||||
|
}
|
||||||
$tableFields = \App\Repositories\UpgradeRepository::DATETIME_INVALID_VALUE_FIELDS;
|
$tableFields = \App\Repositories\UpgradeRepository::DATETIME_INVALID_VALUE_FIELDS;
|
||||||
|
|
||||||
foreach ($tableFields as $table => $fields) {
|
foreach ($tableFields as $table => $fields) {
|
||||||
|
|||||||
@@ -14,24 +14,27 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
|
if (\Nexus\Database\NexusDB::isPgsql()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
$tableName = 'peers';
|
$tableName = 'peers';
|
||||||
$result = DB::select('show index from ' . $tableName);
|
$columnNames = ['torrent', 'peer_id'];
|
||||||
$indexToDrop = [];
|
// 1. 获取该表所有的索引信息
|
||||||
foreach ($result as $item) {
|
$indexesToDelete = \Nexus\Database\NexusDB::listColumnIndexNames($tableName, $columnNames);
|
||||||
if (in_array($item->Column_name, ['torrent', 'peer_id'])) {
|
|
||||||
$indexToDrop[$item->Key_name] = "drop index " . $item->Key_name;
|
// 3. 执行删除操作
|
||||||
|
Schema::table($tableName, function (Blueprint $table) use ($indexesToDelete) {
|
||||||
|
foreach ($indexesToDelete as $indexName) {
|
||||||
|
// 如果是主键,需要单独处理
|
||||||
|
if ($indexName === 'primary') {
|
||||||
|
$table->dropPrimary();
|
||||||
|
} else {
|
||||||
|
$table->dropIndex($indexName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
$table->index(['torrent', 'peer_id']);
|
||||||
if (!empty($indexToDrop)) {
|
$table->index('peer_id');
|
||||||
$sql = sprintf("alter table %s %s", $tableName, implode(', ', $indexToDrop));
|
});
|
||||||
DB::statement($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = "alter table $tableName add index idx_torrent_peer(`torrent`, `peer_id`(20))";
|
|
||||||
DB::statement($sql);
|
|
||||||
|
|
||||||
$sql = "alter table $tableName add index idx_peer(`peer_id`(20))";
|
|
||||||
DB::statement($sql);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('searchbox', function (Blueprint $table) {
|
Schema::table('searchbox', function (Blueprint $table) {
|
||||||
$table->text('extra')->nullable();
|
$table->json('extra')->nullable();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,9 @@ return new class extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('searchbox', function (Blueprint $table) {
|
Schema::table('searchbox', function (Blueprint $table) {
|
||||||
$table->json('extra')->nullable()->change();
|
if (\Nexus\Database\NexusDB::isMysql()) {
|
||||||
|
$table->json('extra')->nullable()->change();
|
||||||
|
}
|
||||||
$table->string('custom_fields_display_name')->nullable(true)->default('')->change();
|
$table->string('custom_fields_display_name')->nullable(true)->default('')->change();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ return new class extends Migration
|
|||||||
Schema::table('invites', function (Blueprint $table) {
|
Schema::table('invites', function (Blueprint $table) {
|
||||||
$table->dateTime('expired_at')->nullable(true)->index();
|
$table->dateTime('expired_at')->nullable(true)->index();
|
||||||
$table->dateTime('created_at')->useCurrent();
|
$table->dateTime('created_at')->useCurrent();
|
||||||
$table->index(['inviter'], 'idx_inviter');
|
$table->index(['inviter'], );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Nexus\Database\NexusDB;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class extends Migration
|
||||||
{
|
{
|
||||||
@@ -14,27 +15,28 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
|
if (NexusDB::isPgsql()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
$tableName = 'snatched';
|
$tableName = 'snatched';
|
||||||
$result = DB::select('show index from ' . $tableName);
|
$columnNames = ['torrentid', 'userid'];
|
||||||
$indexToDrop = [];
|
// 1. 获取该表所有的索引信息
|
||||||
foreach ($result as $item) {
|
$indexesToDelete = NexusDB::listColumnIndexNames($tableName, $columnNames);
|
||||||
if (in_array($item->Column_name, ['torrentid', 'userid'])) {
|
|
||||||
if ($item->Non_unique == 0) {
|
// 3. 执行删除操作
|
||||||
return;
|
Schema::table($tableName, function (Blueprint $table) use ($indexesToDelete) {
|
||||||
|
foreach ($indexesToDelete as $indexName) {
|
||||||
|
// 如果是主键,需要单独处理
|
||||||
|
if ($indexName === 'primary') {
|
||||||
|
$table->dropPrimary();
|
||||||
|
} else {
|
||||||
|
$table->dropIndex($indexName);
|
||||||
}
|
}
|
||||||
$indexToDrop[$item->Key_name] = "drop index " . $item->Key_name;
|
|
||||||
}
|
}
|
||||||
}
|
$table->unique(['torrentid', 'userid']);
|
||||||
if (!empty($indexToDrop)) {
|
$table->index('userid');
|
||||||
$sql = sprintf("alter table %s %s", $tableName, implode(', ', $indexToDrop));
|
});
|
||||||
DB::statement($sql);
|
|
||||||
}
|
|
||||||
|
|
||||||
$sql = "alter table $tableName add unique unique_torrent_user(`torrentid`, `userid`)";
|
|
||||||
DB::statement($sql);
|
|
||||||
|
|
||||||
$sql = "alter table $tableName add index idx_user(`userid`)";
|
|
||||||
DB::statement($sql);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+22
-10
@@ -3,7 +3,7 @@
|
|||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Nexus\Database\NexusDB;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class extends Migration
|
||||||
{
|
{
|
||||||
@@ -14,16 +14,28 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
$tableName = 'peers';
|
if (NexusDB::isPgsql()) {
|
||||||
$result = DB::select('show index from ' . $tableName);
|
return;
|
||||||
$toDropIndex = 'idx_torrent_peer';
|
|
||||||
foreach ($result as $item) {
|
|
||||||
if ($item->Key_name == $toDropIndex) {
|
|
||||||
DB::statement("alter table $tableName drop index $toDropIndex");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
DB::statement("alter table $tableName add unique unique_torrent_peer_user(`torrent`, `peer_id`, `userid`)");
|
$tableName = 'peers';
|
||||||
|
$columnNames = ['torrent', 'peer_id', 'userid'];
|
||||||
|
// 1. 获取该表所有的索引信息
|
||||||
|
$indexesToDelete = NexusDB::listColumnIndexNames($tableName, $columnNames);
|
||||||
|
|
||||||
|
// 3. 执行删除操作
|
||||||
|
Schema::table($tableName, function (Blueprint $table) use ($indexesToDelete) {
|
||||||
|
foreach ($indexesToDelete as $indexName) {
|
||||||
|
// 如果是主键,需要单独处理
|
||||||
|
if ($indexName === 'primary') {
|
||||||
|
$table->dropPrimary();
|
||||||
|
} else {
|
||||||
|
$table->dropIndex($indexName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$table->unique(['torrent', 'peer_id', 'userid']);
|
||||||
|
$table->index('peer_id');
|
||||||
|
$table->index('userid');
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('users', function (Blueprint $table) {
|
Schema::table('users', function (Blueprint $table) {
|
||||||
$table->decimal("seedbonus", 20, 1)->change();
|
$table->decimal("seedbonus", 20, 1)->default(0)->change();
|
||||||
});
|
});
|
||||||
Schema::table('bonus_logs', function (Blueprint $table) {
|
Schema::table('bonus_logs', function (Blueprint $table) {
|
||||||
$table->decimal("old_total_value", 20, 1)->change();
|
$table->decimal("old_total_value", 20, 1)->change();
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('claims', function (Blueprint $table) {
|
Schema::table('claims', function (Blueprint $table) {
|
||||||
$table->index("created_at", "idx_created_at");
|
$table->index("created_at", );
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -13,10 +13,10 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
$columnInfo = \Nexus\Database\NexusDB::getMysqlColumnInfo("torrents", "cache_stamp");
|
// $columnInfo = \Nexus\Database\NexusDB::getMysqlColumnInfo("torrents", "cache_stamp");
|
||||||
if ($columnInfo["DATA_TYPE"] == "int") {
|
// if ($columnInfo["DATA_TYPE"] == "int") {
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
Schema::table('torrents', function (Blueprint $table) {
|
Schema::table('torrents', function (Blueprint $table) {
|
||||||
$table->integer("cache_stamp")->default(0)->change();
|
$table->integer("cache_stamp")->default(0)->change();
|
||||||
});
|
});
|
||||||
|
|||||||
+1
-1
@@ -14,7 +14,7 @@ return new class extends Migration
|
|||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
Schema::table('oauth_clients', function (Blueprint $table) {
|
Schema::table('oauth_clients', function (Blueprint $table) {
|
||||||
$table->boolean("skips_authorization")->default(false);
|
$table->smallInteger("skips_authorization")->default(false);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function up()
|
public function up()
|
||||||
{
|
{
|
||||||
$sql = 'ALTER table torrents MODIFY column `info_hash` binary(20) DEFAULT NULL';
|
Schema::table('torrents', function (Blueprint $table) {
|
||||||
\Illuminate\Support\Facades\DB::statement($sql);
|
$table->binary('info_hash', 20)->nullable()->change();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ return new class extends Migration
|
|||||||
$table->string('email_claim')->nullable();
|
$table->string('email_claim')->nullable();
|
||||||
$table->string('level_claim')->nullable();
|
$table->string('level_claim')->nullable();
|
||||||
$table->string('level_limit')->nullable();
|
$table->string('level_limit')->nullable();
|
||||||
$table->boolean('enabled');
|
$table->smallInteger('enabled');
|
||||||
$table->integer('priority');
|
$table->integer('priority');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user