This commit is contained in:
Diatrex 2020-11-14 11:07:07 +03:00
parent db956ca7e0
commit cb407b380b
11 changed files with 147 additions and 58 deletions

View File

@ -35,7 +35,7 @@ class CityRepository extends EntryRepository implements CityRepositoryInterface
return $this->model->orderBy('created_at', 'DESC')->where('location_cities.id', $id)->first();
}
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy)
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc')
{
return $this->citiesEntryTranslationsModel->newQuery()
->select('entry_id as id', 'name')
@ -45,7 +45,7 @@ class CityRepository extends EntryRepository implements CityRepositoryInterface
'en'
])
->whereIn('entry_id', $entryIDs)
->orderBy($orderBy)
->orderBy($orderBy, $direction)
->get();
}
}

View File

@ -6,5 +6,5 @@ interface CityRepositoryInterface extends EntryRepositoryInterface
{
public function findById($id);
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy);
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc');
}

View File

@ -7,4 +7,6 @@ interface CountryRepositoryInterface extends EntryRepositoryInterface
public function findById($id);
public function viewAll();
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc');
}

View File

@ -1,5 +1,6 @@
<?php namespace Visiosoft\LocationModule\Country;
use Anomaly\Streams\Platform\Model\Location\LocationCountriesEntryTranslationsModel;
use Visiosoft\LocationModule\Country\Contract\CountryRepositoryInterface;
use Anomaly\Streams\Platform\Entry\EntryRepository;
@ -13,14 +14,23 @@ class CountryRepository extends EntryRepository implements CountryRepositoryInte
*/
protected $model;
/**
* @var LocationCountriesEntryTranslationsModel
*/
private $countriesEntryTranslationsModel;
/**
* Create a new CountryRepository instance.
*
* @param CountryModel $model
*/
public function __construct(CountryModel $model)
public function __construct(
CountryModel $model,
LocationCountriesEntryTranslationsModel $countriesEntryTranslationsModel
)
{
$this->model = $model;
$this->countriesEntryTranslationsModel = $countriesEntryTranslationsModel;
}
public function findById($id)
{
@ -30,4 +40,18 @@ class CountryRepository extends EntryRepository implements CountryRepositoryInte
public function viewAll(){
return $this->model->get();
}
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc')
{
return $this->countriesEntryTranslationsModel->newQuery()
->select('entry_id as id', 'name')
->whereIn('locale', [
Request()->session()->get('_locale'),
setting_value('streams::default_locale'),
'en'
])
->whereIn('entry_id', $entryIDs)
->orderBy($orderBy, $direction)
->get();
}
}

View File

@ -4,5 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface;
interface DistrictRepositoryInterface extends EntryRepositoryInterface
{
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc');
}

View File

@ -1,5 +1,6 @@
<?php namespace Visiosoft\LocationModule\District;
use Anomaly\Streams\Platform\Model\Location\LocationDistrictsEntryTranslationsModel;
use Visiosoft\LocationModule\District\Contract\DistrictRepositoryInterface;
use Anomaly\Streams\Platform\Entry\EntryRepository;
@ -13,13 +14,36 @@ class DistrictRepository extends EntryRepository implements DistrictRepositoryIn
*/
protected $model;
/**
* @var LocationDistrictsEntryTranslationsModel
*/
private $districtsEntryTranslationsModel;
/**
* Create a new DistrictRepository instance.
*
* @param DistrictModel $model
*/
public function __construct(DistrictModel $model)
public function __construct(
DistrictModel $model,
LocationDistrictsEntryTranslationsModel $districtsEntryTranslationsModel
)
{
$this->model = $model;
$this->districtsEntryTranslationsModel = $districtsEntryTranslationsModel;
}
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc')
{
return $this->districtsEntryTranslationsModel->newQuery()
->select('entry_id as id', 'name')
->whereIn('locale', [
Request()->session()->get('_locale'),
setting_value('streams::default_locale'),
'en'
])
->whereIn('entry_id', $entryIDs)
->orderBy($orderBy, $direction)
->get();
}
}

View File

@ -1,52 +1,44 @@
<?php namespace Visiosoft\LocationModule\Http\Controller;
use Anomaly\Streams\Platform\Http\Controller\PublicController;
use Anomaly\Streams\Platform\Model\Location\LocationCitiesEntryTranslationsModel;
use Visiosoft\LocationModule\City\CityModel;
use Visiosoft\LocationModule\City\Contract\CityRepositoryInterface;
use Visiosoft\LocationModule\Country\CountryModel;
use Visiosoft\LocationModule\District\DistrictModel;
use Visiosoft\LocationModule\Neighborhood\NeighborhoodModel;
use Visiosoft\LocationModule\Village\VillageModel;
use Visiosoft\LocationModule\Country\Contract\CountryRepositoryInterface;
use Visiosoft\LocationModule\District\Contract\DistrictRepositoryInterface;
use Visiosoft\LocationModule\Neighborhood\Contract\NeighborhoodRepositoryInterface;
use Visiosoft\LocationModule\Village\Contract\VillageRepositoryInterface;
use Illuminate\Support\Str;
class AjaxController extends PublicController
{
private $country_model;
private $city_model;
private $district_model;
private $neighborhood_model;
private $village_model;
private $citiesEntryTranslationsModel;
private $cityRepository;
private $countryRepository;
private $districtRepository;
private $neighborhoodRepository;
private $villageRepository;
public function __construct(
CountryModel $countryModel,
CityModel $cityModel,
DistrictModel $districtModel,
NeighborhoodModel $neighborhoodModel,
VillageModel $villageModel,
LocationCitiesEntryTranslationsModel $citiesEntryTranslationsModel,
CityRepositoryInterface $cityRepository
CityRepositoryInterface $cityRepository,
CountryRepositoryInterface $countryRepository,
DistrictRepositoryInterface $districtRepository,
NeighborhoodRepositoryInterface $neighborhoodRepository,
VillageRepositoryInterface $villageRepository
)
{
parent::__construct();
$this->country_model = $countryModel;
$this->city_model = $cityModel;
$this->district_model = $districtModel;
$this->neighborhood_model = $neighborhoodModel;
$this->village_model = $villageModel;
$this->citiesEntryTranslationsModel = $citiesEntryTranslationsModel;
$this->cityRepository = $cityRepository;
$this->countryRepository = $countryRepository;
$this->districtRepository = $districtRepository;
$this->neighborhoodRepository = $neighborhoodRepository;
$this->villageRepository = $villageRepository;
}
public function getCountries()
{
if ($this->request->id)
return $this->country_model->find($this->request->id);
return $this->countryRepository->getModel()->find($this->request->id);
else {
$query = $this->country_model;
return $this->queryOrder($query);
$query = $this->countryRepository->getModel();
return $this->queryOrder($query, $this->countryRepository);
}
}
@ -54,18 +46,9 @@ class AjaxController extends PublicController
{
if ($this->request->id) {
$id = explode(',', $this->request->id);
$query = $this->city_model->whereIn('parent_country_id', $id);
$query = $this->cityRepository->getModel()->whereIn('parent_country_id', $id);
if (request()->order_by && $this->city_model->isTranslatedAttribute(request()->order_by)) {
return $this->cityRepository->getByEntryIDsAndOrderByTransCol(
$query->pluck('id')->all(),
request()->order_by
);
} elseif ($orderBy = request()->order_by) {
return $this->queryOrder($query, $orderBy);
}
return $this->queryOrder($query);
return $this->queryOrder($query, $this->cityRepository);
}
}
@ -74,9 +57,9 @@ class AjaxController extends PublicController
if ($this->request->id) {
$id = explode(',', $this->request->id);
$query = $this->district_model->whereIn('parent_city_id', $id);
$query = $this->districtRepository->getModel()->whereIn('parent_city_id', $id);
return $this->queryOrder($query);
return $this->queryOrder($query, $this->districtRepository);
}
}
@ -85,9 +68,9 @@ class AjaxController extends PublicController
if ($this->request->id) {
$id = explode(',', $this->request->id);
$query = $this->neighborhood_model->whereIn('parent_district_id', $id);
$query = $this->neighborhoodRepository->getModel()->whereIn('parent_district_id', $id);
return $this->queryOrder($query);
return $this->queryOrder($query, $this->neighborhoodRepository);
}
}
@ -96,9 +79,9 @@ class AjaxController extends PublicController
if ($this->request->id) {
$id = explode(',', $this->request->id);
$query = $this->village_model->whereIn('parent_neighborhood_id', $id);
$query = $this->villageRepository->getModel()->whereIn('parent_neighborhood_id', $id);
return $this->queryOrder($query);
return $this->queryOrder($query, $this->villageRepository);
}
}
@ -106,7 +89,7 @@ class AjaxController extends PublicController
{
if ($this->request->name) {
$slug = Str::slug($this->request->name, '_');
if ($city = $this->city_model->newQuery()->where('slug', 'LIKE', $slug . '%')->first()) {
if ($city = $this->cityRepository->getModel()->newQuery()->where('slug', 'LIKE', $slug . '%')->first()) {
return ['success' => true, 'city' => $city];
} else {
return ['success' => false];
@ -114,10 +97,18 @@ class AjaxController extends PublicController
}
}
public function queryOrder($query, $orderBy = null)
public function queryOrder($query, $repository)
{
$sorting_type = setting_value('visiosoft.module.location::sorting_type');
$sorting_column = $orderBy ?: setting_value('visiosoft.module.location::sorting_column');
$sorting_column = setting_value('visiosoft.module.location::sorting_column');
if ($repository->getModel()->isTranslatedAttribute($sorting_column)) {
return $repository->getByEntryIDsAndOrderByTransCol(
$query->pluck('id')->all(),
$sorting_column,
$sorting_type
);
}
return $query->orderBy($sorting_column, $sorting_type)->get();
}

View File

@ -4,5 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface;
interface NeighborhoodRepositoryInterface extends EntryRepositoryInterface
{
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc');
}

View File

@ -1,5 +1,6 @@
<?php namespace Visiosoft\LocationModule\Neighborhood;
use Anomaly\Streams\Platform\Model\Location\LocationNeighborhoodsEntryTranslationsModel;
use Visiosoft\LocationModule\Neighborhood\Contract\NeighborhoodRepositoryInterface;
use Anomaly\Streams\Platform\Entry\EntryRepository;
@ -13,13 +14,36 @@ class NeighborhoodRepository extends EntryRepository implements NeighborhoodRepo
*/
protected $model;
/**
* @var LocationNeighborhoodsEntryTranslationsModel
*/
private $neighborhoodsEntryTranslationsModel;
/**
* Create a new NeighborhoodRepository instance.
*
* @param NeighborhoodModel $model
*/
public function __construct(NeighborhoodModel $model)
public function __construct(
NeighborhoodModel $model,
LocationNeighborhoodsEntryTranslationsModel $neighborhoodsEntryTranslationsModel
)
{
$this->model = $model;
$this->neighborhoodsEntryTranslationsModel = $neighborhoodsEntryTranslationsModel;
}
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc')
{
return $this->neighborhoodsEntryTranslationsModel->newQuery()
->select('entry_id as id', 'name')
->whereIn('locale', [
Request()->session()->get('_locale'),
setting_value('streams::default_locale'),
'en'
])
->whereIn('entry_id', $entryIDs)
->orderBy($orderBy, $direction)
->get();
}
}

View File

@ -4,5 +4,5 @@ use Anomaly\Streams\Platform\Entry\Contract\EntryRepositoryInterface;
interface VillageRepositoryInterface extends EntryRepositoryInterface
{
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc');
}

View File

@ -1,5 +1,6 @@
<?php namespace Visiosoft\LocationModule\Village;
use Anomaly\Streams\Platform\Model\Location\LocationVillageEntryTranslationsModel;
use Visiosoft\LocationModule\Village\Contract\VillageRepositoryInterface;
use Anomaly\Streams\Platform\Entry\EntryRepository;
@ -13,13 +14,36 @@ class VillageRepository extends EntryRepository implements VillageRepositoryInte
*/
protected $model;
/**
* @var LocationVillageEntryTranslationsModel
*/
private $villageEntryTranslationsModel;
/**
* Create a new VillageRepository instance.
*
* @param VillageModel $model
*/
public function __construct(VillageModel $model)
public function __construct(
VillageModel $model,
LocationVillageEntryTranslationsModel $villageEntryTranslationsModel
)
{
$this->model = $model;
$this->villageEntryTranslationsModel = $villageEntryTranslationsModel;
}
public function getByEntryIDsAndOrderByTransCol($entryIDs, $orderBy, $direction = 'asc')
{
return $this->villageEntryTranslationsModel->newQuery()
->select('entry_id as id', 'name')
->whereIn('locale', [
Request()->session()->get('_locale'),
setting_value('streams::default_locale'),
'en'
])
->whereIn('entry_id', $entryIDs)
->orderBy($orderBy, $direction)
->get();
}
}