root/dev/common/kill_detail.php @ 428

Revision 428, 18.7 KB (checked in by kovell, 13 years ago)

Kill deletion and price updates wrapped in a transaction. eve_central_sync can fall back to fopen from cURL. Upgrade for suitable indexes

Line 
1<?php
2require_once('common/includes/class.kill.php');
3
4$page = new Page('Kill details');
5
6$kll_id = intval($_GET['kll_id']);
7$kll_external_id = intval($_GET['kll_external_id']);
8if (!$kll_id && !$kll_external_id)
9{
10    $html = "No kill id specified.";
11    $page->setContent($html);
12    $page->generate($html);
13    exit;
14}
15
16if($kll_id)
17{
18        $kill = new Kill($kll_id);
19}
20else
21{
22        $kill = new Kill($kll_external_id, true);
23        $kll_id = $kill->getID();
24}
25$kill->setDetailedInvolved();
26
27if (!$kill->exists())
28{
29    $html="That kill doesn't exist.";
30    $page->setContent($html);
31    $page->generate($html);
32    exit;
33}
34
35// If a comment is being posted then we don't exit this block.
36if(isset($_POST['comment']) && config::get('comments'))
37{
38    include('common/comments.php');
39}
40
41require_once('common/includes/class.pilot.php');
42require_once('common/includes/class.corp.php');
43require_once('common/includes/class.alliance.php');
44
45if(config::get('kd_lgreen'))
46{
47        $d_col = '#006000';
48}
49else
50{
51        $d_col = '#004000';
52}
53
54if(config::get('fp_theme') == 'Black')
55{
56        $th_dir = 'panel/black';
57}
58else
59{
60        $th_dir = 'panel';
61}
62
63
64$smarty->assign('panel_style', config::get('fp_style'));
65$smarty->assign('panel_colour', config::get('fp_theme'));
66$smarty->assign('dropped_colour', $d_col);
67$smarty->assign('themedir', $th_dir);   
68
69if (config::get('item_values'))
70{
71    $smarty->assign('item_values', 'true');
72    if ($page->isAdmin())
73    {
74        $smarty->assign('admin', 'true');
75        if (isset($_POST['submit']) && $_POST['submit'] == 'UpdateValue')
76        {
77            // Send new value for item to the database
78            $IID = $_POST['IID'];
79            $Val = $_POST[$IID];
80            $qry = new DBQuery();
81                        $qry->autocommit(false);
82            $qry->execute("INSERT INTO kb3_item_price (typeID, price) VALUES ('".$IID."', '".$Val."') ON DUPLICATE KEY UPDATE price = '".$Val."'");
83                        foreach($kill->destroyeditems_ as $i => $ditem)
84                        {
85                                $item = $ditem->getItem();
86                                if($item->getID() == $IID) $kill->destroyeditems_[$i]->value = $Val;
87                        }
88                        foreach($kill->droppeditems_ as $i=> $ditem)
89                        {
90                                $item = $ditem->getItem();
91                                if($item->getID() == $IID) $kill->droppeditems_[$i]->value = $Val;
92                        }
93                        $qry->execute("UPDATE kb3_kills SET kll_isk_loss = ".$kill->calculateISKLoss()." WHERE kll_id = ".$kill->getID());
94                        $qry->autocommit(true);
95
96        }
97    }
98}
99
100if ($page->isAdmin())
101{
102    if (isset($_GET['view']) && $_GET['view']== 'FixSlot')
103    {
104            $smarty->assign('fixSlot', 'true');
105    }
106
107    $smarty->assign('admin', 'true');
108    if (isset($_POST['submit']) && $_POST['submit'] == 'UpdateSlot')
109    {
110        $IID = $_POST['IID'];
111        $KID = $_POST['KID'];
112        $Val = $_POST[$IID];
113        $table = $_POST['TYPE'];
114        $old = $_POST['OLDSLOT'];
115        $qry = new DBQuery();
116        $qry->execute("UPDATE kb3_items_".$table." SET itd_itl_id ='".$Val."' WHERE itd_itm_id=".$IID." AND itd_kll_id = ".$KID." AND itd_itl_id = ".$old);
117    }
118}
119
120// victim $smarty->assign('',);
121$smarty->assign('KillId', $kill->getID());
122$smarty->assign('VictimPortrait', $kill->getVictimPortrait(64));
123$smarty->assign('VictimURL', "?a=pilot_detail&amp;plt_id=".$kill->getVictimID());
124$smarty->assign('VictimName', $kill->getVictimName());
125$smarty->assign('VictimCorpURL', "?a=corp_detail&amp;crp_id=".$kill->getVictimCorpID());
126$smarty->assign('VictimCorpName', $kill->getVictimCorpName());
127$smarty->assign('VictimAllianceURL', "?a=alliance_detail&amp;all_id=".$kill->getVictimAllianceID());
128$smarty->assign('VictimAllianceName', $kill->getVictimAllianceName());
129$smarty->assign('VictimDamageTaken', $kill->VictimDamageTaken);
130
131// involved
132$i = 1;
133$involved = array();
134foreach ($kill->involvedparties_ as $inv)
135{
136    $pilot = $inv->getPilot();
137    $corp = $inv->getCorp();
138    $alliance = $inv->getAlliance();
139    $ship = $inv->getShip();
140    $weapon = $inv->getWeapon();
141
142    $involved[$i]['shipImage'] = $ship->getImage(64);
143    $involved[$i]['PilotURL'] = "?a=pilot_detail&amp;plt_id=".$pilot->getID();
144    $involved[$i]['PilotName'] = $pilot->getName();
145    $involved[$i]['CorpURL'] = "?a=corp_detail&amp;crp_id=".$corp->getID();
146    $involved[$i]['CorpName'] = $corp->getName();
147    $involved[$i]['AlliURL'] = "?a=alliance_detail&amp;all_id=".$alliance->getID();
148    $involved[$i]['AlliName'] = $alliance->getName();
149    $involved[$i]['ShipName'] = $ship->getName();
150    $involved[$i]['ShipID'] = $ship->externalid_;
151    $involved[$i]['damageDone'] = $inv->dmgdone_;
152
153    if ($pilot->getID() == $kill->getFBPilotID())
154    {
155        $involved[$i]['FB'] = "true";
156    }
157    else
158    {
159        $involved[$i]['FB'] = "false";
160    }
161
162    if ($corp->isNPCCorp())
163    {
164        $involved[$i]['portrait'] = $corp->getPortraitURL(64);
165    }
166    else
167    {
168        $involved[$i]['portrait'] = $pilot->getPortraitURL(64);
169    }
170
171    if ($weapon->getName() != "Unknown" && $weapon->getName() != $ship->getName())
172    {
173        $involved[$i]['weaponName'] = $weapon->getName();
174        $involved[$i]['weaponID'] = $weapon->row_['itm_externalid'];
175    }
176    else
177        $involved[$i]['weaponName'] = "Unknown";
178    ++$i;
179}
180$smarty->assign_by_ref('involved', $involved);
181
182if (config::get('comments'))
183{
184    include('common/comments.php');
185    $smarty->assign('comments', $comment);
186}
187// ship, ship details
188$ship = $kill->getVictimShip();
189$shipclass = $ship->getClass();
190$system = $kill->getSystem();
191
192$smarty->assign('VictimShip', $kill->getVictimShip());
193$smarty->assign('ShipClass', $ship->getClass());
194$smarty->assign('ShipImage', $ship->getImage(64));
195$smarty->assign('ShipName', $ship->getName());
196$smarty->assign('ShipID', $ship->externalid_);
197$smarty->assign('ClassName', $shipclass->getName());
198
199include_once('common/includes/class.dogma.php');
200
201$ssc = new dogma($ship->externalid_);
202
203$smarty->assign_by_ref('ssc', $ssc);
204
205if ($kill->isClassified())
206{
207        //Admin is able to see classified Systems
208        if ($page->isAdmin())
209        {
210            $smarty->assign('System', $system->getName().' (Classified)');
211        $smarty->assign('SystemURL', "?a=system_detail&amp;sys_id=".$system->getID());
212            $smarty->assign('SystemSecurity', $system->getSecurity(true));
213        }
214        else
215        {
216                $smarty->assign('System', 'Classified');
217        $smarty->assign('SystemURL', "");
218            $smarty->assign('SystemSecurity', '0.0');
219        }
220}
221else
222{
223    $smarty->assign('System', $system->getName());
224    $smarty->assign('SystemURL', "?a=system_detail&amp;sys_id=".$system->getID());
225    $smarty->assign('SystemSecurity', $system->getSecurity(true));
226}
227$smarty->assign('TimeStamp', $kill->getTimeStamp());
228$smarty->assign('VictimShipImg', $ship->getImage(64));
229
230// preparing slot layout
231
232    $slot_array = array();
233    $slot_array[1] = array('img' => 'icon08_11.png', 'text' => 'Fitted - High slot', 'items' => array());
234    $slot_array[2] = array('img' => 'icon08_10.png', 'text' => 'Fitted - Mid slot', 'items' => array());
235    $slot_array[3] = array('img' => 'icon08_09.png', 'text' => 'Fitted - Low slot', 'items' => array());
236    $slot_array[5] = array('img' => 'icon68_01.png', 'text' => 'Fitted - Rig slot', 'items' => array());
237    $slot_array[6] = array('img' => 'icon02_10.png', 'text' => 'Drone bay', 'items' => array());
238    $slot_array[4] = array('img' => 'icon03_14.png', 'text' => 'Cargo Bay', 'items' => array());
239
240// ship fitting
241if (count($kill->destroyeditems_) > 0)
242{
243    $dest_array = array();
244    foreach($kill->destroyeditems_ as $destroyed)
245    {
246        $item = $destroyed->getItem();
247                $i_qty = $destroyed->getQuantity();
248        if (config::get('item_values'))
249        {
250            $value = $destroyed->getValue();
251            $TotalValue += $value*$i_qty;
252            $formatted = $destroyed->getFormattedValue();
253        }
254        $i_name = $item->getName();
255                $i_location = $destroyed->getLocationID();
256                if($i_location == 7) $i_location = 4;
257                $i_id = $item->getID();
258                $i_usedgroup = $item->get_used_launcher_group();
259                $dest_array[$i_location][] = array('Icon' => $item->getIcon(32), 'Name' => $i_name, 'Quantity' => $i_qty, 'Value' => $formatted, 'single_unit' => $value, 'itemID' => $i_id,'slotID' => $i_location, 'groupID' => $item->get_group_id());
260            if(config::get('fp_show'))
261            { // BEGIN ADDING DESTROYED ITEMS TO FITTING LAYOUT         
262                        if(($i_location != 4) && ($i_location != 5) && ($i_location != 6)) // NOT IN CARGO, DRONE BAY OR RIG SLOT
263                        {
264                                if(($i_usedgroup != 0)) // AMMO
265                                {
266                                        if ($i_location == 1)
267                                        {
268                                                $i_ammo=$item->get_ammo_size($i_name); // GET SIZE IF IN HI SLOT
269
270                                        }
271                                        else
272                                        {
273                                                $i_ammo = 0; // NULL FOR OTHER SLOTS
274                                        }
275                                        $ammo_array[$i_location][]=array('Name'=>$i_name, 'Icon' => $item->getIcon(24), 'itemID' => $i_id, 'usedgroupID' => $i_usedgroup, 'size' => $i_ammo);
276                                }
277                                else // MODULES
278                                {
279                                        for ($count = 0; $count < $i_qty; $count++)
280                                        {
281                                                if ($i_location == 1)
282                                                {
283                                                        $i_charge=$item->get_used_charge_size(); // GET TURRET SIZE
284                                                }
285                                                else
286                                                {
287                                                        $i_charge = 0; // NULL FOR OTHER MODULES
288                                                }
289                                                $fitting_array[$i_location][]=array('Name'=>$i_name, 'Icon' => $item->getIcon(48), 'itemID' => $i_id, 'groupID' => $item->get_group_id(), 'chargeSize' => $i_charge);
290                                        }
291                                }
292                        }
293                        else if(($destroyed->getLocationID() == 5)) // RIG SLOT
294                        {
295                                for ($count = 0; $count < $i_qty; $count++)
296                                {
297                                        $fitting_array[$i_location][]=array('Name'=>$i_name, 'Icon' => $item->getIcon(32), 'itemID' => $i_id);
298                                }
299                        }
300            } // END ADDING DESTROYED ITEMS TO FITTING LAYOUT
301    }
302    for($i=1;$i<=6;$i++)
303    {
304        if(!is_array($dest_array[$i])) continue;
305        foreach($dest_array[$i] as $row)
306        {
307            $group[] = $row["groupID"];
308            $named[] = $row["Name"];
309        }
310        array_multisort($group, SORT_ASC, $named, SORT_ASC, $dest_array[$i]);
311        unset($named);unset($group);
312    }
313}
314
315if (count($kill->droppeditems_) > 0)
316{
317    $drop_array = array();
318    foreach($kill->droppeditems_ as $dropped)
319    {
320        $item = $dropped->getItem();
321        $i_qty = $dropped->getQuantity();
322        if (config::get('item_values'))
323        {
324            $value = $dropped->getValue();
325            $dropvalue += $value*$i_qty;
326            $formatted = $dropped->getFormattedValue();
327        }
328        $i_name = $item->getName();
329        $i_location = $dropped->getLocationID();
330        if($i_location == 7) $i_location = 4;
331        $i_id = $item->getID();
332        $i_usedgroup = $item->get_used_launcher_group();
333        $drop_array[$i_location][] = array('Icon' => $item->getIcon(32), 'Name' => $i_name, 'Quantity' => $i_qty, 'Value' => $formatted, 'single_unit' => $value, 'itemID' => $i_id,'slotID' => $i_location, 'groupID' => $item->get_group_id());
334            if(config::get('fp_show'))
335            { // BEGIN ADDING DROPPED ITEMS TO FITTING LAYOUT
336                if(($i_location != 4) && ($i_location != 6))
337                {
338                        if(($i_usedgroup != 0)) // AMMO
339                        {
340                                if ($i_location == 1)
341                                {
342                                        $i_ammo=$item->get_ammo_size($i_name); // GET SIZE IF IN HI SLOT
343
344                                }
345                                else
346                                {
347                                        $i_ammo = 0; // NULL FOR OTHER SLOTS
348                                }
349                                $ammo_array[$i_location][]=array('Name'=>$i_name, 'Icon' => $item->getIcon(24), 'itemID' => $i_id, 'usedgroupID' => $i_usedgroup, 'size' => $i_ammo);
350                        } 
351                        else // MODULES
352                        {
353                                for ($count = 0; $count < $i_qty; $count++)
354                                {
355                                        if ($i_location == 1)
356                                        {
357                                                $i_charge=$item->get_used_charge_size(); // GET TURRET SIZE
358                                        }
359                                        else
360                                        {
361                                                $i_charge = 0; // NULL FOR OTHER MODULES
362                                        }
363                                        $fitting_array[$i_location][]=array('Name'=>$i_name, 'Icon' => $item->getIcon(48), 'itemID' => $i_id, 'groupID' => $item->get_group_id(), 'chargeSize' => $i_charge);
364                                }
365                        }
366                }
367            } // END ADDING DROPPED ITEMS TO FITTING LAYOUT
368               
369    }
370    for($i=1;$i<=6;$i++)
371    {
372        if(!is_array($drop_array[$i])) continue;
373        foreach($drop_array[$i] as $row)
374        {
375            $group[] = $row["groupID"];
376            $named[] = $row["Name"];
377        }
378        array_multisort($group, SORT_ASC, $named, SORT_ASC, $drop_array[$i]);
379        unset($named);unset($group);
380    }
381}
382if(config::get('fp_show'))
383{ // BEGIN AMMO FITTING & ITEM SORTING
384if(is_array($fitting_array[1]))
385{
386        foreach ($fitting_array[1] as $array_rowh)
387        {
388                $sort_by_nameh["groupID"][] = $array_rowh["groupID"]; // SORTING BY GROUP ID
389        }
390        array_multisort($sort_by_nameh["groupID"],SORT_ASC,$fitting_array[1]);
391}
392
393if(is_array($fitting_array[2]))
394{
395        foreach ($fitting_array[2] as $array_rowm) 
396        {
397                 $sort_by_namem["groupID"][] = $array_rowm["groupID"]; // SORTING BY GROUP ID
398        }
399        array_multisort($sort_by_namem["groupID"],SORT_ASC,$fitting_array[2]);
400}
401
402if(is_array($fitting_array[3]))
403{
404        foreach ($fitting_array[3] as $array_rowl) 
405        {
406                 $sort_by_namel["groupID"][] = $array_rowl["groupID"]; // SORTING BY GROUP ID
407        }
408        array_multisort($sort_by_namel["groupID"],SORT_ASC,$fitting_array[3]);
409}
410
411if(is_array($fitting_array[5]))
412{
413        foreach ($fitting_array[5] as $array_rowr) 
414        {
415                 $sort_by_namer["Name"][] = $array_rowr["Name"]; // SORTING BY NAME
416        }
417        array_multisort($sort_by_namer["Name"],SORT_ASC,$fitting_array[5]);
418}
419
420// SORTING THINGY END
421
422$length = count($ammo_array[1]);
423$temp = array();
424if(is_array($fitting_array[1])) // AMMO FOR HIGH SLOTS
425{
426        $hiammo = array();
427        foreach ($fitting_array[1] as $highfit)
428        {
429                $group = $highfit["groupID"];
430                $size = $highfit["chargeSize"];
431                if($group == 483 // Modulated Deep Core Miner II, Modulated Strip Miner II and Modulated Deep Core Strip Miner II
432                        || $group == 53 // Laser Turrets
433                        || $group == 55 // Projectile Turrets
434                        || $group == 74 // Hybrid Turrets
435                        || ($group >= 506 && $group <= 511) // Some Missile Lauchers
436                        || $group == 481 // Probe Launchers
437                        || $group == 899 // Warp Disruption Field Generator I
438                        || $group == 771 // Heavy Assault Missile Launchers
439                        || $group == 589 // Interdiction Sphere Lauchers
440                        || $group == 524 // Citadel Torpedo Launchers
441                        )
442                {
443                        $found = 0;
444                        if ($group == 511) { $group = 509; } // Assault Missile Lauchers uses same ammo as Standard Missile Lauchers
445                        if(is_array($ammo_array[1]))
446                        {
447                                $i = 0;
448                                while (!($found) && $i<$length)
449                                {
450                                        $temp = array_shift($ammo_array[1]);
451                                        if (($temp["usedgroupID"] == $group) && ($temp["size"] == $size))
452                                        {
453                                                $hiammo[]=array('show'=>$smarty->fetch(get_tpl('ammo')), 'type'=>$temp["Icon"]);
454                                                $found = 1;     
455                                        }
456                                        array_push($ammo_array[1],$temp);
457                                        $i++;                                   
458                                }                               
459                        }
460                        if (!($found)) 
461                        {
462                                $hiammo[]=array('show'=>$smarty->fetch(get_tpl('ammo')), 'type'=>$smarty->fetch(get_tpl('noicon')));
463                        }
464                } else {
465                        $hiammo[]=array('show'=>$smarty->fetch(get_tpl('blank')), 'type'=>$smarty->fetch(get_tpl('blank')));
466                }
467        }
468}
469
470$length = count($ammo_array[2]);
471if(is_array($fitting_array[2])) // AMMO FOR MID SLOTS
472{
473        $midammo = array();
474        foreach ($fitting_array[2] as $midfit)
475        {
476                $group = $midfit["groupID"];
477                if($group == 76 // Capacitor Boosters
478                        || $group == 208 // Remote Sensor Dampeners
479                        || $group == 212 // Sensor Boosters
480                        || $group == 291 // Tracking Disruptors
481                        || $group == 213 // Tracking Computers
482                        || $group == 209 // Tracking Links
483                        || $group == 290 // Remote Sensor Boosters
484                        )
485                {
486                        $found = 0;
487                        if(is_array($ammo_array[2]))
488                        {                               
489                                $i = 0;
490                                while (!($found) && $i<$length)
491                                {
492                                        $temp = array_shift($ammo_array[2]);
493                                        if ($temp["usedgroupID"] == $group)
494                                        {
495                                                $midammo[]=array('show'=>$smarty->fetch(get_tpl('ammo')), 'type'=>$temp["Icon"]);
496                                                $found = 1;     
497                                        }
498                                        array_push($ammo_array[2],$temp);
499                                        $i++;                                   
500                                }                               
501                        }
502                        if (!($found)) 
503                        {
504                                $midammo[]=array('show'=>$smarty->fetch(get_tpl('ammo')), 'type'=>$smarty->fetch(get_tpl('noicon')));
505                        }
506                } else {
507                        $midammo[]=array('show'=>$smarty->fetch(get_tpl('blank')), 'type'=>$smarty->fetch(get_tpl('blank')));
508                }
509        }
510}
511} // END FITTING PANEL AMMO THINGY
512
513if ($TotalValue >= 0)
514{
515    $Formatted = number_format($TotalValue, 2);
516}
517
518// Get Ship Value
519$ShipValue = $ship->getPrice();
520if (config::get('kd_droptototal'))
521{
522    $TotalValue += $dropvalue;
523}
524$TotalLoss = number_format($TotalValue + $ShipValue, 2);
525$ShipValue = number_format($ShipValue, 2);
526$dropvalue = number_format($dropvalue, 2);
527
528$smarty->assign_by_ref('destroyed', $dest_array);
529$smarty->assign_by_ref('dropped', $drop_array);
530$smarty->assign_by_ref('slots', $slot_array);
531$smarty->assign_by_ref('fitting_high', $fitting_array[1]);
532$smarty->assign_by_ref('fitting_med', $fitting_array[2]);
533$smarty->assign_by_ref('fitting_low', $fitting_array[3]);
534$smarty->assign_by_ref('fitting_rig', $fitting_array[5]);
535$smarty->assign_by_ref('fitting_ammo_high', $hiammo);
536$smarty->assign_by_ref('fitting_ammo_mid', $midammo);
537$smarty->assign('ItemValue', $Formatted);
538$smarty->assign('DropValue', $dropvalue);
539$smarty->assign('ShipValue', $ShipValue);
540$smarty->assign('TotalLoss', $TotalLoss);
541
542$hicount = count($fitting_array[1]);
543$medcount = count($fitting_array[2]);
544$lowcount = count($fitting_array[3]);
545
546$smarty->assign('hic', $hicount);
547$smarty->assign('medc', $medcount);
548$smarty->assign('lowc', $lowcount);
549
550$menubox = new Box("Menu");
551$menubox->setIcon("menu-item.gif");
552$menubox->addOption("caption", "View");
553$menubox->addOption("link", "Killmail", "javascript:sndReq('index.php?a=kill_mail&amp;kll_id=".$kill->getID()."');ReverseContentDisplay('popup')");
554if (config::get('kd_EFT')) // CHECKS IF EFT EXPORT IS ENABLED
555{
556        $menubox->addOption("link", "EFT Fitting", "javascript:sndReq('index.php?a=eft_fitting&amp;kll_id=".$kill->getID()."');ReverseContentDisplay('popup')");
557}
558if ($kill->relatedKillCount() > 1 || $kill->relatedLossCount() > 1 ||
559        ((ALLIANCE_ID || CORP_ID || PILOT_ID) && $kill->relatedKillCount() + $kill->relatedLossCount() > 1))
560{
561    $menubox->addOption("link", "Related kills (".$kill->relatedKillCount()."/".$kill->relatedLossCount().")", "?a=kill_related&amp;kll_id=".$kill->getID());
562}
563if ($page->isAdmin())
564{
565    $menubox->addOption("caption", "Admin");
566    $menubox->addOption("link", "Delete", "javascript:openWindow('?a=admin_kill_delete&amp;kll_id=".$kill->getID()."', null, 420, 300, '' );");
567    if (isset($_GET['view']) && $_GET['view'] == 'FixSlot')
568    {
569        $menubox->addOption("link", "Adjust Values", "?a=kill_detail&amp;kll_id=".$kill->getID()."");
570    }
571    else
572    {
573        $menubox->addOption("link", "Fix Slots", "?a=kill_detail&amp;kll_id=".$kill->getID()."&amp;view=FixSlot");
574    }
575}
576$page->addContext($menubox->generate());
577
578if (config::get('kill_points'))
579{
580    $scorebox = new Box("Points");
581    $scorebox->addOption("points", $kill->getKillPoints());
582    $page->addContext($scorebox->generate());
583}
584
585//Admin is able to see classsiefied systems
586if ((!$kill->isClassified()) || ($page->isAdmin()))
587{
588    $mapbox = new Box("Map");
589    $mapbox->addOption("img", "?a=mapview&amp;sys_id=".$system->getID()."&amp;mode=map&amp;size=145");
590    $mapbox->addOption("img", "?a=mapview&amp;sys_id=".$system->getID()."&amp;mode=region&amp;size=145");
591    $mapbox->addOption("img", "?a=mapview&amp;sys_id=".$system->getID()."&amp;mode=cons&amp;size=145");
592    $page->addContext($mapbox->generate());
593}
594
595
596$html = $smarty->fetch(get_tpl('kill_detail'));
597$page->setContent($html);
598$page->generate();
599?>
Note: See TracBrowser for help on using the browser.