Minor bugfixes with weather services API
[weathermon.git] / web / archive.php
1 <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
2 <html>
3 <head>
4   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
5   <meta name="GENERATOR" content="Mozilla/4.72 (X11; U; Linux 2.2.12-20smp i686) [Netscape]">    
6   <title>WeatherMon (архив)</title>                      
7   <link rel="icon" href="favicon.png" />
8   <style type="text/css">
9     a.year   {
10         padding:20px;
11         margin: 10px;
12         border:2px solid darkgrey;
13         border-radius: 10px;
14         display:inline-block;
15         width:200px;
16         float:left;
17         font-size:100%;
18         text-align:center;
19     }                                          
20     a.month   {
21         font-size:100%;
22         text-align:center;
23     }                                          
24     a:visited { text-decoration: none; color:darkblue; }
25     a:link { text-decoration: none; color:blue; }
26     a:hover { text-decoration: none; color:navy; }  
27   </style>
28 </head>
29 <body text="black" bgcolor="silver" link="blue" vlink="#000080" alink="#FF0000">         
30 <?php
31
32 include('config_local.php');
33 include('calendar.php');
34
35 $year = $_REQUEST['year']; 
36 $month = $_REQUEST['month'];
37 $day = $_REQUEST['day'];
38
39 if (! ($db = new PDO("mysql:host=$mysql_host;port=$mysql_port;dbname=$mysql_schema",$mysql_user,$mysql_pwd,array( PDO::ATTR_PERSISTENT => false)))) {
40   die($err);
41   }  
42
43 $db -> exec('SET CHARACTER SET utf8');
44
45 if (! $year) {
46         
47   $q = $db -> prepare(
48     'select 
49        date_format(day,\'%Y\') as year
50      from 
51        calendar
52      group by year  
53      order by year');
54   $q -> execute();
55 ?>
56 <h1>Архив метеоданных</h1>
57 <?php
58   while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
59 ?> 
60   <a class="year" href="?year=<?php echo $row['year']; ?>">Данные за <?php echo $row['year']; ?> год</a><br>
61 <?php
62   }
63       
64 } else {
65
66   if (! $month) {
67       
68     $next_year = $year+1;
69     $year      = sprintf('%04d',$year);
70     $next_year = sprintf('%04d',$next_year);
71     $q = $db -> prepare(
72           'select 
73              date_format(day,\'%m\') as month,
74              date_format(day,\'%d\') as day
75            from 
76              calendar
77            where 
78              day>=str_to_date(\''.$year.'-01-01\',\'%Y-%m-%d\') and 
79              day<str_to_date(\''.$next_year.'-01-01\',\'%Y-%m-%d\')
80            group by month,day
81            order by month,day'
82           );
83     $q -> execute();
84 ?>
85 <h1 align="center"><?php echo $year; ?> год</h1>
86 <?php
87     $data = $q -> fetchAll(PDO::FETCH_ASSOC);
88     $months = [];
89     foreach ($data as $row) {
90       $days [$year.$row['month'].$row['day']] = '&month='.$row['month'].'&day='.$row['day'];
91       $months[$row['month']]=1;
92     }
93     $m = 1;
94     echo '<table align="center">';
95     for ($i=1; $i<=3; $i++) {
96       echo '<tr>';
97       for ($j=1; $j<=4; $j++) {
98         echo '<td valign="top">';
99         $month=sprintf('%02d',$m);
100         $month_name = strftime('%B',mktime(0,0,0,$month,1,$year));
101         if (!empty($months[$month])) {
102           echo '<h3 align="center"><a class="month" href="?year='.$year.'&month='.$month.'">'.$month_name.'</a></h3>';
103         } else {
104           echo '<h3 align="center">'.$month_name.'</h3>';
105         }
106         calendar($year,$month,$days,'?year='.$year.'%s',0);
107         echo '</td>';
108         $m++;
109         }
110       echo '</tr>';
111     }
112     echo '</table>';
113     
114     $next_year = $year+1;
115
116     $q = $db -> prepare (
117       'select 
118          s.id sensor,p.id param,s.s_description sensor_name,p.st_description param_name,
119          count(distinct day) cnt,
120          round(min(v.min),1) min_value,
121          round(max(v.max),1) max_value,
122          u.name_short unit
123        from
124          sensors_ranges v,sensors s,st_parameters p,units u
125        where 
126          v.sensor=s.id and
127          v.parameter=p.id and
128          p.st_unit=u.id and
129          v.day>=str_to_date(\''.$year.'-01-01\',\'%Y-%m-%d\') and 
130          v.day<str_to_date(\''.$next_year.'-01-01\',\'%Y-%m-%d\')
131       group by s.id,p.id,s.s_description,p.st_description
132       order by s.id,p.id'
133       );
134         
135     $q -> execute();
136     $sensors = $q -> fetchAll(PDO::FETCH_ASSOC);
137       
138     foreach ($sensors as $sensor) {
139       
140       echo '<h3 align="center">'.$sensor['param_name'].'('.$sensor['sensor_name'].')</h3>';
141       echo '<table align="center">';
142       echo '<tr><td>';
143       echo 'Минимальное значение за год <b>'.$sensor['min_value'].' '.$sensor['unit'].'</b><br>';
144       echo 'Максимальное значение за год <b>'.$sensor['max_value'].' '.$sensor['unit'].'</b><br>';
145       echo '</td></tr>';
146       echo '</table>';
147
148       if ($sensor['cnt']>1) {
149         
150         echo '<center><img src="image_minmax.php?sensor='.$sensor['sensor'].'&param='.$sensor['param'].
151           '&type=year&year='.$year.'"></center>';
152         
153       }
154       
155     }
156
157
158   } else {
159       
160     if (!$day) {
161       
162       $next_year = $year;
163       $next_month = $month+1;
164
165       if ($next_month == 13) {
166         $next_month = 1;
167         $next_year = $next_year+1;
168       }
169
170       $next_month = sprintf('%02d',$next_month); 
171       $next_year  = sprintf('%04d',$next_year);
172       $month      = sprintf('%02d',$month);
173       $year      = sprintf('%04d',$year);
174
175       $q = $db -> prepare( 
176           'select  
177              date_format(day,\'%d\') as day
178            from 
179              sensors_ranges
180            where 
181              day>=str_to_date(\''.$year.'-'.$month.'-01\',\'%Y-%m-%d\') and 
182              day<str_to_date(\''.$next_year.'-'.$next_month.'-01\',\'%Y-%m-%d\')
183            group by day
184            order by day'
185           );
186       $q -> execute();
187       
188       $data = $q -> fetchAll(PDO::FETCH_ASSOC);
189
190       $month_name = strftime('%B %Y',mktime(0,0,0,$month,1,$year));
191
192 ?>
193 <h1 align="center"><?php echo 'Данные за '.$month_name; ?></h1>
194 <?php          
195       foreach ($data as $row) {
196         $days [$year.$month.$row['day']] = $row['day'];
197       }
198
199       calendar($year,$month,$days,'?year='.$year.'&month='.$month.'&day=%s',3);
200               
201       $q = $db -> prepare (
202           'select 
203              s.id sensor,p.id param,s.s_description sensor_name,p.st_description param_name,
204              count(distinct day) cnt,
205              round(min(v.min),1) min_value,
206              round(max(v.max),1) max_value,
207              u.name_short unit
208            from
209              sensors_ranges v,sensors s,st_parameters p,units u
210            where 
211              v.sensor=s.id and
212              v.parameter=p.id and
213              p.st_unit=u.id and
214              v.day>=str_to_date(\''.$year.'-'.$month.'-01\',\'%Y-%m-%d\') and 
215              v.day<str_to_date(\''.$next_year.'-'.$next_month.'-01\',\'%Y-%m-%d\')
216            group by s.id,p.id,s.s_description,p.st_description
217            order by s.id,p.id'
218         );
219         
220       $q -> execute();
221       $sensors = $q -> fetchAll(PDO::FETCH_ASSOC);
222       
223       foreach ($sensors as $sensor) {
224       
225         echo '<h3 align="center">'.$sensor['param_name'].'('.$sensor['sensor_name'].')</h3>';
226         echo '<table align="center">';
227         echo '<tr><td>';
228         echo 'Минимальное значение за месяц <b>'.$sensor['min_value'].' '.$sensor['unit'].'</b><br>';
229         echo 'Максимальное значение за месяц <b>'.$sensor['max_value'].' '.$sensor['unit'].'</b><br>';
230         echo '</td></tr>';
231         echo '</table>';
232
233         if ($sensor['cnt']>1) {
234         
235           echo '<center><img src="image_minmax.php?sensor='.$sensor['sensor'].'&param='.$sensor['param'].
236             '&type=month&year='.$year.'&month='.$month.'"></center>';
237         
238         }
239       
240       }
241
242     } else {
243
244       $month      = sprintf('%02d',$month);
245       $year      = sprintf('%04d',$year);
246       $day       = sprintf('%02d',$day);
247
248       $q = $db -> prepare(
249             'select 
250                 distinct v.sensor as sensor_id,s.s_description,p.id as param_id,p.st_description 
251              from 
252                 sensors_ranges v,st_parameters p,sensors s 
253              where 
254                 v.day=str_to_date(\''.$year.'-'.$month.'-'.$day.'\',\'%Y-%m-%d\')
255                 and v.sensor=s.id 
256                 and v.parameter=p.id'
257             );
258       $q -> execute();
259
260       while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
261
262         echo '<h3 align="center">'.$row['s_description'].'/'.$row['st_description'].'</h3>';
263 ?>
264 <center><img src="image.php?sensor=<?php echo $row['sensor_id']; ?>&param=<?php echo $row['param_id']?>&type=range&fromdate=<?php echo $year.$month.$day.'000000'; ?>&todate=<?php echo $year.$month.$day.'235959'?>"></center>
265 <?php  
266
267       }                                                            
268     }
269   }
270 }
271 ?>
272 </body>
273