diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index f4c506e0..df2e92ab 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -9,9 +9,7 @@ use Option; use App\Models\User; use App\Models\Player; use App\Models\Texture; -use App\Models\PlayerModel; use Illuminate\Http\Request; -use App\Events\PlayerWasAdded; use App\Exceptions\PrettyPageException; class PlayerController extends Controller @@ -49,26 +47,19 @@ class PlayerController extends Controller 'player_name' => 'required|'.(Option::get('allow_chinese_playername') == "1") ? 'pname_chinese' : 'player_name' ]); - $player_name = $request->input('player_name'); + $player = new Player(null, $request->input('player_name')); - if (!PlayerModel::where('player_name', $player_name)->get()->isEmpty()) + if ($player->is_registered) { return json(trans('user.player.add.repeated'), 6); + } - if ($this->user->getScore() < Option::get('score_per_player')) + if ($this->user->getScore() < Option::get('score_per_player')) { return json(trans('user.player.add.lack-score'), 7); + } - $player = new PlayerModel(); - $player->uid = $this->user->uid; - $player->player_name = $player_name; - $player->preference = "default"; - $player->last_modified = Utils::getTimeFormatted(); - $player->save(); + $player->register($this->user); - Event::fire(new PlayerWasAdded($player)); - - $this->user->setScore(Option::get('score_per_player'), 'minus'); - - return json(trans('user.player.add.success', ['name' => $player_name]), 0); + return json(trans('user.player.add.success', ['name' => $request->input('player_name')]), 0); } public function delete(Request $request) @@ -78,7 +69,7 @@ class PlayerController extends Controller if ($this->player->delete()) { $this->user->setScore(Option::get('score_per_player'), 'plus'); - return json("trans('user.player.delete.success', ['name' => $player_name])", 0); + return json(trans('user.player.delete.success', ['name' => $player_name]), 0); } } @@ -93,15 +84,17 @@ class PlayerController extends Controller 'new_player_name' => 'required|'.(Option::get('allow_chinese_playername') == "1") ? 'pname_chinese' : 'player_name' ]); - $new_player_name = $request->input('new_player_name'); + $new_name = $request->input('new_player_name'); - if (!PlayerModel::where('player_name', $new_player_name)->get()->isEmpty()) + if ((new Player(null, $new_name))->is_registered) { return json(trans('user.player.rename.repeated'), 6); + } - $old_player_name = $this->player->player_name; - $this->player->rename($new_player_name); + $old_name = $this->player->player_name; - return json(trans('user.player.rename.success', ['old' => $old_player_name, 'new' => $new_player_name]), 0); + $this->player->rename($new_name); + + return json(trans('user.player.rename.success', ['old' => $old_name, 'new' => $new_name]), 0); } /** diff --git a/app/Models/Player.php b/app/Models/Player.php index 6425f676..44943699 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -7,7 +7,9 @@ use Event; use Utils; use Storage; use Response; +use App\Models\User; use App\Events\GetPlayerJson; +use App\Events\PlayerWasAdded; use App\Events\PlayerWasDeleted; use App\Events\PlayerProfileUpdated; use App\Exceptions\PrettyPageException; @@ -19,6 +21,8 @@ class Player public $is_banned = false; + public $is_registered = false; + public $model; /** @@ -43,21 +47,21 @@ class Player $this->pid = $pid; $this->model = PlayerModel::find($pid); } else { + $this->player_name = $player_name; $this->model = PlayerModel::where('player_name', $player_name)->first(); } - if (!$this->model) { - abort(404, '角色不存在'); - } else { + if ($this->model) { $this->pid = $this->model->pid; + + $this->player_name = $this->model->player_name; + + $this->owner = new User($this->model->uid); + + $this->is_registered = true; + + $this->is_banned = ($this->owner->getPermission() == "-1"); } - - $this->player_name = $this->model->player_name; - - $this->owner = new User($this->model->uid); - - if ($this->owner->getPermission() == "-1") - $this->is_banned = true; } /** @@ -123,8 +127,9 @@ class Player } /** - * Set preferred model - * @param string $type, 'slim' or 'default' + * Set preferred model. + * + * @param string $type 'slim' or 'default' */ public function setPreference($type) { @@ -141,6 +146,35 @@ class Player return $this->model['preference']; } + /** + * Register a new player. + * + * @param User $owner Owner of the player. + * @return void + */ + public function register(User $owner) + { + $this->owner = $owner; + + $player = new PlayerModel(); + + $player->uid = $this->owner->uid; + $player->player_name = $this->player_name; + $player->preference = "default"; + $player->last_modified = Utils::getTimeFormatted(); + $player->save(); + + Event::fire(new PlayerWasAdded($player)); + + $this->owner->setScore(option('score_per_player'), 'minus'); + } + + /** + * Rename the player. + * + * @param string $new_name + * @return mixed + */ public function rename($new_name) { $this->model->update([ @@ -153,6 +187,11 @@ class Player return Event::fire(new PlayerProfileUpdated($this)); } + /** + * Set a new owner for the player. + * + * @param int $uid + */ public function setOwner($uid) { $this->model->update(['uid' => $uid]);