OSDN Git Service

modified: epgwakealarm.php 省電力少し修正
[epgrec/epgrec.git] / index.php
1 <?php
2
3 include_once("config.php");
4 include_once( INSTALL_PATH . "/DBRecord.class.php" );
5 include_once( INSTALL_PATH . "/Smarty/Smarty.class.php" );
6 include_once( INSTALL_PATH . "/reclib.php" );
7 include_once( INSTALL_PATH . "/Settings.class.php" );
8
9 // 設定ファイルの有無を検査する
10 if( ! file_exists( INSTALL_PATH."/settings/config.xml") ) {
11     header( "Content-Type: text/html;charset=utf-8" );
12     exit( "<script type=\"text/javascript\">\n" .
13           "<!--\n".
14          "window.open(\"install/step1.php\",\"_self\");".
15          "// -->\n</script>" );
16 }
17
18 $settings = Settings::factory();
19
20 $DAY_OF_WEEK = array( "(日)","(月)","(火)","(水)","(木)","(金)","(土)" );
21
22 // パラメータの処理
23 // 表示する長さ(時間)
24 $program_length = $settings->program_length;
25 if( isset( $_GET['length']) ) $program_length = (int) $_GET['length'];
26 // 地上=GR/BS=BS
27 $type = "GR";
28 if( isset( $_GET['type'] ) ) $type = $_GET['type'];
29 // 現在の時間
30 $top_time = mktime( date("H"), 0 , 0 );
31 if( isset( $_GET['time'] ) ) {
32         if( sscanf( $_GET['time'] , "%04d%2d%2d%2d", $y, $mon, $day, $h ) == 4 ) {
33                 $tmp_time = mktime( $h, 0, 0, $mon, $day, $y );
34                 if( ($tmp_time < ($top_time + 3600 * 24 * 8)) && ($tmp_time > ($top_time - 3600 * 24 * 8)) )
35                         $top_time = $tmp_time;
36         }
37 }
38 $last_time = $top_time + 3600 * $program_length;
39
40 // 時刻欄
41 for( $i = 0 ; $i < $program_length; $i++ ) {
42         $tvtimes[$i] = date("H", $top_time + 3600 * $i );
43 }
44
45
46 // 番組表
47 $programs = array();
48 if( $type == "BS" ) $channel_map = $BS_CHANNEL_MAP;
49 else if( $type == "GR" ) $channel_map = $GR_CHANNEL_MAP;
50 else if( $type == "CS" ) $channel_map = $CS_CHANNEL_MAP;
51 $st = 0;
52 $prec = null;
53 try {
54         $prec = new DBRecord(PROGRAM_TBL);
55 }
56 catch( Exception $e ) {
57         exit('プログラムテーブルが存在しないようです。インストールをやり直してください.');
58 }
59 $num_ch = 0;
60 foreach( $channel_map as $channel_disc => $channel ) {
61         $prev_end = $top_time;
62         try {
63                 $crec = new DBRecord( CHANNEL_TBL, "channel_disc", $channel_disc );
64                 $programs[$st]["skip"] = $crec->skip;
65                 if( $crec->skip == 0 ) $num_ch++;
66                 $programs[$st]["channel_disc"] = $channel_disc;
67                 $programs[$st]["station_name"]  = $crec->name;
68                 $programs[$st]["sid"] = $crec->sid;
69                 $programs[$st]["ch_hash"] = md5($channel_disc);
70                 
71                 $reca = $prec->fetch_array( "channel_disc", $channel_disc,
72                                                   "endtime > '".toDatetime($top_time)."' ".
73                                                   "AND starttime < '". toDatetime($last_time)."' ".
74                                                   "ORDER BY starttime ASC "
75                                                );
76                 $programs[$st]['list'] = array();
77                 $num = 0;
78                 foreach( $reca as $prg ) {
79                         $prg_starttime = $start = strtotime($prg['starttime']);
80                         $prg_endtime = strtotime($prg['endtime']);
81                         // 前プログラムとの空きを調べる
82                         if( ($prg_starttime - $prev_end) > 0 ) {
83                                 $height = ($prg_starttime-$prev_end) * $settings->height_per_hour / 3600;
84                                 $programs[$st]['list'][$num]['category_none'] = "none";
85                                 $programs[$st]['list'][$num]['height'] = $height;
86                                 $programs[$st]['list'][$num]['title'] = "";
87                                 $programs[$st]['list'][$num]['starttime'] = "";
88                                 $programs[$st]['list'][$num]['description'] = "";
89                                 $num++;
90                         }
91                         $prev_end = $prg_endtime;
92                         
93                         $height = $prg_endtime - $prg_starttime;
94                         // $top_time より早く始まっている番組
95                         if( $prg_starttime < $top_time ) {
96                                 $height = $prg_endtime - $top_time;
97                         }
98                         // $last_time より遅く終わる番組
99                         if( $prg_endtime > $last_time ) {
100                                 $height = $height - ($prg_endtime - $last_time);
101                         }
102                         $height = $height * $settings->height_per_hour / 3600;
103                         
104                         // プログラムを埋める
105                         $cat = new DBRecord( CATEGORY_TBL, "id", $prg['category_id'] );
106                         $programs[$st]['list'][$num]['category_name'] = $cat->name_en;
107                         $programs[$st]['list'][$num]['height'] = $height;
108                         $programs[$st]['list'][$num]['title'] = $prg['title'];
109                         $programs[$st]['list'][$num]['starttime'] = date("H:i", $start )."" ;
110                         $programs[$st]['list'][$num]['description'] = $prg['description'];
111                         $programs[$st]['list'][$num]['prg_start'] = str_replace( "-", "/", $prg['starttime']);
112                         $programs[$st]['list'][$num]['duration'] = "" . (toTimestamp($prg['endtime']) - toTimestamp($prg['starttime']));
113                         $programs[$st]['list'][$num]['channel'] = ($prg['type'] == "GR" ? "地上D" : "BS" ) . ":". $prg['channel'] . "ch";
114                         $programs[$st]['list'][$num]['id'] = "" . ($prg['id']);
115                         $programs[$st]['list'][$num]['rec'] = DBRecord::countRecords(RESERVE_TBL, "WHERE complete = '0' AND program_id = '".$prg['id']."'" );
116                         $num++;
117                 }
118         }
119          catch( exception $e ) {
120                 $num_ch++;      // epgの無いチャンネル対応
121 //              exit( $e->getMessage() );
122 //              何もしない
123         }
124         // 空きを埋める
125         if( ($last_time - $prev_end) > 0 ) {
126                 $height = ($last_time - $prev_end) * $settings->height_per_hour / 3600;
127                 $height = $height;
128                 $programs[$st]['list'][$num]['category_name'] = "none";
129                 $programs[$st]['list'][$num]['height'] = $height;
130                 $programs[$st]['list'][$num]['title'] = "";
131                 $programs[$st]['list'][$num]['starttime'] = "";
132                 $programs[$st]['list'][$num]['description'] = "";
133                 $num++;
134         }
135         $st++;
136 }
137 $prec = null;
138  
139 // 局の幅
140 $ch_set_width = (int)($settings->ch_set_width);
141 // 全体の幅
142 $chs_width = $ch_set_width * $num_ch;
143
144 // GETパラメタ
145 $get_param = $_SERVER['SCRIPT_NAME'] . "?type=".$type."&length=".$program_length."";
146
147 $smarty = new Smarty();
148
149 // カテゴリ一覧
150 $crec = DBRecord::createRecords( CATEGORY_TBL );
151 $cats = array();
152 $num = 0;
153 foreach( $crec as $val ) {
154         $cats[$num]['name_en'] = $val->name_en;
155         $cats[$num]['name_jp'] = $val->name_jp;
156         $num++;
157 }
158 $smarty->assign( "cats", $cats );
159
160
161 // タイプ選択
162 $types = array();
163 $i = 0;
164 if( $settings->bs_tuners != 0 ) {
165         $types[$i]['selected'] = $type == "BS" ? 'class="selected"' : "";
166         $types[$i]['link'] = $_SERVER['SCRIPT_NAME'] . "?type=BS&length=".$program_length."&time=".date( "YmdH", $top_time);
167         $types[$i]['name'] = "BS";
168         $i++;
169
170         // CS
171         if ($settings->cs_rec_flg != 0) {
172                 $types[$i]['selected'] = $type == "CS" ? 'class="selected"' : "";
173                 $types[$i]['link'] = $_SERVER['SCRIPT_NAME'] . "?type=CS&length=".$program_length."&time=".date( "YmdH", $top_time);
174                 $types[$i]['name'] = "CS";
175                 $i++;
176         }
177 }
178 if( $settings->gr_tuners != 0 ) {
179         $types[$i]['selected'] = $type == "GR" ? 'class="selected"' : "";
180         $types[$i]['link'] = $_SERVER['SCRIPT_NAME'] . "?type=GR&length=".$program_length."&time=".date( "YmdH", $top_time);
181         $types[$i]['name'] = "地上デジタル";
182         $i++;
183 }
184 $smarty->assign( "types", $types );
185
186 // 日付選択
187 $days = array();
188 $day = array();
189 $day['d'] = "昨日";
190 $day['link'] = $get_param . "&time=". date( "YmdH", time() - 3600 *24 );
191 $day['ofweek'] = "";
192 $day['selected'] = $top_time < mktime( 0, 0 , 0) ? 'class="selected"' : '';
193
194 array_push( $days , $day );
195 $day['d'] = "現在";
196 $day['link'] = $get_param;
197 $day['ofweek'] = "";
198 $day['selected'] = "";
199 array_push( $days, $day );
200 for( $i = 0 ; $i < 8 ; $i++ ) {
201         $day['d'] = "".date("d", time() + 24 * 3600 * $i ) . "日";
202         $day['link'] = $get_param . "&time=".date( "Ymd", time() + 24 * 3600 * $i) . date("H" , $top_time );
203         $day['ofweek'] = $DAY_OF_WEEK[(int)date( "w", time() + 24 * 3600 * $i )];
204         $day['selected'] = date("d", $top_time) == date("d", time() + 24 * 3600 * $i ) ? 'class="selected"' : '';
205         array_push( $days, $day );
206 }
207 $smarty->assign( "days" , $days );
208
209 // 時間選択
210 $toptimes = array();
211 for( $i = 0 ; $i < 24; $i+=4 ) {
212         $tmp = array();
213         $tmp['hour'] = sprintf( "%02d:00", $i );
214         $tmp['link'] = $get_param . "&time=".date("Ymd", $top_time ) . sprintf("%02d", $i );
215         array_push( $toptimes, $tmp );
216 }
217 $smarty->assign( "toptimes" , $toptimes );
218
219 $smarty->assign( "tvtimes", $tvtimes );
220 $smarty->assign( "programs", $programs );
221 $smarty->assign( "ch_set_width", (int)($settings->ch_set_width) );
222 $smarty->assign( "chs_width", $chs_width );
223 $smarty->assign( "height_per_hour", $settings->height_per_hour );
224 $smarty->assign( "height_per_min", $settings->height_per_hour / 60 );
225 $smarty->assign( "num_ch", $num_ch );
226 $smarty->assign( "num_all_ch" , count( $channel_map ) );
227
228 // date("Y-m-d H:i:s", $timestamp);
229
230 $sat_type = array('GR' => '地上デジタル', 'BS' => 'BSデジタル', 'CS' => 'CSデジタル');
231 $sitetitle = date( "Y", $top_time ) . "年" . date( "m", $top_time ) . "月" . date( "d", $top_time ) . "日". date( "H", $top_time ) .
232               "時~".$sat_type[$type]."番組表";
233
234 $smarty->assign("sitetitle", $sitetitle );
235
236 $smarty->assign("top_time", str_replace( "-", "/" ,toDatetime($top_time)) );
237 $smarty->assign("last_time", str_replace( "-", "/" ,toDatetime($last_time)) );
238
239
240 $smarty->display("index.html");
241 ?>