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;
});