root/dev/common/class.map.php @ 181

Revision 181, 12.4 KB (checked in by exi, 16 years ago)

Changed admin/options to show the actual page as page title.
admin_menu.php now also loads settings from mods.
Added event manager and the first 2 events (comment/killmail added).
Changed config to be in a separate file and modified it to be called static with config::get().
http_request now stores the socket status in $this->status.
Changed MapView? to store pictures based on KB_SITE so it doesnt show a map with wrong colors for the current killboard on a multi-site installation.
Changed options to handle element options (like 'edit:size:40').
Changed options to use the static calls to config.
Changed Page to use the static calls to config.
Changed Session to use session_name() to determine if it should start a session.
index.php now loads module-init-scripts.
Changed post.php to use config and it should now also use the mailserver configuration directive to send emails.
Added a mail_forward-mod to show how easy it can be to develop mods once there are enough events listed.
Fixed 2 typos in battle_overview.tpl.

Line 
1<?php
2require_once('db.php');
3require_once('globals.php');
4
5class MapView
6{
7    function MapView($mode, $size = 200)
8    {
9        $this->mode_ = $mode;
10        $this->imgwidth_ = $size;
11        $this->imgheight_ = $size;
12        $this->ly_ = 0.4 / 1000000000000000;
13        $this->offset_ = 10;
14
15        $this->sys_colors_[0] = array(200, 20, 48);
16        $this->sys_colors_[1] = array(200, 20, 48);
17        $this->sys_colors_[2] = array(200, 20, 48);
18        $this->sys_colors_[3] = array(241, 176, 48);
19        $this->sys_colors_[4] = array(200, 200, 48);
20        $this->sys_colors_[5] = array(219, 241, 48);
21        $this->sys_colors_[6] = array(103, 241, 62);
22        $this->sys_colors_[7] = array(83, 241, 114);
23        $this->sys_colors_[8] = array(26, 241, 183);
24        $this->sys_colors_[9] = array(99, 241, 255);
25        $this->sys_colors_[10] = array(99, 241, 255);
26
27        $this->linecolor_ = array(75, 75, 75);
28        $this->captioncolor_ = array(110, 110, 110);
29        $this->bgcolor_ = array(30, 30, 30);
30        $this->normalcolor_ = array(81, 103, 146);
31        $this->hlcolor_ = array(200, 200, 200);
32    }
33
34    function setbgcolor($r, $g, $b)
35    {
36        $this->bgcolor_ = array($r, $g, $b);
37    }
38
39    function setlinecolor($r, $g, $b)
40    {
41        $this->linecolor_ = array($r, $g, $b);
42    }
43
44    function setcaptcolor($r, $g, $b)
45    {
46        $this->captioncolor_ = array($r, $g, $b);
47    }
48
49    function setnormalcolor($r, $g, $b)
50    {
51        $this->normalcolor_ = array($r, $g, $b);
52    }
53
54    function sethlcolor($r, $g, $b)
55    {
56        $this->hlcolor_ = array($r, $g, $b);
57    }
58
59    function paintSecurity($bool)
60    {
61        $this->psec_ = $bool;
62    }
63
64    function setOffset($offset)
65    {
66        $this->offset_ = $offset;
67    }
68
69    function showLines($enable)
70    {
71        $this->showlines_ = $enable;
72    }
73
74    function showSysNames($enable)
75    {
76        $this->showsysnames_ = $enable;
77    }
78
79    function colorSystems($enable)
80    {
81        $this->colorsystems_ = $enable;
82    }
83
84    function setRegionID($regionid)
85    {
86        $this->regionid_ = $regionid;
87    }
88
89    function setSystemID($systemid)
90    {
91        $this->systemid_ = $systemid;
92
93        $sql = 'select reg.reg_id, reg.reg_name, con.con_id, con.con_name, sys.sys_name, sys.sys_sec
94                from kb3_regions reg, kb3_constellations con, kb3_systems sys
95               where reg.reg_id = con.con_reg_id
96                 and con.con_id = sys.sys_con_id
97                 and sys.sys_id = '.$this->systemid_;
98
99        $qry = new DBQuery();
100        $qry->execute($sql);
101        $row = $qry->getRow();
102
103        $this->conid_ = $row['con_id'];
104        $this->regionid_ = $row['reg_id'];
105        $this->conname_ = $row['con_name'];
106        $this->regname_ = $row['reg_name'];
107        $this->sysname_ = $row['sys_name'];
108        $this->syssec_ = $row['sys_sec'];
109    }
110
111    function setTitle($title)
112    {
113        $this->title_ = $title;
114    }
115
116    function secColor($img, $security)
117    {
118        if ($this->psec_)
119        {
120            if ($security > 0.05)
121            {
122                $sec_status = round($security * 10);
123                return imagecolorallocate($img, $this->sys_colors_[$sec_status][0],
124                                          $this->sys_colors_[$sec_status][1],
125                                          $this->sys_colors_[$sec_status][2]);
126            }
127        }
128
129        return imagecolorallocate($img, $this->normalcolor_[0], $this->normalcolor_[1], $this->normalcolor_[2]);
130    }
131
132    function generate()
133    {
134        $sql = 'select sys.sys_x, sys.sys_y, sys.sys_z, sys.sys_sec,
135                   sys.sys_id, sys.sys_name, sys.sys_eve_id, sjp.sjp_to, con.con_id,
136                       con.con_name, reg.reg_id, reg.reg_name,
137                       reg.reg_x, reg.reg_z
138                   from kb3_systems sys, kb3_system_jumps sjp,
139                       kb3_constellations con, kb3_regions reg
140                   where con.con_id = sys.sys_con_id
141                   and reg.reg_id = con.con_reg_id
142                   and sjp.sjp_from = sys.sys_eve_id';
143
144        $regioncache = 'cache/map/'.KB_SITE.'_'.$this->regionid_.'_'.$this->imgwidth_.'.png';
145        $cached = false;
146
147        if ($this->mode_ == "map")
148        {
149            if (file_exists($regioncache))
150            {
151                header("Content-type: image/png");
152                readfile($regioncache);
153                return;
154            }
155            $caption = $this->regname_;
156        }
157
158        if ($this->mode_ == "region")
159        {
160            $sql .= " and reg.reg_id = ".$this->regionid_;
161            $caption = $this->conname_;
162        }
163
164        if ($this->mode_ == "cons")
165        {
166            $sql .= " and con.con_id = ".$this->conid_;
167            $caption = $this->sysname_." (".roundsec($this->syssec_).")";
168        }
169
170        if (!$cached)
171        {
172            $qry = new DBQuery();
173            $qry->execute($sql) or die($qry->getErrorMsg());
174
175            if (!$img) $img = imagecreatetruecolor($this->imgwidth_, $this->imgheight_);
176            $white = imagecolorallocate($img, 255, 255, 255);
177            $red = imagecolorallocate($img, 255, 0, 0);
178            $bgcolor = imagecolorallocate($img, $this->bgcolor_[0], $this->bgcolor_[1], $this->bgcolor_[2]);
179            imagefilledrectangle($img, 0, 0, $this->imgwidth_, $this->imgheight_, $bgcolor);
180
181            $color = $white;
182
183            $fov = 0;
184
185            $i = 0;
186            $minx = 0;
187            $minz = 0;
188            $maxx = 0;
189            $maxz = 0;
190            $mini = 0;
191            $maxi = 0;
192            $pi = 0;
193            $sc = 0;
194            while ($row = $qry->getRow())
195            {
196                $i = $row['sys_eve_id'];
197                if ($i < $mini || $mini == 0)
198                    $mini = $i;
199                if ($i > $maxi || $maxi == 0)
200                    $maxi = $i;
201                $x = $row['sys_x'] * $this->ly_;
202                $z = $row['sys_z'] * $this->ly_;
203
204                if ($x < $minx || $minx == 0)
205                    $minx = $x;
206                if ($x > $maxx || $maxx == 0)
207                    $maxx = $x;
208                if ($z < $minz || $minz == 0)
209                    $minz = $z;
210                if ($z > $maxz || $maxz == 0)
211                    $maxz = $z;
212
213                $sys[$i][0] = $x;
214                $sys[$i][1] = $z;
215                if ($i == $pi || $pi == 0)
216                {
217                    $sys[$i][2][$sc] = $row['sjp_to'];
218                    $sys[$i][3] = $sc++;
219                }
220                else
221                {
222                    $sc = 0;
223                }
224                $sys[$i][4] = $row['sys_id'];
225                $sys[$i][5] = $row['sys_name'];
226                $sys[$i][6] = $row['sys_sec'];
227                $sys[$i][7] = $row['con_id'];
228                $sys[$i][8] = $row['con_name'];
229                $sys[$i][9] = $row['reg_id'];
230                $sys[$i][10] = $row['reg_name'];
231                $pi = $i;
232            }
233            $dx = abs($maxx - $minx);
234            $dz = abs($maxz - $minz);
235            $xscale = 1 / ($dx / ($this->imgwidth_ - ($this->offset_ * 2)));
236            $yscale = 1 / ($dz / ($this->imgheight_ - ($this->offset_ * 2)));
237            if ($_REQUEST['debug'] == 'admovrd')
238            {
239                echo "dx:".$dx." dz:".$dz."<br/> xscale:".$xscale." ".$yscale."<br/>";
240                echo "minx:".$minx." maxx:".$maxx."<br/>";
241                echo "minz:".$minz." maxz:".$maxz."<br/>".$sql."<br/>\n";
242                echo nl2br(print_r($this, 1));
243                echo nl2br(print_r($qry, 1));
244            }
245
246            // draw lines
247            if ($this->showlines_)
248            {
249                $n = $mini;
250                while ($n <= $maxi)
251                {
252                    $px = $this->offset_ + ($sys[$n][0] - $minx) * $xscale;
253                    $py = $this->offset_ + ($sys[$n][1] - $minz) * $yscale;
254
255                    $line_col = imagecolorallocate($img, $this->linecolor_[0], $this->linecolor_[1], $this->linecolor_[2]);
256
257                    for ($m = 0; $m <= $sys[$n][3]; $m++)
258                    {
259                        $sys_to = $sys[$n][2][$m];
260
261                        if ($sys[$sys_to][4] != "")
262                        {
263                            $px_to = $this->offset_ + ($sys[$sys_to][0] - $minx) * $xscale;
264                            $py_to = $this->offset_ + ($sys[$sys_to][1] - $minz) * $yscale;
265
266                            imageline($img, $px, $py, $px_to, $py_to, $line_col);
267                        }
268                    }
269
270                    $n++;
271                }
272            }
273            // draw systems
274            $n = $mini;
275            while ($n <= $maxi)
276            {
277                $px = round($this->offset_ + ($sys[$n][0] - $minx) * $xscale);
278                $py = round($this->offset_ + ($sys[$n][1] - $minz) * $yscale);
279
280                if ($this->mode_ == "map")
281                {
282                    if ($sys[$n][9] == $this->regionid_)
283                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
284                    else
285                        $color = $this->secColor($img, $sys[$n][6]);
286                }
287                if ($this->mode_ == "region")
288                {
289                    if ($sys[$n][7] == $this->conid_)
290                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
291                    else
292                        $color = $this->secColor($img, $sys[$n][6]);
293                }
294                if ($this->mode_ == "cons")
295                {
296                    if ($sys[$n][4] == $this->systemid_)
297                        $color = imagecolorallocate($img, $this->hlcolor_[0], $this->hlcolor_[1], $this->hlcolor_[2]);
298                    else
299                        $color = $this->secColor($img, $sys[$n][6]);
300                }
301
302                if ($this->showsysnames_)
303                {
304                    $tlen = 5 * strlen($sys[$n][5]);
305                    if (($px + $tlen > ($this->imgwidth_ - 20)))
306                        $sx = $px - $tlen;
307                    else
308                        $sx = $px + 5;
309                    if (($py + 5 > ($this->imgheight_ - 20)))
310                        $sy = $py - 5;
311                    else
312                        $sy = $py + 5;
313
314                    imagestring($img, 1, $sx, $sy, $sys[$n][5], $color);
315                    // imagettftext ( $img, 6, 0,
316                    // $sx,
317                    // $sy,
318                    // $color,
319                    // "../fonts/04B_03__.TTF",
320                    // $sys[$n][5] );
321                }
322
323                $ed = $xscale * 0.75;
324                if ($ed > 5)
325                {
326                    $ed = 5;
327                }
328                // bug compat: imagefilledellipse doesnt draw ellipses with 1px size
329                // on some installations
330                if ($ed < 1)
331                {
332                    imagesetpixel($img, $px, $py, $color);
333                }
334                elseif ($ed < 3)
335                {
336                    imagesetpixel($img, $px, $py, $color);
337                    imagesetpixel($img, $px+1, $py, $color);
338                    imagesetpixel($img, $px-1, $py, $color);
339                    imagesetpixel($img, $px, $py-1, $color);
340                    imagesetpixel($img, $px, $py+1, $color);
341                }
342                else
343                {
344                    imagefilledellipse($img, $px, $py, $ed, $ed, $color);
345                }
346
347                $n++;
348            }
349        }
350
351        $captioncolor = imagecolorallocate($img, $this->captioncolor_[0], $this->captioncolor_[1], $this->captioncolor_[2]);
352        if (strlen($this->title_) > 0)
353        {
354            $title = $this->title_." ".$caption;
355        }
356        else
357        {
358            $title = $caption;
359        }
360
361        imagestring($img, 1, 2, 2, $title, $captioncolor);
362        // imagettftext ( $img, 6, 0,
363        // 5,
364        // 10,
365        // $captioncolor,
366        // "../fonts/04B_03__.TTF",
367        // $title );
368        if ($this->mode_ == "map" && !$cached)
369        {
370            imagepng($img, $regioncache);
371        }
372        header("Content-type: image/png");
373        imagepng($img);
374    }
375}
376?>
Note: See TracBrowser for help on using the browser.