From f0075f95ddab8ad226e73086fe96d888c99916be Mon Sep 17 00:00:00 2001 From: Utkarsh Patel Date: Sat, 11 Feb 2017 12:25:00 +0530 Subject: [PATCH 1/2] Add customize as top menu for all user --- php/class-post-type.php | 5 ++- tests/php/test-class-post-type.php | 52 ++++++++++++------------------ 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/php/class-post-type.php b/php/class-post-type.php index e135c788..154ebb9d 100644 --- a/php/class-post-type.php +++ b/php/class-post-type.php @@ -131,12 +131,11 @@ public function add_admin_menu_item() { $page_title = $post_type_object->labels->name; $menu_title = $post_type_object->labels->name; $menu_slug = 'edit.php?post_type=' . static::SLUG; - if ( current_user_can( 'edit_theme_options' ) ) { - add_theme_page( $page_title, $menu_title, $capability, $menu_slug ); - } elseif ( current_user_can( 'customize' ) ) { + if ( current_user_can( 'customize' ) ) { $customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' ); // Remove exiting menu from appearance as it will require 'edit_theme_options' cap. + remove_submenu_page( 'themes.php', esc_url( $customize_url ) ); remove_menu_page( esc_url( $customize_url ) ); // Add customize menu on top and add Changeset menu as submenu. diff --git a/tests/php/test-class-post-type.php b/tests/php/test-class-post-type.php index 8ac3c3b3..1186159d 100644 --- a/tests/php/test-class-post-type.php +++ b/tests/php/test-class-post-type.php @@ -147,15 +147,31 @@ public function test_extend_changeset_post_type_object() { */ public function test_add_admin_menu_item() { $this->mark_incompatible(); - global $submenu; - $admin_user_id = $this->factory()->user->create( array( 'role' => 'administrator' ) ); + global $submenu, $menu; + $menu = $submenu = array(); // WPCS: global override ok. + $admin_user_id = $this->factory()->user->create( array( + 'role' => 'administrator', + ) ); wp_set_current_user( $admin_user_id ); $post_type_obj = new Post_Type( $this->plugin->customize_snapshot_manager ); $post_type_obj->add_admin_menu_item(); $menu_slug = 'edit.php?post_type=' . Post_Type::SLUG; - $this->assertArrayHasKey( 'themes.php', $submenu ); - $this->assertArrayHasKey( 0, $submenu['themes.php'] ); - $this->assertTrue( in_array( $menu_slug, $submenu['themes.php'][0], true ) ); + + $customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' ); + $this->assertArrayHasKey( $customize_url, $submenu ); + $this->assertEquals( $menu_slug, $submenu[ $customize_url ][1][2] ); + + // Check with user with customize access. + $submenu = $menu = array(); // WPCS: global override ok. + add_filter( 'user_has_cap', array( $this, 'hack_user_can' ), 10, 3 ); + $editor_user_id = $this->factory()->user->create( array( + 'role' => 'editor', + ) ); + wp_set_current_user( $editor_user_id ); + $post_type_obj->add_admin_menu_item(); + $this->assertArrayHasKey( $customize_url, $submenu ); + $this->assertEquals( $menu_slug, $submenu[ $customize_url ][1][2] ); + remove_filter( 'user_has_cap', array( $this, 'hack_user_can' ), 10 ); } /** @@ -176,32 +192,6 @@ public function hack_user_can( $allcaps, $caps, $args ) { return $allcaps; } - /** - * Test add_admin_menu_item - * - * @covers \CustomizeSnapshots\Post_Type::add_admin_menu_item() - */ - public function test_menu_for_customize_cap() { - $this->mark_incompatible(); - global $submenu, $menu; - if ( null === $submenu ) { - $submenu = array(); // WPCS: global override ok. - } - if ( null === $menu ) { - $menu = array(); // WPCS: global override ok. - } - add_filter( 'user_has_cap', array( $this, 'hack_user_can' ), 10, 3 ); - $editor_user_id = $this->factory()->user->create( array( 'role' => 'editor' ) ); - wp_set_current_user( $editor_user_id ); - $post_type_obj = new Post_Type( $this->plugin->customize_snapshot_manager ); - $post_type_obj->add_admin_menu_item(); - $menu_slug = 'edit.php?post_type=' . Post_Type::SLUG; - $customize_url = add_query_arg( 'return', urlencode( wp_unslash( $_SERVER['REQUEST_URI'] ) ), 'customize.php' ); - $this->assertArrayHasKey( $customize_url, $submenu ); - $this->assertEquals( $menu_slug, $submenu[ $customize_url ][1][2] ); - remove_filter( 'user_has_cap', array( $this, 'hack_user_can' ), 10 ); - } - /** * Test filter_post_type_link. * From 5ac476da880aac15d1ab5653a99cab21e8d5f596 Mon Sep 17 00:00:00 2001 From: Weston Ruter Date: Fri, 10 Feb 2017 23:14:34 -0800 Subject: [PATCH 2/2] Move Customize menu item right after appearance, before Plugins --- php/class-post-type.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/php/class-post-type.php b/php/class-post-type.php index 154ebb9d..4b834f70 100644 --- a/php/class-post-type.php +++ b/php/class-post-type.php @@ -140,7 +140,7 @@ public function add_admin_menu_item() { // Add customize menu on top and add Changeset menu as submenu. $customize_page_title = __( 'Customize', 'default' ); - add_menu_page( $customize_page_title, $customize_page_title, 'customize', esc_url( $customize_url ), '', 'dashicons-admin-customizer', 65 ); + add_menu_page( $customize_page_title, $customize_page_title, 'customize', esc_url( $customize_url ), '', 'dashicons-admin-customizer', 61 ); add_submenu_page( $customize_url, $page_title, $menu_title, $capability, esc_url( $menu_slug ) ); } }