d5f428f6b42dec530d7095c763974e7815793243
2 /***************************************************************************
3 * Copyright (C) 2003-2007 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
22 /** Class to store per user and per category files
38 public function __construct($forlife, $category, $filename = null
)
40 $this->file_id
= $filename;
41 $this->category
= $category;
42 $this->forlife
= $forlife;
43 $this->filename
= $this->makeFilename($this->file_id
);
44 $this->checkContentType();
47 private function makeFilename($file_id)
50 $filename = $globals->spoolroot
. '/spool/uploads/temp/';
51 if (!file_exists($filename)) {
52 if (!mkdir($filename)) {
53 trigger_error('can\'t create upload directory: ' . $filename, E_USER_ERROR
);
56 $filename .= $this->forlife
. '-' . $this->category
;
58 $filename .= '-' . $file_id;
63 private function checkContentType()
65 if ($this->exists()) {
66 $this->type
= trim(mime_content_type($this->filename
));
70 public function upload(array &$file)
72 if (!is_uploaded_file($file['tmp_name'])) {
74 } else if (!move_uploaded_file($file['tmp_name'], $this->filename
)) {
77 $this->checkContentType();
81 public function copyFrom($filename)
83 if (!copy($filename, $this->filename
)) {
86 $this->checkContentType();
90 public function download($url)
92 $data = file_get_contents($url);
96 if (!file_put_contents($this->filename
, $data)) {
99 $this->checkContentType();
103 static public function &get(array &$file, $forlife, $category, $uniq = false
)
105 $upload = new PlUpload($forlife, $category, $uniq ? null
: $file['name']);
106 if (!$upload->upload($file)) {
114 @unlink
($this->filename
);
118 public function rename($fn)
120 if (!$this->file_id
) {
123 $filename = $this->makeFilename($fn);
124 if (rename($this->filename
)) {
125 $this->filename
= $filename;
126 $this->file_id
= $fn;
133 public function exists()
135 return file_exists($this->filename
);
138 static public function listFiles($forlife = '*', $category = '*', $basename = false
)
141 $filename = $globals->spoolroot
. '/spool/uploads/temp/';
142 $filename .= $forlife . '-' . $category;
143 $files = glob($filename);
145 array_walk($files, 'basename');
150 static public function clear($user = '*', $category = '*')
152 $files = PlUpload
::listFiles($user, $category, false
);
153 array_walk($files, 'unlink');
156 public function contentType()
161 public function imageInfo()
163 return getimagesize($this->filename
);
166 public function resizeImage($max_x = -1, $max_y = -1, $min_x = 0, $min_y = 0, $maxsize = -1)
168 if (!$this->exists() ||
strpos($this->type
, 'image/') !== 0) {
169 trigger_error('not an image', E_USER_NOTICE
);
172 $image_infos = $this->imageInfo();
173 if (empty($image_infos)) {
174 trigger_error('invalid image', E_USER_NOTICE
);
177 list($this->x
, $this->y
, $mimetype) = $image_infos;
178 if ($mimetype < 1 ||
$mimetype > 3) { // 1 - gif, 2 - jpeg, 3 - png
179 trigger_error('unknown image type', E_USER_NOTICE
);
188 if ($maxsize == -1) {
189 $maxsize = filesize($this->filename
);
191 if (filesize($this->filename
) > $maxsize ||
$this->x
> $max_x ||
$this->y
> $max_y
192 ||
$this->x
< $min_x ||
$this->y
< $min_y) {
193 $img = imagecreatefromstring(file_get_contents($this->filename
));
195 trigger_error('too large image, can\'t be resized', E_USER_NOTICE
);
202 $ny = intval($ny*$max_x/$nx);
206 $nx = intval($nx*$max_y/$ny);
210 $ny = intval($ny*$min_x/$nx);
214 $nx = intval($nx * $min_y/$ny);
220 $img2 = imagecreatetruecolor($nx, $ny);
221 imagecopyresampled($img2, $img, 0, 0, 0, 0, $nx, $ny, $this->x
, $this->y
);
222 imagejpeg($img2, $this->filename
, $comp);
225 } while (filesize($this->filename
) > $maxsize && $comp > 0);
226 $this->type
= 'image/jpeg';
233 public function getContents()
235 if ($this->exists()) {
236 return file_get_contents($this->filename
);
241 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: