File: drawyear.php

package info (click to toggle)
solarpowerlog 0.26-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,724 kB
  • sloc: cpp: 11,856; ansic: 1,044; php: 728; sh: 188; xml: 166; makefile: 166
file content (98 lines) | stat: -rw-r--r-- 4,694 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<?php
	/*
		Simple solarmax visualizer php program written by zagibu@gmx.ch in July 2010
		This program was originally licensed under WTFPL 2 http://sam.zoy.org/wtfpl/
		Improvements by Frank Lassowski flassowski@gmx.de in August 2010
		This program is now licensed under GPLv2 or later http://www.gnu.org/licenses/gpl2.html
	*/

	function draw_year($start, $end, $pred_month, $image_name, $table, $fontfile, $show_text) {

		// Create a date array
		$date = getdate(strtotime($end));

		// Select daily energy for each day of year
		// If you are experiencing problems with the value 'kdy' especially the days very first 'kdy' is equal to the last one of the previous day comment in the next line and comment out the following one. Be aware: This is !!!untested!!! Don't slap me if something's going wrong!
		//$result = @mysql_query("SELECT MONTH($table.created) AS month, kmt FROM $table, (SELECT MAX(created) AS created FROM $table WHERE YEAR(created)=$date[year] GROUP BY MONTH(created)) AS sublog WHERE $table.created=sublog.created AND YEAR($table.created)=$date[year]") or die(mysql_error());
		$result = @mysql_query("SELECT MONTH(created) AS month, MAX(kmt) AS kmt FROM $table WHERE YEAR(created)=$date[year] GROUP BY MONTH(created)") or die(mysql_error());

		if (mysql_num_rows($result) == 0)
		{
			// No data...create dummy image
			$image = imagecreatetruecolor(10, 10);
			$white = imagecolorallocate($image, 255, 255, 255);
			imagefill($image, 0, 0, $white);
			imagepng($image, $image_name);
			imagedestroy($image);
			return $GLOBALS["error3".$GLOBALS[lang]] . '<br />';
		}

		// include monthly predictions
		include 'solarertrag_month_predictions.php';

		// Initialize kdy image
		// Pixel per month determines bar width
		$px_per_month = 64;
		// Width = months * px per month + gap
		$width = $date['mon'] * $px_per_month + 52;
		$maxkwh = 600;
		// How many kWh per diagram line
		$step_w = 50;
		// How many px per diagram line (W/px = $step_w / $vert_px)
		$vert_px = 26;
		// Height = number of lines * px per line + px per line (for 0-line) + gap
		$gap = 60;
		$height = $maxkwh / $step_w * $vert_px + $gap;
		// Create image, prepare colors and set background to white
		$image = imagecreatetruecolor($width, $height);
		// get the colors
		include 'colors.php';
		imagefill($image, 0, 0, $white);

		if (preg_match('/gridyear/', $show_text)) {
			// Draw horizontal lines with some space above and below
			for ($i = 0; $i <= $maxkwh / $step_w; $i++) {
				// Create horizontal grid line
				$ypos = $height - $i * $vert_px - $gap + 10;
				imageline($image, 12, $ypos, $width - 35, $ypos, $gray);
				// Draw the kWh value at the end of the horizontal line
				imagefttext($image, 8, 0, $width - 30, $ypos + 4, $black, $fontfile, $i * $step_w);
			}
			// Draw vertical lines with some space at the left and right
			for ($i = 1; $i <= $date['mon']; $i++) {
				// Create vertical grid line
				$xpos = $i * $px_per_month;
				imageline($image, $xpos, 5, $xpos, $height - $gap + 15, $gray);
				// Draw the hour value at the end of the vertical line
				imagefttext($image, 8, 0, $xpos - 4, $height - $gap + 28, $black, $fontfile, $i);
			}
		}
		// Draw kdy values
		while($row = mysql_fetch_assoc($result)) {
			// Determine x position
			$xpos = $row['month'] * $px_per_month - $px_per_month / 2;
			// Transform kWh to pixel height
			$kwh = $row['kmt'] / $step_w * $vert_px;

			// Draw kWh bar and prediction line
			$pred_month = ${'m_'.date('m', mktime(0, 0, 0, $row['month'], 1, 0))};
			$pred = $pred_month / $step_w * $vert_px;
			imagefilledrectangle($image, $xpos + 2, $height - $gap + 10, $xpos + $px_per_month - 2, $height - $gap - $kwh + 10, $green);
			imageline($image, $xpos, $height - $pred - $gap + 10, $xpos + $px_per_month, $height - $pred - $gap + 10, $blue);
			if (preg_match('/numbersyear/', $show_text)) {
				imagefttext($image, 12, 90, $xpos + 31, $height - $gap - $kwh + 4, $black, $fontfile, $row['kmt']);
				imagefttext($image, 7, 0, $xpos + 45, $height - $gap - $pred + 8, $blue, $fontfile, $pred_month);
				if (preg_match('/percent/', $show_text)) {
					imagefttext($image, 6 , 90, $xpos + 42, $height - $gap - $kwh + 10, $black, $fontfile, "(".round($row['kmt'] / $pred_month,3) *100 ." %)");
				}
			}
		}

		//explain colored lines
		imageline($image, $width - ($width * 2 / 4) - 55, $height - 15, $width - ($width * 2 / 4) - 70, $height - 15, $blue);
		imagefttext($image, 7, 0, $width - ($width * 2 / 4) - 40, $height - 12, $black, $fontfile, $GLOBALS["graphyear2".$GLOBALS['lang']]);
		imagepng($image, $image_name);
		imagedestroy($image);
		return '<p>' . $GLOBALS["graphyear1".$GLOBALS['lang']] . '</p>';
	}
?>