From 47366086d507c5c4b791eb9d5b38d0375c6b128a Mon Sep 17 00:00:00 2001 From: Hide_D Date: Tue, 5 Jul 2022 00:46:45 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B5=B0=EC=A3=BC/=EC=99=B8=EA=B5=90?= =?UTF-8?q?=EA=B6=8C=EC=9E=90=EC=97=90=EA=B2=8C=20=EB=B6=80=EB=8C=80?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/b_troop.php | 45 ++++++++++++++----- hwe/j_troop.php | 26 ----------- hwe/sammo/API/Nation/SetTroopName.php | 65 +++++++++++++++++++++++++++ hwe/ts/SammoAPI.ts | 4 ++ hwe/ts/troop.ts | 38 ++++++++-------- 5 files changed, 122 insertions(+), 56 deletions(-) create mode 100644 hwe/sammo/API/Nation/SetTroopName.php diff --git a/hwe/b_troop.php b/hwe/b_troop.php index 6cd8c10e..5260b3ac 100644 --- a/hwe/b_troop.php +++ b/hwe/b_troop.php @@ -12,7 +12,8 @@ $db = DB::db(); increaseRefresh("부대편성", 1); -$me = $db->queryFirstRow('SELECT no,nation,troop FROM general WHERE owner=%i', $userID); +$me = $db->queryFirstRow('SELECT no,nation,troop,`officer_level`,permission,penalty FROM general WHERE owner=%i', $userID); +$permission = checkSecretPermission($me, false); $troops = []; foreach ($db->query('SELECT troop_leader,name FROM troop WHERE nation = %i', $me['nation']) as $rawTroop) { @@ -204,17 +205,37 @@ uasort($troops, function ($lhs, $rhs) {
- - - - - - - - - - -
부 대 명
+
+ +
+
+
부대명
+
+
+
+
+ + +
+
+
부대명
+
+
+
+
+
+
+ +
+ diff --git a/hwe/j_troop.php b/hwe/j_troop.php index 90152801..007912ba 100644 --- a/hwe/j_troop.php +++ b/hwe/j_troop.php @@ -53,32 +53,6 @@ if($action == '부대창설'){ ]); } -if($action == '부대변경'){ - $name = StringUtil::neutralize($name); - if(!$name){ - Json::die([ - 'result'=>false, - 'reason'=>'부대 이름이 없습니다.' - ]); - } - - $db->update('troop', [ - 'name'=>$name - ], 'troop_leader=%i',$generalID); - - if($db->affectedRows() == 0){ - Json::die([ - 'result'=>false, - 'reason'=>'부대장이 아닙니다.' - ]); - } - - Json::die([ - 'result'=>true, - 'reason'=>'success' - ]); -} - if($action == '부대추방'){ if (!$gen){ Json::die([ diff --git a/hwe/sammo/API/Nation/SetTroopName.php b/hwe/sammo/API/Nation/SetTroopName.php new file mode 100644 index 00000000..b8689d6f --- /dev/null +++ b/hwe/sammo/API/Nation/SetTroopName.php @@ -0,0 +1,65 @@ +args); + $v->rule('required', [ + 'troopID', + 'troopName', + ]) + ->rule('stringWidthBetween', 'troopName', 1, 18) + ->rule('integer', 'troopID'); + + if (!$v->validate()) { + return $v->errorStr(); + } + return null; + } + + public function getRequiredSessionMode(): int + { + return static::REQ_GAME_LOGIN | static::REQ_READ_ONLY; + } + + public function launch(Session $session, ?DateTimeInterface $modifiedSince, ?string $reqEtag) + { + $userID = $session->userID; + $db = DB::db(); + $me = $db->queryFirstRow('SELECT `no`,nation,`officer_level`,permission,penalty FROM general WHERE `owner`=%i', $userID); + $permission = checkSecretPermission($me, false); + $troopID = $this->args['troopID']; + + $generalID = $me['no']; + if($generalID != $troopID && $permission < 4){ + return "권한이 부족합니다."; + } + + $troopName = StringUtil::neutralize($this->args['troopName']); + if(!$troopName){ + return '부대 이름이 없습니다.'; + } + + $nationID = $me['nation']; + $db->update('troop', [ + 'name'=>$troopName + ], 'troop_leader=%i AND `nation`=%i',$troopID, $nationID); + + if($db->affectedRows() == 0){ + return '부대가 없습니다.'; + } + + return null; + } +} diff --git a/hwe/ts/SammoAPI.ts b/hwe/ts/SammoAPI.ts index 95d7a654..b09d2ea5 100644 --- a/hwe/ts/SammoAPI.ts +++ b/hwe/ts/SammoAPI.ts @@ -226,6 +226,10 @@ const apiRealPath = { }, GetGeneralLogResponse >, + SetTroopName: PATCH as APICallT<{ + troopID: number; + troopName: string; + }>, }, Vote: { AddComment: POST as APICallT<{ diff --git a/hwe/ts/troop.ts b/hwe/ts/troop.ts index 2ccd6f54..74542a32 100644 --- a/hwe/ts/troop.ts +++ b/hwe/ts/troop.ts @@ -3,6 +3,8 @@ import "@scss/troop.scss"; import { errUnknown } from "@/common_legacy"; import { launchTroopPlugin } from "@/extPluginTroop"; import jQuery from "jquery"; +import { SammoAPI } from "./SammoAPI"; +import { isString } from "lodash"; jQuery(function($){ //btnJoinTroop, btnLeaveTroop, btnKickTroop, btnCreateTroop, btnChangeTroopName @@ -35,7 +37,7 @@ jQuery(function($){ dataType:'json', data:{ action:'부대창설', - name:$('#nameplate').val() + name:$('#newTroopName').val() } }).then(function(data){ console.log(data); @@ -50,24 +52,24 @@ jQuery(function($){ return false; }); - $('#btnChangeTroopName').click(function(){ - $.post({ - url:'j_troop.php', - dataType:'json', - data:{ - action:'부대변경', - name:$('#nameplate').val() - } - }).then(function(data){ - console.log(data); - if(!data.result){ - alert(data.reason); - location.reload(); - } - + $('#btnChangeTroopName').on('click', async ()=>{ + try{ + await SammoAPI.Nation.SetTroopName({ + troopID: parseInt($('#changeNameTroopID').val() as string), + troopName: $('#changeTroopName').val() as string, + }); location.reload(); - - }, errUnknown); + } + catch(e){ + console.error(e); + if(isString(e)){ + alert(e); + } + else{ + errUnknown(); + } + location.reload(); + } return false; });