From 39a07f0bd0ee872aab925be6cff295385e5ce1a3 Mon Sep 17 00:00:00 2001 From: Prashant Singh Date: Fri, 16 Aug 2019 17:36:47 +0530 Subject: [PATCH] Structural changes in CMS pages --- .../Admin/src/DataGrids/CMSPageDataGrid.php | 34 ++++++- .../Admin/src/Resources/lang/en/app.php | 2 + .../src/Resources/views/cms/create.blade.php | 73 ++++++++------- .../src/Resources/views/cms/edit.blade.php | 50 +++-------- ...19_07_30_153530_create_cms_pages_table.php | 2 +- .../Http/Controllers/Admin/PageController.php | 89 +++++++++++-------- .../CMS/src/Repositories/CMSRepository.php | 11 +-- .../src/Http/Controllers/HomeController.php | 4 +- 8 files changed, 137 insertions(+), 128 deletions(-) diff --git a/packages/Webkul/Admin/src/DataGrids/CMSPageDataGrid.php b/packages/Webkul/Admin/src/DataGrids/CMSPageDataGrid.php index b27f84282..896f9331b 100644 --- a/packages/Webkul/Admin/src/DataGrids/CMSPageDataGrid.php +++ b/packages/Webkul/Admin/src/DataGrids/CMSPageDataGrid.php @@ -19,13 +19,17 @@ class CMSPageDataGrid extends DataGrid public function prepareQueryBuilder() { - $queryBuilder = DB::table('cms_pages')->select('id', 'url_key', 'page_title'); + $queryBuilder = DB::table('cms_pages')->select('id', 'url_key', 'page_title', 'channel_id', 'locale_id'); $this->setQueryBuilder($queryBuilder); } public function addColumns() { + $channels = app('Webkul\Core\Repositories\ChannelRepository'); + + $locales = app('Webkul\Core\Repositories\LocaleRepository'); + $this->addColumn([ 'index' => 'id', 'label' => trans('admin::app.datagrid.id'), @@ -52,6 +56,34 @@ class CMSPageDataGrid extends DataGrid 'sortable' => true, 'filterable' => true ]); + + $this->addColumn([ + 'index' => 'locale_id', + 'label' => trans('admin::app.cms.pages.locale'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + 'wrapper' => function($row) use($channels) { + $channelCode = $channels->find($row->channel_id)->name; + + return $row->channel_id.' ('. $channelCode. ')'; + } + ]); + + $this->addColumn([ + 'index' => 'channel_id', + 'label' => trans('admin::app.cms.pages.channel'), + 'type' => 'number', + 'searchable' => false, + 'sortable' => true, + 'filterable' => true, + 'wrapper' => function($row) use($locales) { + $localeCode = $locales->find($row->locale_id)->code; + + return $row->locale_id.' ('. $localeCode. ')'; + } + ]); } public function prepareActions() { diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index fd879b7f5..db16f2c1a 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -987,6 +987,8 @@ return [ 'add-title' => 'Add Page', 'content' => 'Content', 'url-key' => 'URL Key', + 'channel' => 'Channel', + 'locale' => 'Locale', 'create-btn-title' => 'Add Page', 'edit-title' => 'Edit Page', 'edit-btn-title' => 'Save Page', diff --git a/packages/Webkul/Admin/src/Resources/views/cms/create.blade.php b/packages/Webkul/Admin/src/Resources/views/cms/create.blade.php index 9542e2467..129e44c3c 100644 --- a/packages/Webkul/Admin/src/Resources/views/cms/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/cms/create.blade.php @@ -15,36 +15,6 @@ {{ __('admin::app.cms.pages.pages') }} - -
- -
- -
- -
@@ -59,6 +29,14 @@
@csrf() +
+ + + + + @{{ errors.first('page_title') }} +
+
@@ -67,6 +45,33 @@ @{{ errors.first('url_key') }}
+ @inject('channels', 'Webkul\Core\Repositories\ChannelRepository') + @inject('locales', 'Webkul\Core\Repositories\LocaleRepository') + +
+ + + + + @{{ errors.first('channels[]') }} +
+ +
+ + + + + @{{ errors.first('locales[]') }} +
+
@@ -85,14 +90,6 @@ @{{ errors.first('html_content') }}
-
- - - - - @{{ errors.first('page_title') }} -
-
diff --git a/packages/Webkul/Admin/src/Resources/views/cms/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/cms/edit.blade.php index ac837c951..5f6a312fc 100644 --- a/packages/Webkul/Admin/src/Resources/views/cms/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/cms/edit.blade.php @@ -15,36 +15,6 @@ {{ __('admin::app.cms.pages.pages') }} - -
- -
- -
- -
@@ -63,10 +33,18 @@
@csrf() +
+ + + + + @{{ errors.first('page_title') }} +
+
- + @{{ errors.first('url_key') }}
@@ -89,14 +67,6 @@ @{{ errors.first('html_content') }}
-
- - - - - @{{ errors.first('page_title') }} -
-
@@ -134,7 +104,7 @@ $('#preview').on('click', function(e) { var form = $('#page-form').serialize(); // var url = '{{ route('admin.cms.preview', $page->id) }}' + '?' + form; - var url = '{{ route('admin.cms.preview', $page->url_key) }}'; + var url = '{{ route('admin.cms.preview', $page->id) }}'; window.open(url, '_blank').focus(); diff --git a/packages/Webkul/CMS/src/Database/Migrations/2019_07_30_153530_create_cms_pages_table.php b/packages/Webkul/CMS/src/Database/Migrations/2019_07_30_153530_create_cms_pages_table.php index f7cba2dcf..1e9d3ef79 100644 --- a/packages/Webkul/CMS/src/Database/Migrations/2019_07_30_153530_create_cms_pages_table.php +++ b/packages/Webkul/CMS/src/Database/Migrations/2019_07_30_153530_create_cms_pages_table.php @@ -15,7 +15,7 @@ class CreateCmsPagesTable extends Migration { Schema::create('cms_pages', function (Blueprint $table) { $table->increments('id'); - $table->string('url_key')->unique(); + $table->string('url_key')->nullable(); $table->longtext('html_content'); $table->string('page_title'); $table->string('meta_title'); diff --git a/packages/Webkul/CMS/src/Http/Controllers/Admin/PageController.php b/packages/Webkul/CMS/src/Http/Controllers/Admin/PageController.php index 070a7d26d..2899c996b 100644 --- a/packages/Webkul/CMS/src/Http/Controllers/Admin/PageController.php +++ b/packages/Webkul/CMS/src/Http/Controllers/Admin/PageController.php @@ -86,8 +86,8 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; public function store() { $this->validate(request(), [ - 'channel' => 'required|string', - 'locale' => 'required|string', + 'channels' => 'required', + 'locales' => 'required', 'url_key' => 'required|unique:cms_pages,url_key', 'html_content' => 'required|string', 'page_title' => 'required|string', @@ -98,15 +98,25 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; $data = request()->all(); - $data['content']['html'] = $data['html_content']; - $data['content']['page_title'] = $data['page_title']; - $data['content']['meta_keywords'] = $data['meta_keywords']; - $data['content']['meta_title'] = $data['meta_title']; - $data['content']['meta_description'] = $data['meta_description']; + foreach ($data['channels'] as $channel) { + foreach ($data['locales'] as $locale) { + $data['channel_id'] = $channel; - $data['content'] = json_encode($data['content']); + $data['locale_id'] = $locale; - $result = $this->cms->create($data); + $data['content']['html'] = $data['html_content']; + $data['content']['page_title'] = $data['page_title']; + $data['content']['meta_keywords'] = $data['meta_keywords']; + $data['content']['meta_title'] = $data['meta_title']; + $data['content']['meta_description'] = $data['meta_description']; + + $data['content'] = json_encode($data['content']); + + $result = $this->cms->create($data); + + unset($data['content']); + } + } if ($result) { session()->flash('success', trans('admin::app.cms.pages.create-success')); @@ -126,6 +136,34 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; { $page = $this->cms->findOrFail($id); + if (request()->has('channel') && request()->has('locale')) { + $channel = $this->channel->findOneWhere([ + 'code' => request()->input('channel') + ]); + + $locale = $this->locale->findOneWhere([ + 'code' => request()->input('locale') + ]); + + $page = $this->cms->findOneWhere([ + 'channel_id' => $channel->id, + 'locale_id' => $locale->id, + 'url_key' => $page->url_key + ]); + + if (! $page) { + $page = $this->cms->create([ + 'url_key' => str_random(8), + 'channel' => $channel->code, + 'locale' => $locale->code + ]); + + return redirect()->route('admin.cms.edit', $page->id); + } + } else { + $page = $this->cms->findOrFail($id); + } + return view($this->_config['view'])->with('page', $page); } @@ -138,25 +176,21 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; { $page = $this->cms->findOrFail($id); + $data = request()->all(); + $this->validate(request(), [ - 'channel' => 'required|string', - 'locale' => 'required|string', - 'url_key' => 'required|unique:cms_pages,url_key,'.$id, - 'html_content' => 'required|string', 'page_title' => 'required|string', + 'html_content' => 'required|string', 'meta_title' => 'required|string', 'meta_description' => 'string', 'meta_keywords' => 'required|string' ]); - $data = request()->all(); - $data['content']['html'] = $data['html_content']; $data['content']['page_title'] = $data['page_title']; $data['content']['meta_keywords'] = $data['meta_keywords']; $data['content']['meta_title'] = $data['meta_title']; $data['content']['meta_description'] = $data['meta_description']; - $data['content'] = json_encode($data['content']); $result = $this->cms->update($data, $id); @@ -166,7 +200,6 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; } else { session()->flash('success', trans('admin::app.cms.pages.update-failure')); } - return redirect()->route($this->_config['redirect']); } @@ -175,11 +208,9 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; * * @return mixed */ - public function preview($urlKey) + public function preview($id) { - $page = $this->cms->findOneWhere([ - 'url_key' => $urlKey - ]); + $page = $this->cms->findOrFail($id); return view('shop::cms.page')->with('page', $page); } @@ -203,20 +234,4 @@ use Webkul\Core\Repositories\LocaleRepository as Locale; return response()->json(['message' => false], 200); } } - - /** - * To extract the page content and load it in the respective view file\ - * - * @return view - */ - public function presenter($slug) - { - $page = $this->cms->findOneWhere([ - 'url_key' => $slug - ]); - - $layout = $page->layout; - - return view('shop::cms.page')->with('data', $page); - } } \ No newline at end of file diff --git a/packages/Webkul/CMS/src/Repositories/CMSRepository.php b/packages/Webkul/CMS/src/Repositories/CMSRepository.php index 476f0909b..c3b3a84da 100644 --- a/packages/Webkul/CMS/src/Repositories/CMSRepository.php +++ b/packages/Webkul/CMS/src/Repositories/CMSRepository.php @@ -46,19 +46,12 @@ class CMSRepository extends Repository public function create(array $data) { - $channel = $this->channel->findOneByField('code', $data['channel']); - - $locale = $this->locale->findOneByField('code', $data['locale']); - - $data['channel_id'] = $channel->id; - $data['locale_id'] = $locale->id; - $result = $this->model->create($data); if ($result) { - return true; + return $result; } else { - return false; + return $result; } } } \ No newline at end of file diff --git a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php index 4f8e149a1..9fb1d7ec6 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php @@ -29,8 +29,8 @@ use Webkul\Core\Repositories\SliderRepository; */ public function index() { - $currentChannel = core()->getCurrentChannel(); - $sliderData = $this->sliderRepository->findByField('channel_id', $currentChannel->id)->toArray(); + $currentChannel = core()->getCurrentChannel()->id; + $sliderData = $this->sliderRepository->findByField('channel_id', $currentChannel)->toArray(); return view($this->_config['view'], compact('sliderData')); }