Version Description
- properly replace thumbnails names in the content when the replaced image has a different aspect ratio, thus the new thumbnails have a different height in the name.
Download this release
Release Info
| Developer | ShortPixel |
| Plugin | |
| Version | 3.2.9 |
| Comparing to | |
| See all releases | |
Code changes from version 3.2.8 to 3.2.9
- enable-media-replace.php +1 -1
- readme.txt +4 -1
- thumbnail_updater.php +124 -0
- upload.php +23 -9
enable-media-replace.php
CHANGED
|
@@ -62,7 +62,7 @@ function dat_mime_types($mime_types) {
|
|
| 62 |
* To suppress it in the menu we give it an empty menu title.
|
| 63 |
*/
|
| 64 |
function emr_menu() {
|
| 65 |
-
add_submenu_page(
|
| 66 |
}
|
| 67 |
|
| 68 |
/**
|
| 62 |
* To suppress it in the menu we give it an empty menu title.
|
| 63 |
*/
|
| 64 |
function emr_menu() {
|
| 65 |
+
add_submenu_page('upload.php', esc_html__("Replace media", "enable-media-replace"), '','upload_files', 'enable-media-replace/enable-media-replace', 'emr_options');
|
| 66 |
}
|
| 67 |
|
| 68 |
/**
|
readme.txt
CHANGED
|
@@ -3,7 +3,7 @@ Contributors: ShortPixel
|
|
| 3 |
Donate link: https://www.paypal.me/resizeImage
|
| 4 |
Tags: replace, attachment, media, files, replace image, replace jpg, change media, replace media, image, file
|
| 5 |
Requires at least: 4.0
|
| 6 |
-
Tested up to: 5.
|
| 7 |
Requires PHP: 5.4
|
| 8 |
Stable tag: trunk
|
| 9 |
|
|
@@ -47,6 +47,9 @@ If you want more control over the format used to display the time, you can use t
|
|
| 47 |
|
| 48 |
== Changelog ==
|
| 49 |
|
|
|
|
|
|
|
|
|
|
| 50 |
= 3.2.8 =
|
| 51 |
* fix for failures in link updating when replacing file because of addslashes - use prepared query instead
|
| 52 |
* replace basename with wp_basename because basename doesn't work well with UTF8
|
| 3 |
Donate link: https://www.paypal.me/resizeImage
|
| 4 |
Tags: replace, attachment, media, files, replace image, replace jpg, change media, replace media, image, file
|
| 5 |
Requires at least: 4.0
|
| 6 |
+
Tested up to: 5.1
|
| 7 |
Requires PHP: 5.4
|
| 8 |
Stable tag: trunk
|
| 9 |
|
| 47 |
|
| 48 |
== Changelog ==
|
| 49 |
|
| 50 |
+
= 3.2.9 =
|
| 51 |
+
* properly replace thumbnails names in the content when the replaced image has a different aspect ratio, thus the new thumbnails have a different height in the name.
|
| 52 |
+
|
| 53 |
= 3.2.8 =
|
| 54 |
* fix for failures in link updating when replacing file because of addslashes - use prepared query instead
|
| 55 |
* replace basename with wp_basename because basename doesn't work well with UTF8
|
thumbnail_updater.php
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
if ( ! defined( 'ABSPATH' ) )
|
| 3 |
+
exit; // Exit if accessed directly.
|
| 4 |
+
|
| 5 |
+
/* Simple class for updating thumbnails.
|
| 6 |
+
*
|
| 7 |
+
*
|
| 8 |
+
*
|
| 9 |
+
*/
|
| 10 |
+
class ThumbnailUpdater
|
| 11 |
+
{
|
| 12 |
+
protected $attach_id;
|
| 13 |
+
protected $oldMeta = array();
|
| 14 |
+
protected $newMeta = array();
|
| 15 |
+
|
| 16 |
+
protected $convertArray = array();
|
| 17 |
+
protected $relPath;
|
| 18 |
+
|
| 19 |
+
protected $post_table;
|
| 20 |
+
|
| 21 |
+
public function __construct($id)
|
| 22 |
+
{
|
| 23 |
+
$this->attach_id = intval($id);
|
| 24 |
+
|
| 25 |
+
global $wpdb;
|
| 26 |
+
$table_name = $wpdb->prefix . "posts";
|
| 27 |
+
// $postmeta_table_name = $wpdb->prefix . "postmeta";
|
| 28 |
+
|
| 29 |
+
$this->post_table = $table_name;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
public function setOldMetadata($metadata)
|
| 33 |
+
{
|
| 34 |
+
if (isset($metadata['sizes']))
|
| 35 |
+
$this->oldMeta = $metadata;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function setNewMetadata($metadata)
|
| 39 |
+
{
|
| 40 |
+
if (isset($metadata['sizes']))
|
| 41 |
+
$this->newMeta = $metadata;
|
| 42 |
+
|
| 43 |
+
// extract month prefix to prevent overwriting wrong images.
|
| 44 |
+
$file = $metadata['file'];
|
| 45 |
+
$pos = strrpos($metadata['file'], '/');
|
| 46 |
+
$month_path = substr($file, 0, $pos);
|
| 47 |
+
$this->relPath = trailingslashit($month_path);
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
public function updateThumbnails()
|
| 51 |
+
{
|
| 52 |
+
if (count($this->oldMeta) == 0 || count($this->newMeta) == 0)
|
| 53 |
+
return false;
|
| 54 |
+
|
| 55 |
+
$convertArray = array();
|
| 56 |
+
foreach($this->oldMeta['sizes'] as $sizeName => $data)
|
| 57 |
+
{
|
| 58 |
+
if (isset($this->newMeta['sizes'][$sizeName]))
|
| 59 |
+
{
|
| 60 |
+
|
| 61 |
+
$oldFile = $data['file'];
|
| 62 |
+
$newFile = $this->newMeta['sizes'][$sizeName]['file'];
|
| 63 |
+
|
| 64 |
+
// if images are not same size.
|
| 65 |
+
if ($oldFile != $newFile)
|
| 66 |
+
{
|
| 67 |
+
$this->convertArray[] = array('imageFrom' => $this->relPath . $oldFile, 'imageTo' => $this->relPath . $newFile );
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
}
|
| 71 |
+
else {
|
| 72 |
+
$this->findNearestSize($data, $sizeName);
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
}
|
| 76 |
+
$this->updateDatabase();
|
| 77 |
+
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
protected function updateDatabase()
|
| 81 |
+
{
|
| 82 |
+
global $wpdb;
|
| 83 |
+
$sql = "UPDATE " . $this->post_table . " set post_content = REPLACE(post_content, %s, %s)";
|
| 84 |
+
|
| 85 |
+
foreach($this->convertArray as $convert_item)
|
| 86 |
+
{
|
| 87 |
+
$from = $convert_item['imageFrom'];
|
| 88 |
+
$to = $convert_item['imageTo'];
|
| 89 |
+
|
| 90 |
+
$replace_sql = $wpdb->prepare($sql, $from, $to );
|
| 91 |
+
$wpdb->query($replace_sql);
|
| 92 |
+
|
| 93 |
+
}
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/** FindNearestsize
|
| 97 |
+
* This works on the assumption that when the exact image size name is not available, find the nearest width with the smallest possible difference to impact the site the least.
|
| 98 |
+
*/
|
| 99 |
+
protected function findNearestSize($oldData, $sizeName)
|
| 100 |
+
{
|
| 101 |
+
$old_width = $oldData['width']; // the width from size not in new image
|
| 102 |
+
$new_width = $this->newMeta['width']; // default check - new width on image
|
| 103 |
+
|
| 104 |
+
$diff = abs($old_width - $new_width);
|
| 105 |
+
$closest_file = str_replace($this->relPath, '', $this->newMeta['file']);
|
| 106 |
+
|
| 107 |
+
foreach($this->newMeta['sizes'] as $sizeName => $data)
|
| 108 |
+
{
|
| 109 |
+
$thisdiff = abs($old_width - $data['width']);
|
| 110 |
+
|
| 111 |
+
if ( $thisdiff < $diff )
|
| 112 |
+
{
|
| 113 |
+
$diff = $thisdiff;
|
| 114 |
+
$closest_file = $data['file'];
|
| 115 |
+
$found_metasize = true;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
$this->convertArray[] = array('imageFrom' => $this->relPath . $oldData['file'], 'imageTo' => $this->relPath . $closest_file);
|
| 120 |
+
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
}
|
upload.php
CHANGED
|
@@ -10,6 +10,8 @@ global $wpdb;
|
|
| 10 |
$table_name = $wpdb->prefix . "posts";
|
| 11 |
$postmeta_table_name = $wpdb->prefix . "postmeta";
|
| 12 |
|
|
|
|
|
|
|
| 13 |
/**
|
| 14 |
* Delete a media file and its thumbnails.
|
| 15 |
*
|
|
@@ -21,7 +23,7 @@ function emr_delete_current_files( $current_file, $metadta = null ) {
|
|
| 21 |
|
| 22 |
// Find path of current file
|
| 23 |
$current_path = substr($current_file, 0, (strrpos($current_file, "/")));
|
| 24 |
-
|
| 25 |
// Check if old file exists first
|
| 26 |
if (file_exists($current_file)) {
|
| 27 |
// Now check for correct file permissions for old file
|
|
@@ -33,10 +35,10 @@ function emr_delete_current_files( $current_file, $metadta = null ) {
|
|
| 33 |
else {
|
| 34 |
// File exists, but has wrong permissions. Let the user know.
|
| 35 |
printf( esc_html__('The file %1$s can not be deleted by the web server, most likely because the permissions on the file are wrong.', "enable-media-replace"), $current_file);
|
| 36 |
-
exit;
|
| 37 |
}
|
| 38 |
}
|
| 39 |
-
|
| 40 |
// Delete old resized versions if this was an image
|
| 41 |
$suffix = substr($current_file, (strlen($current_file)-4));
|
| 42 |
$prefix = substr($current_file, 0, (strlen($current_file)-4));
|
|
@@ -53,7 +55,6 @@ function emr_delete_current_files( $current_file, $metadta = null ) {
|
|
| 53 |
if ( empty( $metadata ) ) {
|
| 54 |
$metadata = wp_get_attachment_metadata( $_POST["ID"] );
|
| 55 |
}
|
| 56 |
-
// var_dump($metadata);exit;
|
| 57 |
|
| 58 |
if (is_array($metadata)) { // Added fix for error messages when there is no metadata (but WHY would there not be? I don't know…)
|
| 59 |
foreach($metadata["sizes"] AS $thissize) {
|
|
@@ -230,6 +231,9 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
| 230 |
exit;
|
| 231 |
}
|
| 232 |
|
|
|
|
|
|
|
|
|
|
| 233 |
$new_filename = $_FILES["userfile"]["name"];
|
| 234 |
$new_filesize = $_FILES["userfile"]["size"];
|
| 235 |
$new_filetype = $filedata["type"];
|
|
@@ -270,10 +274,17 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
| 270 |
do_action('wp_handle_upload', array('file' => $current_file, 'url' => wp_get_attachment_url($ID), 'type' => $new_filetype));
|
| 271 |
|
| 272 |
// Make thumb and/or update metadata
|
| 273 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
|
| 275 |
-
|
|
|
|
| 276 |
update_attached_file( $ID, $current_file);
|
|
|
|
|
|
|
| 277 |
} elseif ( 'replace_and_search' == $replace_type && apply_filters( 'emr_enable_replace_and_search', true ) ) {
|
| 278 |
// Replace file, replace file name, update meta data, replace links pointing to old file name
|
| 279 |
|
|
@@ -316,7 +327,7 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
| 316 |
"SELECT meta_value FROM $postmeta_table_name WHERE meta_key = '_wp_attached_file' AND post_id = %d;",
|
| 317 |
$ID
|
| 318 |
);
|
| 319 |
-
|
| 320 |
$old_meta_name = $wpdb->get_row($sql, ARRAY_A);
|
| 321 |
$old_meta_name = $old_meta_name["meta_value"];
|
| 322 |
|
|
@@ -369,7 +380,10 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
| 369 |
}
|
| 370 |
}
|
| 371 |
|
| 372 |
-
|
|
|
|
|
|
|
|
|
|
| 373 |
update_attached_file( $ID, $new_file );
|
| 374 |
}
|
| 375 |
|
|
@@ -383,7 +397,7 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
| 383 |
} else {
|
| 384 |
//TODO Better error handling when no file is selected.
|
| 385 |
//For now just go back to media management
|
| 386 |
-
$returnurl = admin_url("
|
| 387 |
}
|
| 388 |
|
| 389 |
if (FORCE_SSL_ADMIN) {
|
| 10 |
$table_name = $wpdb->prefix . "posts";
|
| 11 |
$postmeta_table_name = $wpdb->prefix . "postmeta";
|
| 12 |
|
| 13 |
+
require_once('thumbnail_updater.php');
|
| 14 |
+
|
| 15 |
/**
|
| 16 |
* Delete a media file and its thumbnails.
|
| 17 |
*
|
| 23 |
|
| 24 |
// Find path of current file
|
| 25 |
$current_path = substr($current_file, 0, (strrpos($current_file, "/")));
|
| 26 |
+
|
| 27 |
// Check if old file exists first
|
| 28 |
if (file_exists($current_file)) {
|
| 29 |
// Now check for correct file permissions for old file
|
| 35 |
else {
|
| 36 |
// File exists, but has wrong permissions. Let the user know.
|
| 37 |
printf( esc_html__('The file %1$s can not be deleted by the web server, most likely because the permissions on the file are wrong.', "enable-media-replace"), $current_file);
|
| 38 |
+
exit;
|
| 39 |
}
|
| 40 |
}
|
| 41 |
+
|
| 42 |
// Delete old resized versions if this was an image
|
| 43 |
$suffix = substr($current_file, (strlen($current_file)-4));
|
| 44 |
$prefix = substr($current_file, 0, (strlen($current_file)-4));
|
| 55 |
if ( empty( $metadata ) ) {
|
| 56 |
$metadata = wp_get_attachment_metadata( $_POST["ID"] );
|
| 57 |
}
|
|
|
|
| 58 |
|
| 59 |
if (is_array($metadata)) { // Added fix for error messages when there is no metadata (but WHY would there not be? I don't know…)
|
| 60 |
foreach($metadata["sizes"] AS $thissize) {
|
| 231 |
exit;
|
| 232 |
}
|
| 233 |
|
| 234 |
+
$thumbUpdater = new ThumbnailUpdater($ID);
|
| 235 |
+
$thumbUpdater->setOldMetadata($current_metadata);
|
| 236 |
+
|
| 237 |
$new_filename = $_FILES["userfile"]["name"];
|
| 238 |
$new_filesize = $_FILES["userfile"]["size"];
|
| 239 |
$new_filetype = $filedata["type"];
|
| 274 |
do_action('wp_handle_upload', array('file' => $current_file, 'url' => wp_get_attachment_url($ID), 'type' => $new_filetype));
|
| 275 |
|
| 276 |
// Make thumb and/or update metadata
|
| 277 |
+
$metadata = wp_generate_attachment_metadata( $ID, $current_file );
|
| 278 |
+
wp_update_attachment_metadata( $ID, $metadata );
|
| 279 |
+
|
| 280 |
+
$thumbUpdater->setNewMetadata($metadata);
|
| 281 |
+
$thumbUpdater->updateThumbnails();
|
| 282 |
|
| 283 |
+
|
| 284 |
+
// Trigger possible updates on CDN and other plugins
|
| 285 |
update_attached_file( $ID, $current_file);
|
| 286 |
+
|
| 287 |
+
|
| 288 |
} elseif ( 'replace_and_search' == $replace_type && apply_filters( 'emr_enable_replace_and_search', true ) ) {
|
| 289 |
// Replace file, replace file name, update meta data, replace links pointing to old file name
|
| 290 |
|
| 327 |
"SELECT meta_value FROM $postmeta_table_name WHERE meta_key = '_wp_attached_file' AND post_id = %d;",
|
| 328 |
$ID
|
| 329 |
);
|
| 330 |
+
|
| 331 |
$old_meta_name = $wpdb->get_row($sql, ARRAY_A);
|
| 332 |
$old_meta_name = $old_meta_name["meta_value"];
|
| 333 |
|
| 380 |
}
|
| 381 |
}
|
| 382 |
|
| 383 |
+
$thumbUpdater->setNewMetadata($new_metadata);
|
| 384 |
+
$thumbUpdater->updateThumbnails();
|
| 385 |
+
|
| 386 |
+
// Trigger possible updates on CDN and other plugins
|
| 387 |
update_attached_file( $ID, $new_file );
|
| 388 |
}
|
| 389 |
|
| 397 |
} else {
|
| 398 |
//TODO Better error handling when no file is selected.
|
| 399 |
//For now just go back to media management
|
| 400 |
+
$returnurl = admin_url("upload.php");
|
| 401 |
}
|
| 402 |
|
| 403 |
if (FORCE_SSL_ADMIN) {
|
