attach torrent tags support delete olds

This commit is contained in:
xiaomlove
2022-09-12 22:02:57 +08:00
parent d5e81ac009
commit e5cb98cf35
8 changed files with 29 additions and 21 deletions

View File

@@ -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);
});
}

View File

@@ -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 = [