<?php
//一般・トップページ
//ini_set( 'display_errors', 1 );
//ini_set('error_reporting', E_ALL);

//Smarty使用宣言
require_once './php/smarty/libs/Smarty.class.php';

$smarty = new Smarty();
$smarty -> template_dir = "./";
$smarty -> compile_dir = "./php/templates_c";

//config値読み込み
require_once './yoyaku/config/config.php';
//function読み込み
require_once './php/function.php';

//PEAR::Calendarを任意に置いたため、置いた場所にパスを通しておく
ini_set('include_path', "./php/pear");
//PEAR::Calendarを呼び出し(pearにパスが通っていないとPEARモジュールは動かない)
require_once 'Calendar/Month/Weekdays.php';

//PDO MySQLへ接続 PHP5.4以降
$pdo=null;
try {
	$pdo =new PDO("mysql:host=$mysql_server; dbname=$mysql_database;charset=utf8",$mysql_user,$mysql_password);
	$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}catch (PDOException $e){
	exit('データベース接続失敗。'.$e->getMessage());
	die();
}
//PDO データベース接続終了

//左メニューの定休カレンダー表示部------------------------------------------------------------------

//表示させる該当月と月の値を生成
//calendar_target_ymdとしてのGetとPostで指定年月があれば変数格納・前の月や次の月への移動にも使用
//値がなければ、今日の年月を変数格納
if (isset($_GET['calendar_target_ymd'])) {
	//年月取得、文字列エスケープして最大長6文字
	$calendar_target_ymd = normal_Text($_GET['calendar_target_ymd'],8);
	$calendar_target_ymd=intval($calendar_target_ymd);

	//与えられた日付は信用せずDateTimeクラスで月初を生成
	$calendar_target_ymd_class_tmp = new DateTime($calendar_target_ymd);
	$calendar_target_ym=$calendar_target_ymd_class_tmp->format('Ym');
	$calendar_target_ymd=$calendar_target_ym."01";

}else{
	//与えられない場合は今月の初日
	$calendar_target_ymd=date("Ym01", time());
}
//DateTimeクラスで月移動を生成
$calendar_target_ymd_class = new DateTime($calendar_target_ymd);
$target_yn_str=$calendar_target_ymd_class->format('Y年n月');

$calendar_target_ymd_next=$calendar_target_ymd_class->modify('+2 months')->format('Ymd');//2ヶ月後
$calendar_target_ymd_class->modify('-2 months')->format('Ymd');//2ヶ月後に進んだままなので戻す
$calendar_target_ymd_prev=$calendar_target_ymd_class->modify('-2 months')->format('Ymd');//2ヶ月前
$calendar_target_ymd_class->modify('+2 months')->format('Ymd');//2ヶ月前に戻ったままなので戻す

$month_next="?calendar_target_ymd=".$calendar_target_ymd_next;
$month_prev="?calendar_target_ymd=".$calendar_target_ymd_prev;
//表示月の指定ここまで--------------------------------------------------------------------


//----上部部分の月-----------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------
//1つ目の月初 Y-m-d形式
$calendar_target_y_m_d_firstday=$calendar_target_ymd_class->format('Y-m-d');
//1つ目の月末 Y-m-d形式
$calendar_target_y_m_d_lastday=$calendar_target_ymd_class->format('Y-m-t');

//1つ目の定休日を取得
//$calendar_target_ymd<=A<=$calendar_target_ymd_last
$teikyu_sql ="SELECT * FROM teikyu WHERE teikyu_ymd ";
$teikyu_sql.="BETWEEN :calendar_target_y_m_d_firstday AND :calendar_target_y_m_d_lastday ";
$teikyu_sql.="ORDER BY teikyu_ymd ASC";
$teikyu_query=$pdo->prepare($teikyu_sql);
$teikyu_query->bindParam(':calendar_target_y_m_d_firstday', $calendar_target_y_m_d_firstday, PDO::PARAM_STR);
$teikyu_query->bindParam(':calendar_target_y_m_d_lastday', $calendar_target_y_m_d_lastday, PDO::PARAM_STR);
$teikyu_query->execute();

//定休日のデータを格納
//$teikyu_all[0][キー]で各値を呼び出せる
$teikyu_all= $teikyu_query->fetchAll(PDO::FETCH_ASSOC);


//PEAR::Calendar-----------------------------------------------------------------------------------
//PEAR::Calendarでデータを生成・Calendar_Month_Weekdays(2007, 05, 0)という意味
$calendar_target_y=$calendar_target_ymd_class->format('Y');//年
$calendar_target_m=$calendar_target_ymd_class->format('m');//月
$calendar_target_ym=$calendar_target_ymd_class->format('Ym');//年月

$month = new Calendar_Month_Weekdays($calendar_target_y,$calendar_target_m, 0);
$month -> build();

//カレンダー表示部Ver.4(Smarty対応)-----------------------------------
//(論理部にFunciton div_Presentを使った上でSmarty対応化)
//twice_Strも用いている
$tag_calendar=null;
while ($day = $month -> fetch()){

	//カレンダー・週の初日で行を生成
	if($day -> isFirst()){
		$tag_calendar.='<tr>';
	}
	//日付を表示しないセルの場合(前月の日付、翌月の日付の部分)
	if ($day -> isEmpty()){
		$tag_calendar.='<td>&nbsp;</td>'."\n";
	}else {
		//左端セルの場合・日曜---------------------------------------------------------------
		//-----------------------------------------------------------------------------------
		if ($day->isFirst()) {

			$thisday_ym=$calendar_target_ym;//201512形式
			$thisday_d=twice_Str($day->thisDay());//05形式
			$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
			$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

			//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
			//表示日で定休がある場合は、teikyu_allの配列番号を取得
			$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

			//定休日の表示部
			$teikyu_tag=null;
			//定休日だったら
			if(count($teikyu_array_number_thisday)>0) {
				$tag_calendar_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";//一時変数に入れておく
			}else{
				$tag_calendar_tmp='<td>'.$day->thisDay().'</td>'."\n";//一時変数にいれておく
			}

/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
			//SQL(既存予約 ・大会)の有無を確認する
			$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
			$tournament_sql = "SELECT * FROM yoyaku WHERE ";
			$tournament_sql.= "tournament_flag=1 AND ";
			$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
			$tournament_query = $pdo->prepare($tournament_sql);
			$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
			$tournament_query->execute();
			//tournament_data[キー]で呼び出せる
			$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

			//大会データがあれば大会用のtdタグで一時変数を上書きにする
			if(is_array($tournament_data)){
				$tag_calendar_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
			}
*/
			//最終的にできあがったものを入れる
			$tag_calendar.=$tag_calendar_tmp;


			//右端セルの場合・土曜-----------------------------------------------------------
			//-------------------------------------------------------------------------------
		}else{

			if ($day->isLast()) {
				$thisday_ym=$calendar_target_ym;//201512形式
				$thisday_d=twice_Str($day->thisDay());//05形式
				$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
				$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

				//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
				//表示日で定休がある場合は、teikyu_allの配列番号を取得
				$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

				//定休日の表示部
				$teikyu_tag=null;
				//定休日だったら
				if(count($teikyu_array_number_thisday)>0) {
					$tag_calendar_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";//一時変数に入れておく
				}else{
					$tag_calendar_tmp='<td>'.$day->thisDay().'</td>'."\n";//一時変数にいれておく
				}
/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
				//SQL(既存予約 ・大会)の有無を確認する
				$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
				$tournament_sql = "SELECT * FROM yoyaku WHERE ";
				$tournament_sql.= "tournament_flag=1 AND ";
				$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
				$tournament_query = $pdo->prepare($tournament_sql);
				$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
				$tournament_query->execute();
				//tournament_data[キー]で呼び出せる
				$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

				//大会データがあれば大会用のtdタグで一時変数を上書きにする
				if(is_array($tournament_data)){
					$tag_calendar_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
				}
*/

				//最終的にできあがったものを入れる
				$tag_calendar.=$tag_calendar_tmp;

				//左右両端セルではない場合・平日----------------------------------------------------------------------
				//----------------------------------------------------------------------------------------------------
			}else{
				$thisday_ym=$calendar_target_ym;//201512形式
				$thisday_d=twice_Str($day->thisDay());//05形式
				$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
				$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

				//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
				//表示日で定休がある場合は、teikyu_allの配列番号を取得
				$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

				//定休日の表示部
				$teikyu_tag=null;
				//定休日だったら
				if(count($teikyu_array_number_thisday)>0) {
					$tag_calendar_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";//一時変数に入れておく
				}else{
					$tag_calendar_tmp='<td>'.$day->thisDay().'</td>'."\n";//一時変数にいれておく
				}

/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
				//SQL(既存予約 ・大会)の有無を確認する
				$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
				$tournament_sql = "SELECT * FROM yoyaku WHERE ";
				$tournament_sql.= "tournament_flag=1 AND ";
				$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
				$tournament_query = $pdo->prepare($tournament_sql);
				$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
				$tournament_query->execute();
				//tournament_data[キー]で呼び出せる
				$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

				//大会データがあれば大会用のtdタグで一時変数を上書きにする
				if(is_array($tournament_data)){
					$tag_calendar_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
				}
*/
				//最終的にできあがったものを入れる
				$tag_calendar.=$tag_calendar_tmp;

				//左右両端セルではない場合(平日)ここまで
			}


			//土曜の場合ここまで
		}
		//日曜の場合ここまで
	}

	//カレンダー・週の最終日で行の末端
	if ($day -> isLast()){
		$tag_calendar.='</tr>'."\n";
	}
//whileここまで
}

//---------下部部分の月-------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------

//2つ目の月初 Y-m-d形式
$calendar_target_y_m_d_firstday=$calendar_target_ymd_class->modify('+1 months')->format('Y-m-d');//1ヶ月後
//2つ目の月末 Y-m-d形式
$calendar_target_y_m_d_lastday=$calendar_target_ymd_class->format('Y-m-t');
//タイトル部分に表示させる年月
$target_yn_str_bottom=$calendar_target_ymd_class->format('Y年n月');


//2つ目の定休日を取得
//$calendar_target_ymd<=A<=$calendar_target_ymd_last
$teikyu_sql ="SELECT * FROM teikyu WHERE teikyu_ymd ";
$teikyu_sql.="BETWEEN :calendar_target_y_m_d_firstday AND :calendar_target_y_m_d_lastday ";
$teikyu_sql.="ORDER BY teikyu_ymd ASC";
$teikyu_query=$pdo->prepare($teikyu_sql);
$teikyu_query->bindParam(':calendar_target_y_m_d_firstday', $calendar_target_y_m_d_firstday, PDO::PARAM_STR);
$teikyu_query->bindParam(':calendar_target_y_m_d_lastday', $calendar_target_y_m_d_lastday, PDO::PARAM_STR);
$teikyu_query->execute();

//定休日のデータを格納
//$teikyu_all[0][キー]で各値を呼び出せる
$teikyu_all= $teikyu_query->fetchAll(PDO::FETCH_ASSOC);


//PEAR::Calendar-----------------------------------------------------------------------------------
//PEAR::Calendarでデータを生成・Calendar_Month_Weekdays(2007, 05, 0)という意味
$calendar_target_y=$calendar_target_ymd_class->format('Y');//年
$calendar_target_m=$calendar_target_ymd_class->format('m');//月
$calendar_target_ym=$calendar_target_ymd_class->format('Ym');//年月

$month = new Calendar_Month_Weekdays($calendar_target_y,$calendar_target_m, 0);
$month -> build();

//カレンダー表示部Ver.4(Smarty対応)-----------------------------------
//(論理部にFunciton div_Presentを使った上でSmarty対応化)
//twice_Strも用いている
$tag_calendar_bottom=null;
while ($day = $month -> fetch()){

	//カレンダー・週の初日で行を生成
	if($day -> isFirst()){
		$tag_calendar_bottom.='<tr>';
	}
	//日付を表示しないセルの場合(前月の日付、翌月の日付の部分)
	if ($day -> isEmpty()){
		$tag_calendar_bottom.='<td>&nbsp;</td>'."\n";
	}else {
		//左端セルの場合・日曜---------------------------------------------------------------
		//-----------------------------------------------------------------------------------
		if ($day->isFirst()) {

			$thisday_ym=$calendar_target_ym;//201512形式
			$thisday_d=twice_Str($day->thisDay());//05形式
			$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
			$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

			//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
			//表示日で定休がある場合は、teikyu_allの配列番号を取得
			$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

			//定休日の表示部
			$teikyu_tag=null;
			//定休日だったら
			if(count($teikyu_array_number_thisday)>0) {
				$tag_calendar_bottom_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";//一時変数に入れておく
			}else{
				$tag_calendar_bottom_tmp='<td>'.$day->thisDay().'</td>'."\n";//一時変数にいれておく
			}
/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
			//SQL(既存予約 ・大会)の有無を確認する
			$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
			$tournament_sql = "SELECT * FROM yoyaku WHERE ";
			$tournament_sql.= "tournament_flag=1 AND ";
			$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
			$tournament_query = $pdo->prepare($tournament_sql);
			$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
			$tournament_query->execute();
			//tournament_data[キー]で呼び出せる
			$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

			//大会データがあれば大会用のtdタグで一時変数を上書きにする
			if(is_array($tournament_data)){
				$tag_calendar_bottom_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
			}
*/
			//最終的にできあがったものを入れる
			$tag_calendar_bottom.=$tag_calendar_bottom_tmp;


			//右端セルの場合・土曜-----------------------------------------------------------
			//-------------------------------------------------------------------------------
		}else{

			if ($day->isLast()) {
				$thisday_ym=$calendar_target_ym;//201512形式
				$thisday_d=twice_Str($day->thisDay());//05形式
				$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
				$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

				//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
				//表示日で定休がある場合は、teikyu_allの配列番号を取得
				$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

				//定休日の表示部
				$teikyu_tag=null;
				//定休日だったら
				if(count($teikyu_array_number_thisday)>0) {
					$tag_calendar_bottom_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";
				}else{
					$tag_calendar_bottom_tmp='<td>'.$day->thisDay().'</td>'."\n";
				}

/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
				//SQL(既存予約 ・大会)の有無を確認する
				$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
				$tournament_sql = "SELECT * FROM yoyaku WHERE ";
				$tournament_sql.= "tournament_flag=1 AND ";
				$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
				$tournament_query = $pdo->prepare($tournament_sql);
				$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
				$tournament_query->execute();
				//tournament_data[キー]で呼び出せる
				$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

				//大会データがあれば大会用のtdタグで一時変数を上書きにする
				if(is_array($tournament_data)){
					$tag_calendar_bottom_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
				}
*/
				//最終的にできあがったものを入れる
				$tag_calendar_bottom.=$tag_calendar_bottom_tmp;

				//左右両端セルではない場合・平日----------------------------------------------------------------------
				//----------------------------------------------------------------------------------------------------
			}else{
				$thisday_ym=$calendar_target_ym;//201512形式
				$thisday_d=twice_Str($day->thisDay());//05形式
				$thisday_ymd=$thisday_ym.$thisday_d;//20151205形式
				$thisday_ymd2=$calendar_target_y."-".$calendar_target_m."-".$thisday_d;//2015-01-01形式

				//定休は予約表示よりも優先される 当該月の予定は$teikyu_allに2次元配列で格納済み
				//表示日で定休がある場合は、teikyu_allの配列番号を取得
				$teikyu_array_number_thisday= array_keys(array_column($teikyu_all,'teikyu_ymd'),$thisday_ymd2);

				//定休日の表示部
				$teikyu_tag=null;
				//定休日だったら
				if(count($teikyu_array_number_thisday)>0) {
					$tag_calendar_bottom_tmp='<td class="holiday">'.$day->thisDay().'<span>定休</span></td>'."\n";
				}else{
					$tag_calendar_bottom_tmp='<td>'.$day->thisDay().'</td>'."\n";
				}

/*
//大会アイコンを定休カレンダー部に表示機能は大会ページ設置に伴い停止
				//SQL(既存予約 ・大会)の有無を確認する
				$thisday_ymd2_datetime=$thisday_ymd2." 12:00:00";//仮の時間を与える
				$tournament_sql = "SELECT * FROM yoyaku WHERE ";
				$tournament_sql.= "tournament_flag=1 AND ";
				$tournament_sql.= " :checkin_time BETWEEN checkin_datetime AND checkout_datetime";
				$tournament_query = $pdo->prepare($tournament_sql);
				$tournament_query->bindParam(':checkin_time', $thisday_ymd2_datetime, PDO::PARAM_STR);
				$tournament_query->execute();
				//tournament_data[キー]で呼び出せる
				$tournament_data = $tournament_query->fetch(PDO::FETCH_ASSOC);

				//大会データがあれば大会用のtdタグで一時変数を上書きにする
				if(is_array($tournament_data)){
					$tag_calendar_bottom_tmp='<td class="taikai">'.$day->thisDay().'<a href="tournament-list.php">大会</a></td>';
				}
*/
				//最終的にできあがったものを入れる
				$tag_calendar_bottom.=$tag_calendar_bottom_tmp;

				//左右両端セルではない場合(平日)ここまで
			}


			//土曜の場合ここまで
		}
		//日曜の場合ここまで
	}

	//カレンダー・週の最終日で行の末端
	if ($day -> isLast()){
		$tag_calendar_bottom.='</tr>'."\n";
	}
//whileここまで
}





$pdo=null;

//assign
$smarty->assign('target_yn_str',$target_yn_str);
$smarty->assign('target_yn_str_bottom',$target_yn_str_bottom);
$smarty->assign('month_next',$month_next);
$smarty->assign('month_prev',$month_prev);


$smarty->assign('tag_calendar',$tag_calendar);
$smarty->assign('tag_calendar_bottom',$tag_calendar_bottom);

//Smartyを表示する
$display="index88.tpl";
$smarty -> display($display);
?>
