define(); return $content ->header(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'), '\\'); $box = Box::make("admin:extend $name --namespace=$namespace") ->content(Terminal::call('admin:extend', ['extension' => $name, '--namespace' => $namespace])) ->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->disablePagination(); $grid->disableCreateButton(); $grid->disableQuickCreateButton(); $grid->disableDeleteButton(); $grid->disableBatchDelete(); $grid->disableFilterButton(); $grid->disableFilter(); $grid->disableQuickEditButton(); $grid->disableEditButton(); $grid->disableDeleteButton(); $grid->disableViewButton(); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->append(new ImportButton($this)); }); $grid->tools(function (Grid\Tools $tools) { $tools->append(new BuildExtensionButton()); }); $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() ->showEmpty(); $grid->require ->display($view) ->expand($this->getExpandHandler()); $grid->require_dev ->display($view) ->expand($this->getExpandHandler('require_dev')); return $grid; } /** * Make a form builder. * * @return Form */ public function form() { $form = new Form(new Extension()); $form->hidden('enable'); 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 ""; }; Grid\Column::define('name', $name); Grid\Column::define('version', $version); Grid\Column::define('authors', $authors); Grid\Column::define('imported', $imported); } }