diff --git a/app/Http/Controllers/AdminController.php b/app/Http/Controllers/AdminController.php index 98b7fcca..8bd3b663 100644 --- a/app/Http/Controllers/AdminController.php +++ b/app/Http/Controllers/AdminController.php @@ -404,7 +404,8 @@ class AdminController extends Controller return json(trans('admin.users.operations.email.existed', ['email' => $request->input('email')]), 1); } - $user->setEmail($request->input('email')); + $user->email = $request->input('email'); + $user->save(); return json(trans('admin.users.operations.email.success'), 0); } elseif ($action == 'verification') { @@ -417,7 +418,8 @@ class AdminController extends Controller 'nickname' => 'required|no_special_chars', ]); - $user->setNickName($request->input('nickname')); + $user->nickname = $request->input('nickname'); + $user->save(); return json(trans('admin.users.operations.nickname.success', [ 'new' => $request->input('nickname'), @@ -486,7 +488,9 @@ class AdminController extends Controller return json(trans('admin.players.textures.non-existent', ['tid' => $request->tid]), 1); } - $player->setTexture(['tid_'.$request->type => $request->tid]); + $field = 'tid_'.$request->type; + $player->$field = $request->tid; + $player->save(); return json(trans('admin.players.textures.success', ['player' => $player->name]), 0); } elseif ($action == 'owner') { @@ -500,9 +504,10 @@ class AdminController extends Controller return json(trans('admin.users.operations.non-existent'), 1); } - $player->setOwner($request->input('uid')); + $player->uid = $request->input('uid'); + $player->save(); - return json(trans('admin.players.owner.success', ['player' => $player->name, 'user' => $user->getNickName()]), 0); + return json(trans('admin.players.owner.success', ['player' => $player->name, 'user' => $user->nickname]), 0); } elseif ($action == 'delete') { $player->delete(); @@ -512,7 +517,8 @@ class AdminController extends Controller 'name' => 'required|player_name|min:'.option('player_name_length_min').'|max:'.option('player_name_length_max'), ])['name']; - $player->rename($name); + $player->name = $name; + $player->save(); if (option('single_player', false)) { $owner = $player->user; diff --git a/app/Http/Controllers/ClosetController.php b/app/Http/Controllers/ClosetController.php index b48e17a7..1481c6b4 100644 --- a/app/Http/Controllers/ClosetController.php +++ b/app/Http/Controllers/ClosetController.php @@ -66,7 +66,7 @@ class ClosetController extends Controller $user = Auth::user(); - if ($user->getScore() < option('score_per_closet_item')) { + if ($user->score < option('score_per_closet_item')) { return json(trans('user.closet.add.lack-score'), 7); } diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index ef2446af..43d162da 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -32,7 +32,13 @@ class PlayerController extends Controller $this->middleware(function ($request, $next) { if ($request->has('pid')) { if ($this->player = Player::find($request->pid)) { - $this->player->checkForInvalidTextures(); + foreach (['skin', 'cape'] as $type) { + $field = "tid_$type"; + if (! Texture::find($this->player->$field)) { + $this->player->$field = 0; + } + } + $this->player->save(); } } @@ -79,7 +85,7 @@ class PlayerController extends Controller return json(trans('user.player.add.repeated'), 6); } - if ($user->getScore() < Option::get('score_per_player')) { + if ($user->score < Option::get('score_per_player')) { return json(trans('user.player.add.lack-score'), 7); } @@ -138,8 +144,8 @@ class PlayerController extends Controller } $oldName = $this->player->name; - - $this->player->rename($newName); + $this->player->name = $newName; + $this->player->save(); if (option('single_player', false)) { $user = auth()->user(); @@ -150,12 +156,6 @@ class PlayerController extends Controller return json(trans('user.player.rename.success', ['old' => $oldName, 'new' => $newName]), 0); } - /** - * A wrapper of Player::setTexture(). - * - * @param Request $request - * @return \Illuminate\Http\JsonResponse - */ public function setTexture(Request $request) { foreach ($request->input('tid') as $key => $value) { @@ -165,9 +165,10 @@ class PlayerController extends Controller return json(trans('skinlib.un-existent'), 6); } - $fieldName = $texture->type == 'cape' ? 'tid_cape' : 'tid_skin'; + $field = $texture->type == 'cape' ? 'tid_cape' : 'tid_skin'; - $this->player->setTexture([$fieldName => $value]); + $this->player->$field = $value; + $this->player->save(); } return json(trans('user.player.set.success', ['name' => $this->player->name]), 0); @@ -175,12 +176,13 @@ class PlayerController extends Controller public function clearTexture(Request $request) { - $types = array_filter(['skin', 'cape'], function ($type) use ($request) { - return $request->input($type); - }); - - $this->player->clearTexture($types); - + array_map(function ($type) use ($request) { + if ($request->input($type)) { + $field = "tid_$type"; + $this->player->$field = 0; + } + }, ['skin', 'cape']); + $this->player->save(); return json(trans('user.player.clear.success', ['name' => $this->player->name]), 0); } diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index 2d050d0c..bcc2d916 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -191,7 +191,7 @@ class SkinlibController extends Controller $cost += option('score_per_closet_item'); $cost -= option('score_award_per_texture', 0); - if ($user->getScore() < $cost) { + if ($user->score < $cost) { return json(trans('skinlib.upload.lack-score'), 7); } @@ -292,7 +292,7 @@ class SkinlibController extends Controller if ($t->public && option('take_back_scores_after_deletion', true)) { $score_diff -= option('score_award_per_texture', 0); } - if ($users->get($t->uploader)->getScore() + $score_diff < 0) { + if ($users->get($t->uploader)->score + $score_diff < 0) { return json(trans('skinlib.upload.lack-score'), 1); } diff --git a/app/Http/Controllers/TextureController.php b/app/Http/Controllers/TextureController.php index e44ecc5b..3d743d47 100644 --- a/app/Http/Controllers/TextureController.php +++ b/app/Http/Controllers/TextureController.php @@ -132,7 +132,7 @@ class TextureController extends Controller $user = $users->get(base64_decode($base64_email), 'email'); if ($user) { - return $this->avatarByTid($user->getAvatarId(), $size); + return $this->avatarByTid($user->avatar, $size); } return response()->file(storage_path('static_textures/avatar.png')); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 036d51b6..1ac7c61e 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -76,7 +76,7 @@ class UserController extends Controller $result['percentage'] = 0; if ($rate != 0) { - $result['total'] = $used + floor($user->getScore() / $rate); + $result['total'] = $used + floor($user->score / $rate); $result['percentage'] = $result['total'] ? $used / $result['total'] * 100 : 100; } @@ -98,7 +98,7 @@ class UserController extends Controller return json([ 'errno' => 0, 'msg' => trans('user.sign-success', ['score' => $acquiredScore]), - 'score' => $user->getScore(), + 'score' => $user->score, 'storage' => $this->calculatePercentageUsed($user->getStorageUsed(), option('score_per_storage')), 'remaining_time' => $gap > 1 ? round($gap) : $gap, ]); @@ -184,14 +184,11 @@ class UserController extends Controller ]); $nickname = $request->input('new_nickname'); + $user->nickname = $nickname; + $user->save(); + event(new UserProfileUpdated($action, $user)); - if ($user->setNickName($nickname)) { - event(new UserProfileUpdated($action, $user)); - - return json(trans('user.profile.nickname.success', ['nickname' => $nickname]), 0); - } - - break; // @codeCoverageIgnore + return json(trans('user.profile.nickname.success', ['nickname' => $nickname]), 0); case 'password': $this->validate($request, [ @@ -227,19 +224,15 @@ class UserController extends Controller return json(trans('user.profile.email.wrong-password'), 1); } - if ($user->setEmail($request->input('new_email'))) { - // Set account status to unverified - $user->verified = false; - $user->save(); + $user->email = $request->input('new_email'); + $user->verified = false; + $user->save(); - event(new UserProfileUpdated($action, $user)); + event(new UserProfileUpdated($action, $user)); - Auth::logout(); + Auth::logout(); - return json(trans('user.profile.email.success'), 0); - } - - break; // @codeCoverageIgnore + return json(trans('user.profile.email.success'), 0); case 'delete': $this->validate($request, [ @@ -301,9 +294,9 @@ class UserController extends Controller return json(trans('user.profile.avatar.wrong-type'), 1); } - if ($user->setAvatar($tid)) { - return json(trans('user.profile.avatar.success'), 0); - } + $user->avatar = $tid; + $user->save(); + return json(trans('user.profile.avatar.success'), 0); } else { return json(trans('skinlib.non-existent'), 1); } diff --git a/app/Http/Middleware/CheckAuthenticated.php b/app/Http/Middleware/CheckAuthenticated.php index 2c446eef..cb596158 100644 --- a/app/Http/Middleware/CheckAuthenticated.php +++ b/app/Http/Middleware/CheckAuthenticated.php @@ -44,7 +44,8 @@ class CheckAuthenticated if (isset($request->email)) { if (filter_var($request->email, FILTER_VALIDATE_EMAIL)) { if (User::where('email', $request->email)->get()->isEmpty()) { - $user->setEmail($request->email); + $user->email = $request->input('email'); + $user->save(); return $next($request); } else { diff --git a/app/Models/Player.php b/app/Models/Player.php index 368d800c..16e610b2 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -12,25 +12,14 @@ class Player extends Model public const CREATED_AT = null; public const UPDATED_AT = 'last_modified'; - /** - * Json APIs. - */ const CSL_API = 0; const USM_API = 1; protected static $types = ['skin', 'cape']; - /** - * Properties for Eloquent Model. - */ public $primaryKey = 'pid'; protected $fillable = ['uid', 'name', 'last_modified']; - /** - * The attributes that should be cast to native types. - * - * @var array - */ protected $casts = [ 'pid' => 'integer', 'uid' => 'integer', @@ -38,21 +27,15 @@ class Player extends Model 'tid_cape' => 'integer', ]; - /** - * Check if the player is banned. - * - * @return bool - */ + protected $dispatchesEvents = [ + 'updated' => PlayerProfileUpdated::class, + ]; + public function isBanned() { - return $this->user->getPermission() == User::BANNED; + return $this->user->permission == User::BANNED; } - /** - * Return the owner of the player. - * - * @return \App\Models\User - */ public function user() { return $this->belongsTo('App\Models\User', 'uid'); @@ -73,111 +56,6 @@ class Player extends Model return false; } - /** - * Set textures for the player. - * - * @param array $tids - * @return $this - */ - public function setTexture(array $tids) - { - foreach (self::$types as $type) { - $property = "tid_$type"; - - if (isset($tids[$property])) { - $this->$property = $tids[$property]; - } - } - - $this->save(); - - event(new PlayerProfileUpdated($this)); - - return $this; - } - - /** - * Check and delete invalid textures from player profile. - * - * @return $this - */ - public function checkForInvalidTextures() - { - foreach (self::$types as $type) { - $property = "tid_$type"; - - if (! Texture::find($this->$property)) { - // reset texture - $this->$property = 0; - } - } - - $this->save(); - - return $this; - } - - /** - * Clear the textures of player. - * - * @param array|string $types - * @return $this - */ - public function clearTexture($types) - { - $types = (array) $types; - - $map = []; - - foreach ($types as $type) { - $map["tid_$type"] = 0; - } - - $this->setTexture($map); - - return $this; - } - - /** - * Rename the player. - * - * @param string $newName - * @return $this - */ - public function rename($newName) - { - $this->update([ - 'name' => $newName, - ]); - - $this->name = $newName; - - event(new PlayerProfileUpdated($this)); - - return $this; - } - - /** - * Set a new owner for the player. - * - * @param int $uid - * @return $this - */ - public function setOwner($uid) - { - $this->update(['uid' => $uid]); - - event(new PlayerProfileUpdated($this)); - - return $this; - } - - /** - * Get Json profile of player. - * - * @param int $api_type Which API to use, 0 for CustomSkinAPI, 1 for UniSkinAPI - * @return string User profile in json format - */ public function getJsonProfile($api_type) { // Support both CustomSkinLoader API & UniSkinAPI @@ -195,12 +73,6 @@ class Player extends Model } } - /** - * Generate player profile in json format. - * - * @param int $api_type - * @return string - */ public function generateJsonProfile($api_type) { $json[($api_type == self::CSL_API) ? 'username' : 'player_name'] = $this->name; diff --git a/app/Models/User.php b/app/Models/User.php index bf9a2fca..8a732431 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -130,77 +130,6 @@ class User extends Authenticatable return $this->save(); } - /** - * Get user permission. - * - * @return int - */ - public function getPermission() - { - return $this->permission; - } - - /** - * Set user permission. - * - * @param int $permission - * @return bool - */ - public function setPermission($permission) - { - return $this->update(['permission' => $permission]); - } - - /** - * Set new email for user. - * - * @param string $new_email - * @return bool - */ - public function setEmail($new_email) - { - $this->email = $new_email; - - return $this->save(); - } - - /** - * Return Email if nickname is not set. - * - * @return string - */ - public function getNickName() - { - if (! $this->uid) { - return trans('general.unexistent-user'); - } else { - return ($this->nickname == '') ? $this->email : $this->nickname; - } - } - - /** - * Set nickname for the user. - * - * @param string $newNickName - * @return bool - */ - public function setNickName($newNickName) - { - $this->nickname = $newNickName; - - return $this->save(); - } - - /** - * Get current score of user. - * - * @return int - */ - public function getScore() - { - return $this->score; - } - /** * Set user score. * @@ -276,7 +205,7 @@ class User extends Authenticatable */ public function getSignRemainingTime() { - $lastSignTime = Carbon::parse($this->getLastSignTime()); + $lastSignTime = Carbon::parse($this->last_sign_at); if (option('sign_after_zero')) { return Carbon::now()->diffInSeconds( @@ -298,39 +227,6 @@ class User extends Authenticatable return $this->getSignRemainingTime() <= 0; } - /** - * Get the last time of signing in. - * - * @return string Formatted time string. - */ - public function getLastSignTime() - { - return $this->last_sign_at; - } - - /** - * Get the texture id of user's avatar. - * - * @return int - */ - public function getAvatarId() - { - return $this->avatar; - } - - /** - * Set user avatar. - * - * @param int $tid - * @return bool - */ - public function setAvatar($tid) - { - $this->avatar = $tid; - - return $this->save(); - } - /** * Delete the user. * diff --git a/app/helpers.php b/app/helpers.php index f0e5cfa6..505b117e 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -19,7 +19,7 @@ if (! function_exists('get_base_url')) { if (! function_exists('avatar')) { function avatar(User $user, $size) { - $fname = base64_encode($user->email).'.png?tid='.$user->getAvatarId(); + $fname = base64_encode($user->email).'.png?tid='.$user->avatar; return url("avatar/$size/$fname"); } @@ -259,7 +259,7 @@ if (! function_exists('bs_role')) { User::SUPER_ADMIN => 'super-admin', ]; - $role = Arr::get($roles, $user->getPermission()); + $role = Arr::get($roles, $user->permission); return trans("admin.users.status.$role"); } diff --git a/resources/views/auth/reset.blade.php b/resources/views/auth/reset.blade.php index 07f20d0e..18c462b1 100644 --- a/resources/views/auth/reset.blade.php +++ b/resources/views/auth/reset.blade.php @@ -10,7 +10,7 @@
-

@lang('auth.reset.message', ['username' => $user->getNickName()])

+

@lang('auth.reset.message', ['username' => $user->nickname])

diff --git a/tests/AdminControllerTest.php b/tests/AdminControllerTest.php index 0901cfaa..13d1c2ce 100644 --- a/tests/AdminControllerTest.php +++ b/tests/AdminControllerTest.php @@ -480,7 +480,7 @@ class AdminControllerTest extends BrowserKitTestCase 'msg' => trans('validation.in', ['attribute' => 'permission']), ]); $user = User::find($user->uid); - $this->assertEquals(User::NORMAL, $user->getPermission()); + $this->assertEquals(User::NORMAL, $user->permission); // Update permission successfully $this->postJson('/admin/users', [ @@ -492,7 +492,7 @@ class AdminControllerTest extends BrowserKitTestCase 'msg' => trans('admin.users.operations.permission'), ]); $user = User::find($user->uid); - $this->assertEquals(User::BANNED, $user->getPermission()); + $this->assertEquals(User::BANNED, $user->permission); // Delete a user $this->postJson('/admin/users', ['uid' => $user->uid, 'action' => 'delete']) diff --git a/tests/ModelsTest/UserTest.php b/tests/ModelsTest/UserTest.php index 9dbc6b5a..2a8a044e 100644 --- a/tests/ModelsTest/UserTest.php +++ b/tests/ModelsTest/UserTest.php @@ -19,15 +19,6 @@ class UserTest extends TestCase $this->assertFalse($user->sign()); } - public function testGetNickName() - { - $user = new User(); - $this->assertEquals( - trans('general.unexistent-user'), - $user->getNickName() - ); - } - public function testGetPlayerNameAttribute() { $user = factory(User::class)->create(); diff --git a/tests/PlayerControllerTest.php b/tests/PlayerControllerTest.php index 27dbd3e2..d8d2e063 100644 --- a/tests/PlayerControllerTest.php +++ b/tests/PlayerControllerTest.php @@ -174,6 +174,7 @@ class PlayerControllerTest extends TestCase public function testRename() { + Event::fake(); $player = factory(Player::class)->create(); $user = $player->user; @@ -219,7 +220,6 @@ class PlayerControllerTest extends TestCase ]); // Success - $this->expectsEvents(Events\PlayerProfileUpdated::class); $this->postJson('/user/player/rename', [ 'pid' => $player->pid, 'new_player_name' => 'new_name', @@ -230,6 +230,7 @@ class PlayerControllerTest extends TestCase ['old' => $player->name, 'new' => 'new_name'] ), ]); + Event::assertDispatched(Events\PlayerProfileUpdated::class); // Single player option(['single_player' => true]); @@ -289,16 +290,15 @@ class PlayerControllerTest extends TestCase public function testClearTexture() { + Event::fake(); $player = factory(Player::class)->create(); $user = $player->user; - $player->setTexture([ - 'tid_skin' => 1, - 'tid_cape' => 2, - ]); - $player = Player::find($player->pid); + $player->tid_skin = 1; + $player->tid_cape = 2; + $player->save(); + $player->refresh(); - $this->expectsEvents(Events\PlayerProfileUpdated::class); $this->actAs($user) ->postJson('/user/player/texture/clear', [ 'pid' => $player->pid, @@ -311,6 +311,7 @@ class PlayerControllerTest extends TestCase ]); $this->assertEquals(0, Player::find($player->pid)->tid_skin); $this->assertEquals(0, Player::find($player->pid)->tid_cape); + Event::assertDispatched(Events\PlayerProfileUpdated::class); } public function testBind() diff --git a/tests/TextureControllerTest.php b/tests/TextureControllerTest.php index be43dac4..994e6161 100644 --- a/tests/TextureControllerTest.php +++ b/tests/TextureControllerTest.php @@ -27,12 +27,14 @@ class TextureControllerTest extends TestCase // Player is banned $player = factory(Player::class)->create(['tid_skin' => $steve->tid]); - $player->user->setPermission(User::BANNED); + $player->user->permission = User::BANNED; + $player->user->save(); $this->get("/{$player->name}.json") ->assertSee(trans('general.player-banned')) ->assertStatus(403); - $player->user->setPermission(User::NORMAL); + $player->user->permission = User::NORMAL; + $player->user->save(); // Default API is CSL API $this->getJson("/{$player->name}.json")