2008-01-25 20:21:11 +01:00
|
|
|
<?php
|
2008-08-11 22:26:31 +02:00
|
|
|
/**
|
2017-09-21 18:35:48 +02:00
|
|
|
* Server-side file upload handler from wp-plupload or other asynchronous upload methods.
|
2008-08-11 22:26:31 +02:00
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Administration
|
|
|
|
*/
|
2009-04-20 20:18:39 +02:00
|
|
|
|
2014-03-15 20:59:15 +01:00
|
|
|
if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) {
|
|
|
|
define( 'DOING_AJAX', true );
|
|
|
|
}
|
|
|
|
|
2014-05-18 22:42:16 +02:00
|
|
|
if ( ! defined( 'WP_ADMIN' ) ) {
|
|
|
|
define( 'WP_ADMIN', true );
|
|
|
|
}
|
2008-01-25 20:21:11 +01:00
|
|
|
|
2017-09-21 18:35:48 +02:00
|
|
|
if ( defined( 'ABSPATH' ) ) {
|
2020-02-06 07:33:11 +01:00
|
|
|
require_once ABSPATH . 'wp-load.php';
|
2017-09-21 18:35:48 +02:00
|
|
|
} else {
|
2020-02-06 07:33:11 +01:00
|
|
|
require_once dirname( __DIR__ ) . '/wp-load.php';
|
2012-11-28 21:17:57 +01:00
|
|
|
}
|
2008-01-25 20:21:11 +01:00
|
|
|
|
2020-02-06 07:33:11 +01:00
|
|
|
require_once ABSPATH . 'wp-admin/admin.php';
|
2008-02-14 00:16:11 +01:00
|
|
|
|
2019-09-04 18:09:56 +02:00
|
|
|
header( 'Content-Type: text/plain; charset=' . get_option( 'blog_charset' ) );
|
2015-02-12 02:15:29 +01:00
|
|
|
|
2015-09-17 14:33:26 +02:00
|
|
|
if ( isset( $_REQUEST['action'] ) && 'upload-attachment' === $_REQUEST['action'] ) {
|
2020-02-06 07:33:11 +01:00
|
|
|
require ABSPATH . 'wp-admin/includes/ajax-actions.php';
|
2012-11-28 21:17:57 +01:00
|
|
|
|
|
|
|
send_nosniff_header();
|
|
|
|
nocache_headers();
|
|
|
|
|
|
|
|
wp_ajax_upload_attachment();
|
|
|
|
die( '0' );
|
|
|
|
}
|
|
|
|
|
2014-11-16 06:47:21 +01:00
|
|
|
if ( ! current_user_can( 'upload_files' ) ) {
|
2016-06-29 17:16:29 +02:00
|
|
|
wp_die( __( 'Sorry, you are not allowed to upload files.' ) );
|
2014-11-16 06:47:21 +01:00
|
|
|
}
|
|
|
|
|
2020-01-29 01:45:18 +01:00
|
|
|
// Just fetch the detail form for that attachment.
|
2020-10-08 23:15:13 +02:00
|
|
|
if ( isset( $_REQUEST['attachment_id'] ) && (int) $_REQUEST['attachment_id'] && $_REQUEST['fetch'] ) {
|
|
|
|
$id = (int) $_REQUEST['attachment_id'];
|
2011-02-05 19:22:53 +01:00
|
|
|
$post = get_post( $id );
|
2020-05-12 20:32:08 +02:00
|
|
|
if ( 'attachment' !== $post->post_type ) {
|
2017-01-10 03:40:42 +01:00
|
|
|
wp_die( __( 'Invalid post type.' ) );
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2011-02-05 19:22:53 +01:00
|
|
|
|
2012-11-21 14:05:44 +01:00
|
|
|
switch ( $_REQUEST['fetch'] ) {
|
2017-12-01 00:11:00 +01:00
|
|
|
case 3:
|
2021-05-26 03:40:58 +02:00
|
|
|
?>
|
2021-06-22 06:26:58 +02:00
|
|
|
<div class="media-item-wrapper">
|
|
|
|
<div class="attachment-details">
|
|
|
|
<?php
|
|
|
|
$thumb_url = wp_get_attachment_image_src( $id, 'thumbnail', true );
|
|
|
|
if ( $thumb_url ) {
|
|
|
|
echo '<img class="pinkynail" src="' . esc_url( $thumb_url[0] ) . '" alt="" />';
|
|
|
|
}
|
2021-05-26 16:24:57 +02:00
|
|
|
|
2021-06-22 06:26:58 +02:00
|
|
|
// Title shouldn't ever be empty, but use filename just in case.
|
|
|
|
$file = get_attached_file( $post->ID );
|
|
|
|
$file_url = wp_get_attachment_url( $post->ID );
|
|
|
|
$title = $post->post_title ? $post->post_title : wp_basename( $file );
|
|
|
|
?>
|
|
|
|
<div class="filename new">
|
|
|
|
<span class="media-list-title"><strong><?php echo esc_html( wp_html_excerpt( $title, 60, '…' ) ); ?></strong></span>
|
|
|
|
<span class="media-list-subtitle"><?php echo wp_basename( $file ); ?></span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="attachment-tools">
|
|
|
|
<span class="media-item-copy-container copy-to-clipboard-container edit-attachment">
|
|
|
|
<button type="button" class="button button-small copy-attachment-url" data-clipboard-text="<?php echo $file_url; ?>"><?php _e( 'Copy URL to clipboard' ); ?></button>
|
|
|
|
<span class="success hidden" aria-hidden="true"><?php _e( 'Copied!' ); ?></span>
|
|
|
|
</span>
|
|
|
|
<?php
|
|
|
|
if ( current_user_can( 'edit_post', $id ) ) {
|
2022-01-27 23:17:00 +01:00
|
|
|
echo '<a class="edit-attachment" href="' . esc_url( get_edit_post_link( $id ) ) . '">' . _x( 'Edit', 'media item' ) . '</a>';
|
2021-06-22 06:26:58 +02:00
|
|
|
} else {
|
|
|
|
echo '<span class="edit-attachment">' . _x( 'Success', 'media item' ) . '</span>';
|
|
|
|
}
|
|
|
|
?>
|
2021-05-26 16:24:57 +02:00
|
|
|
</div>
|
2021-05-26 03:40:58 +02:00
|
|
|
</div>
|
|
|
|
<?php
|
2012-11-21 14:05:44 +01:00
|
|
|
break;
|
2017-12-01 00:11:00 +01:00
|
|
|
case 2:
|
|
|
|
add_filter( 'attachment_fields_to_edit', 'media_single_attachment_fields_to_edit', 10, 2 );
|
|
|
|
echo get_media_item(
|
2018-08-17 03:51:36 +02:00
|
|
|
$id,
|
|
|
|
array(
|
2017-12-01 00:11:00 +01:00
|
|
|
'send' => false,
|
|
|
|
'delete' => true,
|
|
|
|
)
|
|
|
|
);
|
2012-11-21 14:05:44 +01:00
|
|
|
break;
|
|
|
|
default:
|
2017-12-01 00:11:00 +01:00
|
|
|
add_filter( 'attachment_fields_to_edit', 'media_post_single_attachment_fields_to_edit', 10, 2 );
|
|
|
|
echo get_media_item( $id );
|
2012-11-21 14:05:44 +01:00
|
|
|
break;
|
2008-09-27 10:17:55 +02:00
|
|
|
}
|
2008-04-15 01:09:14 +02:00
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
2017-12-01 00:11:00 +01:00
|
|
|
check_admin_referer( 'media-form' );
|
2008-05-30 22:43:36 +02:00
|
|
|
|
2012-11-29 03:39:34 +01:00
|
|
|
$post_id = 0;
|
|
|
|
if ( isset( $_REQUEST['post_id'] ) ) {
|
|
|
|
$post_id = absint( $_REQUEST['post_id'] );
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( ! get_post( $post_id ) || ! current_user_can( 'edit_post', $post_id ) ) {
|
2012-11-29 03:39:34 +01:00
|
|
|
$post_id = 0;
|
2017-12-01 00:11:00 +01:00
|
|
|
}
|
2012-11-29 03:39:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
$id = media_handle_upload( 'async-upload', $post_id );
|
2017-12-01 00:11:00 +01:00
|
|
|
if ( is_wp_error( $id ) ) {
|
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
|
|
|
printf(
|
|
|
|
'<div class="error-div error">%s <strong>%s</strong><br />%s</div>',
|
|
|
|
sprintf(
|
|
|
|
'<button type="button" class="dismiss button-link" onclick="jQuery(this).parents(\'div.media-item\').slideUp(200, function(){jQuery(this).remove();});">%s</button>',
|
|
|
|
__( 'Dismiss' )
|
|
|
|
),
|
|
|
|
sprintf(
|
|
|
|
/* translators: %s: Name of the file that failed to upload. */
|
|
|
|
__( '“%s” has failed to upload.' ),
|
|
|
|
esc_html( $_FILES['async-upload']['name'] )
|
|
|
|
),
|
|
|
|
esc_html( $id->get_error_message() )
|
|
|
|
);
|
2008-01-25 20:21:11 +01:00
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
2008-04-15 01:09:14 +02:00
|
|
|
if ( $_REQUEST['short'] ) {
|
2014-07-17 11:14:16 +02:00
|
|
|
// Short form response - attachment ID only.
|
2008-04-15 01:09:14 +02:00
|
|
|
echo $id;
|
2010-05-23 12:59:52 +02:00
|
|
|
} else {
|
2020-01-29 01:45:18 +01:00
|
|
|
// Long form response - big chunk of HTML.
|
2008-04-15 01:09:14 +02:00
|
|
|
$type = $_REQUEST['type'];
|
2013-10-26 23:41:09 +02:00
|
|
|
|
|
|
|
/**
|
2016-05-22 20:01:30 +02:00
|
|
|
* Filters the returned ID of an uploaded attachment.
|
2013-10-26 23:41:09 +02:00
|
|
|
*
|
2021-03-07 13:32:09 +01:00
|
|
|
* The dynamic portion of the hook name, `$type`, refers to the attachment type.
|
|
|
|
*
|
|
|
|
* Possible hook names include:
|
|
|
|
*
|
|
|
|
* - `async_upload_audio`
|
|
|
|
* - `async_upload_file`
|
|
|
|
* - `async_upload_image`
|
|
|
|
* - `async_upload_video`
|
2013-10-26 23:41:09 +02:00
|
|
|
*
|
|
|
|
* @since 2.5.0
|
|
|
|
*
|
|
|
|
* @param int $id Uploaded attachment ID.
|
|
|
|
*/
|
|
|
|
echo apply_filters( "async_upload_{$type}", $id );
|
2008-04-15 01:09:14 +02:00
|
|
|
}
|