Making WordPress.org


Ignore:
Timestamp:
11/28/2024 01:50:26 AM (8 weeks ago)
Author:
dd32
Message:

Plugin Directory: Release Confirmation: Allow a plugin reviewer to undo a release discard state.

Fixes #7708.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-release-confirmation.php

    r12813 r14218  
    6060            ],
    6161            'permission_callback' => [ $this, 'permission_can_access_plugin' ],
     62        ] );
     63
     64        register_rest_route( 'plugins/v1', '/plugin/(?P<plugin_slug>[^/]+)/release-confirmation/(?P<plugin_tag>[^/]+)/undo-discard', [
     65            'methods'             => \WP_REST_Server::READABLE, // TODO: This really should be a POST
     66            'callback'            => [ $this, 'undo_discard_release' ],
     67            'args'                => [
     68                'plugin_slug' => [
     69                    'validate_callback' => [ $this, 'validate_plugin_slug_callback' ],
     70                ],
     71                'plugin_tag' => [
     72                    'validate_callback' => [ $this, 'validate_plugin_tag_callback' ],
     73                ]
     74            ],
     75            'permission_callback' => function( $request ) {
     76                if ( current_user_can( 'plugin_review' ) ) {
     77                    return $this->permission_can_access_plugin( $request );
     78                }
     79
     80                return false;
     81            },
    6282        ] );
    6383
     
    243263
    244264    /**
     265     * A simple endpoint to undo discarding a release.
     266     */
     267    public function undo_discard_release( $request ) {
     268        $plugin     = Plugin_Directory::get_plugin_post( $request['plugin_slug'] );
     269        $tag        = $request['plugin_tag'];
     270        $release    = Plugin_Directory::get_release( $plugin, $tag );
     271        $result     = [
     272            'location' => wp_get_referer() ?: home_url( '/developers/releases/' ),
     273        ];
     274        header( 'Location: ' . $result['location'] );
     275
     276        if ( ! $release || empty( $release['discarded'] ) ) {
     277            // Not found or not discarded.
     278            $result['confirmed'] = false;
     279            return $result;
     280        }
     281
     282        // Log this action.
     283        Tools::audit_log(
     284            sprintf(
     285                'Release %s discard reverted. Originally discarded by %s at %s',
     286                $tag,
     287                $release['discarded']['user'],
     288                date( 'Y-m-d H:i:s', $release['discarded']['time'] )
     289            ),
     290            $plugin
     291        );
     292
     293        // Remove the discard state.
     294        unset( $release['discarded'] );
     295        $release['undo-discard'] = true;
     296
     297        Plugin_Directory::add_release( $plugin, $release );
     298
     299        return $result;
     300    }
     301
     302    /**
    245303     * Send a Access email
    246304     */
Note: See TracChangeset for help on using the changeset viewer.