root/branch/rev3/common/includes/class.thumb.php @ 245

Revision 245, 6.2 KB (checked in by exi, 13 years ago)

Fixed SQL Query caching.
Changed userportraits to use img/portraits.
Added JS code for IE/PNG-fix.

Line 
1<?php
2
3class thumb
4{
5    function thumb($str_id, $size, $type = 'pilot')
6    {
7        $this->_id = $str_id;
8        $this->_size = $size;
9        $this->_type = $type;
10        $this->_encoding = 'jpeg';
11
12        $this->validate();
13    }
14
15    function display()
16    {
17        if (!$this->isCached())
18        {
19            if (!$this->genCache())
20            {
21                return false;
22            }
23        }
24
25        if (headers_sent())
26        {
27            echo 'Error occured.<br/>';
28            return false;
29        }
30        if ($this->_encoding == 'jpeg')
31        {
32            header("Content-Type: image/jpeg");
33            readfile($this->_thumb);
34        }
35        elseif ($this->_encoding == 'png')
36        {
37            header("Content-Type: image/png");
38            readfile($this->_thumb);
39        }
40    }
41
42    function validate()
43    {
44        if (!$this->_size)
45        {
46            $this->_size = 32;
47        }
48        switch ($this->_type)
49        {
50            case 'corp':
51                $this->_id = preg_replace('/[^a-z0-9]/', '', $this->_id);
52                break;
53            case 'alliance':
54                $this->_id = preg_replace('/[^a-zA-Z0-9]/', '', $this->_id);
55                if (!strlen($this->_id))
56                {
57                    $this->_id = 'default';
58                }
59                break;
60            default:
61                $this->_type = 'pilot';
62                $this->_id = intval($this->_id);
63        }
64    }
65
66    function isCached()
67    {
68        switch ($this->_type)
69        {
70            case 'pilot':
71                $this->_thumb = 'cache/portraits/'.$this->_id.'_'.$this->_size.'.jpg';
72                break;
73            case 'corp':
74                $this->_thumb = 'cache/corps/'.$this->_id.'_'.$this->_size.'.jpg';
75                break;
76            case 'alliance':
77                $this->_thumb = 'cache/corps/all'.$this->_id.'_'.$this->_size.'.png';
78                break;
79        }
80
81        if (file_exists($this->_thumb))
82        {
83            return true;
84        }
85    }
86
87    function genCache()
88    {
89        switch ($this->_type)
90        {
91            case 'pilot':
92                $this->genPilot();
93                break;
94            case 'corp':
95                $this->genCorp();
96                break;
97            case 'alliance':
98                $this->genAlliance();
99                break;
100        }
101        return true;
102    }
103
104    function genPilot()
105    {
106        if (file_exists('cache/portraits/'.$this->_id.'_256.jpg'))
107        {
108            $img = imagecreatefromjpeg('cache/portraits/'.$this->_id.'_256.jpg');
109        }
110        // 20070911 - Gate: Support EVE/Capture/Portraits images
111        elseif (file_exists('img/portraits/'.$this->_id.'.jpg'))
112        {
113                        $img = imagecreatefromjpeg('img/portraits/'.$this->_id.'.jpg');
114        }
115        else
116        {
117            if ($this->_id)
118            {
119                // check for a valid, known external id
120                $qry = new DBQuery();
121                $qry->execute('SELECT plt_externalid FROM kb3_pilots WHERE plt_externalid = '.$this->_id.' LIMIT 1');
122                $row = $qry->getRow();
123                if (!$id = $row['plt_externalid'])
124                {
125                    // there is no such id so set it to 0
126                    $this->_id = 0;
127                    $this->_thumb = 'img/portrait_0_'.$this->_size.'.jpg';
128                    return;
129                }
130            }
131
132            // in case of a dead eve server we only want to wait 5 seconds
133            @ini_set('default_socket_timeout', 5);
134            $file = @file_get_contents('http://img.eve.is/serv.asp?s=256&c='.$this->_id);
135            if ($img = @imagecreatefromstring($file))
136            {
137                $fp = fopen('cache/portraits/'.$this->_id.'_256.jpg', 'w');
138                fwrite($fp, $file);
139                fclose($fp);
140            }
141            else
142            {
143                // try alternative access via fsockopen
144                // happens if allow_url_fopen wrapper is false
145                require_once('class.http.php');
146
147                $url = 'http://img.eve.is/serv.asp?s=256&c='.$this->_id;
148                $http = new http_request($url);
149                $file = $http->get_content();
150
151                if ($img = @imagecreatefromstring($file))
152                {
153                    $fp = fopen('cache/portraits/'.$id.'_256.jpg', 'w');
154                    fwrite($fp, $file);
155                }
156            }
157        }
158
159        if ($img)
160        {
161            $newimg = imagecreatetruecolor($this->_size, $this->_size);
162            $srcwidth = imagesx($img);
163            $srcheight = imagesy($img);
164
165            imagecopyresampled($newimg, $img, 0, 0, 0, 0, $this->_size, $this->_size, $srcwidth, $srcheight);
166            imagejpeg($newimg, $this->_thumb, 90);
167            imagedestroy($newimg);
168        }
169        else
170        {
171            // fallback to a portrait with red !
172            $this->_thumb = 'img/portrait_0_'.$this->_size.'.jpg';
173        }
174    }
175
176    function genCorp()
177    {
178        if (!file_exists('img/corps/'.$this->_id.'.jpg'))
179        {
180            $this->_id = 0;
181        }
182        $img = imagecreatefromjpeg('img/corps/'.$this->_id.'.jpg');
183        if ($img)
184        {
185            $newimg = imagecreatetruecolor($this->_size, $this->_size);
186            $oldx = imagesx($img);
187            $oldy = imagesy($img);
188            imagecopyresampled($newimg, $img, 0, 0, 0, 0, $this->_size, $this->_size, $oldx, $oldy);
189            imagejpeg($newimg, $this->_thumb, 90);
190        }
191    }
192
193    function genAlliance()
194    {
195        if (!file_exists('img/alliances/'.$this->_id.'.png'))
196        {
197            $this->_id = 0;
198        }
199        $img = imagecreatefromjpeg('img/alliances/'.$this->_id.'.png');
200        if ($img)
201        {
202            $newimg = imagecreatetruecolor($this->_size, $this->_size);
203            $oldx = imagesx($img);
204            $oldy = imagesy($img);
205            imagecopyresampled($newimg, $img, 0, 0, 0, 0, $this->_size, $this->_size, $oldx, $oldy);
206            imagepng($newimg, $this->_thumb);
207        }
208    }
209}
210?>
Note: See TracBrowser for help on using the browser.