#1760 [core] Listing show parameters

This commit is contained in:
Diatrex 2020-09-30 18:57:36 +03:00
parent c4cd1b9888
commit e6eea8088d
6 changed files with 127 additions and 138 deletions

View File

@ -2,6 +2,9 @@
"name": "visiosoft/advs-module", "name": "visiosoft/advs-module",
"type": "streams-addon", "type": "streams-addon",
"autoload": { "autoload": {
"files": [
"src/helpers.php"
],
"psr-4": { "psr-4": {
"Visiosoft\\AdvsModule\\": "src/" "Visiosoft\\AdvsModule\\": "src/"
} }

View File

@ -164,6 +164,10 @@
border-radius: 2px; border-radius: 2px;
} }
.result-text .filter-tabs a button:focus {
outline: none;
}
.result-text .filter-tabs a svg { .result-text .filter-tabs a svg {
flex-shrink: 0; flex-shrink: 0;
height: 6px; height: 6px;

View File

@ -248,6 +248,9 @@ return [
'in_the_last_24_hours' => [ 'in_the_last_24_hours' => [
'name' => 'In The Last 24 Hours' 'name' => 'In The Last 24 Hours'
], ],
'in_the_last_day' => [
'name' => 'In The Last 24 Hours'
],
'in_the_last_week' => [ 'in_the_last_week' => [
'name' => 'In The Last Week' 'name' => 'In The Last Week'
], ],
@ -297,5 +300,9 @@ return [
// New create page // New create page
'options' => 'Options', 'options' => 'Options',
'free' => 'Free' 'free' => 'Free',
'ad_date' => 'Ad Date',
'photo_video' => 'Photo, Video',
'and_above' => 'and above',
'and_below' => 'and below',
]; ];

View File

@ -100,17 +100,19 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface
if (!empty($param['user'])) { if (!empty($param['user'])) {
$query = $query->where('advs_advs.created_by_id', $param['user']); $query = $query->where('advs_advs.created_by_id', $param['user']);
} }
if (!empty($param['min_price'])) { if (!empty($param['currency'])) {
$num = $param['min_price']; if (!empty($param['min_price'])) {
$int = (int)$num; $num = $param['min_price'];
$column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') >=" . $int; $int = (int)$num;
$query = $query->whereRaw($column); $column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') >=" . $int;
} $query = $query->whereRaw($column);
if (!empty($param['max_price'])) { }
$num = $param['max_price']; if (!empty($param['max_price'])) {
$int = (int)$num; $num = $param['max_price'];
$column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') <=" . $int; $int = (int)$num;
$query = $query->whereRaw($column); $column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') <=" . $int;
$query = $query->whereRaw($column);
}
} }
if (!empty($param['date'])) { if (!empty($param['date'])) {
if ($param['date'] === 'day') { if ($param['date'] === 'day') {
@ -147,22 +149,6 @@ class AdvRepository extends EntryRepository implements AdvRepositoryInterface
$query = app('Visiosoft\CustomfieldsModule\Http\Controller\cfController')->filterSearch($customParameters, $param, $query); $query = app('Visiosoft\CustomfieldsModule\Http\Controller\cfController')->filterSearch($customParameters, $param, $query);
} }
if (!empty($param['max_price'])) {
$num = $param['max_price'];
$int = (int)$num;
$column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') <=" . $int;
$query = $query->whereRaw($column);
}
if (!empty($param['max_price'])) {
$num = $param['max_price'];
$int = (int)$num;
$column = "JSON_EXTRACT(foreign_currencies, '$." . $param['currency'] . "') <=" . $int;
$query = $query->whereRaw($column);
}
// //UPDATE `default_advs_advs` SET `coor` = (PointFromText('POINT(41.085022 28.804754)')) WHERE `default_advs_advs`.`id` = 8 // //UPDATE `default_advs_advs` SET `coor` = (PointFromText('POINT(41.085022 28.804754)')) WHERE `default_advs_advs`.`id` = 8
// //SELECT * FROM `default_advs_advs` WHERE ST_DISTANCE(ST_GeomFromText('POINT(41.0709052 28.829627)'), coor) < 20 // //SELECT * FROM `default_advs_advs` WHERE ST_DISTANCE(ST_GeomFromText('POINT(41.0709052 28.829627)'), coor) < 20

View File

@ -11,7 +11,6 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Cookie; use Illuminate\Support\Facades\Cookie;
use Visiosoft\AdvsModule\Adv\AdvModel; use Visiosoft\AdvsModule\Adv\AdvModel;
use Visiosoft\AdvsModule\Adv\Command\appendRequestURL;
use Visiosoft\AdvsModule\Adv\Contract\AdvRepositoryInterface; use Visiosoft\AdvsModule\Adv\Contract\AdvRepositoryInterface;
use Visiosoft\AdvsModule\Adv\Event\ChangedStatusAd; use Visiosoft\AdvsModule\Adv\Event\ChangedStatusAd;
use Visiosoft\AdvsModule\Adv\Event\CreatedAd; use Visiosoft\AdvsModule\Adv\Event\CreatedAd;
@ -24,8 +23,6 @@ use Visiosoft\AlgoliaModule\Search\SearchModel;
use Visiosoft\CatsModule\Category\CategoryModel; use Visiosoft\CatsModule\Category\CategoryModel;
use Visiosoft\CatsModule\Category\Contract\CategoryRepositoryInterface; use Visiosoft\CatsModule\Category\Contract\CategoryRepositoryInterface;
use Visiosoft\CloudinaryModule\Video\VideoModel; use Visiosoft\CloudinaryModule\Video\VideoModel;
use Visiosoft\CustomfieldsModule\CustomField\Contract\CustomFieldRepositoryInterface;
use Visiosoft\CustomfieldsModule\CustomField\CustomFieldModel;
use Visiosoft\FavsModule\Http\Controller\FavsController; use Visiosoft\FavsModule\Http\Controller\FavsController;
use Visiosoft\LocationModule\City\CityModel; use Visiosoft\LocationModule\City\CityModel;
use Visiosoft\LocationModule\City\CityRepository; use Visiosoft\LocationModule\City\CityRepository;
@ -63,11 +60,6 @@ class AdvsController extends PublicController
private $optionRepository; private $optionRepository;
private $customFieldRepository;
public function __construct( public function __construct(
UserRepositoryInterface $userRepository, UserRepositoryInterface $userRepository,
@ -94,10 +86,7 @@ class AdvsController extends PublicController
Dispatcher $events, Dispatcher $events,
Request $request, Request $request
CustomFieldRepositoryInterface $customFieldRepository
) )
{ {
$this->userRepository = $userRepository; $this->userRepository = $userRepository;
@ -125,9 +114,8 @@ class AdvsController extends PublicController
$this->requestHttp = $request; $this->requestHttp = $request;
parent::__construct();
$this->optionRepository = $optionRepository; $this->optionRepository = $optionRepository;
$this->customFieldRepository = $customFieldRepository; parent::__construct();
} }
@ -156,10 +144,9 @@ class AdvsController extends PublicController
} }
if (isset($param['cat'])) { if (isset($param['cat'])) {
unset($param['cat']); unset($param['cat']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug]), route('adv_list_seo', [$categoryId->slug])
array()
)); ));
} }
} elseif (isset($param['cat']) && !empty($param['cat'])) { // Only Param } elseif (isset($param['cat']) && !empty($param['cat'])) { // Only Param
@ -169,10 +156,9 @@ class AdvsController extends PublicController
return redirect('/'); return redirect('/');
} }
unset($param['cat']); unset($param['cat']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug]), route('adv_list_seo', [$categoryId->slug])
array()
)); ));
} }
@ -189,23 +175,21 @@ class AdvsController extends PublicController
if (is_null($city) && $isOneCity) { // Param and no slug if (is_null($city) && $isOneCity) { // Param and no slug
$cityId = $this->cityRepository->find($param['city'][0]); $cityId = $this->cityRepository->find($param['city'][0]);
unset($param['city']); unset($param['city']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug, $cityId->slug]), route('adv_list_seo', [$categoryId->slug, $cityId->slug])
array()
)); ));
} elseif ($isOneCity) { // Param and slug } elseif ($isOneCity) { // Param and slug
$cityId = $this->cityRepository->find($param['city'][0]); $cityId = $this->cityRepository->find($param['city'][0]);
if ($city !== $cityId->slug) { if ($city !== $cityId->slug) {
unset($param['city']); unset($param['city']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug, $cityId->slug]), route('adv_list_seo', [$categoryId->slug, $cityId->slug])
array()
)); ));
} }
} elseif ($city && $isMultipleCity) { // Slug and multiple param cities } elseif ($city && $isMultipleCity) { // Slug and multiple param cities
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug]), route('adv_list_seo', [$categoryId->slug]),
array() array()
@ -213,18 +197,16 @@ class AdvsController extends PublicController
} elseif ($city) { } elseif ($city) {
if (isset($param['city'][0]) && empty($param['city'][0])) { // Slug and empty param if (isset($param['city'][0]) && empty($param['city'][0])) { // Slug and empty param
unset($param['city']); unset($param['city']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug]), route('adv_list_seo', [$categoryId->slug])
array()
)); ));
} else { // Only slug } else { // Only slug
$cityId = $this->cityRepository->findBy('slug', $city); $cityId = $this->cityRepository->findBy('slug', $city);
if (!$cityId) { if (!$cityId) {
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
route('adv_list_seo', [$categoryId->slug]), route('adv_list_seo', [$categoryId->slug])
array()
), 301); ), 301);
} }
} }
@ -247,10 +229,9 @@ class AdvsController extends PublicController
if ($advs->currentPage() > $advs->lastPage()) { if ($advs->currentPage() > $advs->lastPage()) {
unset($param['page']); unset($param['page']);
return redirect($this->fullLink( return redirect(fullLink(
$param, $param,
\request()->url(), \request()->url()
array()
), 301); ), 301);
} }
@ -292,6 +273,7 @@ class AdvsController extends PublicController
$allCats = true; $allCats = true;
} }
$cFArray = array();
if ($isActiveCustomFields) { if ($isActiveCustomFields) {
$returnvalues = app('Visiosoft\CustomfieldsModule\Http\Controller\cfController')->index($mainCats, $subCats); $returnvalues = app('Visiosoft\CustomfieldsModule\Http\Controller\cfController')->index($mainCats, $subCats);
$checkboxes = $returnvalues['checkboxes']; $checkboxes = $returnvalues['checkboxes'];
@ -302,75 +284,81 @@ class AdvsController extends PublicController
$ranges = $returnvalues['ranges']; $ranges = $returnvalues['ranges'];
$radio = $returnvalues['radio']; $radio = $returnvalues['radio'];
$customFieldParameters = array_filter($param, function ($var) { $cFArray = app('Visiosoft\CustomfieldsModule\CustomField\Contract\CustomFieldRepositoryInterface')
return strpos($var, 'cf_') === 0 ->getCFParamValues($param);
|| strpos($var, 'min_cf_') === 0 }
|| strpos($var, 'max_cf_') === 0;
}, ARRAY_FILTER_USE_KEY);
$cFArray = array(); $photoVideoParams = ['photo', 'video'];
foreach ($customFieldParameters as $id => $value) { $photoExists = false;
if (strpos($id, 'min_cf_') === 0 || strpos($id, 'max_cf_') === 0) { foreach ($photoVideoParams as $pV) {
$cFId = substr($id, 7); if (\request()->{$pV} === 'true') {
$cF = $this->customFieldRepository->newQuery()->find($cFId); $removalLink = array_filter($param, function ($singleParam) use ($pV) {
$keyExists = array_key_exists($cFId, $cFArray); return $singleParam !== $pV;
if (strpos($id, 'min_cf_') === 0) { }, ARRAY_FILTER_USE_KEY);
if ($keyExists) { $removalLink = fullLink($removalLink, \request()->url());
$cFArray[$cFId] = [
'name' => $cFArray[$cFId]['name'], if ($photoExists) {
'value' => [ $cFArray['photoVideo']['value'][] = [
'min' => $value, 'name' => trans('visiosoft.module.advs::field.ads_with_' . $pV . '.name'),
'max' => $cFArray[$cFId]['value']['max'], 'removalLink' => $removalLink
] ];
]; } else {
} else { $cFArray['photoVideo'] = [
$cFArray[$cFId] = [ 'name' => trans('visiosoft.module.advs::field.photo_video'),
'name' => $cF->name, 'value' => [
'value' => [ [
'min' => $value, 'name' => trans('visiosoft.module.advs::field.ads_with_' . $pV . '.name'),
] 'removalLink' => $removalLink
]; ]
} ]
} else { ];
if ($keyExists) { $photoExists = true;
$cFArray[$cFId] = [
'name' => $cFArray[$cFId]['name'],
'value' => [
'min' => $cFArray[$cFId]['value']['min'],
'max' => $value,
]
];
} else {
$cFArray[$cFId] = [
'name' => $cF->name,
'value' => [
'max' => $value,
]
];
}
}
} elseif (strpos($id, 'cf_') === 0) {
$cFId = substr($id, 3);
$cF = $this->customFieldRepository->newQuery()->find($cFId);
if ($cF->type === 'radio' || $cF->type === 'selecttop') {
$cFArray[$cFId] = [
'name' => $cF->name,
'value' => reset($value)
];
} elseif ($cF->type === 'selectdropdown') {
$cFArray[$cFId] = [
'name' => $cF->name,
'value' => $value
];
} elseif ($cF->type === 'select') {
$cFArray[$cFId] = [
'name' => $cF->name,
'value' => $value
];
}
} }
} }
dd($cFArray); }
if ($dateParam = \request()->date) {
$removalLink = array_filter($param, function ($singleParam) {
return $singleParam !== 'date';
}, ARRAY_FILTER_USE_KEY);
$removalLink = fullLink($removalLink, \request()->url());
$cFArray[] = [
'name' => trans('visiosoft.module.advs::field.ad_date'),
'value' => [
[
'name' => trans('visiosoft.module.advs::field.in_the_last_' . $dateParam . '.name'),
'removalLink' => $removalLink
]
]
];
}
$minPrice = \request()->min_price;
$maxPrice = \request()->max_price;
if ($minPrice || $maxPrice) {
$removalLink = array_filter($param, function ($singleParam) {
return $singleParam !== 'min_price' && $singleParam !== 'max_price' && $singleParam !== 'currency';
}, ARRAY_FILTER_USE_KEY);
$removalLink = fullLink($removalLink, \request()->url());
if ($minPrice && $maxPrice) {
$name = "$minPrice - $maxPrice";
} elseif ($minPrice) {
$name = "$minPrice " . trans('visiosoft.module.advs::field.and_above');
} elseif ($maxPrice) {
$name = "$maxPrice " . trans('visiosoft.module.advs::field.and_below');
}
$cFArray[] = [
'name' => trans('visiosoft.module.advs::field.price.name'),
'value' => [
[
'name' => $name,
'removalLink' => $removalLink
]
]
];
} }
Cookie::queue(Cookie::make('last_search', $this->requestHttp->getRequestUri(), 84000)); Cookie::queue(Cookie::make('last_search', $this->requestHttp->getRequestUri(), 84000));
@ -408,18 +396,11 @@ class AdvsController extends PublicController
$compact = compact('advs', 'countries', 'mainCats', 'subCats', 'checkboxes', 'param', $compact = compact('advs', 'countries', 'mainCats', 'subCats', 'checkboxes', 'param',
'user', 'featured_advs', 'viewType', 'topfields', 'selectDropdown', 'selectRange', 'selectImage', 'ranges', 'user', 'featured_advs', 'viewType', 'topfields', 'selectDropdown', 'selectRange', 'selectImage', 'ranges',
'seenList', 'radio', 'categoryId', 'cityId', 'allCats', 'catText'); 'seenList', 'radio', 'categoryId', 'cityId', 'allCats', 'catText', 'cFArray');
// dd($checkboxes, $radio, $param, $returnvalues , $topfields , $selectDropdown , $selectRange , $selectImage , $ranges);
return $this->viewTypeBasedRedirect($viewType, $compact); return $this->viewTypeBasedRedirect($viewType, $compact);
} }
public function fullLink($request, $url, $newParameters)
{
return $this->dispatch(new appendRequestURL($request, $url, $newParameters));
}
public function viewTypeBasedRedirect($viewType, $compact) public function viewTypeBasedRedirect($viewType, $compact)
{ {
if (!$viewType) { if (!$viewType) {

View File

@ -0,0 +1,8 @@
<?php
use Illuminate\Contracts\Bus\Dispatcher;
use Visiosoft\AdvsModule\Adv\Command\appendRequestURL;
function fullLink($request, $url, $newParameters = array()) {
return app(Dispatcher::class)->dispatch(new appendRequestURL($request, $url, $newParameters));
}