isAdmin() || $user->getUserId() == $tag->id_user_owner)) throw new NotAllowedException(); // 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? 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 { 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 = ''; $fields = [ 'kind' => [ 'type' => 'select', 'label' => 'Kind of tag', 'options' => [ 'Location' => 'Location', 'Person' => 'Person', ], ], 'id_user_owner' => [ 'type' => 'select', 'label' => 'Owner', 'options' => [0 => '(nobody)'] + Member::getMemberMap(), ], '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, ], ]; if (!$user->isAdmin()) { unset($fields['kind']); unset($fields['id_user_owner']); } $form = new Form([ 'request_url' => BASEURL . '/edittag/?' . ($id_tag ? 'id=' . $id_tag : 'add'), 'content_below' => $after_form, 'fields' => $fields, ]); // 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($id_tag)) { list($assets, $num_assets) = AssetIterator::getByOptions([ 'direction' => 'desc', 'limit' => 500, 'id_tag' => $id_tag, ], true); if ($num_assets > 0) $this->page->adopt(new FeaturedThumbnailManager($assets, $id_tag ? $tag->id_asset_thumb : 0)); } if (isset($_POST['changeThumbnail'])) $this->processThumbnail($tag); elseif (!empty($_POST)) $this->processTagDetails($form, $id_tag, $tag ?? null); } private function processThumbnail($tag) { if (empty($_POST)) return; $tag->id_asset_thumb = $_POST['featuredThumbnail']; $tag->save(); header('Location: ' . BASEURL . '/edittag/?id=' . $tag->id_tag); exit; } private function processTagDetails($form, $id_tag, $tag) { 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()), 'danger')); $data = $form->getData(); $data['id_parent'] = 0; // Quick stripping. $data['slug'] = strtr($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...', 'danger')); 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 a clean page if (Registry::get('user')->isAdmin()) header('Location: ' . BASEURL . '/managetags/'); else header('Location: ' . BASEURL . '/edittag/?id=' . $id_tag); exit; } } }