Making WordPress.org


Ignore:
Timestamp:
11/04/2022 06:12:24 AM (2 years ago)
Author:
coffee2code
Message:

Photo Directory, Admin: Redirect moderator to another photo in the queue immediately after moderating a photo.

Moderator is redirected to a random post in the queue that isn't their own submission.

Props topher1kenobe, coffee2code.
Fixes #6120.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/photo-directory/inc/admin.php

    r12057 r12201  
    5454        // Modify admin menu links for photo posts.
    5555        add_action( 'admin_menu',                              [ __CLASS__, 'modify_admin_menu_links' ] );
     56
     57        // Navigate to next post after moderation.
     58        add_action( 'edit_form_top',                           [ __CLASS__, 'show_moderation_message' ] );
     59        add_filter( 'redirect_post_location',                  [ __CLASS__, 'redirect_to_next_post_after_moderation' ], 5, 2 );
    5660    }
    5761
     
    954958    }
    955959
     960    /**
     961     * Outputs an admin notice when a photo post has been moderated and the
     962     * moderator has been redirected to the next photo in the queue.
     963     *
     964     * @param WP_Post $post Post object.
     965     */
     966    public static function show_moderation_message( $post ) {
     967        if (
     968            empty( $_GET['photomoderated'] )
     969        ||
     970            empty( $_GET['photoaction'] )
     971        ||
     972            Registrations::get_post_type() !== get_post_type( $post )
     973        ) {
     974            return;
     975        }
     976
     977        $moderated_post = get_post( (int) $_GET['photomoderated'] );
     978
     979        if ( ! $moderated_post ) {
     980            return;
     981        }
     982
     983        $message = '';
     984        $edit_link = get_edit_post_link( $moderated_post );
     985
     986        switch ( $_GET['photoaction'] ) {
     987            case 'approval':
     988                $message = sprintf(
     989                    /* translators: 1: Link markup to view photo post, 2: Link markup to edit photo post. */
     990                    __( 'Photo post approved. %1$s — %2$s', 'wporg-photos' ),
     991                    sprintf(
     992                        ' <a href="%s">%s</a>',
     993                        esc_url( get_post_permalink( $moderated_post ) ),
     994                        __( 'View photo post', 'wporg-photos' )
     995                    ),
     996                    sprintf(
     997                        ' <a href="%s">%s</a>',
     998                        esc_url( $edit_link ),
     999                        __( 'Edit photo post', 'wporg-photos' )
     1000                    )
     1001                );
     1002                break;
     1003            case 'rejection':
     1004                $message = sprintf(
     1005                    /* translators: %s: Link markup to view photo post. */
     1006                    __( 'Photo post rejected. %s', 'wporg-photos' ),
     1007                    sprintf(
     1008                        ' <a href="%s">%s</a>',
     1009                        esc_url( $edit_link ),
     1010                        __( 'Edit photo post', 'wporg-photos' )
     1011                    )
     1012                );
     1013                break;
     1014            default:
     1015                $message = '';
     1016        }
     1017
     1018        if ( $message ) {
     1019            printf(
     1020                '<div id="message" class="updated notice notice-success is-dismissible"><p>%s</p></div>',
     1021                $message
     1022            );
     1023        }
     1024    }
     1025
     1026    /**
     1027     * Overrides the redirect after moderating a post to load the next post in
     1028     * the queue.
     1029     *
     1030     * Only redirects if a photo post is initially published or rejected.
     1031     *
     1032     * @param string $location The destination URL.
     1033     * @param int    $post_id  The post ID.
     1034     * @return string
     1035     */
     1036    public static function redirect_to_next_post_after_moderation( $location, $post_id ) {
     1037        $is_rejection = isset( $_POST[ Rejection::$action ] );
     1038
     1039        if (
     1040            ( isset( $_POST['publish'] ) || $is_rejection )
     1041        &&
     1042            Registrations::get_post_type() === get_post_type( $post_id )
     1043        ) {
     1044            $action = $is_rejection ? 'rejection' : 'approval';
     1045            $next_post = Posts::get_next_post_in_queue();
     1046            if ( $next_post ) {
     1047                $location = add_query_arg( 'photomoderated', $post_id, get_edit_post_link( $next_post, 'url' ) );
     1048                $location = add_query_arg( 'photoaction', $action, $location );
     1049            }
     1050        }
     1051
     1052        return $location;
     1053    }
     1054
    9561055}
    9571056
Note: See TracChangeset for help on using the changeset viewer.