From e4956dc317146fb301090be7a0a8cc1ba09e5fa1 Mon Sep 17 00:00:00 2001 From: William Hearn Date: Tue, 5 Jan 2016 22:49:21 -0500 Subject: [PATCH] Navbar link language render to user preference Signed-off-by: William Hearn --- navbar.module | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/navbar.module b/navbar.module index 1bf1fc8..ba475a4 100644 --- a/navbar.module +++ b/navbar.module @@ -43,6 +43,9 @@ function navbar_permission() { 'access navbar' => array( 'title' => t('Use the administration navbar'), ), + 'select navbar language' => array( + 'title' => t('Select navbar language'), + ), ); } @@ -262,6 +265,8 @@ function navbar_page_build(&$page) { * @see navbar_page_build(). */ function navbar_pre_render($element) { + global $user; + global $language; // Define the breakpoints to switch from vertical to horizontal // navbar presentation. @@ -284,8 +289,23 @@ function navbar_pre_render($element) { ); } + // Navbar language user preference. + $language_original = array(); + if(!empty($user->data['navbar_language']) && ($language->language != $user->language)) { + $languages_available = language_list(); + if(array_key_exists($user->language, $languages_available)) { + $language_original = $language; + $language = $languages_available[$user->language]; + } + } + // Get navbar items from all modules that implement hook_navbar(). $items = module_invoke_all('navbar'); + + if(!empty($language_original)) { + $language = $language_original; + } + // Allow for altering of hook_navbar(). drupal_alter('navbar', $items); // Sort the children. @@ -1211,3 +1231,45 @@ function navbar_modernizr_info() { return $tests; } + +/** + * Implements hook_form_user_profile_form_alter(). + */ +function navbar_form_user_profile_form_alter(&$form, &$form_state) { + if ($form['#user_category'] == 'account' && user_access('select navbar language')) { + $form['navbar_language'] = array( + '#type' => 'fieldset', + '#title' => t('Navbar language settings'), + '#collapsible' => TRUE, + '#weight' => 10, + ); + $form['navbar_language']['navbar_language'] = array( + '#type' => 'checkbox', + '#title' => t('Navbar language preference'), + '#default_value' => isset($form['#user']->data['navbar_language']) ? $form['#user']->data['navbar_language'] : 0, + '#description' => t('Whether Navbar should take into account the user language preference when rendering.'), + ); + } +} + +/** + * Implements hook_user_presave(). + */ +function navbar_user_presave(&$edit, $account, $category) { + if (isset($edit['navbar_language'])) { + $edit['data']['navbar_language'] = $edit['navbar_language']; + } +} + +/** + * Implements hook_field_extra_fields(). + */ +function navbar_field_extra_fields() { + $info['user']['user']['form']['navbar_language'] = array( + 'label' => 'Navbar language preference', + 'description' => t('Navbar language linked to user preference form element.'), + 'weight' => 10, + ); + + return $info; +} -- 2.3.8 (Apple Git-58)