From 222181aafa40c88ddc36981b7d895d7205f01e2a Mon Sep 17 00:00:00 2001 From: Abby Janke Date: Fri, 7 Jul 2017 09:57:10 -0700 Subject: [PATCH] Prettify model preview page Added small fix for DBAL to fix enum issue. run setFromDB and remove previously set columns. --- src/PanelTraits/AutoSet.php | 16 +++++++ src/app/Http/Controllers/CrudController.php | 19 ++++++++ .../views/columns/textarea.blade.php | 2 + src/resources/views/show.blade.php | 43 ++++++++++++++++--- 4 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 src/resources/views/columns/textarea.blade.php diff --git a/src/PanelTraits/AutoSet.php b/src/PanelTraits/AutoSet.php index f3310fef20..a12cb568b1 100644 --- a/src/PanelTraits/AutoSet.php +++ b/src/PanelTraits/AutoSet.php @@ -14,6 +14,7 @@ trait AutoSet */ public function setFromDb() { + $this->setDoctrineTypesMapping(); $this->getDbColumnTypes(); array_map(function ($field) { @@ -102,6 +103,9 @@ public function getFieldTypeFromDbColumnType($field) break; case 'text': + return 'textarea'; + break; + case 'mediumtext': case 'longtext': return 'textarea'; @@ -125,6 +129,18 @@ public function getFieldTypeFromDbColumnType($field) } } + // Fix for DBAL not supporting enum + public function setDoctrineTypesMapping() + { + $types = ['enum' => 'string']; + $platform = \DB::getDoctrineConnection()->getDatabasePlatform(); + foreach ($types as $type_key => $type_value) { + if (!$platform->hasDoctrineTypeMappingFor($type_key)) { + $platform->registerDoctrineTypeMapping($type_key, $type_value); + } + } + } + /** * Turn a database column name or PHP variable into a pretty label to be shown to the user. * diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 2d5f8bd238..07a4d875d0 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -198,11 +198,30 @@ public function show($id) { $this->crud->hasAccessOrFail('show'); + // set columns from db + $this->crud->setFromDb(); + + // cycle through old columns for removal + foreach($this->crud->columns as $old_id => $column) { + // replace any relationship columns + if(array_key_exists('model', $column)) { + $this->crud->columns[$column['name']] = $this->crud->columns[$old_id]; + } + // remove old numbered columns + if(is_integer($old_id)) { + unset($this->crud->columns[$old_id]); + } + + } + // get the info for that entry $this->data['entry'] = $this->crud->getEntry($id); $this->data['crud'] = $this->crud; $this->data['title'] = trans('backpack::crud.preview').' '.$this->crud->entity_name; + // remove preview button from stack:line + $this->crud->removeButton('preview'); + // load the view from /resources/views/vendor/backpack/crud/ if it exists, otherwise load the one in the package return view($this->crud->getShowView(), $this->data); } diff --git a/src/resources/views/columns/textarea.blade.php b/src/resources/views/columns/textarea.blade.php new file mode 100644 index 0000000000..0bf15f2205 --- /dev/null +++ b/src/resources/views/columns/textarea.blade.php @@ -0,0 +1,2 @@ +{{-- regular object attribute --}} +{!! $entry->{$column['name']} !!} diff --git a/src/resources/views/show.blade.php b/src/resources/views/show.blade.php index 8289fc6e30..f760a034ed 100644 --- a/src/resources/views/show.blade.php +++ b/src/resources/views/show.blade.php @@ -3,7 +3,7 @@ @section('content-header')

- {{ trans('backpack::crud.preview') }} {{ $crud->entity_name }} + {{ trans('backpack::crud.preview') }} {{ $crud->entity_name }}