src/Models/SeatGroup.php
<?php/** * Created by PhpStorm. * * User: Herpaderp Aldent * Date: 13.02.2018 * Time: 21:43. */ namespace Herpaderpaldent\Seat\SeatGroups\Models; use Herpaderpaldent\Seat\SeatGroups\Actions\SeatGroups\GetCurrentAffiliationAction;use Illuminate\Database\Eloquent\Model;use Seat\Web\Models\Group; class SeatGroup extends Model{ /** * The table associated with the model. * * @var string */ protected $table = 'seatgroups'; protected $fillable = ['name', 'description', 'type', 'role_id']; public function role() { return $this->belongsToMany('Seat\Web\Models\Acl\Role', 'role_seatgroup', 'seatgroup_id'); } public function group() { return $this->belongsToMany('Seat\Web\Models\Group', 'group_seatgroup', 'seatgroup_id') ->withPivot('is_manager', 'on_waitlist'); } public function corporation() { return $this->belongsToMany('Seat\Eveapi\Models\Corporation\CorporationInfo', 'corporation_info_seatgroup', 'seatgroup_id', 'corporation_id'); } public function corporationTitles() { return $this->hasMany('Herpaderpaldent\Seat\SeatGroups\Models\CorporationTitleSeatgroups', 'seatgroup_id'); } public function manager() { return $this->belongsToMany('Seat\Web\Models\Group', 'group_seatgroup', 'seatgroup_id') ->wherePivot('is_manager', 1); } public function member() { return $this->belongsToMany('Seat\Web\Models\Group', 'group_seatgroup', 'seatgroup_id') ->wherePivot('on_waitlist', 0); } public function waitlist() { return $this->belongsToMany('Seat\Web\Models\Group', 'group_seatgroup', 'seatgroup_id') ->wherePivot('on_waitlist', 1); } public function alliance() { return $this->belongsToMany('Seat\Eveapi\Models\Alliances\Alliance', 'alliance_seatgroup', 'seatgroup_id', 'alliance_id'); } /** * @param \Seat\Web\Models\Group $group * * @return bool */Function `isManager` has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring. public function isManager(Group $group) { if (in_array($group->id, $this->manager->pluck('id')->toArray())) return true; if($this->children){ foreach ($this->children as $child) { if(in_array($group->id, $child->member->pluck('id')->toArray())) return true; } } return false; } /** * This method shall only be used from frontend or controller and will return a boolean if the user * is allowed to see the seatgroup. * * @return bool */ public function isAllowedToSeeSeatGroup() { if (auth()->user()->hasSuperUser() || auth()->user()->has('seatgroups.edit', false) || $this->isManager(auth()->user()->group) || $this->isMember(auth()->user()->group)) return true; if($this->type === 'hidden') return false; return $this->isQualified(auth()->user()->group); } public function onWaitlist() { return in_array(auth()->user()->group->id, $this->waitlist->map(function ($group) { return $group->id; })->toArray()); } /** * @param \Seat\Web\Models\Group $group * * @return bool */ public function isMember(Group $group) { if (in_array($group->id, $this->member->pluck('id')->toArray())) return true; return false; } Function `isQualified` has a Cognitive Complexity of 26 (exceeds 5 allowed). Consider refactoring. public function isQualified(Group $group) { $action = new GetCurrentAffiliationAction; if ($this->all_corporations) return true; $affiliations = collect($action->execute(['seatgroup_id' => $this->id])); foreach ($group->users as $user){ if (is_null($user->refresh_token)) continue; foreach($affiliations as $affiliation){ if (isset($affiliation['corporation_title'])) { // Handle Corp_title // First check if corporation is equal to character corporation. if ($affiliation['corporation_id'] === $user->character->corporation_id) { //Then check if tite_id is within main_characters titles if (in_array($affiliation['corporation_title']['title_id'], $user->character->titles->pluck('title_id')->toArray())) { return true; } } } //Check if character is an affiliated corporation if (isset($affiliation['corporation_id']) && $affiliation['corporation_id'] === $user->character->corporation_id && ! isset($affiliation['corporation_title'])) { return true; } //Check if character is in an affiliated alliance if(isset($affiliation['alliance_id']) && $affiliation['alliance_id'] === $user->character->alliance_id) return true; } } Avoid too many `return` statements within this method. return false; } public function children() { return $this->belongsToMany(SeatGroup::class, 'seatgroup_seatgroups', 'parent_id', 'child_id'); }}