root/dev/mods/forum_post/class.killsummarytable.php @ 204

Revision 204, 16.2 KB (checked in by knifee, 13 years ago)

forum summery mod. adds admin option to view a e-o forum ready summery to campaign/contract page and related kills page.

Admin options allow colours/styles to be added to the summery, isk totals per class to be turned on/off and the ship class to placed at the start or end of each line.

Line 
1<?php
2require_once("db.php");
3require_once("common/includes/class.page.php");
4require_once("common/includes/class.ship.php");
5
6class KillSummaryTable
7{
8    function KillSummaryTable($klist = null, $llist = null)
9    {
10        $this->klist_ = $klist;
11        $this->llist_ = $llist;
12
13        $this->verbose_ = false;
14        $this->filter_ = true;
15        $this->inv_crp_ = array();
16        $this->inv_all_ = array();
17    }
18
19    function setBreak($break)
20    {
21        $this->break_ = $break;
22    }
23
24    function setVerbose($verbose)
25    {
26        $this->verbose_ = $verbose;
27    }
28
29    function setFilter($filter)
30    {
31        $this->filter_ = $filter;
32    }
33
34    function getTotalKills()
35    {
36        return $this->tkcount_;
37    }
38
39    function getTotalLosses()
40    {
41        return $this->tlcount_;
42    }
43
44    function getTotalKillPoints()
45    {
46        return $this->tkpoints_;
47    }
48
49    function getTotalLossPoints()
50    {
51        return $this->tlpoints_;
52    }
53
54    function getTotalKillISK()
55    {
56        return $this->tkisk_;
57    }
58
59    function getTotalLossISK()
60    {
61        return $this->tlisk_;
62    }
63
64    function setView($string)
65    {
66        $this->view_ = $string;
67    }
68
69    function addInvolvedCorp($corp)
70    {
71        $this->inv_crp_[] = $corp->getID();
72        if ($this->inv_plt_ || $this->inv_all_)
73        {
74            $this->mixedinvolved_ = true;
75        }
76    }
77
78    function addInvolvedAlliance($alliance)
79    {
80        $this->inv_all_[] = $alliance->getID();
81        if ($this->inv_plt_ || $this->inv_crp_)
82        {
83            $this->mixedinvolved_ = true;
84        }
85    }
86
87    // do it faster, baby!
88    function getkills()
89    {
90        global $config;
91        if ($this->mixedinvolved_)
92        {
93            echo 'mode not supported<br>';
94            exit;
95        }
96
97        $this->entry_ = array();
98        // as there is no way to do this elegant in sql
99        // i'll keep it in php
100        $sql = "select scl_id, scl_class from kb3_ship_classes
101               where scl_class not in ('Drone','Unknown') order by scl_class";
102
103        $qry = new DBQuery();
104        $qry->execute($sql);
105        while ($row = $qry->getRow())
106        {
107            $this->entry_[$row['scl_class']] = array('id' => $row['scl_id'],
108                                                     'kills' => 0, 'kills_isk' => 0,
109                                                     'losses' => 0, 'losses_isk' => 0);
110        }
111
112        $sql = 'SELECT count(*) AS knb, scl_id, scl_class,';
113        if ($config->getConfig('ship_values'))
114        {
115            $sql .= ' sum(ifnull(ksv.shp_value,scl.scl_value)) AS kisk FROM kb3_kills kll
116                    INNER JOIN kb3_ships shp ON ( shp.shp_id = kll.kll_ship_id )
117                    left join kb3_ships_values ksv on (shp.shp_id = ksv.shp_id)';
118        }
119        else
120        {
121            $sql .= ' sum(scl.scl_value) AS kisk FROM kb3_kills kll
122                    INNER JOIN kb3_ships shp ON ( shp.shp_id = kll.kll_ship_id )';
123        }
124        $sql .= ' INNER JOIN kb3_ship_classes scl ON ( scl.scl_id = shp.shp_class )';
125
126        if ($this->inv_crp_)
127        {
128            $sql .= ' inner join kb3_inv_crp inc on ( inc.inc_crp_id in ( '.join(',', $this->inv_crp_).' ) and kll.kll_id = inc.inc_kll_id ) ';
129        }
130        elseif ($this->inv_all_)
131        {
132            $sql .= ' inner join kb3_inv_all ina on ( ina.ina_all_id in ( '.join(',', $this->inv_all_).' ) and kll.kll_id = ina.ina_kll_id ) ';
133        }
134        $sql .= 'GROUP BY scl_class order by scl_class';
135
136        $qry = new DBQuery();
137        $qry->execute($sql);
138        while ($row = $qry->getRow())
139        {
140            $this->entry_[$row['scl_class']]['kills'] = $row['knb'];
141            $this->entry_[$row['scl_class']]['kills_isk'] = $row['kisk'];
142            $this->tkcount_ += $row['knb'];
143            $this->tkisk_ += $row['kisk'];
144        }
145
146        $sql = 'SELECT count(*) AS lnb, scl_id, scl_class,';
147        if ($config->getConfig('ship_values'))
148        {
149            $sql .= ' sum(ifnull(ksv.shp_value,scl.scl_value)) AS lisk FROM kb3_kills kll
150                    INNER JOIN kb3_ships shp ON ( shp.shp_id = kll.kll_ship_id )
151                    left join kb3_ships_values ksv on (shp.shp_id = ksv.shp_id)';
152        }
153        else
154        {
155            $sql .= ' sum(scl.scl_value) AS lisk FROM kb3_kills kll
156                    INNER JOIN kb3_ships shp ON ( shp.shp_id = kll.kll_ship_id )';
157        }
158        $sql .= ' INNER JOIN kb3_ship_classes scl ON ( scl.scl_id = shp.shp_class )';
159
160        if ($this->inv_crp_)
161        {
162            $sql .= ' where kll.kll_crp_id in ( '.join(',', $this->inv_crp_).' ) ';
163        }
164        elseif ($this->inv_all_)
165        {
166            $sql .= ' where kll.kll_all_id in ( '.join(',', $this->inv_all_).' ) ';
167        }
168        $sql .= 'GROUP BY scl_class order by scl_class';
169
170        $qry = new DBQuery();
171        $qry->execute($sql);
172        while ($row = $qry->getRow())
173        {
174            $this->entry_[$row['scl_class']]['losses'] = $row['lnb'];
175            $this->entry_[$row['scl_class']]['losses_isk'] =  $row['lisk'];
176
177            $this->tlcount_ += $row['lnb'];
178            $this->tlisk_ += $row['lisk'];
179        }
180    }
181
182    function generate()
183    {
184        if ($this->klist_)
185        {
186            $entry = array();
187            // build array
188            $sql = "select scl_id, scl_class
189                    from kb3_ship_classes
190                   where scl_class not in ( 'Drone', 'Unknown' )
191                  order by scl_class";
192
193            $qry = new DBQuery();
194            $qry->execute($sql) or die($qry->getErrorMsg());
195            while ($row = $qry->getRow())
196            {
197                if (!$row['scl_id'])
198                    continue;
199
200                $shipclass = new ShipClass($row['scl_id']);
201                $shipclass->setName($row['scl_class']);
202
203                $entry[$shipclass->getName()]['id'] = $row['scl_id'];
204                $entry[$shipclass->getName()]['kills'] = 0;
205                $entry[$shipclass->getName()]['kills_isk'] = 0;
206                $entry[$shipclass->getName()]['losses'] = 0;
207                $entry[$shipclass->getName()]['losses_isk'] = 0;
208            }
209            // kills
210            while ($kill = $this->klist_->getKill())
211            {
212                $classname = $kill->getVictimShipClassName();
213                $entry[$classname]['kills']++;
214                $entry[$classname]['kills_isk'] += $kill->getVictimShipValue();
215                $this->tkcount_++;
216                $this->tkisk_ += $kill->getVictimShipValue();
217            }
218            // losses
219            while ($kill = $this->llist_->getKill())
220            {
221                $classname = $kill->getVictimShipClassName();
222                $entry[$classname]['losses']++;
223                $entry[$classname]['losses_isk'] += $kill->getVictimShipValue();
224                $this->tlcount_++;
225                $this->tlisk_ += $kill->getVictimShipValue();
226            }
227        }
228        else
229        {
230            $this->getkills();
231            $entry = &$this->entry_;
232        }
233
234        $odd = false;
235        $prevdate = "";
236        $html .= "<table class=kb-subtable width=\"100%\" border=\"0\" cellspacing=0>";
237        if ($this->break_)
238            $html .= "<tr><td valign=top><table class=kb-table cellspacing=\"1\" width=\"100%\">";
239        $counter = 1;
240
241        if ($this->verbose_)
242        {
243            $header = "<tr class=kb-table-header><td class=kb-table-cell width=110>Ship class</td><td class=kb-table-cell width=60 align=center>Kills</td><td class=kb-table-cell width=60 align=center>ISK (M)</td><td class=kb-table-cell width=60 align=center>Losses</td><td class=kb-table-cell width=60 align=center>ISK (M)</td></tr>";
244        }
245        else
246        {
247            $header = "<tr class=kb-table-header><td class=kb-table-cell width=110>Ship class</td><td class=kb-table-cell width=30 align=center>K</td><td class=kb-table-cell width=30 align=center>L</td></tr>";
248        }
249        $html .= $header;
250
251        foreach ($entry as $k => $v)
252        {
253            if (!$v['id'] || $v['id'] == 3)
254                continue;
255            if ($this->break_ && $counter > $this->break_)
256            {
257                $html .= "</table></td>";
258                $html .= "<td valign=top><table class=kb-table cellspacing=\"1\">";
259                $html .= $header;
260                $counter = 1;
261            }
262
263            if (!$odd)
264            {
265                $odd = true;
266                $class = 'kb-table-row-odd';
267            }
268            else
269            {
270                $odd = false;
271                $class = 'kb-table-row-even';
272            }
273
274            if ($_GET['scl_id'] != "" && $v['id'] == $_GET['scl_id'])
275                $highlight = "-hl";
276            else
277                $highlight = "";
278
279            if ($v['kills'] == 0)
280                $kclass = "kl-kill-null";
281            else
282                $kclass = "kl-kill";
283
284            if ($v['losses'] == 0)
285                $lclass = "kl-loss-null";
286            else
287                $lclass = "kl-loss";
288
289            if ($this->verbose_)
290            {
291                $kclass .= "-bg";
292                $lclass .= "-bg";
293            }
294
295            $html .= "<tr class=".$class.">";
296
297            $qrystring = preg_replace("/&scl_id=([0-9]?[0-9])/", "", $_SERVER['QUERY_STRING']);
298            $qrystring = preg_replace("/&page=([0-9]?[0-9])/", "", $qrystring);
299            if ($this->view_)
300            {
301                $qrystring .= '&view='.$this->view_;
302            }
303            $html .= "<td class=kb-table-cell><b>";
304
305            if ($this->filter_) $html .= "<a class=kb-shipclass".$highlight." href=\"?".$qrystring."&scl_id=".$v['id']."\">";
306
307            $html .= $k;
308
309            if ($this->filter_) $html .= "</a>";
310
311            $html .= "</b></td>";
312
313            $html .= "<td class=".$kclass." align=center>".$v['kills']."</td>";
314            if ($this->verbose_)
315                $html .= "<td class=".$kclass." align=center>".round($v['kills_isk']/1000000, 2)."</td>";
316            $html .= "<td class=".$lclass." align=center>".$v['losses']."</td>";
317            if ($this->verbose_)
318                $html .= "<td class=".$lclass." align=center>".round($v['losses_isk']/1000000, 2)."</td>";
319
320            $html .= "</tr>";
321
322            $counter++;
323            $this->tkcount_ += $kcount;
324            $this->tlcount_ += $lcount;
325            $this->tkisk_ += $kisk;
326            $this->tlisk_ += $lisk;
327            $this->tkpoints_ += $kpoints;
328            $this->tlpoints_ += $lpoints;
329        }
330        if ($this->break_)
331            $html .= "</table></td>";
332
333        $html .= "</tr></table>";
334
335        if (config::get('summarytable_summary'))
336        {
337            $html .= '<table width=100% border=0 cellspacing=2>'
338                     .'<tr align=center><td width=51%><span align=right class="killcount">'
339                     .$this->tkcount_.' Ships killed ('.round($this->tkisk_/1000000, 2).'M ISK)</span></td><td width=49%><span class="losscount">'
340                     .$this->tlcount_.' Ships lost ('.round($this->tlisk_/1000000, 2).'M ISK)</span></td></tr></table>';
341        }
342        if ($_GET['scl_id'] != "")
343        {
344            $html .= "<table align=center><tr><td align=center valign=top class=weeknav>";
345            $qrystring = preg_replace("/&scl_id=([0-9]?[0-9])/", "", $_SERVER['QUERY_STRING']);
346            $html .= "[<a href=\"?".$qrystring."\">clear filter</a>]</td></tr></table>";
347        }
348
349        return $html;
350    }
351       
352            function forum()
353    {
354       
355        if ($this->klist_)
356        {
357            $entry = array();
358            // build array
359            $sql = "select scl_id, scl_class
360                    from kb3_ship_classes
361                   where scl_class not in ( 'Drone', 'Unknown' )
362                  order by scl_class";
363
364            $qry = new DBQuery();
365            $qry->execute($sql) or die($qry->getErrorMsg());
366            while ($row = $qry->getRow())
367            {
368                if (!$row['scl_id'])
369                    continue;
370
371                $shipclass = new ShipClass($row['scl_id']);
372                $shipclass->setName($row['scl_class']);
373
374                $entry[$shipclass->getName()]['id'] = $row['scl_id'];
375                $entry[$shipclass->getName()]['kills'] = 0;
376                $entry[$shipclass->getName()]['kills_isk'] = 0;
377                $entry[$shipclass->getName()]['losses'] = 0;
378                $entry[$shipclass->getName()]['losses_isk'] = 0;
379            }
380            // kills
381            while ($kill = $this->klist_->getKill())
382            {
383                $classname = $kill->getVictimShipClassName();
384                $entry[$classname]['kills']++;
385                $entry[$classname]['kills_isk'] += $kill->getVictimShipValue();
386                $this->tkcount_++;
387                $this->tkisk_ += $kill->getVictimShipValue();
388            }
389            // losses
390            while ($kill = $this->llist_->getKill())
391            {
392                $classname = $kill->getVictimShipClassName();
393                $entry[$classname]['losses']++;
394                $entry[$classname]['losses_isk'] += $kill->getVictimShipValue();
395                $this->tlcount_++;
396                $this->tlisk_ += $kill->getVictimShipValue();
397            }
398        }
399        else
400        {
401            $this->getkills();
402            $entry = &$this->entry_;
403        }
404
405                // Build our Post
406                $config = new config(KB_SITE);
407                $set_colours = unserialize($config->getConfig('forum_post_colours'));   //load colour settings
408                if(!is_array($set_colours)) { $set_colours = array(); }                                 // if the settings have been reset create an empty array so as not to brake the code later on
409                $set_styles = unserialize($config->getConfig('forum_post_styles'));             //load style settings
410                if(!is_array($set_styles)) { $set_styles = array(); }                                   // if the settings have been reset create an empty array so as not to brake the code later on
411                $set_isk = $config->getConfig('forum_post_isk',$_POST['isk']);                  // load isk setting
412               
413                //print_r($set_styles);
414        foreach ($entry as $k => $v)
415        {
416               
417                $class =  $k.$kclass;
418                $kills = $v['kills'];
419                        if($set_isk == "yes")
420                        {
421                        $kills_isk = "(".round($v['kills_isk']/1000000, 2)."M)"; 
422                        $loss_isk = "(".round($v['losses_isk']/1000000, 2)."M)";
423                        }
424                $loss = $v['losses'];
425                $close = "\r\n";
426                $spacer = " / "; 
427                if(array_key_exists(str_replace(" ","",$class),$set_colours))
428                {
429                $colour_open = "[".$set_colours[str_replace(" ","",$class)]."]";
430                $colour_close = "[/".$set_colours[str_replace(" ","",$class)]."]";
431                }
432                else
433                {
434                $colour_open = "";
435                $colour_close = "";
436                }
437                if(array_key_exists(str_replace(" ","",$class),$set_styles))
438                {
439                $style_open = "[".$set_styles[str_replace(" ","",$class)]."]";
440                $style_close = "[/".$set_styles[str_replace(" ","",$class)]."]";
441                }
442                else
443                {
444                $style_open = "";
445                $style_close = "";
446                }               
447                $order = $config->getConfig('forum_post_order');
448               
449                if($order == "first"){
450                $kills_list .= $colour_open . $style_open . $class . $spacer . $kills . $kills_isk . $spacer . $loss . $loss_isk . $style_close . $colour_close. $close;
451                }
452                else
453                {
454                $kills_list .= $colour_open . $style_open . $kills . $kills_isk . $spacer . $loss . $loss_isk . $spacer . $class  . $style_close . $colour_close. $close;
455                }
456            $counter++;
457            $this->tkcount_ += $kcount;
458            $this->tlcount_ += $lcount;
459            $this->tkisk_ += $kisk;
460            $this->tlisk_ += $lisk;
461            $this->tkpoints_ += $kpoints;
462            $this->tlpoints_ += $lpoints;
463        }
464                $html.= "Class / Kills";
465                        if($set_isk == "yes")
466                        { 
467                        $html .= "(kills isk)";
468                        }
469                $html .="/ losses ";
470                        if($set_isk == "yes")
471                        { 
472                        $html .= "(losses isk)";
473                        }
474                $html .="\r\n";
475                $html .= $kills_list;
476                $html .= "Total / ".$this->tkcount_;
477                $html .= " (".round($this->tkisk_/1000000, 2)."M)";
478                $html .= " / ".$this->tlcount_;
479                $html .= " (".round($this->tlisk_/1000000, 2)."M)";
480        return $html;
481    }
482}
483?>
Note: See TracBrowser for help on using the browser.