Updated member serializer

Added track_chairs collection

Change-Id: I4c1c1abc15bdf4909525acdcea205af1f2fa4632
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet
2021-03-01 14:25:20 -03:00
parent 20e20a4c42
commit 434da847b5
5 changed files with 70 additions and 4 deletions

View File

@@ -46,6 +46,7 @@ final class OwnMemberSerializer extends AbstractMemberSerializer
'rsvp',
'sponsor_memberships',
'legal_agreements',
'track_chairs',
];
private static $expand_group_events = [
@@ -146,6 +147,14 @@ final class OwnMemberSerializer extends AbstractMemberSerializer
$values['legal_agreements'] = $res;
}
if(in_array('track_chairs', $relations)){
$res = [];
foreach ($member->getTrackChairs() as $track_chair){
$res[] = intval($track_chair->getId());
}
$values['track_chairs'] = $res;
}
if (!empty($expand)) {
foreach (explode(',', $expand) as $relation) {
$relation = trim($relation);
@@ -236,13 +245,24 @@ final class OwnMemberSerializer extends AbstractMemberSerializer
if(is_null($summit)) break;
$res = [];
foreach ($member->getLegalAgreements() as $agreement){
$rsvps[] = SerializerRegistry::getInstance()
$res[] = SerializerRegistry::getInstance()
->getSerializer($agreement)
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
}
$values['legal_agreements'] = $res;
}
break;
case 'track_chairs':{
if(!in_array('track_chairs', $relations)) break;
$res = [];
foreach ($member->getTrackChairs() as $trackChair){
$res[] = SerializerRegistry::getInstance()
->getSerializer($trackChair)
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
}
$values['track_chairs'] = $res;
}
break;
}
}
}

View File

@@ -35,6 +35,7 @@ use models\summit\SummitEvent;
use models\summit\SummitEventFeedback;
use models\summit\SummitOrder;
use models\summit\SummitRoomReservation;
use models\summit\SummitTrackChair;
use models\utils\SilverstripeBaseModel;
use Doctrine\ORM\Mapping AS ORM;
@@ -297,6 +298,12 @@ class Member extends SilverstripeBaseModel
*/
protected $summit_attendance_metrics;
/**
* @ORM\OneToMany(targetEntity="models\summit\SummitTrackChair", mappedBy="member", cascade={"persist","remove"}, orphanRemoval=true)
* @var SummitTrackChair[]
*/
private $track_chairs;
/**
* Member constructor.
*/
@@ -324,6 +331,7 @@ class Member extends SilverstripeBaseModel
$this->summit_permission_groups = new ArrayCollection();
$this->summit_attendance_metrics = new ArrayCollection();
$this->legal_agreements = new ArrayCollection();
$this->track_chairs = new ArrayCollection();
}
/**
@@ -1868,4 +1876,28 @@ SQL;
return $this->belongsToGroup(IGroup::FoundationMembers) && $this->legal_agreements->count() > 0;
}
/**
* @param SummitTrackChair $trackChair
*/
public function addTrackChair(SummitTrackChair $trackChair){
if($this->track_chairs->contains($trackChair)) return;
$this->track_chairs->add($trackChair);
$trackChair->setMember($this);
}
/**
* @param SummitTrackChair $trackChair
*/
public function removeTrackChair(SummitTrackChair $trackChair){
if(!$this->track_chairs->contains($trackChair)) return;
$this->track_chairs->removeElement($trackChair);
$trackChair->clearMember();
}
/**
* @return ArrayCollection|SummitTrackChair[]
*/
public function getTrackChairs(){
return $this->track_chairs;
}
}

View File

@@ -34,7 +34,7 @@ class SummitTrackChair extends SilverstripeBaseModel
{
use SummitOwned;
/**
* @ORM\ManyToOne(targetEntity="models\main\Member")
* @ORM\ManyToOne(targetEntity="models\main\Member", inversedBy="track_chairs")
* @ORM\JoinColumn(name="MemberID", referencedColumnName="ID", onDelete="SET NULL")
* @var Member
*/
@@ -146,4 +146,8 @@ class SummitTrackChair extends SilverstripeBaseModel
parent::__construct();
$this->categories = new ArrayCollection();
}
public function clearMember():void{
$this->member = null;
}
}

View File

@@ -5122,7 +5122,7 @@ SQL;
if(!$trackChair) {
$trackChair = new SummitTrackChair();
$trackChair->setMember($member);
$member->addTrackChair($trackChair);
$trackChair->setSummit($this);
}

View File

@@ -1,5 +1,7 @@
<?php
use App\Models\Foundation\Main\IGroup;
/**
* Copyright 2016 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,8 +20,16 @@ final class OAuth2MembersApiTest extends ProtectedApiTest
protected function setUp()
{
$this->setCurrentGroup(IGroup::TrackChairs);
parent::setUp();
self::insertTestData();
self::$summit_permission_group->addMember(self::$member);
self::$em->persist(self::$summit);
self::$em->persist(self::$summit_permission_group);
self::$em->flush();
self::$summit->addTrackChair(self::$member, [ self::$defaultTrack ] );
self::$em->persist(self::$summit);
self::$em->flush();
}
public function tearDown()
@@ -155,7 +165,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest
public function testGetMyMember()
{
$params = [
'expand' => 'groups'
'expand' => 'groups,track_chairs'
];
$headers = array("HTTP_Authorization" => " Bearer " . $this->access_token);