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 = 'Delete tag'; elseif (!$id_tag) $after_form = ''; $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; } } }