<?
// 문서루트 경로
//$DOC_ROOT = "http://".$_SERVER['SERVER_ADDR']."/status";

$SERVER_ARR = explode(':',$_SERVER['HTTP_HOST']);
$SERVER_URL = $SERVER_ARR[0];

$DOC_ROOT = "http://".$SERVER_URL."/status";

//$server_arr = explode(':',$_SERVER['HTTP_HOST']);
//$server_url = $server_arr[0];
//printf("<script>
//alert('DOC_ROOT = $DOC_ROOT , $server_url');
//</script>");






// 라이브러리 경로
$LIB_PATH      = "/user2/service/opendisk_lib";

// 외부호출할 실행파일 경로
$BIN_PATH                 = "/user2/service/bin";
$VOLUME_MANAGER_FIME_NAME = "service_manager";
$BACKUP_MANAGER_FILE_NAME = "db_process";

// 삭제한 볼륨로그를 저장할 경로
$VOLUME_REMOVE_LOG_PATH = "/user2/service/httpd/htdocs/sms/log";

// RRD 데이터베이스를 write하고 이미지를 생성해 놓을 경로.
$RRD_WRITE_PATH     = "/user/service/opendisk_rrd";
$RRD_IMG_WRITE_PATH = "/user/httpd/htdocs/sms/rrdimg";

// RRD공유라이브러리를 명시적으로 로딩할 것인가 아닌가 플래그
$RRD_LOAD_SO = 1;

// 쿠키 암호화 여부 플래그
$COOKIE_CRYPT_ENABLE = 0;

// 디비백업파일이 존재하는 경로
$BACKUP_FILE_PATH = "/user2/service/db_download";

// html 페이지 타이틀 
$HTML_PAGE_TITLE = "OpenDisk Cluster Administration";

// 코드 (관리자레벨)
$CODE_ADMIN_TYPE = array();
$CODE_ADMIN_TYPE[0][0] = "AT01";
$CODE_ADMIN_TYPE[0][1] = "전체관리자";
$CODE_ADMIN_TYPE[1][0] = "AT02";
$CODE_ADMIN_TYPE[1][1] = "일반관리자";

// 코드 (이벤트)
$CODE_EVENT_TYPE = array();
$CODE_EVENT_TYPE[0][0] = "EV01";
$CODE_EVENT_TYPE[0][1] = "관리작업";
$CODE_EVENT_TYPE[1][0] = "EV02";
$CODE_EVENT_TYPE[1][1] = "시스템장애";
$CODE_EVENT_TYPE[2][0] = "EV03";
$CODE_EVENT_TYPE[2][1] = "용량경고";
$CODE_EVENT_TYPE[3][0] = "RAID";
$CODE_EVENT_TYPE[3][1] = "RAID 이벤트 ";

/**
 * 볼륨관련 커맨드를 실행한다.
 * 
 * @param ManageType      769:볼륨추가, 770:볼륨변경, 771:볼륨삭제
 * @param VolumeSeq       추가할 볼륨의 데이터베이스테이블시퀀스
 *
 * @return  "1"             동작 성공시
 * @return  "some reason"   동작 실패시 원인
 */
function ManageVolume( $ManageType, $VolumeSeq )
{
    global $BIN_PATH;
    global $VOLUME_MANAGER_FIME_NAME;
    
    $CMD = $BIN_PATH . "/" . $VOLUME_MANAGER_FIME_NAME . " " . "$ManageType" . " " . "$VolumeSeq";

	//echo $CMD;exit;
    if( !$FileHandle = popen("$CMD", "r") )
    {
        return "error: process fork failed";
    }
    while( !feof($FileHandle) )
    {
        $output .= fgets( $FileHandle, 1024 );
    }
    pclose( $FileHandle );
    
    // 커맨드를 실행하여 성공이면 1을 반환하고 그외에는 모두 실패로 간주한다.
    if( $output == "SUCCESS\n" )
    {
        return 1;
    }
    else
    {
        return $output;
    }
}

/**
 * 백업관련 커맨드를 실행한다.
 * 
 * @param ManageType        'backup':볼륨별개별백업, 'backupall':전체볼륨백업
 * @param DBIP				백업할 DB서버의 IP
 * @param Port				백업할 DB서버의 PORT		
 * @param VolumeSeq         개별볼륨백업일때 그 볼륨의 시퀀스
 *
 * @return  "1"             동작 성공시
 * @return  "some reason"   동작 실패시 원인
 */
function ManageBackup( $ManageType, $DBIP, $Port, $VolumeSeq, $VolumName)
{
    global $BIN_PATH;
    global $BACKUP_MANAGER_FILE_NAME;
    $CMD = $BIN_PATH . "/" . $BACKUP_MANAGER_FILE_NAME . " " . "$ManageType" . " " . "$DBIP" . " " . "$Port" . " " ."$VolumeSeq". " " .$VolumName;

	//echo $CMD; exit; 
    if( !$FileHandle = popen("$CMD", "r") )
    {
        return "error: process fork failed";
    }
    while( !feof($FileHandle) )
    {
        $output .= fgets( $FileHandle, 1024 );
    }
    pclose( $FileHandle );
    
    // 커맨드를 실행하여 성공이면 1을 반환하고 그외에는 모두 실패로 간주한다.
    if( $output == "SUCCESS\n" )
    {
        return 1;
    }
    else
    {
        return $output;
    }
}

/**
 * 용량단위변환 : 메가바이트 -> 기가바이트 단위로 변환 (1024 M = 1G)
 */
function StorageUnit_GB( $value ) 
{
    return sprintf("%.2fGB", trim($value) / 1024);
}

/**
 * 용량단위변환 : 메가바이트 -> 기가/테라바이트 단위로 변환
 */
function StorageUnit( $value ) 
{
    if( trim($value) / 1024 > 1024 ) 
        return sprintf("%.2fTB", trim($value) / 1024 / 1024);
    else 
        return sprintf("%.2fGB", trim($value) / 1024);
}

/**
 * 트래픽단위변환 : 바이트 -> 메가바이트 단위로 변환
 */
function TrafficUnit( $value ) 
{
    return sprintf("%.2f", trim($value) / 1000 / 1000);
}

/**
 * html 헤더태그를 생성
 *
 * @param ScriptPath      스크립트가 있을 경우 그 파일명
 */
function PrintHtmlHeader( $ScriptPath ) 
{
    global $DOC_ROOT;
    global $HTML_PAGE_TITLE;
    
    echo "<head>";
    echo "<title>$HTML_PAGE_TITLE</title>";
    echo "<meta HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=euc-kr\">";
    echo "<link href=\"$DOC_ROOT/css/style.css\" rel=\"stylesheet\" type=\"text/css\">";
    if( $ScriptPath != "" ) 
        echo "<script language=\"javascript\" type=\"text/javascript\" src=\"$ScriptPath\"></script>";
	echo "<style>BODY,TABLE,TR,TD {font-size:12px;}select{behavior: url('".$DOC_ROOT."/css/selectbox.htc');}TD{line-height:150%;}</style>";
    echo "</head>";
}

/**
 * 코드값을 저장하는 셀렉트박스 태그를 생성
 *
 * @param arrCode         코드값을 저장한 배열명
 * @param selectedvalue   selected 옵션을 삽입할 value값
 */
function PrintCodeSelectOption( $arrCode, $selectedvalue ) 
{
    for( $i = 0; $i < sizeof($arrCode); $i++ )
    {
        if( $arrCode[$i][0] == $selectedvalue )
            echo "<option value='" . $arrCode[$i][0] . "' selected>" . $arrCode[$i][1];
        else
            echo "<option value='" . $arrCode[$i][0] . "'>" . $arrCode[$i][1];
    }
}

/**
 * 셀렉트박스 태그를 생성
 *
 * @param type             YYYY/MM/DD 중의 하나
 * @param name             셀렉트태그의 이름속성
 * @param start            시작할 값
 * @param end              끝 값
 * @param selectedvalue    어떤 값을 선택상태로 할 것인가 지정
 */
function PrintSelectbox( $type, $name, $start, $end, $selectedvalue ) 
{
    switch( $type ) 
    {
    case "YYYY":
        echo "<select name='$name' style='width:60; height=19'>";
        for( $i = $start; $i < ($end + 1); $i++ )
        {
            if( $i == $selectedvalue )
                echo "<option value='$i' selected>$i";
            else
                echo "<option value='$i'>$i";
        }
        echo "</select>&nbsp;년&nbsp;";
        break;
        
    case "MM":
        echo "<select name='$name' style='width:45; height=19'>";
        for( $i = $start; $i < ($end + 1); $i++ )
        {
            if( $i == $selectedvalue )
                echo "<option value='$i' selected>$i";
            else
                echo "<option value='$i'>$i";
        }        
        echo "</select>&nbsp;월&nbsp;";
        break;
    
    case "DD":
        echo "<select name='$name' style='width:45; height=19'>";
        for( $i = $start; $i < ($end + 1); $i++ )
        {
            if( $i == $selectedvalue )
                echo "<option value='$i' selected>$i";
            else
                echo "<option value='$i'>$i";
        }        
        echo "</select>&nbsp;일&nbsp;";
        break;
    }
}

/**
 * 메시지박스를 호출
 */
function AlertMsg( $msg ) 
{
    $msg = str_replace ("\n", "\\r", $msg);
    echo("<script language=\"javascript\">
    <!--
    alert('$msg');
    //-->
    </script>
    ");
}

/**
 * 메시지박스를 보여주고 이전페이지로 이동
 */
function AlertBack( $msg ) 
{
    $msg = str_replace ("\n", "\\r", $msg);
    echo("<script language=\"javascript\">
    <!--
    alert('$msg');
    history.back();
    //-->
    </script>
    ");
}

/**
 * 쿠키값을 체크하여 정상적으로 로그인한 사용자인지 확인한 후 관리자레벨을 반환한다.
 * @return  AdminLevel             1: 전체관리자레벨  2: 일반관리자레벨
 */
require_once( "crypt.inc" );    // 암호화 인터페이스
function CheckCookie() 
{
    global $DOC_ROOT;
    global $CODE_ADMIN_TYPE;
    
    if( isset($_COOKIE["cookie_admin_id"]) )
    {
        $CookieSEED = "skldfhoi40wyrf83yf0hs9efh8943yf9herf";
        $crypt = new cast128;
        $crypt->setkey( $CookieSEED );
        
		if($COOKIE_CRYPT_ENABLE == 1){
			$dec_admin_id       = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_id"]       ) );
			$dec_admin_name     = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_name"]     ) );
			$dec_admin_type     = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_type"]     ) );
			$dec_admin_email    = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_email"]    ) );
			$dec_admin_phone    = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_phone"]    ) );
			$dec_admin_sms_send = $crypt->decrypt( base64_decode( $_COOKIE["cookie_admin_sms_send"] ) );
		}else{
			$dec_admin_id       = $_COOKIE["cookie_admin_id"]       ;
			$dec_admin_name     = $_COOKIE["cookie_admin_name"]     ;
			$dec_admin_type     = $_COOKIE["cookie_admin_type"]     ;
			$dec_admin_email    = $_COOKIE["cookie_admin_email"]    ;
			$dec_admin_phone    = $_COOKIE["cookie_admin_phone"]    ;
			$dec_admin_sms_send = $_COOKIE["cookie_admin_sms_send"] ;
		}

        if( $dec_admin_type == $CODE_ADMIN_TYPE[0][0] )
            return 1;
        else if( $dec_admin_type == $CODE_ADMIN_TYPE[1][0] )
            return 2;
    }
    else
    {
		foreach ($_REQUEST as $req_key => $req_val){
			if (!is_array ($_REQUEST[$req_key]))
			{
				if($req_key!='id'&&$req_key!='password'&&$req_key!='admintype')
					$get_str .= "$req_key=$req_val&";	
			}
		}
		/***
		echo nl2br(print_r($_SERVER,true));exit;
		if($get_str!='')
			$get_str .= "HTTP_REFERER=".urlencode($_SERVER['HTTP_REFERER']);
		echo $_SERVER['HTTP_REFERER'];exit;
		****/

		echo( "<META http-equiv='refresh' content='0; url=$DOC_ROOT/login/login.html?src_uri=".urlencode($_SERVER['REQUEST_URI'])."'>" );
        exit;
    }
}

/**
 * 좌측메뉴를 구성하는 테이블을 생성한다.
 *
 * @param Title              좌측메뉴의 타이틀
 * @param submenu_exist      타이틀 아래에 서브메뉴를 추가할 것인가 아닌가
 * @param arr_submenu        추가할 서브메뉴의 텍스트를 저장한 배열
 * @param arr_submenulink    추가할 서브메뉴의 링크를   저장한 배열
 * @param SelectedIndex      서브메뉴들 중에 어느 것을 선택하게 할 것인가 그 배열인덱스
 */
function PrintLeftMenu( $Title, $submenu_exist, $arr_submenu, $arr_submenulink, $SelectedIndex )
{
?>
<table width=100% border=0 cellpadding=0 cellspacing=0>
  <tr height=12>
    <td></td>
  </tr>
  <tr height=1>
    <td bgcolor="#B9B9B9"></td>
  </tr>
  <!-- menu title -->
  <tr height=30>
    <td align=center class="LeftMenuTitle">
      <?echo("$Title")?>
    </td>
  </tr>
  <tr height=1>
    <td bgcolor="#B9B9B9"></td>
  </tr>
  <!-- submenu -->
  <?
  if( $submenu_exist == 1 )
  {
    for( $i = 0; $i < count($arr_submenu); $i++ ) 
    {
        if( $i == $SelectedIndex )
            echo("<tr height=30><td align=center class=LeftMenu bgcolor=#CDCDCD><a href='$arr_submenulink[$i]'>$arr_submenu[$i]</a></td></tr>");
        else
            echo("<tr height=30><td align=center class=LeftMenu><a href='$arr_submenulink[$i]'>$arr_submenu[$i]</a></td></tr>");
    }
}
?>
</table>
<?
}
?>
