.
This commit is contained in:
@@ -18,12 +18,30 @@ function wp_thumbor_get_options() {
|
||||
'thumbor_base_url' => '',
|
||||
'thumbor_filters' => '',
|
||||
'thumbor_secret_key' => '',
|
||||
'thumbor_local_path' => '', // nouveau paramètre pour le chemin local
|
||||
'thumbor_local_path' => '',
|
||||
'thumbor_debug' => false, // Option ajoutée pour le mode debug
|
||||
);
|
||||
$options = get_option('wp_thumbor_options', $defaults);
|
||||
return wp_parse_args($options, $defaults);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fonction de log pour le mode debug.
|
||||
* Les messages sont enregistrés dans un fichier situé dans le répertoire wp-content.
|
||||
*/
|
||||
function wp_thumbor_log($message) {
|
||||
$options = wp_thumbor_get_options();
|
||||
if ( ! empty($options['thumbor_debug']) ) {
|
||||
// Définir le chemin du fichier de log
|
||||
$log_file = WP_CONTENT_DIR . '/wp-thumbor.log';
|
||||
// Préfixer le message avec la date et l'heure
|
||||
$date = date('Y-m-d H:i:s');
|
||||
$log_message = "[$date] WP Thumbor Debug: $message" . PHP_EOL;
|
||||
// Ajoute le message à la fin du fichier
|
||||
file_put_contents($log_file, $log_message, FILE_APPEND);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Vérifie si la transformation Thumbor doit être désactivée pour l'appelant.
|
||||
* Par exemple, si l'appel provient du plugin Optimize More.
|
||||
@@ -68,6 +86,7 @@ function wp_thumbor_settings_page() {
|
||||
$options['thumbor_filters'] = isset($_POST['thumbor_filters']) ? sanitize_text_field(trim($_POST['thumbor_filters'])) : '';
|
||||
$options['thumbor_secret_key'] = isset($_POST['thumbor_secret_key']) ? sanitize_text_field(trim($_POST['thumbor_secret_key'])) : '';
|
||||
$options['thumbor_local_path'] = isset($_POST['thumbor_local_path']) ? sanitize_text_field(trim($_POST['thumbor_local_path'])) : '';
|
||||
$options['thumbor_debug'] = isset($_POST['thumbor_debug']) ? true : false;
|
||||
update_option('wp_thumbor_options', $options);
|
||||
echo '<div class="updated"><p>Les paramètres ont été mis à jour.</p></div>';
|
||||
}
|
||||
@@ -107,6 +126,13 @@ function wp_thumbor_settings_page() {
|
||||
<p class="description">Optionnel. Si renseigné, ce chemin sera préfixé au chemin de l'image sur le filesystem local de Thumbor. Par exemple, si vous indiquez "/home", alors au lieu de transmettre l'URL publique, le plugin transmettra "home/wp-content/uploads/…".</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row">Activer le mode Debug</th>
|
||||
<td>
|
||||
<input type="checkbox" name="thumbor_debug" value="1" <?php checked($options['thumbor_debug'], true); ?> />
|
||||
<p class="description">Active l'enregistrement des logs dans un fichier.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<?php submit_button(); ?>
|
||||
</form>
|
||||
@@ -149,7 +175,7 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
||||
if ( is_admin() ) {
|
||||
return $url;
|
||||
}
|
||||
// Ignorer le fichier favicon.ico
|
||||
// Ignorer le favicon
|
||||
if ( basename(parse_url($url, PHP_URL_PATH)) === 'favicon.ico' ) {
|
||||
return $url;
|
||||
}
|
||||
@@ -157,14 +183,19 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
// Si l'URL ne semble pas complète (ne se termine pas par une extension image attendue), on la laisse intacte.
|
||||
if ( ! preg_match('/\.(jpg|jpeg|png|gif|webp)(\?.*)?$/i', $url) ) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
$options = wp_thumbor_get_options();
|
||||
$thumbor_base_url = isset($options['thumbor_base_url']) ? rtrim($options['thumbor_base_url'], '/') : '';
|
||||
if ( empty($thumbor_base_url) ) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
// Évite une double transformation
|
||||
if ( strpos($url, $thumbor_base_url) === 0 ) {
|
||||
// Évite une double transformation uniquement si aucune dimension n'est demandée
|
||||
if ( empty($width) && empty($height) && strpos($url, $thumbor_base_url) === 0 ) {
|
||||
return $url;
|
||||
}
|
||||
|
||||
@@ -188,22 +219,17 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
||||
|
||||
// Préparation de la partie filtres à partir des réglages
|
||||
$thumbor_filters = isset($options['thumbor_filters']) ? trim($options['thumbor_filters']) : '';
|
||||
if ( ! empty($thumbor_filters) ) {
|
||||
$filterPart = 'filters:' . $thumbor_filters . '/';
|
||||
} else {
|
||||
$filterPart = '';
|
||||
}
|
||||
$filterPart = ! empty($thumbor_filters) ? 'filters:' . $thumbor_filters . '/' : '';
|
||||
|
||||
// Détermine le chemin de l'image pour Thumbor.
|
||||
// Par défaut, on utilise l'URL complète.
|
||||
$image_path = $url;
|
||||
// Si un chemin local est configuré, on remplace la partie "https://votredomaine/wp-content/…" par
|
||||
// le chemin local suivi du chemin de l'image (extrait avec parse_url).
|
||||
// Si un chemin local est configuré, on remplace la partie de l'URL par ce chemin local suivi du chemin de l'image
|
||||
if ( ! empty($options['thumbor_local_path']) ) {
|
||||
// On retire les éventuels slash en début de chaîne
|
||||
$local = ltrim($options['thumbor_local_path'], '/');
|
||||
$path = parse_url($url, PHP_URL_PATH); // ex: /wp-content/uploads/...
|
||||
$image_path = $local . $path; // Résultera par exemple en "home/wp-content/uploads/..."
|
||||
$image_path = $local . $path; // par exemple "home/wp-content/uploads/..."
|
||||
}
|
||||
|
||||
// Construction de la chaîne d'options à signer
|
||||
@@ -218,7 +244,10 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
||||
$endpoint = 'unsafe';
|
||||
}
|
||||
|
||||
return $thumbor_base_url . '/' . $endpoint . '/' . $path_to_sign;
|
||||
$final_url = $thumbor_base_url . '/' . $endpoint . '/' . $path_to_sign;
|
||||
wp_thumbor_log("Transformation de l'URL : $url en $final_url");
|
||||
|
||||
return $final_url;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -235,6 +264,7 @@ function wp_thumbor_output_buffer_callback($buffer) {
|
||||
if ( empty($buffer) ) {
|
||||
return $buffer;
|
||||
}
|
||||
wp_thumbor_log("Début du traitement du output buffer.");
|
||||
libxml_use_internal_errors(true);
|
||||
$dom = new DOMDocument();
|
||||
$html = mb_convert_encoding($buffer, 'HTML-ENTITIES', 'UTF-8');
|
||||
@@ -316,6 +346,12 @@ function wp_thumbor_output_buffer_callback($buffer) {
|
||||
$element->setAttribute('data-src', wp_thumbor_transform_url($dataSrc));
|
||||
}
|
||||
}
|
||||
if ( $element->hasAttribute('data-bg') ) {
|
||||
$dataBg = $element->getAttribute('data-bg');
|
||||
if ( preg_match('/^https?:\/\//', $dataBg) ) {
|
||||
$element->setAttribute('data-bg', wp_thumbor_transform_url($dataBg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Traitement spécifique pour les liens preload d'image dans le <head>
|
||||
@@ -329,7 +365,6 @@ function wp_thumbor_output_buffer_callback($buffer) {
|
||||
}
|
||||
}
|
||||
|
||||
// Renvoyer le document HTML complet, préservant <html>, <head> et <body>
|
||||
return $dom->saveHTML();
|
||||
}
|
||||
|
||||
@@ -338,6 +373,7 @@ function wp_thumbor_output_buffer_callback($buffer) {
|
||||
*/
|
||||
function wp_thumbor_start_output_buffer() {
|
||||
if ( ! is_admin() && ! defined('DOING_AJAX') ) {
|
||||
wp_thumbor_log("Démarrage de l'output buffer.");
|
||||
ob_start('wp_thumbor_output_buffer_callback');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user