root/dev/common/includes/class.killlist.php @ 213

Revision 213, 17.5 KB (checked in by ralle030583, 15 years ago)

All files (i hope i havent forgott something) was modified to use the the config in this way:
- config::get($key)
- config::del($key)
- config::set($key,value)

Exception Templates/Smarty?:
The templates still uses $config->get($key) and $config->set($key,$value) cause
it seems that smarty dont like the :: notification

Line 
1<?php
2require_once('class.kill.php');
3require_once('class.pagesplitter.php');
4
5class KillList
6{
7    function KillList()
8    {
9        $this->qry_ = new DBQuery();
10        $this->killpointer_ = 0;
11        $this->kills_ = 0;
12        $this->losses_ = 0;
13        $this->killisk_ = 0;
14        $this->lossisk_ = 0;
15        $this->exclude_scl_ = array();
16        $this->vic_scl_id_ = array();
17        $this->regions_ = array();
18        $this->systems_ = array();
19        $this->groupby_ = array();
20        $this->offset_ = 0;
21        $this->killcounter_ = 0;
22        $this->realkillcounter_ = 0;
23        $this->ordered_ = false;
24    }
25
26    function execQuery()
27    {
28        if (!$this->qry_->executed_)
29        {
30            if (!count($this->groupby_))
31                $this->sql_ = 'select distinct kll.kll_id, kll.kll_timestamp, plt.plt_name,
32                                crp.crp_name, crp.crp_id, ali.all_name, ali.all_id, kll.kll_ship_id,
33                                kll.kll_system_id, kll.kll_ship_id,
34                                kll.kll_victim_id, plt.plt_externalid,
35                                kll.kll_crp_id, kll.kll_points,
36                                        shp.shp_class, shp.shp_name,
37                                        shp.shp_externalid, shp.shp_id,
38                                                scl.scl_id, scl.scl_class, scl.scl_value,
39                                                sys.sys_name, sys.sys_sec,
40                                fbplt.plt_name as fbplt_name,
41                                fbplt.plt_externalid as fbplt_externalid,
42                                fbcrp.crp_name as fbcrp_name';
43
44            if (config::get('ship_values'))
45            {
46                $this->sql_ .= ', ksv.shp_value';
47            }
48            if (count($this->groupby_))
49            {
50                $this->sql_ .= "select count(*) as cnt, ".implode(",", $this->groupby_);
51            }
52
53            $this->sql_ .= "    from kb3_kills kll
54                           inner join kb3_ships shp
55                              on ( shp.shp_id = kll.kll_ship_id )
56                           inner join kb3_ship_classes scl
57                              on ( scl.scl_id = shp.shp_class )";
58            if (config::get('ship_values'))
59            {
60                $this->sql_ .= ' left join kb3_ships_values ksv on (shp.shp_id = ksv.shp_id) ';
61            }
62
63            $this->sql_ .= "inner join kb3_pilots plt
64                              on ( plt.plt_id = kll.kll_victim_id )
65                           inner join kb3_corps crp
66                              on ( crp.crp_id = kll.kll_crp_id )
67                           inner join kb3_alliances ali
68                              on ( ali.all_id = kll.kll_all_id )
69                           inner join kb3_pilots fbplt
70                              on ( fbplt.plt_id = kll.kll_fb_plt_id )
71                           inner join kb3_corps fbcrp
72                              on ( fbcrp.crp_id = kll.kll_fb_crp_id )
73                           inner join kb3_systems sys
74                              on ( sys.sys_id = kll.kll_system_id )";
75
76            // involved filter
77            if (! $this->mixedinvolved_)
78            {
79                if ($this->inv_plt_)
80                    $this->sql_ .= " inner join kb3_inv_plt inp
81                               on ( inp.inp_plt_id in ( ".join(',', $this->inv_plt_)." ) and kll.kll_id = inp.inp_kll_id ) ";
82                if ($this->inv_crp_)
83                    $this->sql_ .= " inner join kb3_inv_crp inc
84                              on ( inc.inc_crp_id in ( ".join(',', $this->inv_crp_)." ) and kll.kll_id = inc.inc_kll_id
85                               and inc.inc_crp_id != kll.kll_crp_id ) ";
86                if ($this->inv_all_)
87                    $this->sql_ .= " inner join kb3_inv_all ina
88                              on ( ina.ina_all_id in ( ".join(',', $this->inv_all_)." ) and kll.kll_id = ina.ina_kll_id
89                               and ina.ina_all_id != kll.kll_all_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 ( ".join(',', $this->vic_plt_)." )";
120            if ($this->vic_crp_)
121                $this->sql_ .= " ".$op." kll.kll_crp_id in ( ".join(',', $this->vic_crp_)." )";
122            if ($this->vic_all_)
123                $this->sql_ .= " ".$op." kll.kll_all_id in ( ".join(',', $this->vic_all_)." )";
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 from kb3_kills where kll_id = ".$this->related_;
142
143                $rqry->execute($rsql);
144                $rrow = $rqry->getRow();
145
146                $this->sql_ .= " and kll.kll_system_id = ".$rrow['kll_system_id']."
147                           and kll.kll_timestamp <=
148                               date_add( '".$rrow['kll_timestamp']."', INTERVAL '60:0' MINUTE_SECOND )
149                           and kll.kll_timestamp >=
150                               date_sub( '".$rrow['kll_timestamp']."', INTERVAL '60:0' MINUTE_SECOND )";
151            }
152            // timeframe
153            if ($this->timeframe_)
154                $this->sql_ .= $this->timeframe_;
155
156            if (!strpos($this->sql_, " join ") && !$this->mixedinvolved_)
157                $this->sqlhead_ .= " where 1 = 1";
158
159            if ($this->mixedinvolved_)
160            {
161                if ($this->inv_plt_)
162                {
163                    $replace = " inner join kb3_inv_plt inp
164                            on ( inp.inp_plt_id in ( ".join(',', $this->inv_plt_)." ) and kll.kll_id = inp.inp_kll_id ) ";
165                    $psql = str_replace("<ph>", $replace, $this->sql_);
166                }
167                if ($this->inv_crp_)
168                {
169                    $replace = " inner join kb3_inv_crp inc
170                            on ( inc.inc_crp_id in ( ".join(',', $this->inv_crp_)." ) and kll.kll_id = inc.inc_kll_id ) ";
171                    $csql = str_replace("<ph>", $replace, $this->sql_);
172                }
173                if ($this->inv_all_)
174                {
175                    $replace = " inner join kb3_inv_all ina
176                            on ( ina.ina_all_id in ( ".join(',', $this->inv_all_)." ) and kll.kll_id = ina.ina_kll_id ) ";
177                    $asql = str_replace("<ph>", $replace, $this->sql_);
178                }
179
180                if ($psql)
181                    $nsql = $psql." union ";
182                if ($csql)
183                    $nsql .= $csql." union ";
184                if ($asql)
185                    $nsql .= $asql;
186
187                $this->sql_ = $nsql;
188            }
189            if ($this->minkllid_)
190            {
191                $this->sql_ .= ' WHERE kll.kll_id > \''.$this->minkllid_.'\' ';
192            }
193
194            // group by
195            if ($this->groupby_) $this->sql_ .= " group by ".implode(",", $this->groupby_);
196            // order/limit
197            if ($this->ordered_)
198            {
199                if (!$this->orderby_) $this->sql_ .= " order by kll_timestamp desc";
200                else $this->sql_ .= " order by ".$this->orderby_;
201            }
202            if ($this->limit_) $this->sql_ .= " limit ".$this->offset_.", ".$this->limit_;
203            // echo '<p>'.$this->sql_."</p>";
204            $this->qry_->execute($this->sql_);
205        }
206    }
207
208    function getRow()
209    {
210        $this->execQuery();
211        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
212        {
213            // echo $this->plimit_." ".$this->killcounter_;
214            return null;
215        }
216
217        $skip = $this->poffset_ - $this->killpointer_;
218        if ($skip > 0)
219        {
220            for ($i = 0; $i < $skip; $i++)
221            {
222                $this->killpointer_++;
223                $row = $this->qry_->getRow();
224            }
225        }
226
227        $row = $this->qry_->getRow();
228
229        return $row;
230    }
231
232    function getKill()
233    {
234        $this->execQuery();
235        if ($this->plimit_ && $this->killcounter_ >= $this->plimit_)
236        {
237            // echo $this->plimit_." ".$this->killcounter_;
238            return null;
239        }
240
241        $skip = $this->poffset_ - $this->killpointer_;
242        if ($skip > 0)
243        {
244            for ($i = 0; $i < $skip; $i++)
245            {
246                $this->killpointer_++;
247                $row = $this->qry_->getRow();
248            }
249        }
250
251        $row = $this->qry_->getRow();
252        if ($row)
253        {
254            $this->killcounter_++;
255            if ($row['scl_class'] != 2 && $row['scl_class'] != 3 && $row['scl_class'] != 11)
256                $this->realkillcounter_++;
257
258           if (config::get('ship_values'))
259            {
260                if ($row['shp_value'])
261                {
262                    $row['scl_value'] = $row['shp_value'];
263                }
264            }
265
266            $this->killisk_ += $row['scl_value'];
267            $this->killpoints_ += $row['kll_points'];
268
269            $kill = new Kill($row['kll_id']);
270            $kill->setTimeStamp($row['kll_timestamp']);
271            $kill->setSolarSystemName($row['sys_name']);
272            $kill->setSolarSystemSecurity($row['sys_sec']);
273            $kill->setVictimName($row['plt_name']);
274            $kill->setVictimCorpName($row['crp_name']);
275            $kill->setVictimCorpID($row['crp_id']);
276            $kill->setVictimAllianceName($row['all_name']);
277            $kill->setVictimAllianceID($row['all_id']);
278            $kill->setVictimShipName($row['shp_name']);
279            $kill->setVictimShipExternalID($row['shp_externalid']);
280            $kill->setVictimShipClassName($row['scl_class']);
281            $kill->setVictimShipValue($row['scl_value']);
282            $kill->setVictimID($row['kll_victim_id']);
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            $kill->_sclid = $row['scl_id'];
289            $kill->_shpid = $row['shp_id'];
290            if ($this->_tag)
291            {
292                $kill->_tag = $this->_tag;
293            }
294            if (config::get('kill_classified'))
295            {
296                if ($kill->isClassified())
297                {
298                    $kill->setSolarSystemName('Classified');
299                    $kill->setSolarSystemSecurity('0.0');
300                }
301            }
302
303            return $kill;
304        }
305        else return null;
306    }
307
308    function getAllKills()
309    {
310        while ($this->getKill())
311        {
312        }
313        $this->rewind();
314    }
315
316    function addInvolvedPilot($pilot)
317    {
318        $this->inv_plt_[] = $pilot->getID();
319        if (count($this->inv_crp_) || count($this->inv_all_))
320            $this->mixedinvolved_ = true;
321    }
322
323    function addInvolvedCorp($corp)
324    {
325        $this->inv_crp_[] = $corp->getID();
326        if (count($this->inv_plt_) || count($this->inv_all_))
327            $this->mixedinvolved_ = true;
328    }
329
330    function addInvolvedAlliance($alliance)
331    {
332        $this->inv_all_[] = $alliance->getID();
333        if (count($this->inv_plt_) || count($this->inv_crp_))
334            $this->mixedinvolved_ = true;
335    }
336
337    function addVictimPilot($pilot)
338    {
339        $this->vic_plt_[] = $pilot->getID();
340        if (count($this->vic_crp_) || count($this->vic_all_))
341            $this->mixedvictims_ = true;
342    }
343
344    function addVictimCorp($corp)
345    {
346        $this->vic_crp_[] = $corp->getID();
347        if (count($this->vic_plt_) || count($this->vic_all_))
348            $this->mixedvictims_ = true;
349    }
350
351    function addVictimAlliance($alliance)
352    {
353        $this->vic_all_[] = $alliance->getID();
354        if (count($this->vic_plt_) || count($this->vic_crp_))
355            $this->mixedvictims_ = true;
356    }
357
358    function addVictimShipClass($shipclass)
359    {
360        array_push($this->vic_scl_id_, $shipclass->getID());
361    }
362
363    function addVictimShip($ship)
364    {
365    }
366
367    function addItemDestroyed($item)
368    {
369    }
370
371    function addRegion($region)
372    {
373        array_push($this->regions_, $region->getID());
374    }
375
376    function addSystem($system)
377    {
378        array_push($this->systems_, $system->getID());
379    }
380
381    function addGroupBy($groupby)
382    {
383        array_push($this->groupby_, $groupby);
384    }
385
386    function setPageSplitter($pagesplitter)
387    {
388        if (isset($_GET['page'])) $page = $_GET['page'];
389        else $page = 1;
390        $this->plimit_ = $pagesplitter->getSplit();
391        $this->poffset_ = ($page * $this->plimit_) - $this->plimit_;
392        // echo $this->offset_;
393        // echo $this->limit_;
394    }
395
396    function setWeek($weekno)
397    {
398        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) = ";
399        $this->timeframe_ .= $weekno;
400    }
401
402    function setYear($yearno)
403    {
404        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%Y\" ) = ";
405        $this->timeframe_ .= $yearno;
406    }
407
408    function setStartWeek($weekno)
409    {
410        $this->timeframe_ .= " and date_format( kll.kll_timestamp, \"%u\" ) >= ";
411        $this->timeframe_ .= $weekno;
412    }
413
414    function setStartDate($timestamp)
415    {
416        $this->timeframe_ .= " and kll.kll_timestamp >= '".$timestamp."'";
417    }
418
419    function setEndDate($timestamp)
420    {
421        $this->timeframe_ .= " and kll.kll_timestamp <= '".$timestamp."'";
422    }
423
424    function setRelated($killid)
425    {
426        $this->related_ = $killid;
427    }
428
429    function setLimit($limit)
430    {
431        $this->limit_ = $limit;
432    }
433
434    function setOrderBy($orderby)
435    {
436        $this->orderby_ = $orderby;
437    }
438
439    function setMinKllID($id)
440    {
441        $this->timeframe_ = '';
442        $this->minkllid_ = $id;
443    }
444
445    function getCount()
446    {
447        $this->execQuery();
448        return $this->qry_->recordCount();
449    }
450
451    function getRealCount()
452    {
453        $this->execQuery();
454        return $this->qry_->recordCount();
455    }
456
457    function getISK()
458    {
459        $this->execQuery();
460        return $this->killisk_;
461    }
462
463    function getPoints()
464    {
465        return $this->killpoints_;
466    }
467
468    function rewind()
469    {
470        $this->qry_->rewind();
471        $this->killcounter_ = 0;
472    }
473
474    function setPodsNoobShips($flag)
475    {
476        if (!$flag)
477        {
478            array_push($this->exclude_scl_, 2);
479            array_push($this->exclude_scl_, 3);
480            array_push($this->exclude_scl_, 11);
481        }
482    }
483
484    function setOrdered($flag)
485    {
486        $this->ordered_ = $flag;
487    }
488
489    function tag($string)
490    {
491        if ($string == '')
492        {
493            $this->_tag = null;
494        }
495        else
496        {
497            $this->_tag = $string;
498        }
499    }
500}
501
502class CombinedKillList extends KillList
503{
504    function CombinedKillList()
505    {
506        // please only load killlists here
507        $this->lists = func_get_args();
508        if (!is_array($this->lists))
509        {
510            trigger_error('No killlists given to CombinedKillList', E_USER_ERROR);
511        }
512        $this->kills = false;
513    }
514
515    function buildKillArray()
516    {
517        $this->kills = array();
518        foreach ($this->lists as $killlist)
519        {
520            // reset the list
521            $killlist->rewind();
522
523            // load all kills and store them in an array
524            while ($kill = $killlist->getKill())
525            {
526                // take sure that if there are multiple kills all are stored
527                if (isset($this->kills[$kill->timestamp_]))
528                {
529                    $this->kills[$kill->timestamp_.rand()] = $kill;
530                }
531                else
532                {
533                    $this->kills[$kill->timestamp_] = $kill;
534                }
535            }
536        }
537
538        // sort the kills by time
539        krsort($this->kills);
540    }
541
542    function getKill()
543    {
544        // on the first request we load up our kills
545        if ($this->kills == false)
546        {
547            $this->buildKillArray();
548        }
549
550        // once all kills are out this will return null so we're fine
551        return array_shift($this->kills);
552    }
553
554    function rewind()
555    {
556        // intentionally left empty to overload the standard handle
557    }
558}
559?>
Note: See TracBrowser for help on using the browser.