From e5cb98cf3583fc1c67999e2c5d39b9e86a98749f Mon Sep 17 00:00:00 2001 From: xiaomlove Date: Mon, 12 Sep 2022 22:02:57 +0800 Subject: [PATCH] attach torrent tags support delete olds --- .../Resources/Torrent/TorrentResource.php | 7 ++++- app/Repositories/TorrentRepository.php | 26 +++++++++---------- app/Repositories/UserRepository.php | 5 +++- public/recover.php | 7 ++--- public/viewpeerlist.php | 2 +- resources/lang/en/admin.php | 1 + resources/lang/zh_CN/admin.php | 1 + resources/lang/zh_TW/admin.php | 1 + 8 files changed, 29 insertions(+), 21 deletions(-) diff --git a/app/Filament/Resources/Torrent/TorrentResource.php b/app/Filament/Resources/Torrent/TorrentResource.php index 6163de01..bc046f67 100644 --- a/app/Filament/Resources/Torrent/TorrentResource.php +++ b/app/Filament/Resources/Torrent/TorrentResource.php @@ -163,6 +163,7 @@ class TorrentResource extends Resource $torrentRep = new TorrentRepository(); $torrentRep->setPosState($idArr, $data['pos_state']); } catch (\Exception $exception) { + do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } }) @@ -180,6 +181,7 @@ class TorrentResource extends Resource $torrentRep = new TorrentRepository(); $torrentRep->syncTags($idArr); } catch (\Exception $exception) { + do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } }) @@ -188,11 +190,13 @@ class TorrentResource extends Resource $actions[] = Tables\Actions\BulkAction::make('attach_tag') ->label(__('admin.resources.torrent.bulk_action_attach_tag')) ->form([ + Forms\Components\Checkbox::make('remove')->label(__('admin.resources.torrent.bulk_action_attach_tag_remove_old')), Forms\Components\CheckboxList::make('tags') ->label(__('label.tag.label')) ->columns(4) ->options(TagRepository::createBasicQuery()->pluck('name', 'id')->toArray()) ->required(), + ]) ->icon('heroicon-o-tag') ->action(function (Collection $records, array $data) { @@ -202,8 +206,9 @@ class TorrentResource extends Resource $idArr = $records->pluck('id')->toArray(); try { $torrentRep = new TorrentRepository(); - $torrentRep->syncTags($idArr, $data['tags']); + $torrentRep->syncTags($idArr, $data['tags'], $data['remove'] ?? false); } catch (\Exception $exception) { + do_log($exception->getMessage() . $exception->getTraceAsString(), 'error'); Filament::notify('danger', class_basename($exception)); } }) diff --git a/app/Repositories/TorrentRepository.php b/app/Repositories/TorrentRepository.php index aab17db3..0f10aa2b 100644 --- a/app/Repositories/TorrentRepository.php +++ b/app/Repositories/TorrentRepository.php @@ -30,6 +30,7 @@ use Hashids\Hashids; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; use Nexus\Database\NexusDB; @@ -572,28 +573,27 @@ class TorrentRepository extends BaseRepository return false; } - public function syncTags($id, array $tagIdArr = []) + public function syncTags($id, array $tagIdArr = [], $remove = true) { user_can('torrentmanage', true); $idArr = Arr::wrap($id); - return NexusDB::transaction(function () use ($idArr, $tagIdArr) { - $insert = []; + return NexusDB::transaction(function () use ($idArr, $tagIdArr, $remove) { + $sql = "insert into torrent_tags (torrent_id, tag_id, created_at, updated_at) values "; $time = now()->toDateTimeString(); + $values = []; foreach ($idArr as $torrentId) { foreach ($tagIdArr as $tagId) { - $insert[] = [ - 'torrent_id' => $torrentId, - 'tag_id' => $tagId, - 'created_at' => $time, - 'updated_at' => $time, - ]; + $values[] = sprintf("(%s, %s, '%s', '%s')", $torrentId, $tagId, $time, $time); } } - TorrentTag::query()->whereIn('torrent_id', $idArr)->delete(); - if (!empty($insert)) { - TorrentTag::query()->insert($insert); + $sql .= implode(', ', $values) . " on duplicate key update updated_at = values(updated_at)"; + if ($remove) { + TorrentTag::query()->whereIn('torrent_id', $idArr)->delete(); } - return count($insert); + if (!empty($values)) { + DB::insert($sql); + } + return count($values); }); } diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index 6f5aba4f..f3f543a5 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -138,7 +138,10 @@ class UserRepository extends BaseRepository throw new \InvalidArgumentException("password confirmation != password"); } $user = User::query()->findOrFail($id, ['id', 'username', 'class']); - $this->checkPermission(Auth::user(), $user); + $operator = Auth::user(); + if ($operator) { + $this->checkPermission($operator, $user); + } $secret = mksecret(); $passhash = md5($secret . $password . $secret); $update = [ diff --git a/public/recover.php b/public/recover.php index 3ac4d5f0..5e9ed59a 100644 --- a/public/recover.php +++ b/public/recover.php @@ -50,7 +50,7 @@ if ($_SERVER["REQUEST_METHOD"] == "POST") $title = $SITENAME.$lang_recover['mail_title']; $body = << {$lang_recover['mail_this_link']}
+ {$lang_recover['mail_this_link']}
$baseUrl/recover.php?id={$arr["id"]}&secret=$hash {$lang_recover['mail_four']} EOD; @@ -96,11 +96,8 @@ elseif($_SERVER["REQUEST_METHOD"] == "GET" && $take_recover && isset($_GET["id"] {$lang_recover['mail_two_one']}{$arr["username"]} {$lang_recover['mail_two_two']}$newpassword {$lang_recover['mail_two_three']} -{$lang_recover['mail_here']} -{$lang_recover['mail_three_1']} -{$lang_confirm_resend['mail_google_answer']} +{$lang_recover['mail_here']} {$lang_recover['mail_two_four']} - EOD; sent_mail($email,$SITENAME,$SITEEMAIL,$title,$body,"details",true,false,''); diff --git a/public/viewpeerlist.php b/public/viewpeerlist.php index 8337ec20..813902d2 100644 --- a/public/viewpeerlist.php +++ b/public/viewpeerlist.php @@ -216,7 +216,7 @@ function dltable($name, $arr, $torrent, &$isSeedBoxCaseWhens) $seederTable = dltable($lang_viewpeerlist['text_seeders'], $seeders, $row, $isSeedBoxCaseWhens); $leecherTable = dltable($lang_viewpeerlist['text_leechers'], $downloaders, $row, $isSeedBoxCaseWhens); //update peer is_seed_box - if (!empty($isSeedBoxCaseWhens)) { + if (!empty($isSeedBoxCaseWhens) && get_setting('seed_box.enabled') == 'yes') { $sql = sprintf( "update peers set is_seed_box = case id %s end where id in (%s)", implode(' ', array_values($isSeedBoxCaseWhens)), implode(',', array_keys($isSeedBoxCaseWhens)) diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index 4dc01823..f27f10d4 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -87,6 +87,7 @@ return [ 'bulk_action_remove_tag' => 'Remove tag', 'bulk_action_attach_tag' => 'Attach tag', 'action_approval' => 'Approval', + 'bulk_action_attach_tag_remove_old' => 'Also delete old tags', ], 'seed_box_record' => [ 'toggle_status' => 'Change status', diff --git a/resources/lang/zh_CN/admin.php b/resources/lang/zh_CN/admin.php index 8c3e900f..fc54330f 100644 --- a/resources/lang/zh_CN/admin.php +++ b/resources/lang/zh_CN/admin.php @@ -87,6 +87,7 @@ return [ 'bulk_action_remove_tag' => '清除标签', 'bulk_action_attach_tag' => '设置标签', 'action_approval' => '审核', + 'bulk_action_attach_tag_remove_old' => '同时删除旧标签', ], 'seed_box_record' => [ 'toggle_status' => '更改状态', diff --git a/resources/lang/zh_TW/admin.php b/resources/lang/zh_TW/admin.php index 5ad4a52c..16fdd38f 100644 --- a/resources/lang/zh_TW/admin.php +++ b/resources/lang/zh_TW/admin.php @@ -87,6 +87,7 @@ return [ 'bulk_action_remove_tag' => '清除標簽', 'bulk_action_attach_tag' => '設置標簽', 'action_approval' => '審核', + 'bulk_action_attach_tag_remove_old' => '同時刪除舊標簽', ], 'seed_box_record' => [ 'toggle_status' => '更改狀態',