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);
}
}