fix that texture isn't checked if it's existed in closet

when being applied to player
This commit is contained in:
Pig Fang 2020-08-19 12:13:19 +08:00
parent 3f717e1d1e
commit bf860d6a68
No known key found for this signature in database
GPG Key ID: A8198F548DADA9E2
4 changed files with 26 additions and 5 deletions

View File

@ -196,6 +196,9 @@ class PlayerController extends Controller
Filter $filter,
Player $player
) {
/** @var User */
$user = auth()->user();
foreach (['skin', 'cape'] as $type) {
$tid = $request->input($type);
@ -206,10 +209,14 @@ class PlayerController extends Controller
if ($tid) {
$texture = Texture::find($tid);
if (!$texture) {
if (empty($texture)) {
return json(trans('skinlib.non-existent'), 1);
}
if ($user->closet()->where('texture_tid', $tid)->doesntExist()) {
return json(trans('user.closet.remove.non-existent'), 1);
}
$dispatcher->dispatch('player.texture.updating', [$player, $texture]);
$field = "tid_$type";

View File

@ -12,3 +12,4 @@
- Fixed duplication of private textures.
- Fixed that previews and avatars cannot be indivdually cached by image format.
- Fixed that message for private textures doesn't match with HTTP status code.
- Fixed that texture isn't checked if it's existed in closet when being applied to player.

View File

@ -12,3 +12,4 @@
- 修复私有材质的重复问题
- 修复预览图和头像不能根据图像格式来单独缓存的问题
- 修复针对私有材质的错误消息不与 HTTP 状态码相符的问题
- 修复应用材质到角色时未检查材质是否在衣柜中的问题

View File

@ -317,7 +317,7 @@ class PlayerControllerTest extends TestCase
$player = factory(Player::class)->create();
$user = $player->user;
$skin = factory(Texture::class)->create();
$cape = factory(Texture::class)->states('cape')->create();
$cape = factory(Texture::class)->state('cape')->create();
// rejected
$filter = Fakes\Filter::fake();
@ -333,15 +333,26 @@ class PlayerControllerTest extends TestCase
->assertJson(['code' => 1, 'message' => 'rejected']);
$filter->remove('can_set_texture');
// Set a not-existed texture
// set a not-existed texture
$this->putJson(route('user.player.set', ['player' => $player]), ['skin' => -1])
->assertJson([
'code' => 1,
'message' => trans('skinlib.non-existent'),
]);
// Set for "skin" type
// set a private texture
$private = factory(Texture::class)->state('private')->create();
$this->putJson(
route('user.player.set', ['player' => $player]),
['skin' => $private->tid]
)->assertJson([
'code' => 1,
'message' => trans('user.closet.remove.non-existent'),
]);
// set for "skin" type
Event::fake();
$user->closet()->attach($skin->tid, ['item_name' => $skin->name]);
$this->putJson(
route('user.player.set', ['player' => $player]),
['skin' => $skin->tid]
@ -370,8 +381,9 @@ class PlayerControllerTest extends TestCase
}
);
// Set for "cape" type
// set for "cape" type
Event::fake();
$user->closet()->attach($cape->tid, ['item_name' => $cape->name]);
$this->putJson(
route('user.player.set', ['player' => $player]),
['cape' => $cape->tid]