$mode]);
$target = \implode(
'&',
\array_map(
fn ($key) => \rosavox\helpers\string_coin(
'{{key}}={{value}}',
[
'key' => $key,
'value' => $a[$key],
]
),
\array_keys($a)
)
);
\rosavox\helpers\navigate('?' . $target);
}
?>
rosavox
\implode(
"\n",
\array_map(
fn ($entry) => \rosavox\helpers\render(
'docs-list-entry',
[
'link_open' => \rosavox\helpers\string_coin(
'?mode=edit&id={{id}}',
[
'id' => $entry['id'],
]
),
'link_read' => '#not_implemented',
'link_hear' => '#not_implemented',
'text' => $entry['value']['title'],
]
),
\rosavox\logic\docs_list()
)
),
'link_new' => '?mode=make',
]
)
);
break;
}
case 'make':
{
echo(
\rosavox\helpers\render(
'docs-edit',
[
'id' => '',
'title' => '',
'authors' => '',
'content' => '',
'reasoning' => '',
'link_back' => '?mode=list',
]
)
);
break;
}
case 'edit':
{
$doc = \rosavox\logic\docs_read($id);
echo(
\rosavox\helpers\render(
'docs-edit',
[
'id' => $id_encoded,
'title' => $doc['title'],
'authors' => \implode(', ', $doc['authors']),
'content' => $doc['content'],
'reasoning' => $doc['reasoning'],
'link_back' => '?mode=list',
]
)
);
break;
}
case 'save':
{
$doc = [
'title' => $_GET['title'],
'authors' => \explode(',', $_GET['authors']),
'content' => $_GET['content'],
'reasoning' => (empty($_GET['reasoning']) ? null : $_GET['reasoning']),
];
if ($id === null)
{
$id = \rosavox\logic\docs_create($doc);
}
else
{
\rosavox\logic\docs_update($id, $doc);
}
// nav('edit', ['id' => \rosavox\logic\docs_id_encode($id)]);
nav('list', []);
break;
}
default:
{
throw (new \Exception(\sprintf('invalid mode: %s', $mode)));
break;
}
}
?>