Making WordPress.org

Changeset 14218


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

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

Fixes #7708.

Location:
sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory
Files:
3 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     */
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-plugin-directory.php

    r14003 r14218  
    18681868                $release[ $k ] = $v;
    18691869            }
     1870        }
     1871
     1872        /*
     1873         * Allow a discarded release to be reset.
     1874         * See API\Routes\Plugin_Release_Confirmation::undo_discard_release()
     1875         */
     1876        if ( isset( $data['undo-discard'] ) && ! empty( $release['discarded'] ) && empty( $data['discarded'] ) ) {
     1877            unset( $release['discarded'] );
    18701878        }
    18711879
  • sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/class-template.php

    r14154 r14218  
    988988        } elseif ( 'discard' === $what ) {
    989989            $endpoint = 'plugin/%s/release-confirmation/%s/discard';
     990        } elseif ( 'undo-discard' === $what ) {
     991            $endpoint = 'plugin/%s/release-confirmation/%s/undo-discard';
    990992        } else {
    991993            return '';
Note: See TracChangeset for help on using the changeset viewer.