source: spip-zone/_plugins_/ddUpload/action/iconifier.php @ 104327

Last change on this file since 104327 was 104327, checked in by spip.franck@…, 3 years ago

code.spip est maintenant en https, donc, j'ajoute le "s" à http

File size: 4.9 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2010                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15// https://code.spip.net/@action_iconifier_dist
16function action_iconifier_dist()
17{
18        include_spip('inc/actions');
19        $securiser_action = charger_fonction('securiser_action', 'inc');
20        $arg = $securiser_action();
21        $iframe_redirect = _request('iframe_redirect');
22
23        $arg = rawurldecode($arg);
24
25        if (!preg_match(',^-?\d*(\D)(.*)$,',$arg, $r))
26                spip_log("action iconifier: $arg pas compris");
27        elseif ($r[1] == '+')
28                action_spip_image_ajouter_dist($r[2], _request('sousaction2'), _request('source'));
29        else    action_spip_image_effacer_dist($r[2]);
30       
31        if(_request("iframe") == 'iframe') {
32                $redirect = urldecode($iframe_redirect)."&iframe=iframe&var_noajax=1";
33                redirige_par_entete(urldecode($redirect));
34        }
35}
36
37// https://code.spip.net/@action_spip_image_effacer_dist
38function action_spip_image_effacer_dist($arg) {
39
40        if (!strstr($arg, ".."))
41                spip_unlink(_DIR_LOGOS . $arg);
42}
43
44//
45// Ajouter un logo
46//
47
48// $source = $_FILES[0]
49// $dest = arton12.xxx
50// https://code.spip.net/@action_spip_image_ajouter_dist
51function action_spip_image_ajouter_dist($arg,$sousaction2,$source) {
52        global $formats_logos;
53
54        include_spip('inc/getdocument');
55        if (!$sousaction2) {
56    if (isset($_SERVER['HTTP_X_FILE_NAME']) && isset($_SERVER['CONTENT_LENGTH'])) { 
57      if($_SERVER['CONTENT_LENGTH']>0) {
58        $handle = fopen("php://input","rb");
59        $block = fread($handle,4096);
60        $blocklen = strlen($block);
61        $base64 = false;
62        $dest = tempnam(_DIR_TMP, 'tmp_upload');
63        $handle_dest = fopen($dest,"ab"); 
64        if (preg_match("/^data:[^;]+(;charset=\"[^\"]+\")?(;base64)?,/",$block,$m)) {
65          //data uri
66          $base64 = $m[2];
67          $block = substr($block,strlen($m[0]));
68          if($base64) {
69            $blocklen -= $m[0];
70            $blockleft = $blocklen % 4;
71            if($blockleft) {
72              $block .= fread($handle,$blockleft);
73            }
74            $block = base64_decode($block);
75          } 
76        }
77        fwrite($handle_dest,$block);
78        while($block = fread($handle,4096)) {
79          if($base64)
80            $block = base64_decode($block);
81          fwrite($handle_dest,$block);
82        }
83        fclose($handle);
84        fclose($handle_dest);
85        $source = array("name" => $_SERVER['HTTP_X_FILE_NAME'], "tmp_name" => $dest, "error" => 0);
86      } else {
87        spip_log("file upload error");
88        $source = array("error" => 4);   
89      }
90    } else {           
91      if (!$_FILES) $_FILES = $GLOBALS['HTTP_POST_FILES'];
92      $source = (is_array($_FILES) ? array_pop($_FILES) : "");
93        }
94       
95        }
96        if ($source) {
97                $f =_DIR_LOGOS . $arg . '.tmp';
98
99                if (!is_array($source)) 
100                // fichier dans upload/
101                        $source = @copy(determine_upload() . $source, $f);
102                else {
103                // Intercepter une erreur a l'envoi
104                        if (check_upload_error($source['error']))
105                                $source ="";
106                        else
107                // analyse le type de l'image (on ne fait pas confiance au nom de
108                // fichier envoye par le browser : pour les Macs c'est plus sur)
109
110                                $source = deplacer_fichier_upload($source['tmp_name'], $f);
111                }
112        }
113        if (!$source)
114                spip_log("pb de copie pour $f");
115        else {
116                $size = @getimagesize($f);
117                $type = !$size ? '': ($size[2] > 3 ? '' : $formats_logos[$size[2]-1]);
118                if ($type) {
119                        $poids = filesize($f);
120
121                        if (_LOGO_MAX_SIZE > 0
122                        AND $poids > _LOGO_MAX_SIZE*1024) {
123                                spip_unlink ($f);
124                                check_upload_error(6,
125                                _T('info_logo_max_poids',
126                                        array('maxi' => taille_en_octets(_LOGO_MAX_SIZE*1024),
127                                        'actuel' => taille_en_octets($poids))));
128                        }
129
130                        if (_LOGO_MAX_WIDTH * _LOGO_MAX_HEIGHT
131                        AND ($size[0] > _LOGO_MAX_WIDTH
132                        OR $size[1] > _LOGO_MAX_HEIGHT)) {
133                                spip_unlink ($f);
134                                check_upload_error(6, 
135                                _T('info_logo_max_taille',
136                                        array(
137                                        'maxi' =>
138                                                _T('info_largeur_vignette',
139                                                        array('largeur_vignette' => _LOGO_MAX_WIDTH,
140                                                        'hauteur_vignette' => _LOGO_MAX_HEIGHT)),
141                                        'actuel' =>
142                                                _T('info_largeur_vignette',
143                                                        array('largeur_vignette' => $size[0],
144                                                        'hauteur_vignette' => $size[1]))
145                                )));
146                        }
147                        @rename ($f, _DIR_LOGOS . $arg . ".$type");
148                }
149                else {
150                        spip_unlink ($f);
151                        check_upload_error(6,_T('info_logo_format_interdit',
152                                                array('formats' => join(', ', $formats_logos))));
153                }
154       
155        }
156
157  if($dest)
158    @unlink(@dest);     
159}
160?>
Note: See TracBrowser for help on using the repository browser.