-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathactivity2.php
112 lines (93 loc) · 3.61 KB
/
activity2.php
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
<?php
require 'lib/function.php';
$user['regdate'] = $sql -> resultq("SELECT MIN(`regdate`) FROM users WHERE regdate > 0") or die();
$max = ceil(($sql -> resultq("SELECT MAX(`posts`) FROM users") + 1) / 50) * 50;
$vd = date('m-d-y', $user['regdate']);
$dd = mktime(0,0,0,substr($vd,0,2),substr($vd,3,2),substr($vd,6,2));
$days = floor((ctime()-$dd)/86400);
$scalex = 1;
$scaley = 20;
$m = $max / $scaley;
$img = ImageCreateTrueColor($days * $scalex,$m);
$c['bg'] = ImageColorAllocate($img, 0, 0, 0);
$c['bg1'] = ImageColorAllocate($img, 0, 0, 60);
$c['bg2'] = ImageColorAllocate($img, 0, 0, 80);
$c['bg3'] = ImageColorAllocate($img, 40, 40,100);
$c['mk1'] = ImageColorAllocate($img, 60, 60,130);
$c['mk2'] = ImageColorAllocate($img, 80, 80,150);
$c['bar'] = ImageColorAllocate($img,250,190, 40);
$c['pt'] = ImageColorAllocate($img,250,250,250);
for($i=0;$i<$days;$i++){
$num=date('m',$dd+$i*86400)%2+1;
if(date('m-d',$dd+$i*86400)=='01-01') $num=3;
ImageFilledRectangle($img,$i * $scalex,$m,($i + 1) * $scalex - 2,0,$c["bg$num"]);
}
for($i=0;$i<=($m / 50);$i++){
ImageLine($img,0,$m-$i*100+50,($days + 1) * $scalex - 1, $m-$i*100+50, $c['mk1']);
ImageLine($img,0,$m-$i*100, ($days + 1) * $scalex - 1, $m-$i*100, $c['mk2']);
imagestring($img, 3, 3, $m-$i*100+1, ($i * 100) * $scaley, $c['bg']);
imagestring($img, 3, 3, $m-$i*100+51, ($i * 100 - 50) * $scaley, $c['bg']);
imagestring($img, 3, 2, $m-$i*100, ($i * 100) * $scaley, $c['mk2']);
imagestring($img, 3, 2, $m-$i*100+50, ($i * 100 - 50) * $scaley, $c['mk1']);
}
$users = array();
$userq = $sql -> query("SELECT id, name FROM `users` ORDER BY `posts` DESC LIMIT 0, 10");
while ($u = $sql -> fetch($userq))
$users[$u['id']] = array('name' => $u['name'], 'color' => imagecolorallocate($img, rand(100,255), rand(100,255), rand(100,255)));
$z = count($users);
$namespace = 12;
imagerectangle( $img, 61, 11, 174, 15 + $z * $namespace, $c['bg']);
imagefilledrectangle($img, 60, 10, 173, 14 + $z * $namespace, $c['bg2']);
imagerectangle( $img, 60, 10, 173, 14 + $z * $namespace, $c['mk2']);
$z = 0;
$data = getdata(array_keys($users));
foreach($users as $uid => $userx) {
drawdata($data[$uid], $userx['color']);
imageline($img, 66, $z * $namespace + 19, 76, $z * $namespace + 19, $c['bg']);
imageline($img, 65, $z * $namespace + 18, 75, $z * $namespace + 18, $userx['color']);
imagestring($img, 2, 80 + 1, $z * $namespace + 12, $userx['name'], $c['bg']);
imagestring($img, 2, 80, $z * $namespace + 11, $userx['name'], $userx['color']);
$z++;
}
/* if($_GET['debugsql']) {
require 'lib/layout.php';
print $header.$footer;
printtimedif(time());
die(1);
} */
Header('Content-type:image/png');
ImagePNG($img);
ImageDestroy($img);
function drawdata($p, $color) {
global $days, $scalex, $m, $img;
$oldy = $m;
for ($i=0;$i<$days;$i++){
$y = $m-$p[$i];
$x = $i * $scalex;
if (!$p[$i]) {
$y = $oldy;
}
imageline($img, $x, $oldy, $x + $scalex - 1, $y, $color);
$oldy = $y;
}
}
function getdata($users) {
global $sql, $dd, $scaley, $days;
$q = $sql->query(
"SELECT user, FROM_UNIXTIME(date, '%Y-%m-%d') day, count(*) c ".
"FROM posts WHERE user IN (".implode(',',$users).") GROUP BY user, day ORDER BY user, day",
'day');
$tmp = array();
$y = array();
while ($r = $sql->fetch($q, MYSQL_ASSOC))
$tmp[$r['user']][$r['day']] = $r;
for($i=0; $i < $days; ++$i) {
$dk = date('Y-m-d',$dd+$i*86400);
foreach ($tmp as $uid => $qdata) {
if (!array_key_exists($dk, $qdata)) continue;
$y[$uid] += $qdata[$dk]['c'];
$resp[$uid][$i] = $y[$uid] / $scaley;
}
}
return $resp;
}