You are here

public function PhotosImageController::contentOverview in Album Photos 8.4

Returns content for single image.

Return value

string A HTML-formatted string with the administrative page content.

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

File

src/Controller/PhotosImageController.php, line 117

Class

PhotosImageController
Image view controller.

Namespace

Drupal\photos\Controller

Code

public function contentOverview() {
  $fid = $this->routeMatch
    ->getParameter('file');
  $config = $this
    ->config('photos.settings');
  if (!is_numeric($fid)) {
    throw new NotFoundHttpException();
  }
  $photos_image = new PhotosImage($fid);
  $image = $photos_image
    ->load();
  if (!$image) {
    throw new NotFoundHttpException();
  }
  $node = $this->entityTypeManager
    ->getStorage('node')
    ->load($image->pid);
  if (_photos_access('imageEdit', $node)) {
    $image->ajax['edit_url'] = Url::fromUri('base:photos/image/' . $image->fid . '/update')
      ->toString();

    // Set album cover.
    $image->links['cover'] = Link::createFromRoute($this
      ->t('Set to Cover'), 'photos.album.update.cover', [
      'node' => $image->pid,
      'file' => $fid,
    ], [
      'query' => $this
        ->getDestinationArray(),
    ]);
  }
  $image->class = [
    'title_class' => '',
    'des_class' => '',
  ];
  $image->id = [
    'des_edit' => '',
    'title_edit' => '',
  ];
  $edit = _photos_access('imageEdit', $node);
  if ($edit) {

    // Image edit link.
    $url = Url::fromUri('base:photos/image/' . $image->fid . '/edit', [
      'query' => [
        'destination' => 'photos/image/' . $image->fid,
      ],
      'attributes' => [
        'class' => [
          'colorbox-load',
          'photos-edit-edit',
        ],
      ],
    ]);
    $image->ajax['edit_link'] = Link::fromTextAndUrl($this
      ->t('Edit'), $url);
    $image->class = [
      'title_class' => ' jQueryeditable_edit_title',
      'des_class' => ' jQueryeditable_edit_des',
    ];
    $image->id = [
      'des_edit' => ' id="photos-image-edit-des-' . $image->fid . '"',
      'title_edit' => ' id="photos-image-edit-title-' . $image->fid . '"',
    ];
    $jeditable_library = $this->libraryDiscovery
      ->getLibraryByName('photos', 'photos.jeditable');
  }
  if (_photos_access('imageDelete', $node)) {

    // Image delete link.
    // @todo cancel should go back to image. Confirm to album.
    $url = Url::fromUri('base:photos/image/' . $image->fid . '/delete', [
      'query' => [
        'destination' => 'node/' . $image->pid,
      ],
      'attributes' => [
        'class' => [
          'colorbox-load',
          'photos-edit-delete',
        ],
      ],
    ]);
    $image->ajax['del_link'] = Link::fromTextAndUrl($this
      ->t('Delete'), $url);
  }
  if ($config
    ->get('photos_comment')) {

    // Comment integration.
    $render_comment = [
      '#theme' => 'photos_comment_count',
      '#comcount' => $image->comcount,
    ];
    $image->links['comment'] = $render_comment;
  }

  // Album images.
  $pager_type = 'pid';
  $pager_id = $image->pid;
  $data = isset($image->data) ? unserialize($image->data) : [];
  $style_name = isset($data['view_imagesize']) ? $data['view_imagesize'] : $config
    ->get('photos_display_view_imagesize');
  $image->links['pager'] = $photos_image
    ->pager($pager_id, $pager_type);
  $image->view = [
    '#theme' => 'photos_image_html',
    '#style_name' => $style_name,
    '#image' => $image,
    '#cache' => [
      'tags' => [
        'photos:image:' . $fid,
      ],
    ],
  ];

  // Get comments.
  $image->comment['view'] = $photos_image
    ->comments($image->comcount, $node);

  // Check count image views variable.
  $photos_image_count = $config
    ->get('photos_image_count');
  $image->disable_photos_image_count = $photos_image_count;
  if (!$photos_image_count) {
    $count = 1;
    $this->connection
      ->update('photos_image')
      ->fields([
      'count' => $count,
    ])
      ->expression('count', 'count + :count', [
      ':count' => $count,
    ])
      ->condition('fid', $fid)
      ->execute();
  }
  $image->title = Html::escape($image->title);
  $image->des = Html::escape($image->des);
  $GLOBALS['photos'][$image->fid . '_pid'] = $image->pid;
  $image_view = [
    '#theme' => 'photos_image_view',
    '#image' => $image,
    '#display_type' => 'view',
    '#cache' => [
      'tags' => [
        'photos:image:' . $fid,
      ],
    ],
  ];

  // Check for Jeditable library.
  // @todo move to static public function?
  if ($edit && isset($jeditable_library['js']) && file_exists($jeditable_library['js'][0]['data'])) {
    $image_view['#attached']['library'][] = 'photos/photos.jeditable';
  }
  return $image_view;
}