Implement basic album management.
This commit is contained in:
parent
95e289d82d
commit
943297900c
147
controllers/EditAlbum.php
Normal file
147
controllers/EditAlbum.php
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
/*****************************************************************************
|
||||||
|
* EditAlbum.php
|
||||||
|
* Contains the album edit controller.
|
||||||
|
*
|
||||||
|
* Kabuki CMS (C) 2013-2017, Aaron van Geffen
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
class EditAlbum extends HTMLController
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
// Ensure it's just admins at this point.
|
||||||
|
if (!Registry::get('user')->isAdmin())
|
||||||
|
throw new NotAllowedException();
|
||||||
|
|
||||||
|
$id_tag = isset($_GET['id']) ? (int) $_GET['id'] : 0;
|
||||||
|
if (empty($id_tag) && !isset($_GET['add']))
|
||||||
|
throw new UnexpectedValueException('Requested album not found or not requesting a new album.');
|
||||||
|
|
||||||
|
// Adding an album?
|
||||||
|
if (isset($_GET['add']))
|
||||||
|
{
|
||||||
|
parent::__construct('Add a new album');
|
||||||
|
$form_title = 'Add a new album';
|
||||||
|
$this->page->addClass('editalbum');
|
||||||
|
}
|
||||||
|
// Deleting one?
|
||||||
|
elseif (isset($_GET['delete']))
|
||||||
|
{
|
||||||
|
// So far so good?
|
||||||
|
$album = Tag::fromId($id_tag);
|
||||||
|
if (Session::validateSession('get') && $tag->kind === 'Album' && $tag->delete())
|
||||||
|
{
|
||||||
|
header('Location: ' . BASEURL . '/managealbums/');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
trigger_error('Cannot delete album: an error occured while processing the request.', E_USER_ERROR);
|
||||||
|
}
|
||||||
|
// Editing one, then, surely.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$album = Tag::fromId($id_tag);
|
||||||
|
if ($album->kind !== 'Album')
|
||||||
|
trigger_error('Cannot edit album: not an album.', E_USER_ERROR);
|
||||||
|
|
||||||
|
parent::__construct('Edit album \'' . $album->tag . '\'');
|
||||||
|
$form_title = 'Edit album \'' . $album->tag . '\'';
|
||||||
|
$this->page->addClass('editalbum');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Session checking!
|
||||||
|
if (empty($_POST))
|
||||||
|
Session::resetSessionToken();
|
||||||
|
else
|
||||||
|
Session::validateSession();
|
||||||
|
|
||||||
|
if ($id_tag)
|
||||||
|
$after_form = '<a href="' . BASEURL . '/editalbum/?id=' . $id_tag . '&delete&' . Session::getSessionTokenKey() . '=' . Session::getSessionToken() . '" class="btn btn-danger" onclick="return confirm(\'Are you sure you want to delete this album? You cannot undo this!\');">Delete album</a>';
|
||||||
|
elseif (!$id_tag)
|
||||||
|
$after_form = '<button name="submit_and_new" class="btn">Save and add another</button>';
|
||||||
|
|
||||||
|
$form = new Form([
|
||||||
|
'request_url' => BASEURL . '/editalbum/?' . ($id_tag ? 'id=' . $id_tag : 'add'),
|
||||||
|
'content_below' => $after_form,
|
||||||
|
'fields' => [
|
||||||
|
'id_parent' => [
|
||||||
|
'type' => 'numeric',
|
||||||
|
'label' => 'Parent album ID',
|
||||||
|
],
|
||||||
|
'id_asset_thumb' => [
|
||||||
|
'type' => 'numeric',
|
||||||
|
'label' => 'Thumbnail asset ID',
|
||||||
|
'is_optional' => true,
|
||||||
|
],
|
||||||
|
'tag' => [
|
||||||
|
'type' => 'text',
|
||||||
|
'label' => 'Album title',
|
||||||
|
'size' => 50,
|
||||||
|
'maxlength' => 255,
|
||||||
|
],
|
||||||
|
'slug' => [
|
||||||
|
'type' => 'text',
|
||||||
|
'label' => 'URL slug',
|
||||||
|
'size' => 50,
|
||||||
|
'maxlength' => 255,
|
||||||
|
],
|
||||||
|
'description' => [
|
||||||
|
'type' => 'textbox',
|
||||||
|
'label' => 'Description',
|
||||||
|
'size' => 50,
|
||||||
|
'maxlength' => 255,
|
||||||
|
'is_optional' => true,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Create the form, add in default values.
|
||||||
|
$form->setData($id_tag ? get_object_vars($album) : $_POST);
|
||||||
|
$formview = new FormView($form, $form_title ?? '');
|
||||||
|
$this->page->adopt($formview);
|
||||||
|
|
||||||
|
if (!empty($_POST))
|
||||||
|
{
|
||||||
|
$form->verify($_POST);
|
||||||
|
|
||||||
|
// Anything missing?
|
||||||
|
if (!empty($form->getMissing()))
|
||||||
|
return $formview->adopt(new Alert('Some data missing', 'Please fill out the following fields: ' . implode(', ', $form->getMissing()), 'error'));
|
||||||
|
|
||||||
|
$data = $form->getData();
|
||||||
|
|
||||||
|
// Quick stripping.
|
||||||
|
$data['slug'] = strtr(strtolower($data['slug']), [' ' => '-', '--' => '-', '&' => 'and', '=>' => '', "'" => "", ":"=> "", '/' => '-', '\\' => '-']);
|
||||||
|
|
||||||
|
// TODO: when updating slug, update slug for all photos in this album.
|
||||||
|
|
||||||
|
// Creating a new album?
|
||||||
|
if (!$id_tag)
|
||||||
|
{
|
||||||
|
$data['kind'] = 'Album';
|
||||||
|
$return = Tag::createNew($data);
|
||||||
|
if ($return === false)
|
||||||
|
return $formview->adopt(new Alert('Cannot create this album', 'Something went wrong while creating the album...', 'error'));
|
||||||
|
|
||||||
|
if (isset($_POST['submit_and_new']))
|
||||||
|
{
|
||||||
|
header('Location: ' . BASEURL . '/editalbum/?add');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Just updating?
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach ($data as $key => $value)
|
||||||
|
$album->$key = $value;
|
||||||
|
|
||||||
|
$album->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Redirect to the album management page.
|
||||||
|
header('Location: ' . BASEURL . '/managealbums/');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -15,6 +15,17 @@ class ManageAlbums extends HTMLController
|
|||||||
throw new NotAllowedException();
|
throw new NotAllowedException();
|
||||||
|
|
||||||
$options = [
|
$options = [
|
||||||
|
'form' => [
|
||||||
|
'action' => BASEURL . '/editalbum/',
|
||||||
|
'method' => 'get',
|
||||||
|
'class' => 'floatright',
|
||||||
|
'buttons' => [
|
||||||
|
'add' => [
|
||||||
|
'type' => 'submit',
|
||||||
|
'caption' => 'Add new album',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
'columns' => [
|
'columns' => [
|
||||||
'id_album' => [
|
'id_album' => [
|
||||||
'value' => 'id_tag',
|
'value' => 'id_tag',
|
||||||
@ -49,6 +60,7 @@ class ManageAlbums extends HTMLController
|
|||||||
'title' => 'Manage albums',
|
'title' => 'Manage albums',
|
||||||
'no_items_label' => 'No albums meet the requirements of the current filter.',
|
'no_items_label' => 'No albums meet the requirements of the current filter.',
|
||||||
'items_per_page' => 9999,
|
'items_per_page' => 9999,
|
||||||
|
'index_class' => 'floatleft',
|
||||||
'base_url' => BASEURL . '/managealbums/',
|
'base_url' => BASEURL . '/managealbums/',
|
||||||
'get_data' => function($offset = 0, $limit = 9999, $order = '', $direction = 'up') {
|
'get_data' => function($offset = 0, $limit = 9999, $order = '', $direction = 'up') {
|
||||||
if (!in_array($order, ['id_tag', 'tag', 'slug', 'count']))
|
if (!in_array($order, ['id_tag', 'tag', 'slug', 'count']))
|
||||||
|
@ -12,6 +12,7 @@ class Dispatcher
|
|||||||
{
|
{
|
||||||
$possibleActions = [
|
$possibleActions = [
|
||||||
'albums' => 'ViewPhotoAlbums',
|
'albums' => 'ViewPhotoAlbums',
|
||||||
|
'editalbum' => 'EditAlbum',
|
||||||
'editasset' => 'EditAsset',
|
'editasset' => 'EditAsset',
|
||||||
'edituser' => 'EditUser',
|
'edituser' => 'EditUser',
|
||||||
'login' => 'Login',
|
'login' => 'Login',
|
||||||
|
@ -260,6 +260,8 @@ class Tag
|
|||||||
id_parent = {int:id_parent},
|
id_parent = {int:id_parent},
|
||||||
id_asset_thumb = {int:id_asset_thumb},
|
id_asset_thumb = {int:id_asset_thumb},
|
||||||
tag = {string:tag},
|
tag = {string:tag},
|
||||||
|
slug = {string:slug},
|
||||||
|
description = {string:description},
|
||||||
count = {int:count}
|
count = {int:count}
|
||||||
WHERE id_tag = {int:id_tag}',
|
WHERE id_tag = {int:id_tag}',
|
||||||
get_object_vars($this));
|
get_object_vars($this));
|
||||||
|
@ -24,8 +24,8 @@ class FormView extends SubTemplate
|
|||||||
{
|
{
|
||||||
if (!empty($this->title))
|
if (!empty($this->title))
|
||||||
echo '
|
echo '
|
||||||
<h3>', $this->title, '</h3>
|
<div class="admin_box">
|
||||||
<div id="inner">';
|
<h2>', $this->title, '</h2>';
|
||||||
|
|
||||||
foreach ($this->_subtemplates as $template)
|
foreach ($this->_subtemplates as $template)
|
||||||
$template->html_main();
|
$template->html_main();
|
||||||
@ -132,7 +132,7 @@ class FormView extends SubTemplate
|
|||||||
|
|
||||||
case 'numeric':
|
case 'numeric':
|
||||||
echo '
|
echo '
|
||||||
<input type="number"', isset($field['step']) ? ' step="' . $field['step'] . '"' : '', '" min="', isset($field['min_value']) ? $field['min_value'] : '0', '" max="', isset($field['max_value']) ? $field['max_value'] : '9999', '" name="', $field_id, '" id="', $field_id, '"', isset($field['size']) ? ' size="' . $field['size'] . '"' : '', isset($field['maxlength']) ? ' maxlength="' . $field['maxlength'] . '"' : '', ' value="', htmlentities($this->data[$field_id]), '"', !empty($field['disabled']) ? ' disabled' : '', '>';
|
<input type="number"', isset($field['step']) ? ' step="' . $field['step'] . '"' : '', ' min="', isset($field['min_value']) ? $field['min_value'] : '0', '" max="', isset($field['max_value']) ? $field['max_value'] : '9999', '" name="', $field_id, '" id="', $field_id, '"', isset($field['size']) ? ' size="' . $field['size'] . '"' : '', isset($field['maxlength']) ? ' maxlength="' . $field['maxlength'] . '"' : '', ' value="', htmlentities($this->data[$field_id]), '"', !empty($field['disabled']) ? ' disabled' : '', '>';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'file':
|
case 'file':
|
||||||
|
Loading…
Reference in New Issue
Block a user