Skip to content

Commit 4d38e92

Browse files
authored
Merge pull request #4272 from 10up/fix/feature-is-active-condition
Only consider a feature active if not disabled by code
2 parents c20b835 + dc1de54 commit 4d38e92

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

assets/js/features/components/control.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,8 @@ const Control = ({
6262
* Get missing required features.
6363
*/
6464
const missingRequiredFeatures = requiredFeaturesList
65-
.filter((featureSlug) => settings[featureSlug]?.active !== true)
6665
.map((featureSlug) => getFeature(featureSlug))
67-
.filter(Boolean);
66+
.filter((feature) => !feature.isAvailable || settings[feature.slug]?.active !== true);
6867

6968
/**
7069
* Help text formatted to allow safe HTML.

includes/classes/Feature.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ public function is_active() {
243243
$active = false;
244244

245245
if ( ! empty( $feature_settings[ $this->slug ] ) && $feature_settings[ $this->slug ]['active'] ) {
246-
$active = true;
246+
$active = ! in_array(
247+
$this->requirements_status()->get_code(),
248+
[ FeatureRequirementsStatus::FORCE_DISABLED, FeatureRequirementsStatus::TEMPORARILY_DISABLED ],
249+
true
250+
);
247251
}
248252

249253
/**

tests/php/TestFeatureActivation.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use ElasticPress;
1111
use ElasticPress\Features;
12+
use ElasticPress\FeatureRequirementsStatus;
1213
use ElasticPress\REST\Features as FeaturesRest;
1314

1415
/**
@@ -251,6 +252,25 @@ public function testReqChangeNothingWithFeature() {
251252
$this->assertEquals( 1, $requirements_statuses['test'] );
252253
}
253254

255+
/**
256+
* Test that a feature is not active if it's force disabled or temporarily disabled
257+
*
258+
* @since 5.3.3
259+
* @group feature-activation
260+
*/
261+
public function test_feature_is_active_only_if_not_disabled() {
262+
foreach ( [ FeatureRequirementsStatus::FORCE_DISABLED, FeatureRequirementsStatus::TEMPORARILY_DISABLED ] as $code ) {
263+
$feature = new FeatureTestB( $code );
264+
Features::factory()->register_feature( $feature );
265+
Features::factory()->activate_feature( 'test-b' );
266+
267+
$this->handle_feature_activation();
268+
ElasticPress\Features::factory()->setup_features();
269+
270+
$this->assertFalse( $feature->is_active() );
271+
}
272+
}
273+
254274
/**
255275
* Test that the pre_handle_feature_activation method is called
256276
*

tests/php/screen/TestStatusReport.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,8 @@ function ( $logs ) use ( $time_stamp, $random_no ) {
429429
* @since 4.5.1
430430
*/
431431
public function testElasticPressIoReport() {
432+
add_filter( 'ep_instant_results_available', '__return_true' );
433+
432434
\ElasticPress\Features::factory()->activate_feature( 'autosuggest' );
433435
\ElasticPress\Features::factory()->activate_feature( 'instant-results' );
434436

0 commit comments

Comments
 (0)