Version Description
- Bug fixes, security fixes. Thanks to my old pal Ulf "rsta" Hrnhammar for pointing them out!
- New method for uploading avoids going around WP, for greater security.
Download this release
Release Info
Developer | MungoBBQ |
Plugin | Enable Media Replace |
Version | 2.4 |
Comparing to | |
See all releases |
Code changes from version 2.3 to 2.4
- enable-media-replace.php +11 -5
- popup.php +8 -3
- readme.txt +5 -1
- upload.php +35 -28
enable-media-replace.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: Enable Media Replace
|
4 |
Plugin URI: http://www.mansjonasson.se/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: 2.
|
7 |
Author: M�ns Jonasson
|
8 |
Author URI: http://www.mansjonasson.se
|
9 |
|
@@ -24,7 +24,6 @@ Developed for .SE (Stiftelsen f
|
|
24 |
* @subpackage enable-media-replace
|
25 |
*
|
26 |
*/
|
27 |
-
//ini_set("display_errors", "on");
|
28 |
|
29 |
add_action( 'admin_init', 'enable_media_replace_init' );
|
30 |
add_action('admin_menu', 'emr_menu');
|
@@ -55,9 +54,9 @@ function enable_media_replace_init() {
|
|
55 |
*/
|
56 |
function enable_media_replace( $form_fields ) {
|
57 |
|
58 |
-
if ($_GET["attachment_id"]) {
|
59 |
|
60 |
-
$url =
|
61 |
$action = "media_replace";
|
62 |
$editurl = wp_nonce_url( $url, $action );
|
63 |
|
@@ -79,10 +78,17 @@ function emr_options() {
|
|
79 |
|
80 |
if ( isset( $_GET['action'] ) && $_GET['action'] == 'media_replace' ) {
|
81 |
check_admin_referer( 'media_replace' ); // die if invalid or missing nonce
|
82 |
-
if ( array_key_exists("attachment_id", $_GET) && $_GET["attachment_id"] > 0) {
|
83 |
include("popup.php");
|
84 |
}
|
85 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
86 |
}
|
87 |
|
88 |
/**
|
3 |
Plugin Name: Enable Media Replace
|
4 |
Plugin URI: http://www.mansjonasson.se/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: 2.4
|
7 |
Author: M�ns Jonasson
|
8 |
Author URI: http://www.mansjonasson.se
|
9 |
|
24 |
* @subpackage enable-media-replace
|
25 |
*
|
26 |
*/
|
|
|
27 |
|
28 |
add_action( 'admin_init', 'enable_media_replace_init' );
|
29 |
add_action('admin_menu', 'emr_menu');
|
54 |
*/
|
55 |
function enable_media_replace( $form_fields ) {
|
56 |
|
57 |
+
if (isset($_GET["attachment_id"]) && $_GET["attachment_id"]) {
|
58 |
|
59 |
+
$url = admin_url( "upload.php?page=enable-media-replace/enable-media-replace.php&action=media_replace&attachment_id=" . (int) $_GET["attachment_id"]);
|
60 |
$action = "media_replace";
|
61 |
$editurl = wp_nonce_url( $url, $action );
|
62 |
|
78 |
|
79 |
if ( isset( $_GET['action'] ) && $_GET['action'] == 'media_replace' ) {
|
80 |
check_admin_referer( 'media_replace' ); // die if invalid or missing nonce
|
81 |
+
if ( array_key_exists("attachment_id", $_GET) && (int) $_GET["attachment_id"] > 0) {
|
82 |
include("popup.php");
|
83 |
}
|
84 |
}
|
85 |
+
|
86 |
+
if ( isset( $_GET['action'] ) && $_GET['action'] == 'media_replace_upload' ) {
|
87 |
+
$plugin_url = str_replace("enable-media-replace.php", "", __FILE__);
|
88 |
+
check_admin_referer( 'media_replace_upload' ); // die if invalid or missing nonce
|
89 |
+
require_once($plugin_url . "upload.php");
|
90 |
+
}
|
91 |
+
|
92 |
}
|
93 |
|
94 |
/**
|
popup.php
CHANGED
@@ -17,7 +17,7 @@ global $wpdb;
|
|
17 |
|
18 |
$table_name = $wpdb->prefix . "posts";
|
19 |
|
20 |
-
$sql = "SELECT guid, post_mime_type FROM $table_name WHERE ID =
|
21 |
|
22 |
list($current_filename, $current_filetype) = mysql_fetch_array(mysql_query($sql));
|
23 |
|
@@ -30,14 +30,19 @@ $current_filename = substr($current_filename, (strrpos($current_filename, "/") +
|
|
30 |
<h2><?php echo __("Replace Media Upload", "enable-media-replace"); ?></h2>
|
31 |
|
32 |
<?php
|
33 |
-
$
|
|
|
|
|
34 |
if (FORCE_SSL_ADMIN) {
|
35 |
$formurl = str_replace("http:", "https:", $formurl);
|
36 |
}
|
37 |
?>
|
38 |
|
39 |
<form enctype="multipart/form-data" method="post" action="<?php echo $formurl; ?>">
|
40 |
-
|
|
|
|
|
|
|
41 |
<div id="message" class="updated fade"><p><?php echo __("NOTE: You are about to replace the media file", "enable-media-replace"); ?> "<?php echo $current_filename?>". <?php echo __("There is no undo. Think about it!", "enable-media-replace"); ?></p></div>
|
42 |
|
43 |
<p><?php echo __("Choose a file to upload from your computer", "enable-media-replace"); ?></p>
|
17 |
|
18 |
$table_name = $wpdb->prefix . "posts";
|
19 |
|
20 |
+
$sql = "SELECT guid, post_mime_type FROM $table_name WHERE ID = " . (int) $_GET["attachment_id"];
|
21 |
|
22 |
list($current_filename, $current_filetype) = mysql_fetch_array(mysql_query($sql));
|
23 |
|
30 |
<h2><?php echo __("Replace Media Upload", "enable-media-replace"); ?></h2>
|
31 |
|
32 |
<?php
|
33 |
+
$url = admin_url( "upload.php?page=enable-media-replace/enable-media-replace.php&action=media_replace_upload&attachment_id=" . (int) $_GET["attachment_id"]);
|
34 |
+
$action = "media_replace_upload";
|
35 |
+
$formurl = wp_nonce_url( $url, $action );
|
36 |
if (FORCE_SSL_ADMIN) {
|
37 |
$formurl = str_replace("http:", "https:", $formurl);
|
38 |
}
|
39 |
?>
|
40 |
|
41 |
<form enctype="multipart/form-data" method="post" action="<?php echo $formurl; ?>">
|
42 |
+
<?php
|
43 |
+
#wp_nonce_field('enable-media-replace');
|
44 |
+
?>
|
45 |
+
<input type="hidden" name="ID" value="<?php echo (int) $_GET["attachment_id"]; ?>" />
|
46 |
<div id="message" class="updated fade"><p><?php echo __("NOTE: You are about to replace the media file", "enable-media-replace"); ?> "<?php echo $current_filename?>". <?php echo __("There is no undo. Think about it!", "enable-media-replace"); ?></p></div>
|
47 |
|
48 |
<p><?php echo __("Choose a file to upload from your computer", "enable-media-replace"); ?></p>
|
readme.txt
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
Contributors: mungobbq
|
3 |
Tags: admin, attachment, media, files
|
4 |
Requires at least: 2.8
|
5 |
-
Tested up to: 3.0.
|
6 |
Stable tag: trunk
|
7 |
|
8 |
Enables replacing attachment files by simply uploading a new file in the media library edit view.
|
@@ -37,6 +37,10 @@ If you want more control over the format used to display the time, you can use t
|
|
37 |
|
38 |
== Changelog ==
|
39 |
|
|
|
|
|
|
|
|
|
40 |
= 2.3 =
|
41 |
* Lots of code trimmed and enhanced, thanks to Ben ter Stal! Now working properly with Windows systems, better security, optimized loading, and much more.
|
42 |
* Added Dutch translation by Ben ter Stal.
|
2 |
Contributors: mungobbq
|
3 |
Tags: admin, attachment, media, files
|
4 |
Requires at least: 2.8
|
5 |
+
Tested up to: 3.0.5
|
6 |
Stable tag: trunk
|
7 |
|
8 |
Enables replacing attachment files by simply uploading a new file in the media library edit view.
|
37 |
|
38 |
== Changelog ==
|
39 |
|
40 |
+
= 2.4 =
|
41 |
+
* Bug fixes, security fixes. Thanks to my old pal Ulf "�rsta" H�rnhammar for pointing them out!
|
42 |
+
* New method for uploading avoids going around WP, for greater security.
|
43 |
+
|
44 |
= 2.3 =
|
45 |
* Lots of code trimmed and enhanced, thanks to Ben ter Stal! Now working properly with Windows systems, better security, optimized loading, and much more.
|
46 |
* Added Dutch translation by Ben ter Stal.
|
upload.php
CHANGED
@@ -1,40 +1,21 @@
|
|
1 |
<?php
|
2 |
-
/**
|
3 |
-
* Handling upload new media file
|
4 |
-
* We have two types: replace / replace_and_search
|
5 |
-
*
|
6 |
-
* @author M�ns Jonasson <http://www.mansjonasson.se>
|
7 |
-
* @copyright M�ns Jonasson 13 sep 2010
|
8 |
-
* @version $Revision: 1984 $ | $Date: 2009-09-09 13:01:30 +0200 (wo, 09 sep 2009) $
|
9 |
-
* @package wordpress
|
10 |
-
* @subpackage enable-media-replace
|
11 |
-
*
|
12 |
-
*/
|
13 |
-
|
14 |
-
|
15 |
-
$wppath = str_replace("wp-content/plugins/enable-media-replace/upload.php", "", str_replace('\\','/',__FILE__));
|
16 |
-
|
17 |
-
require_once($wppath . "wp-load.php");
|
18 |
-
require_once($wppath . "wp-admin/admin.php");
|
19 |
-
|
20 |
if (!current_user_can('upload_files'))
|
21 |
wp_die(__('You do not have permission to upload files.'));
|
22 |
|
23 |
-
global $wpdb;
|
24 |
-
|
25 |
// Define DB table names
|
|
|
26 |
$table_name = $wpdb->prefix . "posts";
|
27 |
$postmeta_table_name = $wpdb->prefix . "postmeta";
|
28 |
|
29 |
// Get old guid and filetype from DB
|
30 |
-
$sql = "SELECT guid, post_mime_type FROM $table_name WHERE ID =
|
31 |
list($current_filename, $current_filetype) = mysql_fetch_array(mysql_query($sql));
|
32 |
|
33 |
// Massage a bunch of vars
|
34 |
$current_guid = $current_filename;
|
35 |
$current_filename = substr($current_filename, (strrpos($current_filename, "/") + 1));
|
36 |
|
37 |
-
$current_file = get_attached_file($_POST["ID"], true);
|
38 |
$current_path = substr($current_file, 0, (strrpos($current_file, "/")));
|
39 |
$current_file = str_replace("//", "/", $current_file);
|
40 |
$current_filename = basename($current_file);
|
@@ -47,6 +28,14 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
47 |
$new_filename = $_FILES["userfile"]["name"];
|
48 |
$new_filetype = $_FILES["userfile"]["type"];
|
49 |
$new_filesize = $_FILES["userfile"]["size"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
|
51 |
if ($replace_type == "replace") {
|
52 |
// Drop-in replace and we don't even care if you uploaded something that is the wrong file-type.
|
@@ -54,6 +43,15 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
54 |
|
55 |
// Delete old file
|
56 |
unlink($current_file);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
|
58 |
// Move new file to old location/name
|
59 |
move_uploaded_file($_FILES["userfile"]["tmp_name"], $current_file);
|
@@ -62,7 +60,7 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
62 |
chmod($current_file, 0644);
|
63 |
|
64 |
// Make thumb and/or update metadata
|
65 |
-
wp_update_attachment_metadata( $_POST["ID"], wp_generate_attachment_metadata( $_POST["ID"], $current_file ) );
|
66 |
|
67 |
}
|
68 |
|
@@ -71,6 +69,15 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
71 |
|
72 |
// Delete old file
|
73 |
unlink($current_file);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
// Massage new filename to adhere to WordPress standards
|
76 |
$new_filename= wp_unique_filename( $current_path, $new_filename );
|
@@ -86,20 +93,20 @@ if (is_uploaded_file($_FILES["userfile"]["tmp_name"])) {
|
|
86 |
$new_guid = str_replace($current_filename, $new_filename, $current_guid);
|
87 |
|
88 |
// Update database file name
|
89 |
-
mysql_query("UPDATE $table_name SET post_title = '$new_filetitle', post_name = '$new_filetitle', guid = '$new_guid', post_mime_type = '$new_filetype' WHERE ID =
|
90 |
-
|
91 |
// Update the postmeta file name
|
92 |
|
93 |
// Get old postmeta _wp_attached_file
|
94 |
-
$sql = "SELECT meta_value FROM $postmeta_table_name WHERE meta_key = '_wp_attached_file' AND post_id = '
|
95 |
$old_meta_name = mysql_result(mysql_query($sql),0);
|
96 |
|
97 |
// Make new postmeta _wp_attached_file
|
98 |
$new_meta_name = str_replace($current_filename, $new_filename, $old_meta_name);
|
99 |
-
mysql_query("UPDATE $postmeta_table_name SET meta_value = '$new_meta_name' WHERE meta_key = '_wp_attached_file' AND post_id = '
|
100 |
|
101 |
// Make thumb and/or update metadata
|
102 |
-
wp_update_attachment_metadata( $_POST["ID"], wp_generate_attachment_metadata( $_POST["ID"], $new_file) );
|
103 |
|
104 |
// Search-and-replace filename in post database
|
105 |
$sql = "SELECT ID, post_content FROM $table_name WHERE post_content LIKE '%$current_guid%'";
|
1 |
<?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
if (!current_user_can('upload_files'))
|
3 |
wp_die(__('You do not have permission to upload files.'));
|
4 |
|
|
|
|
|
5 |
// Define DB table names
|
6 |
+
global $wpdb;
|
7 |
$table_name = $wpdb->prefix . "posts";
|
8 |
$postmeta_table_name = $wpdb->prefix . "postmeta";
|
9 |
|
10 |
// Get old guid and filetype from DB
|
11 |
+
$sql = "SELECT guid, post_mime_type FROM $table_name WHERE ID = '" . (int) $_POST["ID"] . "'";
|
12 |
list($current_filename, $current_filetype) = mysql_fetch_array(mysql_query($sql));
|
13 |
|
14 |
// Massage a bunch of vars
|
15 |
$current_guid = $current_filename;
|
16 |
$current_filename = substr($current_filename, (strrpos($current_filename, "/") + 1));
|
17 |
|
18 |
+
$current_file = get_attached_file((int) $_POST["ID"], true);
|
19 |
$current_path = substr($current_file, 0, (strrpos($current_file, "/")));
|
20 |
$current_file = str_replace("//", "/", $current_file);
|
21 |
$current_filename = basename($current_file);
|
28 |
$new_filename = $_FILES["userfile"]["name"];
|
29 |
$new_filetype = $_FILES["userfile"]["type"];
|
30 |
$new_filesize = $_FILES["userfile"]["size"];
|
31 |
+
|
32 |
+
// Check that mime type is allowed
|
33 |
+
$allowed_mime_types = get_allowed_mime_types();
|
34 |
+
if (!in_array($new_filetype, $allowed_mime_types)) {
|
35 |
+
echo __("File type does not meet security guidelines. Try another.");
|
36 |
+
exit;
|
37 |
+
}
|
38 |
+
|
39 |
|
40 |
if ($replace_type == "replace") {
|
41 |
// Drop-in replace and we don't even care if you uploaded something that is the wrong file-type.
|
43 |
|
44 |
// Delete old file
|
45 |
unlink($current_file);
|
46 |
+
|
47 |
+
// Delete old resized versions if this was an image
|
48 |
+
$suffix = substr($current_file, (strlen($current_file)-4));
|
49 |
+
$prefix = substr($current_file, 0, (strlen($current_file)-4));
|
50 |
+
$imgAr = array(".png", ".gif", ".jpg");
|
51 |
+
if (in_array($suffix, $imgAr)) {
|
52 |
+
$mask = $prefix . "-*x*" . $suffix;
|
53 |
+
array_map( "unlink", glob( $mask ) );
|
54 |
+
}
|
55 |
|
56 |
// Move new file to old location/name
|
57 |
move_uploaded_file($_FILES["userfile"]["tmp_name"], $current_file);
|
60 |
chmod($current_file, 0644);
|
61 |
|
62 |
// Make thumb and/or update metadata
|
63 |
+
wp_update_attachment_metadata( (int) $_POST["ID"], wp_generate_attachment_metadata( (int) $_POST["ID"], $current_file ) );
|
64 |
|
65 |
}
|
66 |
|
69 |
|
70 |
// Delete old file
|
71 |
unlink($current_file);
|
72 |
+
|
73 |
+
// Delete old resized versions if this was an image
|
74 |
+
$suffix = substr($current_file, (strlen($current_file)-4));
|
75 |
+
$prefix = substr($current_file, 0, (strlen($current_file)-4));
|
76 |
+
$imgAr = array(".png", ".gif", ".jpg");
|
77 |
+
if (in_array($suffix, $imgAr)) {
|
78 |
+
$mask = $prefix . "-*x*" . $suffix;
|
79 |
+
array_map( "unlink", glob( $mask ) );
|
80 |
+
}
|
81 |
|
82 |
// Massage new filename to adhere to WordPress standards
|
83 |
$new_filename= wp_unique_filename( $current_path, $new_filename );
|
93 |
$new_guid = str_replace($current_filename, $new_filename, $current_guid);
|
94 |
|
95 |
// Update database file name
|
96 |
+
mysql_query("UPDATE $table_name SET post_title = '$new_filetitle', post_name = '$new_filetitle', guid = '$new_guid', post_mime_type = '$new_filetype' WHERE ID = '" . (int) $_POST["ID"] . "'");
|
97 |
+
|
98 |
// Update the postmeta file name
|
99 |
|
100 |
// Get old postmeta _wp_attached_file
|
101 |
+
$sql = "SELECT meta_value FROM $postmeta_table_name WHERE meta_key = '_wp_attached_file' AND post_id = '" . (int) $_POST["ID"] . "'";
|
102 |
$old_meta_name = mysql_result(mysql_query($sql),0);
|
103 |
|
104 |
// Make new postmeta _wp_attached_file
|
105 |
$new_meta_name = str_replace($current_filename, $new_filename, $old_meta_name);
|
106 |
+
mysql_query("UPDATE $postmeta_table_name SET meta_value = '$new_meta_name' WHERE meta_key = '_wp_attached_file' AND post_id = '" . (int) $_POST["ID"] . "'");
|
107 |
|
108 |
// Make thumb and/or update metadata
|
109 |
+
wp_update_attachment_metadata( (int) $_POST["ID"], wp_generate_attachment_metadata( (int) $_POST["ID"], $new_file) );
|
110 |
|
111 |
// Search-and-replace filename in post database
|
112 |
$sql = "SELECT ID, post_content FROM $table_name WHERE post_content LIKE '%$current_guid%'";
|