feedback = new ArrayCollection(); $this->groups = new ArrayCollection(); $this->affiliations = new ArrayCollection(); $this->team_memberships = new ArrayCollection(); $this->favorites_summit_events = new ArrayCollection(); } /** * @return Affiliation[] */ public function getAffiliations(){ return $this->affiliations; } /** * @return Affiliation[] */ public function getCurrentAffiliations(){ $criteria = Criteria::create() ->where(Criteria::expr()->eq("is_current", true)) ->andWhere(Criteria::expr()->eq("end_date", null)) ->orderBy([ "start_date" => Criteria::ASC, ]); return $this->affiliations->matching($criteria); } /** * @return Group[] */ public function getGroups() { return $this->groups; } /** * @return ChatTeamMember[] */ public function getTeamMemberships() { return $this->team_memberships; } /** * @param ChatTeamMember[] $team_memberships */ public function setTeamMemberships($team_memberships) { $this->team_memberships = $team_memberships; } /** * @param mixed $groups */ public function setGroups($groups) { $this->groups = $groups; } /** * @ORM\ManyToMany(targetEntity="models\main\Group", inversedBy="members") * @ORM\JoinTable(name="Group_Members", * joinColumns={@ORM\JoinColumn(name="MemberID", referencedColumnName="ID")}, * inverseJoinColumns={@ORM\JoinColumn(name="GroupID", referencedColumnName="ID")} * ) * @var Group[] */ private $groups; /** * @ORM\OneToMany(targetEntity="ChatTeamMember", mappedBy="member", cascade={"persist"}, orphanRemoval=true) * @var ChatTeamMember[] */ private $team_memberships; /** * @return SummitEvent[] */ public function getFavoritesSummitEvents() { return $this->favorites_summit_events; } /** * @param SummitEvent[] $favorites_summit_events */ public function setFavoritesSummitEvents($favorites_summit_events) { $this->favorites_summit_events = $favorites_summit_events; } /** * @ORM\ManyToMany(targetEntity="models\summit\SummitEvent") * @ORM\JoinTable(name="Member_FavoriteSummitEvents", * joinColumns={@ORM\JoinColumn(name="MemberID", referencedColumnName="ID")}, * inverseJoinColumns={@ORM\JoinColumn(name="SummitEventID", referencedColumnName="ID")} * ) * @var SummitEvent[] */ private $favorites_summit_events; /** * @return string */ public function getBio() { return $this->bio; } /** * @return string */ public function getLinkedInProfile() { return $this->linked_in_profile; } /** * @return string */ public function getIrcHandle() { return $this->irc_handle; } /** * @return string */ public function getTwitterHandle() { return $this->twitter_handle; } /** * @ORM\ManyToOne(targetEntity="models\main\File") * @ORM\JoinColumn(name="PhotoID", referencedColumnName="ID") * @var File */ private $photo; /** * @ORM\Column(name="FirstName", type="string") * @var string */ private $first_name; /** * @ORM\Column(name="Bio", type="string") * @var string */ private $bio; /** * @ORM\Column(name="State", type="string") * @var string */ private $state; /** * @return string */ public function getState() { return $this->state; } /** * @param string $state */ public function setState($state) { $this->state = $state; } /** * @return string */ public function getCountry() { return $this->country; } /** * @param string $country */ public function setCountry($country) { $this->country = $country; } /** * @return string */ public function getSecondEmail() { return $this->second_email; } /** * @param string $second_email */ public function setSecondEmail($second_email) { $this->second_email = $second_email; } /** * @return string */ public function getThirdEmail() { return $this->third_email; } /** * @param string $third_email */ public function setThirdEmail($third_email) { $this->third_email = $third_email; } /** * @ORM\Column(name="Country", type="string") * @var string */ private $country; /** * @ORM\Column(name="Email", type="string") * @var string */ private $email; /** * @ORM\Column(name="SecondEmail", type="string") * @var string */ private $second_email; /** * @ORM\Column(name="ThirdEmail", type="string") * @var string */ private $third_email; /** * @ORM\Column(name="EmailVerified", type="boolean") * @var bool */ private $email_verified; /** * @ORM\Column(name="EmailVerifiedDate", type="datetime") * @var \DateTime */ private $email_verified_date; /** * @return string */ public function getEmail() { return $this->email; } /** * @param string $email */ public function setEmail($email) { $this->email = $email; } /** * @return bool */ public function isEmailVerified() { return $this->email_verified; } /** * @param bool $email_verified */ public function setEmailVerified($email_verified) { $this->email_verified = $email_verified; } /** * @return \DateTime */ public function getEmailVerifiedDate() { return $this->email_verified_date; } /** * @param \DateTime $email_verified_date */ public function setEmailVerifiedDate($email_verified_date) { $this->email_verified_date = $email_verified_date; } /** * @return bool */ public function isActive() { return $this->active; } /** * @param bool $active */ public function setActive($active) { $this->active = $active; } /** * @ORM\Column(name="Active", type="boolean") * @var bool */ private $active; /** * @ORM\Column(name="LinkedInProfile", type="string") * @var string */ private $linked_in_profile; /** * @ORM\Column(name="IRCHandle", type="string") * @var string */ private $irc_handle; /** * @ORM\Column(name="TwitterName", type="string") * @var string */ private $twitter_handle; /** * @ORM\Column(name="Gender", type="string") * @var string */ private $gender; /** * @return string */ public function getGender(){ return $this->gender; } /** * @return string */ public function getLastName() { return $this->last_name; } /** * @return string */ public function getFirstName() { return $this->first_name; } /** * @ORM\Column(name="Surname", type="string") * @var string */ private $last_name; /** * @ORM\OneToMany(targetEntity="models\summit\SummitEventFeedback", mappedBy="owner", cascade={"persist"}) * @var SummitEventFeedback[] */ private $feedback; /** * @ORM\OneToMany(targetEntity="Affiliation", mappedBy="owner", cascade={"persist"}) */ private $affiliations; /** * @return File */ public function getPhoto() { return $this->photo; } /** * @param File $photo */ public function setPhoto(File $photo) { $this->photo = $photo; } /** * @return SummitEventFeedback[] */ public function getFeedback(){ return $this->feedback; } /** * @param Summit $summit * @return SummitEventFeedback[] */ public function getFeedbackBySummit(Summit $summit){ return $this->createQueryBuilder() ->select('distinct f') ->from('models\summit\SummitEventFeedback','f') ->join('f.event','e') ->join('f.owner','o') ->join('e.summit','s') ->where('s.id = :summit_id and o.id = :owner_id and e.published = 1') ->setParameter('summit_id', $summit->getId()) ->setParameter('owner_id', $this->getId()) ->getQuery()->getResult(); } /** * @param SummitEvent $event * @return SummitEventFeedback[] */ public function getFeedbackByEvent(SummitEvent $event){ return $this->createQueryBuilder() ->select('distinct f') ->from('models\summit\SummitEventFeedback','f') ->join('f.event','e') ->join('f.owner','o') ->join('e.summit','s') ->where('e.id = :event_id and o.id = :owner_id') ->setParameter('event_id', $event->getId()) ->setParameter('owner_id', $this->getId()) ->getQuery()->getResult(); } /** * @return bool */ public function isAdmin(){ $admin_group = $this->groups->filter(function($entity){ return $entity->getCode() == Group::AdminGroupCode; }); return !is_null($admin_group) && $admin_group != false && $admin_group->count() > 0; } /** * @return int[] */ public function getGroupsIds(){ $ids = []; foreach ($this->getGroups() as $g){ $ids[] = intval($g->getId()); } return $ids; } /** * @return string[] */ public function getGroupsCodes(){ $codes = []; foreach ($this->getGroups() as $g){ $codes[] = $g->getCode(); } return $codes; } /** * @param SummitEvent $event * @throws ValidationException */ public function addFavoriteSummitEvent(SummitEvent $event){ if($this->isOnFavorite($event)) throw new ValidationException ( sprintf('Event %s already belongs to member %s favorites.', $event->getId(), $this->getId()) ); if(!$event->isPublished()) throw new ValidationException ( sprintf('Event %s is not published', $event->getId()) ); $this->favorites_summit_events->add($event); } /** * @param SummitEvent $event * @return bool */ public function isOnFavorite(SummitEvent $event){ $sql = <<prepareRawSQL($sql); $stmt->execute([ 'member_id' => $this->getId(), 'event_id' => $event->getId() ]); $res = $stmt->fetchAll(\PDO::FETCH_COLUMN); return count($res) > 0 ? intval($res[0]) > 0 : false; } /** * @param SummitEvent $event * @throws ValidationException */ public function removeFavoriteSummitEvent(SummitEvent $event){ if(!$this->isOnFavorite($event)){ throw new ValidationException ( sprintf('Event %s does not belongs to member %s favorites.', $event->getId(), $this->getId()) ); } $this->favorites_summit_events->removeElement($event); } /** * @return int[] */ public function getFavoritesEventsIds(){ $sql = <<prepareRawSQL($sql); $stmt->execute(['member_id' => $this->getId()]); return $stmt->fetchAll(\PDO::FETCH_COLUMN); } }