You are here

public function PhotosController::albumViews in Album Photos 8.4

Album views.

1 call to PhotosController::albumViews()
PhotosController::contentOverview in src/Controller/PhotosController.php
Returns an overview of recent albums and photos.

File

src/Controller/PhotosController.php, line 58

Class

PhotosController
View albums and recent images.

Namespace

Drupal\photos\Controller

Code

public function albumViews($type, $limit, $url = 0, $uid = 0, $sort = ' n.nid DESC') {
  $query = $this->connection
    ->select('photos_album', 'p');
  $query
    ->join('node_field_data', 'n', 'n.nid = p.pid');
  $query
    ->join('users_field_data', 'u', 'u.uid = n.uid');
  $query
    ->fields('p', [
    'count',
    'fid',
  ])
    ->fields('n', [
    'nid',
    'title',
  ])
    ->fields('u', [
    'uid',
    'name',
  ]);
  $query
    ->condition('n.status', 1);
  if ($type == 'user') {
    $query
      ->condition('n.uid', $uid);
  }
  if ($type == 'rand') {
    $query
      ->orderRandom();
  }
  else {
    $query
      ->orderBy('n.nid', 'DESC');
  }
  $query
    ->range(0, $limit);
  $query
    ->addTag('node_access');
  $results = $query
    ->execute();
  $i = 0;
  foreach ($results as $result) {
    $photos_album = new PhotosAlbum($result->nid);
    $cover = $photos_album
      ->getCover($result->fid);
    $view = '';
    if ($cover && isset($cover['view'])) {
      $view = $this->renderer
        ->render($cover['view']);
    }
    $album[] = [
      'node' => $result,
      'view' => $view,
    ];
    ++$i;
  }
  if ($i) {
    $photo_block = [
      '#theme' => 'photos_block',
      '#images' => $album,
      '#block_type' => 'album',
    ];
    $content = $this->renderer
      ->render($photo_block);
    $url = Url::fromUri('base:' . $url);
    if ($url && $i >= $limit) {
      $more_link = [
        '#type' => 'more_link',
        '#url' => $url,
        '#title' => $this
          ->t('View more'),
      ];
      $content .= $this->renderer
        ->render($more_link);
    }
    if ($type == 'user') {
      return [
        'content' => $content,
        'title' => $this
          ->t("@name's albums", [
          '@name' => $album[0]['node']->name,
        ]),
      ];
    }
    else {
      return $content;
    }
  }
}