- 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:
@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'
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
use App\Models\Product;
use App\Models\ProductType;
+use App\Templates\Products;
use Cubist\Backpack\app\Http\Controllers\CubistFrontController;
use Illuminate\Http\Request;
$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();
* @var array
*/
protected $middleware = [
+
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Cubist\Backpack\app\Middleware\VariantSelector::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Cubist\Backpack\app\Middleware\EmailObfuscate::class,
+ \Cubist\Backpack\app\Middleware\FrontControllerInit::class,
],
'api' => [
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;
'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']);
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) {
}
$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();
* 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;
$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();
\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];
}
}
</nav>
- <pre style="display:none;">
- @php( var_dump(CubistMenu::getNavigation()->getHrefByName('signin')) )
- </pre>
-
<ul class="account-header relative">
<li class="{{ Route::currentRouteName() === "client" ? "active" : '' }}">
<a href="{{ Auth::guard('web-clients')->check() ? '#' : CubistMenu::getNavigation()->getHrefByName('signin') }}"