<?
if (!defined("_GNUBOARD_")) exit;

/*
// 081022 : CSRF 방지를 위해 코드를 작성했으나 효과가 없어 주석처리 함
if (!get_session("ss_admin")) {
    set_session("ss_admin", true);
    goto_url(".");
}
*/

// 스킨경로를 얻는다
function get_skin_dir($skin, $len='')
{
    global $g4;

    $result_array = array();

    $dirname = "$g4[path]/skin/$skin/";
    $handle = opendir($dirname);
    while ($file = readdir($handle)) 
    {
        if($file == "."||$file == "..") continue;

        if (is_dir($dirname.$file)) $result_array[] = $file;
    }
    closedir($handle);
    sort($result_array);

    return $result_array;
}

// 회원 삭제
function member_delete($mb_id)
{
    global $config;
    global $g4;

    $sql = " select mb_name, mb_nick, mb_ip, mb_recommend, mb_memo, mb_level from $g4[member_table] where mb_id= '$mb_id' ";
    $mb = sql_fetch($sql);
    if ($mb[mb_recommend]) {
        $row = sql_fetch(" select count(*) as cnt from $g4[member_table] where mb_id = '".addslashes($mb[mb_recommend])."' ");
        if ($row[cnt])
            insert_point($mb[mb_recommend], $config[cf_recommend_point] * (-1), "{$mb_id}님의 회원자료 삭제로 인한 추천인 포인트 반환", '@member', $mb[mb_recommend], "{$mb_id} 추천인 삭제");
    }

    // 회원자료는 정보만 없앤 후 아이디는 보관하여 다른 사람이 사용하지 못하도록 함 : 061025
    if ($mb[mb_level] > 1) {
        $sql = " update $g4[member_table] 
                    set mb_jumin = '',
                        mb_password = '',
                        mb_level = '1',
                        mb_email = '',
                        mb_homepage = '',
                        mb_password_q = '',
                        mb_password_a = '',
                        mb_tel = '',
                        mb_hp = '',
                        mb_zip1 = '',
                        mb_zip2 = '',
                        mb_addr1 = '',
                        mb_addr2 = '',
                        mb_birth = '',
                        mb_sex = '',
                        mb_signature = '',
                        mb_memo = '".date("Ymd",$g4['server_time'])." 삭제함\n\n$mb[mb_memo]',
                        mb_leave_date = '".date("Ymd",$g4['server_time'])."' 
                  where mb_id = '$mb_id' ";
        //echo $sql; exit;
        sql_query($sql);
    }
    
    /*
    // 회원 자료 삭제
    sql_query(" delete from $g4[member_table] where mb_id = '$mb_id' ");

    // 삭제된 자료를 또 삭제하면 완전 삭제함
    if ($mb[mb_nick] != '[삭제됨]')
    {
        // 다른 사람이 이 회원아이디를 사용하지 못하도록 아이디만 생성해 놓습니다.
        // 게시판에서 회원아이디는 삭제하지 않기 때문입니다.
        sql_query(" insert into $g4[member_table] set mb_id = '$mb_id', mb_name='$mb[mb_name]', mb_nick='[삭제됨]', mb_ip='$mb[mb_ip]', mb_datetime = '$g4[time_ymdhis]' ");
    }
    
    // 포인트 테이블에서 삭제
    sql_query(" delete from $g4[point_table] where mb_id = '$mb_id' ");
    
    // 그룹접근가능 삭제
    sql_query(" delete from $g4[group_member_table] where mb_id = '$mb_id' ");
    
    // 쪽지 삭제
    sql_query(" delete from $g4[memo_table] where me_recv_mb_id = '$mb_id' or me_send_mb_id = '$mb_id' ");
    
    // 스크랩 삭제
    sql_query(" delete from $g4[scrap_table] where mb_id = '$mb_id' ");
    
    // 관리권한 삭제
    sql_query(" delete from $g4[auth_table] where mb_id = '$mb_id' ");

    // 그룹관리자인 경우 그룹관리자를 공백으로 
    sql_query(" update $g4[group_table] set gr_admin = '' where gr_admin = '$mb_id' ");

    // 게시판관리자인 경우 게시판관리자를 공백으로
    sql_query(" update $g4[board_table] set bo_admin = '' where bo_admin = '$mb_id' ");

    // 아이콘 삭제
    @unlink("$g4[path]/data/member/".substr($mb_id,0,2)."/$mb_id.gif");
    */
}


// 회원권한을 SELECT 형식으로 얻음
function get_member_level_select($name, $start_id=0, $end_id=10, $selected='', $event='')
{
    global $g4;

    $str = "<select name='$name' $event style='width:45px;'>";
    for ($i=$start_id; $i<=$end_id; $i++)
    {
        $str .= "<option value='$i'";
        if ($i == $selected) 
            $str .= " selected";
        $str .= ">$i</option>";
    }
    $str .= "</select>";
    return $str;
}


// 회원아이디을 SELECT 형식으로 얻음
function get_member_id_select($name, $level, $selected='', $event='')
{
    global $g4;

    $sql = " select mb_id from $g4[member_table] where mb_level >= '$level' ";
    $result = sql_query($sql);
    $str = "<select name='$name' $event><option value=''>선택안함";
    for ($i=0; $row=sql_fetch_array($result); $i++) 
    {
        $str .= "<option value='$row[mb_id]'";
        if ($row[mb_id] == $selected) $str .= " selected";
        $str .= ">$row[mb_id]</option>";
    }
    $str .= "</select>";
    return $str;
}

// 권한 검사
function auth_check($auth, $attr)
{
    global $is_admin;

    if ($is_admin == "super") return;

    if (!trim($auth))
        alert("이 메뉴에는 접근 권한이 없습니다.\\n\\n접근 권한은 최고관리자만 부여할 수 있습니다.");

    $attr = strtolower($attr);

    if (!strstr($auth, $attr)) {
        if ($attr == "r")
            alert("읽을 권한이 없습니다.");
        else if ($attr == "w")
            alert("입력, 추가, 생성, 수정 권한이 없습니다.");
        else if ($attr == "d")
            alert("삭제 권한이 없습니다.");
        else 
            alert("속성이 잘못 되었습니다.");
    }
}


// rm -rf 옵션 : exec(), system() 함수를 사용할 수 없는 서버 또는 win32용 대체
// www.php.net 참고 : pal at degerstrom dot com
function rm_rf($file) 
{
    if (file_exists($file)) {
        @chmod($file,0777);
        if (is_dir($file)) {
            $handle = opendir($file); 
            while($filename = readdir($handle)) {
                if ($filename != "." && $filename != "..") 
                    rm_rf("$file/$filename");
            }
            closedir($handle);
            rmdir($file);
        } else 
            unlink($file);
    }
}

function help($help="", $left=0, $top=0)
{
    global $g4;
    static $idx = 0;

    $idx++;

    $help = preg_replace("/\n/", "<br>", $help);
    
    $str  = "<a class='btn_help' href=\"javascript:help('help$idx', $left, $top);\">도움말</a>";
    $str .= "<div class='tootip_wrap'><div id='help$idx' class='box_tooltip'>";
    $str .= "<div class='csshelp'>$help</div><div class='arrow_tooltip'></div>";
    $str .= "</div></div>";

    return $str;
}

// 출력순서
function order_select($fld, $sel="") 
{
    $s = "<select name='$fld'>";
    for ($i=1; $i<=100; $i++) {
        $s .= "<option value='$i' ";
        if ($sel) {
            if ($i == $sel) {
                $s .= "selected";
            }
        } else {
            if ($i == 50) {
                $s .= "selected";
            }
        }
        $s .= ">$i</option>";
    }
    $s .= "</select>\n";

    return $s;
}

// 접근 권한 검사
if (!$member['mb_id'])
{
    //alert("로그인 하십시오.", "$g4[bbs_path]/login.php?url=" . urlencode("$_SERVER[PHP_SELF]?w=$w&mb_id=$mb_id"));
    alert("로그인 하십시오.", "$g4[bbs_path]/login.php?url=" . urlencode("$_SERVER[PHP_SELF]?$_SERVER[QUERY_STRING]"));
}
else if ($is_admin != "super") 
{
    $auth = array();
    $sql = " select au_menu, au_auth from $g4[auth_table] where mb_id = '$member[mb_id]' ";
    $result = sql_query($sql);
    for($i=0; $row=sql_fetch_array($result); $i++) 
    {
        $auth[$row[au_menu]] = $row[au_auth];
    }

    if (!$i)
    {
        alert("최고관리자 또는 관리권한이 있는 회원만 접근 가능합니다.", $g4[path]);
    }
}

// 관리자의 아이피, 브라우저와 다르다면 세션을 끊고 관리자에게 메일을 보낸다.
$admin_key = md5($member[mb_datetime] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']);
if (get_session("ss_mb_key") !== $admin_key) {

    session_destroy();

    include_once("$g4[path]/lib/mailer.lib.php");
    // 메일 알림
    mailer($member['mb_nick'], $member['mb_email'], $member['mb_email'], "XSS 공격 알림", "{$_SERVER['REMOTE_ADDR']} 아이피로 XSS 공격이 있었습니다.\n\n관리자 권한을 탈취하려는 접근이므로 주의하시기 바랍니다.\n\n해당 아이피는 차단하시고 의심되는 게시물이 있는지 확인하시기 바랍니다.\n\n$g4[url]", 0);

    alert_close("정상적으로 로그인하여 접근하시기 바랍니다.");
}

@ksort($auth);

// 가변 메뉴
unset($auth_menu);
unset($menu);
unset($amenu);
$tmp = dir($g4['admin_path']);
while ($entry = $tmp->read()) 
{
    //if (!preg_match("/^admin.menu([0-9]{3}).php/", $entry, $m)) 
    if (!preg_match("/^admin.menu([0-9]{3}).*\.php/", $entry, $m)) 
        continue;  // 파일명이 menu 으로 시작하지 않으면 무시한다. 

    $amenu[$m[1]] = $entry;
    include_once($g4['admin_path']."/".$entry);
}
@ksort($amenu);

$qstr = "";
if (isset($sst)) $qstr .= "&sst=$sst";
if (isset($sod)) $qstr .= "&sod=$sod";
if (isset($sfl)) $qstr .= "&sfl=$sfl";
if (isset($stx)) $qstr .= "&stx=$stx";
if (isset($page)) $qstr .= "&page=$page";
//$qstr = "sst=$sst&sod=$sod&sfl=$sfl&stx=$stx&page=$page";



/* 페이징 */
// 현재페이지, 총페이지수, 한페이지에 보여줄 행, URL
function jy_paging($write_pages, $cur_page, $total_page, $url)
{
	global $g4;

	if($total_page > 1) {
		$str = "<div class='jy_page'>&nbsp;";

		if ($cur_page < 2) $str .= "<span class='pre2' title='맨앞'>맨앞</span>";
		else if ($cur_page > 1) $str .= "<a href='".$url.($start_page)."' class='pre2' title='맨앞'>맨앞</a>";

		$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
		$end_page = $start_page + $write_pages - 1;

		if ($end_page >= $total_page) $end_page = $total_page;

		if ($start_page > 1) $str .= "<a href='".$url.($start_page-1)."' class='pre' title='이전'>이전</a>";
		else if ($start_page = 1) $str .= "<span class='pre' title='이전'>이전</span>";

		if ($total_page > 1)
		{
				for ($k=$start_page;$k<=$end_page;$k++)
				{
					if ($cur_page != $k) {
						if($k == $start_page) $str .= "<a href='$url$k' class='first'>$k</a>";
						else $str .= "<a href='$url$k'>$k</a>";
					} else {
						if($k == $start_page) $str .= "<span class='first curent'>$k</span>";
						else $str .= "<span class='curent'>$k</span> ";
					}
				}
		}

		if ($total_page > $end_page) $str .= "<a href='".$url.($end_page+1)."' class='next' title='다음'></a>";
		else $str .= "<span class='next' title='다음'>다음</span>";

		if ($cur_page < $total_page) $str .= "<a href='$url".($total_page)."' class='next2' title='맨뒤'></a>";
		else $str .= "<span class='next2' title='맨뒤'>맨뒤</span>";

		$str .= "</div>";
	}

	return $str;
}

function print_menu1($key, $no)
{
	global $menu;

	list($str, $end_lnb) = print_menu2($key, $no, "");

	if($str) {
		$return = "<ul id='lnb_{$key}' class='layer_lnb";
		if($end_lnb) $return .= " fix_layer_lnb";
		$return .= "'>{$str}</ul>";
	}

	return $return;
}


function print_menu2($key, $no, $snb='0')
{
	global $menu, $auth_menu, $is_admin, $auth, $g4;

	if($snb) $aaa = substr($key,4,3).$snb;

	$str = "";
	for($i=1; $i<count($menu[$key]); $i++)
	{
		if ($is_admin != "super" && (!array_key_exists($menu[$key][$i][0],$auth) || !strstr($auth[$menu[$key][$i][0]], "r")))
			continue;

		if($menu[$key][$i][0] == "-") {
			if(!$snb) $str .= "<li class='line'>-</li>";
		} else {

			$span1 = $span2 = "";
			if (isset($menu[$key][$i][3]))
			{
				$span1 = "<span style='{$menu[$key][$i][3]}'>";
				$span2 = "</span>";
			}
			// 3단메뉴가 있다면
			if (is_array($menu[$key][$i][4])) {

				$bbb = print_menu3($menu[$key][$i], $aaa);
				$str .= "<li class='extend";
				if($i==1) $str .= " first";
				else if(!is_array($menu[$key][$i-1][4])) $str .= " normal_relay"; // 앞메뉴 3단 없을때
				if(is_array($menu[$key][$i-1][4])) $str .= " extend_relay"; // 앞메뉴가 3단일때
				if($bbb['on_sub'] && $bbb['on_sub'] == $aaa) $str .= " fix_on click_on";
				$str .= "'><a class='more' href='";
				if($menu[$key][$i][2]) $str .= $menu[$key][$i][2];
				else $str .= "javascript:;";
				$str .= "'>{$span1}{$menu[$key][$i][1]}{$span2}</a>";
				$str .= $bbb['str'];
				$str .= "</li>";
				if($i==count($menu[$key])-1) $end_item = true; // 마지막 메뉴라면
			} else {
				$str .= "<li class='";
				if($aaa == $menu[$key][$i][0]) $str .= " on";
				if(is_array($menu[$key][$i-1][4])) $str .= " relay";
				$str .= "'><a href='{$menu[$key][$i][2]}'>{$span1}{$menu[$key][$i][1]}{$span2}</a></li>";
			}

			$auth_menu[$menu[$key][$i][0]] = $menu[$key][$i][1];
		}
	}

	if($snb==="")
		return array($str, $end_item);
	else
		return $str;
}

function print_menu3($sub_menu, $aaa) {

	$str = "<ul>";
	foreach($sub_menu[4] as $sub_key => $sub_value) {
		$str .= "<li";
		if($aaa == $sub_value[0]) {
			$str .= " class='on2' ";
			$return['on_sub'] = $sub_value[0];
		}
		$str .= "><a href='{$sub_value[2]}'>{$sub_value[1]}</a></li>";
	}
	$str .= "</ul>";
	$str .= "</div>";

	// 펼침효과를 만들기위해 jquery에서 php로 변경(2011-05-18)
	if($return['on_sub']) 
		$str = "<div class='second_sub_menu' style='display:block;'>".$str;
	else
		$str = "<div class='second_sub_menu' style='display:none;'>".$str;
	$return['str'] = $str;

	return $return;
}
?>
