Convert source code to UTF-8
[platal.git] / include / validations / photos.inc.php
CommitLineData
0337d704 1<?php
2/***************************************************************************
5ddeb07c 3 * Copyright (C) 2003-2007 Polytechnique.org *
0337d704 4 * http://opensource.polytechnique.org/ *
5 * *
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. *
10 * *
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. *
15 * *
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 *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
22// {{{ class PhotoReq
23
24class PhotoReq extends Validate
25{
26 // {{{ properties
63528107 27
0337d704 28 var $mimetype;
29 var $data;
30 var $x;
31 var $y;
32
33 var $unique = true;
34
a7de4ef7 35 var $rules = "Refuser les photos copyrightées, de mineurs, ou ayant
36 un caractère pornographique, violent, etc... Si une photo est mal
37 cadrée (20% de photo et 80% de blanc par exemple), si c'est un
63528107 38 camarade antique, on lui arrange sinon on lui
a7de4ef7 39 refuse en lui expliquant gentiment le problème. Idem si les dimensions de
0337d704 40 la photo sont archi trop grandes ou archi trop petites.";
41
42 // }}}
43 // {{{ constructor
63528107 44
0337d704 45 function PhotoReq($_uid, $_data, $_stamp=0)
46 {
0337d704 47 $this->Validate($_uid, true, 'photo', $_stamp);
fdc77a17 48 $this->_get_image($_data);
5af85e81 49 }
50
51 // }}}
52 // {{{ function _get_image()
53
54 function _get_image($_data)
55 {
56 global $page;
63528107 57
c83168b1 58 VarStream::init();
59
0337d704 60 // calcul de la taille de l'image
0337d704 61 $GLOBALS['photoreq'] = $_data;
62 $image_infos = getimagesize('var://photoreq');
63 unset ($GLOBALS['photoreq']);
64
65 if (empty($image_infos)) {
66 $page->trig("Image invalide");
5af85e81 67 return false;
0337d704 68 }
69 list($this->x, $this->y, $this->mimetype) = $image_infos;
70
71 switch ($this->mimetype) {
72 case 1: $this->mimetype = "gif"; break;
73 case 2: $this->mimetype = "jpeg"; break;
74 case 3: $this->mimetype = "png"; break;
75 default:
76 $page->trig("Type d'image invalide");
5af85e81 77 return false;
0337d704 78 }
79
80 if (strlen($_data) > SIZE_MAX) {
81 $img = imagecreatefromstring($_data);
82 if (!$img) {
a7de4ef7 83 $page->trig("image trop grande et impossible à retailler automatiquement");
5af85e81 84 return false;
0337d704 85 }
86
87 $nx = $x = imagesx($img);
88 $ny = $y = imagesy($img);
89
90 if ($nx > 240) { $ny = intval($ny*240/$nx); $nx = 240; }
91 if ($ny > 300) { $ny = intval($nx*300/$nx); $ny = 300; }
92 if ($nx < 160) { $ny = intval($ny*160/$nx); $nx = 160; }
93
94 $comp = '90';
95 $file = tempnam('/tmp', 'photo');
96
97 while (strlen($_data) > SIZE_MAX) {
98 $img2 = imagecreatetruecolor($nx, $ny);
99 imagecopyresampled($img2, $img, 0, 0, 0, 0, $nx, $ny, $x, $y);
100 imagejpeg($img2, $file, $comp);
101 $_data = file_get_contents($file);
102 $this->mimetype = 'jpeg';
103
104 $comp --;
105 }
106
107 unlink($file);
108 }
109 $this->data = $_data;
5af85e81 110 return true;
0337d704 111 }
63528107 112
0337d704 113 // }}}
114 // {{{ function get_request()
115
116 function get_request($uid)
117 {
20d7932b 118 return parent::get_typed_request($uid,'photo');
0337d704 119 }
120
121 // }}}
122 // {{{ function formu()
123
124 function formu()
125 { return 'include/form.valid.photos.tpl'; }
126
127 // }}}
5af85e81 128 // {{{ function editor()
129
130 function editor()
131 {
132 return 'include/form.valid.edit-photo.tpl';
133 }
134
135 // }}}
136 // {{{ function handle_editor()
137
138 function handle_editor()
139 {
140 if (isset($_FILES['userfile']['tmp_name'])) {
141 $file = $_FILES['userfile']['tmp_name'];
142 if ($data = file_get_contents($file)) {
143 if ($this->_get_image($data)) {
144 return true;
145 }
146 } else {
147 $page->trig('Fichier inexistant ou vide');
148 }
149 }
150 return false;
151 }
152
153 // }}}
0337d704 154 // {{{ function _mail_subj
155
156 function _mail_subj()
157 {
158 return "[Polytechnique.org/PHOTO] Changement de photo";
159 }
160
161 // }}}
162 // {{{ function _mail_body
63528107 163
0337d704 164 function _mail_body($isok)
165 {
166 if ($isok) {
a7de4ef7 167 return "Le changement de photo que tu as demandé vient d'être effectué.";
0337d704 168 } else {
a7de4ef7 169 return "La demande de changement de photo que tu avais faite a été refusée.";
0337d704 170 }
171 }
172
173 // }}}
174 // {{{ function commit()
63528107 175
0337d704 176 function commit()
177 {
08cce2ff 178 XDB::execute('REPLACE INTO photo (uid, attachmime, attach, x, y)
0337d704 179 VALUES ({?},{?},{?},{?},{?})',
180 $this->uid, $this->mimetype, $this->data, $this->x, $this->y);
181 require_once('notifs.inc.php');
182 register_watch_op($this->uid,WATCH_FICHE);
183 return true;
184 }
185
186 // }}}
187}
188
189// }}}
190
a7de4ef7 191// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:
0337d704 192?>