From 14697aaedf185fceeb88d0328da94b583f6d46c0 Mon Sep 17 00:00:00 2001 From: Diatrex Date: Mon, 2 Dec 2019 13:30:17 +0300 Subject: [PATCH] #162 update gives an error --- .../cats-module/resources/lang/en/section.php | 2 +- .../cats-module/resources/lang/en/view.php | 5 ++ .../Category/Table/CategoryTableBuilder.php | 8 ++- .../src/CatsModuleServiceProvider.php | 1 + .../Controller/Admin/CategoryController.php | 57 ++++++++++++++++--- 5 files changed, 62 insertions(+), 11 deletions(-) create mode 100644 addons/default/visiosoft/cats-module/resources/lang/en/view.php diff --git a/addons/default/visiosoft/cats-module/resources/lang/en/section.php b/addons/default/visiosoft/cats-module/resources/lang/en/section.php index 61e315f84..702c3a147 100644 --- a/addons/default/visiosoft/cats-module/resources/lang/en/section.php +++ b/addons/default/visiosoft/cats-module/resources/lang/en/section.php @@ -5,6 +5,6 @@ return [ 'title' => 'Category', ], 'placeholderforsearch' => [ - 'title' => 'Placeholderforsearch', + 'title' => 'Placeholder', ], ]; diff --git a/addons/default/visiosoft/cats-module/resources/lang/en/view.php b/addons/default/visiosoft/cats-module/resources/lang/en/view.php new file mode 100644 index 000000000..cebdced2c --- /dev/null +++ b/addons/default/visiosoft/cats-module/resources/lang/en/view.php @@ -0,0 +1,5 @@ + 'Clean Subcategories', +]; diff --git a/addons/default/visiosoft/cats-module/src/Category/Table/CategoryTableBuilder.php b/addons/default/visiosoft/cats-module/src/Category/Table/CategoryTableBuilder.php index 8d38cc343..d26355d27 100644 --- a/addons/default/visiosoft/cats-module/src/Category/Table/CategoryTableBuilder.php +++ b/addons/default/visiosoft/cats-module/src/Category/Table/CategoryTableBuilder.php @@ -10,7 +10,13 @@ class CategoryTableBuilder extends TableBuilder * * @var array|string */ - protected $views = []; + protected $views = [ + 'all', + 'trash', + 'clean_subcategories' => [ + 'href' => '/admin/cats/clean_subcats', + ], + ]; /** * The table filters. diff --git a/addons/default/visiosoft/cats-module/src/CatsModuleServiceProvider.php b/addons/default/visiosoft/cats-module/src/CatsModuleServiceProvider.php index aaa63322a..659543e1e 100644 --- a/addons/default/visiosoft/cats-module/src/CatsModuleServiceProvider.php +++ b/addons/default/visiosoft/cats-module/src/CatsModuleServiceProvider.php @@ -50,6 +50,7 @@ class CatsModuleServiceProvider extends AddonServiceProvider * @type array|null */ protected $routes = [ + 'admin/cats/clean_subcats' => 'Visiosoft\CatsModule\Http\Controller\Admin\CategoryController@cleanSubcats', 'admin/cats/placeholderforsearch' => 'Visiosoft\CatsModule\Http\Controller\Admin\PlaceholderforsearchController@index', 'admin/cats/placeholderforsearch/create' => 'Visiosoft\CatsModule\Http\Controller\Admin\PlaceholderforsearchController@create', 'admin/cats/placeholderforsearch/edit/{id}' => 'Visiosoft\CatsModule\Http\Controller\Admin\PlaceholderforsearchController@edit', diff --git a/addons/default/visiosoft/cats-module/src/Http/Controller/Admin/CategoryController.php b/addons/default/visiosoft/cats-module/src/Http/Controller/Admin/CategoryController.php index a0c4ebef5..e990d154e 100644 --- a/addons/default/visiosoft/cats-module/src/Http/Controller/Admin/CategoryController.php +++ b/addons/default/visiosoft/cats-module/src/Http/Controller/Admin/CategoryController.php @@ -1,10 +1,8 @@ categoryRepository = $categoryRepository; $this->categoryEntryTranslationsModel = $categoryEntryTranslationsModel; $this->str = $str; + parent::__construct(); } public function index(CategoryTableBuilder $table, Request $request) @@ -73,20 +71,21 @@ class CategoryController extends AdminController return $this->redirect->back(); } - $locale = DB::table('cats_category_translations')->select('locale')->distinct()->get()->toArray(); + $locale = $this->getRequestLang($all); + $translatable = array(); foreach ($all as $key => $value) { foreach ($locale as $lang) { - if ($this->endsWith($key, "_$lang->locale") && !in_array(substr($key, 0, -3), $translatable)) { + if ($this->endsWith($key, "_$lang") && !in_array(substr($key, 0, -3), $translatable)) { $translatable[] = substr($key, 0, -3); } } } $translatableEntries = array(); foreach ($locale as $lang) { - $translatableEntries[$lang->locale] = array(); + $translatableEntries[$lang] = array(); foreach ($translatable as $translatableEntry) { - $translatableEntries[$lang->locale][$translatableEntry] = $all[$translatableEntry . '_' . $lang->locale]; + $translatableEntries[$lang][$translatableEntry] = $all[$translatableEntry . '_' . $lang]; } } @@ -99,7 +98,7 @@ class CategoryController extends AdminController foreach ($multiCat as $cat) { $secondArray = array(); foreach ($locale as $lang) { - if ($key === $lang->locale) { + if ($key === $lang) { $secondArray[$key]['name'] = trim($cat); } } @@ -109,7 +108,7 @@ class CategoryController extends AdminController } } if (empty($isMultiCat)) { - $this->categoryRepository->create(array_merge($translatableEntries, [ + $this->categoryRepository->create(array_merge($translatableEntries, [ 'slug' => $all['slug'], 'parent_category' => $all['parent_category'] === "" ? null : $all['parent_category'], 'icon' => $all['icon'], @@ -172,6 +171,30 @@ class CategoryController extends AdminController return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0; } + public function getRequestLang($request) { + $locale = array(); + foreach ($request as $key => $field) { + $locale[] = substr($key, 0, -2); + } + $notTrans = array(); + $trans = array(); + foreach ($locale as $translatable) { + if (!in_array($translatable, $notTrans)) { + $notTrans[] = $translatable; + } else { + $trans[] = $translatable; + } + } + $locale = array(); + foreach ($request as $key => $field) { + foreach (array_unique($trans) as $entry) { + if (strpos($key, $entry) === 0) { + $locale[] = substr($key, -2); + } + } + } + return $locale; + } public function edit(CategoryFormBuilder $form, Request $request, $id) { @@ -220,5 +243,21 @@ class CategoryController extends AdminController return redirect('admin/cats?cat=' . $request->parent)->with('success', ['Category and related sub-categories deleted successfully.']); } + public function cleanSubcats() + { + $cats = $this->categoryRepository->all(); + $deletedCatsCount = 0; + foreach ($cats as $cat) { + $parentCatId = $cat->parent_category_id; + $parentCat = $this->categoryRepository->find($parentCatId); + if (is_null($parentCat) && !is_null($parentCatId)) { + $this->categoryEntryTranslationsModel->where('entry_id', $cat->id)->delete(); + $this->categoryRepository->DeleteCategories($cat->id); + $deletedCatsCount++; + } + } + return redirect('admin/cats')->with('success', [$deletedCatsCount . ' categories has been deleted.']); + } + }