파기 요청 추가
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'],
|
'dest'=>$letter['dest'],
|
||||||
'prev_no'=>$letter['prev_no'],
|
'prev_no'=>$letter['prev_no'],
|
||||||
'state'=>$letter['state'],
|
'state'=>$letter['state'],
|
||||||
|
'state_opt'=>($letter['aux']['state_opt']??null),
|
||||||
'brief'=>$letter['text_brief'],
|
'brief'=>$letter['text_brief'],
|
||||||
'detail'=>$letter['text_detail'],
|
'detail'=>$letter['text_detail'],
|
||||||
'date'=>$letter['date']
|
'date'=>$letter['date']
|
||||||
|
|||||||
+100
-5
@@ -65,12 +65,10 @@ function repondLetter(letterNo, isAgree, reason){
|
|||||||
}
|
}
|
||||||
}).then(function(data){
|
}).then(function(data){
|
||||||
if(!data){
|
if(!data){
|
||||||
$text.val(text);
|
|
||||||
alert()
|
alert()
|
||||||
return quickReject('응답을 실패했습니다.');
|
return quickReject('응답을 실패했습니다.');
|
||||||
}
|
}
|
||||||
if(!data.result){
|
if(!data.result){
|
||||||
$text.val(text);
|
|
||||||
return quickReject('응답을 실패했습니다. : '+data.reason);
|
return quickReject('응답을 실패했습니다. : '+data.reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,12 +99,10 @@ function rollbackLetter(letterNo){
|
|||||||
}
|
}
|
||||||
}).then(function(data){
|
}).then(function(data){
|
||||||
if(!data){
|
if(!data){
|
||||||
$text.val(text);
|
|
||||||
alert()
|
alert()
|
||||||
return quickReject('회수를 실패했습니다.');
|
return quickReject('회수를 실패했습니다.');
|
||||||
}
|
}
|
||||||
if(!data.result){
|
if(!data.result){
|
||||||
$text.val(text);
|
|
||||||
return quickReject('회수를 실패했습니다. : '+data.reason);
|
return quickReject('회수를 실패했습니다. : '+data.reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,6 +119,78 @@ function rollbackLetter(letterNo){
|
|||||||
return false;
|
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;
|
||||||
|
|
||||||
|
}, errUnknown)
|
||||||
|
.fail(function(reason){
|
||||||
|
alert(reason);
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
function drawLetter(idx, letterObj){
|
function drawLetter(idx, letterObj){
|
||||||
|
|
||||||
if(letterObj.state == 'cancelled'){
|
if(letterObj.state == 'cancelled'){
|
||||||
@@ -170,7 +238,16 @@ function drawLetter(idx, letterObj){
|
|||||||
'cancelled':'거부됨',
|
'cancelled':'거부됨',
|
||||||
'replaced':'대체됨',
|
'replaced':'대체됨',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var stateOptionText = {
|
||||||
|
'try_destroy_src':'송신측의 파기 요청',
|
||||||
|
'try_destroy_dest':'수신측의 파기 요청',
|
||||||
|
}
|
||||||
$letter.find('.letterStatus').text(stateText[letterObj.state]);
|
$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){
|
if(letterObj.prev_no !== null){
|
||||||
var $showPrev = $('<a href="#">#{0}</a>'.format(letterObj.prev_no));
|
var $showPrev = $('<a href="#">#{0}</a>'.format(letterObj.prev_no));
|
||||||
$showPrev.click(function(){
|
$showPrev.click(function(){
|
||||||
@@ -216,10 +293,27 @@ function drawLetter(idx, letterObj){
|
|||||||
if(!confirm('회수하시겠습니까?')){
|
if(!confirm('회수하시겠습니까?')){
|
||||||
return false;
|
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(){
|
$letter.find('.btnRenew').click(function(){
|
||||||
var $inputPrevNo = $('#inputPrevNo');
|
var $inputPrevNo = $('#inputPrevNo');
|
||||||
@@ -320,6 +414,7 @@ function drawLetters(lettersObj){
|
|||||||
|
|
||||||
if(permissionLevel == 4){
|
if(permissionLevel == 4){
|
||||||
initNewLetterForm(lettersObj);
|
initNewLetterForm(lettersObj);
|
||||||
|
$('.letterActionPlate').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
$('.letterObj').detach();//첫 버전이니까 일괄 삭제 일괄 로드
|
$('.letterObj').detach();//첫 버전이니까 일괄 삭제 일괄 로드
|
||||||
|
|||||||
+3
-2
@@ -89,7 +89,7 @@ var permissionLevel = <?=$permission?>; //
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr><th class='bg1'>문서 번호</th><td><span class='letterNo'></span></td></tr>
|
<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='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='letterBrief'></div></td></tr>
|
||||||
<tr><th class='bg1'>내용(외교권자 전용)</th><td><div class='letterDetail'></div></td></tr>
|
<tr><th class='bg1'>내용(외교권자 전용)</th><td><div class='letterDetail'></div></td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -105,10 +105,11 @@ var permissionLevel = <?=$permission?>; //
|
|||||||
<div class="signerName"> </div>
|
<div class="signerName"> </div>
|
||||||
</div>
|
</div>
|
||||||
</td></tr>
|
</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='btnAgree' style='display:none;'>승인</button>
|
||||||
<button type='button' class='btnDisagree' 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='btnRollback' style='display:none;'>회수</button>
|
||||||
|
<button type='button' class='btnDestroy' style='display:none;'>파기</button>
|
||||||
<button type='button' class='btnRenew'>추가 문서 작성</button>
|
<button type='button' class='btnRenew'>추가 문서 작성</button>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
|
|||||||
Reference in New Issue
Block a user