'first_name:json_string', 'LastName' => 'last_name:json_string', 'Gender' => 'gender:json_string', 'Bio' => 'bio:json_string', 'LinkedInProfile' => 'linked_in:json_string', 'IrcHandle' => 'irc:json_string', 'TwitterHandle' => 'twitter:json_string', 'State' => 'state:json_string', 'Country' => 'country:json_string', ]; protected static $allowed_relations = [ 'groups', 'affiliations', ]; /** * @param null $expand * @param array $fields * @param array $relations * @param array $params * @return array */ public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array()) { $member = $this->object; if(!$member instanceof Member) return []; if(!count($relations)) $relations = $this->getAllowedRelations(); $values = parent::serialize($expand, $fields, $relations, $params); $values['pic'] = Config::get("server.assets_base_url", 'https://www.openstack.org/'). 'profile_images/members/'. $member->getId(); if(in_array('groups', $relations)) $values['groups'] = $member->getGroupsIds(); if(in_array('affiliations', $relations)){ $res = []; foreach ($member->getCurrentAffiliations() as $affiliation){ $res[] = SerializerRegistry::getInstance() ->getSerializer($affiliation) ->serialize('organization'); } $values['affiliations'] = $res; } if (!empty($expand)) { $exp_expand = explode(',', $expand); foreach ($exp_expand as $relation) { switch (trim($relation)) { case 'groups': { if(!in_array('groups', $relations)) break; $groups = []; unset($values['groups']); foreach ($member->getGroups() as $g) { $groups[] = SerializerRegistry::getInstance()->getSerializer($g)->serialize(null, [], ['none']); } $values['groups'] = $groups; } break; } } } return $values; } }