Changeset 12813 for sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/api/routes/class-plugin-release-confirmation.php
- Timestamp:
- 08/08/2023 05:14:08 AM (16 months ago)
- 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
r12178 r12813 45 45 ] 46 46 ], 47 'permission_callback' => function( $request ) { 48 $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] ); 49 50 return ( 51 Release_Confirmation_Shortcode::can_access() && 52 current_user_can( 'plugin_manage_releases', $plugin ) 53 ); 54 }, 47 'permission_callback' => [ $this, 'permission_can_access_plugin' ], 48 ] ); 49 50 register_rest_route( 'plugins/v1', '/plugin/(?P<plugin_slug>[^/]+)/release-confirmation/(?P<plugin_tag>[^/]+)/discard', [ 51 'methods' => \WP_REST_Server::READABLE, // TODO: This really should be a POST 52 'callback' => [ $this, 'discard_release' ], 53 'args' => [ 54 'plugin_slug' => [ 55 'validate_callback' => [ $this, 'validate_plugin_slug_callback' ], 56 ], 57 'plugin_tag' => [ 58 'validate_callback' => [ $this, 'validate_plugin_tag_callback' ], 59 ] 60 ], 61 'permission_callback' => [ $this, 'permission_can_access_plugin' ], 55 62 ] ); 56 63 … … 87 94 88 95 /** 96 * Validate that the user can manage releases for the given plugin. 97 */ 98 public function permission_can_access_plugin( $request ) { 99 $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] ); 100 101 return ( 102 Release_Confirmation_Shortcode::can_access() && 103 current_user_can( 'plugin_manage_releases', $plugin ) 104 ); 105 } 106 107 /** 89 108 * Endpoint to self-close a plugin. 90 109 * … … 154 173 header( 'Location: ' . $result['location'] ); 155 174 156 if ( ! $release || ! empty( $release['confirmed'][ $user_login ] ) ) {157 // Already confirmed .175 if ( ! $release || ! empty( $release['confirmed'][ $user_login ] ) || ! empty( $release['discarded'] ) ) { 176 // Already confirmed, or unable to be confirmed. 158 177 $result['confirmed'] = false; 159 178 return $result; … … 166 185 // Mark the release as confirmed if enough confirmations. 167 186 if ( count( $release['confirmations'] ) >= $release['confirmations_required'] ) { 168 $release['confirmed'] = true;169 $result['fully_confirmed'] 187 $release['confirmed'] = true; 188 $result['fully_confirmed'] = true; 170 189 } 171 190 … … 193 212 194 213 /** 214 * A simple endpoint to decline/discard a release. 215 */ 216 public function discard_release( $request ) { 217 $user_login = wp_get_current_user()->user_login; 218 $plugin = Plugin_Directory::get_plugin_post( $request['plugin_slug'] ); 219 $tag = $request['plugin_tag']; 220 $release = Plugin_Directory::get_release( $plugin, $tag ); 221 $result = [ 222 'location' => wp_get_referer() ?: home_url( '/developers/releases/' ), 223 ]; 224 header( 'Location: ' . $result['location'] ); 225 226 if ( ! $release || $release['confirmed'] || ! empty( $release['discarded'] ) ) { 227 // Already confirmed, or other error encountered. 228 $result['confirmed'] = false; 229 return $result; 230 } 231 232 // Record this user as discarding the release. 233 $release['confirmed'] = false; // Already false, just noting it here explicitely. 234 $release['discarded'] = [ 235 'user' => $user_login, 236 'time' => time(), 237 ]; 238 239 Plugin_Directory::add_release( $plugin, $release ); 240 241 return $result; 242 } 243 244 /** 195 245 * Send a Access email 196 246 */
Note: See TracChangeset
for help on using the changeset viewer.