1 <?php // content="text/plain; charset=utf-8"
3 error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);
5 include ('config_local.php');
7 require_once ('jpgraph/jpgraph.php');
8 require_once ('jpgraph/jpgraph_line.php');
9 require_once ('jpgraph/jpgraph_date.php');
10 require_once ('jpgraph/jpgraph_scatter.php');
11 require_once ('jpgraph/jpgraph_regstat.php');
13 if (! ($db = new PDO("mysql:host=$mysql_host;port=$mysql_port;dbname=$mysql_schema",$mysql_user,$mysql_pwd,array( PDO::ATTR_PERSISTENT => false)))) {
15 die('Не могу подключиться к БД');
19 $supported = imagetypes();
20 if( $supported & IMG_PNG ) $img_format="png";
21 elseif( $supported & IMG_GIF ) $img_format="gif";
22 elseif( $supported & IMG_JPG ) $img_format="jpeg";
23 elseif( $supported & IMG_WBMP ) $img_format="wbmp";
24 elseif( $supported & IMG_XPM ) $img_format="xpm";
26 $cachefilename = NULL;
28 $db -> exec('SET CHARACTER SET utf8');
30 $type = $_REQUEST['type'];
31 $sensor=$_REQUEST['sensor'];
32 $param=$_REQUEST['param'];
33 $year=$_REQUEST['year'];
34 $month=$_REQUEST['month'];
36 if ($type and $param) {
38 $sensor = intval($sensor);
39 $param = intval($param);
42 'select s_description from sensors where id='.$sensor
46 while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
47 $sensor_name = $row['s_description'];
51 'select st.st_fill_color_top,st.st_fill_color_bottom,st.st_description,u.id,u.unit_group from st_parameters st,units u where st.id='.$param.' and st.st_unit=u.id'
55 while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
56 $param_name = $row['st_description'];
57 $from_unit = $row['id'];
58 $unit_group = $row['unit_group'];
59 $fill_color_top=$row['st_fill_color_top'];
60 $fill_color_bottom=$row['st_fill_color_bottom'];
63 if (!empty($_COOKIE['unit_'.$unit_group])) {
64 $to_unit=intval($_COOKIE['unit_'.$unit_group]);
70 'select u.name_short from units u where u.id='.$to_unit
74 while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
75 $param_unit = $row['name_short'];
81 if ($type == 'month') {
84 $next_month = $month+1;
94 $ym=sprintf('%04d%02d',$next_year,$next_month);
98 $cachefilename='meteo.month.'.$sensor.'.'.$param.'.'.$to_unit.'.'.$year.'-'.$month.'.'.$img_format;
102 $datestr=sprintf("%04d%02d01",$year,$month);
103 $nextdatestr=sprintf("%04d%02d01",$next_year,$next_month);
109 unitconv(min(min),'.$from_unit.','.$to_unit.') min_value,
110 unitconv(max(max),'.$from_unit.','.$to_unit.') max_value
113 unix_timestamp(day) x,
119 day>=STR_TO_DATE(\''.$datestr.'\',\'%Y%m%d\')
120 and day<STR_TO_DATE(\''.$nextdatestr.'\',\'%Y%m%d\')
121 and sensor='.$sensor.'
122 and parameter='.$param.'
127 } elseif ($type == "year") {
129 $next_year = $year+1;
133 if ($curr>$next_year) {
135 $cachefilename='meteo.year.'.$sensor.'.'.$param.'.'.$year.'.'.$img_format;
139 $datestr=sprintf("%04d0101",$year);
140 $nextdatestr=sprintf("%04d0101",$next_year);
146 unitconv(min(min),'.$from_unit.','.$to_unit.') min_value,
147 unitconv(max(max),'.$from_unit.','.$to_unit.') max_value
151 DATE_SUB(day, INTERVAL DAYOFWEEK(day)-1 DAY)
158 day>=STR_TO_DATE(\''.$datestr.'\',\'%Y%m%d\')
159 and day<STR_TO_DATE(\''.$nextdatestr.'\',\'%Y%m%d\')
160 and sensor='.$sensor.'
161 and parameter='.$param.'
168 $g = new Graph(640,480);
170 if ($cachefilename) {
171 if ($g->cache->IsValid($cachefilename)) {
173 $g->cache->StreamImgFile($g->img,$cachefilename);
179 $g->SetupCache($cachefilename,$timeout);
187 while ($row = $q -> fetch(PDO::FETCH_ASSOC)) {
189 $xdata[] = $row['x'];
190 $mindata[] = $row['min_value'];
191 $maxdata[] = $row['max_value'];
196 $g->graph_theme = null;
198 //$g->img->SetAntiAliasing();
200 // We need a linlin scale since we provide both
201 // x and y coordinates for the data points.
202 $g->SetScale('datlin');
203 $g->xaxis->SetLabelAngle(90);
204 $g->xaxis->SetPos("min");
205 $g->xaxis->scale->SetTimeAlign( MINADJ_1 );
207 // We use a scatterplot to illustrate the original
210 $bplot = new LinePlot($maxdata,$xdata);
212 $bplot->SetColor($fill_color_top);
213 $bplot->SetFillGradient($fill_color_top.'@0.2',$fill_color_bottom.'@0.9',100,TRUE);
214 $bplot->SetFillFromYMin(TRUE);
215 $bplot->SetWeight(4);
217 $aplot = new LinePlot($mindata,$xdata);
219 $aplot->SetColor($fill_color_bottom);
220 $aplot->SetFillGradient($fill_color_bottom.'@0.2','white@0.9',100,TRUE);
221 $aplot->SetFillFromYMin(TRUE);
222 $aplot->SetWeight(4);
224 $g->SetMargin(60,60,60,130);
225 $g->title->Set($sensor_name.'/'.$param_name.', '.$param_unit);
226 $g->title->SetFont(FF_DV_SANSSERIF,FS_BOLD,12);
227 $g->subtitle->Set('(минимальные и максимальные значения за период)');
228 $g->subtitle->SetColor('darkred');
229 $g->SetMarginColor('silver');
232 $g->xgrid->SetLineStyle('dotted');
234 $g->ygrid->SetLineStyle('dotted');
236 // Add the plots to the graph and stroke
241 header("Content-Type: text/html; charset=UTF-8");
242 die('Сенсор не выбран!');