comment_node_update_index(EntityInterface $node)
Implements hook_node_update_index().
File
- core/modules/comment/comment.module, line 425
- Enables users to comment on published content.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | function comment_node_update_index(EntityInterface $node ) { $index_comments = &drupal_static( __FUNCTION__ ); if ( $index_comments === NULL) { // Do not index in the following three cases: // 1. 'Authenticated user' can search content but can't access comments. // 2. 'Anonymous user' can search content but can't access comments. // 3. Any role can search content but can't access comments and access // comments is not granted by the 'authenticated user' role. In this case // all users might have both permissions from various roles but it is also // possible to set up a user to have only search content and so a user // edit could change the security situation so it is not safe to index the // comments. $index_comments = TRUE; $roles = \Drupal::entityManager()->getStorage( 'user_role' )->loadMultiple(); $authenticated_can_access = $roles [RoleInterface::AUTHENTICATED_ID]->hasPermission( 'access comments' ); foreach ( $roles as $rid => $role ) { if ( $role ->hasPermission( 'search content' ) && ! $role ->hasPermission( 'access comments' )) { if ( $rid == RoleInterface::AUTHENTICATED_ID || $rid == RoleInterface::ANONYMOUS_ID || ! $authenticated_can_access ) { $index_comments = FALSE; break ; } } } } $build = array (); if ( $index_comments ) { foreach (\Drupal::service( 'comment.manager' )->getFields( 'node' ) as $field_name => $info ) { // Skip fields that entity does not have. if (! $node ->hasField( $field_name )) { continue ; } $field_definition = $node ->getFieldDefinition( $field_name ); $mode = $field_definition ->getSetting( 'default_mode' ); $comments_per_page = $field_definition ->getSetting( 'per_page' ); if ( $node ->get( $field_name )->status) { $comments = \Drupal::entityManager()->getStorage( 'comment' ) ->loadThread( $node , $field_name , $mode , $comments_per_page ); if ( $comments ) { $build [] = \Drupal::entityManager()->getViewBuilder( 'comment' )->viewMultiple( $comments ); } } } } return \Drupal::service( 'renderer' )->renderPlain( $build ); } |
Please login to continue.