<?php
/*
 Anime recording system foltia
 http://www.dcc-jpl.com/soft/foltia/

viewepg.php

目的
番組録画予約ページを表示します。

オプション
start:表示タイムスタンプ(Ex.200512281558)
 省略時、現在時刻。

 DCC-JPL Japan/foltia project

*/

include("./foltialib.php");
$con = m_connect();
$epgviewstyle = 1;// 0だと終了時刻も表示
if ($useenvironmentpolicy == 1){
	if (!isset($_SERVER['PHP_AUTH_USER'])) {
	    header("WWW-Authenticate: Basic realm=\"foltia\"");
	    header("HTTP/1.0 401 Unauthorized");
		redirectlogin();
	    exit;
	} else {
	login($con,$_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']);
	}
}//end if login
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="graytable.css"> 
<title>foltia:EPG番組表</title>
</head>
<?php
$start = getgetnumform("start");

if ($start == ""){
	$start =  date("YmdHi");
}else{
  $start = ereg_replace( "[^0-9]", "", $start); 
}


?>
<body BGCOLOR="#ffffff" TEXT="#494949" LINK="#0047ff" VLINK="#000000" ALINK="#c6edff" >
<div align="center">
<?php 
printhtmlpageheader();
?>
<p align="left"><font color="#494949" size="6">EPG番組表</font></p>
<p align="left"><a href="./m.php">番組手動予約</a ></p>
<hr size="4">
<p align="left">EPG番組表を表示します。
<?php 

///////////////////////////////////////////////////////////////////////////
//現在の日付情報取得
$begin =  date("YmdHi");
$beginyear =   substr($begin,0,4);
$beginmonth =   substr($begin,4,2);
$beginday =   substr($begin,6,2);
$beginhour =   substr($begin,8,2);
$beginmin =   substr($begin,10,2);
///////////////////////////////////////////////////////////////////////////

$startyear =   substr($start,0,4);
$startmonth =   substr($start,4,2);
$startday =   substr($start,6,2);
$starthour =   substr($start,8,2);
$startmin =   substr($start,10,2);
$day_of_the_week = date ("(D)",mktime($starthour , 0 , 0, $startmonth , $startday  , $startyear));

print "($startyear/$startmonth/$startday $day_of_the_week $starthour:$startmin-)<BR>\n";


$yesterday = date ("YmdHi",mktime($starthour , 0 , 0, $startmonth , $startday -1 , $startyear));
$dayyesterday = date ("m/d(D)",mktime($starthour , 0 , 0, $startmonth , $startday -1 , $startyear));

/////////////////////////////////////////////////////////// 
//時刻の隣の【翌日】の変数
$tomorrow  = date ("YmdHi",mktime($starthour , 0 , 0, $startmonth , $startday +1 , $startyear));   
/////////////////////////////////////////////////////////// 
//EPG番組表を取得しますのとなりの日付の【曜日】の変数
$daytomorrow  = date ("m/d(D)",mktime($starthour , 0 , 0, $startmonth , $startday +1 , $startyear));
///////////////////////////////////////////////////////////


$today0400 = date ("YmdHi",mktime(4 , 0 , 0, $startmonth , $startday  , $startyear));
$today0800 = date ("YmdHi",mktime(8 , 0 , 0, $startmonth , $startday  , $startyear));
$today1200 = date ("YmdHi",mktime(12 , 0 , 0, $startmonth , $startday , $startyear));
$today1600 = date ("YmdHi",mktime(16 , 0 , 0, $startmonth , $startday , $startyear));
$today2000 = date ("YmdHi",mktime(20 , 0 , 0, $startmonth , $startday , $startyear));
$today2359 = date ("YmdHi",mktime(23 , 59 , 0, $startmonth , $startday , $startyear));


///////////////////////////////////////////////////////////////////
//1週間分のページのリンクの変数
$day0after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday  , $beginyear));
$day0 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday  , $beginyear));
$day1after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +1 , $beginyear));
$day1 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +1 , $beginyear));
$day2after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +2 , $beginyear));
$day2 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +2 , $beginyear));
$day3after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +3 , $beginyear));
$day3 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +3 , $beginyear));
$day4after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +4 , $beginyear));
$day4 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +4 , $beginyear));
$day5after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +5 , $beginyear));
$day5 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +5 , $beginyear));
$day6after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +6 , $beginyear));
$day6 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +6 , $beginyear));
$day7after = date ("YmdHi",mktime($beginhour , 0 , 0, $beginmonth , $beginday +7 , $beginyear));
$day7 = date ("m/d(D)",mktime($beginhour , 0 , 0, $beginmonth , $beginday +7 , $beginyear));
///////////////////////////////////////////////////////////////////


//表示局選定
// $page = 1 ~ 
$maxdisplay = 8;

$query = "SELECT count(*) FROM foltia_station WHERE \"ontvcode\" LIKE '%ontvjapan%'";
//$rs = m_query($con, $query, "DBクエリに失敗しました");
$rs = sql_query($con, $query, "DBクエリに失敗しました");
$maxrows = $rs->fetchColumn(0);
if ($maxrows > $maxdisplay){
	$pages = ceil($maxrows / $maxdisplay) ;
}

$page = getgetnumform("p");

if (($page == "")|| ($page <= 0) ){
	$page = 1 ;
	$offset = 0  ;
}else{
  $page = ereg_replace( "[^0-9]", "", $page); 
  if ($page > $pages){
  	$page = $pages ;
  }elseif ($page <= 0) {
  $page = 1 ;
  }
  $offset = ($page * $maxdisplay ) - $maxdisplay;
}


/////////////////////////////////////////////////////////////////
//表示部分
$navigationbar =  "

[<A HREF=\"./viewepg.php\">現在</A>] | 
<A HREF=\"./viewepg.php?p=$page&start=$yesterday\">$dayyesterday [前日]</A> | 
当日(
<A HREF=\"./viewepg.php?p=$page&start=$today0400\">4:00</A> 
<A HREF=\"./viewepg.php?p=$page&start=$today0800\">8:00</A> 
<A HREF=\"./viewepg.php?p=$page&start=$today1200\">12:00</A> 
<A HREF=\"./viewepg.php?p=$page&start=$today1600\">16:00</A> 
<A HREF=\"./viewepg.php?p=$page&start=$today2000\">20:00</A> 
<A HREF=\"./viewepg.php?p=$page&start=$today2359\">24:00</A>) | 
<A HREF=\"./viewepg.php?p=$page&start=$tomorrow\">$daytomorrow [翌日]</A>
<br>
 | 
<A HREF=\"./viewepg.php?p=$page&start=$day0after\">$day0</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day1after\">$day1</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day2after\">$day2</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day3after\">$day3</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day4after\">$day4</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day5after\">$day5</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day6after\">$day6</A> | 
<A HREF=\"./viewepg.php?p=$page&start=$day7after\">$day7</A> | <BR>\n";
print "$navigationbar";
///////////////////////////////////////////////////////////////////

if ($maxrows > $maxdisplay){
//複数ページ
//$pages = ceil($maxrows / $maxdisplay) ;
if ($page > 1){
	$beforepage = $page - 1;
	print "<a href = \"./viewepg.php?p=$beforepage&start=$start\">←</A>";
}

print " $page / $pages (放送局) ";
for ($i=1;$i<=$pages;$i++){
	print "<a href = \"./viewepg.php?p=$i&start=$start\">$i</a>・";
}


if ($page < $pages){
	$nextpage = $page + 1;
	print "<a href = \"./viewepg.php?p=$nextpage&start=$start\">→</a>";
}
}
//ココから新コード
//・局リスト
$query = "SELECT stationid, stationname, stationrecch, ontvcode 
FROM foltia_station 
WHERE \"ontvcode\" LIKE '%ontvjapan%'  
ORDER BY stationid ASC , stationrecch 
LIMIT ? OFFSET ?
";

//$slistrs = m_query($con, $query, "DBクエリに失敗しました");
$slistrs = sql_query($con, $query, "DBクエリに失敗しました",array($maxdisplay,$offset));
while ($rowdata = $slistrs->fetch()) {
	$stationhash[] = $rowdata[3];
	$snames[] = $rowdata[1]; // headder
}

//・時間と全順番のハッシュ作る
$epgstart = $start ;
$epgend = calcendtime($start , (8*60));

$query = "SELECT DISTINCT startdatetime   
FROM foltia_epg
WHERE foltia_epg.ontvchannel in (
	SELECT ontvcode 
	FROM foltia_station 
	WHERE \"ontvcode\" LIKE '%ontvjapan%' 
	ORDER BY stationid ASC , stationrecch 
	LIMIT ? OFFSET ?
	)
AND startdatetime  >= ? 
AND startdatetime  < ? 
ORDER BY foltia_epg.startdatetime  ASC	";

//$rs = m_query($con, $query, "DBクエリに失敗しました");
$rs = sql_query($con, $query, "DBクエリに失敗しました",array($maxdisplay,$offset,$start,$epgend));

//print "$query<br>\n";

$rowdata = $rs->fetch();
if (! $rowdata) {
//番組データがない
$colmnums = 2;
}else{
	$colmnums = 0;
	do {
		$colmnums++;
		$timetablehash[$rowdata[0]] = $colmnums;
//		print "$rowdata[0]:$i+1 <br>\n";
	} while ($rowdata = $rs->fetch());
}
//print "colmnums $colmnums <br>\n";

//・局ごとに縦に配列入れていく
foreach ($stationhash as $stationname) {
$epgstart = $start ;
$epgend = calcendtime($start , (8*60));
$query = "
SELECT startdatetime , enddatetime , lengthmin , epgtitle , epgdesc , epgcategory  ,ontvchannel  ,epgid ,	epgcategory 
FROM foltia_epg 
WHERE foltia_epg.ontvchannel = ? AND 
enddatetime  > ?  AND 
startdatetime  < ?  
ORDER BY foltia_epg.startdatetime  ASC
	";

//	$statiodh = m_query($con, $query, "DBクエリに失敗しました");
	$statiodh = sql_query($con, $query, "DBクエリに失敗しました",array($stationname,$epgstart,$epgend));
	$stationrowdata = $statiodh->fetch();
	if (! $stationrowdata) {
		//print("番組データがありません<BR>");
		$item[0]["$stationname"] =  ">番組データがありません";
}else{
		do {
$printstarttime = substr($stationrowdata[0],8,2) . ":" .  substr($stationrowdata[0],10,2);
$tdclass = "t".substr($stationrowdata[0],8,2) .  substr($stationrowdata[0],10,2);
$title = $stationrowdata[3];
$title = htmlspecialchars(z2h($title));
$desc = $stationrowdata[4];
$desc = htmlspecialchars(z2h($desc));

if ($epgviewstyle){
$desc=$desc ."<br><br><!-- ". htmlspecialchars(foldate2print($stationrowdata[1])) ."-->";
}else{
$desc=$desc ."<br><br>". htmlspecialchars(foldate2print($stationrowdata[1])) ;
}


$height =  htmlspecialchars($stationrowdata[2]) * 3;
$epgid =  htmlspecialchars($stationrowdata[7]);
$epgcategory = htmlspecialchars($stationrowdata[8]);

if (isset($timetablehash["$stationrowdata[0]"])){
	$number = $timetablehash["$stationrowdata[0]"];
//print "$stationname $stationrowdata[0] [$number] $printstarttime $title $desc<br>\n";
}else{
	$number = 0;
//print "$stationname $stationrowdata[0] 現在番組 $printstarttime $title $desc<br>\n";
}
if ($epgcategory == ""){
$item["$number"]["$stationname"] =  " onClick=\"location = './reserveepg.php?epgid=$epgid'\"><span id=\"epgstarttime\">$printstarttime</span> <A HREF=\"./reserveepg.php?epgid=$epgid\"><span id=\"epgtitle\">$title</span></A> <span id=\"epgdesc\">$desc</span>";
}else{
$item["$number"]["$stationname"] =  " id=\"$epgcategory\" onClick=\"location = './reserveepg.php?epgid=$epgid'\"><span id=\"epgstarttime\">$printstarttime</span> <A HREF=\"./reserveepg.php?epgid=$epgid\"><span id=\"epgtitle\">$title</span></A> <span id=\"epgdesc\">$desc</span></span>";
}//if

		} while ($stationrowdata = $statiodh->fetch());
}//if

//・局ごとに間隔決定
//$item[$i][NHK] はヌルかどうか判定
$dataplace = 0 ; //初期化
$rowspan = 0;

for ($i=1; $i <= $colmnums ; $i++){
	if ($i === ($colmnums )){//最終行
		$rowspan = $i - $dataplace ;
		//そして自分自身にタグを
			//if ((!isset($item[$i][$stationname])) && ($item[$i][$stationname] == "")){
			if (!isset($item[$i][$stationname])){
			$item[$i][$stationname]  = null ;
			}else{
			$item[$i][$stationname]  = "<td ". $item[$i][$stationname] . "</td>";
			$rowspan--;
			}
			//ROWSPAN
			if ($rowspan === 1 ){
			$item[$dataplace][$stationname]  = "<td ". $item[$dataplace][$stationname] . "</td>";
			}else{
			$item[$dataplace][$stationname]  = "<td  rowspan = $rowspan ". $item[$dataplace][$stationname] . "</td>";
//			$item[$dataplace][$stationname]  = "<td ". $item[$dataplace][$stationname] . "$rowspan </td>";
			}

//	}elseif ((!isset($item[$i][$stationname]))&&($item[$i][$stationname] == "")){
	}elseif (!isset($item[$i][$stationname])){
	//ヌルなら
		//$item[$i][$stationname]  =  $item[$i][$stationname] ;
		$item[$i][$stationname]  =  null ;
//		$item[$i][$stationname]  =  "<td><br></td>" ;
	}else{
	//なんか入ってるなら
		$rowspan = $i - $dataplace;
		$itemDataplaceStationname = null;
		if (isset($item[$dataplace][$stationname])){
		$itemDataplaceStationname = $item[$dataplace][$stationname];
		}
			if ($rowspan === 1 ){
			$item[$dataplace][$stationname]  = "<td ". $itemDataplaceStationname . "</td>";
			}else{
			$item[$dataplace][$stationname]  = "<td rowspan = $rowspan ". $itemDataplaceStationname . "</td>";
//			$item[$dataplace][$stationname]  = "<td ". $item[$dataplace][$stationname] . "$rowspan </td>";
			}
		$dataplace = $i;
		
	}
}//for
}// end of for://・局ごとに縦に配列入れていく

//・テーブルレンダリング
print "<table>\n<tr>";

//ヘッダ
foreach ($snames as $s) {
	print "<th>".htmlspecialchars($s)."</th>" ;
}
//本体
for ($l = 0 ;$l <  $colmnums; $l++){
	print "<tr>";
	foreach ($stationhash as $stationname) {
		print_r($item[$l]["$stationname"]);
	}
	print "</tr>\n";
}
print "</table>\n";

print "<p align=\"left\"> $navigationbar </p>";
?>
<hr>
凡例
<table>
<tr>
<td id="information">情報</td>
<td id="anime">アニメ・特撮</td>
<td id="news">ニュース・報道</td>
<td id="drama">ドラマ</td>
<td id="variety">バラエティ</td>
<td id="documentary">ドキュメンタリー・教養</td>
<td id="education">教育</td>
<td id="music">音楽</td>
<td id="cinema">映画</td>
<td id="hobby">趣味・実用</td>
<td id="kids">キッズ</td>
<td id="sports">スポーツ</td>
<td id="etc">その他</td>
<td id="stage">演劇</td>

</tr>
</table>
</body>
</html>