2017-11-05 17:13:52 +01:00
< ? 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.
2018-02-19 11:54:56 +01:00
$data [ 'slug' ] = strtr ( $data [ 'slug' ], [ ' ' => '-' , '--' => '-' , '&' => 'and' , '=>' => '' , " ' " => " " , " : " => " " , '/' => '-' , '\\' => '-' ]);
2017-11-05 17:13:52 +01:00
// 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 ;
}
}
}