<?
if (!defined('_GNUBOARD_')) exit;

// 최신글 추출
function latest($skin_dir="", $bo_table, $rows=10, $subject_len=40, $options="")
{
    global $g4;

	if( $content = open_cache($bo_table) ) 	return $content;

    if ($skin_dir)
        $latest_skin_path = "$g4[path]/skin/latest/$skin_dir";
    else
        $latest_skin_path = "$g4[path]/skin/latest/basic";

    $list = array();

    $sql = " select * from $g4[board_table] where bo_table = '$bo_table'";
    $board = sql_fetch($sql);

    $tmp_write_table = $g4['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
    //$sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_id desc limit 0, $rows ";
    // 위의 코드 보다 속도가 빠름
    $sql = " select * from $tmp_write_table where wr_is_comment = 0 order by wr_num limit 0, $rows ";
    //explain($sql);
    $result = sql_query($sql);
    for ($i=0; $row = sql_fetch_array($result); $i++) 
        $list[$i] = get_list($row, $board, $latest_skin_path, $subject_len);
    
    ob_start();
    include "$latest_skin_path/latest.skin.php";
    $content = ob_get_contents();
    ob_end_clean();

	write_cache($tmp_write_table,$content);

    return $content;
} 

function write_cache($board_table,$content)
{
	global $g4;

	if( !is_dir("$g4[path]/cache_latest") ) {
		@mkdir("$g4[path]/data/cache_latest", 0707);
		@chmod("$g4[path]/data/cache_latest", 0707);
	}

	$fp = fopen( "$g4[path]/data/cache_latest/cache_$board_table.tmp", 'w');
	fputs($fp, $content);
	fclose($fp);
}

function open_cache($bo_table)
{
	global $g4;

	$tmp_write_table = $g4['write_prefix'] . $bo_table; // 게시판 테이블 전체이름

    // 캐쉬파일이 없으면 무조건 리턴 false
	if( !is_file("$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp") ) return false;

	// 초단위, 캐쉬 생성이후 지정된 시간이 지나면 무조건 캐쉬 업데이트; 1시간 = 3600초
	$update_time = 3600; 

	// 현재시간
	$time = time();
	
	// 파일시간
	$ftime = filemtime("$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp");	

	// 캐쉬파일 생성 이후 흐른시간
	$dTime = $time - $ftime;

    // 업데이트 시간이 만료되면 리턴 false
	if( $dTime >= $update_time )	return false;

	// 다음업데이트 시간
	$nextUpdate = date("[Y/m/d H:i:s]",($ftime + $update_time));
	// 캐쉬 파일 생성 시간
	$ftime = date("[Y/m/d H:i:s]",$ftime);

    ob_start();
    readfile( "$g4[path]/data/cache_latest/cache_$tmp_write_table.tmp" );
    $content = ob_get_contents();
    ob_end_clean();

	return $content . "<!-- $bo_table : cached$ftime next$nextUpdate -->";
}
?>