root/dev/common/includes/class.kill.php @ 381

Revision 381, 35.5 KB (checked in by kovell, 11 years ago)

kill class can constructs all involved pilot/ship/etc objects
kill_detail reduced load using new kill method.
display fixes.

Line 
1<?php
2require_once('common/includes/class.item.php');
3require_once('common/includes/class.corp.php');
4require_once('common/includes/class.alliance.php');
5require_once('common/includes/class.ship.php');
6require_once('common/includes/class.system.php');
7require_once('common/includes/class.pilot.php');
8require_once('common/includes/class.killlist.php');
9require_once('common/includes/class.itemlist.php');
10
11class Kill
12{
13        function Kill($id = 0, $external = false)
14        {
15                if($id && $external)
16                {
17                        $qry = new DBQuery();
18                        $qry->execute("SELECT kll_id FROM kb3_kills WHERE kll_external_id = ".$id);
19                        if($qry->recordCount())
20                        {
21                                $result = $qry->getRow();
22                                $this->id_ = $result['kll_id'];
23                                $this->externalid_ = $id;
24                        }
25                        else
26                        {
27                                $this->id_ = 0;
28                                $this->external_id = 0;
29                        }
30                }
31                else
32                {
33                        $this->id_ = $id;
34                        $this->externalid_ = 0;
35                }
36                $this->involvedparties_ = array();
37                $this->destroyeditems_ = array();
38                $this->droppeditems_ = array();
39                $this->fullinvolved_ = false;
40        }
41
42        function set($var, $value)
43        {
44                $this->$var = $value;
45        }
46
47        function getID()
48        {
49                return $this->id_;
50        }
51
52        function getExternalID()
53        {
54                if($this->externalid_) return $this->externalid_;
55                $this->execQuery();
56                return $this->externalid_;
57        }
58
59        function getTimeStamp()
60        {
61                $this->execQuery();
62                return $this->timestamp_;
63        }
64
65        function getVictimName()
66        {
67                $this->execQuery();
68                return $this->victimname_;
69        }
70
71        function getVictimID()
72        {
73                $this->execQuery();
74                return $this->victimid_;
75        }
76
77        function getVictimPortrait($size = 32)
78        {
79                $this->execQuery();
80                $plt = new Pilot($this->victimid_);
81                return $plt->getPortraitURL($size);
82        }
83
84        function getVictimCorpID()
85        {
86                $this->execQuery();
87                return $this->victimcorpid_;
88        }
89
90        function getVictimCorpName()
91        {
92                $this->execQuery();
93                return $this->victimcorpname_;
94        }
95
96        function getVictimAllianceName()
97        {
98                $this->execQuery();
99                return $this->victimalliancename_;
100        }
101
102        function getVictimAllianceID()
103        {
104                $this->execQuery();
105                return $this->victimallianceid_;
106        }
107
108        function getVictimShip()
109        {
110                $this->execQuery();
111                return $this->victimship_;
112        }
113
114        function getSystem()
115        {
116                $this->execQuery();
117                return $this->solarsystem_;
118        }
119
120        function getFBPilotID()
121        {
122                $this->execQuery();
123                if (!$this->fbpilotid_) return "null";
124                else return $this->fbpilotid_;
125        }
126
127        function getFBPilotName()
128        {
129                $this->execQuery();
130                return $this->fbpilotname_;
131        }
132
133        function getFBCorpID()
134        {
135                $this->execQuery();
136                if (!$this->fbcorpid_) return "null";
137                else return $this->fbcorpid_;
138        }
139
140        function getFBCorpName()
141        {
142                $this->execQuery();
143                return $this->fbcorpname_;
144        }
145
146        function getFBAllianceID()
147        {
148                $this->execQuery();
149                if (!$this->fballianceid_) return "null";
150                else return $this->fballianceid_;
151        }
152
153        function getFBAllianceName()
154        {
155                $this->execQuery();
156                return $this->fballiancename_;
157        }
158
159        function getISKLoss()
160        {
161                $this->execQuery();
162                return $this->iskloss_;
163        }
164        function getKillPoints()
165        {
166                $this->execQuery();
167                return $this->killpoints_;
168        }
169
170        function getSolarSystemName()
171        {
172                return $this->solarsystemname_;
173        }
174
175        function getSolarSystemSecurity()
176        {
177                return $this->solarsystemsecurity_;
178        }
179
180        function getVictimShipName()
181        {
182                return $this->victimshipname_;
183        }
184
185        function getVictimShipExternalID()
186        {
187                return $this->victimshipexternalid_;
188        }
189
190        function getVictimShipClassName()
191        {
192                return $this->victimshipclassname_;
193        }
194
195        function getVictimShipValue()
196        {
197                return $this->victimshipvalue_;
198        }
199
200        function getVictimShipImage($size)
201        {
202                return IMG_URL."/ships/".$size."_".$size."/".$this->victimshipexternalid_.".png";
203        }
204
205        function getVictimShipValueIndicator()
206        {
207        // value is now raw
208                $value = $this->getVictimShipValue()/1000000;
209
210                if ($value >= 0 && $value <= 1)
211                        $color = 'gray';
212                elseif ($value > 1 && $value <= 15)
213                        $color = 'blue';
214                elseif ($value > 15 && $value <= 25)
215                        $color = 'green';
216                elseif ($value > 25 && $value <= 40)
217                        $color = 'yellow';
218                elseif ($value > 40 && $value <= 80)
219                        $color = 'red';
220                elseif ($value > 80 && $value <= 250)
221                        $color = 'orange';
222                elseif ($value > 250)
223                        $color = 'purple';
224
225                return IMG_URL.'/ships/ship-'.$color.'.gif';
226        }
227
228        function getRawMail()
229        {
230                if (config::get('km_cache_enabled') && file_exists(config::get('km_cache_dir')."/".$this->getID().".txt"))
231                {
232                        return file_get_contents(config::get('km_cache_dir')."/".$this->getID().".txt");
233                }
234
235                $this->execQuery();
236                if ($this->isClassified())
237                {
238                        return 'Killmail not yet available, try again in '.round($this->getClassifiedTime()/3600, 2).' hrs.';
239                }
240
241                $ship = $this->getVictimShip();
242                $shipclass = $ship->getClass();
243
244                $mail .= substr(str_replace('-', '.' , $this->getTimeStamp()), 0, 16)."\r\n\r\n";
245                if ( $shipclass->getID() == 35 ) // Starbase (so this is a POS mail)
246                {
247                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
248                        $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
249                        $mail .= "Faction: NONE\r\n";
250                        //$ship = $this->getVictimShip();
251                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
252                        $mail .= "Moon: ".$this->getVictimName()."\r\n";
253                        $system = $this->getSystem();
254                        $mail .= "System: ".$system->getName()."\r\n";
255                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
256                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
257                        $mail .= "Involved parties:\r\n\r\n";
258                }
259                else
260                {
261                        $mail .= "Victim: ".$this->getVictimName()."\r\n";
262                        $mail .= "Corp: ".$this->getVictimCorpName()."\r\n";
263                        $mail .= "Alliance: ".$this->getVictimAllianceName()."\r\n";
264                        $mail .= "Faction: NONE\r\n";
265                        //$ship = $this->getVictimShip();
266                        $mail .= "Destroyed: ".$ship->getName()."\r\n";
267                        $system = $this->getSystem();
268                        $mail .= "System: ".$system->getName()."\r\n";
269                        $mail .= "Security: ".$system->getSecurity(true)."\r\n";
270                        $mail .= "Damage Taken: ".$this->VictimDamageTaken."\r\n\r\n";
271                        $mail .= "Involved parties:\r\n\r\n";
272                }
273
274                foreach ($this->involvedparties_ as $inv)
275                {
276                        $pilot = new Pilot($inv->getPilotID());
277                        $corp = new Corporation($inv->getCorpID());
278                        $alliance = new Alliance($inv->getAllianceID());
279
280                        $weapon = $inv->getWeapon();
281                        $ship = $inv->getShip();
282                        if ($pilot->getName() == $weapon->getName())
283                        {
284                                $name = $pilot->getName()." / ".$corp->getName();
285                        }
286                        else
287                        {
288                                $name = $pilot->getName();
289                        }
290
291                        $mail .= "Name: ".$name;
292                        if ($pilot->getID() == $this->getFBPilotID())
293                        {
294                                $mail .= " (laid the final blow)";
295                        }
296                        $mail .= "\r\n";
297
298                        if ($pilot->getName() != $weapon->getName())
299                        {
300                                $mail .= "Security: ".$inv->getSecStatus()."\r\n";
301                                $mail .= "Corp: ".$corp->getName()."\r\n";
302                                $mail .= "Alliance: ".$alliance->getName()."\r\n";
303                                $mail .= "Faction: NONE\r\n";
304                                $mail .= "Ship: ".$ship->getName()."\r\n";
305                                $mail .= "Weapon: ".$weapon->getName()."\r\n";
306                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
307                        }
308                        else
309                        {
310                                $mail .= "Damage Done: ".$inv->dmgdone_."\r\n";
311                        }
312                        $mail .= "\r\n";
313                }
314
315                if (count($this->destroyeditems_) > 0)
316                {
317                        $mail .= "\r\nDestroyed items:\r\n\r\n";
318
319                        foreach($this->destroyeditems_ as $destroyed)
320                        {
321                                $item = $destroyed->getItem();
322                                $mail .= $item->getName();
323                                if ($destroyed->getQuantity() > 1)
324                                {
325                                // if the option is enabled and the item is fitted then split it up
326                                // this is aworkaround for the lazy parser of griefwatch
327                                        if (config::get('kill_splitfit') && $destroyed->getQuantity() < 9 && ($destroyed->getLocationID() == 1
328                                                || $destroyed->getLocationID() == 2 || $destroyed->getLocationID() == 3))
329                                        {
330                                                for ($i = $destroyed->getQuantity(); $i > 1; $i--)
331                                                {
332                                                        $mail .= "\r\n".$item->getName();
333                                                }
334
335                                        }
336                                        else
337                                        {
338                                                $mail .= ", Qty: ".$destroyed->getQuantity();
339                                        }
340                                }
341                                if ($destroyed->getLocationID() == 4) // cargo
342                                        $mail .= " (Cargo)";
343                                if ($destroyed->getLocationID() == 6) // drone
344                                        $mail .= " (Drone Bay)";
345                                $mail .= "\r\n";
346                        }
347                }
348
349                if (count($this->droppeditems_) > 0)
350                {
351                        $mail .= "\r\nDropped items:\r\n\r\n";
352
353                        foreach($this->droppeditems_ as $dropped)
354                        {
355                                $item = $dropped->getItem();
356                                $mail .= $item->getName();
357                                if ($dropped->getQuantity() > 1)
358                                {
359                                // if the option is enabled and the item is fitted then split it up
360                                // this is aworkaround for the lazy parser of griefwatch
361                                        if (config::get('kill_splitfit') && $dropped->getQuantity() < 9 && ($dropped->getLocationID() == 1
362                                                || $dropped->getLocationID() == 2 || $dropped->getLocationID() == 3))
363                                        {
364                                                for ($i = $dropped->getQuantity(); $i > 1; $i--)
365                                                {
366                                                        $mail .= "\r\n".$item->getName();
367                                                }
368
369                                        }
370                                        else
371                                        {
372                                                $mail .= ", Qty: ".$dropped->getQuantity();
373                                        }
374                                }
375                                if ($dropped->getLocationID() == 4) // cargo
376                                        $mail .= " (Cargo)";
377                                if ($dropped->getLocationID() == 6) // drone
378                                        $mail .= " (Drone Bay)";
379                                $mail .= "\r\n";
380                        }
381                }
382
383                if (config::get('km_cache_enabled')) file_put_contents(config::get('km_cache_dir')."/".$this->getID().".txt", $mail);
384
385                return $mail;
386        }
387
388        function getDupe($checkonly = false)
389        {
390                if (!$checkonly)
391                {
392                        $this->execQuery();
393                }
394                $dupe = 0;
395                $qry = new DBQuery(true);
396                if (!$this->getFBPilotID() || !$this->victimid_)
397                        return 0;
398                $qry->execute("select kll_id
399                    from kb3_kills
400                    where kll_timestamp ='".$this->timestamp_."'
401                    and kll_victim_id = ".$this->victimid_."
402                    and kll_ship_id = ".$this->victimship_->getID()."
403                    and kll_system_id = ".$this->solarsystem_->getID()."
404                    and kll_fb_plt_id = ".$this->getFBPilotID()."
405                    and kll_id != ".$this->id_);
406
407                $row = $qry->getRow();
408                if ($row)
409                        return $row['kll_id'];
410                else
411                        return 0;
412        }
413
414        function execQuery()
415        {
416                if (!$this->timestamp_)
417                {
418                        $qry = new DBQuery();
419
420                        $this->qry_ = new DBQuery();
421                        $this->sql_ = "select kll.kll_id, kll.kll_timestamp, plt.plt_name,
422                          crp.crp_name, ali.all_name, ali.all_id, kll.kll_ship_id,
423                          kll.kll_system_id, kll.kll_ship_id, kll.kll_external_id,
424                          kll.kll_victim_id, plt.plt_externalid, kll.kll_isk_loss,
425                          kll.kll_crp_id, kll.kll_points, kll.kll_isk_loss,
426                          fbplt.plt_id as fbplt_id,
427                          fbplt.plt_externalid as fbplt_externalid,
428                          fbcrp.crp_id as fbcrp_id,
429                          fbali.all_id as fbali_id,
430                          fbplt.plt_name as fbplt_name,
431                          fbcrp.crp_name as fbcrp_name,
432                          fbali.all_name as fbali_name,
433                          kll_dmgtaken
434                     from kb3_kills kll, kb3_pilots plt, kb3_corps crp,
435                          kb3_alliances ali, kb3_alliances fbali, kb3_corps fbcrp,
436                          kb3_pilots fbplt, kb3_inv_detail fb
437                    where kll.kll_id = '".$this->id_."'
438                      and plt.plt_id = kll.kll_victim_id
439                      and crp.crp_id = kll.kll_crp_id
440                      and ali.all_id = kll.kll_all_id
441                                          and fb.ind_kll_id = kll.kll_id
442                                          and fb.ind_plt_id = kll.kll_fb_plt_id
443                      and fbali.all_id = fb.ind_all_id
444                      and fbcrp.crp_id = fb.ind_crp_id
445                      and fbplt.plt_id = kll.kll_fb_plt_id";
446
447                        $this->qry_->execute($this->sql_);
448                        $row = $this->qry_->getRow();
449                        if (!$row)
450                        {
451                                $this->valid_ = false;
452                                return false;
453                        }
454                        else
455                        {
456                                $this->valid_ = true;
457                        }
458
459                        $this->setTimeStamp($row['kll_timestamp']);
460                        $this->setSolarSystem(new SolarSystem($row['kll_system_id']));
461                        $this->setVictimID($row['kll_victim_id']);
462                        $this->setVictimName($row['plt_name']);
463                        $this->setVictimCorpID($row['kll_crp_id']);
464                        $this->setVictimCorpName($row['crp_name']);
465                        $this->setVictimAllianceID($row['all_id']);
466                        $this->setVictimAllianceName($row['all_name']);
467                        $this->setVictimShip(new Ship($row['kll_ship_id']));
468                        $this->setFBPilotID($row['fbplt_id']);
469                        $this->setFBPilotName($row['fbplt_name']);
470                        $this->setFBCorpID($row['fbcrp_id']);
471                        $this->setFBCorpName($row['fbcrp_name']);
472                        $this->setFBAllianceID($row['fbali_id']);
473                        $this->setFBAllianceName($row['fbali_name']);
474                        $this->setKillPoints($row['kll_points']);
475                        $this->setExternalID($row['kll_external_id']);
476                        $this->setISKLoss($row['kll_isk_loss']);
477                        $this->plt_ext_ = $row['plt_externalid'];
478                        $this->fbplt_ext_ = $row['fbplt_externalid'];
479                        $this->VictimDamageTaken = $row['kll_dmgtaken'];
480
481                        // involved
482                        if($this->fullinvolved_)
483                        {
484                                $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
485                                        ind_shp_id, ind_wep_id, typeName, ind_dmgdone,
486                                        shp_id, shp_name, shp_externalid, shp_class, scl_class,
487                                        plt_name, plt_externalid, crp_name, all_name
488                                        from kb3_inv_detail
489                                        join kb3_pilots on ind_plt_id = plt_id
490                                        join kb3_corps on ind_crp_id = crp_id
491                                        join kb3_alliances on ind_all_id = all_id
492                                        join kb3_ships on ind_shp_id = shp_id
493                                        join kb3_ship_classes on shp_class = scl_id
494                                        join kb3_invtypes on ind_wep_id = typeID
495                                        where ind_kll_id = ".$this->getID()."
496                                        order by ind_order";
497
498                                $qry->execute($sql) or die($qry->getErrorMsg());
499                                while ($row = $qry->getRow())
500                                {
501                                        $pilot = new Pilot($row['ind_plt_id']);
502                                        $pilot->externalid_ = $row['plt_externalid'];
503                                        $pilot->name_ = $row['plt_name'];
504                                        $pilot->corp_ = $row['ind_crp_id'];
505
506                                        $corp = new Corporation($row['ind_crp_id']);
507                                        $corp->name_ = $row['crp_name'];
508                                        $corp->alliance_ = $row['ind_all_id'];
509
510                                        $alliance = new Alliance($row['ind_all_id']);
511                                        $alliance->name_ = $row['all_name'];
512
513                                        $ship = new Ship($row['shp_id']);
514                                        $ship->externalid_ = $row['shp_externalid'];
515                                        $ship->shipname_ = $row['shp_name'];
516
517                                        $ship->shipclass_ = new ShipClass($row['shp_class']);
518                                        $ship->shipclass_->name_ = $row['scl_class'];
519                                       
520                                        $weapon = new Item($row['ind_wep_id']);
521                                        $weapon->row_['typeName'] = $row['typeName'];
522                                        $weapon->row_['typeID'] = $row['ind_wep_id'];
523                                        $weapon->row_['itm_externalid'] = $row['ind_wep_id'];
524                                       
525                                        $involved = new DetailedInv($pilot,
526                                                $row['ind_sec_status'],
527                                                $corp,
528                                                $alliance,
529                                                $ship,
530                                                $weapon);
531                                        $involved->dmgdone_ = $row['ind_dmgdone'];
532                                        array_push($this->involvedparties_, $involved);
533                                }
534                        }
535                        else
536                        {
537                                $sql = "select ind_plt_id, ind_crp_id, ind_all_id, ind_sec_status,
538                                        ind_shp_id, ind_wep_id, ind_dmgdone
539                                        from kb3_inv_detail
540                                        where ind_kll_id = ".$this->getID()."
541                                        order by ind_order";
542
543                                $qry->execute($sql) or die($qry->getErrorMsg());
544                                while ($row = $qry->getRow())
545                                {
546                                        $involved = new InvolvedParty($row['ind_plt_id'],
547                                                $row['ind_crp_id'],
548                                                $row['ind_all_id'],
549                                                $row['ind_sec_status'],
550                                                new Ship($row['ind_shp_id']),
551                                                new Item($row['ind_wep_id']));
552                                        $involved->dmgdone_ = $row['ind_dmgdone'];
553                                        array_push($this->involvedparties_, $involved);
554                                }
555                        }
556                        $destroyedlist = new ItemList(null, true);
557                        $destroyedlist->addKillDestroyed($this->id_);
558                        while($item = $destroyedlist->getItem())
559                        {
560                                $destroyed = new DestroyedItem($item,
561                                        $item->row_['itd_quantity'],
562                                        $item->row_['itl_location'],
563                                        $item->row_['itd_itl_id']);
564                                array_push($this->destroyeditems_, $destroyed);
565                        }
566                        $droppedlist = new ItemList(null, true);
567                        $droppedlist->addKillDropped($this->id_);
568                        while($item = $droppedlist->getItem())
569                        {
570                                $dropped = new DroppedItem($item,
571                                        $item->row_['itd_quantity'],
572                                        $item->row_['itl_location'],
573                                        $item->row_['itd_itl_id']);
574                                array_push($this->droppeditems_, $dropped);
575                        }
576                }
577        }
578
579        function isClassified()
580        {
581                if (config::get('kill_classified'))
582                {
583                        if (user::role('classified_see'))
584                        {
585                                return false;
586                        }
587
588                        $offset = config::get('kill_classified')*3600;
589                        if (config::get('date_gmtime'))
590                        {
591                                $time = time()-date('Z');
592                        }
593                        else
594                        {
595                                $time = time();
596                        }
597                        if (strtotime($this->timestamp_) > $time-$offset)
598                        {
599                                return true;
600                        }
601                }
602                return false;
603        }
604
605        function getClassifiedTime()
606        {
607                if (config::get('kill_classified'))
608                {
609                        $offset = config::get('kill_classified')*3600;
610                        if (config::get('date_gmtime'))
611                        {
612                                $time = time()-date('Z');
613                        }
614                        else
615                        {
616                                $time = time();
617                        }
618                        if (strtotime($this->timestamp_) > $time-$offset)
619                        {
620                                return ($offset-$time+strtotime($this->timestamp_));
621                        }
622                }
623                return 0;
624        }
625
626        function getInvolvedPartyCount()
627        {
628                if(isset($this->involvedcount_)) return $this->involvedcount_;
629                $qry = new DBQuery();
630                $qry->execute("select max(ind_order)+1 inv from kb3_inv_detail where ind_kll_id = ". $this->id_);
631                $result = $qry->getRow();
632                $this->involvedcount_ = $result['inv'];
633                return $result['inv'];
634        }
635
636        // Set the number of involved parties - used by killlist
637        function setInvolvedPartyCount($invcount = 0)
638        {
639                $this->involvedcount_ = $invcount;
640        }
641
642        function setDetailedInvolved()
643        {
644                $this->fullinvolved_ = true;
645        }
646        function exists()
647        {
648                $this->execQuery();
649                return $this->valid_;
650        }
651
652        //Count all kills by board owner related to this kill
653        function relatedKillCount()
654        {
655                if($this->relatedkillcount_) return $this->relatedkillcount_;
656                $sql="SELECT COUNT(kll.kll_id) AS kills FROM kb3_kills kll WHERE ";
657                $sql.="kll.kll_timestamp <= '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60))."'
658                                                   AND kll.kll_timestamp >=
659                                                           '".(date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'
660                                                   AND kll.kll_system_id = ".$this->solarsystem_->getID();
661                if(ALLIANCE_ID <>0)
662                {
663                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
664                                " WHERE ( ind.ind_all_id = ".ALLIANCE_ID." AND kll.kll_id = ind.ind_kll_id".
665                                " AND ind.ind_all_id != kll.kll_all_id ) LIMIT 1)";
666                }
667                else if(CORP_ID <>0)
668                {
669                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
670                                " WHERE ( ind_crp_id = ".CORP_ID."  AND kll.kll_id = ind_kll_id".
671                                " AND ind_crp_id != kll.kll_crp_id ) LIMIT 1) ";
672                }
673                else if(PILOT_ID <>0)
674                {
675                        $sql .=" AND EXISTS (SELECT 1 FROM kb3_inv_detail".
676                                " WHERE ( ind_plt_id = ".PILOT_ID."  AND kll.kll_id = ind_kll_id".
677                                " AND ind_plt_id != kll.kll_victim_id ) LIMIT 1) ";
678                }
679                $sql .= "-- related kill count";
680                $qry = new DBQuery();
681                if(!$qry->execute($sql)) return 0;
682                $res=$qry->getRow();
683                $this->relatedkillcount_ = $res['kills'];
684                return $this->relatedkillcount_;
685        }
686
687        //Count all losses by board owner related to this kill
688        function relatedLossCount()
689        {
690                if($this->relatedlosscount_) return $this->relatedlosscount_;
691                $sql="SELECT count(kll.kll_id) as losses FROM kb3_kills kll ";
692                $sql.="WHERE kll.kll_system_id = ".$this->solarsystem_->getID().
693                        " AND kll.kll_timestamp <= '".
694                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) + 60 * 60)).
695                        "' AND kll.kll_timestamp >= '".
696                                (date('Y-m-d H:i:s',strtotime($this->timestamp_) - 60 * 60))."'";
697                if(ALLIANCE_ID <>0)
698                {
699                        $sql .="AND kll.kll_all_id = ".ALLIANCE_ID.
700                                " AND EXISTS (SELECT 1 FROM kb3_inv_detail ind".
701                                " WHERE ( kll.kll_id = ind.ind_kll_id".
702                                " AND ind.ind_all_id != ".ALLIANCE_ID." ) ) ";
703                }
704                else if(CORP_ID <>0)
705                {
706                        $sql .="AND kll_crp_id = ".CORP_ID."  AND".
707                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
708                                " WHERE ( kll.kll_id = ind_kll_id".
709                                " AND ind_crp_id != ".CORP_ID." ) ) ";
710                }
711                else if(PILOT_ID <>0)
712                {
713                        $sql .="AND kll_victim_id = ".PILOT_ID." AND".
714                                " EXISTS (SELECT 1 FROM kb3_inv_detail".
715                                " WHERE ( kll.kll_id = ind_kll_id".
716                                " AND ind_plt_id != ".PILOT_ID." ) ) ";
717                }
718                $sql .= "-- related loss count";
719                $qry = new DBQuery();
720                if(!$qry->execute($sql)) return 0;
721                $res=$qry->getRow();
722                $this->relatedlosscount_ = $res['losses'];
723                return $this->relatedlosscount_;
724        }
725
726        function countComment($kll_id)
727        {
728                if(isset($this->commentcount_)) return $this->commentcount_;
729                $qry = new DBQuery();
730                $sql = "SELECT count(id) as comments FROM kb3_comments WHERE kll_id = '$kll_id'";
731                // return 0 if query fails. May be incorrect but is harmless here
732                if(!$qry->execute($sql)) return 0;
733                $result = $qry->getRow();
734                $this->commentcount_ = $result['comments'];
735                return $result['comments'];
736        }
737
738        // Set the number of comments - used by killlist
739        function setCommentCount($comcount = 0)
740        {
741                $this->commentcount_ = $comcount;
742        }
743
744        function setID($id)
745        {
746                $this->id_ = $id;
747        }
748
749        function setTimeStamp($timestamp)
750        {
751                $this->timestamp_ = $timestamp;
752        }
753
754        function setSolarSystem($solarsystem)
755        {
756                $this->solarsystem_ = $solarsystem;
757        }
758
759        function setSolarSystemName($solarsystemname)
760        {
761                $this->solarsystemname_ = $solarsystemname;
762        }
763
764        function setSolarSystemSecurity($solarsystemsecurity)
765        {
766                $this->solarsystemsecurity_ = $solarsystemsecurity;
767        }
768
769        function setExternalID($externalid)
770        {
771                if($externalid) $this->externalid_ = $externalid;
772                else $this->externalid_ = 0;
773        }
774       
775        function setVictim($victim)
776        {
777                $this->victim_ = $victim;
778        }
779
780        function setVictimID($victimid)
781        {
782                $this->victimid_ = $victimid;
783        }
784
785        function setVictimName($victimname)
786        {
787                $this->victimname_ = $victimname;
788        }
789
790        function setVictimCorpID($victimcorpid)
791        {
792                $this->victimcorpid_ = $victimcorpid;
793        }
794
795        function setVictimCorpName($victimcorpname)
796        {
797                $this->victimcorpname_ = $victimcorpname;
798        }
799
800        function setVictimAllianceID($victimallianceid)
801        {
802                $this->victimallianceid_ = $victimallianceid;
803        }
804
805        function setVictimAllianceName($victimalliancename)
806        {
807                $this->victimalliancename_ = $victimalliancename;
808        }
809
810        function setVictimShip($victimship)
811        {
812                $this->victimship_ = $victimship;
813        }
814
815        function setVictimShipName($victimshipname)
816        {
817                $this->victimshipname_ = $victimshipname;
818        }
819
820        function setVictimShipExternalID($victimshipexternalid)
821        {
822                $this->victimshipexternalid_ = $victimshipexternalid;
823        }
824
825        function setVictimShipClassName($victimshipclassname)
826        {
827                $this->victimshipclassname_ = $victimshipclassname;
828        }
829
830        function setVictimShipValue($victimshipvalue)
831        {
832                $this->victimshipvalue_ = $victimshipvalue;
833        }
834
835        function setFBPilotID($fbpilotid)
836        {
837                $this->fbpilotid_ = $fbpilotid;
838        }
839
840        function setFBPilotName($fbpilotname)
841        {
842                $npc = strpos($fbpilotname, "#");
843                if ($npc === false)
844                {
845                        $this->fbpilotname_ = $fbpilotname;
846                }
847                else
848                {
849                        $name = explode("#", $fbpilotname);
850                        $plt = new Item($name[2]);
851                        $this->fbpilotname_ = $plt->getName();
852                }
853        }
854
855        function setFBCorpID($fbcorpid)
856        {
857                $this->fbcorpid_ = $fbcorpid;
858        }
859
860        function setFBCorpName($fbcorpname)
861        {
862                $this->fbcorpname_ = $fbcorpname;
863        }
864
865        function setFBAllianceID($fballianceid)
866        {
867                $this->fballianceid_ = $fballianceid;
868        }
869
870        function setFBAllianceName($fballiancename)
871        {
872                $this->fballiancename_ = $fballiancename;
873        }
874        function setKillPoints($killpoints)
875        {
876                $this->killpoints_ = $killpoints;
877        }
878
879        function setISKLoss($isk)
880        {
881                $this->iskloss_ = $isk;
882        }
883
884        function calculateISKLoss()
885        {
886                $value = 0;
887                foreach($this->destroyeditems_ as $itd)
888                {
889                        $value += $itd->getValue() * $itd->getQuantity();
890                }
891                if(config::get('kd_droptototal'))
892                {
893                        foreach($this->droppeditems_ as $itd)
894                        {
895                                $value += $itd->getValue() * $itd->getQuantity();
896                        }
897                }
898                $value += $this->getVictimShip()->getPrice();
899                $this->iskloss_ = $value;
900                return $value;
901        }
902
903        function calculateKillPoints()
904        {
905                $ship = $this->getVictimShip();
906                $shipclass = $ship->getClass();
907                $vicpoints = $shipclass->getPoints();
908                $maxpoints = round($vicpoints * 1.2);
909
910                foreach ($this->involvedparties_ as $inv)
911                {
912                        $shipinv = $inv->getShip();
913                        $shipclassinv = $shipinv->getClass();
914                        $invpoints += $shipclassinv->getPoints();
915                }
916
917                $gankfactor = $vicpoints / ($vicpoints + $invpoints);
918                $points = ceil($vicpoints * ($gankfactor / 0.75));
919
920                if ($points > $maxpoints) $points = $maxpoints;
921
922                $points = round($points, 0);
923                return $points;
924        }
925
926        function add($id = null)
927        {
928                if (!$this->solarsystem_->getID())
929                {
930                        echo 'INTERNAL ERROR; SOLARSYSTEM NOT FOUND; PLEASE CONTACT A DEV WITH THIS MESSAGE<br/>';
931                        var_dump($this->solarsystem_);
932                        var_dump($this->solarsystemname_);
933                        return 0;
934                }
935
936                $dupe = $this->getDupe(true);
937                if ($dupe == 0)
938                {
939                        $this->realadd();
940                }
941                elseif (config::get('readd_dupes'))
942                {
943                        $this->dupeid_ = $dupe;
944                        $this->id_ = $dupe;
945                        $this->remove(false);
946                        $this->realadd($dupe);
947                        $this->id_ = -1;
948                }
949                else
950                {
951                        $this->dupeid_ = $dupe;
952                        $this->id_ = -1;
953                }
954                return $this->id_;
955        }
956
957        function realadd($id = null)
958        {
959                if ( $this->timestamp_ == "" || !$this->victimid_ || !$this->victimship_->getID() || !$this->solarsystem_->getID() ||
960                !$this->victimallianceid_ || !$this->victimcorpid_ || !$this->getFBAllianceID() || !$this->getFBCorpID() ||
961                !$this->getFBPilotID() ) return 0;
962                if ($id == null)
963                {
964                        $qid = 'null';
965                }
966                else
967                {
968                        $qid = $id;
969                }
970                if (!$this->dmgtaken)
971                {
972                        $this->dmgtaken = 0;
973                }
974
975                $qry = new DBQuery();
976                $sql = "INSERT INTO kb3_kills
977            (kll_id , kll_timestamp , kll_victim_id , kll_all_id , kll_crp_id , kll_ship_id , kll_system_id , kll_fb_plt_id , kll_points , kll_dmgtaken, kll_external_id, kll_isk_loss)
978            VALUES (".$qid.",
979                    date_format('".$this->timestamp_."', '%Y.%m.%d %H:%i:%s'),
980            ".$this->victimid_.",
981            ".$this->victimallianceid_.",
982            ".$this->victimcorpid_.",
983            ".$this->victimship_->getID().",
984            ".$this->solarsystem_->getID().",
985            ".$this->getFBPilotID().",
986            ".$this->calculateKillPoints().",
987            ".$this->dmgtaken.", ";
988                if($this->externalid_) $sql .= $this->externalid_.", ";
989                else $sql .= "NULL, ";
990        $sql .= $this->calculateISKLoss()." )";
991                $qry->autocommit(false);
992                if(!$qry->execute($sql))
993                {
994                        $qry->rollback();
995                        $qry->autocommit(true);
996                        //If the query is causing errors here there's no point going on
997                        return false;
998                }
999
1000                if ($id)
1001                {
1002                        $this->id_ = $id;
1003                }
1004                else
1005                {
1006                        $this->id_ = $qry->getInsertID();
1007                }
1008                if(!$this->id_)
1009                {
1010                        $qry->rollback();
1011                        $qry->autocommit(true);
1012                        return false;
1013                }
1014                // involved
1015                $order = 0;
1016                $invall = array();
1017                $invcrp = array();
1018                $invplt = array();
1019                $involveddsql = 'insert into kb3_inv_detail
1020                    (ind_kll_id, ind_plt_id, ind_sec_status, ind_all_id, ind_crp_id, ind_shp_id, ind_wep_id, ind_order, ind_dmgdone )
1021                    values ';
1022                $notfirstd = false;
1023                foreach ($this->involvedparties_ as $inv)
1024                {
1025                        $ship = $inv->getShip();
1026                        $weapon = $inv->getWeapon();
1027                        if (!$inv->getPilotID() || $inv->getSecStatus() == "" || !$inv->getAllianceID() || !$inv->getCorpID() || !$ship->getID() || !$weapon->getID())
1028                        {
1029                                $this->remove();
1030                                return 0;
1031                        }
1032
1033                        if (!$inv->dmgdone_)
1034                        {
1035                                $inv->dmgdone_ = 0;
1036                        }
1037                        if($notfirstd) $involveddsql .= ", ";
1038                        $involveddsql .= "( ".$this->getID().", ".$inv->getPilotID().", '".$inv->getSecStatus()."', "
1039                                .$inv->getAllianceID().", ".$inv->getCorpID().", ".$ship->getID().", "
1040                                .$weapon->getID().", ".$order++.", ".$inv->dmgdone_.")";
1041                        $notfirstd = true;
1042
1043                }
1044                if($notfirstd && !$qry->execute($involveddsql))
1045                {
1046                        $qry->rollback();
1047                        $qry->autocommit(true);
1048                        return false;
1049                }
1050
1051                // destroyed
1052                $notfirstitd=false;
1053                $itdsql = "insert into kb3_items_destroyed (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
1054                foreach ($this->destroyeditems_ as $dest)
1055                {
1056                        $item = $dest->getItem();
1057                        $loc_id = $dest->getLocationID();
1058                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
1059                        {
1060                                trigger_error('error with destroyed item.', E_USER_WARNING);
1061                                var_dump($dest);exit;
1062                                continue;
1063                        }
1064
1065                        if($notfirstitd) $itdsql .= ", ";
1066                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
1067                        $notfirstitd = true;
1068                }
1069                if($notfirstitd &&!$qry->execute($itdsql))
1070                {
1071                        $qry->rollback();
1072                        $qry->autocommit(true);
1073                        return false;
1074                }
1075
1076                // dropped
1077                $notfirstitd=false;
1078                $itdsql = "insert into kb3_items_dropped (itd_kll_id, itd_itm_id, itd_quantity, itd_itl_id) values ";
1079                foreach ($this->droppeditems_ as $dest)
1080                {
1081                        $item = $dest->getItem();
1082                        $loc_id = $dest->getLocationID();
1083                        if (!is_numeric($this->getID()) || !is_numeric($item->getID()) || !is_numeric($dest->getQuantity()) || !is_numeric($loc_id))
1084                        {
1085                                trigger_error('error with dropped item.', E_USER_WARNING);
1086                                var_dump($dest);exit;
1087                                continue;
1088                        }
1089
1090                        if($notfirstitd) $itdsql .= ", ";
1091                        $itdsql .= "( ".$this->getID().", ".$item->getID().", ".$dest->getQuantity().", ".$loc_id." )";
1092                        $notfirstitd = true;
1093                }
1094                if($notfirstitd &&!$qry->execute($itdsql))
1095                {
1096                        $qry->rollback();
1097                        $qry->autocommit(true);
1098                        return false;
1099                }
1100                $qry->autocommit(true);
1101                // call the event that we added this mail
1102                event::call('killmail_added', $this);
1103                return $this->id_;
1104        }
1105
1106        function remove($delcomments = true)
1107        {
1108                if (!$this->id_)
1109                        return;
1110
1111                event::call('killmail_delete', $this);
1112
1113                $qry = new DBQuery();
1114                $qry->execute("delete from kb3_kills where kll_id = ".$this->id_);
1115                $qry->execute("delete from kb3_inv_detail where ind_kll_id = ".$this->id_);
1116//              $qry->execute("delete from kb3_inv_all where ina_kll_id = ".$this->id_);
1117//              $qry->execute("delete from kb3_inv_crp where inc_kll_id = ".$this->id_);
1118//              $qry->execute("delete from kb3_inv_plt where inp_kll_id = ".$this->id_);
1119                $qry->execute("delete from kb3_items_destroyed where itd_kll_id = ".$this->id_);
1120                $qry->execute("delete from kb3_items_dropped where itd_kll_id = ".$this->id_);
1121                // Don't remove comments when readding a kill
1122                if ($delcomments)
1123                {
1124                        $qry->execute("delete from kb3_comments where kll_id = ".$this->id_);
1125                }
1126        }
1127
1128        function addInvolvedParty($involved)
1129        {
1130                array_push($this->involvedparties_, $involved);
1131        }
1132
1133        function addDestroyedItem($destroyed)
1134        {
1135                array_push($this->destroyeditems_, $destroyed);
1136/*
1137                // Ensure each item type is added once.
1138                echo "x".($destroyed->getLocationID()).($destroyed->getItem()->getID())."x ";
1139                if($this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()])
1140                        $this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()]->quantity_ .= $destroyed->getQuantity();
1141                else
1142                        $this->destroyeditems_[$destroyed->getLocationID().$destroyed->getItem()->getID()] = $destroyed;
1143*/
1144        }
1145
1146        function addDroppedItem($dropped)
1147        {
1148                array_push($this->droppeditems_, $dropped);
1149        }
1150}
1151
1152class InvolvedParty
1153{
1154        function InvolvedParty($pilotid, $corpid, $allianceid, $secstatus, $ship, $weapon)
1155        {
1156                $this->pilotid_ = $pilotid;
1157                $this->corpid_ = $corpid;
1158                $this->allianceid_ = $allianceid;
1159                $this->secstatus_ = $secstatus;
1160                $this->ship_ = $ship;
1161                $this->weapon_ = $weapon;
1162        }
1163
1164        function getPilotID()
1165        {
1166                return $this->pilotid_;
1167        }
1168
1169        function getCorpID()
1170        {
1171                return $this->corpid_;
1172        }
1173
1174        function getAllianceID()
1175        {
1176                return $this->allianceid_;
1177        }
1178
1179        function getSecStatus()
1180        {
1181                return $this->secstatus_;
1182        }
1183
1184        function getShip()
1185        {
1186                return $this->ship_;
1187        }
1188
1189        function getWeapon()
1190        {
1191                return $this->weapon_;
1192        }
1193}
1194
1195class DestroyedItem
1196{
1197        function DestroyedItem($item, $quantity, $location, $locationID = null)
1198        {
1199                $this->item_ = $item;
1200                $this->quantity_ = $quantity;
1201                $this->location_ = $location;
1202                $this->locationID_ = $locationID;
1203        }
1204
1205        function getItem()
1206        {
1207                return $this->item_;
1208        }
1209
1210        function getQuantity()
1211        {
1212                if ($this->quantity_ == "") $this->quantity = 1;
1213                return $this->quantity_;
1214        }
1215        //! Deprecated function to support old mods.
1216        function getFormatttedValue()
1217        {
1218                return getFormattedValue();
1219        }
1220
1221        function getFormattedValue()
1222        {
1223                if (!isset($this->value))
1224                {
1225                        $this->getValue();
1226                }
1227                if ($this->value > 0)
1228                {
1229                        $value = $this->value * $this->getQuantity();
1230                        // Value Manipulation for prettyness.
1231                        if (strlen($value) > 6) // Is this value in the millions?
1232                        {
1233                                $formatted = round($value / 1000000, 2);
1234                                $formatted = number_format($formatted, 2);
1235                                $formatted = $formatted." M";
1236                        }
1237                        elseif (strlen($value) > 3) // 1000's ?
1238                        {
1239                                $formatted = round($value / 1000, 2);
1240
1241                                $formatted = number_format($formatted, 2);
1242                                $formatted = $formatted." K";
1243                        }
1244                        else
1245                        {
1246                                $formatted = number_format($value, 2);
1247                                $formatted = $formatted." isk";
1248                        }
1249                }
1250                else
1251                {
1252                        $formatted = "0 isk";
1253                }
1254                return $formatted;
1255        }
1256
1257        function getValue()
1258        {
1259                if ($this->value)
1260                {
1261                        return $this->value;
1262                }
1263                if ($this->item_->row_['itm_value'])
1264                {
1265                        $this->value = $this->item_->row_['itm_value'];
1266                        return $this->item_->row_['itm_value'];
1267                }
1268                elseif ($this->item_->row_['baseprice'])
1269                {
1270                        $this->value = $this->item_->row_['baseprice'];
1271                        return $this->item_->row_['baseprice'];
1272                }
1273                if (DB_USE_CCP)
1274                {
1275                        $this->value = 0;
1276                        $qry = new DBQuery();
1277                        $qry->execute("select basePrice, price
1278                        from kb3_invtypes
1279                        left join kb3_item_price on kb3_invtypes.typeID=kb3_item_price.typeID
1280                        where kb3_invtypes.typeID='".$this->item_->getID()."'");
1281                        if ($row = $qry->getRow())
1282                        {
1283                                if ($row['price'])
1284                                {
1285                                        $this->value = $row['price'];
1286                                }
1287                                else
1288                                {
1289                                        $this->value = $row['basePrice'];
1290                                }
1291                        }
1292                        return $this->value;
1293                }
1294
1295                //returns the value of an item
1296                $value = 0;                             // Set 0 value incase nothing comes back
1297                $id = $this->item_->getID(); // get Item ID
1298                $qry = new DBQuery();
1299                $qry->execute("select itm_value from kb3_items where itm_id= '".$id."'");
1300                $row = $qry->getRow();
1301                $value = $row['itm_value'];
1302                if ($value == '')
1303                {
1304                        $value = 0;
1305                }
1306                return $value;
1307        }
1308
1309        function getLocationID()
1310        {
1311                if(!is_null($this->locationID_)) return $this->locationID_;
1312                $id = false;
1313                if (strlen($this->location_) < 2)
1314                {
1315                        $id = $this->item_->getSlot();
1316                }
1317                else
1318                {
1319                        $qry = new DBQuery();
1320                        $qry->execute("select itl_id from kb3_item_locations where itl_location = '".$this->location_."'");
1321                        $row = $qry->getRow();
1322                        $id = $row['itl_id'];
1323                }
1324                return $id;
1325        }
1326}
1327
1328class DroppedItem extends DestroyedItem
1329{
1330        function DroppedItem($item, $quantity, $location, $locationID = null)
1331        {
1332                $this->item_ = $item;
1333                $this->quantity_ = $quantity;
1334                $this->location_ = $location;
1335                $this->locationID_ = $locationID;
1336        }
1337}
1338
1339class DetailedInv extends InvolvedParty
1340{
1341        function DetailedInv($pilot, $secstatus, $corp, $alliance, $ship, $weapon)
1342        {
1343                $this->pilot_ = $pilot;
1344                $this->secstatus_ = $secstatus;
1345                $this->corp_ = $corp;
1346                $this->alliance_ = $alliance;
1347                $this->ship_ = $ship;
1348                $this->weapon_ = $weapon;
1349        }
1350
1351        function getPilot()
1352        {
1353                return $this->pilot_;
1354        }
1355
1356        function getPilotID()
1357        {
1358                return $this->pilot_->getID();
1359        }
1360
1361        function getCorp()
1362        {
1363                return $this->corp_;
1364        }
1365
1366        function getCorpID()
1367        {
1368                return $this->corp_->getID();
1369        }
1370
1371        function getAlliance()
1372        {
1373                return $this->alliance_;
1374        }
1375
1376        function getAllianceID()
1377        {
1378                return $this->alliance_->getID();
1379        }
1380
1381}
1382?>
Note: See TracBrowser for help on using the browser.