blog->id); $blog_lang = $blog_settings->system->lang; # Getting existing category if (!empty($_REQUEST['id'])) { try { $rs = $core->blog->getCategory($_REQUEST['id']); } catch (Exception $e) { $core->error->add($e->getMessage()); } if (!$core->error->flag() && !$rs->isEmpty()) { $cat_id = (integer) $rs->cat_id; $cat_title = $rs->cat_title; $cat_url = $rs->cat_url; $cat_desc = $rs->cat_desc; } unset($rs); # Getting hierarchy information $parents = $core->blog->getCategoryParents($cat_id); $rs = $core->blog->getCategoryParent($cat_id); $cat_parent = $rs->isEmpty() ? 0 : (integer) $rs->cat_id; unset($rs); # Allowed parents list $children = $core->blog->getCategories(['start' => $cat_id]); $allowed_parents = [__('Top level') => 0]; $p = []; while ($children->fetch()) { $p[$children->cat_id] = 1; } $rs = $core->blog->getCategories(); while ($rs->fetch()) { if (!isset($p[$rs->cat_id])) { $allowed_parents[] = new formSelectOption( str_repeat('  ', $rs->level - 1) . ($rs->level - 1 == 0 ? '' : '• ') . html::escapeHTML($rs->cat_title), $rs->cat_id ); } } unset($rs); # Allowed siblings list $siblings = []; $rs = $core->blog->getCategoryFirstChildren($cat_parent); while ($rs->fetch()) { if ($rs->cat_id != $cat_id) { $siblings[html::escapeHTML($rs->cat_title)] = $rs->cat_id; } } unset($rs); } # Changing parent if ($cat_id && isset($_POST['cat_parent'])) { $new_parent = (integer) $_POST['cat_parent']; if ($cat_parent != $new_parent) { try { $core->blog->setCategoryParent($cat_id, $new_parent); dcPage::addSuccessNotice(__('The category has been successfully moved')); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } # Changing sibling if ($cat_id && isset($_POST['cat_sibling'])) { try { $core->blog->setCategoryPosition($cat_id, (integer) $_POST['cat_sibling'], $_POST['cat_move']); dcPage::addSuccessNotice(__('The category has been successfully moved')); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Create or update a category if (isset($_POST['cat_title'])) { $cur = $core->con->openCursor($core->prefix . 'category'); $cur->cat_title = $cat_title = $_POST['cat_title']; if (isset($_POST['cat_desc'])) { $cur->cat_desc = $cat_desc = $_POST['cat_desc']; } if (isset($_POST['cat_url'])) { $cur->cat_url = $cat_url = $_POST['cat_url']; } else { $cur->cat_url = $cat_url; } try { # Update category if ($cat_id) { # --BEHAVIOR-- adminBeforeCategoryUpdate $core->callBehavior('adminBeforeCategoryUpdate', $cur, $cat_id); $core->blog->updCategory($_POST['id'], $cur); # --BEHAVIOR-- adminAfterCategoryUpdate $core->callBehavior('adminAfterCategoryUpdate', $cur, $cat_id); dcPage::addSuccessNotice(__('The category has been successfully updated.')); $core->adminurl->redirect("admin.category", ['id' => $_POST['id']]); } # Create category else { # --BEHAVIOR-- adminBeforeCategoryCreate $core->callBehavior('adminBeforeCategoryCreate', $cur); $id = $core->blog->addCategory($cur, (integer) $_POST['new_cat_parent']); # --BEHAVIOR-- adminAfterCategoryCreate $core->callBehavior('adminAfterCategoryCreate', $cur, $id); dcPage::addSuccessNotice(sprintf(__('The category "%s" has been successfully created.'), html::escapeHTML($cur->cat_title))); $core->adminurl->redirect("admin.categories"); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } $title = $cat_id ? html::escapeHTML($cat_title) : __('New category'); $elements = [ html::escapeHTML($core->blog->name) => '', __('Categories') => $core->adminurl->get("admin.categories") ]; if ($cat_id) { while ($parents->fetch()) { $elements[html::escapeHTML($parents->cat_title)] = $core->adminurl->get("admin.category", ['id' => $parents->cat_id]); } } $elements[$title] = ''; $category_editor = $core->auth->getOption('editor'); $rte_flag = true; $rte_flags = @$core->auth->user_prefs->interface->rte_flags; if (is_array($rte_flags) && in_array('cat_descr', $rte_flags)) { $rte_flag = $rte_flags['cat_descr']; } dcPage::open($title, dcPage::jsConfirmClose('category-form') . dcPage::jsLoad('js/_category.js') . ($rte_flag ? $core->callBehavior('adminPostEditor', $category_editor['xhtml'], 'category', ['#cat_desc'], 'xhtml') : ''), dcPage::breadcrumb($elements) ); if (!empty($_GET['upd'])) { dcPage::success(__('Category has been successfully updated.')); } echo '
' . '

' . __('Category information') . '

' . '

' . form::field('cat_title', 40, 255, [ 'default' => html::escapeHTML($cat_title), 'extra_html' => 'required placeholder="' . __('Name') . '" lang="' . $blog_lang . '" spellcheck="true"' ]) . '

'; if (!$cat_id) { $rs = $core->blog->getCategories(); echo '

'; unset($rs); } echo '
' . '

' . form::field('cat_url', 40, 255, html::escapeHTML($cat_url)) . '

' . '

' . __('Warning: If you set the URL manually, it may conflict with another category.') . '

' . '
' . '

' . form::textarea('cat_desc', 50, 8, [ 'default' => html::escapeHTML($cat_desc), 'extra_html' => 'lang="' . $blog_lang . '" spellcheck="true"' ]) . '

' . '

' . ($cat_id ? form::hidden('id', $cat_id) : '') . $core->formNonce() . '

' . '
'; if ($cat_id) { echo '

' . __('Move this category') . '

' . '
' . '
' . '
' . '

' . __('Category parent') . '

' . '

' . form::combo('cat_parent', $allowed_parents, $cat_parent) . '

' . '

' . form::hidden(['id'], $cat_id) . $core->formNonce() . '

' . '
' . '
'; if (count($siblings) > 0) { echo '
' . '
' . '

' . __('Category sibling') . '

' . '

' . form::combo('cat_move', [__('before') => 'before', __('after') => 'after'], ['extra_html' => 'title="' . __('position: ') . '"']) . ' ' . form::combo('cat_sibling', $siblings) . '

' . '

' . form::hidden(['id'], $cat_id) . $core->formNonce() . '

' . '
' . '
'; } echo '
'; } dcPage::helpBlock('core_category'); dcPage::close();