diff --git a/core/modules/language/language.module b/core/modules/language/language.module index bd368fa..dbc96d6 100644 --- a/core/modules/language/language.module +++ b/core/modules/language/language.module @@ -912,3 +912,21 @@ function language_system_regional_settings_form_submit($form, &$form_state) { $language->default = TRUE; language_save($language); } + +/** + * Implements hook_node_access_alter(). + * + * Alter the subquery of node_query_node_access_alter() to make it language + * and fallback langcode aware. + */ +function language_node_access_tag_subquery_alter(&$subquery, $query) { + // If no specific langcode to check for is given, use the grant entry + // which is set as fallback. + // If specific langcode is given, use the grant entry for it. + if (!$langcode = $query->getMetaData('langcode')) { + $subquery->condition('na.fallback', 1, '='); + } + else { + $subquery->condition('na.langcode', $langcode, '='); + } +} diff --git a/core/modules/node/node.module b/core/modules/node/node.module index 569e030..63b6099 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -2930,9 +2930,6 @@ function node_query_node_access_alter(AlterableInterface $query) { if (!$op = $query->getMetaData('op')) { $op = 'view'; } - if (!$langcode = $query->getMetaData('langcode')) { - $langcode = FALSE; - } // If $account can bypass node access, or there are no node access modules, // or the operation is 'view' and the $account has a global view grant @@ -2996,20 +2993,13 @@ function node_query_node_access_alter(AlterableInterface $query) { $subquery->condition($grant_conditions); } $subquery->condition('na.grant_' . $op, 1, '>='); - // If no specific langcode to check for is given, use the grant entry - // which is set as fallback. - // If specific langcode is given, use the grant entry for it. - if ($langcode === FALSE) { - $subquery->condition('na.fallback', 1, '='); - } - else { - $subquery->condition('na.langcode', $langcode, '='); - } $field = 'nid'; // Now handle entities. $subquery->where("$nalias.$field = na.nid"); + drupal_alter('node_access_tag_subquery', $subquery, $query); + $query->exists($subquery); } }