From aeb15ac0caf13ba0e92215a5133a66e0048eeff1 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Fri, 3 Mar 2017 16:46:39 -0300 Subject: [PATCH] Added Affiliation data to speaker json Change-Id: I46286e55c8d9a67a267276b5f18025d1adc87408 --- .../PresentationSpeakerSerializer.php | 10 ++++++++++ app/ModelSerializers/SerializerRegistry.php | 11 ++++++----- app/Models/Foundation/Main/Member.php | 17 ++++++++++++++++- tests/OAuth2SummitApiTest.php | 2 +- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/app/ModelSerializers/PresentationSpeakerSerializer.php b/app/ModelSerializers/PresentationSpeakerSerializer.php index f7699da0..8c6603b9 100644 --- a/app/ModelSerializers/PresentationSpeakerSerializer.php +++ b/app/ModelSerializers/PresentationSpeakerSerializer.php @@ -80,6 +80,16 @@ class PresentationSpeakerSerializer extends SilverStripeSerializer $values['last_name'] = $last_name; } + + $affiliations = []; + if($speaker->hasMember()) { + $member = $speaker->getMember(); + foreach ($member->getCurrentAffiliations() as $affiliation) { + $affiliations[] = SerializerRegistry::getInstance()->getSerializer($affiliation)->serialize('organization'); + } + } + $values['affiliations'] = $affiliations; + if (!empty($expand)) { foreach (explode(',', $expand) as $relation) { switch (trim($relation)) { diff --git a/app/ModelSerializers/SerializerRegistry.php b/app/ModelSerializers/SerializerRegistry.php index 6bcf4ec4..1c5c3e1f 100644 --- a/app/ModelSerializers/SerializerRegistry.php +++ b/app/ModelSerializers/SerializerRegistry.php @@ -89,16 +89,17 @@ final class SerializerRegistry $this->registry['SummitLocationImage'] = SummitLocationImageSerializer::class; // member - $this->registry['Member'] = [ + $this->registry['Member'] = [ self::SerializerType_Public => PublicMemberSerializer::class, self::SerializerType_Private => OwnMemberSerializer::class ]; - $this->registry['Group'] = GroupSerializer::class; - $this->registry['Affiliation'] = AffiliationSerializer::class; - $this->registry['Organization'] = OrganizationSerializer::class; + + $this->registry['Group'] = GroupSerializer::class; + $this->registry['Affiliation'] = AffiliationSerializer::class; + $this->registry['Organization'] = OrganizationSerializer::class; // push notification - $this->registry['SummitPushNotification'] = SummitPushNotificationSerializer::class; + $this->registry['SummitPushNotification'] = SummitPushNotificationSerializer::class; // teams $this->registry['ChatTeam'] = ChatTeamSerializer::class; diff --git a/app/Models/Foundation/Main/Member.php b/app/Models/Foundation/Main/Member.php index f775c57b..0a460c8d 100644 --- a/app/Models/Foundation/Main/Member.php +++ b/app/Models/Foundation/Main/Member.php @@ -13,6 +13,7 @@ **/ use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\Mapping as ORM; use models\exceptions\ValidationException; use models\summit\Summit; @@ -48,6 +49,20 @@ class Member extends SilverstripeBaseModel 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[] */ @@ -446,7 +461,7 @@ class Member extends SilverstripeBaseModel ->select('distinct f') ->from('models\summit\SummitEventFeedback','f') ->join('f.event','e') - ->join('f.owner','o') + ->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()) diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index 3db6174e..000ef7c0 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -128,7 +128,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest ); $content = $response->getContent(); - $summit = json_decode($content); + $summit = json_decode($content); $this->assertTrue(!is_null($summit)); $this->assertTrue(count($summit->schedule) > 0); $this->assertResponseStatus(200);