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 @@ +