파기 요청 추가
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
namespace sammo;
|
||||
|
||||
include "lib.php";
|
||||
include "func.php";
|
||||
//로그인 검사
|
||||
$session = Session::requireGameLogin()->setReadOnly();
|
||||
$userID = Session::getUserID();
|
||||
|
||||
$db = DB::db();
|
||||
|
||||
$letterNo = Util::getReq('letterNo', 'int');
|
||||
|
||||
increaseRefresh("외교부", 1);
|
||||
|
||||
$me = $db->queryFirstRow('SELECT no, name, nation, level, permission, con, turntime, belong, penalty, picture, imgsvr FROM general WHERE owner=%i', $userID);
|
||||
|
||||
$con = checkLimit($me['con']);
|
||||
if ($con >= 2) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'접속 제한입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
if($letterNo === null){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'올바르지 않은 입력입니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$permission = checkSecretPermission($me);
|
||||
if ($permission < 4) {
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$letter = $db->queryFirstRow('SELECT * FROM ng_diplomacy WHERE no=%i AND (src_nation_id = %i OR dest_nation_id = %i) AND state = \'activated\'', $letterNo, $me['nation'], $me['nation']);
|
||||
if(!$letter){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'서신이 없습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
$aux = Json::decode($letter['aux']);
|
||||
|
||||
|
||||
$stateOpt = $aux['state_opt']??null;
|
||||
|
||||
if(($stateOpt == 'try_destroy_src' && $letter['src_nation_id'] == $me['nation'])||
|
||||
($stateOpt == 'try_destroy_dest' && $letter['dest_nation_id'] == $me['nation'])){
|
||||
Json::die([
|
||||
'result'=>false,
|
||||
'reason'=>'이미 파기 신청을 했습니다.'
|
||||
]);
|
||||
}
|
||||
|
||||
$srcNation = getNationStaticInfo($letter['src_nation_id']);
|
||||
$destNation = getNationStaticInfo($letter['dest_nation_id']);
|
||||
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
|
||||
|
||||
|
||||
if($letter['src_nation_id'] == $me['nation']){
|
||||
$src = new MessageTarget($me['no'], $me['name'], $srcNation['nation'], $srcNation['name'], $srcNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $destNation['nation'], $destNation['name'], $destNation['color']);
|
||||
}
|
||||
else{
|
||||
$src = new MessageTarget($me['no'], $me['name'], $destNation['nation'], $destNation['name'], $destNation['color'], $me['icon']);
|
||||
$dest = new MessageTarget(0, '', $srcNation['nation'], $srcNation['name'], $srcNation['color']);
|
||||
}
|
||||
|
||||
|
||||
$now = new \DateTime();
|
||||
$unlimited = new \DateTime('9999-12-31');
|
||||
|
||||
if(in_array($stateOpt, ['try_destroy_src', 'try_destroy_dest'])){
|
||||
$deleteLetterNo = $letterNo;
|
||||
$db->update('ng_diplomacy', [
|
||||
'state'=>'cancelled',
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
while(true){
|
||||
$deleteLetter = $db->queryFirstRow('SELECT prev_no, aux FROM ng_diplomacy WHERE no = %i AND state = \'replaced\'', $currentLetterNo);
|
||||
if(!$deleteLetter){
|
||||
break;
|
||||
}
|
||||
$deleteAux = Json::decode($deleteLetter['aux']);
|
||||
$deleteLetterNo = $deleteLetter['prev_no'];
|
||||
$deleteAux['reason'] = [
|
||||
'who'=>$me['no'],
|
||||
'action'=>'destroy',
|
||||
'reason'=>'파기'
|
||||
];
|
||||
}
|
||||
$msgText = "외교 서신 #{$letterNo}를 파기했습니다.";
|
||||
$lastState = 'cancelled';
|
||||
}
|
||||
else{
|
||||
if ($letter['src_nation_id'] == $me['nation']) {
|
||||
$aux['state_opt'] = 'try_destroy_src';
|
||||
}
|
||||
else{
|
||||
$aux['state_opt'] = 'try_destroy_dest';
|
||||
}
|
||||
$db->update('ng_diplomacy', [
|
||||
'aux'=>Json::encode($aux)
|
||||
], 'no=%i', $letterNo);
|
||||
|
||||
$msgText = "외교 서신 #{$letterNo}를 파기 요청합니다.";
|
||||
$lastState = 'activated';
|
||||
}
|
||||
|
||||
$msg = new Message(
|
||||
Message::MSGTYPE_DIPLOMACY,
|
||||
$src,
|
||||
$dest,
|
||||
$msgText,
|
||||
$now,
|
||||
$unlimited,
|
||||
['invalid' => true]
|
||||
);
|
||||
$msgID = $msg->send();
|
||||
|
||||
Json::die([
|
||||
'result'=>true,
|
||||
'reason'=>'success',
|
||||
'state'=>$lastState
|
||||
]);
|
||||
@@ -59,6 +59,7 @@ foreach(
|
||||
'dest'=>$letter['dest'],
|
||||
'prev_no'=>$letter['prev_no'],
|
||||
'state'=>$letter['state'],
|
||||
'state_opt'=>($letter['aux']['state_opt']??null),
|
||||
'brief'=>$letter['text_brief'],
|
||||
'detail'=>$letter['text_detail'],
|
||||
'date'=>$letter['date']
|
||||
|
||||
+102
-7
@@ -65,12 +65,10 @@ function repondLetter(letterNo, isAgree, reason){
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
$text.val(text);
|
||||
alert()
|
||||
return quickReject('응답을 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
$text.val(text);
|
||||
return quickReject('응답을 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
@@ -101,16 +99,86 @@ function rollbackLetter(letterNo){
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
$text.val(text);
|
||||
alert()
|
||||
return quickReject('회수를 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
$text.val(text);
|
||||
return quickReject('회수를 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
alert('회수했습니다.');
|
||||
alert('회수 했습니다.');
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function destoryLetter(letterNo){
|
||||
$.post({
|
||||
url:'j_diplomacy_destory_letter.php',
|
||||
dataType:'json',
|
||||
data:{
|
||||
letterNo:letterNo,
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert()
|
||||
return quickReject('파기를 실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
return quickReject('파기를 실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
if(data.state == 'activated'){
|
||||
alert('파기를 요청 했습니다.');
|
||||
}
|
||||
else{
|
||||
alert('파기 되었습니다.');
|
||||
}
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
|
||||
}, errUnknown)
|
||||
.fail(function(reason){
|
||||
alert(reason);
|
||||
});
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function destroyLetter(letterNo){
|
||||
var actionName = '회수를 ';
|
||||
var target = 'j_diplomacy_rollback_letter.php';
|
||||
if(!isRollback){
|
||||
actionName = '파기 요청을 '
|
||||
target = 'j_diplomacy_destroy_letter.php';
|
||||
}
|
||||
$.post({
|
||||
url:target,
|
||||
dataType:'json',
|
||||
data:{
|
||||
letterNo:letterNo,
|
||||
}
|
||||
}).then(function(data){
|
||||
if(!data){
|
||||
alert()
|
||||
return quickReject(actionName+'실패했습니다.');
|
||||
}
|
||||
if(!data.result){
|
||||
return quickReject(actionName+'실패했습니다. : '+data.reason);
|
||||
}
|
||||
|
||||
if(isRollback){
|
||||
|
||||
}
|
||||
alert(actionName+'했습니다.');
|
||||
|
||||
location.reload();
|
||||
return false;
|
||||
@@ -170,7 +238,16 @@ function drawLetter(idx, letterObj){
|
||||
'cancelled':'거부됨',
|
||||
'replaced':'대체됨',
|
||||
};
|
||||
|
||||
var stateOptionText = {
|
||||
'try_destroy_src':'송신측의 파기 요청',
|
||||
'try_destroy_dest':'수신측의 파기 요청',
|
||||
}
|
||||
$letter.find('.letterStatus').text(stateText[letterObj.state]);
|
||||
|
||||
if(letterObj.state_opt !== null){
|
||||
$letter.find('.letterStatusOpt').text('('+stateOptionText[letterObj.state_opt]+')');
|
||||
}
|
||||
if(letterObj.prev_no !== null){
|
||||
var $showPrev = $('<a href="#">#{0}</a>'.format(letterObj.prev_no));
|
||||
$showPrev.click(function(){
|
||||
@@ -216,9 +293,26 @@ function drawLetter(idx, letterObj){
|
||||
if(!confirm('회수하시겠습니까?')){
|
||||
return false;
|
||||
}
|
||||
return rollbackLetter(letterObj.no, false);
|
||||
return rollbackLetter(letterObj.no);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(letterObj.state == 'activated'){
|
||||
var $btnDestroy = $letter.find('.btnDestroy');
|
||||
if((letterObj.src.nationID==myNationID && letterObj.state_opt == 'try_destroy_src') ||
|
||||
(letterObj.dest.nationID==myNationID && letterObj.state_opt == 'try_destroy_dest')){
|
||||
$btnDestroy.show().prop('disabled', true);
|
||||
}
|
||||
else{
|
||||
$btnDestroy.show().click(function(){
|
||||
if(!confirm('본 문서를 파기하겠습니까? (상호 동의 필요)')){
|
||||
return false;
|
||||
}
|
||||
return destroyLetter(letterObj.no);
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$letter.find('.btnRenew').click(function(){
|
||||
@@ -320,6 +414,7 @@ function drawLetters(lettersObj){
|
||||
|
||||
if(permissionLevel == 4){
|
||||
initNewLetterForm(lettersObj);
|
||||
$('.letterActionPlate').show();
|
||||
}
|
||||
|
||||
$('.letterObj').detach();//첫 버전이니까 일괄 삭제 일괄 로드
|
||||
|
||||
+3
-2
@@ -89,7 +89,7 @@ var permissionLevel = <?=$permission?>; //
|
||||
<tbody>
|
||||
<tr><th class='bg1'>문서 번호</th><td><span class='letterNo'></span></td></tr>
|
||||
<tr><th class='bg1'>이전 문서</th><td><span class='letterPrevNo'></span></td></tr>
|
||||
<tr><th class='bg1'>상태</th><td><span class='letterStatus'></span></td></tr>
|
||||
<tr><th class='bg1'>상태</th><td><span class='letterStatus'></span><span class='letterStatusOpt'></span></td></tr>
|
||||
<tr><th class='bg1'>내용(국가 내 공개)</th><td><div class='letterBrief'></div></td></tr>
|
||||
<tr><th class='bg1'>내용(외교권자 전용)</th><td><div class='letterDetail'></div></td></tr>
|
||||
</tbody>
|
||||
@@ -105,10 +105,11 @@ var permissionLevel = <?=$permission?>; //
|
||||
<div class="signerName"> </div>
|
||||
</div>
|
||||
</td></tr>
|
||||
<tr class='letterActionPlate'><th class='bg1'>동작</th><td>
|
||||
<tr class='letterActionPlate' style='display:none;'><th class='bg1'>동작</th><td>
|
||||
<button type='button' class='btnAgree' style='display:none;'>승인</button>
|
||||
<button type='button' class='btnDisagree' style='display:none;'>거부</button>
|
||||
<button type='button' class='btnRollback' style='display:none;'>회수</button>
|
||||
<button type='button' class='btnDestroy' style='display:none;'>파기</button>
|
||||
<button type='button' class='btnRenew'>추가 문서 작성</button>
|
||||
</td></tr>
|
||||
</tfoot>
|
||||
|
||||
Reference in New Issue
Block a user