| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- <?php
- namespace Dcat\Admin\Controllers;
- use Dcat\Admin\Extension\Grid\BuildExtensionButton;
- use Dcat\Admin\Extension\Grid\ImportButton;
- use Dcat\Admin\Form;
- use Dcat\Admin\Grid;
- use Dcat\Admin\Layout\Content;
- use Dcat\Admin\Models\Repositories\Extension;
- use Dcat\Admin\Widgets\Box;
- use Dcat\Admin\Widgets\Table;
- use Dcat\Admin\Widgets\Terminal;
- use Illuminate\Routing\Controller;
- class ExtensionController extends Controller
- {
- use HasResourceActions;
- /**
- * Index interface.
- *
- * @param Content $content
- *
- * @return Content
- */
- public function index(Content $content)
- {
- $this->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("<span>admin:import <small>$extension</small></span>")
- ->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("<span>admin:extend <small>$name --namespace=$namespace</small></span>")
- ->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 "<div style='padding:10px 20px'>{$this->description}</div>";
- });
- $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 = "<b class='text-80'>$k</b>";
- $rows[$k] = $v;
- }
- $table = new Table([], $rows);
- return $table;
- };
- }
- /**
- * Make definitions.
- */
- protected function define()
- {
- $name = function ($v) {
- $url = $this->homepage;
- return "<a href='$url' target='_blank'>$v</a>";
- };
- $version = function ($v) {
- $this->version = $this->version ?: 'unknown';
- $style = in_array($this->version, ['dev-master', 'unknown']) ? 'default' : 'primary';
- return $this->version ? "<span class='label label-$style'>{$this->version}</span>" : '';
- };
- $authors = function ($v) {
- if (!$v) {
- return;
- }
- foreach ($v as &$item) {
- $item = "<span class='text-80 bold'>{$item['name']}</span> <<code>{$item['email']}</code>>";
- }
- return implode('<br/>', $v);
- };
- $imported = function ($v) {
- if (!$v) {
- $text = trans('admin.is_not_import');
- return "<label class='label label-default'>$text</label>";
- }
- return "<label class='label label-success'>{$this->imported_at}</label>";
- };
- Grid\Column::define('name', $name);
- Grid\Column::define('version', $version);
- Grid\Column::define('authors', $authors);
- Grid\Column::define('imported', $imported);
- }
- }
|