From 484e3648319e263b7e6bba0b9d243d10f4b7dbe1 Mon Sep 17 00:00:00 2001 From: developer Date: Fri, 24 Apr 2026 16:15:58 +0800 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D1=83=D0=BF=20=D0=B4=D0=BB=D1=8F=20=D0=BE?= =?UTF-8?q?=D1=82=D0=B1=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Modules/Main/Helpers/helper.php | 39 +++++++++++++++++--- app/Modules/Main/Models/Scopes/CityScope.php | 32 ++++++++++++++++ app/Modules/Main/Traits/CityAppendTrait.php | 8 +++- app/Modules/Post/Models/Post.php | 23 +++++++++++- app/Modules/Post/Models/PostCity.php | 18 +++++++++ 5 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 app/Modules/Main/Models/Scopes/CityScope.php create mode 100644 app/Modules/Post/Models/PostCity.php diff --git a/app/Modules/Main/Helpers/helper.php b/app/Modules/Main/Helpers/helper.php index 623cb94..43d25b4 100644 --- a/app/Modules/Main/Helpers/helper.php +++ b/app/Modules/Main/Helpers/helper.php @@ -4,6 +4,7 @@ use Modules\Main\Models\Company\Company; use Modules\Main\Models\Company\CompanyAdmin; use Modules\CityManager\Models\CityManager; +use Modules\Main\Models\City; use Modules\Main\Models\Agent\Agent; use Modules\Main\Models\Complex; use Modules\User\Models\Role; @@ -62,7 +63,8 @@ function GetAvailableAgents($resultType = 'Collection') return $agents->get(); } else { return $agents; - }; + } + ; } } @@ -77,7 +79,7 @@ function GetAvailableCompanies($resultType = 'Collection') if ($adminCompany = AdminCompanyOfUser()) { $companiesIds[] = $adminCompany->id; } - if ($cityManager = CityManager::where('user_id', auth()->user()->id)) { + if ($cityManager = CityManager::where('user_id', auth()->user()->id)) { if ($cityManager->count()) { $companies = Company::whereIn('city_id', $cityManager->pluck('city_id')); if ($companies->count()) { @@ -93,7 +95,8 @@ function GetAvailableCompanies($resultType = 'Collection') return $companies->get(); } else { return $companies; - }; + } + ; } } @@ -123,7 +126,33 @@ function GetAvailableComplexes() if (!function_exists('GetAvailableCities')) { function GetAvailableCities() { - $agents = []; + $user = auth()->user(); + if ($user->hasRole(Role::SUPER_ADMIN)) { + return City::all(); + } + if ($user->hasRole(Role::CITY_MANAGER)) { + $cititesOfManager = CityManager::where('user_id', $user->id)->pluck('city_id')->get(); + if ($cititesOfManager->count()) { + return City::whereIn('id', $cititesOfManager)->get(); + } + return false; + } + if ($user->hasRole(Role::COMPANY_ADMIN)) { + $adminCompany = AdminCompanyOfUser(); + if ($adminCompany->count()) { + return City::where('id', $adminCompany->city_id)->get(); + } + return false; + } + if ($user->hasRole(Role::AGENT)) { + $agentCompany = AgentCompanyOfUser(); + if ($agentCompany->count()) { + return City::where('id', $agentCompany->city_id)->get(); + } + return false; + } + return false; + /*$agents = []; if ($adminCompany = AdminCompanyOfUser()) { $agents = Agent::where('company_id', $adminCompany->id); } else { @@ -136,6 +165,6 @@ function GetAvailableCities() } $agents->with('company:id,name'); $agents->with('user:id,name'); - return $agents->get(); + return $agents->get();*/ } } \ No newline at end of file diff --git a/app/Modules/Main/Models/Scopes/CityScope.php b/app/Modules/Main/Models/Scopes/CityScope.php new file mode 100644 index 0000000..9f9f192 --- /dev/null +++ b/app/Modules/Main/Models/Scopes/CityScope.php @@ -0,0 +1,32 @@ +cities()->count()) { //если города для новости установлены + if ($cities = GetAvailableCities()) { //получаю доступные пользователю города + $citiesIds = []; + foreach ($cities as $city) { + $citiesIds[] = $city->id; + } + $builder->whereHas('cities', fn($q) => $q->whereIn('cities.id', $citiesIds)); + + } else { + $builder->where('id', 0);//не знаю, как сделать, чтобы выбор был гарантированно пустой + } + } else { + + } + //$builder->where('created_at', '<', now()->minus(years: 2000)); + } +} +?> \ No newline at end of file diff --git a/app/Modules/Main/Traits/CityAppendTrait.php b/app/Modules/Main/Traits/CityAppendTrait.php index 70a40ee..037f24c 100644 --- a/app/Modules/Main/Traits/CityAppendTrait.php +++ b/app/Modules/Main/Traits/CityAppendTrait.php @@ -6,6 +6,8 @@ use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\Relations\MorphOne; use Modules\Main\Models\CityAppend; +use Modules\Main\Models\City; +use Modules\User\Models\User; trait CityAppendTrait { @@ -14,9 +16,13 @@ public function cities(): MorphMany return $this->MorphMany(CityAppend::class, 'append'); } - public function byCity(Builder $query, $cityId) + public function byCity() { //return $query->where('category', $category); + $user = null; + settype($user, User::class); + $user = auth()->user(); + return true; } } diff --git a/app/Modules/Post/Models/Post.php b/app/Modules/Post/Models/Post.php index 7d48229..d8b5c30 100644 --- a/app/Modules/Post/Models/Post.php +++ b/app/Modules/Post/Models/Post.php @@ -3,16 +3,18 @@ namespace Modules\Post\Models; use Modules\Main\Models\City; +use Modules\Post\Models\PostCity; + use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasManyThrough; +use Illuminate\Database\Eloquent\Relations\HasMany; -use Modules\Main\Traits\CityAppendTrait; +use Modules\Main\Models\Scopes\CityScope; class Post extends Model { use HasFactory; - use CityAppendTrait; protected $fillable = [ 'name', @@ -21,4 +23,21 @@ class Post extends Model 'category', 'image' ]; + + protected static function booted(): void + { + static::addGlobalScope(new CityScope); + } + + public function cities(): HasManyThrough + { + return $this->hasManyThrough( + City::class, + PostCity::class, + 'post_id', + 'id', + 'id', + 'city_id' + ); + } } diff --git a/app/Modules/Post/Models/PostCity.php b/app/Modules/Post/Models/PostCity.php new file mode 100644 index 0000000..68831a1 --- /dev/null +++ b/app/Modules/Post/Models/PostCity.php @@ -0,0 +1,18 @@ +