Skip to content

Commit 279a464

Browse files
theMasudRanaCopilot
andauthored
Fix: Replace automatic plugin deactivation with admin notice (#129)
* refactor: update legacy plugin deactivation to show admin notice instead of automatic deactivation * fix: enhance legacy plugin notice handling for network-wide activations Co-authored-by: Copilot <copilot@github.com> * test: add legacy plugin notice tests for inactive state and user capabilities Co-authored-by: Copilot <copilot@github.com> * fix: restrict legacy plugin notice display based on admin context Co-authored-by: Copilot <copilot@github.com> * fix: update legacy plugin notice handling for admin context and improve URL encoding Co-authored-by: Copilot <copilot@github.com> * fix: improve deactivation URL handling and update block registration tests for order independence Co-authored-by: Copilot <copilot@github.com> * fix: update upgrade notice to include admin prompt for deactivating old plugin Co-authored-by: Copilot <copilot@github.com> --------- Co-authored-by: Copilot <copilot@github.com>
1 parent 04dde30 commit 279a464

5 files changed

Lines changed: 227 additions & 66 deletions

File tree

examples/patterns/hero-carousel.php

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,18 @@
1111
exit;
1212
}
1313

14-
$pattern_images_url = trailingslashit( RT_CAROUSEL_URL . '/examples/data/images' );
15-
$hero_slide_one = $pattern_images_url . 'slide-autoplay-1.webp';
16-
$hero_slide_two = $pattern_images_url . 'slide-autoplay-2.webp';
17-
$hero_slide_three = $pattern_images_url . 'slide-autoplay-3.webp';
14+
$rt_carousel_images_url = trailingslashit( RT_CAROUSEL_URL . '/examples/data/images' );
15+
$rt_carousel_slide_one = $rt_carousel_images_url . 'slide-autoplay-1.webp';
16+
$rt_carousel_slide_two = $rt_carousel_images_url . 'slide-autoplay-2.webp';
17+
$rt_carousel_slide_three = $rt_carousel_images_url . 'slide-autoplay-3.webp';
1818
?>
1919

2020
<!-- wp:rt-carousel/carousel {"loop":true,"autoplay":true,"autoplayDelay":5000,"ariaLabel":"Hero Carousel","metadata":{"categories":["rt-carousel"],"patternName":"rt-carousel/hero-carousel","name":"rtCarousel: Hero Carousel"},"align":"wide","className":"wp-block-carousel-carousel"} -->
2121
<div class="wp-block-rt-carousel-carousel alignwide rt-carousel wp-block-carousel-carousel" role="region" aria-roledescription="carousel" aria-label="Hero Carousel" dir="ltr" data-axis="x" data-loop="true" data-wp-interactive="rt-carousel/carousel" data-wp-context="{&quot;options&quot;:{&quot;loop&quot;:true,&quot;dragFree&quot;:false,&quot;align&quot;:&quot;start&quot;,&quot;containScroll&quot;:&quot;trimSnaps&quot;,&quot;direction&quot;:&quot;ltr&quot;,&quot;axis&quot;:&quot;x&quot;,&quot;slidesToScroll&quot;:1},&quot;autoplay&quot;:{&quot;delay&quot;:5000,&quot;stopOnInteraction&quot;:true,&quot;stopOnMouseEnter&quot;:false},&quot;isPlaying&quot;:true,&quot;timerIterationId&quot;:0,&quot;selectedIndex&quot;:-1,&quot;scrollSnaps&quot;:[],&quot;canScrollPrev&quot;:false,&quot;canScrollNext&quot;:false,&quot;scrollProgress&quot;:0,&quot;slideCount&quot;:0,&quot;ariaLabelPattern&quot;:&quot;Go to slide %d&quot;}" data-wp-init="callbacks.initCarousel" style="--rt-carousel-gap:0px"><!-- wp:rt-carousel/carousel-viewport {"className":"wp-block-carousel-carousel-viewport"} -->
2222
<div class="wp-block-rt-carousel-carousel-viewport embla wp-block-carousel-carousel-viewport">
2323
<div class="embla__container"><!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
24-
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $hero_slide_one ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
25-
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $hero_slide_one ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
24+
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $rt_carousel_slide_one ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
25+
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $rt_carousel_slide_one ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
2626
<div class="wp-block-cover__inner-container"><!-- wp:heading {"textAlign":"center","level":1,"textColor":"white"} -->
2727
<h1 class="wp-block-heading has-text-align-center has-white-color has-text-color">Welcome to Our Site</h1>
2828
<!-- /wp:heading -->
@@ -44,8 +44,8 @@
4444
<!-- /wp:rt-carousel/carousel-slide -->
4545

4646
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
47-
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $hero_slide_two ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
48-
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $hero_slide_two ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
47+
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $rt_carousel_slide_two ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
48+
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $rt_carousel_slide_two ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
4949
<div class="wp-block-cover__inner-container"><!-- wp:heading {"textAlign":"center","level":1,"textColor":"white"} -->
5050
<h1 class="wp-block-heading has-text-align-center has-white-color has-text-color">Build Something Amazing</h1>
5151
<!-- /wp:heading -->
@@ -60,8 +60,8 @@
6060
<!-- /wp:rt-carousel/carousel-slide -->
6161

6262
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
63-
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $hero_slide_three ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
64-
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $hero_slide_three ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
63+
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:cover {"url":"<?php echo esc_url( $rt_carousel_slide_three ); ?>","dimRatio":30,"minHeight":600,"minHeightUnit":"px"} -->
64+
<div class="wp-block-cover" style="min-height:600px"><img class="wp-block-cover__image-background" alt="" src="<?php echo esc_url( $rt_carousel_slide_three ); ?>" data-object-fit="cover" /><span aria-hidden="true" class="wp-block-cover__background has-background-dim-30 has-background-dim"></span>
6565
<div class="wp-block-cover__inner-container"><!-- wp:heading {"textAlign":"center","level":1,"textColor":"white"} -->
6666
<h1 class="wp-block-heading has-text-align-center has-white-color has-text-color">Join Our Community</h1>
6767
<!-- /wp:heading -->

examples/patterns/logo-showcase.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
exit;
1212
}
1313

14-
$pattern_images_url = trailingslashit( RT_CAROUSEL_URL . '/examples/data/images' );
15-
$logo_one = $pattern_images_url . 'logo-placeholder-1.svg';
16-
$logo_two = $pattern_images_url . 'logo-placeholder-2.svg';
17-
$logo_three = $pattern_images_url . 'logo-placeholder-3.svg';
18-
$logo_four = $pattern_images_url . 'logo-placeholder-4.svg';
19-
$logo_five = $pattern_images_url . 'logo-placeholder-5.svg';
14+
$rt_carousel_images_url = trailingslashit( RT_CAROUSEL_URL . '/examples/data/images' );
15+
$rt_carousel_logo_one = $rt_carousel_images_url . 'logo-placeholder-1.svg';
16+
$rt_carousel_logo_two = $rt_carousel_images_url . 'logo-placeholder-2.svg';
17+
$rt_carousel_logo_three = $rt_carousel_images_url . 'logo-placeholder-3.svg';
18+
$rt_carousel_logo_four = $rt_carousel_images_url . 'logo-placeholder-4.svg';
19+
$rt_carousel_logo_five = $rt_carousel_images_url . 'logo-placeholder-5.svg';
2020
?>
2121

2222
<!-- wp:rt-carousel/carousel {"loop":true,"autoplayDelay":3000,"autoplayStopOnInteraction":false,"ariaLabel":"Partner Logos","metadata":{"categories":["rt-carousel"],"patternName":"rt-carousel/logo-showcase","name":"rtCarousel: Logo Showcase"},"className":"wp-block-carousel-carousel is-style-columns-3"} -->
@@ -28,35 +28,35 @@
2828
<div class="wp-block-rt-carousel-carousel-viewport embla wp-block-carousel-carousel-viewport">
2929
<div class="embla__container"><!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
3030
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:image {"width":"200px","sizeSlug":"full","linkDestination":"none","align":"center","className":"is-style-rounded"} -->
31-
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $logo_one ); ?>" alt="Partner Logo 1" style="width:200px" /></figure>
31+
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $rt_carousel_logo_one ); ?>" alt="Partner Logo 1" style="width:200px" /></figure>
3232
<!-- /wp:image -->
3333
</div>
3434
<!-- /wp:rt-carousel/carousel-slide -->
3535

3636
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
3737
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:image {"width":"200px","sizeSlug":"full","linkDestination":"none","align":"center","className":"is-style-rounded"} -->
38-
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $logo_two ); ?>" alt="Partner Logo 2" style="width:200px" /></figure>
38+
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $rt_carousel_logo_two ); ?>" alt="Partner Logo 2" style="width:200px" /></figure>
3939
<!-- /wp:image -->
4040
</div>
4141
<!-- /wp:rt-carousel/carousel-slide -->
4242

4343
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
4444
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:image {"width":"200px","sizeSlug":"full","linkDestination":"none","align":"center","className":"is-style-rounded"} -->
45-
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $logo_three ); ?>" alt="Partner Logo 3" style="width:200px" /></figure>
45+
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $rt_carousel_logo_three ); ?>" alt="Partner Logo 3" style="width:200px" /></figure>
4646
<!-- /wp:image -->
4747
</div>
4848
<!-- /wp:rt-carousel/carousel-slide -->
4949

5050
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
5151
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:image {"width":"200px","sizeSlug":"full","linkDestination":"none","align":"center","className":"is-style-rounded"} -->
52-
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $logo_four ); ?>" alt="Partner Logo 4" style="width:200px" /></figure>
52+
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $rt_carousel_logo_four ); ?>" alt="Partner Logo 4" style="width:200px" /></figure>
5353
<!-- /wp:image -->
5454
</div>
5555
<!-- /wp:rt-carousel/carousel-slide -->
5656

5757
<!-- wp:rt-carousel/carousel-slide {"className":"wp-block-carousel-carousel-slide"} -->
5858
<div class="wp-block-rt-carousel-carousel-slide embla__slide wp-block-carousel-carousel-slide" role="group" aria-roledescription="slide" data-wp-interactive="rt-carousel/carousel" data-wp-class--is-active="callbacks.isSlideActive" data-wp-bind--aria-current="callbacks.isSlideActive"><!-- wp:image {"width":"200px","sizeSlug":"full","linkDestination":"none","align":"center","className":"is-style-rounded"} -->
59-
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $logo_five ); ?>" alt="Partner Logo 5" style="width:200px" /></figure>
59+
<figure class="wp-block-image aligncenter size-full is-resized is-style-rounded"><img src="<?php echo esc_url( $rt_carousel_logo_five ); ?>" alt="Partner Logo 5" style="width:200px" /></figure>
6060
<!-- /wp:image -->
6161
</div>
6262
<!-- /wp:rt-carousel/carousel-slide -->

inc/Plugin.php

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,23 @@ protected function setup_hooks(): void {
3939
add_filter( 'block_categories_all', [ $this, 'register_block_category' ] );
4040
add_action( 'init', [ $this, 'register_pattern_category' ] );
4141
add_action( 'init', [ $this, 'register_block_patterns' ] );
42-
add_action( 'admin_init', [ $this, 'deactivate_legacy_plugin' ] );
42+
add_action( 'admin_notices', [ $this, 'legacy_plugin_notice' ] );
43+
add_action( 'network_admin_notices', [ $this, 'legacy_plugin_notice' ] );
4344
}
4445

4546
/**
46-
* Deactivate the legacy "Carousel Kit" plugin if still active.
47+
* Show an admin notice if the legacy "Carousel Kit" plugin is still active.
4748
*
4849
* Handles both single-site and network-wide activations.
4950
*/
50-
public function deactivate_legacy_plugin(): void {
51-
$old_plugin = 'carousel-kit/carousel-kit.php';
51+
public function legacy_plugin_notice(): void {
52+
$old_plugin = 'carousel-kit/carousel-kit.php';
53+
$network_wide = is_multisite() && is_plugin_active_for_network( $old_plugin );
5254

5355
if ( ! is_plugin_active( $old_plugin ) ) {
5456
return;
5557
}
5658

57-
$network_wide = is_multisite() && is_plugin_active_for_network( $old_plugin );
5859
if ( $network_wide && ! current_user_can( 'manage_network_plugins' ) ) {
5960
return;
6061
}
@@ -63,21 +64,41 @@ public function deactivate_legacy_plugin(): void {
6364
return;
6465
}
6566

66-
// Silent flag prevents deactivation hooks from firing redirect.
67-
deactivate_plugins( $old_plugin, true, $network_wide );
68-
69-
if ( is_plugin_active( $old_plugin ) ) {
67+
// Only show the notice in the matching admin context.
68+
if ( is_network_admin() !== $network_wide ) {
7069
return;
7170
}
7271

73-
add_action(
74-
'admin_notices',
75-
static function (): void {
76-
printf(
77-
'<div class="notice notice-info is-dismissible"><p>%s</p></div>',
78-
esc_html__( 'The old "Carousel Kit" plugin has been deactivated. rtCarousel is its replacement.', 'rt-carousel' )
79-
);
80-
}
72+
if ( $network_wide ) {
73+
$deactivate_url = wp_nonce_url(
74+
add_query_arg(
75+
[
76+
'action' => 'deactivate',
77+
'plugin' => $old_plugin,
78+
'networkwide' => '1',
79+
],
80+
network_admin_url( 'plugins.php' )
81+
),
82+
'deactivate-plugin_' . $old_plugin
83+
);
84+
} else {
85+
$deactivate_url = wp_nonce_url(
86+
add_query_arg(
87+
[
88+
'action' => 'deactivate',
89+
'plugin' => $old_plugin,
90+
],
91+
admin_url( 'plugins.php' )
92+
),
93+
'deactivate-plugin_' . $old_plugin
94+
);
95+
}
96+
97+
printf(
98+
'<div class="notice notice-warning is-dismissible"><p>%s <a href="%s">%s</a></p></div>',
99+
esc_html__( 'The "Carousel Kit" plugin is still active. rtCarousel is its replacement — please deactivate Carousel Kit.', 'rt-carousel' ),
100+
esc_url( $deactivate_url ),
101+
esc_html__( 'Deactivate Carousel Kit', 'rt-carousel' )
81102
);
82103
}
83104

readme.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ Yes. Each carousel instance maintains its own independent state.
7777

7878
= I am using "Carousel Kit". How do I upgrade to rtCarousel? =
7979

80-
rtCarousel is the successor to Carousel Kit. Simply install and activate rtCarousel — it will automatically migrate all existing carousel blocks in your content and deactivate the old plugin. No manual steps are needed. You can safely delete the old Carousel Kit plugin afterward.
80+
rtCarousel is the successor to Carousel Kit. Simply install and activate rtCarousel — it will automatically migrate all existing carousel blocks in your content. You will see an admin notice prompting you to deactivate the old Carousel Kit plugin. After deactivating it, you can safely delete it.
8181

8282
== Screenshots ==
8383

@@ -129,4 +129,4 @@ rtCarousel is the successor to Carousel Kit. Simply install and activate rtCarou
129129
== Upgrade Notice ==
130130

131131
= 2.0.0 =
132-
Plugin renamed from "Carousel Kit" to "rtCarousel". Existing carousel blocks are automatically migrated on activation. The old Carousel Kit plugin is deactivated automatically and can be safely deleted.
132+
Plugin renamed from "Carousel Kit" to "rtCarousel". Existing carousel blocks are automatically migrated on activation. You will see an admin notice prompting you to deactivate the old Carousel Kit plugin, which can then be safely deleted.

0 commit comments

Comments
 (0)