diff --git a/classes/admin.php b/classes/admin.php index 74243018..21573dd4 100644 --- a/classes/admin.php +++ b/classes/admin.php @@ -503,8 +503,9 @@ class Admin if (isset($this->session->{$page->route()})) { // Found the type and header from the session. $data = $this->session->{$page->route()}; + $visible = isset($data['visible']) && $data['visible'] != '' ? (bool) $data['visible'] : $this->guessVisibility($page); $page->name($data['type'] . '.md'); - $page->header(['title' => $data['title'], 'visible' => $data['visible']]); + $page->header(['title' => $data['title'], 'visible' => $visible]); $page->frontmatter(Yaml::dump((array) $page->header())); } else { // Find out the type by looking at the parent. @@ -518,6 +519,24 @@ 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 472e9ef8..1abc3c6a 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -797,18 +797,7 @@ class AdminController $obj = $obj->move($parent); $this->preparePage($obj); - // rename folder based on visible - if (isset($data['header']['visible'])) { - if ($data['header']['visible'] && !$obj->order()) { - // needs to have order set - $obj->order(1000); - $reorder = true; - } elseif (!$data['header']['visible'] && $obj->order()) { - // needs to have order removed - $obj->folder($obj->slug()); - $reorder = true; - } - } + // Reset slug and route. For now we do not support slug twig variable on save. $obj->slug($original_slug); @@ -818,8 +807,24 @@ class AdminController $obj = $this->prepareData(); } if ($obj) { + $visible_before = $obj->visible(); $obj->validate(); $obj->filter(); + $visible_after = $obj->visible(); + + // rename folder based on visible + if ($visible_after && !$obj->order()) { + // needs to have order set + $obj->order(1000); + $reorder = true; + } elseif (!$visible_after && $obj->order()) { + // needs to have order removed + $obj->folder($obj->slug()); + $reorder = true; + } + + + $obj->save($reorder); $this->admin->setMessage('Successfully saved', 'info'); } diff --git a/themes/grav/templates/pages.html.twig b/themes/grav/templates/pages.html.twig index 744622fe..aecc6bc1 100644 --- a/themes/grav/templates/pages.html.twig +++ b/themes/grav/templates/pages.html.twig @@ -172,6 +172,7 @@ {% include 'partials/page-move.html.twig' with { blueprints: admin.blueprints('pages/move'), data: context } %} + {% endif %}