Bristol SU Support Package
LogicAudience.php
Go to the documentation of this file.
1 <?php
2 
4 
10 
14 abstract class LogicAudience
15 {
16 
23  abstract public function audience(Logic $logic);
24 
33  public function userAudience(Logic $logic)
34  {
35  return collect($this->audience($logic))->filter(function(AudienceMember $audienceMember) {
36  return $audienceMember->hasAudience();
37  })->map(function(AudienceMember $audienceMember) {
38  return $audienceMember->user();
39  })->flatten(1)->unique(function(User $user) {
40  return $user->id();
41  })->values();
42  }
43 
50  public function groupAudience(Logic $logic)
51  {
52  return collect($this->audience($logic))->filter(function(AudienceMember $audienceMember) {
53  return $audienceMember->groups()->count() > 0 || $audienceMember->roles()->count() > 0;
54  })->map(function(AudienceMember $audienceMember) {
55  return $audienceMember->groups()->merge($audienceMember->roles()->map(function(Role $role) {
56  return $role->group();
57  }));
58  })->flatten(1)->unique(function(Group $group) {
59  return $group->id();
60  })->values();
61  }
62 
69  public function roleAudience(Logic $logic)
70  {
71  return collect($this->audience($logic))->filter(function(AudienceMember $audienceMember) {
72  return $audienceMember->roles()->count();
73  })->map(function(AudienceMember $audienceMember) {
74  return $audienceMember->roles();
75  })->flatten(1)->unique(function(Role $role) {
76  return $role->id();
77  })->values();
78  }
79 }