Version Description
Release date: 23rd July 2019 * compatibility fixes for WP version 4.8 and below * cache killer
Download this release
Release Info
Developer | ShortPixel |
Plugin | Enable Media Replace |
Version | 3.3.4 |
Comparing to | |
See all releases |
Code changes from version 3.3.2 to 3.3.4
- build/shortpixel/PackageLoader.php +1 -1
- build/shortpixel/log/src/DebugItem.php +6 -1
- classes/compat.php +96 -0
- classes/emr-plugin.php +70 -25
- classes/externals.php +0 -4
- classes/replacer.php +4 -3
- classes/uihelper.php +1 -1
- composer.json +0 -25
- css/edit_attachment.css +20 -0
- enable-media-replace.php +2 -1
- readme.txt +16 -0
- scss/edit_attachment.scss +30 -0
build/shortpixel/PackageLoader.php
CHANGED
@@ -61,7 +61,7 @@ class PackageLoader
|
|
61 |
}
|
62 |
$filename = preg_replace("#\\\\#", "/", $classname).".php";
|
63 |
foreach ($classpaths as $classpath) {
|
64 |
-
$fullpath = $
|
65 |
if (file_exists($fullpath)) {
|
66 |
include_once $fullpath;
|
67 |
}
|
61 |
}
|
62 |
$filename = preg_replace("#\\\\#", "/", $classname).".php";
|
63 |
foreach ($classpaths as $classpath) {
|
64 |
+
$fullpath = $dir."/".$classpath."/$filename";
|
65 |
if (file_exists($fullpath)) {
|
66 |
include_once $fullpath;
|
67 |
}
|
build/shortpixel/log/src/DebugItem.php
CHANGED
@@ -118,7 +118,12 @@ class DebugItem
|
|
118 |
|
119 |
protected function setCaller()
|
120 |
{
|
121 |
-
|
|
|
|
|
|
|
|
|
|
|
122 |
$i = 4;
|
123 |
if (isset($debug[$i]))
|
124 |
{
|
118 |
|
119 |
protected function setCaller()
|
120 |
{
|
121 |
+
if(PHP_VERSION_ID < 50400) {
|
122 |
+
$debug=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
|
123 |
+
} else {
|
124 |
+
$debug=debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS,5);
|
125 |
+
}
|
126 |
+
|
127 |
$i = 4;
|
128 |
if (isset($debug[$i]))
|
129 |
{
|
classes/compat.php
ADDED
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// Compatibility functions for old version of WordPress / PHP / Other
|
4 |
+
|
5 |
+
|
6 |
+
/*
|
7 |
+
* Introduced in WP 4.9.7 - https://developer.wordpress.org/reference/functions/wp_delete_attachment_files/
|
8 |
+
* Compat for previous versions.
|
9 |
+
*/
|
10 |
+
if (! function_exists('wp_delete_attachment_files'))
|
11 |
+
{
|
12 |
+
function wp_delete_attachment_files($post_id, $meta, $backup_sizes, $file )
|
13 |
+
{
|
14 |
+
global $wpdb;
|
15 |
+
$uploadpath = wp_get_upload_dir();
|
16 |
+
$deleted = true;
|
17 |
+
|
18 |
+
if ( ! empty( $meta['thumb'] ) ) {
|
19 |
+
// Don't delete the thumb if another attachment uses it.
|
20 |
+
if ( ! $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE meta_key = '_wp_attachment_metadata' AND meta_value LIKE %s AND post_id <> %d", '%' . $wpdb->esc_like( $meta['thumb'] ) . '%', $post_id ) ) ) {
|
21 |
+
$thumbfile = str_replace( wp_basename( $file ), $meta['thumb'], $file );
|
22 |
+
if ( ! empty( $thumbfile ) ) {
|
23 |
+
$thumbfile = path_join( $uploadpath['basedir'], $thumbfile );
|
24 |
+
$thumbdir = path_join( $uploadpath['basedir'], dirname( $file ) );
|
25 |
+
|
26 |
+
if ( ! wp_delete_file_from_directory( $thumbfile, $thumbdir ) ) {
|
27 |
+
$deleted = false;
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
}
|
32 |
+
|
33 |
+
// Remove intermediate and backup images if there are any.
|
34 |
+
if ( isset( $meta['sizes'] ) && is_array( $meta['sizes'] ) ) {
|
35 |
+
$intermediate_dir = path_join( $uploadpath['basedir'], dirname( $file ) );
|
36 |
+
foreach ( $meta['sizes'] as $size => $sizeinfo ) {
|
37 |
+
$intermediate_file = str_replace( wp_basename( $file ), $sizeinfo['file'], $file );
|
38 |
+
if ( ! empty( $intermediate_file ) ) {
|
39 |
+
$intermediate_file = path_join( $uploadpath['basedir'], $intermediate_file );
|
40 |
+
|
41 |
+
if ( ! wp_delete_file_from_directory( $intermediate_file, $intermediate_dir ) ) {
|
42 |
+
$deleted = false;
|
43 |
+
}
|
44 |
+
}
|
45 |
+
}
|
46 |
+
}
|
47 |
+
|
48 |
+
if ( is_array( $backup_sizes ) ) {
|
49 |
+
$del_dir = path_join( $uploadpath['basedir'], dirname( $meta['file'] ) );
|
50 |
+
foreach ( $backup_sizes as $size ) {
|
51 |
+
$del_file = path_join( dirname( $meta['file'] ), $size['file'] );
|
52 |
+
if ( ! empty( $del_file ) ) {
|
53 |
+
$del_file = path_join( $uploadpath['basedir'], $del_file );
|
54 |
+
|
55 |
+
if ( ! wp_delete_file_from_directory( $del_file, $del_dir ) ) {
|
56 |
+
$deleted = false;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
60 |
+
}
|
61 |
+
|
62 |
+
if ( ! wp_delete_file_from_directory( $file, $uploadpath['basedir'] ) ) {
|
63 |
+
$deleted = false;
|
64 |
+
}
|
65 |
+
|
66 |
+
return $deleted;
|
67 |
+
|
68 |
+
}
|
69 |
+
} // end function
|
70 |
+
|
71 |
+
|
72 |
+
/*
|
73 |
+
* Introduced in WP 4.9.7 - https://developer.wordpress.org/reference/functions/wp_delete_attachment_files/
|
74 |
+
* Compat for previous versions.
|
75 |
+
*/
|
76 |
+
if (! function_exists('wp_delete_file_from_directory'))
|
77 |
+
{
|
78 |
+
function wp_delete_file_from_directory( $file, $directory ) {
|
79 |
+
if ( wp_is_stream( $file ) ) {
|
80 |
+
$real_file = wp_normalize_path( $file );
|
81 |
+
$real_directory = wp_normalize_path( $directory );
|
82 |
+
} else {
|
83 |
+
$real_file = realpath( wp_normalize_path( $file ) );
|
84 |
+
$real_directory = realpath( wp_normalize_path( $directory ) );
|
85 |
+
}
|
86 |
+
|
87 |
+
if ( false === $real_file || false === $real_directory || strpos( $real_file, trailingslashit( $real_directory ) ) !== 0 ) {
|
88 |
+
return false;
|
89 |
+
}
|
90 |
+
|
91 |
+
wp_delete_file( $file );
|
92 |
+
|
93 |
+
return true;
|
94 |
+
}
|
95 |
+
|
96 |
+
} // end function
|
classes/emr-plugin.php
CHANGED
@@ -35,7 +35,6 @@ class EnableMediaReplacePlugin
|
|
35 |
add_action('admin_enqueue_scripts', array($this,'admin_scripts'));
|
36 |
|
37 |
// content filters
|
38 |
-
add_filter('attachment_fields_to_edit', array($this, 'attachment_editor'), 10, 2);
|
39 |
add_filter('media_row_actions', array($this,'add_media_action'), 10, 2);
|
40 |
add_action('attachment_submitbox_misc_actions', array($this,'admin_date_replaced_media_on_edit_media_screen'), 91 );
|
41 |
add_filter('upload_mimes', array($this,'add_mime_types'), 1, 1);
|
@@ -45,9 +44,20 @@ class EnableMediaReplacePlugin
|
|
45 |
add_action('network_admin_notices', array($this,'display_network_notices'));
|
46 |
add_action('wp_ajax_emr_dismiss_notices', array($this,'dismiss_notices'));
|
47 |
|
|
|
48 |
// shortcode
|
49 |
add_shortcode('file_modified', array($this, 'get_modified_date'));
|
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
}
|
52 |
|
53 |
/**
|
@@ -128,6 +138,8 @@ class EnableMediaReplacePlugin
|
|
128 |
wp_register_style('emr_style', plugins_url('css/admin.css', EMR_ROOT_FILE) );
|
129 |
}
|
130 |
|
|
|
|
|
131 |
wp_register_script('emr_admin', plugins_url('js/emr_admin.js', EMR_ROOT_FILE), array('jquery'), false, true );
|
132 |
$emr_options = array(
|
133 |
'dateFormat' => $this->convertdate(get_option( 'date_format' )),
|
@@ -135,6 +147,7 @@ class EnableMediaReplacePlugin
|
|
135 |
|
136 |
);
|
137 |
|
|
|
138 |
if (Log::debugIsActive())
|
139 |
$emr_options['is_debug'] = true;
|
140 |
|
@@ -179,30 +192,43 @@ class EnableMediaReplacePlugin
|
|
179 |
|
180 |
}
|
181 |
|
182 |
-
|
183 |
-
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
{
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
|
|
206 |
}
|
207 |
|
208 |
/**
|
@@ -266,8 +292,15 @@ class EnableMediaReplacePlugin
|
|
266 |
* @param $post Obj Post Object
|
267 |
*/
|
268 |
function admin_date_replaced_media_on_edit_media_screen($post) {
|
269 |
-
$post_id = $post->ID;
|
270 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
if ( $post->post_modified == $post->post_date ) {
|
272 |
return;
|
273 |
}
|
@@ -281,6 +314,18 @@ class EnableMediaReplacePlugin
|
|
281 |
<?php
|
282 |
}
|
283 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
284 |
/**
|
285 |
* Shorttag function to show the media file modification date/time.
|
286 |
* @param array shorttag attributes
|
35 |
add_action('admin_enqueue_scripts', array($this,'admin_scripts'));
|
36 |
|
37 |
// content filters
|
|
|
38 |
add_filter('media_row_actions', array($this,'add_media_action'), 10, 2);
|
39 |
add_action('attachment_submitbox_misc_actions', array($this,'admin_date_replaced_media_on_edit_media_screen'), 91 );
|
40 |
add_filter('upload_mimes', array($this,'add_mime_types'), 1, 1);
|
44 |
add_action('network_admin_notices', array($this,'display_network_notices'));
|
45 |
add_action('wp_ajax_emr_dismiss_notices', array($this,'dismiss_notices'));
|
46 |
|
47 |
+
add_action( 'add_meta_boxes', function () { add_meta_box('emr-eplace-box', __('Replace Image', 'enable-media-replace'), array($this, 'replace_meta_box'), 'attachment', 'side', 'low'); } );
|
48 |
// shortcode
|
49 |
add_shortcode('file_modified', array($this, 'get_modified_date'));
|
50 |
|
51 |
+
/** Just after an image is replaced, try to browser decache the images */
|
52 |
+
if (isset($_GET['emr_replaced']) && intval($_GET['emr_replaced'] == 1))
|
53 |
+
{
|
54 |
+
add_filter('wp_get_attachment_image_src',array($this, 'attempt_uncache_image'), 10, 4);
|
55 |
+
|
56 |
+
// adds a metabox to list thumbnails. This is a cache reset hidden as feature.
|
57 |
+
add_action( 'add_meta_boxes', function () { add_meta_box('emr-replace-box', __('Replaced Thumbnails Preview', 'enable-media-replace'), array($this, 'show_thumbs_box'), 'attachment', 'side', 'low'); } );
|
58 |
+
add_filter('postbox_classes_attachment_emr-replace-box', function($classes) { $classes[] = 'closed'; return $classes; });
|
59 |
+
}
|
60 |
+
|
61 |
}
|
62 |
|
63 |
/**
|
138 |
wp_register_style('emr_style', plugins_url('css/admin.css', EMR_ROOT_FILE) );
|
139 |
}
|
140 |
|
141 |
+
wp_register_style('emr_edit-attachment', plugins_url('css/edit_attachment.css', EMR_ROOT_FILE));
|
142 |
+
|
143 |
wp_register_script('emr_admin', plugins_url('js/emr_admin.js', EMR_ROOT_FILE), array('jquery'), false, true );
|
144 |
$emr_options = array(
|
145 |
'dateFormat' => $this->convertdate(get_option( 'date_format' )),
|
147 |
|
148 |
);
|
149 |
|
150 |
+
|
151 |
if (Log::debugIsActive())
|
152 |
$emr_options['is_debug'] = true;
|
153 |
|
192 |
|
193 |
}
|
194 |
|
195 |
+
public function replace_meta_box($post)
|
196 |
+
{
|
197 |
+
$url = $this->getMediaReplaceURL($post->ID);
|
198 |
+
|
199 |
+
$action = "media_replace";
|
200 |
+
$editurl = wp_nonce_url( $url, $action );
|
201 |
+
|
202 |
+
/* Unneeded - admin_url already checks for force_ssl_admin ( in set_scheme function )
|
203 |
+
if (FORCE_SSL_ADMIN) {
|
204 |
+
$editurl = str_replace("http:", "https:", $editurl);
|
205 |
+
} */
|
206 |
+
$link = "href=\"$editurl\"";
|
207 |
+
|
208 |
+
|
209 |
+
echo "<p><a class='button-secondary' $link>" . esc_html__("Upload a new file", "enable-media-replace") . "</a></p><p>" . esc_html__("To replace the current file, click the link and upload a replacement.", "enable-media-replace") . "</p>";
|
210 |
+
}
|
211 |
+
|
212 |
+
public function show_thumbs_box($post)
|
213 |
{
|
214 |
+
wp_enqueue_style('emr_edit-attachment');
|
215 |
+
|
216 |
+
$meta = wp_get_attachment_metadata($post->ID);
|
217 |
+
|
218 |
+
if (! isset($meta['sizes']) )
|
219 |
+
{ echo __('Thumbnails were not generated', 'enable-media-replace');
|
220 |
+
return false;
|
221 |
+
}
|
222 |
+
|
223 |
+
foreach($meta['sizes'] as $size => $data)
|
224 |
+
{
|
225 |
+
$display_size = ucfirst(str_replace("_", " ", $size));
|
226 |
+
$img = wp_get_attachment_image_src($post->ID, $size);
|
227 |
+
echo "<div class='$size previewwrapper'><img src='" . $img[0] . "'><span class='label'>$display_size</span></div>";
|
228 |
+
}
|
229 |
+
|
230 |
+
|
231 |
+
|
232 |
}
|
233 |
|
234 |
/**
|
292 |
* @param $post Obj Post Object
|
293 |
*/
|
294 |
function admin_date_replaced_media_on_edit_media_screen($post) {
|
|
|
295 |
|
296 |
+
// Fallback for before version 4.9, doens't pass post.
|
297 |
+
if (! is_object($post))
|
298 |
+
global $post;
|
299 |
+
|
300 |
+
if (! is_object($post)) // try to global, if it doesn't work - return.
|
301 |
+
return false;
|
302 |
+
|
303 |
+
$post_id = $post->ID;
|
304 |
if ( $post->post_modified == $post->post_date ) {
|
305 |
return;
|
306 |
}
|
314 |
<?php
|
315 |
}
|
316 |
|
317 |
+
/** When an image is just replaced, it can stuck in the browser cache making a look like it was not replaced. Try
|
318 |
+
* undo that effect by adding a timestamp to the query string */
|
319 |
+
public function attempt_uncache_image($image, $attachment_id, $size, $icon)
|
320 |
+
{
|
321 |
+
if ($image === false)
|
322 |
+
return $image;
|
323 |
+
|
324 |
+
// array with image src on 0
|
325 |
+
$image[0] = add_query_arg('time', time(), $image[0]);
|
326 |
+
return $image;
|
327 |
+
}
|
328 |
+
|
329 |
/**
|
330 |
* Shorttag function to show the media file modification date/time.
|
331 |
* @param array shorttag attributes
|
classes/externals.php
CHANGED
@@ -57,8 +57,4 @@ class Externals
|
|
57 |
|
58 |
}
|
59 |
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
}
|
57 |
|
58 |
}
|
59 |
|
|
|
|
|
|
|
|
|
60 |
}
|
classes/replacer.php
CHANGED
@@ -300,15 +300,16 @@ class Replacer
|
|
300 |
}
|
301 |
|
302 |
/* Search and replace in WP_POSTS */
|
303 |
-
|
|
|
304 |
"SELECT ID, post_content FROM $wpdb->posts WHERE post_status = 'publish' AND post_content LIKE %s;",
|
305 |
-
'%' . $current_base_url . '%')
|
306 |
|
307 |
//INNER JOIN ' . $wpdb->posts . ' on ' . $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id
|
308 |
|
309 |
$postmeta_sql = 'SELECT meta_id, post_id, meta_value FROM ' . $wpdb->postmeta . '
|
310 |
WHERE post_id in (SELECT ID from '. $wpdb->posts . ' where post_status = "publish") AND meta_value like %s ';
|
311 |
-
$postmeta_sql = $wpdb->
|
312 |
|
313 |
$rsmeta = $wpdb->get_results($postmeta_sql, ARRAY_A);
|
314 |
$rs = $wpdb->get_results( $posts_sql, ARRAY_A );
|
300 |
}
|
301 |
|
302 |
/* Search and replace in WP_POSTS */
|
303 |
+
// Removed $wpdb->remove_placeholder_escape from here, not compatible with WP 4.8
|
304 |
+
$posts_sql = $wpdb->prepare(
|
305 |
"SELECT ID, post_content FROM $wpdb->posts WHERE post_status = 'publish' AND post_content LIKE %s;",
|
306 |
+
'%' . $current_base_url . '%');
|
307 |
|
308 |
//INNER JOIN ' . $wpdb->posts . ' on ' . $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id
|
309 |
|
310 |
$postmeta_sql = 'SELECT meta_id, post_id, meta_value FROM ' . $wpdb->postmeta . '
|
311 |
WHERE post_id in (SELECT ID from '. $wpdb->posts . ' where post_status = "publish") AND meta_value like %s ';
|
312 |
+
$postmeta_sql = $wpdb->prepare($postmeta_sql, '%' . $current_base_url . '%');
|
313 |
|
314 |
$rsmeta = $wpdb->get_results($postmeta_sql, ARRAY_A);
|
315 |
$rs = $wpdb->get_results( $posts_sql, ARRAY_A );
|
classes/uihelper.php
CHANGED
@@ -51,7 +51,7 @@ class UIHelper
|
|
51 |
public function getSuccesRedirect($post_id)
|
52 |
{
|
53 |
$url = admin_url('post.php');
|
54 |
-
$url = add_query_arg(array('action' => 'edit', 'post' => $post_id), $url);
|
55 |
|
56 |
$url = apply_filters('emr_returnurl', $url);
|
57 |
Log::addDebug('Success URL- ' . $url);
|
51 |
public function getSuccesRedirect($post_id)
|
52 |
{
|
53 |
$url = admin_url('post.php');
|
54 |
+
$url = add_query_arg(array('action' => 'edit', 'post' => $post_id, 'emr_replaced' => '1'), $url);
|
55 |
|
56 |
$url = apply_filters('emr_returnurl', $url);
|
57 |
Log::addDebug('Success URL- ' . $url);
|
composer.json
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"repositories": [
|
3 |
-
{
|
4 |
-
"packagist.org": false,
|
5 |
-
"type": "path",
|
6 |
-
"url": "../modules/*",
|
7 |
-
"options": {
|
8 |
-
"symlink": true
|
9 |
-
}
|
10 |
-
}
|
11 |
-
],
|
12 |
-
"require": {
|
13 |
-
"shortpixel/notices":"@dev",
|
14 |
-
"shortpixel/build" : "@dev"
|
15 |
-
},
|
16 |
-
|
17 |
-
"scripts": {
|
18 |
-
"post-update-cmd" : "\\ShortPixel\\Build\\Build::BuildIt",
|
19 |
-
"buildSP" : "\\ShortPixel\\Build\\Build::BuildIt"
|
20 |
-
},
|
21 |
-
"extra": {
|
22 |
-
"targetNamespace" : "EnableMediaReplace"
|
23 |
-
}
|
24 |
-
|
25 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/edit_attachment.css
ADDED
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Styling for the edit attachment screen */
|
2 |
+
#emr-replace-box .previewwrapper {
|
3 |
+
display: inline-block;
|
4 |
+
position: relative;
|
5 |
+
clear: both;
|
6 |
+
margin: 3px 0; }
|
7 |
+
#emr-replace-box .previewwrapper img {
|
8 |
+
max-width: 100%; }
|
9 |
+
#emr-replace-box .previewwrapper span.label {
|
10 |
+
font-size: 14px;
|
11 |
+
color: #fff;
|
12 |
+
position: absolute;
|
13 |
+
line-height: 16px;
|
14 |
+
margin-top: -8px;
|
15 |
+
top: 50%;
|
16 |
+
left: 0;
|
17 |
+
right: 0;
|
18 |
+
background: rgba(0, 0, 0, 0.5);
|
19 |
+
text-align: center;
|
20 |
+
padding: 4px 0; }
|
enable-media-replace.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Enable Media Replace
|
4 |
Plugin URI: https://wordpress.org/plugins/enable-media-replace/
|
5 |
Description: Enable replacing media files by uploading a new file in the "Edit Media" section of the WordPress Media Library.
|
6 |
-
Version: 3.3.
|
7 |
Author: ShortPixel
|
8 |
Author URI: https://shortpixel.com
|
9 |
Text Domain: enable-media-replace
|
@@ -43,6 +43,7 @@ if(!defined("SHORTPIXEL_AFFILIATE_CODE")) {
|
|
43 |
}
|
44 |
|
45 |
require_once('build/shortpixel/autoload.php');
|
|
|
46 |
require_once('classes/replacer.php');
|
47 |
require_once('classes/uihelper.php');
|
48 |
require_once('classes/file.php');
|
3 |
Plugin Name: Enable Media Replace
|
4 |
Plugin URI: https://wordpress.org/plugins/enable-media-replace/
|
5 |
Description: Enable replacing media files by uploading a new file in the "Edit Media" section of the WordPress Media Library.
|
6 |
+
Version: 3.3.4
|
7 |
Author: ShortPixel
|
8 |
Author URI: https://shortpixel.com
|
9 |
Text Domain: enable-media-replace
|
43 |
}
|
44 |
|
45 |
require_once('build/shortpixel/autoload.php');
|
46 |
+
require_once('classes/compat.php');
|
47 |
require_once('classes/replacer.php');
|
48 |
require_once('classes/uihelper.php');
|
49 |
require_once('classes/file.php');
|
readme.txt
CHANGED
@@ -47,6 +47,17 @@ If you want more control over the format used to display the time, you can use t
|
|
47 |
|
48 |
== Changelog ==
|
49 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
= 3.3.2 =
|
51 |
|
52 |
Release date: 17th July 2019
|
@@ -306,3 +317,8 @@ Second, if the file really looks unchanged, make sure WordPress has write permis
|
|
306 |
== Wishlist / Coming attractions ==
|
307 |
|
308 |
Do you have suggestions? Feel free to contact ShortPixel <a href="https://shortpixel.com/contact" target="_blank">here</a>
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
== Changelog ==
|
49 |
|
50 |
+
= 3.3.4 =
|
51 |
+
|
52 |
+
Release date: 23rd July 2019
|
53 |
+
* compatibility fixes for WP version 4.8 and below
|
54 |
+
* cache killer
|
55 |
+
|
56 |
+
= 3.3.3 =
|
57 |
+
|
58 |
+
Release date: 19th July 2019
|
59 |
+
* Fix error "using $this when not in object context" on some PHP versions
|
60 |
+
|
61 |
= 3.3.2 =
|
62 |
|
63 |
Release date: 17th July 2019
|
317 |
== Wishlist / Coming attractions ==
|
318 |
|
319 |
Do you have suggestions? Feel free to contact ShortPixel <a href="https://shortpixel.com/contact" target="_blank">here</a>
|
320 |
+
|
321 |
+
|
322 |
+
== Contribute ==
|
323 |
+
|
324 |
+
Want to help us improve the plugin feel free to submit PRs via GitHub <a href="https://github.com/short-pixel-optimizer/enable-media-replace" target="_blank">here</a>.
|
scss/edit_attachment.scss
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
/* Styling for the edit attachment screen */
|
3 |
+
#emr-replace-box
|
4 |
+
{
|
5 |
+
.previewwrapper
|
6 |
+
{
|
7 |
+
display: inline-block;
|
8 |
+
position: relative;
|
9 |
+
clear: both;
|
10 |
+
margin: 3px 0;
|
11 |
+
|
12 |
+
img { max-width: 100%; }
|
13 |
+
span.label
|
14 |
+
{
|
15 |
+
font-size: 14px;
|
16 |
+
color: #fff;
|
17 |
+
position: absolute;
|
18 |
+
line-height: 16px;
|
19 |
+
margin-top: -8px;
|
20 |
+
top: 50%;
|
21 |
+
left: 0; right: 0;
|
22 |
+
background: rgba(0,0,0,0.5);
|
23 |
+
text-align: center;
|
24 |
+
padding: 4px 0;
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
29 |
+
|
30 |
+
}
|