Files
core/hwe/j_diplomacy_send_letter.php

198 lines
5.2 KiB
PHP

<?php
namespace sammo;
use sammo\Enums\MessageType;
include "lib.php";
include "func.php";
WebUtil::requireAJAX();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
$destNationNo = Util::getPost('destNation', 'int', 0);
$prevNo = Util::getPost('prevNo', 'int', null);
$textBrief = Util::getPost('brief');
$textDetail = Util::getPost('detail');
increaseRefresh("외교부", 1);
if($prevNo < 1){
$prevNo = null;
}
$me = $db->queryFirstRow(
'SELECT no, name, nation, officer_level, permission, refresh_score, turntime, belong, penalty, picture, imgsvr FROM `general`
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner=%i', $userID
);
$limitState = checkLimit($me['refresh_score']);
if ($limitState >= 2) {
Json::die([
'result'=>false,
'reason'=>'접속 제한입니다.'
]);
}
if($destNationNo == $me['nation']){
Json::die([
'result'=>false,
'reason'=>'자국으로 보낼 수 없습니다.'
]);
}
if($textBrief === null || $textDetail === null){
Json::die([
'result'=>false,
'reason'=>'올바르지 않은 입력입니다.'
]);
}
$textBrief = trim($textBrief);
$textDetail = trim($textDetail);
if(!$textBrief){
Json::die([
'result'=>false,
'reason'=>'요약문이 비어있습니다'
]);
}
$permission = checkSecretPermission($me);
if ($permission < 4) {
Json::die([
'result'=>false,
'reason'=>'권한이 부족합니다. 수뇌부가 아닙니다.'
]);
}
$srcNationNo = $me['nation'];
if($prevNo !== null){
//state는 체크하지 않는걸로 하자. 파기한 것을 재 송신하는 경우도 있을 수 있음.
$prevLetter = $db->queryFirstRow(
'SELECT no, src_nation_id, dest_nation_id, state, aux FROM ng_diplomacy WHERE no = %i AND src_nation_id IN (%i, %i) AND dest_nation_id IN (%i, %i)',
$prevNo,
$srcNationNo, $destNationNo,
$srcNationNo, $destNationNo
);
if(!$prevLetter){
Json::die([
'result'=>false,
'reason'=>'이전 문서가 없습니다.'
]);
}
//새로 나온 문서가 있는지 확인하자
$newerLetter = $db->queryFirstField(
'SELECT count(no) FROM ng_diplomacy WHERE prev_no = %i AND state != \'cancelled\'', $prevNo
);
if($newerLetter){
Json::die([
'result'=>false,
'reason'=>'해당 문서에 대한 새로운 문서가 이미 있습니다.'
]);
}
if($prevLetter['src_nation_id'] != $srcNationNo){
$destNationNo = $prevLetter['src_nation_id'];
}
else{
$destNationNo = $prevLetter['dest_nation_id'];
}
if($prevLetter['state'] == 'proposed'){
$prevAux = Json::decode($prevLetter['aux']);
$prevAux['reason'] = [
'who'=>$me['no'],
'action'=>'new_letter',
'reason'=>'new_letter'
];
$db->update('ng_diplomacy', [
'state'=>'replaced',
'aux'=>Json::encode($prevAux)
], 'no=%i', $prevNo);
}
}
$nations = $db->query('SELECT nation, name, color FROM nation WHERE nation IN (%i, %i)', $srcNationNo, $destNationNo);
if(count($nations) != 2){
Json::die([
'result'=>false,
'reason'=>'올바르지 않은 국가입니다.'
]);
}
if($nations[0]['nation'] == $me['nation']){
//index 순서에 따라 또 모름.
$srcNation = $nations[0];
$destNation = $nations[1];
}
else{
$srcNation = $nations[1];
$destNation = $nations[0];
}
$me['icon'] = GetImageURL($me['imgsvr'], $me['picture']);
$db->insert('ng_diplomacy', [
'src_nation_id'=>$srcNation['nation'],
'dest_nation_id'=>$destNation['nation'],
'prev_no'=>$prevNo,
'state'=>'proposed',
'text_brief'=>$textBrief,
'text_detail'=>$textDetail,
'date'=>TimeUtil::now(),
'src_signer'=>$me['no'],
'dest_signer'=>null,
'aux'=>Json::encode([
'src'=>[
'nationName'=>$srcNation['name'],
'nationColor'=>$srcNation['color'],
'generalName'=>$me['name'],
'generalIcon'=>$me['icon']
],
'dest'=>[
'nationName'=>$destNation['name'],
'nationColor'=>$destNation['color']
]
]),
]);
$newLetterNo = $db->insertId();
$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']);
$now = new \DateTime();
$unlimited = new \DateTime('9999-12-31');
$josaYi = JosaUtil::pick($newLetterNo, '이');
if($prevNo){
$msgText = "문서 #{$prevNo}의 새로운 외교 문서 #{$newLetterNo}{$josaYi} 준비되었습니다. 외교부에서 확인해주세요.";
}
else{
$msgText = "새로운 외교 문서 #{$newLetterNo}{$josaYi} 준비되었습니다. 외교부에서 확인해주세요.";
}
$msg = new Message(
MessageType::diplomacy,
$src,
$dest,
$msgText,
$now,
$unlimited,
['deletable' => false]
);
$msgID = $msg->send();
Json::die([
'result'=>true,
'reason'=>'success',
'row_id'=>$db->insertId()
]);