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 | Enable Media Replace |
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) {
|