Skip to content

Commit

Permalink
Move check_supported_post_type_update_errors to AMP_Options_Manager
Browse files Browse the repository at this point in the history
  • Loading branch information
westonruter committed Dec 6, 2017
1 parent 3b922cb commit 8c14063
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 49 deletions.
3 changes: 0 additions & 3 deletions includes/class-amp-post-type-support.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,6 @@ class AMP_Post_Type_Support {
*/
public static function init() {
add_action( 'after_setup_theme', array( __CLASS__, 'add_post_type_support' ), 5 );
if ( did_action( 'after_setup_theme' ) ) {
self::add_post_type_support();
}
}

/**
Expand Down
49 changes: 3 additions & 46 deletions includes/options/class-amp-options-menu.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,51 +75,6 @@ public function add_menu_items() {
}
}

/**
* Check for errors with updating the supported post types.
*
* @since 0.6
*/
protected function check_supported_post_type_update_errors() {

// Only apply on update.
if ( empty( $_GET['settings-updated'] ) ) { // WPCS: CSRF ok.
return;
}

$builtin_support = AMP_Post_Type_Support::get_builtin_supported_post_types();
$supported_types = AMP_Options_Manager::get_option( 'supported_post_types', array() );
foreach ( AMP_Post_Type_Support::get_eligible_post_types() as $name ) {
$post_type = get_post_type_object( $name );
if ( ! isset( $post_type->name, $post_type->label ) || in_array( $post_type->name, $builtin_support, true ) ) {
continue;
}

$post_type_supported = post_type_supports( $post_type->name, AMP_QUERY_VAR );
$is_support_elected = in_array( $post_type->name, $supported_types, true );

$error = null;
if ( $is_support_elected && ! $post_type_supported ) {
/* translators: %s: Post type name. */
$error = __( '"%s" could not be activated because support is removed by a plugin or theme', 'amp' );
} elseif ( ! $is_support_elected && $post_type_supported ) {
/* translators: %s: Post type name. */
$error = __( '"%s" could not be deactivated because support is added by a plugin or theme', 'amp' );
}

if ( isset( $error ) ) {
add_settings_error(
$post_type->name,
$post_type->name,
sprintf(
$error,
$post_type->label
)
);
}
}
}

/**
* Post types support section renderer.
*
Expand Down Expand Up @@ -162,7 +117,9 @@ public function render_post_types_support() {
* @since 0.6
*/
public function render_screen() {
$this->check_supported_post_type_update_errors();
if ( ! empty( $_GET['settings-updated'] ) ) { // WPCS: CSRF ok.
AMP_Options_Manager::check_supported_post_type_update_errors();
}
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
Expand Down
44 changes: 44 additions & 0 deletions includes/options/views/class-amp-options-manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,50 @@ public static function validate_options( $new_options ) {
return $options;
}


/**
* Check for errors with updating the supported post types.
*
* @since 0.6
* @see add_settings_error()
*/
public static function check_supported_post_type_update_errors() {
$builtin_support = AMP_Post_Type_Support::get_builtin_supported_post_types();
$supported_types = self::get_option( 'supported_post_types', array() );
foreach ( AMP_Post_Type_Support::get_eligible_post_types() as $name ) {
$post_type = get_post_type_object( $name );
if ( empty( $post_type ) || in_array( $post_type->name, $builtin_support, true ) ) {
continue;
}

$post_type_supported = post_type_supports( $post_type->name, AMP_QUERY_VAR );
$is_support_elected = in_array( $post_type->name, $supported_types, true );

$error = null;
$code = null;
if ( $is_support_elected && ! $post_type_supported ) {
/* translators: %s: Post type name. */
$error = __( '"%s" could not be activated because support is removed by a plugin or theme', 'amp' );
$code = sprintf( '%s_activation_error', $post_type->name );
} elseif ( ! $is_support_elected && $post_type_supported ) {
/* translators: %s: Post type name. */
$error = __( '"%s" could not be deactivated because support is added by a plugin or theme', 'amp' );
$code = sprintf( '%s_deactivation_error', $post_type->name );
}

if ( isset( $error, $code ) ) {
add_settings_error(
self::OPTION_NAME,
$code,
sprintf(
$error,
isset( $post_type->label ) ? $post_type->label : $post_type->name
)
);
}
}
}

/**
* Update plugin option.
*
Expand Down
45 changes: 45 additions & 0 deletions tests/test-class-amp-options-manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@
*/
class Test_AMP_Options_Manager extends WP_UnitTestCase {

/**
* After a test method runs, reset any state in WordPress the test method might have changed.
*/
public function tearDown() {
parent::tearDown();
unregister_post_type( 'foo' );
}

/**
* Test constants.
*/
Expand Down Expand Up @@ -144,4 +152,41 @@ public function test_get_and_set_options() {
$this->assertCount( 1, $entries );
$this->assertArrayNotHasKey( $id, $entries );
}

/**
* Test check_supported_post_type_update_errors.
*
* @covers AMP_Options_Manager::check_supported_post_type_update_errors()
*/
public function test_check_supported_post_type_update_errors() {
global $wp_settings_errors;

register_post_type( 'foo', array(
'public' => true,
'label' => 'Foo',
) );
AMP_Options_Manager::update_option( 'supported_post_types', array( 'foo' ) );
AMP_Post_Type_Support::add_post_type_support();
AMP_Options_Manager::check_supported_post_type_update_errors();
$this->assertEmpty( get_settings_errors() );

// Activation error.
remove_post_type_support( 'foo', AMP_QUERY_VAR );
AMP_Options_Manager::check_supported_post_type_update_errors();
$errors = get_settings_errors();
$this->assertCount( 1, $errors );
$error = current( $errors );
$this->assertEquals( 'foo_activation_error', $error['code'] );
$wp_settings_errors = array();

// Deactivation error.
AMP_Options_Manager::update_option( 'supported_post_types', array() );
add_post_type_support( 'foo', AMP_QUERY_VAR );
AMP_Options_Manager::check_supported_post_type_update_errors();
$errors = get_settings_errors();
$this->assertCount( 1, $errors );
$error = current( $errors );
$this->assertEquals( 'foo_deactivation_error', $error['code'] );
$wp_settings_errors = array();
}
}
9 changes: 9 additions & 0 deletions tests/test-class-amp-post-type-support.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@
*/
class Test_AMP_Post_Type_Support extends WP_UnitTestCase {

/**
* After a test method runs, reset any state in WordPress the test method might have changed.
*/
public function tearDown() {
parent::tearDown();
unregister_post_type( 'book' );
unregister_post_type( 'secret' );
}

/**
* Test add_hooks().
*
Expand Down

0 comments on commit 8c14063

Please sign in to comment.