@@ -1994,14 +1994,36 @@ public function addSummitRegistrationOrder(SummitOrder $summit_order)
19941994 /**
19951995 * @param Summit $summit
19961996 * @return ArrayCollection
1997+ * @throws Exception
19971998 */
1998- public function getSponsorsBySummit (Summit $ summit ): ArrayCollection
1999+ public function getAllowedSponsorsBySummit (Summit $ summit ): ArrayCollection
19992000 {
2000- return new ArrayCollection (
2001- $ this ->sponsor_memberships ->filter (function ($ entity ) use ($ summit ) {
2002- return $ entity ->getSummitId () == $ summit ->getId ();
2003- })->toArray ()
2004- );
2001+ $ sql = <<<SQL
2002+ SELECT su.SponsorID
2003+ FROM Sponsor_Users su
2004+ INNER JOIN Sponsor s ON s.ID = su.SponsorID
2005+ WHERE su.MemberID = :member_id
2006+ AND s.SummitID = :summit_id
2007+ AND (
2008+ JSON_CONTAINS(COALESCE(su.Permissions, '[]'), JSON_QUOTE(:slug_sponsors))
2009+ OR JSON_CONTAINS(COALESCE(su.Permissions, '[]'), JSON_QUOTE(:slug_external))
2010+ )
2011+ SQL ;
2012+ $ ids = $ this ->prepareRawSQL ($ sql , [
2013+ 'member_id ' => $ this ->getId (),
2014+ 'summit_id ' => $ summit ->getId (),
2015+ 'slug_sponsors ' => IGroup::Sponsors,
2016+ 'slug_external ' => IGroup::SponsorExternalUsers,
2017+ ])->executeQuery ()->fetchFirstColumn ();
2018+
2019+ if (empty ($ ids )) {
2020+ return new ArrayCollection ();
2021+ }
2022+
2023+ $ position = array_flip ($ ids );
2024+ $ sponsors = $ this ->getEM ()->getRepository (Sponsor::class)->findBy (['id ' => $ ids ]);
2025+ usort ($ sponsors , fn ($ a , $ b ) => $ position [$ a ->getId ()] <=> $ position [$ b ->getId ()]);
2026+ return new ArrayCollection ($ sponsors );
20052027 }
20062028
20072029 /**
0 commit comments