Introduce edit menu for admins #49
@ -107,8 +107,11 @@ class ViewPhotoAlbum extends HTMLController
 | 
			
		||||
			if (!empty($active_filter))
 | 
			
		||||
				$url_params['by'] = $active_filter;
 | 
			
		||||
 | 
			
		||||
			if (!empty($url_params))
 | 
			
		||||
				$index->setUrlSuffix('?' . http_build_query($url_params));
 | 
			
		||||
			$url_suffix = http_build_query($url_params);
 | 
			
		||||
			$index->setUrlSuffix('?' . $url_suffix);
 | 
			
		||||
 | 
			
		||||
			$menu_items = $this->getEditMenuItems('&' . $url_suffix);
 | 
			
		||||
			$index->setEditMenuItems($menu_items);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Make a page index as needed, while we're at it.
 | 
			
		||||
@ -228,6 +231,46 @@ class ViewPhotoAlbum extends HTMLController
 | 
			
		||||
		return $buttons;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function getEditMenuItems($url_suffix)
 | 
			
		||||
	{
 | 
			
		||||
		$items = [];
 | 
			
		||||
		$sess = '&' . Session::getSessionTokenKey() . '=' . Session::getSessionToken();
 | 
			
		||||
 | 
			
		||||
		if (Registry::get('user')->isLoggedIn())
 | 
			
		||||
		{
 | 
			
		||||
			$items[] = [
 | 
			
		||||
				'label' => 'Edit image',
 | 
			
		||||
				'uri' => fn($image) => $image->getEditUrl() . $url_suffix,
 | 
			
		||||
			];
 | 
			
		||||
 | 
			
		||||
			$items[] = [
 | 
			
		||||
				'label' => 'Delete image',
 | 
			
		||||
				'uri' => fn($image) => $image->getDeleteUrl() . $url_suffix . $sess,
 | 
			
		||||
				'onclick' => 'return confirm(\'Are you sure you want to delete this image?\');',
 | 
			
		||||
			];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (Registry::get('user')->isAdmin())
 | 
			
		||||
		{
 | 
			
		||||
			$items[] = [
 | 
			
		||||
				'label' => 'Make album cover',
 | 
			
		||||
				'uri' => fn($image) => $image->getEditUrl() . $url_suffix . '&album_cover' . $sess,
 | 
			
		||||
			];
 | 
			
		||||
 | 
			
		||||
			$items[] = [
 | 
			
		||||
				'label' => 'Increase priority',
 | 
			
		||||
				'uri' => fn($image) => $image->getEditUrl() . $url_suffix . '&inc_prio' . $sess,
 | 
			
		||||
			];
 | 
			
		||||
 | 
			
		||||
			$items[] = [
 | 
			
		||||
				'label' => 'Decrease priority',
 | 
			
		||||
				'uri' => fn($image) => $image->getEditUrl() . $url_suffix . '&dec_prio' . $sess,
 | 
			
		||||
			];
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return $items;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function getHeaderBox(Tag $tag)
 | 
			
		||||
	{
 | 
			
		||||
		// Can we go up a level?
 | 
			
		||||
 | 
			
		||||
@ -36,6 +36,11 @@ class Asset
 | 
			
		||||
			$this->date_captured = new DateTime($data['date_captured']);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function canBeEditedBy(User $user)
 | 
			
		||||
	{
 | 
			
		||||
		return $this->isOwnedBy($user) || $user->isAdmin();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function cleanSlug($slug)
 | 
			
		||||
	{
 | 
			
		||||
		// Only alphanumerical chars, underscores and forward slashes are allowed
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ class PhotosIndex extends Template
 | 
			
		||||
	protected $show_labels;
 | 
			
		||||
	protected $previous_header = '';
 | 
			
		||||
 | 
			
		||||
	protected $edit_url_suffix;
 | 
			
		||||
	protected $edit_menu_items = [];
 | 
			
		||||
	protected $photo_url_suffix;
 | 
			
		||||
 | 
			
		||||
	const PANORAMA_WIDTH = 1256;
 | 
			
		||||
@ -85,27 +85,24 @@ class PhotosIndex extends Template
 | 
			
		||||
 | 
			
		||||
	protected function editMenu(Image $image)
 | 
			
		||||
	{
 | 
			
		||||
		$edit_url = $image->getEditUrl() . $this->edit_url_suffix;
 | 
			
		||||
		if (empty($this->edit_menu_items))
 | 
			
		||||
			return;
 | 
			
		||||
 | 
			
		||||
		echo '
 | 
			
		||||
				<div class="edit dropdown">
 | 
			
		||||
					<button class="btn btn-primary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
 | 
			
		||||
					</button>
 | 
			
		||||
					<ul class="dropdown-menu">
 | 
			
		||||
						<li><a class="dropdown-item" href="', $edit_url, '">Edit image</a></li>
 | 
			
		||||
						<li><a class="dropdown-item" href="', $image->getDeleteUrl(), '&',
 | 
			
		||||
							Session::getSessionTokenKey(), '=', Session::getSessionToken(),
 | 
			
		||||
							'" onclick="return confirm(\'Are you sure you want to delete this image?\');',
 | 
			
		||||
							'">Delete image</a></li>
 | 
			
		||||
						<li><a class="dropdown-item" href="', $edit_url, '&album_cover&',
 | 
			
		||||
							Session::getSessionTokenKey(), '=', Session::getSessionToken(),
 | 
			
		||||
							'">Make album cover</a></li>
 | 
			
		||||
						<li><a class="dropdown-item" href="', $edit_url, '&inc_prio&',
 | 
			
		||||
							Session::getSessionTokenKey(), '=', Session::getSessionToken(),
 | 
			
		||||
							'">Increase priority</a></li>
 | 
			
		||||
						<li><a class="dropdown-item" href="', $edit_url, '&dec_prio&',
 | 
			
		||||
							Session::getSessionTokenKey(), '=', Session::getSessionToken(),
 | 
			
		||||
							'">Decrease priority</a></li>
 | 
			
		||||
					<ul class="dropdown-menu">';
 | 
			
		||||
 | 
			
		||||
		foreach ($this->edit_menu_items as $item)
 | 
			
		||||
		{
 | 
			
		||||
			echo '
 | 
			
		||||
						<li><a class="dropdown-item" href="', $item['uri']($image), '"',
 | 
			
		||||
							isset($item['onclick']) ? ' onclick="' . $item['onclick'] . '"' : '',
 | 
			
		||||
							'>', $item['label'], '</a></li>';
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		echo '
 | 
			
		||||
					</ul>
 | 
			
		||||
				</div>';
 | 
			
		||||
	}
 | 
			
		||||
@ -118,7 +115,7 @@ class PhotosIndex extends Template
 | 
			
		||||
		echo '
 | 
			
		||||
				<div class="polaroid ', $className, '" style="aspect-ratio: ', $aspectRatio, '">';
 | 
			
		||||
 | 
			
		||||
		if ($this->show_edit_buttons)
 | 
			
		||||
		if ($this->show_edit_buttons && $image->canBeEditedBy(Registry::get('user')))
 | 
			
		||||
			$this->editMenu($image);
 | 
			
		||||
 | 
			
		||||
		echo '
 | 
			
		||||
@ -347,9 +344,13 @@ class PhotosIndex extends Template
 | 
			
		||||
		$this->threePortraits($photos, $altLayout);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setEditMenuItems(array $items)
 | 
			
		||||
	{
 | 
			
		||||
		$this->edit_menu_items = $items;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setUrlSuffix($suffix)
 | 
			
		||||
	{
 | 
			
		||||
		$this->photo_url_suffix = $suffix;
 | 
			
		||||
		$this->edit_url_suffix = str_replace('?', '&', $suffix);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user