Merge branch 'trunk'

This commit is contained in:
Noah Lancien 2024-10-30 16:19:51 +01:00
commit 73e2d6cfe6
2 changed files with 41 additions and 12 deletions

View file

@ -122,37 +122,43 @@ class ProductController extends Controller
*/
public function getSiblingModels(Product $productModel): array
{
$filter = Cache::get('productsFilter');
$cleanedFilter = $this->cleanSubSubFilter($filter);
/** @var string $slug */
$slug = (Cache::get('productsFilter'))
? (((is_null($productModel->{Cache::get('productsFilter')}))
? $productModel->{"sub" . Cache::get('productsFilter')}->{Cache::get('productsFilter')}
: $productModel->{Cache::get('productsFilter')})->slug)
$slug = $filter
? ((is_null($productModel->{$filter})
? $productModel->{"sub" . $this->cleanSubSubFilter($filter)}->{$this->cleanSubSubFilter($filter)} ?? null
: $productModel->{$filter})->slug ?? "")
: "";
// FIXME: the previous element are added on 30/10/24 to avoid error when productFilters was set on "submeat" for example and user access to product which not have submeat relation -> "Attempt to read property 'sub***' on null"
// this fix will just avoid the error, but in this case, product.show have no previous or next product.
/** @var \Illuminate\Support\Collection $productModelsList */
$productModelsList = Product::query()
->with('range', 'subrange', 'meat', 'submeat')
->when(in_array(Cache::get('productsFilter'), ['range', 'meat']), function (Builder $q) use ($slug) {
->when(in_array($filter, ['range', 'meat']), function (Builder $q) use ($slug, $filter) {
$q->where('published', true)
->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) {
->whereHas($filter, function (Builder $q) use ($slug, $filter) {
$q->where('published', true)->where('slug', $slug);
})
->orWhereHas('sub' . Cache::get('productsFilter'), function (Builder $q) use ($slug) {
->orWhereHas('sub' . $filter, function (Builder $q) use ($slug, $filter) {
$q->where('published', true)
->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) {
->whereHas($filter, function (Builder $q) use ($slug) {
$q->where('published', true)->where('slug', $slug);
});
});
})
->when(in_array(Cache::get('productsFilter'), ['subrange', 'submeat']), function (Builder $q) use ($slug) {
->when(in_array($filter, ['subrange', 'submeat']), function (Builder $q) use ($slug, $filter) {
$q->where('published', true)
->whereHas(Cache::get('productsFilter'), function (Builder $q) use ($slug) {
->whereHas($filter, function (Builder $q) use ($slug) {
$q->where('published', true)->where('slug', $slug);
});
})
->where('published', true)
->orderBy('slug')
->get();
$collectionIndex = $productModelsList->search(function ($productModelItem, $key) use ($productModel) {
if ($productModelItem->getKey() === $productModel->getKey()) {
return $key;
@ -541,4 +547,14 @@ class ProductController extends Controller
{
return response()->json(Product::getProductsViewsByRange($request->LEGENDSLUG));
}
/**
* Delete the "sub" start filter to avoid "subsubrange" when user has some filters and hard visit a total different product filter
* @var string $filter
*
*/
private function cleanSubSubFilter($filter) {
return str_starts_with($filter, "sub") ? preg_replace('/^sub/', '', $filter) : $filter;
}
}

View file

@ -54,11 +54,12 @@ class StoreCustomerRequest extends FormRequest
*/
public function rules(): array
{
$customerId = auth('club')->user();
$countryList = implode(',', Country::getValidIsoAplha2Codes());
return [
'lastname' => 'required|string|max:255',
'firstname' => 'required|string|max:255',
'username' => 'required|string|max:255',
'username' => ['required','string', 'max:255', Rule::unique('customers', 'username')->ignore($customerId)],
'phone' => "nullable|max:255|between:1,100|phone:{$countryList}",
'address' => 'required|string|min:1|max:255',
'address2' => 'nullable|string|min:1|max:255',
@ -117,4 +118,16 @@ class StoreCustomerRequest extends FormRequest
'opt_in' => trans('validation.custom.newsletter'),
];
}
/**
* Get custom messages for validator errors.
*
* @return array
*/
public function messages(): array
{
return [
'username.unique' => trans('Le pseudo est déjà pris'),
];
}
}