diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index 5b91d11a..992a9a33 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -38,8 +38,11 @@ class PlayerController extends Controller { $this->user = $users->get(session('uid')); - if ($request->has('pid')) - $this->player = Player::find($request->pid); + if ($request->has('pid')) { + if ($this->player = Player::find($request->pid)) { + $this->player->checkForInvalidTextures(); + } + } } public function index() diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index 8cda2d9c..efa04cb1 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -205,32 +205,45 @@ class SkinlibController extends Controller { $result = Texture::find($request->tid); - if (!$result) + if (!$result) { 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); + } // check if file occupied - if (Texture::where('hash', $result['hash'])->count() == 1) + if (Texture::where('hash', $result['hash'])->count() == 1) { Storage::delete($result['hash']); + } if (option('return_score')) { + // remove the public texture from all users' closet 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) { if ($closet->has($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); + } } public function privacy(Request $request, UserRepository $users) diff --git a/app/Models/Player.php b/app/Models/Player.php index acbe5107..a6995e2c 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -94,6 +94,25 @@ class Player extends Model 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. * diff --git a/plugins b/plugins index 1125d087..c7ac80b1 160000 --- a/plugins +++ b/plugins @@ -1 +1 @@ -Subproject commit 1125d0876374343c1e4885d670f693d98618cf6e +Subproject commit c7ac80b11bac6fd0bd9037acfb65b1c9902bc071