You are here

public function PhotosUserAlbumsController::contentOverview in Album Photos 8.4

Returns content for user albums.

Return value

array An array of markup for user album content.

1 string reference to 'PhotosUserAlbumsController::contentOverview'
photos.routing.yml in ./photos.routing.yml
photos.routing.yml

File

src/Controller/PhotosUserAlbumsController.php, line 121

Class

PhotosUserAlbumsController
Display user albums.

Namespace

Drupal\photos\Controller

Code

public function contentOverview() {

  // Get current user and account.
  // @todo a lot of duplicate code can be consolidated in these controllers.
  $user = $this
    ->currentUser();
  $uid = $this->routeMatch
    ->getParameter('user');
  $account = FALSE;
  if ($uid && is_numeric($uid)) {
    $account = $this->entityTypeManager
      ->getStorage('user')
      ->load($uid);
  }
  if (!$account) {
    throw new NotFoundHttpException();
  }
  $output = '';
  $build = [];
  $cache_tags = [
    'user:' . $uid,
  ];
  if ($account
    ->id() && $account
    ->id() != 0) {
    if ($user
      ->id() == $account
      ->id()) {
      $output = Link::fromTextAndUrl($this
        ->t('Rearrange albums'), Url::fromRoute('photos.album.rearrange', [
        'user' => $account
          ->id(),
      ]))
        ->toString();
    }
    $query = $this->connection
      ->select('node_field_data', 'n')
      ->extend('Drupal\\Core\\Database\\Query\\PagerSelectExtender');
    $query
      ->join('photos_album', 'p', 'p.pid = n.nid');
    $query
      ->fields('n', [
      'nid',
    ]);
    $query
      ->condition('n.uid', $account
      ->id());
    $query
      ->orderBy('p.wid', 'ASC');
    $query
      ->orderBy('n.nid', 'DESC');
    $query
      ->limit(10);
    $query
      ->addTag('node_access');
    $results = $query
      ->execute();
  }
  else {
    $query = $this->connection
      ->select('node', 'n')
      ->extend('Drupal\\Core\\Database\\Query\\PagerSelectExtender');
    $query
      ->join('photos_album', 'p', 'p.pid = n.nid');
    $query
      ->fields('n', [
      'nid',
    ]);
    $query
      ->orderBy('n.nid', 'DESC');
    $query
      ->limit(10);
    $query
      ->addTag('node_access');
    $results = $query
      ->execute();
  }
  foreach ($results as $result) {
    $nid = $result->nid;
    $cache_tags[] = 'node:' . $nid;
    $cache_tags[] = 'photos:album:' . $nid;
    $node = $this->entityTypeManager
      ->getStorage('node')
      ->load($result->nid);
    $node_view = $this->entityTypeManager
      ->getViewBuilder('node')
      ->view($node, 'full');
    $output .= $this->renderer
      ->render($node_view);
  }
  if ($output) {
    $pager = [
      '#type' => 'pager',
    ];
    $output .= $this->renderer
      ->render($pager);
  }
  else {
    if ($account != FALSE) {
      $output .= $this
        ->t('@name has not created an album yet.', [
        '@name' => $account
          ->getDisplayName(),
      ]);
    }
    else {
      $output .= $this
        ->t('No albums have been created yet.');
    }
  }
  $build['#markup'] = $output;
  $build['#cache'] = [
    'tags' => $cache_tags,
  ];
  return $build;
}