You are here

function photos_node_view in Album Photos 6.0.x

Same name and namespace in other branches
  1. 8.5 photos.module \photos_node_view()
  2. 8.4 photos.module \photos_node_view()
  3. 7.3 photos.module \photos_node_view()

Implements hook_ENTITY_TYPE_view().

File

./photos.module, line 469
Implementation of photos.module.

Code

function photos_node_view(array &$build, EntityInterface $node, EntityViewDisplayInterface $display, $view_mode) {
  if ($node
    ->getType() == 'photos') {
    $legacy_display_settings = \Drupal::config('photos.settings')
      ->get('photos_legacy_view_mode');
    $user = \Drupal::currentUser();
    if ($user
      ->hasPermission('view photo')) {
      if ($legacy_display_settings) {
        $display_types = [
          'none',
          'cover',
          'thumbnails',
          'covercolorbox',
        ];
        switch ($view_mode) {
          case 'full':
            $default_display = \Drupal::config('photos.settings')
              ->get('photos_display_page_display');
            $display = isset($node->album['page_display']) ? $node->album['page_display'] : $default_display;
            $photos_album = new PhotosAlbum($node
              ->id());
            $album_view = $photos_album
              ->nodeView($node, $display, $view_mode);
            $build['photos_album-' . $display_types[$display]] = $album_view;
            break;
          case 'teaser':
            $default_display = \Drupal::config('photos.settings')
              ->get('photos_display_teaser_display');
            $display = isset($node->album['teaser_display']) ? $node->album['teaser_display'] : $default_display;
            $photos_album = new PhotosAlbum($node
              ->id());
            $album_view = $photos_album
              ->nodeView($node, $display, $view_mode);
            $build['photos_album-' . $display_types[$display]] = $album_view;
            break;
        }
      }
      else {
        if ($display
          ->getComponent('photos_album_cover')) {
          $photos_album = new PhotosAlbum($node
            ->id());
          $album_cover = $photos_album
            ->getCover($node->album['cover_id']);

          // @todo add option to change view mode here.
          $build['photos_album_cover'] = $album_cover;
        }
        if ($display
          ->getComponent('photos_album_photo_list')) {
          $photos = [];

          // @todo default to album themed template and allow views override?
          if (\Drupal::moduleHandler()
            ->moduleExists('views')) {
            $view_display = \Drupal::config('photos.settings')
              ->get('node_field_album_photos_list_view');
            if (!$view_display) {
              $view_display = 'photos_album:block_1';
            }
            $view_parts = explode(':', $view_display);
            $views_view = $view_parts[0];
            $view_display_id = $view_parts[1];
            $view = Views::getView($views_view);
            if ($view) {
              $views_display = $view->storage
                ->getDisplay($view_display_id);
              if (isset($views_display['display_options']['arguments'])) {
                $arguments = $views_display['display_options']['arguments'];
                $args = [
                  'view' => $views_view,
                  'display' => $view_display_id,
                ];
                foreach ($arguments as $key => $arg) {
                  if ($key == 'uid') {
                    $args['user'] = $node
                      ->getOwnerId();
                  }
                  if ($key == 'id') {
                    $args['node'] = $node
                      ->id();
                  }
                }
                $photos = call_user_func_array('views_embed_view', $args);
              }
              else {
                $photos = views_embed_view($views_view, $view_display_id, $node
                  ->id());
              }
            }
          }
          if (empty($photos)) {

            // @todo fallback on album controller if views is not enabled? Or
            //   require views. Theme an album photos list view
            //   PhotosAlbumController::listView().
          }
          $build['photos_album_photo_list'] = $photos;
        }
      }
    }
  }
}