feat: 군주/외교권자에게 부대명 변경 기능 부여

This commit is contained in:
2022-07-05 00:46:45 +09:00
parent f9a73be82b
commit 47366086d5
5 changed files with 122 additions and 56 deletions
+33 -12
View File
@@ -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) {
</table>
<br>
<table width=1000 class='tb_layout bg0'>
<tr>
<td width=80 class='bg1'>부 대 명</td>
<td width=130><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='nameplate'></td>
<?php if ($me['troop'] == 0) : ?>
<td><input type=button id='btnCreateTroop' value='부 대 창 설'></td>
<?php else : ?>
<td><input type=button id='btnChangeTroopName' value='부 대 변 경'></td>
<?php endif; ?>
</tr>
</table>
<div class="row">
<?php if($me['troop'] == 0): ?>
<div class="col-6"><?php /*TODO: 모바일 */ ?>
<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"><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='newTroopName'></div>
<div class="col d-grid"><button type='button' id="btnCreateTroop" class='btn btn-sm btn-secondary'>부대 창설</button></div>
</div>
</div>
<?php endif; ?>
<?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'>
<tr>
-26
View File
@@ -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([
+65
View File
@@ -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;
}
}
+4
View File
@@ -226,6 +226,10 @@ const apiRealPath = {
},
GetGeneralLogResponse
>,
SetTroopName: PATCH as APICallT<{
troopID: number;
troopName: string;
}>,
},
Vote: {
AddComment: POST as APICallT<{
+20 -18
View File
@@ -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;
});