members = new ArrayCollection(); $this->summits = new ArrayCollection(); } /** * @ORM\ManyToMany(targetEntity="models\main\Member", inversedBy="summit_permission_groups") * @ORM\JoinTable(name="SummitAdministratorPermissionGroup_Members", * joinColumns={@ORM\JoinColumn(name="SummitAdministratorPermissionGroupID", referencedColumnName="ID")}, * inverseJoinColumns={@ORM\JoinColumn(name="MemberID", referencedColumnName="ID")} * ) * @var Member[] */ private $members; /** * @ORM\ManyToMany(targetEntity="models\summit\Summit", inversedBy="permission_groups") * @ORM\JoinTable(name="SummitAdministratorPermissionGroup_Summits", * joinColumns={@ORM\JoinColumn(name="SummitAdministratorPermissionGroupID", referencedColumnName="ID")}, * inverseJoinColumns={@ORM\JoinColumn(name="SummitID", referencedColumnName="ID")} * ) * @var Summit[] */ private $summits; /** * @param Member $member * @throws ValidationException */ public function addMember(Member $member) { if(!$this->canAddMember($member)){ throw new ValidationException(sprintf("Member %s should belong to following groups (%s)", $member->getId(), implode(",", self::ValidGroups))); } if ($this->members->contains($member)) return; $this->members->add($member); $member->add2SummitAdministratorPermissionGroup($this); } public function canAddMember(Member $member):bool{ foreach (self::ValidGroups as $slug){ if($member->isOnGroup($slug, true)) return true; } return false; } /** * @param Member $member */ public function removeMember(Member $member) { if (!$this->members->contains($member)) return; $this->members->removeElement($member); $member->removeFromSummitAdministratorPermissionGroup($this); } public function getMembers() { return $this->members; } public function getMembersIds(): array { $sql = <<prepareRawSQL($sql); $stmt->execute( [ 'group_id' => $this->getId(), ] ); return $stmt->fetchAll(\PDO::FETCH_COLUMN); } /** * @param Summit $summit */ public function addSummit(Summit $summit) { if ($this->summits->contains($summit)) return; $this->summits->add($summit); $summit->add2SummitAdministratorPermissionGroup($this); } public function removeSummit(Summit $summit) { if (!$this->summits->contains($summit)) return; $this->summits->removeElement($summit); $summit->removeFromSummitAdministratorPermissionGroup($this); } public function getSummits() { return $this->summits; } public function getSummitsIds(): array { $sql = <<prepareRawSQL($sql); $stmt->execute( [ 'group_id' => $this->getId(), ] ); return $stmt->fetchAll(\PDO::FETCH_COLUMN); } /** * @return string */ public function getTitle(): string { return $this->title; } /** * @param string $title */ public function setTitle(string $title): void { $this->title = $title; } public function clearMembers(){ $this->members->clear(); } public function clearSummits(){ $this->summits->clear(); } /** * @param string $groupSlug * @return bool */ public static function isValidGroup(string $groupSlug):bool { return in_array($groupSlug,self::ValidGroups); } /** * @param Member $member * @return bool */ public function hasMember(Member $member):bool{ $criteria = Criteria::create(); $criteria->where(Criteria::expr()->eq('id', $member->getId())); return $this->members->matching($criteria)->count() > 0; } }