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…
Reference in New Issue
Block a user