root/dev/common/class.killlist.php @ 149

Revision 149, 15.4 KB (checked in by exi, 16 years ago)

Changed custom ship values to also display unknown types.
Changed comment class to allow html code insertion.
Added pullout of externalids on killlists.
Fixed next week link.
Small change to the sql-inserter to remove the ';'.
Fixed the double http-link on rss feeds.
Fixed VictimAllianceURL on kill_details.
Fixed wrong links on standings page.

Line 
1<?php
2require_once('class.kill.php');
3require_once('class.profiler.php');
4require_once('class.pagesplitter.php');
5
6class KillList
7{
8    function KillList()
9    {
10        $this->qry_ = new DBQuery();
11        $this->killpointer_ = 0;
12        $this->kills_ = 0;
13        $this->losses_ = 0;
14        $this->killisk_ = 0;
15        $this->lossisk_ = 0;
16        $this->exclude_scl_ = array();
17        $this->vic_scl_id_ = array();
18        $this->regions_ = array();
19        $this->systems_ = array();
20        $this->groupby_ = array();
21        $this->offset_ = 0;
22        $this->killcounter_ = 0;
23        $this->realkillcounter_ = 0;
24        $this->ordered_ = false;
25    }
26
27    function execQuery()
28    {
29        if (!$this->qry_->executed_)
30        {
31            if (!count($this->groupby_))
32                $this->sql_ = 'select distinct kll.kll_id, kll.kll_timestamp, plt.plt_name,
33                                crp.crp_name, ali.all_name, kll.kll_ship_id,
34                                kll.kll_system_id, kll.kll_ship_id,
35                                kll.kll_victim_id, plt.plt_externalid,
36                                kll.kll_crp_id, kll.kll_points,
37                                shp.shp_class, shp.shp_name,
38                                shp.shp_externalid,
39                                scl.scl_id, scl.scl_class, scl.scl_value,
40                                sys.sys_name, sys.sys_sec,
41                                fbplt.plt_name as fbplt_name,
42                                fbplt.plt_externalid as fbplt_externalid,
43                                fbcrp.crp_name as fbcrp_name';
44
45            global $config;
46            if ($config->getConfig('ship_values'))
47            {
48                $this->sql_ .= ', ksv.shp_value';
49            }
50            if (count($this->groupby_))
51            {
52                $this->sql_ .= "select count(*) as cnt, " . implode(",", $this->groupby_);
53            }
54
55            $this->sql_ .= "    from kb3_kills kll
56                           inner join kb3_ships shp
57                              on ( shp.shp_id = kll.kll_ship_id )
58                           inner join kb3_ship_classes scl
59                              on ( scl.scl_id = shp.shp_class )";
60            if ($config->getConfig('ship_values'))
61            {
62                $this->sql_ .= ' left join kb3_ships_values ksv on (shp.shp_id = ksv.shp_id)';
63            }
64
65            $this->sql_ .= "inner join kb3_pilots plt
66                              on ( plt.plt_id = kll.kll_victim_id )
67                           inner join kb3_corps crp
68                              on ( crp.crp_id = kll.kll_crp_id )
69                           inner join kb3_alliances ali
70                              on ( ali.all_id = kll.kll_all_id )
71                           inner join kb3_pilots fbplt
72                              on ( fbplt.plt_id = kll.kll_fb_plt_id )
73                           inner join kb3_corps fbcrp
74                              on ( fbcrp.crp_id = kll.kll_fb_crp_id )
75                           inner join kb3_systems sys
76                              on ( sys.sys_id = kll.kll_system_id )";
77
78            // involved filter
79            if (! $this->mixedinvolved_)
80            {
81                if ($this->inv_plt_)
82                    $this->sql_ .= " inner join kb3_inv_plt inp
83                               on ( inp.inp_plt_id in ( " . substr($this->inv_plt_, 0, strlen($this->inv_plt_) - 2) . " ) and kll.kll_id = inp.inp_kll_id ) ";
84                if ($this->inv_crp_)
85                    $this->sql_ .= " inner join kb3_inv_crp inc
86                              on ( inc.inc_crp_id in ( " . substr($this->inv_crp_, 0, strlen($this->inv_crp_) - 2) . " ) and kll.kll_id = inc.inc_kll_id ) ";
87                if ($this->inv_all_)
88                    $this->sql_ .= " inner join kb3_inv_all ina
89                              on ( ina.ina_all_id in ( " . substr($this->inv_all_, 0, strlen($this->inv_all_) - 2) . " ) and kll.kll_id = ina.ina_kll_id ) ";
90            }
91            else
92            {
93                $this->sql_ .= " <ph> ";
94            }
95            // echo $this->sql_;
96            // regions
97            if (count($this->regions_))
98            {
99                $this->sql_ .= " inner join kb3_constellations con
100                              on ( con.con_id = sys.sys_con_id )
101                           inner join kb3_regions reg
102                              on ( reg.reg_id = con.con_reg_id
103                                   and reg.reg_id in ( " . implode($this->regions_, ",") . " ) )";
104            }
105
106            if (count($this->systems_))
107            {
108                $this->sql_ .= "   and kll.kll_system_id in ( " . implode($this->systems_, ",").")";
109            }
110            // victim filter
111            if ($this->mixedvictims_)
112            {
113                $this->sql_ .= " and ( 1 = 0 ";
114                $op = "or";
115            }
116            else $op = "and";
117
118            if ($this->vic_plt_)
119                $this->sql_ .= " " . $op . " kll.kll_victim_id in ( " . substr($this->vic_plt_, 0, strlen($this->vic_plt_) - 2) . " )";
120            if ($this->vic_crp_)
121                $this->sql_ .= " " . $op . " kll.kll_crp_id in ( " . substr($this->vic_crp_, 0, strlen($this->vic_crp_) - 2) . " )";
122            if ($this->vic_all_)
123                $this->sql_ .= " " . $op . " kll.kll_all_id in ( " . substr($this->vic_all_, 0, strlen($this->vic_all_) - 2) . " )";
124
125            if ($this->mixedvictims_)
126                $this->sql_ .= " ) ";
127            // echo $this->sql_;
128            // ship filter
129            if (count($this->exclude_scl_))
130            {
131                $this->sql_ .= " and scl.scl_id not in ( " . implode(",", $this->exclude_scl_) . " )";
132            }
133            if (count($this->vic_scl_id_))
134            {
135                $this->sql_ .= " and scl.scl_id in ( " . implode(",", $this->vic_scl_id_) . " )";
136            }
137            // related
138            if ($this->related_)
139            {
140                $rqry = new DBQuery();
141                $rsql = "select kll_timestamp, kll_system_id
142                     from kb3_kills
143                    where kll_id = " . $this->related_;
144
145                $rqry->execute($rsql) or die($rqry->getErrorMsg());
146                $rrow = $rqry->getRow();
147
148                $this->sql_ .= " and kll.kll_system_id = " . $rrow['kll_system_id'] . "
149                           and kll.kll_timestamp <=
150                               date_add( '" . $rrow['kll_timestamp'] . "', INTERVAL '15:0' MINUTE_SECOND )
151                           and kll.kll_timestamp >=
152                               date_sub( '" . $rrow['kll_timestamp'] . "', INTERVAL '15:0' MINUTE_SECOND )";
153            }
154            // timeframe
155            if ($this->timeframe_)
156                $this->sql_ .= $this->timeframe_;
157
158            if (!strpos($this->sql_, " join ") && !$this->mixedinvolved_)
159                $this->sqlhead_ .= " where 1 = 1";
160
161            if ($this->mixedinvolved_)
162            {
163                if ($this->inv_plt_)
164                {
165                    $replace = " inner join kb3_inv_plt inp
166                            on ( inp.inp_plt_id in ( " . substr($this->inv_plt_, 0, strlen($this->inv_plt_) - 2) . " ) and kll.kll_id = inp.inp_kll_id ) ";
167                    $psql = str_replace("<ph>", $replace, $this->sql_);
168                }
169                if ($this->inv_crp_)
170                {
171                    $replace = " inner join kb3_inv_crp inc
172                            on ( inc.inc_crp_id in ( " . substr($this->inv_crp_, 0, strlen($this->inv_crp_) - 2) . " ) and kll.kll_id = inc.inc_kll_id ) ";
173                    $csql = str_replace("<ph>", $replace, $this->sql_);
174                }
175                if ($this->inv_all_)
176                {
177                    $replace = " inner join kb3_inv_all ina
178                            on ( ina.ina_all_id in ( " . substr($this->inv_all_, 0, strlen($this->inv_all_) - 2) . " ) and kll.kll_id = ina.ina_kll_id ) ";
179                    $asql = str_replace("<ph>", $replace, $this->sql_);
180                }
181
182                if ($psql)
183                    $nsql = $psql . " union ";
184                if ($csql)
185                    $nsql .= $csql . " union ";
186                if ($asql)
187                    $nsql .= $asql;
188
189                $this->sql_ = $nsql;
190            }
191            if ($this->minkllid_)
192            {
193                $this->sql_ .= ' WHERE kll.kll_id > \''.$this->minkllid_.'\' ';
194            }
195
196            // group by
197            if ($this->groupby_) $this->sql_ .= " group by " . implode(",", $this->groupby_);
198            // order/limit
199            if ($this->ordered_)
200            {
201                if (!$this->orderby_) $this->sql_ .= " order by kll_timestamp desc";
202                else $this->sql_ .= " order by " . $this->orderby_;
203            }
204            if ($this->limit_) $this->sql_ .= " limit " . $this->offset_ . ", " . $this->limit_;
205            // echo '<p>'.$this->sql_."</p>";
206            $this->qry_->execute($this->sql_);
207        }
208    }
209
210    function getRow()
211    {
212        $this->execQuery();
213        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
214        {
215            // echo $this->plimit_." ".$this->killcounter_;
216            return null;
217        }
218
219        $skip = $this->poffset_ - $this->killpointer_;
220        if ($skip > 0)
221        {
222            for ($i = 0; $i < $skip; $i++)
223            {
224                $this->killpointer_++;
225                $row = $this->qry_->getRow();
226            }
227        }
228
229        $row = $this->qry_->getRow();
230
231        return $row;
232    }
233
234    function getKill()
235    {
236        $this->execQuery();
237        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
238        {
239            // echo $this->plimit_." ".$this->killcounter_;
240            return null;
241        }
242
243        $skip = $this->poffset_ - $this->killpointer_;
244        if ($skip > 0)
245        {
246            for ($i = 0; $i < $skip; $i++)
247            {
248                $this->killpointer_++;
249                $row = $this->qry_->getRow();
250            }
251        }
252
253        $row = $this->qry_->getRow();
254        if ($row)
255        {
256            $this->killcounter_++;
257            if ($row['scl_class'] != 2 && $row['scl_class'] != 3 && $row['scl_class'] != 11)
258                $this->realkillcounter_++;
259
260            global $config;
261            if ($config->getConfig('ship_values'))
262            {
263                if ($row['shp_value'])
264                {
265                    $row['scl_value'] = $row['shp_value'];
266                }
267            }
268
269            $this->killisk_ += $row['scl_value'] / 1000000;
270            $this->killpoints_ += $row['kll_points'];
271
272            $kill = new Kill($row['kll_id']);
273            $kill->setTimeStamp($row['kll_timestamp']);
274            $kill->setSolarSystemName($row['sys_name']);
275            $kill->setSolarSystemSecurity($row['sys_sec']);
276            $kill->setVictimName($row['plt_name']);
277            $kill->setVictimCorpName($row['crp_name']);
278            $kill->setVictimAllianceName($row['ali_name']);
279            $kill->setVictimShipName($row['shp_name']);
280            $kill->setVictimShipExternalID($row['shp_externalid']);
281            $kill->setVictimShipClassName($row['scl_class']);
282            $kill->setVictimShipValue(round($row['scl_value'] / 1000000, 2));
283            $kill->setFBPilotName($row['fbplt_name']);
284            $kill->setFBCorpName($row['fbcrp_name']);
285            $kill->setKillPoints($row['kll_points']);
286            $kill->plt_ext_ = $row['plt_externalid'];
287            $kill->fbplt_ext_ = $row['fbplt_externalid'];
288            return $kill;
289        }
290        else return null;
291    }
292
293    function getAllKills()
294    {
295        while ($this->getKill())
296        {
297        }
298        $this->rewind();
299    }
300
301    function addInvolvedPilot($pilot)
302    {
303        $this->inv_plt_ .= $pilot->getID() . ", ";
304        if ($this->inv_crp_ || $this->inv_all_)
305            $this->mixedinvolved_ = true;
306    }
307
308    function addInvolvedCorp($corp)
309    {
310        $this->inv_crp_ .= $corp->getID() . ", ";
311        if ($this->inv_plt_ || $this->inv_all_)
312            $this->mixedinvolved_ = true;
313    }
314
315    function addInvolvedAlliance($alliance)
316    {
317        $this->inv_all_ .= $alliance->getID() . ", ";
318        if ($this->inv_plt_ || $this->inv_crp_)
319            $this->mixedinvolved_ = true;
320    }
321
322    function addVictimPilot($pilot)
323    {
324        $this->vic_plt_ .= $pilot->getID() . ", ";
325        if ($this->vic_crp_ || $this->vic_all_)
326            $this->mixedvictims_ = true;
327    }
328
329    function addVictimCorp($corp)
330    {
331        $this->vic_crp_ .= $corp->getID() . ", ";
332        if ($this->vic_plt_ || $this->vic_all_)
333            $this->mixedvictims_ = true;
334    }
335
336    function addVictimAlliance($alliance)
337    {
338        $this->vic_all_ .= $alliance->getID() . ", ";
339        if ($this->vic_plt_ || $this->vic_crp_)
340            $this->mixedvictims_ = true;
341    }
342
343    function addVictimShipClass($shipclass)
344    {
345        array_push($this->vic_scl_id_, $shipclass->getID());
346    }
347
348    function addVictimShip($ship)
349    {
350    }
351
352    function addItemDestroyed($item)
353    {
354    }
355
356    function addRegion($region)
357    {
358        array_push($this->regions_, $region->getID());
359    }
360
361    function addSystem($system)
362    {
363        array_push($this->systems_, $system->getID());
364    }
365
366    function addGroupBy($groupby)
367    {
368        array_push($this->groupby_, $groupby);
369    }
370
371    function setPageSplitter($pagesplitter)
372    {
373        if (isset($_GET['page'])) $page = $_GET['page'];
374        else $page = 1;
375        $this->plimit_ = $pagesplitter->getSplit();
376        $this->poffset_ = ($page * $this->plimit_) - $this->plimit_;
377        // echo $this->offset_;
378        // echo $this->limit_;
379    }
380
381    function setWeek($weekno)
382    {
383        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) = ";
384        $this->timeframe_ .= $weekno;
385    }
386
387    function setYear($yearno)
388    {
389        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%Y\" ) = ";
390        $this->timeframe_ .= $yearno;
391    }
392
393    function setStartWeek($weekno)
394    {
395        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) >= ";
396        $this->timeframe_ .= $weekno;
397    }
398
399    function setStartDate($timestamp)
400    {
401        $this->timeframe_ .= " and kll.kll_timestamp >= '" . $timestamp . "'";
402    }
403
404    function setEndDate($timestamp)
405    {
406        $this->timeframe_ .= " and kll.kll_timestamp <= '" . $timestamp . "'";
407    }
408
409    function setRelated($killid)
410    {
411        $this->related_ = $killid;
412    }
413
414    function setLimit($limit)
415    {
416        $this->limit_ = $limit;
417    }
418
419    function setOrderBy($orderby)
420    {
421        $this->orderby_ = $orderby;
422    }
423
424    function setMinKllID($id)
425    {
426        $this->timeframe_ = '';
427        $this->minkllid_ = $id;
428    }
429
430    function getCount()
431    {
432        $this->execQuery();
433        return $this->qry_->recordCount();
434    }
435
436    function getRealCount()
437    {
438        $this->execQuery();
439        return $this->qry_->recordCount();
440    }
441
442    function getISK()
443    {
444        $this->execQuery();
445        return $this->killisk_;
446    }
447
448    function getPoints()
449    {
450        return $this->killpoints_;
451    }
452
453    function rewind()
454    {
455        $this->qry_->rewind();
456        $this->killcounter_ = 0;
457    }
458
459    function setPodsNoobShips($flag)
460    {
461        if (!$flag)
462        {
463            array_push($this->exclude_scl_, 2);
464            array_push($this->exclude_scl_, 3);
465            array_push($this->exclude_scl_, 11);
466        }
467    }
468
469    function setOrdered($flag)
470    {
471        $this->ordered_ = $flag;
472    }
473}
474?>
Note: See TracBrowser for help on using the browser.