source: spip-zone/_plugins_/photospip/trunk/formulaires/editer_image.php @ 61611

Last change on this file since 61611 was 61611, checked in by kent1@…, 9 years ago

On commence à gérer également les vignettes de documents en partant de l'image de départ

File size: 9.9 KB
Line 
1<?php
2
3if (!defined("_ECRIRE_INC_VERSION")) return;
4
5include_spip('inc/actions');
6include_spip('inc/autoriser');
7include_spip('inc/documents');
8include_spip('inc/filtres_images');
9include_spip('photospip_fonctions');
10
11function formulaires_editer_image_charger_dist($id_document='new',$mode=false, $retour=''){
12        $valeurs = array();
13        $id_document = sql_getfetsel('id_document','spip_documents','id_document='.intval($id_document));
14        $valeurs['id_document'] = $id_document;
15        $valeurs['mode'] = $mode;
16       
17        if(!$id_document){
18                $valeurs['editable'] = false;
19                $valeurs['message_erreur'] = _T('phpotospip:erreur_doc_numero');
20                return $valeurs;
21        }
22               
23        /**
24         * Restaurer les inputs en cas de test
25         */
26        foreach(array('filtre',
27                'ratio',
28                'recadre_width',
29                'recadre_height',
30                'recadre_x1',
31                'recadre_x2',
32                'recadre_y1',
33                'recadre_y2',
34                'reduire_width',
35                'reduire_height',
36                'passe_partout_width',
37                'passe_partout_height',
38                'params_tourner',
39                'params_image_sepia',
40                'params_image_gamma',
41                'params_image_flou',
42                'params_image_saturer',
43                'params_image_rotation',
44                'params_image_niveaux_gris_auto',
45                'type_modification') as $input){
46                if(_request($input))
47                        $valeurs[$input] = _request($input);   
48        }
49       
50        $valeurs['largeur_previsu'] = test_espace_prive()? 548 : lire_config('photospip/largeur_previsu','450');
51        if($mode != 'vignette'){
52                $limite = lire_config('photospip/limite_version',1000000);
53                $nb_versions = sql_countsel('spip_documents_inters','id_document='.intval($id_document));
54                $resultats = lire_config('photospip/resultats',array('remplacer_image','creer_nouvelle_image','creer_version_image'));
55                if(count($resultats) == 1){
56                        $valeurs['_hidden'] .= '<input type="hidden" name="type_modification" value="'.$resultats[0].'" />';
57                }
58                if($nb_versions >= $limite){
59                        $valeurs['modifiable'] = false;
60                        $valeurs['message_erreur'] = _T('phpotospip:erreur_nb_versions_atteint',array('nb'=>$limite));
61                        return $valeurs;
62                }
63        }else{
64                $id_vignette = sql_getfetsel('id_vignette','spip_documents','id_document='.intval($row['id_document']));
65                if($id_vignette && $id_vignette > 0 && $id_document = sql_getfetsel('id_document','spip_documents','id_document='.intval($id_vignette)))
66                        $valeurs['id_document'] = $id_vignette;
67                       
68        }
69       
70        if(!autoriser('modifier','document',$id_document)){
71                $valeurs['message_erreur'] = _T('photospip:erreur_auth_modifier');
72                $valeurs['editable'] = false;
73        }
74        else if($GLOBALS['meta']['image_process'] != 'gd2'){
75                $valeurs['message_erreur'] = _T('photospip:erreur_image_process');
76                $valeurs['editable'] = false;
77        }
78        return $valeurs;
79}
80
81function formulaires_editer_image_verifier_dist($id_document='new',$mode=false, $retour=''){
82        spip_log($mode,'photospip');
83        if(!$var_filtre = _request('filtre'))
84                $erreurs['message_erreur'] = _T('photospip:erreur_form_filtre');
85        else if(($mode != 'vignette') && (!$type_resultat = _request('type_modification')))
86                $erreurs['message_erreur'] = _T('photospip:erreur_form_type_resultat');
87        /**
88         * On test uniquement
89         */
90        elseif(_request('tester')){
91                if(in_array($var_filtre,array('tourner','image_recadre'))){
92                        $erreurs['message_erreur'] = _T('photospip:erreur_form_filtre_sstest');
93                }
94                else{
95                        list($param1, $param2, $param3,$params) = photospip_recuperer_params_form($var_filtre);
96                        $erreurs['message'] = 'previsu';
97                        $erreurs['filtre'] = $var_filtre;
98                        $erreurs['param'] = $params;
99                        $erreurs['param1'] = $param1;
100                        if($param2){
101                                $erreurs['param2'] = $param2;
102                        }
103                        if($param3){
104                                $erreurs['param3'] = $param3;
105                        }
106                }
107        }
108        return $erreurs;
109}
110
111function formulaires_editer_image_traiter_dist($id_document='new',$mode=false, $retour=''){
112        $res = array();
113       
114        $var_filtre = _request('filtre');
115        $type_modif = _request('type_modification');
116        $params = photospip_recuperer_params_form($var_filtre);
117       
118        $row = sql_fetsel('*','spip_documents','id_document='.intval($id_document)); 
119        $src = get_spip_doc($row['fichier']);
120       
121        $version = sql_countsel('spip_documents_inters','id_document='.intval($row['id_document']))+1;
122       
123        // on transforme l'image en png non destructif
124        //spip_log("On transforme l'image source en PNG non destructif","photospip");
125        //$src = extraire_attribut(image_alpha($src,0),'src');
126       
127        /**
128         * L'image créée aura pour nom image_orig-xxxx.ext où xxxx est le md5 de la date
129         * L'image temporaire est crée dans tmp/
130         */
131        $src_tmp = preg_replace(",\-photospip\w+([^\-]),","$1", $src);
132        $tmp_img = _DIR_TMP.preg_replace(",\.[^.]+$,","-photospip".md5(date('Y-m-d H:i:s'))."$0", basename($src_tmp));
133        $dest = preg_replace(",\.[^.]+$,","-photospip".md5(date('Y-m-d H:i:s'))."$0", $src_tmp);
134       
135        if($mode == 'vignette'){
136        //      spip_log("On retaille d'abord en 800 px","photospip");
137        //      $src = extraire_attribut(image_reduire($src,800,800),'src');
138                $res['redirect'] = _request('redirect');
139        }else{
140                $mode = $row['mode'];
141        }
142       
143        spip_log("application du filtre $var_filtre $src : $tmp_img","photospip");
144        if($var_filtre == "tourner"){
145                include_spip('inc/filtres');
146                include_spip('public/parametrer'); // charger les fichiers fonctions #bugfix spip 2.1.0
147                $tmp_img = filtrer('image_rotation',$src,$params[3]);
148                $tmp_img = filtrer('image_format',$tmp_img,$row['extension']);
149                $tmp_img = extraire_attribut($tmp_img,'src');
150        }
151       
152        else{
153                $sortie = photospipfiltre($src, $tmp_img, $var_filtre,$params);
154                if(!$sortie){
155                        $res['message_erreur'] = 'photospip n a pas pu appliquer le filtre '.$var_filtre;
156                        return $res;
157                }
158        }
159
160        if($type_modif == 'creer_version_image'){
161                $size_image = getimagesize($tmp_img);
162                spip_log("taille de l'image $size_image[0] x $size_image[1]","photospip");
163                $largeur = $size_image[0];
164                $hauteur = $size_image[1];
165                $ext = substr(basename($tmp_img), strpos(basename($tmp_img), ".")+1, strlen(basename($tmp_img)));
166                $poids = filesize($tmp_img);
167                /**
168                 * Crée une version de l'image
169                 */
170                if(is_array($params))
171                        $params = serialize($params);
172                include_spip('inc/getdocument');
173                sql_insertq("spip_documents_inters",array("id_document" => $row['id_document'],"id_auteur" => $id_auteur,"extension" => $row['extension'], "fichier" => $row['fichier'], "taille" => $row['taille'],"hauteur" => $row['hauteur'], "largeur" => $row['largeur'],"mode" => $row['mode'], "version" => ($version? $version:1), "filtre" => $var_filtre, "param" => $params));
174                deplacer_fichier_upload($tmp_img,$dest,true);
175                spip_log("move $tmp_img => $dest",'photospip');
176                sql_updateq('spip_documents', array('fichier' => set_spip_doc($dest), 'taille' => $poids, 'largeur'=>$largeur, 'hauteur'=>$hauteur, 'extension' => $ext), "id_document=".intval($row['id_document']));
177                spip_log("Update de l'image dans la base poid= $poids, extension = $ext, hauteur= $hauteur, largeur = $largeur, fichier = $dest","photospip");
178        }else {
179                $files[0]['tmp_name'] = $tmp_img;
180                $files[0]['name'] = basename($dest);
181                if(($type_modif == 'remplacer_image') OR $mode=='vignette'){
182                        /**
183                         * Remplace l'image actuelle par une nouvelle
184                         */
185                         spip_log('on remplace','photospip');
186                         $ajouter_document = charger_fonction('ajouter_documents','action');
187                         if($mode != 'vignette'){
188                                $ajoute = $ajouter_document($row['id_document'], $files, $objet, $id_objet, $mode);
189                         }else{
190                                 $id_vignette = sql_getfetsel('id_vignette','spip_documents','id_document='.intval($row['id_document']));
191                                 $ajoute = $ajouter_document($id_vignette,$files,'',0,'vignette');
192                                        if(is_int(reset($ajoute))){
193                                                $id_vignette = reset($ajoute);
194                                                include_spip('action/editer_document');
195                                                document_set($row['id_document'],array("id_vignette" => $id_vignette,'mode'=>'document'));
196                                                $res['message_ok'] = _T('medias:document_installe_succes');
197                                        }
198                         }
199                         include_spip('inc/flock');
200                         spip_unlink($tmp_img);
201                }
202                if($type_modif == 'creer_nouvelle_image'){
203                        /**
204                         * Crée un nouveau document
205                         */
206                         spip_log('on crée un nouveau doc','photospip');
207                         $ajouter_document = charger_fonction('ajouter_documents','action');
208                         $objet_lie = sql_fetsel('*','spip_documents_liens','id_document='.intval($row['id_document']));
209                         $id_document = $ajouter_document('new', $files, $objet_lie['objet'], $objet_lie['id_objet'], $mode);
210                         spip_log($id_document,'photospip');
211                         $res['redirect'] = parametre_url(parametre_url(self(),'redirect',''),'id_document',$id_document[0]);
212                         include_spip('inc/flock');
213                         spip_unlink($tmp_img);
214                }
215        }
216       
217        include_spip('inc/invalideur');
218        suivre_invalideur("id='id_document/$id_document'");
219               
220        if (!isset($res['redirect']))
221                $res['redirect'] = parametre_url(self(),'redirect','');
222        if (!isset($res['message_erreur']) && !$res['message_ok'])
223                $res['message_ok'] = _L('Votre modification a &eacute;t&eacute; enregistr&eacute;e');
224        return $res;
225}
226
227function photospip_recuperer_params_form($var_filtre){
228        $param1 = $param2 = $param3 = $params = null;
229        if ($var_filtre == "tourner"){
230                $params = _request('params_tourner');
231        }
232        else if($var_filtre == "image_reduire"){
233                $param1 = _request('reduire_width');
234                $param2 = _request('reduire_height');
235                $params = array($param1,$param2);
236        }
237        else if($var_filtre == "image_passe_partout"){
238                $param1 = _request('passe_partout_width');
239                $param2 = _request('passe_partout_height');
240                $params = array($param1,$param2);
241        }
242        else if ($var_filtre == "image_recadre"){
243                $param1 = _request('recadre_width');
244                $param2 = _request('recadre_height');
245                $param_left = _request('recadre_x1');
246                $param_top = _request('recadre_y1');
247                $param3 = 'left='.$param_left.' top='.$param_top;
248                $params = array($param1,$param2,$param3);
249        }
250        else if ($var_filtre == 'image_sepia'){
251                $params = _request('params_image_sepia');
252                $param1 = str_replace('#','',$params);
253        }
254        else if($var_filtre == 'image_gamma'){
255                $param1 = _request('params_image_gamma');
256        }
257        else if($var_filtre == 'image_flou'){
258                $param1 = _request('params_image_flou');
259        }
260        else if($var_filtre == 'image_saturer'){
261                $param1 = _request('params_image_saturer');
262        }
263        else if($var_filtre == 'image_rotation'){
264                $param1 = _request('params_image_rotation');
265        }
266        else if($var_filtre == 'image_niveaux_gris_auto'){
267                $param1 = sinon(_request('params_image_niveaux_gris_auto'),null);
268        }
269        return array($param1,$param2,$param3,$params);
270}
271?>
Note: See TracBrowser for help on using the repository browser.