Implement basic tag management.
This commit is contained in:
parent
943297900c
commit
2a25434862
2
TODO.md
2
TODO.md
@ -1,7 +1,5 @@
|
||||
TODO:
|
||||
|
||||
* Album/tag management
|
||||
|
||||
* Alleen persoonstags tonen bij foto's.
|
||||
|
||||
* Gebruikers persoonstags laten verwijderen vanaf fotopagina.
|
||||
|
152
controllers/EditTag.php
Normal file
152
controllers/EditTag.php
Normal file
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/*****************************************************************************
|
||||
* EditTag.php
|
||||
* Contains the tag edit controller.
|
||||
*
|
||||
* Kabuki CMS (C) 2013-2017, Aaron van Geffen
|
||||
*****************************************************************************/
|
||||
|
||||
class EditTag 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 tag not found or not requesting a new tag.');
|
||||
|
||||
// Adding an tag?
|
||||
if (isset($_GET['add']))
|
||||
{
|
||||
parent::__construct('Add a new tag');
|
||||
$form_title = 'Add a new tag';
|
||||
$this->page->addClass('edittag');
|
||||
}
|
||||
// Deleting one?
|
||||
elseif (isset($_GET['delete']))
|
||||
{
|
||||
// So far so good?
|
||||
$tag = Tag::fromId($id_tag);
|
||||
if (Session::validateSession('get') && $tag->kind !== 'Album' && $tag->delete())
|
||||
{
|
||||
header('Location: ' . BASEURL . '/managetags/');
|
||||
exit;
|
||||
}
|
||||
else
|
||||
trigger_error('Cannot delete tag: an error occured while processing the request.', E_USER_ERROR);
|
||||
}
|
||||
// Editing one, then, surely.
|
||||
else
|
||||
{
|
||||
$tag = Tag::fromId($id_tag);
|
||||
if ($tag->kind === 'Album')
|
||||
trigger_error('Cannot edit tag: is actually an album.', E_USER_ERROR);
|
||||
|
||||
parent::__construct('Edit tag \'' . $tag->tag . '\'');
|
||||
$form_title = 'Edit tag \'' . $tag->tag . '\'';
|
||||
$this->page->addClass('edittag');
|
||||
}
|
||||
|
||||
// Session checking!
|
||||
if (empty($_POST))
|
||||
Session::resetSessionToken();
|
||||
else
|
||||
Session::validateSession();
|
||||
|
||||
if ($id_tag)
|
||||
$after_form = '<a href="' . BASEURL . '/edittag/?id=' . $id_tag . '&delete&' . Session::getSessionTokenKey() . '=' . Session::getSessionToken() . '" class="btn btn-danger" onclick="return confirm(\'Are you sure you want to delete this tag? You cannot undo this!\');">Delete tag</a>';
|
||||
elseif (!$id_tag)
|
||||
$after_form = '<button name="submit_and_new" class="btn">Save and add another</button>';
|
||||
|
||||
$form = new Form([
|
||||
'request_url' => BASEURL . '/edittag/?' . ($id_tag ? 'id=' . $id_tag : 'add'),
|
||||
'content_below' => $after_form,
|
||||
'fields' => [
|
||||
'id_parent' => [
|
||||
'type' => 'numeric',
|
||||
'label' => 'Parent tag ID',
|
||||
],
|
||||
'id_asset_thumb' => [
|
||||
'type' => 'numeric',
|
||||
'label' => 'Thumbnail asset ID',
|
||||
'is_optional' => true,
|
||||
],
|
||||
'kind' => [
|
||||
'type' => 'select',
|
||||
'label' => 'Kind of tag',
|
||||
'options' => [
|
||||
'Location' => 'Location',
|
||||
'Person' => 'Person',
|
||||
],
|
||||
],
|
||||
'tag' => [
|
||||
'type' => 'text',
|
||||
'label' => 'Tag 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($tag) : $_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', '=>' => '', "'" => "", ":"=> "", '/' => '-', '\\' => '-']);
|
||||
|
||||
// Creating a new tag?
|
||||
if (!$id_tag)
|
||||
{
|
||||
$return = Tag::createNew($data);
|
||||
if ($return === false)
|
||||
return $formview->adopt(new Alert('Cannot create this tag', 'Something went wrong while creating the tag...', 'error'));
|
||||
|
||||
if (isset($_POST['submit_and_new']))
|
||||
{
|
||||
header('Location: ' . BASEURL . '/edittag/?add');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
// Just updating?
|
||||
else
|
||||
{
|
||||
foreach ($data as $key => $value)
|
||||
$tag->$key = $value;
|
||||
|
||||
$tag->save();
|
||||
}
|
||||
|
||||
// Redirect to the tag management page.
|
||||
header('Location: ' . BASEURL . '/managetags/');
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
@ -15,6 +15,17 @@ class ManageTags extends HTMLController
|
||||
throw new NotAllowedException();
|
||||
|
||||
$options = [
|
||||
'form' => [
|
||||
'action' => BASEURL . '/edittag/',
|
||||
'method' => 'get',
|
||||
'class' => 'floatright',
|
||||
'buttons' => [
|
||||
'add' => [
|
||||
'type' => 'submit',
|
||||
'caption' => 'Add new tag',
|
||||
],
|
||||
],
|
||||
],
|
||||
'columns' => [
|
||||
'id_post' => [
|
||||
'value' => 'id_tag',
|
||||
@ -25,7 +36,7 @@ class ManageTags extends HTMLController
|
||||
'header' => 'Tag',
|
||||
'is_sortable' => true,
|
||||
'parse' => [
|
||||
'link' => BASEURL . '/managetag/?id={ID_TAG}',
|
||||
'link' => BASEURL . '/edittag/?id={ID_TAG}',
|
||||
'data' => 'tag',
|
||||
],
|
||||
],
|
||||
@ -33,7 +44,7 @@ class ManageTags extends HTMLController
|
||||
'header' => 'Slug',
|
||||
'is_sortable' => true,
|
||||
'parse' => [
|
||||
'link' => BASEURL . '/managetag/?id={ID_TAG}',
|
||||
'link' => BASEURL . '/edittag/?id={ID_TAG}',
|
||||
'data' => 'slug',
|
||||
],
|
||||
],
|
||||
@ -54,6 +65,7 @@ class ManageTags extends HTMLController
|
||||
'title' => 'Manage tags',
|
||||
'no_items_label' => 'No tags meet the requirements of the current filter.',
|
||||
'items_per_page' => 30,
|
||||
'index_class' => 'floatleft',
|
||||
'base_url' => BASEURL . '/managetags/',
|
||||
'get_data' => function($offset = 0, $limit = 30, $order = '', $direction = 'up') {
|
||||
if (!in_array($order, ['id_post', 'tag', 'slug', 'kind', 'count']))
|
||||
|
@ -14,6 +14,7 @@ class Dispatcher
|
||||
'albums' => 'ViewPhotoAlbums',
|
||||
'editalbum' => 'EditAlbum',
|
||||
'editasset' => 'EditAsset',
|
||||
'edittag' => 'EditTag',
|
||||
'edituser' => 'EditUser',
|
||||
'login' => 'Login',
|
||||
'logout' => 'Logout',
|
||||
|
Loading…
Reference in New Issue
Block a user