/** * Return data about a particular {@link Member} of the stack for use in API response. * Notes: * 1) This method returns null instead of an array if the member doesn't exists anymore * 2) 'role' can be null in the response. This is the case of an admin, or an operations * user who can create the deployment but is not part of the stack roles. * * @param \DNProject $project * @param int $memberID * @return null|array */ public function getStackMemberData(\DNProject $project, $memberID) { if (empty(self::$_cache_project_members[$project->ID])) { self::$_cache_project_members[$project->ID] = $project->listMembers(); } // we cache all member lookup, even the false results if (!isset(self::$_cache_members[$memberID])) { self::$_cache_members[$memberID] = \Member::get()->byId($memberID); } if (!self::$_cache_members[$memberID]) { return null; } $role = null; foreach (self::$_cache_project_members[$project->ID] as $stackMember) { if ($stackMember['MemberID'] !== $memberID) { continue; } $role = $stackMember['RoleTitle']; } // if an administator is approving, they should be shown as one if ($role === null && \Permission::checkMember(self::$_cache_members[$memberID], 'ADMIN')) { $role = 'Administrator'; } return ['id' => $memberID, 'email' => self::$_cache_members[$memberID]->Email, 'role' => $role, 'name' => self::$_cache_members[$memberID]->getName()]; }