From 83d619835f98d92a105dafe6ad30038468adb9e3 Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 25 Mar 2018 21:46:03 +0900 Subject: [PATCH] =?UTF-8?q?=EC=83=88=20=ED=9A=8C=EC=9B=90=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EC=B0=BD=201=EC=B0=A8=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- d_pic/pic_3.jpg | Bin 2755 -> 0 bytes i_entrance/admin_userlist.php | 139 +++----- i_entrance/j_get_userlist.php | 47 ++- i_entrance/j_set_userlist.php | 298 ++++++++++++++++++ i_entrance/member/Action.js | 85 ----- i_entrance/member/Post.php | 69 ---- .../{member/Style.css => memberAdmin.css} | 25 ++ i_entrance/memberAdmin.js | 219 +++++++++++++ src/sammo/Json.php | 1 + src/sammo/TimeUtil.php | 8 + 10 files changed, 633 insertions(+), 258 deletions(-) delete mode 100644 d_pic/pic_3.jpg create mode 100644 i_entrance/j_set_userlist.php delete mode 100644 i_entrance/member/Action.js delete mode 100644 i_entrance/member/Post.php rename i_entrance/{member/Style.css => memberAdmin.css} (88%) create mode 100644 i_entrance/memberAdmin.js diff --git a/d_pic/pic_3.jpg b/d_pic/pic_3.jpg deleted file mode 100644 index c6a40499051143c8f6117c5573a73043a3143786..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2755 zcmbW!c{mhW9|!OmGlQ|D5n~I9xn!-eWGo5U60WV0eaJGT?0br`G(y=*WS=aV5ym!( z>{G5aW0*lGTZ(aQb5psx_qp%;Jnvuc`+lG2{Qfz=bDrPloP)`Oc>vrf66*~Bn3>4~ zI066UfB`TBfZ0GG5F7ZgfDZ$KvO^BT&B@6Q<>lt(<>lt#IdW70c7*R39}f?|F#j<@ zxR8+05txXW2wYSEE(HI13GnAh2!xBBoeR##!w3JLbMP7f;{==soCg7605%v91Op!Q z03-nbAO!eV{uvp_1_DFaIXIzQ+=mT~M*(cWzov&kz~IB~n}_=VFbu*kbw;24m^Fsu zWRL(d{$UBHv_V~`pv@>#M%5!Y0m=mz5*86f{30uNN?uJ}uyj-FS&ynTGJej%Y@;SrHh(Rc19CMBob!)0b==j1+mocE-(tQ`NWqOz*GzJb)( z)ZEfa?&|L8?dzw!c{}!QoH{|9oTAS!eE7Jyw7jzVY4i83?Va5{)*oMgx_|)C->k#> zx9mS$hmQbc1A{?ej-M_dTg2f4!N3ryGwl5O)*P6iV<(aEoB{?9OX@nI(yBI0L66{3 zF1U=^JYw@F?JwDX2TSa-zByN`ZOJsd zyy^%oH$JRrGcN2YQt8-d_{hyt^GL|_ymWT+`;-rv2Ds%cHPbb8 zAi6|)4_WAwCJo-xu^S$Auki%ftysb<;*@HW(M$_OGQuxC#3=DM)r;ebq&B1Rj~4W8 zTO*xZgSiwCMMEs{&72_W>IyGfI>n*vLz|fS3@U72r05>kw9LF60XjjTjPwB;w3(h-yap{^)w&x&zB;iRQi(|!Ev1^Lag(b(`0$Rd7No-ddR!8ClyK&D)*1N}=Dqd9d@N&NvEpUwes<@YB zK4#kWa)Yv(t7e#wYsFFp(@sw>1-nwf+5aav{eF6@H-(70G}(E>g6lFT!L5M z2C|kuShLVopT6Lo85X<)W>~*v{sFcf@UDj{?qiPTv#_eS{m@OJK3C;U@%xd?a?!Z^ zl^1TP=2dW-Kt^t9?VPUWU5T<^{3Ws?`OA_y^xBw7Ixw)O(tZoU6~zPmM5qiGB`TQ($rpfAbqK&4(2;iaHI95XNJCYwIiMsVU4^;*UZ>B zT4=~Of9|`&6G6pmt8R8TIhZ)@fGdh0)76@JuZvJw-L(AFhpY4G5TAYtI8`YOP9?ok z)-?!ZGgPckdr_&AsYljrRZrxahCI8W|Z@8?Nh>8k;$DEyxbEvE_KG^-!`O>)h=46Fnz#3 z{EuHyPV@C0_8R%-Db1+4Q0y&sK1aVdil8?1!}Y2kOWQ8lGA7IWng1OT)i({_9gfd6 z<9&0C4RI!CD!&;qXR`=VHh#HV(|KnH0(=Hi@`>+lX}D4Ad}K)7@`Qwv_p5O?)7C;I z+(>{U2p~r&+tXJu;lpalWulsol}OsReJ{ ziZrL-A5^|h7eJ_PPn&%+@^nS3nr?l!x;!Ry3@Hy;hjNaNho2U z$HQ@?gUQzw2c|BzwUHZ|3)dGSj=D})Vy(N67e@OCc&r7lq;^@iFDvZZumZLf%3JF? z$axFdw?XSJcq`4XxFeXmwy8ZR*N|x&(_hM*Xx+48(&unJz9%G@7 z>Ith|2cs2=cJPriKlViW8)I6qzENRkHMJGmMynW3eiRoe#3RWtlg*HIhay7MhHZ(% zaDDUdvE~uGrz90p^L3g;T!h`1XG?U=7e~JKTfQ^eyIZqU8Bm(UaJUVXHY`&9f)2Sp zY%sSxl0($76RQdh#UT8`eF|70Yn=89fjGUOJt51n@oo9e>RN{1MmY`f@QwAkn0mb= zp|7u!@)pFtXqbt<6*v3M4=Mv{tH6g$6yrzeY2oB7)(12# - + - - - +
@@ -49,121 +42,87 @@ $(function(){ 가입 허용 
로그인 허용 
-
- - - +
+ +
- +
회원 목록
- +
+ + + + + + + + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + + + + + +
코드 유저명가입 방식 EMAIL 등급 닉네임 전콘가입일자최근 로그인탈퇴 신청장수명가입
일자
최근
로그인
탈퇴
신청
명령
2hide_dhided62
@gmail.com
(Kakao)
일반

18-03-25
15:39:00

Hide_D체:가나다라마바
퀘:가나다라마바
풰:가나다라마바
퉤:가나다라마바
훼:가나다라마바
18-03-25
15:39:00
18-03-25
15:39:00
18-03-25
15:39:00
+
+ + + + + +
+
-
-
- 회 원 정 보 - (0/0) -
- -
-
- - - - - - -
-
- 선택: - - -
-
- 선택: - - - - - - - - - -
-
-
순번
-
ID
-
민번
-
닉네임
-
IP
-
블럭
-
최근블럭일
-
등록
-
최근등록일
-
등급
-
사진
-
SVR
-
탈퇴
-
-
-
\ No newline at end of file diff --git a/i_entrance/j_get_userlist.php b/i_entrance/j_get_userlist.php index 4a636334..ba59aade 100644 --- a/i_entrance/j_get_userlist.php +++ b/i_entrance/j_get_userlist.php @@ -16,26 +16,45 @@ if($session->userGrade < 6){ } $userList = []; -foreach($db->query('SELECT * FROM MEMBER order by `no`') as $member){ - $userID = $member['NO']; - $userName = $member['ID']; - $email = $member['EMAIL']; - $grade = $member['GRADE']; - $blockUntil = $member['BLOCK_DATE']; +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){ - $nickname = $member['NAME']; if($member['IMGSVR']){ - $icon = RootDB::getServerBasepath().'/'.$member['PICTURE']; + $icon = RootDB::getServerBasepath().'/d_pic/'.$member['PICTURE']; } else{ - $icon = IMAGES.'/'.$member['PICTURE']; + $icon = IMAGE.'/'.$member['PICTURE']; } - - $deleteAfter = $member['delete_after']; - + + $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){ - -} \ No newline at end of file + 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' +]); \ No newline at end of file diff --git a/i_entrance/j_set_userlist.php b/i_entrance/j_set_userlist.php new file mode 100644 index 00000000..031809fa --- /dev/null +++ b/i_entrance/j_set_userlist.php @@ -0,0 +1,298 @@ +setReadOnly(); + +if($session->userGrade < 6){ + Json::die([ + 'result'=>false, + 'reason'=>'운영자 권한이 없습니다.' + ]); +} + +// 외부 파라미터 +// $_POST['action'] : 처리종류 +// $_POST['user_id'] : 유저 이름 +// $_POST['param'] : 추가 파라미터 + +$action = Util::array_get($_POST['action']); +$userID = Util::array_get($_POST['user_id']); +$param = Util::array_get($_POST['param']); + +if(!$action){ + Json::die([ + 'result'=>false, + 'reason'=>'action 미설정' + ]); +} + + +$db = RootDB::db(); + +if($action == 'allow_login'){ + $param = Util::toInt($param); + if($param === null && $param !== 0 && $param !== 1){ + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 param' + ]); + } + + $param = $param?'Y':'N'; + $db->update('system',[ + 'LOGIN'=>$param + ], true); + Json::die([ + 'result'=>true + ]); +} + +if($action == 'allow_join'){ + $param = Util::toInt($param); + if($param === null && $param !== 0 && $param !== 1){ + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 param' + ]); + } + + $param = $param?'Y':'N'; + $db->update('system',[ + 'REG'=>$param + ], true); + Json::die([ + 'result'=>true + ]); +} + +if($action == 'scrub_deleted'){ + $deleteUntil = TimeUtil::DateToday(); + $db->delete('member', 'delete_after < %s', $deleteUntil); + $cnt = $db->affectedRows(); + + Json::die([ + 'result'=>true, + 'affected'=>$cnt + ]); +} + +if($action == 'scrub_icon'){ + $deleteUntil = strtotime("-1 month"); + $usedIcon = []; + foreach($db->queryFirstColumn('SELECT picture from member where imgsvr = 1') as $icon){ + $icon = explode('?', $icon)[0]; + $usedIcon[$icon]=$icon; + } + + $cnt = 0; + + foreach(glob(__DIR__.'/../d_pic/*.{jpg,png,gif}', GLOB_BRACE) as $filepath){ + $filename = basename($filepath); + + if (array_key_exists($filename, $usedIcon)) { + continue; + } + + $mtime = filemtime($filepath); + if($mtime > $deleteUntil){ + continue; + } + + @unlink($filepath); + $cnt++; + } + + Json::die([ + 'result'=>true, + 'affected'=>$cnt + ]); +} + +if($action == 'scrub_old_user'){ + $deleteUntil = TimeUtil::DatetimeFromNowMinute(-60*24*30*6); + $targetUser = []; + $members = $db->query('SELECT member.no, 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" or member_log.action_type="reg") group by member.no'); + foreach($members as $member){ + if($member['loginDate'] === null){ + $targetUser[] = $member['no']; + continue; + } + + if($member['loginDate'] <= $deleteUntil){ + $targetUser[] = $member['no']; + } + } + + if(count($targetUser) == 0){ + $cnt = 0; + } + else{ + $db->delete('member', 'no = %li', $targetUser); + $cnt = $db->affectedRows(); + } + + Json::die([ + 'result'=>true, + 'affected'=>$cnt + ]); +} + +//여기부터는 무조건 멤버에 대한 항목임 +if(!$userID){ + Json::die([ + 'result'=>false, + 'reason'=>'userID가 지정되지 않았습니다. action:'.$action + ]); +} + +$targetGrade = $db->queryFirstField('SELECT `grade` FROM `member` WHERE `no` = %i', $userID); +if($targetGrade === null){ + Json::die([ + 'result'=>false, + 'reason'=>'해당하는 유저가 없습니다.' + ]); +} + +if($targetGrade >= $session->userGrade){ + Json::die([ + 'result'=>false, + 'reason'=>'자신과 같거나 높은 권한의 유저를 변경할 수 없습니다.' + ]); +} + + + + +if($action == 'delete'){ + $db->delete('member', 'no = %i', $userID); + $cnt = $db->affectedRows(); + + if(!$cnt){ + Json::die([ + 'result'=>false, + 'reason'=>'유저가 없습니다.' + ]); + } + + Json::die([ + 'result'=>true + ]); +} + +if($action == 'reset_pw'){ + + $newPassword = Util::randomStr(6); + $tmpPassword = Util::hashPassword(RootDB::getGlobalSalt(), $newPassword); + $newSalt = bin2hex(random_bytes(8)); + $newFinalPassword = Util::hashPassword($newSalt, $tmpPassword); + + $db->update('member', [ + 'pw'=>$newFinalPassword, + 'salt'=>$newSalt + ],'no=%i', $userID); + $cnt = $db->affectedRows(); + + if(!$cnt){ + Json::die([ + 'result'=>false, + 'reason'=>'유저가 없습니다.' + ]); + } + + Json::die([ + 'result'=>true, + 'detail'=>"비밀번호가 {$newPassword}로 초기화되었습니다." + ]); +} + + +if($action == 'block'){ + $param = Util::toInt($param); + if($param === null){ + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 param' + ]); + } + + if($param <= 0){ + $param = 50*365; + } + + $db->update('member', [ + 'grade'=>0, + 'block_date'=>$db->sqleval('DATE_ADD(now(), INTERVAL %i DAY)', $param) + ], 'no = %i', $userID); + $cnt = $db->affectedRows(); + + if(!$cnt){ + Json::die([ + 'result'=>false, + 'reason'=>'유저가 없습니다.' + ]); + } + + Json::die([ + 'result'=>true + ]); +} + +if($action == 'unblock'){ + $db->update('member', [ + 'grade'=>1, + 'block_date'=>null + ], 'no = %i', $userID); + $cnt = $db->affectedRows(); + + if(!$cnt){ + Json::die([ + 'result'=>false, + 'reason'=>'유저가 없습니다.' + ]); + } + + Json::die([ + 'result'=>true + ]); +} + +if($action == 'set_userlevel'){ + $param = Util::toInt($param); + if($param === null || $param < 1){ + Json::die([ + 'result'=>false, + 'reason'=>'올바르지 않은 param' + ]); + } + + if($param >= $session->userGrade){ + Json::die([ + 'result'=>false, + 'reason'=>'관리자보다 같거나 높은 등급을 설정할 수 없습니다.' + ]); + } + + $db->update('member', [ + 'grade'=>$param, + ], 'no = %i', $userID); + $cnt = $db->affectedRows(); + + if(!$cnt){ + Json::die([ + 'result'=>false, + 'reason'=>'실행되지 않았습니다.' + ]); + } + + Json::die([ + 'result'=>true + ]); +} + +Json::die([ + 'result'=>false, + 'reason'=>'알 수 없는 명령입니다. action:'.$action +]); \ No newline at end of file diff --git a/i_entrance/member/Action.js b/i_entrance/member/Action.js deleted file mode 100644 index b0d8abbf..00000000 --- a/i_entrance/member/Action.js +++ /dev/null @@ -1,85 +0,0 @@ -function EntranceMember_Import() { -} - -function EntranceMember_Init() { - $("#EntranceMember_0001").click(EntranceMember_Back); - $("#EntranceMember_000201").click(EntranceMember_Order); - - $("#btn_allow_join").click(function() { EntranceMember_Post(8); }); - $("#btn_deny_join").click(function() { EntranceMember_Post(9); }); - $("#btn_allow_login").click(function() { EntranceMember_Post(10); }); - $("#btn_deny_login").click(function() { EntranceMember_Post(11); }); - $("#btn_process_withdraw").click(function() { EntranceMember_Post(12); }); - $("#btn_process_scrub_olduser").click(function() { EntranceMember_Post(13); }); - $("#EntranceMember_000607").click(function() { EntranceMember_Post(14); }); - - $("#EntranceMember_000301").click(function() { EntranceMember_Post(0); }); - $("#EntranceMember_000302").click(function() { EntranceMember_Post(1); }); - $("#EntranceMember_000303").click(function() { EntranceMember_Post(2); }); - $("#EntranceMember_000304").click(function() { EntranceMember_Post(3); }); - $("#EntranceMember_000305").click(function() { EntranceMember_Post(4); }); - $("#EntranceMember_000306").click(function() { EntranceMember_Post(5); }); - $("#EntranceMember_000307").click(function() { EntranceMember_Post(6); }); - $("#EntranceMember_000308").click(function() { EntranceMember_Post(7); }); - -} - -function EntranceMember_Update() { - EntranceMember_UpdateMember(0); -} - -function EntranceMember_Back() { - $("#EntranceMember_00").hide(); - - $("#Entrance_00").show(); - Entrance_Update(); -} - -function EntranceMember_Order() { - EntranceMember_UpdateMember($("#EntranceMember_000200").val()); -} - -function EntranceMember_UpdateMember(select) { - Popup_Wait(function() { - GetJSON( - "../../i_entrance/member/Get.php", { - select: select - }, - function(response, textStatus) { - if(response.result == "SUCCESS") { - $("#EntranceMember_000000").text(response.count); - $("#EntranceMember_000300").html(response.lists); - $("#EntranceMember_0005").html(response.members); - $("#EntranceMember_000600").html(response.state); - Popup_WaitHide(); - } else { - Popup_WaitShow("처리 실패!"); - } - } - ) - }); -} - -function EntranceMember_Post(select) { - var no = $("#EntranceMember_000300").val(); - var sel = $("#EntranceMember_000200").val(); - - Popup_Confirm('정말 실행하시겠습니까?', function() { - Popup_Wait(function() { - PostJSON( - "../../i_entrance/member/Post.php", { - select: select, - no: no - }, - function(response, textStatus) { - if(response.result == "SUCCESS") { - Popup_WaitHide(); - EntranceMember_UpdateMember(sel); - } else { - Popup_WaitShow("처리 실패!"); - } - } - ) - }) - }); -} diff --git a/i_entrance/member/Post.php b/i_entrance/member/Post.php deleted file mode 100644 index de211d0f..00000000 --- a/i_entrance/member/Post.php +++ /dev/null @@ -1,69 +0,0 @@ -queryFirstRow('SELECT `GRADE` FROM `MEMBER` WHERE `NO` = %i', $session->userID); - -if($member['GRADE'] < 6) { - $response['result'] = 'FAIL'; - $response['msg'] = '운영자 권한이 없습니다.'; -} else { - - if($select >= 0 && $select <= 4) { - /* - 0: 블럭회원 - 1: 일반회원 - 2: 참여회원? - 3: 유효회원? - 4: 특별회원? - */ - $db->update('MEMBER', ['GRADE'=>$select], 'NO=%i', $no); - } elseif($select == 5) { - // 전콘제거 - $db->update('MEMBER', [ - 'PICTURE'=>'', - 'IMGSVR'=>0 - ], 'NO=%i', $no); - - } elseif($select == 6) { - // 비번초기화 - $pw = md5('11111111'); - $db->update('MEMBER', ['PW'=>$pw], 'NO=%i',$no); - } elseif($select == 7) { - // 회원삭제 - $db->delete('MEMBER', 'NO=%i', $no); - } elseif($select == 8) { - // 가입허용 - $db->update('SYSTEM', ['REG'=>'Y'], 'NO=1'); - } elseif($select == 9) { - // 가입금지 - $db->update('SYSTEM', ['REG'=>'N'], 'NO=1'); - } elseif($select == 10) { - // 로그인허용 - $db->update('SYSTEM', ['LOGIN'=>'Y'], 'NO=1'); - } elseif($select == 11) { - // 로그인금지 - $db->update('SYSTEM', ['LOGIN'=>'N'], 'NO=1'); - } elseif($select == 12) { - // 탈퇴처리(1개월) - $db->delete('MEMBER', "QUIT='Y' AND GRADE<'5' AND REG_DATEdelete('MEMBER', "GRADE<'5' AND REG_DATE강제
탈퇴\ + \ + \ + \ + \ + \ + \ +'; + +function convUserGrade(grade){ + var userGradeMap = { + 0:'차단', + 1:'일반', + 4:'특별', + 5:'부운영자', + 6:'운영자' + }; + + if(grade in userGradeMap){ + return userGradeMap[grade]; + } + return grade; +} + +function fillAllowJoinLogin(result){ + $('#radios_allow_join .active').removeClass('active'); + $('#radios_allow_login .active').removeClass('active'); + if(result.allowJoin){ + $('#allow_join_y').parent().addClass('active'); + } + else{ + $('#allow_join_n').parent().addClass('active'); + } + + if(result.allowLogin){ + $('#allow_login_y').parent().addClass('active'); + } + else{ + $('#allow_login_n').parent().addClass('active'); + } +} + +function fillUserList(result){ + var $user_list = $('#user_list'); + + + $user_list.empty(); + + var slotGeneralList = $.map(result.servers, function(value){ + return ''.format(value) + }).join('
'); + + var emailFunc = function(text){ + return String(text).replace('@','@
'); + } + var brFunc = function(text){ + return String(text).split(' ').join('
'); + }; + + var shortDateFunc = function(date){ + if(!date){ + return '-'; + } + return brFunc(date.substr(2)); + } + + $.each(result.users, function(idx, user){ + user.br = brFunc; + user.shortDate = shortDateFunc; + user.emailFunc = emailFunc; + if(!user.email){ + user.email = '-'; + } + user.slotGeneralList = slotGeneralList; + user.userGradeText = convUserGrade(user.userGrade); + + $user_list.append( + TemplateEngine(userFrame, user) + ) + }); + + //TODO: slotGeneralList에 값을 채워야함. ajax로 받아올 필요 있음 +} + +function changeSystem(action, param=null){ + var text = '{0}{1}을 진행합니다.'.format(action, param?(', '+param):''); + if(!confirm(text)){ + return; + } + + $.ajax({ + type:'post', + url:'j_set_userlist.php', + dataType:'json', + data:{ + 'action':action, + 'param':param + } + }).then(function(result){ + if(result.result){ + if(result.affected !== undefined){ + alert('{0}건이 처리되었습니다.'.format(result.affected)); + refreshAll(); + } + else{ + alert('완료되었습니다.'); + } + + } + else{ + alert(result.reason); + } + }); +} + +function changeUserStatus(action, userID, param=null){ + if(userID instanceof Element){ + userID = parseInt($(userID).parents('tr').data('id')); + } + if(!$.isNumeric(userID)){ + alert('userID가 올바르게 지정되지 않았습니다!'); + return; + } + userID = parseInt(userID); + + + if(action == 'set_userlevel'){ + if(!$.isNumeric(param)){ + param = prompt('원하는 등급을 입력해주세요.(1:일반, 4:특별, 5:부운영자, 6:운영자)', '1'); + } + param = parseInt(param); + + if(param < 1 || param > 6){ + alert('올바르지 않습니다.'); + return; + } + } + + if(action == 'block'){ + if(!$.isNumeric(param)){ + param = prompt('블록 기간을 입력해주세요. <= 0은 반영구(50년)입니다.', '7'); + } + param = parseInt(param); + } + + var userName = $('#userinfo_'+userID).data('username'); + + var text = '{0}에 대해서 {1}{2}을 진행합니다.'.format(userName, action, param?(', '+param):''); + if(!confirm(text)){ + return; + } + + + $.ajax({ + type:'post', + url:'j_set_userlist.php', + dataType:'json', + data:{ + 'action':action, + 'user_id':userID, + 'param':param + } + }).then(function(result){ + if(result.result){ + if(result.detail !== undefined){ + alert('완료되었습니다. : {0}'.format(result.detail)); + refreshAll(); + } + else{ + alert('완료되었습니다.'); + refreshAll(); + } + + } + else{ + alert(result.reason); + } + }); + +} + +function refreshAll(){ + $.ajax({ + type:'post', + url:'j_get_userlist.php', + dataType:'json' + }).then(function(result){ + if(!result.result){ + alert(reuslt.reason); + return; + } + + fillAllowJoinLogin(result); + fillUserList(result); + }); +} + +$(function(){ + refreshAll(); + + $('input[name=allow_join], input[name=allow_login]').on('change', function(){ + var $this = $(this); + changeSystem($this.attr('name'), $this.val()); + }) +}); diff --git a/src/sammo/Json.php b/src/sammo/Json.php index 29091ff5..703357ae 100644 --- a/src/sammo/Json.php +++ b/src/sammo/Json.php @@ -17,6 +17,7 @@ class Json{ } public static function die($value, $noCache = true, $pretty = false, $die = true){ + //NOTE: REST 형식에 맞게, ok(), fail()로 쪼개는게 낫지 않을까 생각해봄. if($noCache){ WebUtil::setHeaderNoCache(); } diff --git a/src/sammo/TimeUtil.php b/src/sammo/TimeUtil.php index d5c9eaaf..b0e3b96f 100644 --- a/src/sammo/TimeUtil.php +++ b/src/sammo/TimeUtil.php @@ -10,6 +10,14 @@ class TimeUtil { return date('Y-m-d H:i:s'); } + public static function DatetimeFromNowDay($day) { + return date('Y-m-d H:i:s', strtotime("{$day} days")); + } + + public static function DatetimeFromNowHour($hour) { + return date('Y-m-d H:i:s', strtotime("{$hour} hours")); + } + public static function DatetimeFromNowMinute($minute) { return date('Y-m-d H:i:s', strtotime("{$minute} minutes")); }