Files
My-KOPKB/be/app/Traits/HasVisibility.php
T
ISMAIL MASSERAN 94ecbe5887 first init
2026-06-08 11:37:14 +08:00

58 lines
1.8 KiB
PHP

<?php
namespace App\Traits;
use App\Services\VisibilityService;
use Illuminate\Database\Eloquent\Builder;
trait HasVisibility
{
/**
* Get the visibility service instance
*/
protected function getVisibilityService(): VisibilityService
{
return app(VisibilityService::class);
}
public function scopeVisibleTo(Builder $query, $user)
{
$includeUnitsWithoutFormation = property_exists($this, 'includeUnitsWithoutFormation')
? (bool) $this->includeUnitsWithoutFormation
: false;
// Check if model has a direct unit column
$unitColumn = property_exists($this, 'unitColumn') ? $this->unitColumn : 'unit_id';
// Check if model has an indirect unit relationship
$unitRelationship = property_exists($this, 'unitRelationship') ? $this->unitRelationship : null;
if ($unitRelationship) {
return $this->getVisibilityService()->applyVisibilityToIndirectQuery(
$query,
$user,
$unitRelationship,
$includeUnitsWithoutFormation
);
}
return $this->getVisibilityService()->applyVisibilityToQuery(
$query,
$user,
$unitColumn,
$includeUnitsWithoutFormation
);
}
/**
* Get all units under the same government as the user's unit
* Handles both direct government relationships and formation-government relationships
* Priority: Direct government_id takes precedence over formation government
*
* @deprecated Use VisibilityService::getUnitsUnderGovernment() instead
*/
protected function getUnitsUnderGovernment($userUnit)
{
return $this->getVisibilityService()->getUnitsUnderGovernment($userUnit);
}
}