diff --git a/includes/class-sensei-lesson.php b/includes/class-sensei-lesson.php
index 4a9f1d893b..3498451b56 100755
--- a/includes/class-sensei-lesson.php
+++ b/includes/class-sensei-lesson.php
@@ -218,7 +218,7 @@ private function display_lessons_navigation( WP_Screen $screen ) {
diff --git a/includes/class-sensei-settings-api.php b/includes/class-sensei-settings-api.php
index b19838f778..425fa41175 100755
--- a/includes/class-sensei-settings-api.php
+++ b/includes/class-sensei-settings-api.php
@@ -299,18 +299,24 @@ public function settings_tabs() {
$html .= '
' . "\n";
$sections = array();
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification is not required here.
+ $current_tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'default-settings';
foreach ( $this->tabs as $k => $v ) {
$classes = 'tab';
- if ( 'default-settings' === $k ) {
+ if ( $current_tab === $k ) {
$classes .= ' current';
}
+ if ( ! empty( $v['external'] ) ) {
+ $classes .= ' external';
+ }
+
$sections[ $k ] = array(
'href' => isset( $v['href'] )
? esc_attr( $v['href'] )
- : admin_url( 'admin.php?page=' . $this->token . '#' . esc_attr( $k ) ),
+ : admin_url( 'admin.php?page=' . $this->token . '&tab=' . esc_attr( $k ) ),
'name' => esc_attr( $v['name'] ),
'class' => esc_attr( $classes ),
);
diff --git a/includes/internal/emails/class-settings-menu.php b/includes/internal/emails/class-settings-menu.php
index 4b0feff2f6..b963b02ba0 100644
--- a/includes/internal/emails/class-settings-menu.php
+++ b/includes/internal/emails/class-settings-menu.php
@@ -44,6 +44,7 @@ public function replace_email_tab( array $sections ) {
'name' => __( 'Emails', 'sensei-lms' ),
'description' => __( 'Settings for email notifications sent from your site.', 'sensei-lms' ),
'href' => admin_url( 'admin.php?page=sensei-settings&tab=email-notification-settings' ),
+ 'external' => true,
);
return $sections;
}
diff --git a/tests/unit-tests/internal/emails/test-class-settings-menu.php b/tests/unit-tests/internal/emails/test-class-settings-menu.php
index 22d44067d3..4dcedb2572 100644
--- a/tests/unit-tests/internal/emails/test-class-settings-menu.php
+++ b/tests/unit-tests/internal/emails/test-class-settings-menu.php
@@ -35,6 +35,7 @@ public function testReplaceEmailTab_SectionsGiven_ReplacesEmailNoficationSetting
'name' => 'Emails',
'description' => 'Settings for email notifications sent from your site.',
'href' => admin_url( 'admin.php?page=sensei-settings&tab=email-notification-settings' ),
+ 'external' => true,
],
];
self::assertSame( $expected, $sections );
diff --git a/tests/unit-tests/test-class-lesson.php b/tests/unit-tests/test-class-lesson.php
index a9276dc197..60ff3336c5 100644
--- a/tests/unit-tests/test-class-lesson.php
+++ b/tests/unit-tests/test-class-lesson.php
@@ -824,7 +824,7 @@ public function testAddCustomNavigation_WhenCorrectScreen_HasOutput( string $scr
diff --git a/tests/unit-tests/test-class-sensei-settings-api.php b/tests/unit-tests/test-class-sensei-settings-api.php
index dd1ca2395c..50f643b7fd 100644
--- a/tests/unit-tests/test-class-sensei-settings-api.php
+++ b/tests/unit-tests/test-class-sensei-settings-api.php
@@ -1,6 +1,8 @@
assertStringNotContainsString( ' multiple ', $output );
}
+
+ public function testSettingsTabs_WhenNoTabParam_AddsTheCurrentClassToTheDefaultTabLink() {
+ /** Arrange. */
+ $settings = new Sensei_Settings_Api();
+ $settings->has_tabs = true;
+ $settings->sections = array(
+ 'default-settings' => array(
+ 'name' => 'Default Settings',
+ ),
+ 'other-settings' => array(
+ 'name' => 'Other Settings',
+ ),
+ );
+
+ /** Act. */
+ ob_start();
+ $settings->general_init();
+ $settings->settings_tabs();
+ $tabs = ob_get_clean();
+
+ /** Assert. */
+ $this->assertStringContainsString( '
Default Settings', $tabs );
+ }
+
+ public function testSettingsTabs_WhenHasTabParam_AddsTheCurrentClassToTheTabLink() {
+ /** Arrange. */
+ $settings = new Sensei_Settings_Api();
+ $settings->has_tabs = true;
+ $settings->sections = array(
+ 'default-settings' => array(
+ 'name' => 'Default Settings',
+ ),
+ 'other-settings' => array(
+ 'name' => 'Other Settings',
+ ),
+ );
+
+ $_GET['tab'] = 'other-settings';
+
+ /** Act. */
+ ob_start();
+ $settings->general_init();
+ $settings->settings_tabs();
+ $tabs = ob_get_clean();
+
+ /** Assert. */
+ $this->assertStringContainsString( '
Other Settings', $tabs );
+ }
+
+ public function testSettingsTabs_WhenTabIsExternal_AddsTheExternalClassToTheTabLink() {
+ /** Arrange. */
+ $settings = new Sensei_Settings_Api();
+ $settings->has_tabs = true;
+ $settings->sections = array(
+ 'other-settings' => array(
+ 'name' => 'Other Settings',
+ 'external' => true,
+ ),
+ );
+
+ /** Act. */
+ ob_start();
+ $settings->general_init();
+ $settings->settings_tabs();
+ $tabs = ob_get_clean();
+
+ /** Assert. */
+ $this->assertStringContainsString( '
Other Settings', $tabs );
+ }
}