]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/edit.php
WordPress 4.5
[autoinstalls/wordpress.git] / wp-admin / edit.php
index b3b6b2e859bd538c0e6195adc0dd1bd42826a170..27d8f6895b415aa91d1fbfa0f8869a00e88b829a 100644 (file)
@@ -7,19 +7,40 @@
  */
 
 /** WordPress Administration Bootstrap */
-require_once( './admin.php' );
+require_once( dirname( __FILE__ ) . '/admin.php' );
 
 if ( ! $typenow )
        wp_die( __( 'Invalid post type' ) );
 
+if ( ! in_array( $typenow, get_post_types( array( 'show_ui' => true ) ) ) ) {
+       wp_die( __( 'You are not allowed to edit posts in this post type.' ) );
+}
+
+if ( 'attachment' === $typenow ) {
+       if ( wp_redirect( admin_url( 'upload.php' ) ) ) {
+               exit;
+       }
+}
+
+/**
+ * @global string $post_type
+ * @global object $post_type_object
+ */
+global $post_type, $post_type_object;
+
 $post_type = $typenow;
 $post_type_object = get_post_type_object( $post_type );
 
 if ( ! $post_type_object )
        wp_die( __( 'Invalid post type' ) );
 
-if ( ! current_user_can( $post_type_object->cap->edit_posts ) )
-       wp_die( __( 'Cheatin’ uh?' ) );
+if ( ! current_user_can( $post_type_object->cap->edit_posts ) ) {
+       wp_die(
+               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+               '<p>' . __( 'You are not allowed to edit posts in this post type.' ) . '</p>',
+               403
+       );
+}
 
 $wp_list_table = _get_list_table('WP_Posts_List_Table');
 $pagenum = $wp_list_table->get_pagenum();
@@ -48,7 +69,7 @@ $doaction = $wp_list_table->current_action();
 if ( $doaction ) {
        check_admin_referer('bulk-posts');
 
-       $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'ids'), wp_get_referer() );
+       $sendback = remove_query_arg( array('trashed', 'untrashed', 'deleted', 'locked', 'ids'), wp_get_referer() );
        if ( ! $sendback )
                $sendback = admin_url( $parent_file );
        $sendback = add_query_arg( 'paged', $pagenum, $sendback );
@@ -56,9 +77,12 @@ if ( $doaction ) {
                $sendback = admin_url($post_new_file);
 
        if ( 'delete_all' == $doaction ) {
+               // Prepare for deletion of all posts with a specified post status (i.e. Empty trash).
                $post_status = preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['post_status']);
-               if ( get_post_status_object($post_status) ) // Check the post status exists first
+               // Validate the post status exists.
+               if ( get_post_status_object( $post_status ) ) {
                        $post_ids = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_type=%s AND post_status = %s", $post_type, $post_status ) );
+               }
                $doaction = 'delete';
        } elseif ( isset( $_REQUEST['media'] ) ) {
                $post_ids = $_REQUEST['media'];
@@ -75,22 +99,29 @@ if ( $doaction ) {
 
        switch ( $doaction ) {
                case 'trash':
-                       $trashed = 0;
-                       foreach( (array) $post_ids as $post_id ) {
-                               if ( !current_user_can($post_type_object->cap->delete_post, $post_id) )
+                       $trashed = $locked = 0;
+
+                       foreach ( (array) $post_ids as $post_id ) {
+                               if ( !current_user_can( 'delete_post', $post_id) )
                                        wp_die( __('You are not allowed to move this item to the Trash.') );
 
+                               if ( wp_check_post_lock( $post_id ) ) {
+                                       $locked++;
+                                       continue;
+                               }
+
                                if ( !wp_trash_post($post_id) )
                                        wp_die( __('Error in moving to Trash.') );
 
                                $trashed++;
                        }
-                       $sendback = add_query_arg( array('trashed' => $trashed, 'ids' => join(',', $post_ids) ), $sendback );
+
+                       $sendback = add_query_arg( array('trashed' => $trashed, 'ids' => join(',', $post_ids), 'locked' => $locked ), $sendback );
                        break;
                case 'untrash':
                        $untrashed = 0;
-                       foreach( (array) $post_ids as $post_id ) {
-                               if ( !current_user_can($post_type_object->cap->delete_post, $post_id) )
+                       foreach ( (array) $post_ids as $post_id ) {
+                               if ( !current_user_can( 'delete_post', $post_id) )
                                        wp_die( __('You are not allowed to restore this item from the Trash.') );
 
                                if ( !wp_untrash_post($post_id) )
@@ -102,18 +133,18 @@ if ( $doaction ) {
                        break;
                case 'delete':
                        $deleted = 0;
-                       foreach( (array) $post_ids as $post_id ) {
-                               $post_del = get_post($post_id);
+                       foreach ( (array) $post_ids as $post_id ) {
+                               $post_del = get_post($post_id);
 
-                               if ( !current_user_can($post_type_object->cap->delete_post, $post_id) )
+                               if ( !current_user_can( 'delete_post', $post_id ) )
                                        wp_die( __('You are not allowed to delete this item.') );
 
                                if ( $post_del->post_type == 'attachment' ) {
                                        if ( ! wp_delete_attachment($post_id) )
-                                               wp_die( __('Error in deleting...') );
+                                               wp_die( __('Error in deleting.') );
                                } else {
                                        if ( !wp_delete_post($post_id) )
-                                               wp_die( __('Error in deleting...') );
+                                               wp_die( __('Error in deleting.') );
                                }
                                $deleted++;
                        }
@@ -133,18 +164,19 @@ if ( $doaction ) {
                        break;
        }
 
-       $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status',  'post', 'bulk_edit', 'post_view'), $sendback );
+       $sendback = remove_query_arg( array('action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view'), $sendback );
 
        wp_redirect($sendback);
        exit();
 } elseif ( ! empty($_REQUEST['_wp_http_referer']) ) {
-        wp_redirect( remove_query_arg( array('_wp_http_referer', '_wpnonce'), stripslashes($_SERVER['REQUEST_URI']) ) );
+        wp_redirect( remove_query_arg( array('_wp_http_referer', '_wpnonce'), wp_unslash($_SERVER['REQUEST_URI']) ) );
         exit;
 }
 
 $wp_list_table->prepare_items();
 
 wp_enqueue_script('inline-edit-post');
+wp_enqueue_script('heartbeat');
 
 $title = $post_type_object->labels->name;
 
@@ -163,7 +195,7 @@ if ( 'post' == $post_type ) {
                '<ul>' .
                        '<li>' . __('You can hide/display columns based on your needs and decide how many posts to list per screen using the Screen Options tab.') . '</li>' .
                        '<li>' . __('You can filter the list of posts by post status using the text links in the upper left to show All, Published, Draft, or Trashed posts. The default view is to show all posts.') . '</li>' .
-                       '<li>' . __('You can view posts in a simple title list or with an excerpt. Choose the view you prefer by clicking on the icons at the top of the list on the right.') . '</li>' .
+                       '<li>' . __('You can view posts in a simple title list or with an excerpt using the Screen Options tab.') . '</li>' .
                        '<li>' . __('You can refine the list to show only posts in a specific category or from a specific month by using the dropdown menus above the posts list. Click the Filter button after making your selection. You also can refine the list by clicking on the post author, category or tag in the posts list.') . '</li>' .
                '</ul>'
        ) );
@@ -189,8 +221,8 @@ if ( 'post' == $post_type ) {
 
        get_current_screen()->set_help_sidebar(
        '<p><strong>' . __('For more information:') . '</strong></p>' .
-       '<p>' . __('<a href="http://codex.wordpress.org/Posts_Screen" target="_blank">Documentation on Managing Posts</a>') . '</p>' .
-       '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
+       '<p>' . __('<a href="https://codex.wordpress.org/Posts_Screen" target="_blank">Documentation on Managing Posts</a>') . '</p>' .
+       '<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
        );
 
 } elseif ( 'page' == $post_type ) {
@@ -210,68 +242,99 @@ if ( 'post' == $post_type ) {
 
        get_current_screen()->set_help_sidebar(
        '<p><strong>' . __('For more information:') . '</strong></p>' .
-       '<p>' . __('<a href="http://codex.wordpress.org/Pages_Screen" target="_blank">Documentation on Managing Pages</a>') . '</p>' .
-       '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
+       '<p>' . __('<a href="https://codex.wordpress.org/Pages_Screen" target="_blank">Documentation on Managing Pages</a>') . '</p>' .
+       '<p>' . __('<a href="https://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
        );
-}
-
-add_screen_option( 'per_page', array('label' => $title, 'default' => 20) );
 
-require_once('./admin-header.php');
-?>
-<div class="wrap">
-<?php screen_icon(); ?>
-<h2><?php echo esc_html( $post_type_object->labels->name ); ?> <a href="<?php echo $post_new_file ?>" class="add-new-h2"><?php echo esc_html($post_type_object->labels->add_new); ?></a> <?php
-if ( isset($_REQUEST['s']) && $_REQUEST['s'] )
-       printf( '<span class="subtitle">' . __('Search results for &#8220;%s&#8221;') . '</span>', get_search_query() ); ?>
-</h2>
-
-<?php if ( isset($_REQUEST['locked']) || isset($_REQUEST['skipped']) || isset($_REQUEST['updated']) || isset($_REQUEST['deleted']) || isset($_REQUEST['trashed']) || isset($_REQUEST['untrashed']) ) {
-       $messages = array();
-?>
-<div id="message" class="updated"><p>
-<?php if ( isset($_REQUEST['updated']) && (int) $_REQUEST['updated'] ) {
-       $messages[] = sprintf( _n( '%s post updated.', '%s posts updated.', $_REQUEST['updated'] ), number_format_i18n( $_REQUEST['updated'] ) );
-       unset($_REQUEST['updated']);
 }
 
-if ( isset($_REQUEST['skipped']) && (int) $_REQUEST['skipped'] )
-       unset($_REQUEST['skipped']);
-
-if ( isset($_REQUEST['locked']) && (int) $_REQUEST['locked'] ) {
-       $messages[] = sprintf( _n( '%s item not updated, somebody is editing it.', '%s items not updated, somebody is editing them.', $_REQUEST['locked'] ), number_format_i18n( $_REQUEST['locked'] ) );
-       unset($_REQUEST['locked']);
-}
+get_current_screen()->set_screen_reader_content( array(
+       'heading_views'      => $post_type_object->labels->filter_items_list,
+       'heading_pagination' => $post_type_object->labels->items_list_navigation,
+       'heading_list'       => $post_type_object->labels->items_list,
+) );
+
+add_screen_option( 'per_page', array( 'default' => 20, 'option' => 'edit_' . $post_type . '_per_page' ) );
+
+$bulk_counts = array(
+       'updated'   => isset( $_REQUEST['updated'] )   ? absint( $_REQUEST['updated'] )   : 0,
+       'locked'    => isset( $_REQUEST['locked'] )    ? absint( $_REQUEST['locked'] )    : 0,
+       'deleted'   => isset( $_REQUEST['deleted'] )   ? absint( $_REQUEST['deleted'] )   : 0,
+       'trashed'   => isset( $_REQUEST['trashed'] )   ? absint( $_REQUEST['trashed'] )   : 0,
+       'untrashed' => isset( $_REQUEST['untrashed'] ) ? absint( $_REQUEST['untrashed'] ) : 0,
+);
+
+$bulk_messages = array();
+$bulk_messages['post'] = array(
+       'updated'   => _n( '%s post updated.', '%s posts updated.', $bulk_counts['updated'] ),
+       'locked'    => ( 1 == $bulk_counts['locked'] ) ? __( '1 post not updated, somebody is editing it.' ) :
+                          _n( '%s post not updated, somebody is editing it.', '%s posts not updated, somebody is editing them.', $bulk_counts['locked'] ),
+       'deleted'   => _n( '%s post permanently deleted.', '%s posts permanently deleted.', $bulk_counts['deleted'] ),
+       'trashed'   => _n( '%s post moved to the Trash.', '%s posts moved to the Trash.', $bulk_counts['trashed'] ),
+       'untrashed' => _n( '%s post restored from the Trash.', '%s posts restored from the Trash.', $bulk_counts['untrashed'] ),
+);
+$bulk_messages['page'] = array(
+       'updated'   => _n( '%s page updated.', '%s pages updated.', $bulk_counts['updated'] ),
+       'locked'    => ( 1 == $bulk_counts['locked'] ) ? __( '1 page not updated, somebody is editing it.' ) :
+                          _n( '%s page not updated, somebody is editing it.', '%s pages not updated, somebody is editing them.', $bulk_counts['locked'] ),
+       'deleted'   => _n( '%s page permanently deleted.', '%s pages permanently deleted.', $bulk_counts['deleted'] ),
+       'trashed'   => _n( '%s page moved to the Trash.', '%s pages moved to the Trash.', $bulk_counts['trashed'] ),
+       'untrashed' => _n( '%s page restored from the Trash.', '%s pages restored from the Trash.', $bulk_counts['untrashed'] ),
+);
 
-if ( isset($_REQUEST['deleted']) && (int) $_REQUEST['deleted'] ) {
-       $messages[] = sprintf( _n( 'Item permanently deleted.', '%s items permanently deleted.', $_REQUEST['deleted'] ), number_format_i18n( $_REQUEST['deleted'] ) );
-       unset($_REQUEST['deleted']);
-}
+/**
+ * Filter the bulk action updated messages.
+ *
+ * By default, custom post types use the messages for the 'post' post type.
+ *
+ * @since 3.7.0
+ *
+ * @param array $bulk_messages Arrays of messages, each keyed by the corresponding post type. Messages are
+ *                             keyed with 'updated', 'locked', 'deleted', 'trashed', and 'untrashed'.
+ * @param array $bulk_counts   Array of item counts for each message, used to build internationalized strings.
+ */
+$bulk_messages = apply_filters( 'bulk_post_updated_messages', $bulk_messages, $bulk_counts );
+$bulk_counts = array_filter( $bulk_counts );
 
-if ( isset($_REQUEST['trashed']) && (int) $_REQUEST['trashed'] ) {
-       $messages[] = sprintf( _n( 'Item moved to the Trash.', '%s items moved to the Trash.', $_REQUEST['trashed'] ), number_format_i18n( $_REQUEST['trashed'] ) );
-       $ids = isset($_REQUEST['ids']) ? $_REQUEST['ids'] : 0;
-       $messages[] = '<a href="' . esc_url( wp_nonce_url( "edit.php?post_type=$post_type&doaction=undo&action=untrash&ids=$ids", "bulk-posts" ) ) . '">' . __('Undo') . '</a>';
-       unset($_REQUEST['trashed']);
+require_once( ABSPATH . 'wp-admin/admin-header.php' );
+?>
+<div class="wrap">
+<h1><?php
+echo esc_html( $post_type_object->labels->name );
+if ( current_user_can( $post_type_object->cap->create_posts ) )
+       echo ' <a href="' . esc_url( admin_url( $post_new_file ) ) . '" class="page-title-action">' . esc_html( $post_type_object->labels->add_new ) . '</a>';
+
+if ( isset( $_REQUEST['s'] ) && strlen( $_REQUEST['s'] ) ) {
+       /* translators: %s: search keywords */
+       printf( ' <span class="subtitle">' . __( 'Search results for &#8220;%s&#8221;' ) . '</span>', get_search_query() );
 }
+?></h1>
 
-if ( isset($_REQUEST['untrashed']) && (int) $_REQUEST['untrashed'] ) {
-       $messages[] = sprintf( _n( 'Item restored from the Trash.', '%s items restored from the Trash.', $_REQUEST['untrashed'] ), number_format_i18n( $_REQUEST['untrashed'] ) );
-       unset($_REQUEST['undeleted']);
+<?php
+// If we have a bulk message to issue:
+$messages = array();
+foreach ( $bulk_counts as $message => $count ) {
+       if ( isset( $bulk_messages[ $post_type ][ $message ] ) )
+               $messages[] = sprintf( $bulk_messages[ $post_type ][ $message ], number_format_i18n( $count ) );
+       elseif ( isset( $bulk_messages['post'][ $message ] ) )
+               $messages[] = sprintf( $bulk_messages['post'][ $message ], number_format_i18n( $count ) );
+
+       if ( $message == 'trashed' && isset( $_REQUEST['ids'] ) ) {
+               $ids = preg_replace( '/[^0-9,]/', '', $_REQUEST['ids'] );
+               $messages[] = '<a href="' . esc_url( wp_nonce_url( "edit.php?post_type=$post_type&doaction=undo&action=untrash&ids=$ids", "bulk-posts" ) ) . '">' . __('Undo') . '</a>';
+       }
 }
 
 if ( $messages )
-       echo join( ' ', $messages );
+       echo '<div id="message" class="updated notice is-dismissible"><p>' . join( ' ', $messages ) . '</p></div>';
 unset( $messages );
 
-$_SERVER['REQUEST_URI'] = remove_query_arg( array('locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed'), $_SERVER['REQUEST_URI'] );
+$_SERVER['REQUEST_URI'] = remove_query_arg( array( 'locked', 'skipped', 'updated', 'deleted', 'trashed', 'untrashed' ), $_SERVER['REQUEST_URI'] );
 ?>
-</p></div>
-<?php } ?>
 
 <?php $wp_list_table->views(); ?>
 
-<form id="posts-filter" action="" method="get">
+<form id="posts-filter" method="get">
 
 <?php $wp_list_table->search_box( $post_type_object->labels->search_items, 'post' ); ?>
 
@@ -295,4 +358,4 @@ if ( $wp_list_table->has_items() )
 </div>
 
 <?php
-include('./admin-footer.php');
+include( ABSPATH . 'wp-admin/admin-footer.php' );