header(trans('admin.permissions')) ->description(trans('admin.list')) ->body($this->grid()->render()); } /** * Show interface. * * @param mixed $id * @param Content $content * * @return Content */ public function show($id, Content $content) { return $content ->header(trans('admin.permissions')) ->description(trans('admin.detail')) ->body($this->detail($id)); } /** * Edit interface. * * @param $id * @param Content $content * * @return Content */ public function edit($id, Content $content) { return $content ->header(trans('admin.permissions')) ->description(trans('admin.edit')) ->body($this->form()->edit($id)); } /** * Create interface. * * @param Content $content * * @return Content */ public function create(Content $content) { return $content ->header(trans('admin.permissions')) ->description(trans('admin.create')) ->body($this->form()); } /** * Make a grid builder. * * @return Grid */ protected function grid() { $permissionModel = config('admin.database.permissions_model'); $grid = new Grid(new $permissionModel()); $grid->id('ID')->sortable(); $grid->slug(trans('admin.slug')); $grid->name(trans('admin.name')); $grid->http_path(trans('admin.route'))->display(function ($path) { return collect(explode("\n", $path))->map(function ($path) { $method = $this->http_method ?: ['ANY']; if (Str::contains($path, ':')) { list($method, $path) = explode(':', $path); $method = explode(',', $method); } $method = collect($method)->map(function ($name) { return strtoupper($name); })->map(function ($name) { return "{$name}"; })->implode(' '); if (!empty(config('admin.route.prefix'))) { $path = '/'.trim(config('admin.route.prefix'), '/').$path; } return "
$method$path
"; })->implode(''); }); $grid->created_at(trans('admin.created_at')); $grid->updated_at(trans('admin.updated_at')); $grid->tools(function (Grid\Tools $tools) { $tools->batch(function (Grid\Tools\BatchActions $actions) { $actions->disableDelete(); }); }); return $grid; } /** * Make a show builder. * * @param mixed $id * * @return Show */ protected function detail($id) { $permissionModel = config('admin.database.permissions_model'); $show = new Show($permissionModel::findOrFail($id)); $show->id('ID'); $show->slug(trans('admin.slug')); $show->name(trans('admin.name')); $show->http_path(trans('admin.route'))->as(function ($path) { return collect(explode("\r\n", $path))->map(function ($path) { $method = $this->http_method ?: ['ANY']; if (Str::contains($path, ':')) { list($method, $path) = explode(':', $path); $method = explode(',', $method); } $method = collect($method)->map(function ($name) { return strtoupper($name); })->map(function ($name) { return "{$name}"; })->implode(' '); if (!empty(config('admin.route.prefix'))) { $path = '/'.trim(config('admin.route.prefix'), '/').$path; } return "
$method$path
"; })->implode(''); }); $show->created_at(trans('admin.created_at')); $show->updated_at(trans('admin.updated_at')); return $show; } /** * Make a form builder. * * @return Form */ public function form() { $permissionModel = config('admin.database.permissions_model'); $form = new Form(new $permissionModel()); $form->display('id', 'ID'); $form->text('slug', trans('admin.slug'))->rules('required'); $form->text('name', trans('admin.name'))->rules('required'); $form->multipleSelect('http_method', trans('admin.http.method')) ->options($this->getHttpMethodsOptions()) ->help(trans('admin.all_methods_if_empty')); $form->textarea('http_path', trans('admin.http.path')); $form->display('created_at', trans('admin.created_at')); $form->display('updated_at', trans('admin.updated_at')); return $form; } /** * Get options of HTTP methods select field. * * @return array */ protected function getHttpMethodsOptions() { $permissionModel = config('admin.database.permissions_model'); return array_combine($permissionModel::$httpMethods, $permissionModel::$httpMethods); } }