Merge commit 'b6f76562e2c6999af16502d802bd523a8484e167' into ng_turn

This commit is contained in:
2019-04-07 22:44:43 +09:00
13 changed files with 284 additions and 33 deletions
+15 -3
View File
@@ -130,6 +130,14 @@ for($i=1; $i <= $count; $i++) {
elseif($level5['npc'] == 1) { $l5 = "<font color=skyblue>{$level5['name']}</font>"; }
else { $l5 = $level5['name']; }
$generals = $db->query('SELECT no,nation,npc,name,level,penalty,permission FROM general WHERE nation=%i ORDER BY no ASC', $nation['nation']);
$ambassadors = [];
foreach($generals as $general){
if(checkSecretPermission($general, false) == 4){
$ambassadors[] = $general['name'];
}
}
echo "
<table align=center width=1000 class='tb_layout bg2'>
<tr>
@@ -143,7 +151,7 @@ for($i=1; $i <= $count; $i++) {
<td width=80 align=center id=bg1>국 력</td>
<td width=170 align=center>{$nation['power']}</td>
<td width=80 align=center id=bg1>장수 / 속령</td>
<td width=170 align=center>{$gencount} / {$citycount}</td>
<td width=170 align=center>".count($generals)." / {$citycount}</td>
</tr>
<tr>
<td align=center id=bg1>".getLevel(12, $nation['level'])."</td>
@@ -165,6 +173,11 @@ for($i=1; $i <= $count; $i++) {
<td align=center id=bg1>".getLevel( 5, $nation['level'])."</td>
<td align=center>$l5</td>
</tr>
<tr>
<td align=center id=bg1>외교권자</td><td colspan=7>";
echo join(', ', $ambassadors);
echo "</td>
</tr>
<tr>
<td colspan=8>";
if($nation['level'] > 0) {
@@ -190,8 +203,7 @@ for($i=1; $i <= $count; $i++) {
</tr>
<tr>
<td colspan=8> 장수 일람 : ";
for($j=0; $j < $gencount; $j++) {
$general = MYDB_fetch_array($genresult);
foreach($generals as $general){
if($general['npc'] >= 2) { echo "<font color=cyan>{$general['name']}</font>, "; }
elseif($general['npc'] == 1) { echo "<font color=skyblue>{$general['name']}</font>, "; }
else { echo "{$general['name']}, "; }
-1
View File
@@ -85,7 +85,6 @@ var scoutmsg = <?=Json::encode($nation['scoutmsg']??'')?>;
<td width=80 align=center class=bg1>상태</td>
<td width=60 align=center class=bg1>기간</td>
<td width=100 align=center class=bg1>종 료 시 점</td>
<td align=center class=bg1>비 고</td>
</tr>
<?php
$admin = $gameStor->getValues(['year','month']);
+77 -5
View File
@@ -35,8 +35,12 @@ if($meLevel == 0) {
<title><?=UniqueConst::$serverName?>: 인사부</title>
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('../e_lib/select2/select2.full.min.js')?>
<?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printJS('js/bossInfo.js')?>
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
<?=WebUtil::printCSS('../e_lib/select2/select2.min.css')?>
<?=WebUtil::printCSS('../e_lib/select2/select2-bootstrap4.css')?>
<?=WebUtil::printCSS('../d_shared/common.css')?>
<?=WebUtil::printCSS('css/common.css')?>
<script type="text/javascript">
@@ -45,6 +49,51 @@ function out() {
}
</script>
<?php
$query = "select nation,name,level,color,l12set,l11set,l10set,l9set,l8set,l7set,l6set,l5set from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result); //국가정보
$ambassadors = $db->query('SELECT no, name, level, penalty, permission FROM general WHERE permission = \'ambassador\' AND nation = %i', $nation['nation']);
$auditors = $db->query('SELECT no, name, level, penalty, permission FROM general WHERE permission = \'auditor\' AND nation = %i', $nation['nation']);
$candidateAmbassadors = [];
$candidateAuditors = [];
foreach($ambassadors as $ambassador){
$candidateAmbassadors[] = $ambassador;
}
foreach($auditors as $auditor){
$candidateAuditors[] = $auditor;
}
foreach($db->query('SELECT no, name, nation, level, penalty, permission FROM general WHERE nation = %i AND permission = \'normal\' AND level != 12', $nation['nation']) as $candidate){
$maxPermission = checkSecretMaxPermission($candidate);
if($maxPermission == 4){
$candidateAmbassadors[] = $candidate;
}
if($maxPermission >= 3){
$candidateAuditors[] = $candidate;
}
}
?>
<script>
var candidateAmbassadors = <?=Json::encode(array_map(function($value){
return [
'id'=>$value['no'],
'text'=>$value['name'],
"selected"=>($value['permission']!='normal')
];
}, $candidateAmbassadors))?>;
var candidateAuditors = <?=Json::encode(array_map(function($value){
return [
'id'=>$value['no'],
'text'=>$value['name'],
"selected"=>($value['permission']!='normal')
];
}, $candidateAuditors))?>;
</script>
</head>
<body>
@@ -55,10 +104,6 @@ function out() {
<?php
$query = "select nation,name,level,color,l12set,l11set,l10set,l9set,l8set,l7set,l6set,l5set from nation where nation='{$me['nation']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$nation = MYDB_fetch_array($result); //국가정보
$lv = getNationChiefLevel($nation['level']);
if($meLevel >= 5) { $btn = "submit"; }
else { $btn = "hidden"; }
@@ -77,6 +122,7 @@ $tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connec
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
echo "
<table align=center width=1000 class='tb_layout bg0'>
<tr>
@@ -279,9 +325,35 @@ for($i=10; $i >= $lv; $i--) {
echo "
<tr><td colspan=4>※ <font color=red>빨간색</font>은 현재 임명중인 장수, <font color=orange>노란색</font>은 다른 관직에 임명된 장수, 하얀색은 일반 장수를 뜻합니다.</td></tr>
</table>
";
if($meLevel == 12):
?>
<table align='center' width='1000' class='tb_layout bg0'>
<tr><td colspan='4' height='5'></td></tr>
<tr><td colspan='4' align='center' bgcolor='purple'>외 교 권 자 임 명</td></tr>
<tr>
<td width=98 align=right id=bg1>외교권자</td>
<td width=398>
<select id="selectAmbassador" multiple="multiple">
</select>
<button id='changeAmbassador' type='button'>임명</button>
</td>
<td width=98 align=right id=bg1>조언자</td>
<td width=398>
<select id="selectAuditor" multiple="multiple">
</select>
<button id='changeAuditor' type='button'>임명</button>
</td>
</tr>
</table>
<?php
endif;
?>
<table align=center width=1000 class='tb_layout bg0'>
<tr><td colspan=5 height=5></td></tr>
";
<?php
if($meLevel >= 5) {
echo "
<tr><td colspan=5 align=center bgcolor=orange>도 시 관 직 임 명</td></tr>
+16 -10
View File
@@ -395,6 +395,20 @@ function myNationInfo() {
";
}
function checkSecretMaxPermission($me){
$secretMax = 4;
if($penalty['noTopSecret']??false){
$secretMax = 1;
}
else if($penalty['noChief']??false){
$secretMax = 1;
}
else if($penalty['noAmbassador']??false){
$secretMax = 2;
}
return $secretMax;
}
function checkSecretPermission($me, $checkSecretLimit=true){
if(!key_exists('penalty', $me) || !key_exists('permission', $me)){
trigger_error ('canAccessSecret() 함수에 필요한 인자가 부족');
@@ -416,16 +430,8 @@ function checkSecretPermission($me, $checkSecretLimit=true){
}
$secretMin = 0;
$secretMax = 4;
if($penalty['noTopSecret']??false){
$secretMax = 1;
}
else if($penalty['noChief']??false){
$secretMax = 1;
}
else if($penalty['noAmbassador']??false){
$secretMax = 2;
}
$secretMax = checkSecretMaxPermission($me);
if($me['level'] == 12){
$secretMin = 4;
+1 -1
View File
@@ -14,7 +14,7 @@ $text = Util::getReq('text');
increaseRefresh("회의실", 1);
$me = $db->queryFirstRow('SELECT no, nation, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
$me = $db->queryFirstRow('SELECT no, nation, name, level, permission, con, turntime, belong, penalty FROM general WHERE owner=%i', $userID);
$con = checkLimit($me['con']);
if ($con >= 2) {
+1 -1
View File
@@ -62,7 +62,7 @@ foreach(
) as $comment
){
//TODO:아이콘 받아오기?
$articles[$article['no']]['comment'] = $comment;
$articles[$comment['document_no']]['comment'][] = $comment;
}
Json::die([
+80
View File
@@ -0,0 +1,80 @@
<?php
namespace sammo;
include "lib.php";
include "func.php";
// $btn, $level, $genlist, $outlist
//TODO: 변경이 완료되면 항상 공지되어야함
$isAmbassador = Util::getReq('isAmbassador', bool);
$genlist = Util::getReq('genlist', 'array_int');
//로그인 검사
$session = Session::requireGameLogin([])->setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$me = $db->queryFirstRow('SELECT no, level, nation FROM general WHERE owner = %i', $userID);
if(!$me || $me['level'] != 12){
Json::die([
'result'=>false,
'reason'=>'군주가 아닙니다',
'tmp'=>$me
]);
}
$nationID = $me['nation'];
if($isAmbassador){
$targetType = 'ambassador';
$targetLevel = 4;
if(count($genlist) > 2){
Json::die([
'result'=>false,
'reason'=>'외교권자는 최대 둘까지만 설정 가능합니다.'
]);
}
}
else{
$targetType = 'auditor';
$targetLevel = 3;
}
$db->update('general', [
'permission'=>'normal'
], 'nation = %i AND permission = %s', $nationID, $targetType);
if(!$genlist){
Json::die([
'result'=>true,
'reason'=>'success'
]);
}
$realCandidates = [];
foreach($db->query('SELECT no, nation, level, penalty, permission FROM general WHERE nation = %i AND level != 12 AND permission = \'normal\' AND no IN %li', $nationID, $genlist) as $candidate){
$maxPermission = checkSecretMaxPermission($candidate);
if($maxPermission < $targetLevel){
continue;
}
$realCandidates[] = $candidate['no'];
}
if(!$realCandidates){
Json::die([
'result'=>true,
'reason'=>'success'
]);
}
$db->update('general', [
'permission'=>$targetType,
], 'no IN %li', $realCandidates);
Json::die([
'result'=>true,
'reason'=>'success'
]);
+7 -5
View File
@@ -48,7 +48,8 @@ function submitArticle(){
function submitComment(){
var $this = $(this);
var $article = $this.parents('.article').eq(0);
var $article = $this.closest('.articleObj').eq(0);
var articleNo = $article.data('no');
var $text = $article.find('input.commentText');
var text = $.trim($text.val());
@@ -96,8 +97,8 @@ function drawArticle(idx, articleObj){
.data('no', articleObj.no)
.data('author', articleObj.general_no);
console.log(articleObj);
$article.find('.articleNo').text(articleObj.no);
$article.find('.authorName').text(articleObj.author);
$article.find('.articleTitle').text(articleObj.title);
$article.find('.date').text(articleObj.date);
@@ -107,7 +108,7 @@ function drawArticle(idx, articleObj){
var $articleComment = $article.find('ul.commentList');
$.each(articleObj.comment, function(commentObj){
$.each(articleObj.comment, function(_, commentObj){
var $comment = $commentFrame.clone();
$comment.find('.author').text(commentObj.author);
//$comment.find('.text').text(commentObj.text);
@@ -116,6 +117,8 @@ function drawArticle(idx, articleObj){
$articleComment.append($comment);
});
$article.find('.submitComment').click(submitComment);
var $board = $('#board');
$board.append($article);
@@ -150,7 +153,6 @@ function loadArticles(){
$(function(){
$('#submitArticle').click(submitArticle);
$('.submitComment').click(submitComment);
loadArticles()
.then(drawArticles, errUnknown)
+81
View File
@@ -0,0 +1,81 @@
function changePermission(isAmbassador, rawGeneralList){
console.log(isAmbassador);
console.log(rawGeneralList);
var generalList = [];
$.each(rawGeneralList, function(idx, value){
generalList.push(parseInt(value.id));
})
$.post({
url:'j_general_set_permission.php',
dataType:'json',
data:{
isAmbassador:isAmbassador,
genlist:generalList
},
}).then(function(data){
if(!data){
alert('변경하지 못했습니다.');
return false;
}
if(!data.result){
alert('변경하지 못했습니다. : '+data.reason);
return false;
}
alert('변경했습니다.');
location.reload();
}, errUnknown);
}
$(function(){
$('#selectAmbassador').select2({
theme: 'bootstrap4',
placeholder: "",
allowClear: true,
language: "ko",
width:300,
maximumSelectionLength: 2,
containerCss: {
display: "inline-block !important;",
color: 'white !important'
},
data:candidateAmbassadors,
//containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
});
$('#selectAuditor').select2({
theme: 'bootstrap4',
placeholder: "",
allowClear: true,
language: "ko",
width:300,
maximumSelectionLength: 2,
containerCss: {
display: "inline-block !important;",
color: 'white !important'
},
data:candidateAuditors,
//containerCssClass: 'simple-select2-align-center bg-secondary text-secondary',
dropdownCssClass: 'simple-select2-align-center bg-secondary text-secondary',
});
$('#changeAmbassador').click(function(){
if(!confirm('외교권자를 변경할까요?')){
return false;
}
changePermission(true, $('#selectAmbassador').select2('data'));
return false;
});
$('#changeAuditor').click(function(){
if(!confirm('조언자를 변경할까요?')){
return false;
}
changePermission(false, $('#selectAuditor').select2('data'));
return false;
})
})
+1 -1
View File
@@ -523,7 +523,7 @@ function activateMessageForm(){
jQuery(function($){
//tmp_template.html은 추후 msg.js에 통합될 수 있음
var getTemplate = $.get('js/templates/message.html?9',function(obj){
var getTemplate = $.get('js/templates/message.html?10',function(obj){
messageTemplate = obj;
});
+1 -1
View File
@@ -12,7 +12,7 @@
</div>
<div class="msg_body">
<div class="msg_header">
<%if(!this.option && !this.option.action && src.id == myGeneralID && now <= last5min && invalidType == 'msg_valid'){%>
<%if(!this.option.action && src.id == myGeneralID && now <= last5min && invalidType == 'msg_valid'){%>
<button type="button" data-erase_until="<%last5min%>" class="btn btn btn-outline-warning btn-sm btn-delete-msg" style='float:right'></button>
<%}%>
<%if(msgType == 'private') {%>
+2 -2
View File
@@ -275,8 +275,8 @@ class Message
return '본인의 메시지만 삭제할 수 있습니다.';
}
if($msgObj->msgType == Message::MSGTYPE_DIPLOMACY){
return '외교 메시지는 삭제할 수 없습니다.';
if($msgObj instanceof DiplomaticMessage){
return '시스템 외교 메시지는 삭제할 수 없습니다.';
}
$prev5min = new \DateTime();
+2 -3
View File
@@ -77,18 +77,17 @@ var isSecretBoard = <?=($isSecretBoard?'true':'false')?>; //
<!-- 설계미스. template와 shadowdom으로 변경 -->
<div id='articleTemplate' style='display:none;'>
<div class='articleFrame'>
<div><span class='articleTitle'></span></div>
<div>#<span class='articleNo'></span> <span class='articleTitle'></span></div>
<div class='authorPlate'><span class='authorIcon'></span><span class='authorName'></span><span class='date'></span></div>
<div class='text'>
</div>
</div>
<div class='commentFrame'>
<ul class='commentList'>
</ul>
<div>
<input class='commentText' type='text' maxlength='250'></input>
<input class='commentText' type='text' maxlength='250'>
<button type='button' class='submitComment'>등록</button>
</div>
</div>