그누보드를 클래스로 변경하고 있습니다. 이 방법에 관한것과 몇 가지 의견을 듣고 싶습니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

그누보드를 클래스로 변경하고 있습니다. 이 방법에 관한것과 몇 가지 의견을 듣고 싶습니다. 정보

그누보드를 클래스로 변경하고 있습니다. 이 방법에 관한것과 몇 가지 의견을 듣고 싶습니다.

본문

이번에 그누보드를 스킨을 제거한 json 출력만 가능하게 변경하고 있습니다.
아래 코드는 login, logout, login_check 를 묶은 Member class입니다.

이와 같은 방법으로 모두 클래스화 할 예정입니다.
그누보드와 php가 처음이다보니 분석하며 진행하는데 시간이 많이 걸립니다.

질문입니다.
1. 이와 같은 방법에 대한 의견을 듣고 싶습니다.
2. 이와같이 할경우 외부에서 누구나 접근이 가능할 텐데, 이를 open이 아닌 해당 웹사이트에서만 접근 가능하게 할 방법이 있을까요?
2. 프리랜서를 에게 이 작업을 부탁드렸을 때 비용과 작업 일정을 얼마나, 혹은 어떻게 잡으면 좋을 지 의견 부탁드립니다.

감사합니다.


<?php
/**
 * Maganggi 
 *
 * @copyright   Copyright (c) 2013, clingsoft < *** 개인정보보호를 위한 이메일주소 노출방지 *** > 
 * @license     GPL, http://clingsoft.com
 */

class Member extends gnuboard\Check{
	
	public function __construct(){
		// gnuboard의 common.php기능 
		$this->check();
	}

	//===================================================================	
	// 외부 노출 함수
	//===================================================================	
	public function login_check() {
		global $member;
		
		$this
			->autoLogin()
			->addPointFirstLogin()
			->getInfo();
		
		if ($member['mb_id']) $this->json_login();
		else $this->json_logout();
	}	
	//-------------------------------------------------------------------
	public function login() {
		
		$this
			->loadMember()
			->addPointFirstLogin()
			->getInfo()
			
			->json_login();
	}	
	//-------------------------------------------------------------------
	public function logout() {
		
		$this
			->clearMember()
			
			->json_logout();
	}	
	//===================================================================	
	// 내부 함수
	//===================================================================	
	/**
	 * 
	 */
	private function addPointFirstLogin() {
		global $g4, $config, $member;
		
		if ($_SESSION['ss_mb_id']) { // 로그인중이라면
		    // $member = get_member($_SESSION['ss_mb_id']);
		
		    // 오늘 처음 로그인 이라면
		    if (substr($member['mb_today_login'], 0, 10) != $g4['time_ymd'])
		    {
		        // 첫 로그인 포인트 지급
		        insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", "@login", $member['mb_id'], $g4['time_ymd']);
		
		        // 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
		        // 해당 회원의 접근일시와 IP 를 저장
		        $sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
		        sql_query($sql);
		    }
		}
		
		return $this;
	}
	//-------------------------------------------------------------------
	private function autoLogin(){
		global $g4, $config, $member; 
		
	    // 회원아이디가 쿠키에 저장되어 있다면 (3.27)
	    if (!$_SESSION['ss_mb_id'] && $tmp_mb_id = get_cookie('ck_mb_id')) {
	
	        $tmp_mb_id = substr(preg_replace("/[^a-zA-Z0-9_]*/", "", $tmp_mb_id), 0, 20);
	        // 최고관리자는 자동로그인 금지
	        if ($tmp_mb_id != $config['cf_admin']) {
	            $sql = " select mb_password, mb_intercept_date, mb_leave_date, mb_email_certify from {$g4['member_table']} where mb_id = '{$tmp_mb_id}' ";
	            $row = sql_fetch($sql);
	            $key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $row['mb_password']);
	            // 쿠키에 저장된 키와 같다면
	            $tmp_key = get_cookie('ck_auto');
	            if ($tmp_key == $key && $tmp_key) {
	                // 차단, 탈퇴가 아니고 메일인증이 사용이면서 인증을 받았다면
	                if ($row['mb_intercept_date'] == '' &&
	                    $row['mb_leave_date'] == '' &&
	                    (!$config['cf_use_email_certify'] || preg_match('/[1-9]/', $row['mb_email_certify'])) ) {
	                    // 세션에 회원아이디를 저장하여 로그인으로 간주
	                    set_session('ss_mb_id', $tmp_mb_id);
						$member = get_member($_SESSION['ss_mb_id']);
	                }
	            }
	            // $row 배열변수 해제
	            unset($row);
	        }
	    }

		return $this;
	}
	//-------------------------------------------------------------------
	private function getInfo() {
		global $member, $g4, $config;
		 
		if ($member['mb_id']) {
		    $sql = " select count(*) as cnt from {$g4['memo_table']} where me_recv_mb_id = '{$member['mb_id']}' and me_read_datetime = '0000-00-00 00:00:00' ";
		    $row = sql_fetch($sql);
		    $this->memo_not_read = $row['cnt'];
		
		    $this->is_auth = false;
		    $sql = " select count(*) as cnt from {$g4['auth_table']} where mb_id = '{$member['mb_id']}' ";
		    $row = sql_fetch($sql);
		    if ($row['cnt']) 
		        $this->is_auth = true;
			
			$this->nick  = cut_str($member['mb_nick'], $config['cf_cut_name']);
			$this->point = number_format($member['mb_point']);
		}
		
		return $this;
	}
	//-------------------------------------------------------------------
	private function loadMember(){
		global
			$config, $g4, $member;

		$mb_id       = $_POST['mb_id'];
		$mb_password = $_POST['mb_password'];
		$auto_login  = $_POST['auto_login'];
		
		if (!trim($mb_id) || !trim($mb_password)){
		    cling_die("회원아이디나 패스워드가 공백이면 안됩니다.",'member');
		}
		
		$member = get_member($mb_id);
		
		// id / password 일치 회원없음
		if (!$member['mb_id'] || (sql_password($mb_password) != $member['mb_password'])) {
			cling_die("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.",'member');
		}
		
		// 차단된 아이디인가?
		if ($member['mb_intercept_date'] && $member['mb_intercept_date'] <= date("Ymd", $g4['server_time'])) {
		    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $member['mb_intercept_date']); 
			cling_die("회원님의 아이디는 접근이 금지되어 있습니다.\\n\\n처리일 : ".$date);
		}
		
		// 탈퇴한 아이디인가?
		if ($member['mb_leave_date'] && $member['mb_leave_date'] <= date("Ymd", $g4['server_time'])) {
		    $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $member['mb_leave_date']); 
			cling_die("탈퇴한 아이디이므로 접근하실 수 없습니다.\\n\\n탈퇴일 : ".$date);
		}
		
		// 메일 인증이 필요한가?
		if ($config['cf_use_email_certify'] && !preg_match("/[1-9]/", $member['mb_email_certify'])){
			cling_die("메일인증을 받으셔야 로그인 하실 수 있습니다.\\n\\n회원님의 메일주소는 {$member['mb_email']} 입니다.");
		}
		
		// 회원아이디 세션 생성
		set_session('ss_mb_id', $member['mb_id']);
		// FLASH XSS 공격에 대응하기 위하여 회원의 고유키를 생성해 놓는다. 관리자에서 검사함 - 110106
		set_session('ss_mb_key', md5($member['mb_datetime'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']));

		// if ($url) 
		// {
		    // $link = urldecode($url);
		    // // 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
		    // if (preg_match("/\?/", $link))
		        // $split= "&"; 
		    // else
		        // $split= "?"; 
// 		
		    // // $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
		    // foreach($_POST as $key=>$value) 
		    // {
		        // if ($key != "mb_id" && $key != "mb_password" && $key != "x" && $key != "y" && $key != "url") 
		        // {
		            // $link .= "$split$key=$value";
		            // $split = "&";
		        // }
		    // }
		// } 
		// else
		    // $link = $g4[path];	
		    
		return $this;		
	}
	//-------------------------------------------------------------------
	private function clearMember() {
		
		// 이호경님 제안 코드
		session_unset(); // 모든 세션변수를 언레지스터 시켜줌 
		session_destroy(); // 세션해제함 
		
		// 자동로그인 해제 --------------------------------
		set_cookie("ck_mb_id", "", 0);
		set_cookie("ck_auto", "", 0);
		// 자동로그인 해제 end --------------------------------
		
		return $this;
	}
	//-------------------------------------------------------------------
	private function json_login() {
		global $member, $is_admin, $json;
		
		
		$temp = '';
		$temp['success'] = true;
		$temp['msg'] = 'ok';
		//---------------------------------
		$temp['info']['success'] = true;
		$temp['info']['is_login'] = true;
		$temp['info']['mb_id'] = $member['mb_id'];
		$temp['info']['nick'] = $this->nick;
		$temp['info']['is_auth'] = $this->is_auth;
		if($is_admin == "super" || $this->is_auth){
			$temp['info']['is_admin'] = $is_admin;
			$temp['info']['admin_path'] = $g4['admin_path'];
		}
		$temp['info']['point'] = $this->point;
		$temp['info']['memo_not_read'] = $this->memo_not_read;
		//---------------------------------
		
		$json['member'] = $temp;
	}
	//-------------------------------------------------------------------
	private function json_logout(){
		global $json;
		
		$temp='';
		$temp['success'] = true;
		$temp['msg'] = 'ok';
		//---------------------------------
		$temp['info']['islogin'] = false;
		//---------------------------------
		$json['member'] = $temp;		
	}
}
?>
  • 복사

댓글 전체

1. 이와 같은 방법에 대한 의견을 듣고 싶습니다.
- 딱히 의견은 없고 저도 그누보드와 안드로이드 연동을 위해 그누보드의 게시판을 비롯한 모든 부분을 json 으로 출력해봤습니다.
- 그누보드 게시판 글 리스트를 json 으로 보내 안드로이드에서 리스트뷰에 뿌려주는 작업을 해 봤는데 제시하신 방법처럼 클래스화 하면 구조가 커질때 용이해집니다.
2. 이와같이 할경우 외부에서 누구나 접근이 가능할 텐데, 이를 open이 아닌 해당 웹사이트에서만 접근 가능하게 할 방법이 있을까요?
- 제가 아는 선에서는 해당 사이트에서만 접근하는 방법이 없는걸로 알고 있습니다.
2. 프리랜서를 에게 이 작업을 부탁드렸을 때 비용과 작업 일정을 얼마나, 혹은 어떻게 잡으면 좋을 지 의견 부탁드립니다.
- 프리랜서쪽으로는 제가 맡겨본 적이 없어서 답변드리기가 힘드네요. 죄송합니다.
© SIRSOFT
현재 페이지 제일 처음으로