Reset invalid player textures automatically

This commit is contained in:
printempw 2017-06-28 17:13:07 +08:00
parent f07cc0f76f
commit b7df1b362c
4 changed files with 46 additions and 11 deletions

View File

@ -38,8 +38,11 @@ class PlayerController extends Controller
{ {
$this->user = $users->get(session('uid')); $this->user = $users->get(session('uid'));
if ($request->has('pid')) if ($request->has('pid')) {
$this->player = Player::find($request->pid); if ($this->player = Player::find($request->pid)) {
$this->player->checkForInvalidTextures();
}
}
} }
public function index() public function index()

View File

@ -205,33 +205,46 @@ class SkinlibController extends Controller
{ {
$result = Texture::find($request->tid); $result = Texture::find($request->tid);
if (!$result) if (!$result) {
return json(trans('skinlib.non-existent'), 1); return json(trans('skinlib.non-existent'), 1);
}
if ($result->uploader != $this->user->uid && !$this->user->isAdmin()) if ($result->uploader != $this->user->uid && !$this->user->isAdmin()) {
return json(trans('skinlib.no-permission'), 1); return json(trans('skinlib.no-permission'), 1);
}
// check if file occupied // check if file occupied
if (Texture::where('hash', $result['hash'])->count() == 1) if (Texture::where('hash', $result['hash'])->count() == 1) {
Storage::delete($result['hash']); Storage::delete($result['hash']);
}
if (option('return_score')) { if (option('return_score')) {
// remove the public texture from all users' closet
if ($result->public == 1) { if ($result->public == 1) {
$users->get($result->uploader)->setScore($result->size * Option::get('score_per_storage'), 'plus'); $users->get($result->uploader)->setScore(
$result->size * option('score_per_storage'), 'plus'
);
foreach (Closet::all() as $closet) { foreach (Closet::all() as $closet) {
if ($closet->has($result->tid)) { if ($closet->has($result->tid)) {
$closet->remove($result->tid); $closet->remove($result->tid);
$users->get($closet->uid)->setScore(option('score_per_closet_item'), 'plus');
$users->get($closet->uid)->setScore(
option('score_per_closet_item'), 'plus'
);
} }
} }
} else {
$users->get($result->uploader)->setScore(
$result->size * option('private_score_per_storage'), 'plus'
);
} }
else
$users->get($result->uploader)->setScore($result->size * Option::get('private_score_per_storage'), 'plus');
} }
if ($result->delete()) if ($result->delete()) {
return json(trans('skinlib.delete.success'), 0); return json(trans('skinlib.delete.success'), 0);
} }
}
public function privacy(Request $request, UserRepository $users) public function privacy(Request $request, UserRepository $users)
{ {

View File

@ -94,6 +94,25 @@ class Player extends Model
return Event::fire(new PlayerProfileUpdated($this)); return Event::fire(new PlayerProfileUpdated($this));
} }
/**
* Check and delete invalid textures from player profile.
*
* @return mixed
*/
public function checkForInvalidTextures()
{
foreach (self::$models as $model) {
$property = "tid_$model";
if (!Texture::find($this->$property)) {
// reset texture
$this->$property = 0;
}
}
return $this->save();
}
/** /**
* Clear the textures of player. * Clear the textures of player.
* *

@ -1 +1 @@
Subproject commit 1125d0876374343c1e4885d670f693d98618cf6e Subproject commit c7ac80b11bac6fd0bd9037acfb65b1c9902bc071