diff --git a/src/Models/Group.php b/src/Models/Group.php index 21c30ca59..f3018474b 100644 --- a/src/Models/Group.php +++ b/src/Models/Group.php @@ -17,11 +17,7 @@ class Group extends Model public function modules() { - if ($this->nome == 'Amministratori') { - return Module::all(); - } else { - return $this->belongsToMany(Module::class, 'zz_permissions', 'idgruppo', 'idmodule')->withPivot('permessi')->get(); - } + return $this->belongsToMany(Module::class, 'zz_permissions', 'idgruppo', 'idmodule')->withPivot('permessi'); } public function views() diff --git a/src/Models/Module.php b/src/Models/Module.php index 6c267df45..2af901755 100644 --- a/src/Models/Module.php +++ b/src/Models/Module.php @@ -6,12 +6,13 @@ use App; use Auth; use Traits\RecordTrait; use Traits\UploadTrait; +use Traits\StoreTrait; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class Module extends Model { - use RecordTrait, UploadTrait; + use RecordTrait, UploadTrait, StoreTrait; protected $table = 'zz_modules'; protected $main_folder = 'modules'; @@ -33,6 +34,10 @@ class Module extends Model static::addGlobalScope('enabled', function (Builder $builder) { $builder->where('enabled', true); }); + + static::addGlobalScope('permission', function (Builder $builder) { + $builder->with('groups'); + }); } /** @@ -42,9 +47,17 @@ class Module extends Model */ public function getPermissionAttribute() { - $result = Auth::user()->is_admin ? 'rw' : $this->pivot->permessi; + if (Auth::user()->is_admin) { + return 'rw'; + } - return !empty($result) ? $result : '-'; + $group = Auth::user()->group->id; + + $pivot = $this->pivot ?? $this->groups->first(function ($item) use ($group) { + return $item->id == $group; + })->pivot; + + return $pivot->permessi ?? '-'; } /** @@ -103,7 +116,7 @@ class Module extends Model public function groups() { - return $this->belongsToMany(Group::class, 'zz_permissions', 'idmodule', 'idgruppo'); + return $this->belongsToMany(Group::class, 'zz_permissions', 'idmodule', 'idgruppo')->withPivot('permessi'); } public function clauses() diff --git a/src/Models/Plugin.php b/src/Models/Plugin.php index 7285867e6..09bfd2f17 100644 --- a/src/Models/Plugin.php +++ b/src/Models/Plugin.php @@ -5,12 +5,13 @@ namespace Models; use App; use Traits\RecordTrait; use Traits\UploadTrait; +use Traits\StoreTrait; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class Plugin extends Model { - use RecordTrait, UploadTrait; + use RecordTrait, UploadTrait, StoreTrait; protected $table = 'zz_plugins'; protected $main_folder = 'plugins'; diff --git a/src/Models/PrintTemplate.php b/src/Models/PrintTemplate.php index 051e06327..8508993db 100644 --- a/src/Models/PrintTemplate.php +++ b/src/Models/PrintTemplate.php @@ -3,15 +3,25 @@ namespace Models; use Traits\PathTrait; +use Traits\StoreTrait; use Illuminate\Database\Eloquent\Model; class PrintTemplate extends Model { - use PathTrait; + use PathTrait, StoreTrait; protected $table = 'zz_prints'; protected $main_folder = 'templates'; + protected static function boot() + { + parent::boot(); + + static::addGlobalScope('enabled', function (Builder $builder) { + $builder->where('enabled', true); + }); + } + /* Relazioni Eloquent */ public function module() diff --git a/src/Models/Setting.php b/src/Models/Setting.php index 9bd38acf9..bca26b13a 100644 --- a/src/Models/Setting.php +++ b/src/Models/Setting.php @@ -2,10 +2,13 @@ namespace Models; +use Traits\StoreTrait; use Illuminate\Database\Eloquent\Model; class Setting extends Model { + use StoreTrait; + protected $table = 'zz_settings'; protected $appends = [ diff --git a/src/Modules.php b/src/Modules.php index 6c7012054..c752cea0a 100644 --- a/src/Modules.php +++ b/src/Modules.php @@ -9,10 +9,6 @@ use Models\Module; */ class Modules { - /** @var array Elenco dei moduli disponibili */ - protected static $modules = []; - protected static $references = []; - /** @var array Elenco delle condizioni aggiuntive disponibili */ protected static $additionals = []; /** @var array Elenco dei segmenti disponibili */ @@ -28,23 +24,14 @@ class Modules */ public static function getModules() { - if (empty(self::$modules)) { - $modules = []; - $references = []; + $results = Module::getAll(); - $results = Auth::check() ? Auth::user()->modules() : Module::all(); + // Caricamento dei plugin + if (!$results->first()->relationLoaded('plugins')) { $results->load('plugins'); - - foreach ($results as $result) { - $modules[$result['id']] = $result; - $references[$result['name']] = $result['id']; - } - - self::$modules = $modules; - self::$references = $references; } - return self::$modules; + return $results; } /** @@ -75,13 +62,9 @@ class Modules */ public static function get($module) { - $modules = self::getModules(); + self::getModules(); - if (!is_numeric($module) && !empty(self::$references[$module])) { - $module = self::$references[$module]; - } - - return $modules[$module]; + return Module::get($module); } /** diff --git a/src/Traits/StoreTrait.php b/src/Traits/StoreTrait.php new file mode 100644 index 000000000..983fbfc3e --- /dev/null +++ b/src/Traits/StoreTrait.php @@ -0,0 +1,65 @@ +first(function ($item) use ($identifier) { + return $item->{self::$name} == $identifier || $item->{self::$id} == $identifier; + }); + + if (!empty($result)) { + return $result; + } + + // Consultazione Database + $result = self::where(self::$id, $identifier) + ->orWhere(self::$name, $identifier) + ->first(); + + self::$collection->push($result); + + return $result; + } +}