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

Revision 460, 37.0 KB (checked in by kovell, 13 years ago)

Fix: pilot corp changes update properly. Unused code removed.

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