<?php

if(!defined('D3DIARY_FUNCTIONS_DEFINED')) {
    define('D3DIARY_FUNCTIONS_DEFINED', '1');

function d3diary_get_cname($mydirname,$uid,$cid)
{
	global $xoopsDB;
	
	if($cid==0){
		//return '_MD_NOCNAME';
		return '';
	}
	
	$sql = "SELECT cname FROM ".$xoopsDB->prefix($mydirname."_category")." WHERE (uid = '$uid' OR uid='0') AND cid = '$cid'";
	//$sql = "SELECT cname FROM ".$xoopsDB->prefix($mydirname."_category")." WHERE uid = '$uid' AND cid = '$cid'";
	if ( !$result = $xoopsDB->query($sql) ) {
		//return '_MD_NOCNAME';
		return '';
	}
	if ( !$row = $xoopsDB->fetchArray($result) ) {
		//return '_MD_NOCNAME';
		return '';
	}
	return $row['cname'];
}

function d3diary_get_openarea_cat($mydirname,$uid,$cid)
{
	global $xoopsDB;
	
	if($cid==0){
		return 0;
	}
	
	$sql = "SELECT openarea FROM ".$xoopsDB->prefix($mydirname."_category")." WHERE uid = '$uid' AND cid = '$cid'";
	if ( !$result = $xoopsDB->query($sql) ) {
		return 0;
	}
	if ( !$row = $xoopsDB->fetchArray($result) ) {
		return 0;
	}
	return intval($row['openarea']);
}

function d3diary_get_count_diary($mydirname,$uid)
{
	global $xoopsDB;
	$sql = "SELECT cnt FROM ".$xoopsDB->prefix($mydirname."_cnt")." WHERE uid = '$uid' AND ymd='1111-11-11'";
	if ( !$result = $xoopsDB->query($sql) ) {
		return 0;
	}
	if ( !$row = $xoopsDB->fetchArray($result) ) {
		return 0;
	}
	return $row['cnt'];
}

// 日記用カウンタ
function d3diary_countup_diary($mydirname,$uid)
{
	global $xoopsDB;
	$interval=5*60; // 5分1カウント
	
	$NowTime = time() + 9 * 60 * 60;
	$NowYMD = date('Y-m-d', $NowTime);

	$RemoteAddr = (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
	$RemoteHost = (isset($_SERVER['REMOTE_HOST']) ? $_SERVER['REMOTE_HOST'] : '');
	if ($RemoteHost == '') { $RemoteHost = $RemoteAddr; }
	$slashedRH = addslashes($RemoteHost);

	//	Delete Old Access Data
	$xoopsDB->queryF("DELETE FROM ".$xoopsDB->prefix($mydirname."_cnt_ip")." WHERE acctime < ".($NowTime - $interval));
	
	// あったら時刻更新のみ
	$sql = "SELECT accip FROM ".$xoopsDB->prefix($mydirname."_cnt_ip")." WHERE accip = '$slashedRH' AND uid='$uid'";
	if ($xoopsDB->getRowsNum($xoopsDB->query($sql)) != 0) {
		$sql = "UPDATE ".$xoopsDB->prefix($mydirname."_cnt_ip")." SET acctime = $NowTime WHERE accip = '$slashedRH' AND uid='$uid'";
		$res = $xoopsDB->queryF($sql);
		return;
	}
	//	Access Data
	$xoopsDB->queryF("INSERT INTO ".$xoopsDB->prefix($mydirname."_cnt_ip")." (accip, acctime, uid) VALUES ('$slashedRH', $NowTime, '$uid')");

	// deleted dayly cout up 
/*
	$res = $xoopsDB->query("SELECT cnt FROM ".$xoopsDB->prefix($mydirname."_cnt")." WHERE uid='$uid' AND ymd='$NowYMD'");
	if ($xoopsDB->getRowsNum($res) == 0) {
		$xoopsDB->queryF("INSERT INTO ".$xoopsDB->prefix($mydirname."_cnt")." (cnt, uid, ymd) VALUES (1, '$uid', '$NowYMD')");
	} else {
		$xoopsDB->queryF("UPDATE ".$xoopsDB->prefix($mydirname."_cnt")." SET cnt = (cnt + 1) WHERE uid = '$uid' AND ymd='$NowYMD'");
	}
*/
	// cout up 
	$res = $xoopsDB->query("SELECT cnt FROM ".$xoopsDB->prefix($mydirname."_cnt")." WHERE uid='$uid' AND ymd='1111-11-11'");
	if ($xoopsDB->getRowsNum($res) == 0) {
		$xoopsDB->queryF("INSERT INTO ".$xoopsDB->prefix($mydirname."_cnt")." (cnt, uid, ymd) VALUES (1, '$uid', '1111-11-11')");
	} else {
		$xoopsDB->queryF("UPDATE ".$xoopsDB->prefix($mydirname."_cnt")." SET cnt = (cnt + 1) WHERE uid = '$uid' AND ymd='1111-11-11'");
	}

}


function d3diary_getpost_param($pname)
{
	if(isset($_GET[$pname]))$pdat=$_GET[$pname];
	elseif(isset($_POST[$pname]))$pdat=$_POST[$pname];
	else $pdat="";
	
	return $pdat;
}

function d3diary_check_exist_user($mydirname,$uid)
{
	global $xoopsDB;
	$sql = "SELECT count(*) AS count_num FROM ".$xoopsDB->prefix("users")." WHERE (uid = '$uid') ";
	
	if ( !$result = $xoopsDB->query($sql) ) {
		return false;
	}

	if ( !$row = $xoopsDB->fetchArray($result) ) {
		return false;
	}

	if ( $row['count_num'] <= 0 ) {
		return false;
	}

  	return true;
}

function d3diary_check_isadmin($mydirname, $uid)
{
	global $xoopsUser;

	// d3diary モジュールconfig
	// module ID  // added by naao
	$module_handler =& xoops_gethandler('module');
	$xoopsModule = $myModule =& $module_handler->getByDirname($mydirname);
	$mid = $myModule->getVar('mid');

	// モジュール管理者権限のチェック
	$moduleperm_handler =& xoops_gethandler( 'groupperm' ) ;
	if( is_object( @$xoopsUser ) && $moduleperm_handler->checkRight('module_admin', $mid, $xoopsUser->getGroups())) { $isadmin = true; } else { $isadmin = false; }

  	return $isadmin;
}

function d3diary_check_editperm($mydirname,$bid, $uid)
{
	global $xoopsDB;
	$sql = "SELECT count(*) AS count_num FROM ".$xoopsDB->prefix($mydirname."_diary")." WHERE (uid = '$uid') and (bid='$bid')";
	if ( !$result = $xoopsDB->query($sql) ) {
		return false;
	}
	if ( !$row = $xoopsDB->fetchArray($result) ) {
		return false;
	}
	if ( $row['count_num'] <= 0 ) {
		if ( !d3diary_check_isadmin($mydirname, $uid) ) {
			return false;
		}
	}
  	return true;
}

// naao added each entry's permission check
function d3diary_check_permission($mydirname, $req_uid, $uid, $openarea, $openarea_entry=0, $openarea_category=0)
{
	global $xoopsDB, $xoopsConfig;
	
	// module ID  // added by naao
	$module_handler =& xoops_gethandler('module');
	$this_module =& $module_handler->getByDirname($mydirname);
	$mid = $this_module->getVar('mid');

	// module config  // added by naao
	$config_handler =& xoops_gethandler("config");
	$moduleConfig = $config_handler->getConfigsByCat(0, $mid);
	$use_friend = intval( $moduleConfig['use_friend']);
	$friend_dirname = $moduleConfig['friend_dirname'];

	$req_uid = intval($req_uid);
	$uid = intval($uid);
	$openarea = intval($openarea);
	$openarea_entry = intval($openarea_entry);
	$openarea_category = intval($openarea_category);
	
	if(d3diary_check_isadmin($mydirname, $uid)){return true;}

	if($req_uid != $uid){
		if($openarea_entry == 100){return false;}
		if($openarea_entry == 0 && $openarea_category == 100){return false;}
	}

	if($req_uid == $uid){return true;}
	
	if($openarea_category >= 1 && $openarea_category <= 3){$openarea = $openarea_category;}
	if($openarea_entry >= 1 && $openarea_entry <= 3){$openarea = $openarea_entry;}

	if($openarea == 0){return true;}
	
	if($openarea == 1){
		if($uid==0){return false;}else{return true;}
	}
	
	// xsns
	if (!empty($friend_dirname) && ( $use_friend ==1 || $use_friend ==2 )){
		if($openarea == 2){
			return d3diary_is_friend($mydirname, $req_uid, $uid);
		}
		if($openarea == 3){
			return d3diary_is_friend2($mydirname, $req_uid, $uid);
		}
	}
	
	return false;
}

// naao added each entry list's permission check
function d3diary_can_display($req_uid, $uid, $openarea, $is_admin, $is_friend, $is_friend2)
{
	$req_uid = intval($req_uid);
	$uid = intval($uid);
	$openarea = intval($openarea);

	if($openarea == 0 ) {
		return true;
	} elseif (($openarea == 1 && $uid>0) || $is_admin==1) {
		return true;
	} elseif ($req_uid == $uid) {
		return true;
	} elseif ($openarea == 2 && $is_friend) {
		return true;
	} elseif ($openarea == 3 && $is_friend2) {
		return true;
	}

	return false;
}

// friend
function d3diary_is_friend($mydirname, $uid_from, $uid_to)
{
	$friends = d3diary_get_friends( $mydirname, $uid_to );

  	if ( in_array( $uid_from, $friends )) {
  		return true;
  	} else {
  		return false;
  	}
}

// friend's friend
function d3diary_is_friend2($mydirname, $uid_from, $uid_to)
{
	$friends2 = d3diary_get_friends2( $mydirname, $uid_to );

  	if ( in_array( $uid_from, $friends2 )) {
  		return true;
  	} else {
  		return false;
  	}
}

// get friends
function d3diary_get_friends( $mydirname, $uid_to )
{
	global $xoopsDB;
	
	// module ID  // added by naao
	$module_handler =& xoops_gethandler('module');
	$this_module =& $module_handler->getByDirname($mydirname);
	$mid = $this_module->getVar('mid');

	// module config  // added by naao
	$config_handler =& xoops_gethandler("config");
	$moduleConfig = $config_handler->getConfigsByCat(0, $mid);
	$use_friend = intval( $moduleConfig['use_friend']);
	$friend_dirname = $moduleConfig['friend_dirname'];

	if (!empty($friend_dirname) && $use_friend ==1 ){
		// XSNS
		$sql = "SELECT uid_from FROM ".$xoopsDB->prefix($friend_dirname."_c_friend").
			" WHERE uid_to=".$uid_to;
			
	} elseif (!empty($friend_dirname) && $use_friend ==2 ){
		// MYFRIENDS
		$sql = "SELECT uid as uid_from FROM ".$xoopsDB->prefix($friend_dirname."_friendlist").
			" WHERE friend_uid =".$uid_to;
	} else {
		return Array();
	}
	
			
	!$result = $xoopsDB->query($sql);
	$friends = array();
	while($dbdat = $xoopsDB->fetchArray($result)){
		$friends[] = intval($dbdat['uid_from']);
	}
	return $friends;
}

// get friend's friends
function d3diary_get_friends2( $mydirname, $uid_to )
{
	global $xoopsDB;

	// module ID  // added by naao
	$module_handler =& xoops_gethandler('module');
	$this_module =& $module_handler->getByDirname($mydirname);
	$mid = $this_module->getVar('mid');

	// module config  // added by naao
	$config_handler =& xoops_gethandler("config");
	$moduleConfig = $config_handler->getConfigsByCat(0, $mid);
	$use_friend = intval( $moduleConfig['use_friend']);
	$friend_dirname = $moduleConfig['friend_dirname'];

	$friends = d3diary_get_friends( $mydirname, $uid_to );
	
	if (count($friends) >0 && !empty($friend_dirname) && $use_friend ==1 ){
		// XSNS
		$sql = "SELECT uid_from FROM ".$xoopsDB->prefix($friend_dirname."_c_friend").
			" WHERE uid_to in (".implode(",", $friends).")";
			
	} elseif (count($friends) >0 && !empty($friend_dirname) && $use_friend ==2 ){
		// MYFRIENDS
		$sql = "SELECT uid as uid_from FROM ".$xoopsDB->prefix($friend_dirname."_friendlist").
			" WHERE friend_uid in (".implode(",", $friends).")";
	} else {
		return Array();
	}

	!$result = $xoopsDB->query($sql);
	while($dbdat = $xoopsDB->fetchArray($result)){
		$friends2[] = intval($dbdat['uid_from']);
	}
	$friends3 = array_unique( array_merge( $friends, $friends2 ));
	
	return $friends3;
	
}

function d3diary_get_xoopsuname($uid){
	global $xoopsDB;
	
	$sql = "SELECT uname
			FROM ".$xoopsDB->prefix('users')."
			WHERE uid=".intval($uid);
	$result = $xoopsDB->query($sql);
	
	$uname = '';
	while ( $dbdat = $xoopsDB->fetchArray($result)){
		$uname = $dbdat['uname'];
	}
	return $uname;

}

function d3diary_print_calender($mydirname,$req_uid,$year,$month,$uid)
{
	global $xoopsDB, $xoopsTpl,$constpref;
	$dcnt="";
	
	//$constpref = '_MI_' . strtoupper( $mydirname ) ;
	
	$start=$year."-".$month."-1 00:00:00";
	if($month==12){
		$end=($year+1)."-01-01 00:00:00";
	}else{
		$end=$year."-".($month+1)."-01 00:00:00";
	}

	$editperm=0;
	$whr_openarea = "(openarea <>100 OR uid = $uid) AND";
	if(d3diary_check_isadmin($mydirname, $uid)){
		$editperm=1;
		$whr_openarea = "";
	}

	$sql = "SELECT * FROM ".$xoopsDB->prefix($mydirname."_diary")." WHERE ".$whr_openarea." uid = '".$req_uid."' and create_time>='".$start."' and create_time<'".$end."'";
	$result = $xoopsDB->query($sql);
	while ( $dbdat = $xoopsDB->fetchArray($result)){
		$ctime=split("[-: ]",$dbdat['create_time']);
#		$dcnt[intval($ctime[2])]=(empty($dcnt[intval($ctime[2])])) ? 1 : $dcnt[intval($ctime[2])]+1;
		$tmp=d3diary_MyformatTimestamp(mktime($ctime[3],$ctime[4],$ctime[5],$ctime[1],$ctime[2],$ctime[0]), "d");
		$dcnt[intval($tmp)]=(empty($dcnt[intval($tmp)])) ? 1 : $dcnt[intval($tmp)]+1;
	}

	$last_day=intval(date("j" ,(mktime(0,0,0,($month+1),1,$year)-1)));
	$first_w =intval(date("w" ,mktime(0,0,0,$month,1,$year)));
	$before_month_y=date("Y" ,(mktime(0,0,0,$month,1,$year)-1));
	$before_month_m=date("m" ,(mktime(0,0,0,$month,1,$year)-1));
	$next_month_y=date("Y" ,mktime(0,0,0,($month+1),1,$year));
	$next_month_m=date("m" ,mktime(0,0,0,($month+1),1,$year));

	$html="<table class='outer' style='text-align:center;'><tr><th colspan=7 style='white-space:nowrap;text-align:left;'>".intval($month).constant("_MD_CTITLE")."</td></tr>";
	$html.="<tr><td colspan=7 class='odd'>";
	$html.="<table><tr><td style='text-align:left;'><a href='".XOOPS_URL."/modules/".$mydirname."/index.php?req_uid=".$req_uid."&amp;mode=month&amp;year=".$before_month_y."&amp;month=".$before_month_m."'>&laquo;".constant("_MD_BEFORE_MONTH")."</a></td>";
	$html.="<td style='text-align:right;'><a href='".XOOPS_URL."/modules/".$mydirname."/index.php?req_uid=".$req_uid."&amp;mode=month&amp;year=".$next_month_y."&amp;month=".$next_month_m."'>".constant("_MD_NEXT_MONTH")."&raquo;</a></td></tr></table></td></tr>";
	$html.="<tr><td><font color='red'>".constant("_MD_W_SUN")."</font></td>";
	$html.="<td>".constant("_MD_W_MON")."</td>";
	$html.="<td>".constant("_MD_W_TUE")."</td>";
	$html.="<td>".constant("_MD_W_WED")."</td>";
	$html.="<td>".constant("_MD_W_THR")."</td>";
	$html.="<td>".constant("_MD_W_FRY")."</td>";
	$html.="<td><font color='blue'>".constant("_MD_W_SAT")."</font></td></tr><tr>";
	for($i=0;$i<$first_w;$i++){
		$html.="<td></td>";
	}
	for($j=1;$j<=$last_day;$j++){
		if($i==7){
			$i=0;
			$html.="</tr><tr>";
		}
		if(!empty($dcnt[$j]) and intval($dcnt[$j])>0){
			$html.="<td><a href='".XOOPS_URL."/modules/".$mydirname."/index.php?req_uid=".$req_uid."&amp;mode=date&amp;year=".$year."&amp;month=".$month."&amp;day=".$j."' style='text-decoration:underline;'>".$j."</a></td>";
		}else{
			$html.="<td>".$j."</td>";
		}
		$i++;
	}
	while($i<7){
		$html.="<td></td>";
		$i++;
	}
	$html.="</tr></table>";

	$xoopsTpl->assign("yd_calender", $html);


  	return true;
}

# カテゴリーリスト
function d3diary_assign_category($mydirname,$req_uid, $uid){
	global $xoopsDB, $xoopsTpl,$myts;
	
	//$sql = "SELECT *
	//		  FROM ".$xoopsDB->prefix($mydirname.'_category')."
	//          WHERE uid=".intval($req_uid)." ORDER BY corder";

	// naao changed for common category (uid=0)
	$sql = "SELECT *
			  FROM ".$xoopsDB->prefix($mydirname.'_category')."
	          WHERE uid=".intval($req_uid)." OR uid=0 ORDER BY corder";
	$result = $xoopsDB->query($sql);

	$editperm=0;
	$whr_openarea = "(openarea <>100 OR uid = $uid) AND";
	if(d3diary_check_isadmin($mydirname, $uid)){
		$editperm=1;
		$whr_openarea = "";
	}

	while ( $dbdat = $xoopsDB->fetchArray($result) ) {
		$sql2 = "SELECT count(*) AS count_num
				  FROM ".$xoopsDB->prefix($mydirname.'_diary')."
		          WHERE ".$whr_openarea." cid=".$dbdat['cid']." and uid=".intval($req_uid);

		$result2 = $xoopsDB->query($sql2);
		$dbdat2 = $xoopsDB->fetchArray($result2);
		$catopt['num']=$dbdat2['count_num'];

		$catopt['cid']  = intval($dbdat['cid']);
		$catopt['cname']  = $myts->makeTboxData4Show($dbdat['cname']);
		$catopt['blogtype']  = intval($dbdat['blogtype']);
		$xoopsTpl->append("catopt", $catopt);
	}
	
	$sql2 = "SELECT count(*) AS count_num
			  FROM ".$xoopsDB->prefix($mydirname.'_diary')."
	          WHERE ".$whr_openarea." cid=0 and uid=".intval($req_uid);
	$result2 = $xoopsDB->query($sql2);
	$dbdat2 = $xoopsDB->fetchArray($result2);

	if($dbdat2['count_num']>0){
		$catopt['num']=$dbdat2['count_num'];
		$catopt['cid']   = 0;
		$catopt['cname']   = constant("_MD_NOCNAME");
		$xoopsTpl->append("catopt", $catopt);
	}
}

# 最新日記リスト
function d3diary_assign_blist($mydirname,$req_uid, $uid){
	global $xoopsDB, $xoopsTpl,$myts;
	global $openarea, $is_friend, $is_friend2;

	
	$editperm=0;
	$whr_openarea = "(openarea <>100 OR uid = $uid) AND";
	if(d3diary_check_isadmin($mydirname, $uid)){
		$editperm=1;
		$whr_openarea = "";
	}

	$is_friend = d3diary_is_friend($mydirname,$req_uid, $uid);
	$is_friend2 = d3diary_is_friend2($mydirname,$req_uid, $uid);

	$sql = "SELECT *
			  FROM ".$xoopsDB->prefix($mydirname.'_diary')."
	          WHERE ".$whr_openarea." uid=".intval($req_uid)." ORDER BY create_time DESC LIMIT 0,7";

	$result = $xoopsDB->query($sql);

	while ( $dbdat = $xoopsDB->fetchArray($result) ) {
		$yd_list['bid']   = intval($dbdat['bid']);
		$yd_list['cid']   = intval($dbdat['cid']);
		$yd_list['title']   = $myts->makeTboxData4Show($dbdat['title']);
		$yd_list['create_time']   = $dbdat['create_time'];
#		$tmparray = split("[-: ]", $dbdat['create_time']);
		
#		$yd_list['year']   = $tmparray[0];
#		$yd_list['month']   = $tmparray[1];
#		$yd_list['day']   = $tmparray[2];
#		$yd_list['time']   = $tmparray[3].":".$tmparray[4];


		if (intval($dbdat['openarea'])>0) 
		{
			$yd_list['openarea'] = $dbdat['openarea'];
		} else {
			// added  category=permission 09-06-09
			$yd_list['openarea'] = d3diary_get_openarea_cat($mydirname, intval($dbdat['uid']), $yd_list['cid']);						}

		$got_openarea_cat = d3diary_get_openarea_cat($mydirname, $req_uid, $yd_list['cid']);
		if ($got_openarea_cat>0) {
			// added  category=permission 09-06-09
			$yd_list['openarea'] = $got_openarea_cat;
		}
		if (intval($dbdat['openarea'])>0) 
		{
			$yd_list['openarea'] = intval($dbdat['openarea']);
		} 
		

		$yd_list['can_disp'] = d3diary_can_display($req_uid, $uid, $yd_list['openarea'], $editperm, $is_friend, $is_friend2);


		$ctime = split("[-: ]", $dbdat['create_time']);
		
		$yd_list['year']   = d3diary_MyformatTimestamp(mktime($ctime[3],$ctime[4],$ctime[5],$ctime[1],$ctime[2],$ctime[0]), "Y");
		$yd_list['month']   = d3diary_MyformatTimestamp(mktime($ctime[3],$ctime[4],$ctime[5],$ctime[1],$ctime[2],$ctime[0]), "m");
		$yd_list['day']   = d3diary_MyformatTimestamp(mktime($ctime[3],$ctime[4],$ctime[5],$ctime[1],$ctime[2],$ctime[0]), "d");
		$yd_list['time']   = d3diary_MyformatTimestamp(mktime($ctime[3],$ctime[4],$ctime[5],$ctime[1],$ctime[2],$ctime[0]), "H:i");
		$xoopsTpl->append("yd_list", $yd_list);
	}
}

# 登録月リスト
function d3diary_assign_monlist($mydirname,$req_uid, $uid){
	global $xoopsDB, $xoopsTpl;
	global $openarea, $is_friend, $is_friend2;

	$editperm=0;
	$whr_openarea = "(openarea <>100 OR uid = $uid) AND";
	if(d3diary_check_isadmin($mydirname, $uid)){
		$editperm=1;
		$whr_openarea = "";
	}

	$sql = "SELECT MAX(create_time) as max, MIN(create_time) as min
			  FROM ".$xoopsDB->prefix($mydirname.'_diary')."
	          WHERE ".$whr_openarea." uid=".intval($req_uid);
	$result = $xoopsDB->query($sql);
	
	$minarray = array_fill(0,6,0);
	$maxarray = array_fill(0,6,0);
	while ( $dbdat = $xoopsDB->fetchArray($result) ) {
		if (!empty($dbdat['min'])){
			$minarray = split("[-: ]", $dbdat['min']);
			$maxarray = split("[-: ]", $dbdat['max']);
	    	}
	}
	$minyear =intval(d3diary_MyformatTimestamp(mktime($minarray[3],$minarray[4],$minarray[5],$minarray[1],$minarray[2],$minarray[0]), "Y"));
	$minmonth=intval(d3diary_MyformatTimestamp(mktime($minarray[3],$minarray[4],$minarray[5],$minarray[1],$minarray[2],$minarray[0]), "m"));

	if(!empty($maxarray[0])){
		$year =intval(d3diary_MyformatTimestamp(mktime($maxarray[3],$maxarray[4],$maxarray[5],$maxarray[1],$maxarray[2],$maxarray[0]), "Y"));
		$month=intval(d3diary_MyformatTimestamp(mktime($maxarray[3],$maxarray[4],$maxarray[5],$maxarray[1],$maxarray[2],$maxarray[0]), "m"));

#		$year  =$maxarray[0];
#		$month =$maxarray[1];
		while($year>$minarray[0] or ($year==$minarray[0] and $month>=$minarray[1])){
			$yd_monlist['year']=$year;
			$yd_monlist['month']=$month;
			$xoopsTpl->append("yd_monlist", $yd_monlist);
			$month--;
			if($month==0){
				$month=12;
				$year--;
			}
		}
	}
}

function d3diary_MyformatTimestamp($time, $format, $timeoffset=""){
    global $xoopsConfig, $xoopsUser;
    $usertimestamp = xoops_getUserTimestamp($time, $timeoffset);
	return date($format, $usertimestamp);
}

function d3diary_assign_commentlist($mydirname, $req_uid, $uid, $maxnum=30){
	global $xoopsDB, $xoopsTpl,$myts;
	global $openarea, $is_friend, $is_friend2;
	
	// module id
	$module_handler =& xoops_gethandler('module');
	$this_module =& $module_handler->getByDirname($mydirname);
	$mid = $this_module->getVar('mid');

	$config_handler =& xoops_gethandler("config");
	$moduleConfig = $config_handler->getConfigsByCat(0, $mid);
	$com_dirname = $moduleConfig['comment_dirname'];
	$com_forum_id = intval($moduleConfig['comment_forum_id']);
	$com_anchor_type = intval($moduleConfig['comment_anchor_type']);

	// if comment integration is set
    	if(!empty($com_dirname) && ($com_forum_id > 0)){
		// forums can be read by current viewer (check by forum_access)
		//require_once dirname(dirname(dirname(__FILE__))).'/d3forum/include/common_functions.php' ;
		$got_forums_can_read = d3diary_get_d3comforums_can_read( $com_dirname ,$uid );
		if ( !in_array( $com_forum_id, $got_forums_can_read ) ) {
			return ;
		}
	}
	
	$editperm=0;
	$owner=0;
	if($uid>0 && $req_uid==$uid){$editperm=1;}
	if(d3diary_check_isadmin($mydirname, $uid)){$editperm=1;}

	// at first, get recent diary's bid
    	if (intval($req_uid)>0){
    		$whr_uid="WHERE d.uid=".intval($req_uid);
    	} else {
    		$whr_uid="";
    	}
    
	$sql = "SELECT d.bid, d.uid, d.create_time, d.openarea AS openarea_entry, cfg.openarea AS openarea, cat.openarea AS openarea_category
		FROM ".$xoopsDB->prefix($mydirname.'_diary')." d LEFT JOIN "
		.$xoopsDB->prefix($mydirname.'_config')." cfg ON d.uid=cfg.uid LEFT JOIN "
		.$xoopsDB->prefix($mydirname.'_category')." cat ON (d.uid=cat.uid AND d.cid=cat.cid) "
	        .$whr_uid." ORDER BY d.create_time DESC LIMIT 0,50"; // get recent max.50 entries
	
	$result = $xoopsDB->query($sql);
	while ( $dbdat = $xoopsDB->fetchArray($result) ) {

		$openarea = intval($dbdat['openarea']);
		if (intval($dbdat['openarea_category'])>0)  {
			// added  category=permission 09-06-09
			$openarea = intval($dbdat['openarea_category']);
		}
		
		if (intval($dbdat['openarea_entry'])>0) {
			$openarea = intval($dbdat['openarea_entry']);
		}

		//$is_friend = false; $is_friend2 = false; $editperm = false;
		if(d3diary_can_display($req_uid, $uid, $openarea, $editperm, $is_friend, $is_friend2) == true){
			$bids[]=$dbdat['bid'];
		}
	}

    	if($com_dirname && ($com_forum_id > 0)){
    	// d3comment integration
    
		$whr_forum = 'f.forum_id='.$com_forum_id ;
    		if (!empty($bids)) {
			$whr_bid=" t.topic_external_link_id IN (".implode(',',$bids).")";
		} else {
			$whr_bid=" or t.topic_external_link_id IN (0)";
		}
		$q_order = 'p.post_time DESC';

		$sql = "SELECT p.post_id, p.subject, p.votes_sum, p.votes_count, p.post_time, p.post_text, p.uid, 
			p.guest_name, p.unique_path, u.uname,
			f.forum_id, f.forum_title, t.topic_external_link_id FROM "
			.$xoopsDB->prefix($com_dirname."_posts")." p LEFT JOIN "
			.$xoopsDB->prefix($com_dirname."_topics")." t ON p.topic_id=t.topic_id 	LEFT JOIN "
			.$xoopsDB->prefix($com_dirname."_forums")." f ON f.forum_id=t.forum_id 	LEFT JOIN "
			.$xoopsDB->prefix('users')." u ON p.uid=u.uid 
			WHERE ! t.topic_invisible AND ($whr_forum) AND ($whr_bid) ORDER BY $q_order LIMIT 0,".$maxnum;

		$result = $xoopsDB->query($sql);
		while ( $dbdat = $xoopsDB->fetchArray($result) ) {
			$yd_comment['com_id']  =  $dbdat['post_id'];
			if($com_anchor_type==1) {
				$yd_comment['unique_path']  =  $dbdat['post_id'];
			} else {
				$yd_comment['unique_path'] = ltrim($dbdat['unique_path'], ".");
			}
			$yd_comment['title'] = $myts->makeTboxData4Show(mb_substr($dbdat['subject'],0,20));
			$yd_comment['year']  = date("Y", $dbdat['post_time']);
			$yd_comment['month'] = date("m", $dbdat['post_time']);
			$yd_comment['day']   = date("d", $dbdat['post_time']);
			$yd_comment['time']  = date("H:i", $dbdat['post_time']);
			$yd_comment['bid']  =  $dbdat['topic_external_link_id'];
			if ($dbdat['uid']) {
				$yd_comment['uname']  =  $dbdat['uname'];
			} else {
				$yd_comment['uname']  =  $dbdat['guest_name'];
			}
			$xoopsTpl->append("yd_comment", $yd_comment);
		}
			if($com_anchor_type==1) {
				$xoopsTpl->assign("yd_com_key", "#post_id");
			} else {
				$xoopsTpl->assign("yd_com_key", "#post_path");
			}

    	} else {
    	//xoops comment
    		if (!empty($bids)) {
			$whr_bid=" or com_itemid IN (".implode(',',$bids).")";
		} else {
			$whr_bid=" or com_itemid IN (0)";
		}
		$sql2 = "SELECT com.com_id, com.com_title, com.com_created, diary.bid, usr.uname
			  FROM ".$xoopsDB->prefix('xoopscomments')." com,
			   ".$xoopsDB->prefix('users')." usr,
			   ".$xoopsDB->prefix($mydirname.'_diary')." diary
	          	WHERE com.com_modid='".$mid."' and com.com_uid=usr.uid and com.com_itemid=diary.bid and (0 "
	          	.$whr_bid." ) ORDER BY com_created DESC LIMIT 0,".$maxnum; // 最近30件分のコメント

		$result = $xoopsDB->query($sql2);
		while ( $dbdat = $xoopsDB->fetchArray($result) ) {
			$yd_comment['com_id']  =  $dbdat['com_id'];
			$yd_comment['unique_path']  =  $dbdat['com_id'];
			$yd_comment['title'] = $myts->makeTboxData4Show(mb_substr($dbdat['com_title'],0,20));
			$yd_comment['year']  = date("Y", $dbdat['com_created']);
			$yd_comment['month'] = date("m", $dbdat['com_created']);
			$yd_comment['day']   = date("d", $dbdat['com_created']);
			$yd_comment['time']  = date("H:i", $dbdat['com_created']);
			$yd_comment['bid']  =  $dbdat['bid'];
			$yd_comment['uname']  =  $dbdat['uname'];
			$xoopsTpl->append("yd_comment", $yd_comment);
		}
			$xoopsTpl->assign("yd_com_key", "#comment");
    	}

}

// read other blogs
function d3diary_update_other($mydirname){
	global $xoopsDB;
	require_once dirname(__FILE__).'/magpierss/rss_fetch.inc';

	// only other blogs
	$query = "SELECT u.uid, cfg.rss, cfg.blogtype, cfg.openarea 
			FROM ".$xoopsDB->prefix('users')." u LEFT JOIN "
			.$xoopsDB->prefix($mydirname.'_config')." cfg ON u.uid=cfg.uid 
			WHERE cfg.blogtype>0";

	$result = $xoopsDB->query($query);
	while ( $line = $xoopsDB->fetchArray($result) ) {
		$uid    = intval($line['uid']);
		$cid    = 0;

		# まず削除
		$query = "DELETE FROM ".$xoopsDB->prefix($mydirname.'_newentry')." WHERE uid=".$uid
			." AND cid=".$cid;
		$result2 = $xoopsDB->queryF($query);
		

		$rss_url=$line['rss'];
		$rss = d3d_mgp_fetch_rss($line['rss']);

		$yd_data="";
		if(empty($rss)){break;}
		foreach ($rss->items as $item) {
	    	$yd_data['title'] = $item['title'];
		if(mb_internal_encoding()!="UTF-8"){
			$yd_data['title']=mb_convert_encoding($yd_data['title'], mb_internal_encoding(), "UTF-8");
		}
	    	$yd_data['link'] = $item['link'];
	    	$yd_data['blogtype'] = $line['blogtype'];
		
			# 普通はelse文の部分だけでいいはずなんだが・・・
			if(!empty($item['dc']['date'])){
				$tstamp=strtotime($item['dc']['date']);
			}elseif(!empty($item['pubdate'])){
				$tstamp=strtotime($item['pubdate']);
			}elseif(!empty($item['published'])){
				$tstamp=strtotime($item['published']);
			}elseif(!empty($item['issued'])){
				$tstamp=strtotime($item['issued']);
			}elseif(!empty($item['modified'])){
				$tstamp=strtotime($item['modified']);
			}else{
				$tstamp=$item['date_timestamp'];
			}
			$yd_data['ctime'] = date("Y-m-d H:i:s", $tstamp);
	
			if(!empty($item['summary'])){
	    			$yd_data['diary'] = $item['summary'];
			}elseif(!empty($item['description'])){
				$yd_data['diary'] = $item['description'];
			}elseif(!empty($item['content'])){
				$yd_data['diary'] = $item['content'];
			}else{
				$yd_data['diary']="";
			}
			if(mb_internal_encoding()!="UTF-8"){
				$yd_data['diary']=mb_convert_encoding($yd_data['diary'], mb_internal_encoding(), "UTF-8");
			}
	        if (!get_magic_quotes_gpc()) {
				$yd_data['title']=addslashes($yd_data['title']);
				$yd_data['diary']=addslashes($yd_data['diary']);
			}
	
			# entry追加
			$query = "INSERT INTO ".$xoopsDB->prefix($mydirname.'_newentry')." (uid, cid, title, url, create_time, blogtype, diary)
						VALUES (
						'".$line['uid']."',
						'".$cid."',
						'".$yd_data['title']."',
						'".$yd_data['link']."',
						'".$yd_data['ctime']."',
						'".$yd_data['blogtype']."',
						'".$yd_data['diary']."'
						)";
			$result2 = $xoopsDB->queryF($query);
	
			# 最初のエントリだけで終わり
			break;
		}
	}
	return true;
}

function d3diary_update_other_cat($mydirname, $uid){
	global $xoopsDB;
	require_once dirname(__FILE__).'/magpierss/rss_fetch.inc';

// get categories of this user

	// only other blogs
	$query = "SELECT u.uid, cat.cid, cat.cname, cat.corder, cat.blogtype, cat.blogurl, cat.rss, cat.openarea 
			FROM ".$xoopsDB->prefix('users')." u LEFT JOIN "
			.$xoopsDB->prefix($mydirname.'_category')." cat ON u.uid=cat.uid 
			WHERE u.uid=".$uid." AND cat.blogtype>0";

	$result = $xoopsDB->query($query);
	
	while ( $line = $xoopsDB->fetchArray($result) ) {
		//$uid    = intval($line['uid']);
		$cid = intval($line['cid']);

		# まず削除
		$query = "DELETE FROM ".$xoopsDB->prefix($mydirname.'_newentry')." WHERE uid=".$uid
			." AND cid=".$cid;
		$result2 = $xoopsDB->queryF($query);
		

		$rss_url=$line['rss'];
		$rss = d3d_mgp_fetch_rss($rss_url);

		$yd_data="";
		if(empty($rss)){break;}
		foreach ($rss->items as $item) {
	    		$yd_data['title'] = $item['title'];
		  	if(mb_internal_encoding()!="UTF-8"){
				$yd_data['title']=mb_convert_encoding($yd_data['title'], mb_internal_encoding(), "UTF-8");
			}
	    		$yd_data['link'] = $item['link'];
	    		$yd_data['blogtype'] = $line['blogtype'];
			//var_dump($cid); var_dump($yd_data['title'] ); echo"<br />";

			# 普通はelse文の部分だけでいいはずなんだが・・・
			if(!empty($item['dc']['date'])){
				$tstamp=strtotime($item['dc']['date']);
			}elseif(!empty($item['pubdate'])){
				$tstamp=strtotime($item['pubdate']);
			}elseif(!empty($item['published'])){
				$tstamp=strtotime($item['published']);
			}elseif(!empty($item['issued'])){
				$tstamp=strtotime($item['issued']);
			}elseif(!empty($item['modified'])){
				$tstamp=strtotime($item['modified']);
			}else{
				$tstamp=$item['date_timestamp'];
			}
			$yd_data['ctime'] = date("Y-m-d H:i:s", $tstamp);
	
			if(!empty($item['summary'])){
	    			$yd_data['diary'] = $item['summary'];
			}elseif(!empty($item['description'])){
				$yd_data['diary'] = $item['description'];
			}elseif(!empty($item['content'])){
				$yd_data['diary'] = $item['content'];
			}else{
				$yd_data['diary']="";
			}
			if(mb_internal_encoding()!="UTF-8"){
				$yd_data['diary']=mb_convert_encoding($yd_data['diary'], mb_internal_encoding(), "UTF-8");
			}
	        	if (!get_magic_quotes_gpc()) {
				$yd_data['title']=addslashes($yd_data['title']);
				$yd_data['diary']=addslashes($yd_data['diary']);
			}
	
			# entry追加
			$query = "INSERT INTO ".$xoopsDB->prefix($mydirname.'_newentry')." (uid, cid, title, url, 
						create_time, blogtype, diary) 
						VALUES (
						'".$uid."',
						'".$cid."',
						'".$yd_data['title']."',
						'".$yd_data['link']."',
						'".$yd_data['ctime']."',
						'".$yd_data['blogtype']."',
						'".$yd_data['diary']."'
						)";
			$result2 = $xoopsDB->queryF($query);
	
			# 最初のエントリだけで終わり
			break;
		}
	}
	return true;
}

// added for edit.php Trigger Notification 2009/06/10
function d3diary_get_users_can_read_entry( $mydirname, $_uid, $openarea_entry, $openarea_category =0) {

	global $xoopsDB;
	
	// default openarea
	$openarea = 0;
	//checking permitted users
	$sql = "SELECT * FROM ".$xoopsDB->prefix($mydirname.'_config')." WHERE uid=".intval($_uid);
	$result = $xoopsDB->query($sql);
	while($dbdat = $xoopsDB->fetchArray($result)){ $openarea=intval($dbdat['openarea']); }
	
	if($openarea_category > 0){$openarea = $openarea_category;}
	if($openarea_entry >0){$openarea = $openarea_entry;}

    if ($openarea != 100){
	
	switch ($openarea) {
	case 2:
		$got_users2notify = d3diary_get_friends( $mydirname, $_uid ) ;
		if ( count($got_users2notify) > 0 ) {
			$users2notify = $got_users2notify;
		} else {
			$users2notify = array( 0 ); // default_rev : everyone denied
		}
		break;
	case 3:
		$got_users2notify = d3diary_get_friends2( $mydirname, $_uid ) ;
		if ( count($got_users2notify) > 0 ) {
			$users2notify = $got_users2notify;
		} else {
			$users2notify = array( 0 ); // default_rev : everyone denied
		}
			break;
	default:
		$users2notify = array(); // default : everyone allowed
	}
    } else {
		$users2notify = array( 0 ); // default_rev : everyone denied
    }
	return $users2notify;
}

function d3diary_get_taglist($mydirname, $uid=0, $bid=0, &$pop_tags, &$person_tags, &$entry_tags) {

	global $xoopsDB;

	$myts =& MyTextsanitizer::getInstance() ;

	$sql = "SELECT *
			FROM ".$xoopsDB->prefix($mydirname.'_tag');
		$result = $xoopsDB->query($sql);

		$db_tags = array();
		while ( $dbdat = $xoopsDB->fetchArray($result) ) {
			$db_tags[] = $myts->makeTboxData4Show($dbdat['tag_name']);
		}
		if(!empty($db_tags)) $pop_tags = array_unique($db_tags);

	$sql = "SELECT *
			FROM ".$xoopsDB->prefix($mydirname.'_tag')."
			WHERE uid=".intval($uid);
		$result = $xoopsDB->query($sql);

		$db_tags = array();
		while ( $dbdat = $xoopsDB->fetchArray($result) ) {
			$db_tags[] = $myts->makeTboxData4Show($dbdat['tag_name']);
		}
		if(!empty($db_tags)) $person_tags = array_unique($db_tags);

	$sql = "SELECT *
			FROM ".$xoopsDB->prefix($mydirname.'_tag')."
			WHERE bid=".intval($bid)." GROUP BY tag_name";
		$result = $xoopsDB->query($sql);

		$db_tags = array();
		$i=0;
		while ( $dbdat = $xoopsDB->fetchArray($result) ) {
			$db_tags[$i]['tag'] = $myts->makeTboxData4Show($dbdat['tag_name']);
			$db_tags[$i]['tag_urlenc'] = rawurlencode($dbdat['tag_name']);
			$i++;
		}
		if(!empty($db_tags)){
			$entry_tags = $db_tags;
		}
}

function d3diary_GetTagCloud($mydirname, $where = null, $min = 80, $max = 160)
{
	$wh = "";
	$ret = "";
	$tags = array();
	$max_qty = 0;
	$min_qty = 0;

	$db =& Database::getInstance() ;
	$myts =& MyTextsanitizer::getInstance() ;
	if($where){
		$wh = " WHERE ". $where;
	}
	
	$sql = "SELECT tag_name AS tag, COUNT(tag_id) AS quantity
	  FROM ". $db->prefix($mydirname ."_tag") .$wh. "
	  GROUP BY tag_name
	  ORDER BY tag_name ASC";
	$result = $db->query( $sql ) ;

	// here we loop through the results and put them into a simple array:
	// $tag['thing1'] = 12;
	// $tag['thing2'] = 25;
	// etc. so we can use all the nifty array functions
	// to calculate the font-size of each tag

	while ($row = $db->fetchRow($result)) {
	    $tags[$row['0']] = $row[1];
	}

	// change these font sizes if you will
	$max_size = $max; // max font size in %
	$min_size = $min; // min font size in %

	// get the largest and smallest array values
	if($tags){
		$max_qty = max(array_values($tags));
		$min_qty = min(array_values($tags));
	}

	// find the range of values
	$spread = $max_qty - $min_qty;
	if (0 == $spread) { // we don't want to divide by zero
	    $spread = 1;
	}

	// determine the font-size increment
	// this is the increase per tag quantity (times used)
	$step = ($max_size - $min_size)/($spread);

	// loop through our tag array
	$i=0;
	foreach ($tags as $key => $value) {

	    // calculate CSS font-size
	    // find the $value in excess of $min_qty
	    // multiply by the font-size increment ($size)
	    // and add the $min_size set above
	    $size = $min_size + (($value - $min_qty) * $step);
	    // uncomment if you want sizes in whole %:
	    // $size = ceil($size);

	    // you'll need to put the link destination in place of the #
	    // (assuming your tag links to some sort of details page)
	    //$ret = $ret .'<a href="'. XOOPS_URL .'/modules/'. $mydirname .'/index.php?action=TagList&tag_name='. urlencode($key) .'" style="font-size: '.$size.'%">'.$key.'</a> ';
	    // notice the space at the end of the link
	    $ret[$i]['tag'] = $myts->makeTboxData4Show($key);
	    $ret[$i]['tag_urlenc'] = rawurlencode($key);
	    $ret[$i]['size'] = $size;
	    $i++;
	}
    return $ret;
}

function d3diary_get_d3comforums_can_read( $com_dirname, $uid=0 )
{
	global $xoopsUser ;

	$db =& Database::getInstance() ;

	if( is_object( $xoopsUser ) ) {
		//$uid = intval( $xoopsUser->getVar('uid') ) ;
		$groups = $xoopsUser->getGroups() ;
		if( ! empty( $groups ) ) {
			$whr4forum = "fa.`uid`=$uid || fa.`groupid` IN (".implode(",",$groups).")" ;
			$whr4cat = "`uid`=$uid || `groupid` IN (".implode(",",$groups).")" ;
		} else {
			$whr4forum = "fa.`uid`=$uid" ;
			$whr4cat = "`uid`=$uid" ;
		}
	} else {
		$whr4forum = "fa.`groupid`=".intval(XOOPS_GROUP_ANONYMOUS) ;
		$whr4cat = "`groupid`=".intval(XOOPS_GROUP_ANONYMOUS) ;
	}

	// get categories
	$sql = "SELECT distinct cat_id FROM ".$db->prefix($com_dirname."_category_access")." WHERE ($whr4cat)" ;
	$result = $db->query( $sql ) ;
	if( $result ) while( list( $cat_id ) = $db->fetchRow( $result ) ) {
		$cat_ids[] = intval( $cat_id ) ;
	}
	if( empty( $cat_ids ) ) return array(0) ;

	// get forums
	$sql = "SELECT distinct f.forum_id FROM ".$db->prefix($com_dirname."_forums")." f LEFT JOIN ".$db->prefix($com_dirname."_forum_access")." fa ON fa.forum_id=f.forum_id WHERE ($whr4forum) AND f.cat_id IN (".implode(',',$cat_ids).')' ;
	$result = $db->query( $sql ) ;
	if( $result ) while( list( $forum_id ) = $db->fetchRow( $result ) ) {
		$forums[] = intval( $forum_id ) ;
	}

	if( empty( $forums ) ) return array(0) ;
	else return $forums ;
}

// get object for comment integration
function &d3diary_get_d3com_object( $com_dirname , $external_link_format )
{
	include_once dirname(dirname(dirname(__FILE__))).'/d3forum/class/D3commentAbstract.class.php' ;
	@list( $external_dirname , $classname , $external_trustdirname ) = explode( '::' , $external_link_format ) ;
	if( empty( $classname ) ) {
		$obj =& new D3commentAbstract( $com_dirname , '' ) ;
		return $obj ;
	}

	// search the class file
	$class_bases = array(
		XOOPS_ROOT_PATH.'/modules/'.$external_dirname.'/class' ,
		XOOPS_TRUST_PATH.'/modules/'.$external_trustdirname.'/class' ,
		XOOPS_TRUST_PATH.'/modules/d3forum/class' ,
	) ;

	foreach( $class_bases as $class_base ) {
		if( file_exists( $class_base.'/'.$classname.'.class.php' ) ) {
			require_once $class_base.'/'.$classname.'.class.php' ;
			break ;
		}
	}

	// check the class
	if( ! $classname || ! class_exists( $classname ) ) {
		$obj =& new D3commentAbstract( $com_dirname , $external_dirname ) ;
		return $obj ;
	}

	$obj =& new $classname( $com_dirname , $external_dirname , $external_trustdirname ) ;
	return $obj ;
}

}
?>