define(); return $content ->title(admin_trans_label('Extensions')) ->description(trans('admin.list')) ->body($this->grid()); } /** * @return \Illuminate\Http\JsonResponse */ public function import() { $extension = request('id'); if (! $extension) { return response()->json(['status' => false, 'messages' => 'Invalid extension hash.']); } $box = Box::make("admin:import $extension") ->content(Terminal::call('admin:import', ['extension' => $extension, '--force' => '1'])) ->style('default') ->collapsable() ->removable(); return response()->json(['status' => true, 'content' => $box->render()]); } /** * @return \Illuminate\Http\JsonResponse */ public function create() { $name = request('name'); $namespace = trim(request('namespace'), '\\'); $contents = "admin:extend $name --namespace=$namespace"; $terminal = Terminal::call('admin:extend', [ 'extension' => $name, '--namespace' => $namespace, ]); $box = Box::make($contents) ->content($terminal) ->style('default') ->collapsable() ->removable(); return response()->json(['status' => true, 'content' => $box->render()]); } /** * Make a grid builder. * * @return Grid */ protected function grid() { $grid = new Grid(new Extension()); $grid->number(); $grid->name; $grid->version; $grid->alias; $grid->description ->if(function () { return mb_strlen($this->description) > 14; }) ->limit(14) ->expand(function ($expand) { if (! $this->description) { return; } return "
{$this->description}
"; }); $grid->authors; $grid->enable->switch(); $grid->imported; $view = ucfirst(trans('admin.view')); $grid->config ->if(function () { return $this->config ? true : false; }) ->display($view) ->expand($this->getExpandHandler('config')) ->else() ->emptyString(); $grid->require ->display($view) ->expand($this->getExpandHandler()); $grid->require_dev ->display($view) ->expand($this->getExpandHandler('require_dev')); $grid->disablePagination(); $grid->disableCreateButton(); $grid->disableDeleteButton(); $grid->disableBatchDelete(); $grid->disableFilterButton(); $grid->disableFilter(); $grid->disableQuickEditButton(); $grid->disableEditButton(); $grid->disableDeleteButton(); $grid->disableViewButton(); $grid->actions(new ImportButton()); $grid->quickCreate(function (Grid\Tools\QuickCreate $create) { $create->text('package_name')->required(); $create->text('namespace') ->attribute('style', 'width:240px') ->required() ->default('Dcat\\\\Admin\\\\Extension\\\\Your name'); }); return $grid; } /** * Make a form builder. * * @return Form */ public function form() { $form = new Form(new Extension()); $form->text('package_name')->required(); $form->text('namespace')->required(); $form->hidden('enable'); $form->submitted(function () { }); return $form; } /** * @param string $key * * @return \Closure */ protected function getExpandHandler($key = 'require') { return function () use ($key) { if (! $this->{$key}) { return; } $rows = []; foreach ((array) $this->{$key} as $k => $v) { $k = "$k"; $rows[$k] = $v; } $table = new Table([], $rows); return $table; }; } /** * Make definitions. */ protected function define() { $name = function ($v) { $url = $this->homepage; return "$v"; }; $version = function ($v) { $this->version = $this->version ?: 'unknown'; $style = in_array($this->version, ['dev-master', 'unknown']) ? 'default' : 'primary'; return $this->version ? "{$this->version}" : ''; }; $authors = function ($v) { if (! $v) { return; } foreach ($v as &$item) { $item = "{$item['name']} <{$item['email']}>"; } return implode('
', $v); }; $imported = function ($v) { if (! $v) { $text = trans('admin.is_not_import'); return ""; } return $this->imported_at; }; Grid\Column::define('name', $name); Grid\Column::define('version', $version); Grid\Column::define('authors', $authors); Grid\Column::define('imported', $imported); } }