PEEL Shopping
Open source ecommerce : PEEL Shopping
fonctions.php
Go to the documentation of this file.
1 <?php
2 // This file should be in UTF8 without BOM - Accents examples: éèê
3 // +----------------------------------------------------------------------+
4 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
5 // +----------------------------------------------------------------------+
6 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
7 // | opensource GPL license: you are allowed to customize the code |
8 // | for your own needs, but must keep your changes under GPL |
9 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
10 // +----------------------------------------------------------------------+
11 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
12 // +----------------------------------------------------------------------+
13 // $Id: fonctions.php 46935 2015-09-18 08:49:48Z gboussin $
14 if (!defined('IN_PEEL')) {
15  die();
16 }
17 
33 function thumbs($source_filename, $width, $height, $method = 'fit', $source_folder = null, $thumb_folder = null, $thumb_rename = true, $return_absolute_path=false)
34 {
35  static $tpl_error;
36  if (empty($source_filename)) {
37  return false;
38  }
39  if(get_file_type($source_filename) == 'pdf') {
40  // Gestion des pdf
41  $source_filename = 'logoPDF_small.png';
42  $source_folder = $GLOBALS['dirroot'] .'/images/';
43  } elseif(get_file_type($source_filename) == 'zip') {
44  // Gestion des zip
45  $source_filename = 'zip.png';
46  $source_folder = $GLOBALS['dirroot'] .'/images/';
47  } elseif(get_file_type($source_filename) != 'image') {
48  // Gestion des autres documents
49  $source_filename = 'document.png';
50  $source_folder = $GLOBALS['dirroot'] .'/images/';
51  }
52  if (empty($thumb_folder)) {
53  if(strpos($source_filename, '//') !== false || strpos($source_filename, '/'.$GLOBALS['site_parameters']['cache_folder'].'/') === false) {
54  $thumb_folder = $GLOBALS['uploaddir'] . '/thumbs/';
55  if(!empty($GLOBALS['site_parameters']['thumbs_using_subfolders'])) {
56  $use_subfolders = true;
57  }
58  } else {
59  $thumb_folder = $GLOBALS['dirroot'].'/'.$GLOBALS['site_parameters']['cache_folder'].'/';
60  }
61  }
62  if(strpos($source_filename, '//')!==false) {
63  // URL présente dans le nom de l'image
64  $source_path = str_replace(' ', '%20', $source_filename);
65  // Pas possible de récupèrer la date et l'heure de dernière modification de l'image
66  $srcTime = 0;
67  } else {
68  if ($source_folder === null) {
69  if(strpos($source_filename, '/'.$GLOBALS['site_parameters']['cache_folder'].'/') === false) {
70  $source_folder = $GLOBALS['uploaddir'];
71  } else {
72  $source_folder = $GLOBALS['dirroot'];
73  }
74  }
75  if(String::substr($source_folder, -1) != '/') {
76  $source_folder .= '/';
77  }
78  $source_path = $source_folder . $source_filename;
79  // On récupère la date et l'heure de dernière modification de l'image
80  $srcTime = @filemtime($source_path);
81  }
82  // C'est possible uniquement si l'image est en local, et pas via HTTP
83  if(empty($srcTime) && strpos($source_filename, '//')===false && !file_exists($source_path)){
84  // L'image est en local et pourtant il n'est pas possible d'avoir sa date de mise à jour
85  // Donc c'est a priori qu'elle n'existe pas, et on l'a vérifié tout de même
86  if (!empty($GLOBALS['display_errors']) && a_priv('admin*', false)) {
87  $GLOBALS['notification_output_array'][] = $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_MODULE_THUMBS_IMAGE_NOT_AVAILABLE_MESSAGE'] .' '. $source_path))->fetch();
88  }
89  return false;
90  }
91 
92  if (empty($thumb_rename)) {
93  // On veut que le nom de la vignette soit le même que celui de l'image source
94  $thumb_filename = @basename($source_filename);
95  $thumb_path = $thumb_folder . $thumb_filename;
96  } elseif($thumb_rename === true) {
97  $extension = @pathinfo($source_path , PATHINFO_EXTENSION);
98  $nom = @basename($source_path, '.' . $extension);
99  // On récupère la taille de l'image^pour l'adjoindre au nom
100  $inWidth = vb($width);
101  $inHeight = vb($height);
102  // On génère le nom de l'image cache
103  $folder_hash = String::substr(md5($source_path . '-' . $width . 'x' . $height . '-' . $method), 0, vn($GLOBALS['site_parameters']['thumbs_name_suffix_length'], 6));
104  $thumb_filename = $nom . '-' . $folder_hash . '.' . $extension;
105  if(!empty($use_subfolders)) {
106  $folder1 = String::substr($folder_hash, 0, 2);
107  $folder2 = ''; // String::substr($folder_hash, 2, 2);
108  $thumb_path = $thumb_folder . $folder1 . '/' . (!empty($folder2) ? $folder2 . '/':'') . $thumb_filename;
109  } else {
110  $thumb_path = $thumb_folder . $thumb_filename;
111  }
112  } else {
113  $thumb_filename = $thumb_rename;
114  $thumb_path = $thumb_folder . $thumb_filename;
115  }
116  $thumb_path_filemtime=@filemtime($thumb_path);
117  // Si on peut avoir la date de modification de 'image source srcTime :
118  // => ALORS : Si la vignette n'existe pas ou qu'elle est plus vieille que la source, alors on la calcule
119  // Sinon, si image source accessible via HTTP et on ne peut pas avoir la date de modification de 'image source srcTime :
120  // => ALORS : Si la vignette n'existe pas ou qu'elle est datée de plus de 10 jours, on la calcule
121  if ((!empty($_GET['update']) && $_GET['update'] == 1) || (!empty($srcTime) && $srcTime > $thumb_path_filemtime) || (empty($srcTime) && (empty($thumb_path_filemtime) || time()-24*10*3600>$thumb_path_filemtime))) {
122  if(!empty($GLOBALS['site_parameters']['skip_images_keywords'])){
123  // On ne veut pas générer le thumb, et ATTENTION : on le prend si il existe
124  foreach($GLOBALS['site_parameters']['skip_images_keywords'] as $this_keyword){
125  if(strpos($source_filename, $this_keyword)!==false) {
126  // On va prendre cette image uniquement si elle existe déjà, mais on ne va pas la générer (par exemple : problème temporaire de site distant)
127  $skip_creation = true;
128  }
129  }
130  }
131  if(empty($skip_creation)){
132  $imgInfo = @getimagesize($source_path);
133  if(empty($imgInfo)){
134  // L'image ne semble pas valide
135  if (!empty($GLOBALS['display_errors']) && a_priv('admin*', false)) {
136  $GLOBALS['notification_output_array'][] = $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_MODULE_THUMBS_PICTURE_NOT_SUPPORTED'] . ' ' . $source_path))->fetch();
137  }
138  $skip_creation = true;
139  }
140  }
141  if(!empty($skip_creation)){
142  if(empty($thumb_path_filemtime)){
143  // Le thumb n'existe pas du tout : on ne renvoie rien
144  return false;
145  } else {
146  // Le thumb existe même si arrivé à échéance, et le site distant ne renvoie plus rien du tout
147  // => on met à jour le timestamp du fichier pour éviter de chercher à recharger à chaque fois le fichier
148  touch($thumb_path);
149  }
150  }elseif(empty($skip_creation)){
151  // On a trouvé l'image source et on veut générer le thumb
152  $srcWidth = $imgInfo[0];
153  $srcHeight = $imgInfo[1];
154  $srcType = $imgInfo[2];
155  switch ($srcType) {
156  case 1 : $srcType = "gif";
157  break;
158  case 2 : $srcType = "jpeg";
159  break;
160  case 3 : $srcType = "png";
161  break;
162  default: $srcType = "???";
163  }
164  if ($method == "stretch") {
165  // Methode avec taille exacte
166  // Exact size
167  $outWidth = $width;
168  $outHeight = $height;
169  } else {
170  // Methode avec taille proportionnelle
171  // Max size : resize
172  $xRatio = ($width) ? ($srcWidth / $width) : 0;
173  $yRatio = ($height) ? ($srcHeight / $height): 0;
174  $ratio = max($xRatio, $yRatio, 1);
175  $outWidth = intval($srcWidth / $ratio);
176  $outHeight = intval($srcHeight / $ratio);
177  }
178  // Création de l'image de sortie
179  $outImg = imagecreatetruecolor ($outWidth, $outHeight);
180  // Load src image
181  switch ($srcType) {
182  case "png":
183  $srcImg = imagecreatefrompng($source_path);
184  // avant de copier
185  // on désactive le blending de chaque pixel
186  imagealphablending($outImg, false);
187  // on définit l'alpha de destination
188  imagesavealpha($outImg, true);
189  break;
190  case "gif":
191  $srcImg = imagecreatefromgif($source_path);
192  // On récupère la couleur transparente de l'image source si elle existe
193  $src_transparent_index = imagecolortransparent($srcImg);
194  if($src_transparent_index!=(-1) && $src_transparent_index<imagecolorstotal($srcImg)) {
195  $transparent_color = imagecolorsforindex($srcImg, $src_transparent_index);
196  }
197  if(!empty($transparent_color))
198  {
199  $out_transparent = imagecolorallocate($outImg, $transparent_color['red'], $transparent_color['green'], $transparent_color['blue']);
200  $background = imagecolortransparent($outImg, $out_transparent);
201  }
202  break;
203  case "jpeg":
204  $srcImg = imagecreatefromjpeg($source_path);
205  break;
206  default:
207  if (!empty($GLOBALS['display_errors']) && a_priv('admin*', false)) {
208  $GLOBALS['notification_output_array'][] = $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_MODULE_THUMBS_PICTURE_NOT_SUPPORTED'] . ' ' . $source_path))->fetch();
209  }
210  return false;
211  }
212  if(!empty($srcImg)) {
213  if(empty($background)) {
214  // Applique un fond blanc à l'image
215  $background = imagecolorallocate($outImg, 255, 255, 255);
216  }
217  imagefill($outImg, 0, 0, $background);
218  // Retaille l'image
219  imagecopyresampled($outImg, $srcImg, 0, 0, 0, 0, $outWidth, $outHeight, $srcWidth, $srcHeight);
220  if(!empty($use_subfolders)) {
221  if(!is_dir($thumb_folder . $folder1)) {
222  mkdir($thumb_folder . $folder1);
223  }
224  if(!empty($folder2) && !is_dir($thumb_folder . $folder1 . '/' . $folder2)) {
225  mkdir($thumb_folder . $folder1 . '/'. $folder2);
226  }
227  }
228  // Sauvegarde dans le répertoire Cache
229  switch ($srcType) {
230  case "png":
231  $res = imagepng($outImg, $thumb_path);
232  break;
233  case "gif":
234  $res = imagegif($outImg, $thumb_path);
235  break;
236  case "jpeg":
237  $res = imagejpeg($outImg, $thumb_path, vn($GLOBALS['site_parameters']['jpeg_quality']));
238  break;
239  default:
240  }
241  }
242  if (empty($res)) {
243  if (!empty($GLOBALS['display_errors']) && a_priv('admin*', false)) {
244  $GLOBALS['notification_output_array'][] = $GLOBALS['tplEngine']->createTemplate('global_error.tpl', array('message' => $GLOBALS['STR_MODULE_THUMBS_CANNOT_SAVE_PICTURE']))->fetch();
245  }
246  if(empty($thumb_path_filemtime)){
247  return false;
248  } else {
249  // Le thumb existe même si arrivé à échéance, et le site ne renvoie plus rien du tout
250  // => on met à jour le timestamp du fichier pour éviter de chercher à recharger à chaque fois le fichier
251  touch($thumb_path);
252  }
253  }
254  }
255  }
256  if(!empty($return_absolute_path)) {
257  if($return_absolute_path === true) {
258  return $GLOBALS['repertoire_upload'] . '/thumbs/' . String::rawurlencode($thumb_filename);
259  } else {
260  return $return_absolute_path . String::rawurlencode($thumb_filename);
261  }
262  } else {
263  return String::rawurlencode($thumb_filename);
264  }
265 }
266 
$extension
if(!defined('IN_PEEL')) $GLOBALS['page_types_array']
Definition: fonctions.php:19
if(!defined('IN_PEEL')) thumbs($source_filename, $width, $height, $method= 'fit', $source_folder=null, $thumb_folder=null, $thumb_rename=true, $return_absolute_path=false)
Charge l'image dont le nom est $source_filename dans le répertoire d'upload, et crée une vignette pou...
Definition: fonctions.php:33
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
get_file_type($filename)
get_file_type()
Definition: fonctions.php:3571
vn(&$var, $default=0)
Variable nulle if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:110
a_priv($requested_priv, $demo_allowed=false, $site_configuration_modification=false, $user_id=null)
Renvoie true si l'utilisateur de la session a le privilège $requested_priv ou un droit supérieur Des ...
Definition: user.php:63
static substr($string, $start, $length=null)
Returns the portion of string specified by the start and length parameters.
Definition: String.php:112
static rawurlencode($string, $avoid_slash=true)
Returns string compatible with Apache without the AllowEncodedSlashes directive ON => avoids systemat...
Definition: String.php:893

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:31:05 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.