5
5
* Description: Rollback (or forward) any WordPress.org plugin, theme or block like a boss.
6
6
* Author: WP Rollback
7
7
* Author URI: https://wprollback.com/
8
- * Version: 2.0.3
8
+ * Version: 2.0.4
9
9
* Text Domain: wp-rollback
10
10
* Domain Path: /languages
11
11
*
@@ -188,13 +188,7 @@ private function setup_constants(): void {
188
188
private function hooks (): void {
189
189
190
190
// Multisite compatibility: only loads on main site.
191
- if ( is_network_admin () ) {
192
- $ this ->multisite_compatibility = new WP_Rollback_Multisite_Compatibility ( $ this );
193
- }
194
-
195
- if ( is_multisite () && ! is_network_admin () ) {
196
- return ;
197
- }
191
+ $ this ->multisite_compatibility = new WP_Rollback_Multisite_Compatibility ( $ this );
198
192
199
193
// i18n
200
194
add_action ( 'plugins_loaded ' , [ self ::$ instance , 'load_textdomain ' ] );
@@ -226,23 +220,24 @@ private function hooks(): void {
226
220
* @return void
227
221
*/
228
222
public function scripts ( $ hook ): void {
229
- if ( 'themes.php ' === $ hook ) {
223
+
224
+ // Theme's listing page JS
225
+ if ( 'themes.php ' === $ hook && !is_multisite () ) {
230
226
$ theme_script_asset = require WP_ROLLBACK_PLUGIN_DIR . '/build/themes.asset.php ' ;
231
227
232
228
wp_enqueue_script (
233
229
'wp-rollback-themes-script ' ,
234
- plugin_dir_url ( __FILE__ ) . 'build/themes.js ' ,
230
+ WP_ROLLBACK_PLUGIN_URL . 'build/themes.js ' ,
235
231
$ theme_script_asset ['dependencies ' ],
236
232
$ theme_script_asset ['version ' ]
237
233
);
238
234
// Localize for i18n
239
235
wp_localize_script (
240
236
'wp-rollback-themes-script ' , 'wprData ' , [
241
237
'ajaxurl ' => admin_url (),
242
- 'logo ' => plugins_url ( 'src/assets/logo.svg ' , __FILE__ ),
243
- 'avatarFallback ' => plugins_url ( 'src/assets/avatar-plugin-fallback.jpg ' , __FILE__ ),
244
238
'rollback_nonce ' => wp_create_nonce ( 'wpr_rollback_nonce ' ),
245
- 'apiNonce ' => wp_create_nonce ( 'wpr_rollback_api_nonce ' ),
239
+ 'logo ' => plugins_url ( 'src/assets/logo.svg ' , WP_ROLLBACK_PLUGIN_FILE ),
240
+ 'avatarFallback ' => plugins_url ( 'src/assets/avatar-plugin-fallback.jpg ' , WP_ROLLBACK_PLUGIN_FILE ),
246
241
'text_rollback_label ' => __ ( 'Rollback ' , 'wp-rollback ' ),
247
242
'text_not_rollbackable ' => __ (
248
243
'No Rollback Available: This is a non-WordPress.org theme. ' ,
@@ -272,13 +267,14 @@ public function scripts( $hook ): void {
272
267
// Localize the script with vars for JS.
273
268
wp_localize_script ( 'wp-rollback-plugin-admin-editor ' , 'wprData ' , [
274
269
'rollback_nonce ' => wp_create_nonce ( 'wpr_rollback_nonce ' ),
270
+ 'restApiNonce ' => wp_create_nonce ( 'wp_rest ' ),
275
271
'adminUrl ' => admin_url ( 'index.php ' ),
276
- 'baseUrl ' => get_site_url ( ),
277
- 'logo ' => plugins_url ( 'src/assets/logo.svg ' , __FILE__ ),
278
- 'avatarFallback ' => plugins_url ( 'src/assets/avatar-plugin-fallback.jpg ' , __FILE__ ),
272
+ 'restUrl ' => esc_url_raw ( rest_url () ),
273
+ 'logo ' => plugins_url ( 'src/assets/logo.svg ' , WP_ROLLBACK_PLUGIN_FILE ),
274
+ 'avatarFallback ' => plugins_url ( 'src/assets/avatar-plugin-fallback.jpg ' , WP_ROLLBACK_PLUGIN_FILE ),
279
275
'referrer ' => wp_get_referer (),
280
276
'text_no_changelog_found ' => isset ( $ _GET ['plugin_slug ' ] ) ? sprintf (
281
- // translators: %s Link.
277
+ // translators: %s Link.
282
278
__ (
283
279
'Sorry, we couldn \'t find a changelog entry found for this version. Try checking the <a href="%s" target="_blank">developer log</a> on WP.org. ' ,
284
280
'wp-rollback '
@@ -332,13 +328,16 @@ public function register_rest_route() {
332
328
include WP_ROLLBACK_PLUGIN_DIR . '/src/class-rollback-api-requests.php ' ;
333
329
334
330
register_rest_route ( 'wp-rollback/v1 ' , '/fetch-info/ ' , [
335
- 'methods ' => 'GET ' ,
336
- 'callback ' => function ( WP_REST_Request $ request ) {
331
+ 'methods ' => 'GET ' ,
332
+ 'callback ' => function ( WP_REST_Request $ request ) {
337
333
$ fetcher = new WP_Rollback_API_Fetcher ();
338
334
339
335
return $ fetcher ->fetch_plugin_or_theme_info ( $ request ['type ' ], $ request ['slug ' ] );
340
336
},
341
- 'args ' => [
337
+ 'permission_callback ' => function () {
338
+ return current_user_can ( 'update_plugins ' );
339
+ },
340
+ 'args ' => [
342
341
'type ' => [
343
342
'required ' => true ,
344
343
'type ' => 'string ' ,
@@ -472,12 +471,17 @@ private function setup_plugin_vars() {
472
471
* @return array $actions
473
472
*/
474
473
public function plugin_action_links ( $ actions , $ plugin_file , $ plugin_data , $ context ): array {
474
+
475
+ if ( is_multisite () && !is_network_admin ()) {
476
+ return $ actions ;
477
+ }
478
+
475
479
// Filter for other devs.
476
480
$ plugin_data = apply_filters ( 'wpr_plugin_data ' , $ plugin_data );
477
481
478
482
// If plugin is missing package data do not output Rollback option.
479
483
if ( ! isset ( $ plugin_data ['package ' ] ) ||
480
- (strpos ($ plugin_data ['package ' ], 'downloads.wordpress.org ' ) === false ) ) {
484
+ ( strpos ( $ plugin_data ['package ' ], 'downloads.wordpress.org ' ) === false ) ) {
481
485
return $ actions ;
482
486
}
483
487
@@ -487,7 +491,7 @@ public function plugin_action_links( $actions, $plugin_file, $plugin_data, $cont
487
491
}
488
492
489
493
// Base rollback URL
490
- $ rollback_url = admin_url ( 'index.php ' );
494
+ $ rollback_url = is_network_admin () ? network_admin_url ( ' index.php ' ) : admin_url ( 'index.php ' );
491
495
492
496
$ rollback_url = add_query_arg (
493
497
apply_filters (
@@ -683,7 +687,7 @@ public function wpr_prepare_themes_js( $prepared_themes ): array {
683
687
684
688
// Loop through themes and provide a 'hasRollback' boolean key for JS.
685
689
foreach ( $ prepared_themes as $ key => $ value ) {
686
- $ themes [ $ key ] = $ prepared_themes [ $ key ] ;
690
+ $ themes [ $ key ] = $ value ;
687
691
$ themes [ $ key ]['hasRollback ' ] = isset ( $ rollbacks [ $ key ] );
688
692
}
689
693
0 commit comments