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

Revision 462, 9.4 KB (checked in by kovell, 13 years ago)

Fixes: Pilot::lookup() sets corp id correctly.

Line 
1<?php
2require_once('class.corp.php');
3require_once('class.item.php');
4require_once('class.thumb.php');
5
6//! Creates a new Pilot or fetches an existing one from the database.
7class Pilot
8{
9    //! Create a new Pilot object from the given $id.
10
11    /*!
12     * \param $id The pilot ID.
13         * \param $externalIDFlag whether the id is external or internal
14     */
15    function Pilot($id = 0, $externalIDFlag = false)
16    {
17        if($externalIDFlag) $this->externalid_=intval($id);
18        else $this->id_ = intval($id);
19    }
20        //! Return the alliance ID.
21    function getID()
22    {
23            if($this->id_) return $this->id_;
24            elseif($this->externalid_)
25            {
26                    $this->execQuery();
27                    return $this->id_;
28            }
29            else return 0;
30    }
31        //! Return the pilot's CCP ID.
32    function getExternalID()
33    {
34                if($this->externalid_) return $this->externalid_;
35                elseif($this->id_)
36                {
37                        $this->execQuery();
38                        if($this->externalid_) return $this->externalid_;
39                        require_once("class.api.php");
40                        $api = new Api();
41                        $id = $api->getCharId($this->getName());
42                        if ($id > 0) $this->setCharacterID($id);
43                        return $this->externalid_;
44                }
45                else return 0;
46    }
47    //! Return the pilot name.
48    function getName()
49    {
50        if(!$this->name_) $this->execQuery();
51        $pos = strpos($this->name_, "#");
52        if ($pos === false)
53        {
54            return $this->name_;
55        }
56        else
57        {
58            $name = explode("#", $this->name_);
59            $item = new Item($name[2]);
60            return $item->getName();
61        }
62    }
63    //! Return the URL for the pilot's portrait.
64
65    /*!
66     * \param $size The desired portrait size.
67         * \return URL for a portrait.
68     */
69    function getPortraitURL($size = 64)
70    {
71                if(!$this->externalid_) $this->execQuery();
72        if (!$this->externalid_)
73        {
74                return '?a=thumb&amp;id='.$this->id_.'&amp;size='.$size.'&amp;int=1';
75        }
76        else
77        {
78                        if( file_exists('cache/portraits/'.$this->externalid_.'_'.$size.'.jpg'))
79                                return 'cache/portraits/'.$this->externalid_.'_'.$size.'.jpg';
80                        else return '?a=thumb&amp;id='.$this->externalid_.'&amp;size='.$size;
81        }
82    }
83    //! Fetch the pilot details from the database using the id given on construction.
84    function execQuery()
85    {
86        if (!$this->qry_)
87        {
88                        if(!$this->externalid_ && !$this->id_)
89                        {
90                                        $this->valid_ = false;
91                                        return;
92                        }
93            $this->qry_ = new DBQuery();
94            $this->sql_ = 'select * from kb3_pilots plt, kb3_corps crp, kb3_alliances ali
95                               where crp.crp_id = plt.plt_crp_id
96                               and ali.all_id = crp.crp_all_id ';
97            if($this->externalid_) $this->sql_ .= 'and plt.plt_externalid = '.$this->externalid_;
98            else $this->sql_ .= 'and plt.plt_id = '.$this->id_;
99            $this->qry_->execute($this->sql_) or die($this->qry_->getErrorMsg());
100            //$this->row_ = $this->qry_->getRow();
101            $row = $this->qry_->getRow();
102            if (!$row)
103                $this->valid_ = false;
104            else
105            {
106                $this->valid_ = true;
107                $this->id_ = $row['plt_id'];
108                $this->name_ = $row['plt_name'];
109                $this->corp_ = $row['plt_crp_id'];
110                $this->externalid_ = intval($row['plt_externalid']);
111            }
112        }
113    }
114    //! Return the corporation this pilot is a member of.
115
116    /*!
117         * \return Corporation object
118     */
119    function getCorp()
120    {
121        if(!$this->corp_) $this->execQuery();
122        return new Corporation($this->corp_);
123    }
124        //! Check if the id given on construction is valid.
125
126    /*!
127         * \return boolean - true for exists.
128     */
129    function exists()
130    {
131        $this->execQuery();
132        return $this->valid_;
133    }
134    //! Add a new pilot to the database or update the details of an existing one.
135
136    /*!
137     * \param $name Pilot name
138         * \param $corp Corporation object for this pilot's corporation
139         * \param $timestamp time this pilot's corp was updated
140         * \param $externalID CCP external id
141     */
142    function add($name, $corp, $timestamp, $externalID = 0)
143    {
144        $qry = new DBQuery(true);
145        $qry->execute("select *
146                        from kb3_pilots
147                       where plt_name = '".slashfix($name)."'");
148
149        if ($qry->recordCount() == 0)
150        {
151                        $externalID = intval($externalID);
152                        // If no external id is given then look it up.
153                        if(!$externalID)
154                        {
155                                $pilotname = str_replace(" ", "%20", $name );
156                                require_once("common/includes/class.eveapi.php");
157                                $myID = new API_NametoID();
158                                $myID->setNames($pilotname);
159                                $myID->fetchXML();
160                                $myNames = $myID->getNameData();
161                                $externalID = $myNames[0]['characterID'];
162                        }
163                        // If we have an external id then check it isn't already in use.
164                        // If we find it then update the old corp with the new name and
165                        // return.
166                        if($externalID)
167                        {
168                                $qry->execute("SELECT * FROM kb3_pilots WHERE plt_externalid = ".$externalID);
169                                if ($qry->recordCount() > 0)
170                                {
171                                        $row = $qry->getRow();
172                                        $qry->execute("UPDATE kb3_pilots SET plt_name = '".slashfix($name)."' WHERE plt_externalid = ".$externalID);
173
174                                        $this->id_ = $row['plt_id'];
175                                        $this->name_ = slashfix($name);
176                                        $this->externalid_ = $row['plt_externalid'];
177                                        $this->corp_ = $row['plt_crp_id'];
178
179                                        // Now check if the corp needs to be updated.
180                                        if ($row['plt_crp_id'] != $corp->getID() && $this->isUpdatable($timestamp))
181                                        {
182                                                $qry->execute("update kb3_pilots
183                                                                         set plt_crp_id = ".$corp->getID().",
184                                                                                 plt_updated = date_format( '".$timestamp."', '%Y.%m.%d %H:%i:%s') where plt_id = ".$this->id_);
185                                        }
186                                        return $this->id_;
187                                }
188                        }
189                        if($externalID)
190                                $qry->execute("insert into kb3_pilots (plt_id, plt_name, plt_crp_id, plt_externalid, plt_updated) values ( null,
191                                                        '".slashfix($name)."',
192                                                        ".$corp->getID().",
193                                                        ".intval($externalID).",
194                                                        date_format( '".$timestamp."', '%Y.%m.%d %H:%i:%s'))");
195                        else
196                                $qry->execute("insert into kb3_pilots (plt_id, plt_name, plt_crp_id, plt_updated) values ( null,
197                                                        '".slashfix($name)."',
198                                                        ".$corp->getID().",
199                                                        date_format( '".$timestamp."', '%Y.%m.%d %H:%i:%s'))");
200            $this->id_ = $qry->getInsertID();
201        }
202        else
203        {
204            $row = $qry->getRow();
205            $this->id_ = $row['plt_id'];
206                        $this->updated_ = strtotime($row['plt_updated']." UTC");
207                        if(!$this->updated_) $this->updated_ = 0;
208            if ($this->isUpdatable($timestamp) && $row['plt_crp_id'] != $corp->getID())
209            {
210                $qry->execute("update kb3_pilots
211                             set plt_crp_id = ".$corp->getID().",
212                                 plt_updated = date_format( '".$timestamp."', '%Y.%m.%d %H:%i:%s') where plt_id = ".$this->id_);
213            }
214            if (!$row['plt_externalid'] && $externalID) $this->setCharacterID($externalID);
215        }
216
217        return $this->id_;
218    }
219    //! Return whether this pilot was updated before the given timestamp.
220
221    /*!
222     * \param $timestamp A timestamp to compare this pilot's details with.
223         * \return boolean - true if update time was before the given timestamp.
224     */
225    function isUpdatable($timestamp)
226    {
227                $timestamp = preg_replace("/\./","-",$timestamp);
228                if(isset($this->updated_))
229                {
230                        if(is_null($this->updated_) || strtotime($timestamp." UTC") > $this->updated_) return true;
231                        else return false;
232                }
233        $qry = new DBQuery(true);
234        $qry->execute("select plt_id
235                        from kb3_pilots
236                       where plt_id = ".$this->id_."
237                         and ( plt_updated < date_format( '".$timestamp."', '%Y.%m.%d %H:%i')
238                               or plt_updated is null )");
239
240        return $qry->recordCount() == 1;
241    }
242        //! Set the CCP external ID for this pilot.
243
244    /*!
245     * \param $externalID CCP external ID for this pilot.
246     */
247    function setCharacterID($externalID)
248    {
249        if (!intval($externalID))
250        {
251            return false;
252        }
253        $this->externalid_ = intval($externalID);
254        $qry = new DBQuery(true);
255                $qry->execute("SELECT plt_id FROM kb3_pilots WHERE plt_externalid = ".$this->externalid_." AND plt_id <> ".$this->id_);
256                if($qry->recordCount())
257                {
258                        $result = $qry->getRow();
259                        $old_id = $result['plt_id'];
260                        $qry->execute("UPDATE kb3_pilots SET plt_id = 0 where plt_id = ".$old_id);
261                }
262        $qry->execute("update kb3_pilots set plt_externalid = ".$this->externalid_."
263                       where plt_id = ".$this->id_);
264    }
265    //! Lookup a pilot name and set this object to use the details found.
266
267    /*!
268     * \param $name The pilot name to look up.
269     */
270    function lookup($name)
271    {
272        $qry = new DBQuery();
273        $qry->execute("select * from kb3_pilots
274                       where plt_name = '".slashfix($name)."'");
275        $row = $qry->getRow();
276        if ($row['plt_id']) $this->id_ = $row['plt_id'];
277                $this->name_ = $row['plt_name'];
278                $this->externalid_ = intval($row['plt_externalid']);
279                $this->corp_ = $row['plt_crp_id'];
280    }
281}
Note: See TracBrowser for help on using the browser.