header(trans('admin.menu'))
->description(trans('admin.list'))
->row(function (Row $row) {
$row->column(7, $this->treeView()->render());
$row->column(5, function (Column $column) {
$form = new \Dcat\Admin\Widgets\Form();
$form->action(admin_base_path('auth/menu'));
$menuModel = config('admin.database.menu_model');
$permissionModel = config('admin.database.permissions_model');
$roleModel = config('admin.database.roles_model');
$form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions());
$form->text('title', trans('admin.title'))->required();
$form->icon('icon', trans('admin.icon'))->default('fa-bars')->help($this->iconHelp());
$form->text('uri', trans('admin.uri'));
$form->multipleSelect('roles', trans('admin.roles'))
->options($roleModel::all()->pluck('name', 'id'));
if ($menuModel::withPermission()) {
$form->multipleSelect('permissions', trans('admin.permission'))->options($permissionModel::selectOptions());
}
$form->hidden('_token')->default(csrf_token());
$form->setWidth(9, 2);
$column->append(Box::make(trans('admin.new'), $form)->style('success'));
});
});
}
/**
* @return \Dcat\Admin\Tree
*/
protected function treeView()
{
$menuModel = config('admin.database.menu_model');
$tree = new Tree(new $menuModel);
$tree->disableCreateButton();
$tree->disableQuickCreateButton();
$tree->branch(function ($branch) {
$payload = " {$branch['title']}";
if (!isset($branch['children'])) {
if (url()->isValidUrl($branch['uri'])) {
$uri = $branch['uri'];
} else {
$uri = admin_base_path($branch['uri']);
}
$payload .= " $uri";
}
return $payload;
});
return $tree;
}
/**
* Edit interface.
*
* @param string $id
* @param Content $content
*
* @return Content
*/
public function edit($id, Content $content)
{
return $content
->header(trans('admin.menu'))
->description(trans('admin.edit'))
->row($this->form()->edit($id));
}
/**
* Make a form builder.
*
* @return Form
*/
public function form()
{
$menuModel = config('admin.database.menu_model');
$permissionModel = config('admin.database.permissions_model');
$roleModel = config('admin.database.roles_model');
$form = new Form(new Menu());
$form->tools(function (Form\Tools $tools) {
$tools->disableView();
});
$form->display('id', 'ID');
$form->select('parent_id', trans('admin.parent_id'))->options($menuModel::selectOptions());
$form->text('title', trans('admin.title'))->required();
$form->icon('icon', trans('admin.icon'))->default('fa-bars')->help($this->iconHelp());
$form->text('uri', trans('admin.uri'));
$form->multipleSelect('roles', trans('admin.roles'))
->options($roleModel::all()->pluck('name', 'id'))
->customFormat(function ($v) {
return array_column($v, 'id');
});
if ($menuModel::withPermission()) {
$form->tree('permissions', trans('admin.permission'))
->nodes((new $permissionModel)->allNodes())
->customFormat(function ($v) {
if (!$v) {
return [];
}
return array_column($v, 'id');
});
}
$form->display('created_at', trans('admin.created_at'));
$form->display('updated_at', trans('admin.updated_at'));
return $form;
}
/**
* Help message for icon field.
*
* @return string
*/
protected function iconHelp()
{
return 'For more icons please see http://fontawesome.io/icons/';
}
}