07c2adc68d534fe5b029373c10a083981d54e9d3
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 ***************************************************************************/
24 class PhotoReq
extends Validate
36 var $rules = "Refuser les photos copyrightées, de mineurs, ou ayant
37 un caractère pornographique, violent, etc... Si une photo est mal
38 cadrée (20% de photo et 80% de blanc par exemple), si c'est un
39 camarade antique, on lui arrange sinon on lui
40 refuse en lui expliquant gentiment le problème. Idem si les dimensions de
41 la photo sont archi trop grandes ou archi trop petites.";
46 function PhotoReq($_uid, $_data, $_stamp=0)
48 $this->Validate($_uid, true
, 'photo', $_stamp);
49 $this->valid
= $this->_get_image($_data);
53 // {{{ function _get_image()
55 function _get_image($_data)
61 // calcul de la taille de l'image
62 $GLOBALS['photoreq'] = $_data;
63 $image_infos = getimagesize('var://photoreq');
64 unset ($GLOBALS['photoreq']);
66 if (empty($image_infos)) {
67 $page->trig("Image invalide");
70 list($this->x
, $this->y
, $this->mimetype
) = $image_infos;
72 switch ($this->mimetype
) {
73 case 1: $this->mimetype
= "gif"; break;
74 case 2: $this->mimetype
= "jpeg"; break;
75 case 3: $this->mimetype
= "png"; break;
77 $page->trig("Type d'image invalide");
81 if (strlen($_data) > SIZE_MAX
) {
82 $img = imagecreatefromstring($_data);
84 $page->trig("image trop grande et impossible à retailler automatiquement");
88 $nx = $x = imagesx($img);
89 $ny = $y = imagesy($img);
91 if ($nx > 240) { $ny = intval($ny*240/$nx); $nx = 240; }
92 if ($ny > 300) { $ny = intval($nx*300/$nx); $ny = 300; }
93 if ($nx < 160) { $ny = intval($ny*160/$nx); $nx = 160; }
96 $file = tempnam('/tmp', 'photo');
98 while (strlen($_data) > SIZE_MAX
) {
99 $img2 = imagecreatetruecolor($nx, $ny);
100 imagecopyresampled($img2, $img, 0, 0, 0, 0, $nx, $ny, $x, $y);
101 imagejpeg($img2, $file, $comp);
102 $_data = file_get_contents($file);
103 $this->mimetype
= 'jpeg';
110 $this->data
= $_data;
115 // {{{ function isValid()
123 // {{{ function get_request()
125 function get_request($uid)
127 return parent
::get_typed_request($uid,'photo');
131 // {{{ function formu()
134 { return 'include/form.valid.photos.tpl'; }
137 // {{{ function editor()
141 return 'include/form.valid.edit-photo.tpl';
145 // {{{ function handle_editor()
147 function handle_editor()
149 if (isset($_FILES['userfile']['tmp_name'])) {
150 $file = $_FILES['userfile']['tmp_name'];
151 if ($data = file_get_contents($file)) {
152 if ($this->valid
= $this->_get_image($data)) {
156 $page->trig('Fichier inexistant ou vide');
163 // {{{ function _mail_subj
165 function _mail_subj()
167 return "[Polytechnique.org/PHOTO] Changement de photo";
171 // {{{ function _mail_body
173 function _mail_body($isok)
176 return "Le changement de photo que tu as demandé vient d'être effectué.";
178 return "La demande de changement de photo que tu avais faite a été refusée.";
183 // {{{ function commit()
187 XDB
::execute('REPLACE INTO photo (uid, attachmime, attach, x, y)
188 VALUES ({?},{?},{?},{?},{?})',
189 $this->uid
, $this->mimetype
, $this->data
, $this->x
, $this->y
);
190 require_once('notifs.inc.php');
191 register_watch_op($this->uid
,WATCH_FICHE
);
200 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: