서버 커스터마이징 가능

This commit is contained in:
2020-06-21 17:03:32 +09:00
parent 929d2db5a5
commit 0ec99d8ba1
16 changed files with 2815 additions and 2792 deletions
+90 -90
View File
@@ -1,90 +1,90 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
$db = RootDB::db();
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl, oauth_type, token_valid_until FROM `member` WHERE `NO` = %i', $userID);
if(!$member['picture']){
$picture = ServConfig::getSharedIconPath().'/default.jpg';
}
else{
$picture = $member['picture'];
if(strlen($picture) > 11){
$picture = substr($picture, 0, -10);
}
$pictureFSPath = AppConf::getUserIconPathFS().'/'.$picture;
if(file_exists($pictureFSPath)){
$picture = AppConf::getUserIconPathWeb().'/'.$picture;
}
else{
$picture = ServConfig::getSharedIconPath().'/'.$picture;
}
}
$tokenValidUntil = $member['token_valid_until'];
if($member['grade'] == 6) {
$grade = '운영자';
} elseif($member['grade'] == 5) {
$grade = '부운영자';
} elseif($member['grade'] > 1) {
$grade = '특별회원';
} elseif($member['grade'] == 1) {
$grade = '일반회원';
} elseif($member['grade'] == 0) {
$grade = '블럭회원';
}
$acl = [];
//TODO: Acl을 관리하기 위한 별도의 객체 필요
foreach(Json::decode($member['acl']??'{}') as $serverName=>$aclList){
$serverKorName = AppConf::getList()[$serverName]->getKorName();
$aclTextList = array_map(function($aclName){
$aclText = "알수없음[{$aclName}]";
switch($aclName){
case 'openClose':$aclText='서버여닫기';break;
case 'reset':$aclText='서버리셋';break;
case 'update':$aclText='업데이트';break;
case 'fullUpdate':$aclText='임의업데이트';break;
case 'vote':$aclText='설문조사';break;
case 'globalNotice':$aclText='전역공지';break;
case 'notice':$aclText='공지';break;
case 'blockGeneral':$aclText='장수징계';break;
}
return $aclText;
}, $aclList);
$acl[] = sprintf("%s(%s)", $serverKorName, join(",", $aclTextList));
}
if($acl){
$acl = join(",<br>", $acl);
}
else{
$acl = "-";
}
Json::die([
'result'=>true,
'reason'=>'success',
'id'=>$member['id'],
'name'=>$member['name'],
'grade'=>$grade,
'picture'=>$picture,
'global_salt'=>RootDB::getGlobalSalt(),
'join_date'=>$member['reg_date'],
'third_use'=>($member['third_use']!=0),
'acl'=>$acl,
'oauth_type'=>$member['oauth_type'],
'token_valid_until'=>$tokenValidUntil
]);
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
$db = RootDB::db();
$member = $db->queryFirstRow('SELECT `id`, `name`, `grade`, `picture`, reg_date, third_use, acl, oauth_type, token_valid_until FROM `member` WHERE `NO` = %i', $userID);
if(!$member['picture']){
$picture = ServConfig::getSharedIconPath().'/default.jpg';
}
else{
$picture = $member['picture'];
if(strlen($picture) > 11){
$picture = substr($picture, 0, -10);
}
$pictureFSPath = AppConf::getUserIconPathFS().'/'.$picture;
if(file_exists($pictureFSPath)){
$picture = AppConf::getUserIconPathWeb().'/'.$picture;
}
else{
$picture = ServConfig::getSharedIconPath().'/'.$picture;
}
}
$tokenValidUntil = $member['token_valid_until'];
if($member['grade'] == 6) {
$grade = '운영자';
} elseif($member['grade'] == 5) {
$grade = '부운영자';
} elseif($member['grade'] > 1) {
$grade = '특별회원';
} elseif($member['grade'] == 1) {
$grade = '일반회원';
} elseif($member['grade'] == 0) {
$grade = '블럭회원';
}
$acl = [];
//TODO: Acl을 관리하기 위한 별도의 객체 필요
foreach(Json::decode($member['acl']??'{}') as $serverName=>$aclList){
$serverKorName = ServConfig::getServerList()[$serverName]->getKorName();
$aclTextList = array_map(function($aclName){
$aclText = "알수없음[{$aclName}]";
switch($aclName){
case 'openClose':$aclText='서버여닫기';break;
case 'reset':$aclText='서버리셋';break;
case 'update':$aclText='업데이트';break;
case 'fullUpdate':$aclText='임의업데이트';break;
case 'vote':$aclText='설문조사';break;
case 'globalNotice':$aclText='전역공지';break;
case 'notice':$aclText='공지';break;
case 'blockGeneral':$aclText='장수징계';break;
}
return $aclText;
}, $aclList);
$acl[] = sprintf("%s(%s)", $serverKorName, join(",", $aclTextList));
}
if($acl){
$acl = join(",<br>", $acl);
}
else{
$acl = "-";
}
Json::die([
'result'=>true,
'reason'=>'success',
'id'=>$member['id'],
'name'=>$member['name'],
'grade'=>$grade,
'picture'=>$picture,
'global_salt'=>RootDB::getGlobalSalt(),
'join_date'=>$member['reg_date'],
'third_use'=>($member['third_use']!=0),
'acl'=>$acl,
'oauth_type'=>$member['oauth_type'],
'token_valid_until'=>$tokenValidUntil
]);
+57 -57
View File
@@ -1,58 +1,58 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
$session = Session::requireLogin([])->setReadOnly();
$db = RootDB::db();
if($session->userGrade < 5){
Json::die([
'result'=>false,
'reason'=>'권한이 부족합니다'
]);
}
$userList = [];
foreach($db->query('SELECT member.*, max(member_log.date) as loginDate from member
left join member_log on member.`NO` = member_log.member_no and member_log.action_type="login"
group by member.no order by member.no asc') as $member){
if($member['IMGSVR']){
$icon = AppConf::getUserIconPathWeb().'/'.$member['PICTURE'];
}
else{
$icon = ServConfig::getSharedIconPath().'/'.$member['PICTURE'];
}
$userList[] = [
'userID'=>$member['NO'],
'userName'=>$member['ID'],
'email'=>$member['EMAIL'],
'authType'=>$member['oauth_type'],
'userGrade'=>$member['GRADE'],
'blockUntil'=>$member['BLOCK_DATE'],
'nickname'=>$member['NAME'],
'icon'=>$icon,
'joinDate'=>$member['REG_DATE'],
'loginDate'=>$member['loginDate'],
'deleteAfter'=>$member['delete_after']
];
}
$serverList = [];
foreach(AppConf::getList() as $serverName => $setting){
if($setting->isRunning()){
$serverList[] = $serverName;
}
}
$system = $db->queryFirstRow('SELECT `REG`, `LOGIN` FROM `system` limit 1');
Json::die([
'result'=>true,
'users'=>$userList,
'servers'=>$serverList,
'allowJoin'=>$system['REG']=='Y',
'allowLogin'=>$system['LOGIN']=='Y'
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
$session = Session::requireLogin([])->setReadOnly();
$db = RootDB::db();
if($session->userGrade < 5){
Json::die([
'result'=>false,
'reason'=>'권한이 부족합니다'
]);
}
$userList = [];
foreach($db->query('SELECT member.*, max(member_log.date) as loginDate from member
left join member_log on member.`NO` = member_log.member_no and member_log.action_type="login"
group by member.no order by member.no asc') as $member){
if($member['IMGSVR']){
$icon = AppConf::getUserIconPathWeb().'/'.$member['PICTURE'];
}
else{
$icon = ServConfig::getSharedIconPath().'/'.$member['PICTURE'];
}
$userList[] = [
'userID'=>$member['NO'],
'userName'=>$member['ID'],
'email'=>$member['EMAIL'],
'authType'=>$member['oauth_type'],
'userGrade'=>$member['GRADE'],
'blockUntil'=>$member['BLOCK_DATE'],
'nickname'=>$member['NAME'],
'icon'=>$icon,
'joinDate'=>$member['REG_DATE'],
'loginDate'=>$member['loginDate'],
'deleteAfter'=>$member['delete_after']
];
}
$serverList = [];
foreach(ServConfig::getServerList() as $serverName => $setting){
if($setting->isRunning()){
$serverList[] = $serverName;
}
}
$system = $db->queryFirstRow('SELECT `REG`, `LOGIN` FROM `system` limit 1');
Json::die([
'result'=>true,
'users'=>$userList,
'servers'=>$serverList,
'allowJoin'=>$system['REG']=='Y',
'allowLogin'=>$system['LOGIN']=='Y'
]);
+106 -106
View File
@@ -1,107 +1,107 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
// $_FILES['image_upload'] : 사진파일
$defaultImg = 'default.jpg';
$image = $_FILES['image_upload'];
$ext = strrchr($image['name'], ".");
$size = getImageSize($image['tmp_name']);
$imageType = $size[2];
$availableImageType = array('.jpg'=>IMAGETYPE_JPEG, '.png'=>IMAGETYPE_PNG, '.gif'=>IMAGETYPE_GIF);
$db = RootDB::db();
$member = $db->queryFirstRow('SELECT `ID`, `PICTURE` FROM `member` WHERE `NO` = %i', $userID);
$picName = $member['PICTURE'];
$newExt = array_search($imageType, $availableImageType, true);
if($picName && strlen($picName) > 11){
$dt = substr($picName, -8);
$picName = substr($picName, 0, -10);
}
else{
$dt = '00000000';
}
$rf = date('Ymd');
$response['result'] = false;
$response['reason'] = '요청이 올바르지 않습니다!';
if(!is_uploaded_file($image['tmp_name'])) {
//진짜 전송된 파일인지 검증
$response['reason'] = '업로드가 되지 않았습니다!';
$response['result'] = false;
} elseif(!$newExt) {
//확장자 검사
$response['reason'] = 'jpg, gif, png 파일이 아닙니다!';
$response['result'] = false;
} elseif($image['size'] > 30720) {
//파일크기 검사
$response['reason'] = '30kb 이하로 올려주세요!';
$response['result'] = false;
} elseif($size[0] < 64 || 128 < $size[0]) {
//이미지크기 검사
$response['reason'] = '64x64 ~ 128x128 사이여야 합니다.';
$response['result'] = false;
} elseif($size[0] != $size[1]) {
//이미지크기 검사
$response['reason'] = '1:1 비율 이미지여야 합니다.';
$response['result'] = false;
}elseif($dt == $rf) {
//갱신날짜 검사
$response['reason'] = '1일 1회 변경 가능합니다!';
$response['result'] = false;
} else {
//이미지 저장
while(true){
$newPicName = dechex(rand(0x000000f,0xfffffff)).$newExt;
$dest = AppConf::getUserIconPathFS().'/'.$newPicName;
if(file_exists($dest)){
continue;
}
break;
}
if(!move_uploaded_file($image['tmp_name'], $dest)) {
$response['reason'] = '업로드에 실패했습니다!';
$response['result'] = false;
} else {
$pic = "{$newPicName}?={$rf}";
RootDB::db()->update('member',[
'PICTURE' => $pic,
'IMGSVR' => 1
], 'NO=%i', $userID);
$servers = [];
foreach(AppConf::getList() as $key=>$setting){
if($setting->isRunning()){
$servers[] = [$key, $setting->getKorName()];
}
}
$response['servers'] = $servers;
$response['reason'] = '업로드에 성공했습니다!';
$response['result'] = true;
}
}
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
// $_FILES['image_upload'] : 사진파일
$defaultImg = 'default.jpg';
$image = $_FILES['image_upload'];
$ext = strrchr($image['name'], ".");
$size = getImageSize($image['tmp_name']);
$imageType = $size[2];
$availableImageType = array('.jpg'=>IMAGETYPE_JPEG, '.png'=>IMAGETYPE_PNG, '.gif'=>IMAGETYPE_GIF);
$db = RootDB::db();
$member = $db->queryFirstRow('SELECT `ID`, `PICTURE` FROM `member` WHERE `NO` = %i', $userID);
$picName = $member['PICTURE'];
$newExt = array_search($imageType, $availableImageType, true);
if($picName && strlen($picName) > 11){
$dt = substr($picName, -8);
$picName = substr($picName, 0, -10);
}
else{
$dt = '00000000';
}
$rf = date('Ymd');
$response['result'] = false;
$response['reason'] = '요청이 올바르지 않습니다!';
if(!is_uploaded_file($image['tmp_name'])) {
//진짜 전송된 파일인지 검증
$response['reason'] = '업로드가 되지 않았습니다!';
$response['result'] = false;
} elseif(!$newExt) {
//확장자 검사
$response['reason'] = 'jpg, gif, png 파일이 아닙니다!';
$response['result'] = false;
} elseif($image['size'] > 30720) {
//파일크기 검사
$response['reason'] = '30kb 이하로 올려주세요!';
$response['result'] = false;
} elseif($size[0] < 64 || 128 < $size[0]) {
//이미지크기 검사
$response['reason'] = '64x64 ~ 128x128 사이여야 합니다.';
$response['result'] = false;
} elseif($size[0] != $size[1]) {
//이미지크기 검사
$response['reason'] = '1:1 비율 이미지여야 합니다.';
$response['result'] = false;
}elseif($dt == $rf) {
//갱신날짜 검사
$response['reason'] = '1일 1회 변경 가능합니다!';
$response['result'] = false;
} else {
//이미지 저장
while(true){
$newPicName = dechex(rand(0x000000f,0xfffffff)).$newExt;
$dest = AppConf::getUserIconPathFS().'/'.$newPicName;
if(file_exists($dest)){
continue;
}
break;
}
if(!move_uploaded_file($image['tmp_name'], $dest)) {
$response['reason'] = '업로드에 실패했습니다!';
$response['result'] = false;
} else {
$pic = "{$newPicName}?={$rf}";
RootDB::db()->update('member',[
'PICTURE' => $pic,
'IMGSVR' => 1
], 'NO=%i', $userID);
$servers = [];
foreach(ServConfig::getServerList() as $key=>$setting){
if($setting->isRunning()){
$servers[] = [$key, $setting->getKorName()];
}
}
$response['servers'] = $servers;
$response['reason'] = '업로드에 성공했습니다!';
$response['result'] = true;
}
}
Json::die($response);
+55 -55
View File
@@ -1,56 +1,56 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
$respone = [];
$db = RootDB::db();
$picName = $db->queryFirstField('SELECT picture FROM `member` WHERE `NO` = %i', $userID);
if($picName && strlen($picName) > 11){
$dt = substr($picName, -8);
$picName = substr($picName, 0, -10);
}
else{
$dt = '00000000';
}
$dest = AppConf::getUserIconPathFS().'/'.$picName;
$rf = date('Ymd');
$response['result'] = false;
$response['reason'] = '요청이 올바르지 않습니다!';
if($dt == $rf) {
//갱신날짜 검사
$response['reason'] = '1일 1회 변경 가능합니다!';
$response['result'] = false;
} else {
$db->update('member', [
'PICTURE'=>'default.jpg',
'IMGSVR'=>0,
], 'NO=%i', $userID);
$servers = [];
foreach(AppConf::getList() as $key=>$setting){
if($setting->isRunning()){
$servers[] = [$key, $setting->getKorName()];
}
}
$response['servers'] = $servers;
$response['reason'] = '제거에 성공했습니다!';
$response['result'] = true;
}
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
$userID = Session::getUserID();
// 외부 파라미터
$respone = [];
$db = RootDB::db();
$picName = $db->queryFirstField('SELECT picture FROM `member` WHERE `NO` = %i', $userID);
if($picName && strlen($picName) > 11){
$dt = substr($picName, -8);
$picName = substr($picName, 0, -10);
}
else{
$dt = '00000000';
}
$dest = AppConf::getUserIconPathFS().'/'.$picName;
$rf = date('Ymd');
$response['result'] = false;
$response['reason'] = '요청이 올바르지 않습니다!';
if($dt == $rf) {
//갱신날짜 검사
$response['reason'] = '1일 1회 변경 가능합니다!';
$response['result'] = false;
} else {
$db->update('member', [
'PICTURE'=>'default.jpg',
'IMGSVR'=>0,
], 'NO=%i', $userID);
$servers = [];
foreach(ServConfig::getServerList() as $key=>$setting){
if($setting->isRunning()){
$servers[] = [$key, $setting->getKorName()];
}
}
$response['servers'] = $servers;
$response['reason'] = '제거에 성공했습니다!';
$response['result'] = true;
}
Json::die($response);
+117 -117
View File
@@ -1,117 +1,117 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin(null);
// 외부 파라미터
// $_POST['action'] : 'notice', 'open', 'close', 'reset', 'reset_full'
// $_POST['notice'] : 공지
// $_POST['server'] : 서버 인덱스
$action = Util::getPost('action', 'string', '');
$notice = Util::getPost('notice', 'string', '');
$server = Util::getPost('server', 'string', '');
$db = RootDB::db();
$userGrade = $session->userGrade;
$acl = $session->acl;
$session->setReadOnly();
if($userGrade < 5 && !$acl) {
Json::die([
'result'=>'FAIL',
'msg'=>'운영자 권한이 없습니다.'
]);
}
function doServerModeSet($server, $action, &$response, $session){
$serverList = AppConf::getList();
$settingObj = $serverList[$server];
$serverAcl = $session->acl[$server]??[];
$userGrade = $session->userGrade;
$serverDir = $settingObj->getShortName();
$serverPath = $settingObj->getBasePath();
$realServerPath = realpath(dirname(__FILE__)).'/'.$serverPath;
if($action == 'close') { //폐쇄
$doClose = false;
if($userGrade >= 5){
$doClose = true;
}
else if(in_array('openClose', $serverAcl)){
$doClose = true;
}
if(!$doClose && in_array('reset', $serverAcl) && file_exists($serverPath.'/d_setting/DB.php')){
require($serverPath.'/lib.php');
$localGameStorage = KVStorage::getStorage(DB::db(), 'game_env');
//천통 이후, 오픈 직후는 닫을 수 있음
$localGameStorage->cacheValues(['isunited', 'startyear', 'year']);
if($localGameStorage->isunited){
$doClose = true;
}
else if($localGameStorage->year < $localGameStorage->startyear + 2){
$doClose = true;
}
}
if(!$doClose){
if(in_array('reset', $serverAcl)){
$response['msg'] = '서버 시작 직후, 또는 천하통일 이후에만 닫을 수 있습니다.';
}
else{
$response['msg'] = '서버 닫기 권한이 부족합니다.';
}
return false;
}
return $settingObj->closeServer();
} elseif($action == 'reset' && $userGrade >= 6) {//리셋
//FIXME: reset, reset_full 구현
if(file_exists($serverPath.'/d_setting/DB.php')){
@unlink($serverPath.'/d_setting/DB.php');
}
$response['installURL'] = $serverDir."/install.php";
} elseif($action == 'open' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) {//오픈
return $settingObj->openServer();
} else{
$response['msg'] = '올바르지 않은 요청입니다';
return false;
}
return true;
}
function doAdminPost($action, $notice, $server, $session){
$response = ['result' => 'FAIL'];
$globalAcl = $session->acl['global']??[];
$userGrade = $session->userGrade;
if($action == 'notice' && ($userGrade >= 5 || in_array('notice', $globalAcl))) {
RootDB::db()->update('system', ['NOTICE'=>$notice], true);
$response['result'] = 'SUCCESS';
return $response;
}
if(doServerModeSet($server, $action, $response, $session)){
$response['result'] = 'SUCCESS';
return $response;
}
return $response;
}
$response = doAdminPost($action, $notice, $server, $session);
Json::die($response);
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin(null);
// 외부 파라미터
// $_POST['action'] : 'notice', 'open', 'close', 'reset', 'reset_full'
// $_POST['notice'] : 공지
// $_POST['server'] : 서버 인덱스
$action = Util::getPost('action', 'string', '');
$notice = Util::getPost('notice', 'string', '');
$server = Util::getPost('server', 'string', '');
$db = RootDB::db();
$userGrade = $session->userGrade;
$acl = $session->acl;
$session->setReadOnly();
if($userGrade < 5 && !$acl) {
Json::die([
'result'=>'FAIL',
'msg'=>'운영자 권한이 없습니다.'
]);
}
function doServerModeSet($server, $action, &$response, $session){
$serverList = ServConfig::getServerList();
$settingObj = $serverList[$server];
$serverAcl = $session->acl[$server]??[];
$userGrade = $session->userGrade;
$serverDir = $settingObj->getShortName();
$serverPath = $settingObj->getBasePath();
$realServerPath = realpath(dirname(__FILE__)).'/'.$serverPath;
if($action == 'close') { //폐쇄
$doClose = false;
if($userGrade >= 5){
$doClose = true;
}
else if(in_array('openClose', $serverAcl)){
$doClose = true;
}
if(!$doClose && in_array('reset', $serverAcl) && file_exists($serverPath.'/d_setting/DB.php')){
require($serverPath.'/lib.php');
$localGameStorage = KVStorage::getStorage(DB::db(), 'game_env');
//천통 이후, 오픈 직후는 닫을 수 있음
$localGameStorage->cacheValues(['isunited', 'startyear', 'year']);
if($localGameStorage->isunited){
$doClose = true;
}
else if($localGameStorage->year < $localGameStorage->startyear + 2){
$doClose = true;
}
}
if(!$doClose){
if(in_array('reset', $serverAcl)){
$response['msg'] = '서버 시작 직후, 또는 천하통일 이후에만 닫을 수 있습니다.';
}
else{
$response['msg'] = '서버 닫기 권한이 부족합니다.';
}
return false;
}
return $settingObj->closeServer();
} elseif($action == 'reset' && $userGrade >= 6) {//리셋
//FIXME: reset, reset_full 구현
if(file_exists($serverPath.'/d_setting/DB.php')){
@unlink($serverPath.'/d_setting/DB.php');
}
$response['installURL'] = $serverDir."/install.php";
} elseif($action == 'open' && ($userGrade >= 5 || in_array('openClose', $serverAcl))) {//오픈
return $settingObj->openServer();
} else{
$response['msg'] = '올바르지 않은 요청입니다';
return false;
}
return true;
}
function doAdminPost($action, $notice, $server, $session){
$response = ['result' => 'FAIL'];
$globalAcl = $session->acl['global']??[];
$userGrade = $session->userGrade;
if($action == 'notice' && ($userGrade >= 5 || in_array('notice', $globalAcl))) {
RootDB::db()->update('system', ['NOTICE'=>$notice], true);
$response['result'] = 'SUCCESS';
return $response;
}
if(doServerModeSet($server, $action, $response, $session)){
$response['result'] = 'SUCCESS';
return $response;
}
return $response;
}
$response = doAdminPost($action, $notice, $server, $session);
Json::die($response);
+89 -89
View File
@@ -1,90 +1,90 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
if($session->userGrade < 5 && !$session->acl){
Json::die([
'result'=>false,
'reason'=>'권한이 부족합니다.'
]);
}
$result = [];
$server = [];
$storage = new \sammo\KVStorage(RootDB::db(), 'git_path');
$serverGitPath = $storage->getAll();
$rootServer = Util::array_last(AppConf::getList())->getShortName();
foreach (AppConf::getList() as $setting) {
$serverColor = $setting->getColor();
$serverKorName = $setting->getKorName();
$serverPath = $setting->getBasePath();
$serverDir = $setting->getShortName();
//TODO: .htaccess가 서버 오픈에도 사용될 수 있으니 별도의 방법이 필요함
if (!is_dir($serverPath)) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>false,
'version'=>$setting->getVersion(),
'reason'=>'디렉토리 없음'
];
} elseif (!file_exists($serverPath.'/index.php')) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>false,
'version'=>$setting->getVersion(),
'reason'=>'index.php 없음'
];
} elseif (!$setting->isExists()) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'설정 파일 없음'
];
} elseif (!$setting->isRunning()) {
// 폐쇄중
$state = [
'valid'=>true,
'run'=>false,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'폐쇄됨'
];
} else {
// 오픈중
$state = [
'valid'=>true,
'run'=>true,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'운영중'
];
}
$state += [
'name' => $serverDir,
'korName' => $serverKorName,
'color' => $serverColor,
'isRoot' => $serverDir == $rootServer,
'lastGitPath' => ($serverGitPath[$serverDir][0])??($serverDir == $rootServer?'devel':'origin/devel')
];
$server[] = $state;
}
Json::die([
'acl' => $session->acl,
'server' => $server,
'grade' => $session->userGrade
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
WebUtil::requireAJAX();
$session = Session::requireLogin([])->setReadOnly();
if($session->userGrade < 5 && !$session->acl){
Json::die([
'result'=>false,
'reason'=>'권한이 부족합니다.'
]);
}
$result = [];
$server = [];
$storage = new \sammo\KVStorage(RootDB::db(), 'git_path');
$serverGitPath = $storage->getAll();
$rootServer = Util::array_last(ServConfig::getServerList())->getShortName();
foreach (ServConfig::getServerList() as $setting) {
$serverColor = $setting->getColor();
$serverKorName = $setting->getKorName();
$serverPath = $setting->getBasePath();
$serverDir = $setting->getShortName();
//TODO: .htaccess가 서버 오픈에도 사용될 수 있으니 별도의 방법이 필요함
if (!is_dir($serverPath)) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>false,
'version'=>$setting->getVersion(),
'reason'=>'디렉토리 없음'
];
} elseif (!file_exists($serverPath.'/index.php')) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>false,
'version'=>$setting->getVersion(),
'reason'=>'index.php 없음'
];
} elseif (!$setting->isExists()) {
$state = [
'valid'=>false,
'run'=>false,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'설정 파일 없음'
];
} elseif (!$setting->isRunning()) {
// 폐쇄중
$state = [
'valid'=>true,
'run'=>false,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'폐쇄됨'
];
} else {
// 오픈중
$state = [
'valid'=>true,
'run'=>true,
'installed'=>true,
'version'=>$setting->getVersion(),
'reason'=>'운영중'
];
}
$state += [
'name' => $serverDir,
'korName' => $serverKorName,
'color' => $serverColor,
'isRoot' => $serverDir == $rootServer,
'lastGitPath' => ($serverGitPath[$serverDir][0])??($serverDir == $rootServer?'devel':'origin/devel')
];
$server[] = $state;
}
Json::die([
'acl' => $session->acl,
'server' => $server,
'grade' => $session->userGrade
]);
+25 -25
View File
@@ -1,25 +1,25 @@
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
// 외부 파라미터
$response['server'] = [];
foreach(AppConf::getList() as $setting){
$serverObj = [
'color'=>$setting->getColor(),
'korName'=>$setting->getKorName(),
'name'=>$setting->getShortName(),
'exists'=>$setting->isExists(),
'enable'=>$setting->isRunning()
];
$response['server'][] = $serverObj;
}
$response['result'] = 'SUCCESS';
Json::die($response);
<?php
namespace sammo;
require(__DIR__.'/../vendor/autoload.php');
// 외부 파라미터
$response['server'] = [];
foreach(ServConfig::getServerList() as $setting){
$serverObj = [
'color'=>$setting->getColor(),
'korName'=>$setting->getKorName(),
'name'=>$setting->getShortName(),
'exists'=>$setting->isExists(),
'enable'=>$setting->isRunning()
];
$response['server'][] = $serverObj;
}
$response['result'] = 'SUCCESS';
Json::die($response);