Commit 7bd2b2c3 authored by webchick's avatar webchick

Issue #1742438 by larowlan, Christian Biggins, kim.pepper, Everett Zufelt:...

Issue #1742438 by larowlan, Christian Biggins, kim.pepper, Everett Zufelt: Fixed Vertical tabs header and container rendered even when no vertical tabs.
parent 2792a23b
......@@ -3815,11 +3815,25 @@ function form_process_vertical_tabs($element, &$form_state) {
*/
function theme_vertical_tabs($variables) {
$element = $variables['element'];
// Add required JavaScript and Stylesheet.
drupal_add_library('system', 'drupal.vertical-tabs');
// Even if there are no tabs the element will still have a child element for
// the active tab. We need to iterate over the tabs to ascertain if any
// are visible before showing the wrapper and h2.
$visible_tab = FALSE;
$output = '';
foreach (element_children($element['group']) as $tab_index) {
if (!isset($element['group'][$tab_index]['#access']) ||
!empty($element['group'][$tab_index]['#access'])) {
$visible_tab = TRUE;
break;
}
}
if ($visible_tab) {
// Add required JavaScript and Stylesheet.
drupal_add_library('system', 'drupal.vertical-tabs');
$output = '<h2 class="element-invisible">' . t('Vertical Tabs') . '</h2>';
$output .= '<div class="vertical-tabs-panes">' . $element['#children'] . '</div>';
$output = '<h2 class="element-invisible">' . t('Vertical Tabs') . '</h2>';
$output .= '<div class="vertical-tabs-panes">' . $element['#children'] . '</div>';
}
return $output;
}
......
......@@ -29,6 +29,14 @@ public static function getInfo() {
);
}
function setUp() {
parent::setUp();
$this->admin_user = $this->drupalCreateUser(array('access vertical_tab_test tabs'));
$this->web_user = $this->drupalCreateUser();
$this->drupalLogin($this->admin_user);
}
/**
* Ensures that vertical-tabs.js is included before collapse.js.
*
......@@ -40,4 +48,20 @@ function testJavaScriptOrdering() {
$position2 = strpos($this->content, 'core/misc/collapse.js');
$this->assertTrue($position1 !== FALSE && $position2 !== FALSE && $position1 < $position2, t('vertical-tabs.js is included before collapse.js'));
}
/**
* Ensures that vertical tab markup is not shown if user has no tab access.
*/
function testWrapperNotShownWhenEmpty() {
// Test admin user can see vertical tabs and wrapper.
$this->drupalGet('form_test/vertical-tabs');
$wrapper = $this->xpath("//div[@class='vertical-tabs-panes']");
$this->assertTrue(isset($wrapper[0]), 'Vertical tab panes found.');
// Test wrapper markup not present for non-privileged web user.
$this->drupalLogin($this->web_user);
$this->drupalGet('form_test/vertical-tabs');
$wrapper = $this->xpath("//div[@class='vertical-tabs-panes']");
$this->assertFalse(isset($wrapper[0]), 'Vertical tab wrappers are not displayed to unprivileged users.');
}
}
......@@ -309,6 +309,19 @@ function form_test_menu() {
return $items;
}
/**
* Implements hook_permission().
*/
function form_test_permission() {
$perms = array(
'access vertical_tab_test tabs' => array(
'title' => t('Access vertical_tab_test tabs'),
),
);
return $perms;
}
/**
* Form submit handler to return form values as JSON.
*/
......@@ -798,6 +811,7 @@ function _form_test_vertical_tabs_form($form, &$form_state) {
'#title' => t('Tab 1'),
'#collapsible' => TRUE,
'#group' => 'vertical_tabs',
'#access' => user_access('access vertical_tab_test tabs')
);
$form['tab1']['field1'] = array(
'#title' => t('Field 1'),
......@@ -808,6 +822,7 @@ function _form_test_vertical_tabs_form($form, &$form_state) {
'#title' => t('Tab 2'),
'#collapsible' => TRUE,
'#group' => 'vertical_tabs',
'#access' => user_access('access vertical_tab_test tabs')
);
$form['tab2']['field2'] = array(
'#title' => t('Field 2'),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment