feat: 군주/외교권자에게 부대명 변경 기능 부여
This commit is contained in:
+33
-12
@@ -12,7 +12,8 @@ $db = DB::db();
|
|||||||
|
|
||||||
increaseRefresh("부대편성", 1);
|
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 = [];
|
$troops = [];
|
||||||
foreach ($db->query('SELECT troop_leader,name FROM troop WHERE nation = %i', $me['nation']) as $rawTroop) {
|
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) {
|
|||||||
|
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
<table width=1000 class='tb_layout bg0'>
|
<div class="row">
|
||||||
<tr>
|
<?php if($me['troop'] == 0): ?>
|
||||||
<td width=80 class='bg1'>부 대 명</td>
|
<div class="col-6"><?php /*TODO: 모바일 */ ?>
|
||||||
<td width=130><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='nameplate'></td>
|
<div class="row gx-0 bg0">
|
||||||
<?php if ($me['troop'] == 0) : ?>
|
<div class="bg1 col d-grid"><span class="align-self-center center">부대명</span></div>
|
||||||
<td><input type=button id='btnCreateTroop' value='부 대 창 설'></td>
|
<div class="col d-grid"><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='newTroopName'></div>
|
||||||
<?php else : ?>
|
<div class="col d-grid"><button type='button' id="btnCreateTroop" class='btn btn-sm btn-secondary'>부대 창설</button></div>
|
||||||
<td><input type=button id='btnChangeTroopName' value='부 대 변 경'></td>
|
</div>
|
||||||
<?php endif; ?>
|
</div>
|
||||||
</tr>
|
<?php endif; ?>
|
||||||
</table>
|
<?php if($troops && ($me['troop'] == $me['no'] || $permission == 4)): ?>
|
||||||
|
<div class="col-6">
|
||||||
|
<div class="row gx-0 bg0">
|
||||||
|
<div class="bg1 col d-grid"><span class="align-self-center center">부대명</span></div>
|
||||||
|
<div class="col d-grid"><select class="form-select" id="changeNameTroopID">
|
||||||
|
<?php if($permission != 4): ?>
|
||||||
|
<option value="<?=$me['troop']?>"><?=$troops[$me['troop']]['name']?></option>
|
||||||
|
<?php else: ?>
|
||||||
|
<?php foreach ($troops as $troopNo => $troop): ?>
|
||||||
|
<option value="<?=$troopNo?>"><?=$troop['name']?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col d-grid"><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='changeTroopName'></div>
|
||||||
|
<div class="col d-grid"><button type='button' id="btnChangeTroopName" class='btn btn-sm btn-secondary'>이름 변경</button></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<table width=1000 class='tb_layout bg0'>
|
<table width=1000 class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -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($action == '부대추방'){
|
||||||
if (!$gen){
|
if (!$gen){
|
||||||
Json::die([
|
Json::die([
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo\API\Nation;
|
||||||
|
|
||||||
|
use sammo\Session;
|
||||||
|
use DateTimeInterface;
|
||||||
|
use sammo\DB;
|
||||||
|
use sammo\StringUtil;
|
||||||
|
use sammo\Validator;
|
||||||
|
|
||||||
|
use function sammo\checkSecretPermission;
|
||||||
|
|
||||||
|
class SetTroopName extends \sammo\BaseAPI
|
||||||
|
{
|
||||||
|
public function validateArgs(): ?string
|
||||||
|
{
|
||||||
|
$v = new Validator($this->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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -226,6 +226,10 @@ const apiRealPath = {
|
|||||||
},
|
},
|
||||||
GetGeneralLogResponse
|
GetGeneralLogResponse
|
||||||
>,
|
>,
|
||||||
|
SetTroopName: PATCH as APICallT<{
|
||||||
|
troopID: number;
|
||||||
|
troopName: string;
|
||||||
|
}>,
|
||||||
},
|
},
|
||||||
Vote: {
|
Vote: {
|
||||||
AddComment: POST as APICallT<{
|
AddComment: POST as APICallT<{
|
||||||
|
|||||||
+20
-18
@@ -3,6 +3,8 @@ import "@scss/troop.scss";
|
|||||||
import { errUnknown } from "@/common_legacy";
|
import { errUnknown } from "@/common_legacy";
|
||||||
import { launchTroopPlugin } from "@/extPluginTroop";
|
import { launchTroopPlugin } from "@/extPluginTroop";
|
||||||
import jQuery from "jquery";
|
import jQuery from "jquery";
|
||||||
|
import { SammoAPI } from "./SammoAPI";
|
||||||
|
import { isString } from "lodash";
|
||||||
|
|
||||||
jQuery(function($){
|
jQuery(function($){
|
||||||
//btnJoinTroop, btnLeaveTroop, btnKickTroop, btnCreateTroop, btnChangeTroopName
|
//btnJoinTroop, btnLeaveTroop, btnKickTroop, btnCreateTroop, btnChangeTroopName
|
||||||
@@ -35,7 +37,7 @@ jQuery(function($){
|
|||||||
dataType:'json',
|
dataType:'json',
|
||||||
data:{
|
data:{
|
||||||
action:'부대창설',
|
action:'부대창설',
|
||||||
name:$('#nameplate').val()
|
name:$('#newTroopName').val()
|
||||||
}
|
}
|
||||||
}).then(function(data){
|
}).then(function(data){
|
||||||
console.log(data);
|
console.log(data);
|
||||||
@@ -50,24 +52,24 @@ jQuery(function($){
|
|||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#btnChangeTroopName').click(function(){
|
$('#btnChangeTroopName').on('click', async ()=>{
|
||||||
$.post({
|
try{
|
||||||
url:'j_troop.php',
|
await SammoAPI.Nation.SetTroopName({
|
||||||
dataType:'json',
|
troopID: parseInt($('#changeNameTroopID').val() as string),
|
||||||
data:{
|
troopName: $('#changeTroopName').val() as string,
|
||||||
action:'부대변경',
|
});
|
||||||
name:$('#nameplate').val()
|
|
||||||
}
|
|
||||||
}).then(function(data){
|
|
||||||
console.log(data);
|
|
||||||
if(!data.result){
|
|
||||||
alert(data.reason);
|
|
||||||
location.reload();
|
|
||||||
}
|
|
||||||
|
|
||||||
location.reload();
|
location.reload();
|
||||||
|
}
|
||||||
}, errUnknown);
|
catch(e){
|
||||||
|
console.error(e);
|
||||||
|
if(isString(e)){
|
||||||
|
alert(e);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
errUnknown();
|
||||||
|
}
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user