summaryrefslogtreecommitdiff
path: root/bin/quotaimg.php
blob: 5896eac129e28c29cf15c4321222f2da3c00c454 (plain)
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<?php

/*
 +-----------------------------------------------------------------------+
 | program/bin/quotaimg.php                                              |
 |                                                                       |
 | This file is part of the RoundCube Webmail client                     |
 | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland                 |
 | Licensed under the GNU GPL                                            |
 |                                                                       |
 | PURPOSE:                                                              |
 |   Create a GIF image showing the mailbox quot as bar                  |
 |                                                                       |
 +-----------------------------------------------------------------------+
 | Author: Brett Patterson <brett2@umbc.edu>                             |
 +-----------------------------------------------------------------------+

 $Id:  $

*/

$used  = ((isset($_GET['u']) && !empty($_GET['u'])) || $_GET['u']=='0')?(int)$_GET['u']:'??';
$quota = ((isset($_GET['q']) && !empty($_GET['q'])) || $_GET['q']=='0')?(int)$_GET['q']:'??';
$width = empty($_GET['w']) ? 100 : (int)$_GET['w'];
$height = empty($_GET['h']) ? 14 : (int)$_GET['h'];

function genQuota($used, $total, $width, $height)
{
	/**
	 *	Quota Display
	 *
	 *	Modify the following few elements to change the display of the image.
	 *	Modifiable attributes are:
	 *	bool	border	::	Defines whether you want to show a border around it or not.
	 *	bool	unknown	::	Leave default; Defines whether quota is "unknown"
	 *
	 *	int		height	::	Defines height of the image
	 *	int		width	::	Defines width of the image
	 *	int		font	::	Changes the font size & font used in the GD library.
	 *						Available values are from 1 to 5.
	 *	int		padding	::	Changes the offset (in pixels) from the top of the image to
	 *						where the top of the text will be aligned.  User greater than
	 *						0 to ensure text is off the border.
	 *	array	limit	::	Holds the integer values of in an associative array as to what
	 *						defines the upper and lower levels for quota display.
	 *						High - Quota is nearing capacity.
	 *						Mid  - Quota is around the middle
	 *						Low  - Currently not used.
	 *	array	color	::	An associative array of strings of comma separated values (R,G,B)
	 *						for use in color creation.  Define the RGB values you'd like to 
	 *						use.  A list of colors (and their RGB values) can be found here:
	 *						http://www.december.com/html/spec/colorcodes.html
	 **/

	$unknown = false;
	$border = 0;

	$font = 2;
	$padding = 0;

	$limit['high'] = 70;
	$limit['mid'] = 45;
	$limit['low'] = 0;

	// Fill Colors
	$color['fill']['high'] = '215, 13, 13';	// Near quota fill color
	$color['fill']['mid'] = '126, 192, 238';// Mid-area of quota fill color
	$color['fill']['low'] = '147, 225, 100';	// Far from quota fill color

	// Background colors
	$color['bg']['OL'] = '215, 13, 13';		// Over limit bbackground
	$color['bg']['Unknown'] = '238, 99, 99';// Unknown background
	$color['bg']['quota'] = '255, 255, 255';// Normal quota background

	// Misc. Colors
	$color['border'] = '0, 0, 0';
	$color['text'] = '102, 102, 102';


	/****************************
	 *****	DO NOT EDIT BELOW HERE	*****
	 ****************************/

	if (ereg("^[^0-9?]*$", $used) || ereg("^[^0-9?]*$", $total))
		return false; 

	if (strpos($used, '?')!==false || strpos($total, '?')!==false && $used != 0)
		$unknown = true; 

	$im = imagecreate($width, $height);

	if ($border)
	{
		list($r, $g, $b) = explode(',', $color['border']);
		$borderc = imagecolorallocate($im, $r, $g, $b);
		imageline($im, 0, 0, $width, 0, $borderc);
		imageline($im, 0, $height-$border, 0, 0, $borderc);
		imageline($im, $width-1, 0, $width-$border, $height, $borderc);
		imageline($im, $width, $height-$border, 0, $height-$border, $borderc);
	}
		
	list($r, $g, $b) = explode(',', $color['text']);
	$text = imagecolorallocate($im, $r, $g, $b);

	if ($unknown)
	{
		list($r, $g, $b) = explode(',', $color['bg']['Unknown']);
		$background = imagecolorallocate($im, $r, $g, $b);
		imagefilledrectangle($im, 0, 0, $width, $height, $background);

		$string = 'Unknown';
		$mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
		imagestring($im, $font, $mid, $padding, $string, $text);
	}
	else if ($used > $total)
	{
		list($r, $g, $b) = explode(',', $color['bg']['OL']);
		$background = imagecolorallocate($im, $r, $g, $b);
		imagefilledrectangle($im, 0, 0, $width, $height, $background);

		$string = 'Over Limit';
		$mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
		imagestring($im, $font, $mid, $padding, $string, $text);
	}
	else
	{
		list($r, $g, $b) = explode(',', $color['bg']['quota']);
		$background = imagecolorallocate($im, $r, $b, $g);
		imagefilledrectangle($im, 0, 0, $width, $height, $background);
		
		$quota = ($used==0)?0:(round($used/$total, 2)*100);

		if ($quota >= $limit['high'])
		{
			list($r, $g, $b) = explode(',', $color['fill']['high']);
			$fill = imagecolorallocate($im, $r, $g, $b);
		}
		elseif($quota >= $limit['mid'])
		{
			list($r, $g, $b) = explode(',', $color['fill']['mid']);
			$fill = imagecolorallocate($im, $r, $g, $b);
		}
		else // if($quota >= $limit['low'])
		{
			list($r, $g, $b) = explode(',', $color['fill']['low']);
			$fill = imagecolorallocate($im, $r, $g, $b);
		}

		$quota_width = $quota / 100 * $width;
		imagefilledrectangle($im, $border, 0, $quota, $height-2*$border, $fill);

		$string = $quota.'%';
		$mid = floor(($width-(strlen($string)*imagefontwidth($font)))/2)+1;
		imagestring($im, $font, $mid, $padding, $string, $text); // Print percent in black
	}

	header('Content-Type: image/gif');
	header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+86400)." GMT");
	header("Cache-Control: ");
	header("Pragma: ");
	
	imagegif($im);
	imagedestroy($im);
}


genQuota($used, $quota, $width, $height);
exit;
?>