mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-01-03 14:20:43 +01:00
Improved logic for saving and added 'guess' the visibility functionality
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
@@ -172,6 +172,7 @@
|
||||
|
||||
{% include 'partials/page-move.html.twig' with { blueprints: admin.blueprints('pages/move'), data: context } %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="remodal" data-remodal-id="delete" data-remodal-options="hashTracking: false">
|
||||
<form>
|
||||
@@ -186,7 +187,7 @@
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
<div class="remodal" data-remodal-id="changes">
|
||||
<form>
|
||||
|
||||
Reference in New Issue
Block a user