diff --git a/classes/admin.php b/classes/admin.php index 65aa99ed..9e6728e9 100644 --- a/classes/admin.php +++ b/classes/admin.php @@ -538,7 +538,7 @@ class Admin $header = ['title' => $data['title']]; if (isset($data['visible'])) { - if ($data['visible'] == '') { + if ($data['visible'] == '' || $data['visible']) { // if auto (ie '') $children = $page->parent()->children(); foreach ($children as $child) { @@ -548,9 +548,6 @@ class Admin break; } } - } else { - // else visible explicitly set - $header['visible'] = (bool) $data['visible']; } } @@ -576,25 +573,6 @@ class Admin return $page; } - /** - * Guess the intended visibility status based on other sibling folders - * - * @param \Grav\Common\Page\Page $page - * - * @return bool - */ - public function guessVisibility(Page $page) - { - $children = $page->parent()->children(); - foreach ($children as $child) { - if ($child->order()) { - return true; - } - } - - return false; - } - /** * Static helper method to return current route. * diff --git a/classes/controller.php b/classes/controller.php index 4e964bc1..96501376 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -829,6 +829,8 @@ class AdminController $original_slug = $obj->slug(); $original_order = intval(trim($obj->order(), '.')); + + // Change parent if needed and initialize move (might be needed also on ordering/folder change). $obj = $obj->move($parent); $this->preparePage($obj); @@ -845,6 +847,16 @@ class AdminController $obj->order($original_order + 1); } + // add or remove numeric prefix based on ordering value + if (isset($data['ordering'])) { + if ($data['ordering'] && !$obj->order()) { + $obj->order(1001); + } elseif (!$data['ordering'] && $obj->order()) { + $obj->folder($obj->slug()); + } + } + + } else { // Handle standard data types. $obj = $this->prepareData(); @@ -1134,10 +1146,17 @@ class AdminController { $input = $this->post; - $order = max(0, (int) isset($input['order']) ? $input['order'] : $page->value('order')); - $ordering = $order ? sprintf('%02d.', $order) : ''; - $slug = empty($input['folder']) ? $page->value('folder') : (string) $input['folder']; - $page->folder($ordering . $slug); + if (isset($input['order'])) { + $order = max(0, (int) isset($input['order']) ? $input['order'] : $page->value('order')); + $ordering = $order ? sprintf('%02d.', $order) : ''; + $slug = empty($input['folder']) ? $page->value('folder') : (string) $input['folder']; + $page->folder($ordering . $slug); + + if (isset($input['header']['visible']) && $input['header']['visible'] == true) { + unset($input['header']['visible']); + } + + } if (isset($input['type']) && !empty($input['type'])) { @@ -1147,7 +1166,6 @@ class AdminController $page->template($type); } - // Special case for Expert mode: build the raw, unset content if (isset($input['frontmatter']) && isset($input['content'])) { $page->raw("---\n" . (string) $input['frontmatter'] . "\n---\n" . (string) $input['content']); @@ -1166,7 +1184,7 @@ class AdminController } } elseif ($key == 'taxonomy') { foreach ($header[$key] as $taxkey => $taxonomy) { - if (is_array($taxonomy) && count($taxonomy) == 1 && $taxonomy[0] == '') { + if (is_array($taxonomy) && count($taxonomy) == 1 && trim($taxonomy[0]) == '') { unset($header[$key][$taxkey]); } }