Bristol SU Support Package
AudienceMemberFactory.php
Go to the documentation of this file.
1 <?php
2 
4 
8 use BristolSU\ControlDB\Contracts\Repositories\Role as RoleRepository;
13 
18 {
19 
27  public function fromUser(User $user): AudienceMember {
28  return new AudienceMember($user);
29  }
30 
37  public function withAccessToResource($resource)
38  {
39  if ($resource instanceof User) {
40  return collect([$this->fromUser($resource)]);
41  }
42  if ($resource instanceof Group) {
43  return $resource->members()->merge(
44  $resource->roles()->map(function(Role $role) {
45  return $role->users();
46  })->values()->flatten(1)
47  )->unique(function($user) {
48  return $user->id();
49  })->map(function($user) {
50  return $this->fromUser($user);
51  });
52  }
53  if ($resource instanceof Role) {
54  return $resource->users()->map(function($user) {
55  return $this->fromUser($user);
56  });
57  }
58  return collect();
59  }
60 
70  public function withAccessToLogicGroupWithResource($resource, Logic $logic)
71  {
72  return $this->withAccessToResource($resource)->map(function(AudienceMember $audienceMember) use ($logic) {
73  $audienceMember->filterForLogic($logic);
74  return $audienceMember;
75  })->filter(function(AudienceMember $audienceMember) use ($resource) {
76  // Make sure the audience member has an audience with the given resource
77  return ($audienceMember->hasAudience() && $resource instanceof User)
78  || ($audienceMember->hasAudience() && $resource instanceof Group && (
79  in_array($resource->id(), $audienceMember->groups()->pluck('id')->toArray())
80  || in_array($resource->id(), $audienceMember->roles()->pluck('group.id')->toArray())
81  ))
82  || ($audienceMember->hasAudience() && $resource instanceof Role &&
83  in_array($resource->id(), $audienceMember->roles()->pluck('id')->toArray()));
84  })->values();
85  }
86 
87 }