From 6a6b2d062a4b80d1867ef1267237ccb5cf72764b Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 23 Oct 2024 18:57:49 +0200 Subject: [PATCH] wip #7118 @14 --- .docker/dev/docker-compose.yml | 24 +++++++-------- .docker/dev/terminal.bat | 2 +- .docker/dev/update | 3 +- app/Http/Controllers/ProductController.php | 6 ++-- app/Http/Kernel.php | 2 ++ app/Models/Product.php | 15 ++++++---- app/Templates/Category.php | 4 +-- app/Templates/Products.php | 35 +++++++++++++++------- resources/views/partials/header.blade.php | 4 --- 9 files changed, 55 insertions(+), 40 deletions(-) diff --git a/.docker/dev/docker-compose.yml b/.docker/dev/docker-compose.yml index b93fdb8..931089b 100644 --- a/.docker/dev/docker-compose.yml +++ b/.docker/dev/docker-compose.yml @@ -107,18 +107,18 @@ services: - pmi-dev restart: unless-stopped -# elasticsearch: -# container_name: pmi-dev-elasticsearch -# build: './images/elasticsearch' -# volumes: -# - ./esdata:/usr/share/elasticsearch/data -# environment: -# - "ES_JAVA_OPTS=-Xms512m -Xmx512m" -# - discovery.type=single-node -# - xpack.security.enabled=false -# networks: -# - pmi-dev -# restart: unless-stopped + elasticsearch: + container_name: pmi-dev-elasticsearch + build: './images/elasticsearch' + volumes: + - ./esdata:/usr/share/elasticsearch/data + environment: + - "ES_JAVA_OPTS=-Xms512m -Xmx512m" + - discovery.type=single-node + - xpack.security.enabled=false + networks: + - pmi-dev + restart: unless-stopped networks: pmi-dev: diff --git a/.docker/dev/terminal.bat b/.docker/dev/terminal.bat index 972d0be..57b33dd 100644 --- a/.docker/dev/terminal.bat +++ b/.docker/dev/terminal.bat @@ -1,3 +1,3 @@ @echo off cls -ssh -t root@godzilla.cubedesigners.com 'docker exec -it -u pmi-dev pmi-dev /bin/bash' +ssh -t root@godzilla.cubedesigners.com 'chown root:root /docker/pmi-dev/config/sudoers;docker exec -it -u pmi-dev pmi-dev /bin/bash' diff --git a/.docker/dev/update b/.docker/dev/update index 44a5e53..a2f2282 100644 --- a/.docker/dev/update +++ b/.docker/dev/update @@ -13,5 +13,6 @@ chmod -R 777 ./redis docker network create pmi COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose pull COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker compose build -docker compose down +docker compose down -v +rm ./database/data/tc.log docker compose up -d diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index 3527e3a..f292388 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers; use App\Models\Product; use App\Models\ProductType; +use App\Templates\Products; use Cubist\Backpack\app\Http\Controllers\CubistFrontController; use Illuminate\Http\Request; @@ -21,11 +22,8 @@ class ProductController extends CubistFrontController $this->data['title'] = $productType->name; $this->data['page'] = $this->data['product_type'] = $productType->getPageData(); - $products = Product::with('media') // Eager load media to avoid N+1 query problem - ->whereVariant() + $products = Products::getProductsEloquent()->with('media') // Eager load media to avoid N+1 query problem ->where('product_type', $id) - ->where('online', 1) - ->where('public', 1) ->orderBy('reference') ->get(); diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index c08ad9d..5c0fcb3 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -14,6 +14,7 @@ class Kernel extends HttpKernel * @var array */ protected $middleware = [ + \App\Http\Middleware\CheckForMaintenanceMode::class, \Cubist\Backpack\app\Middleware\VariantSelector::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, @@ -42,6 +43,7 @@ class Kernel extends HttpKernel \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, \Cubist\Backpack\app\Middleware\EmailObfuscate::class, + \Cubist\Backpack\app\Middleware\FrontControllerInit::class, ], 'api' => [ diff --git a/app/Models/Product.php b/app/Models/Product.php index 090d3e7..bc29048 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -3,6 +3,8 @@ namespace App\Models; use App\Http\Controllers\Admin\ProductBaseController; +use App\Templates\Products; +use Cubist\Backpack\app\Magic\Fields\SelectFromArray; use Cubist\Backpack\app\Magic\Menu\Menu; use Cubist\Backpack\app\Magic\Models\CubistMagicPageModel; use Cubist\Backpack\app\Magic\Util; @@ -82,15 +84,17 @@ class Product extends CubistMagicPageModel 'column' => true, 'tab' => 'Spécifications']); - $this->addField(['name' => 'online', - 'type' => 'Checkbox', - 'label' => 'En ligne', + $this->addField(['name' => 'status', + 'type' => SelectFromArray::class, + 'label' => 'Status', + 'options' => ['0' => 'Hors ligne', '1' => 'Publié'], 'column' => true, + 'allows_null' => false, 'tab' => 'Informations génerales']); $this->addField(['name' => 'public', 'type' => 'Checkbox', - 'label' => 'Publique', + 'label' => 'Affiché dans les listing produits', 'column' => true, 'tab' => 'Informations génerales']); @@ -604,7 +608,8 @@ class Product extends CubistMagicPageModel return $res; } - $raw_products = Product::whereVariant()->where('product_type', $product_type)->where('online', 1)->where('public', 1)->get(); + + $raw_products = Products::getProductsEloquent()->where('product_type', $product_type)->get(); $products = []; $allids = []; foreach ($raw_products as $idx => $raw_product) { diff --git a/app/Templates/Category.php b/app/Templates/Category.php index 21ddbcd..947feab 100644 --- a/app/Templates/Category.php +++ b/app/Templates/Category.php @@ -62,10 +62,8 @@ class Category extends Base } $d['product_type'] = $productType->getPageData(); - $d['products'] = Product::whereVariant() + $d['products'] = Products::getProductsEloquent() ->where('product_type', $cat) - ->where('online', 1) - ->where('public', 1) ->orderBy('reference') ->get(); diff --git a/app/Templates/Products.php b/app/Templates/Products.php index f9130fa..e1cf42b 100644 --- a/app/Templates/Products.php +++ b/app/Templates/Products.php @@ -12,6 +12,7 @@ use Cubist\Backpack\app\Magic\Menu\PageItem; * the Category template did this, but it was very inefficient and hard to * debug with some products being missed...) */ + class Products extends Base { protected $_virtual = true; @@ -33,7 +34,7 @@ class Products extends Base $root = $menu->getRoot(); \Barryvdh\Debugbar\Facade::startMeasure('set products nav'); - $products = self::_getProducts($menu->getVariant(), $menu->getLocale()); + $products = self::_getProducts($menu->getVariant(), $menu->getLocale(), backpack_user() !== null,true); $root = $menu->getRoot(); @@ -63,23 +64,37 @@ class Products extends Base \Barryvdh\Debugbar\Facade::stopMeasure('set products nav'); } + + public static function getProductsEloquent($includePrivate = false, $includeOffline = null, $variant = null) + { + $res = Product::whereVariant($variant); + if (null === $includeOffline) { + $includeOffline = backpack_user() !== null; + } + + if (!$includeOffline) { + $res->where('status', 1); + } + if (!$includePrivate) { + $res->where('public', 1); + } + return $res; + } + /** * @param $variant * @param $locale * @return Product[] */ - public static function _getProducts($variant, $locale) + public static function _getProducts($variant, $locale, $includeOffline = false, $includePrivate = false) { - if (!isset(self::$_products[$variant])) { - self::$_products[$variant] = []; - } - if (!isset(self::$_products[$variant][$locale])) { - self::$_products[$variant][$locale] = Product::whereVariant($variant) - ->where('online', 1) - ->where('public', 1) + $key = $variant . '_' . $locale . '_' . $includeOffline . '_' . $includePrivate; + + if (!isset(self::$_products[$key])) { + self::$_products[$key] = self::getProductsEloquent($includePrivate, $includeOffline, $variant) ->get(); } - return self::$_products[$variant][$locale]; + return self::$_products[$key]; } } diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index d1bba2b..dbbc8f4 100644 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -31,10 +31,6 @@ -
-            @php( var_dump(CubistMenu::getNavigation()->getHrefByName('signin')) )
-        
-