diff --git a/src/app/Http/Controllers/API/V4/Admin/DomainsController.php b/src/app/Http/Controllers/API/V4/Admin/DomainsController.php --- a/src/app/Http/Controllers/API/V4/Admin/DomainsController.php +++ b/src/app/Http/Controllers/API/V4/Admin/DomainsController.php @@ -51,11 +51,11 @@ } // Process the result - $result = $result->map(function ($domain) { - $data = $domain->toArray(); - $data = array_merge($data, self::domainStatuses($domain)); - return $data; - }); + $result = $result->map( + function ($domain) { + return $this->domainToClient($domain); + } + ); $result = [ 'list' => $result, diff --git a/src/app/Http/Controllers/API/V4/Admin/GroupsController.php b/src/app/Http/Controllers/API/V4/Admin/GroupsController.php --- a/src/app/Http/Controllers/API/V4/Admin/GroupsController.php +++ b/src/app/Http/Controllers/API/V4/Admin/GroupsController.php @@ -37,16 +37,11 @@ } // Process the result - $result = $result->map(function ($group) { - $data = [ - 'id' => $group->id, - 'email' => $group->email, - 'name' => $group->name, - ]; - - $data = array_merge($data, self::groupStatuses($group)); - return $data; - }); + $result = $result->map( + function ($group) { + return $this->groupToClient($group); + } + ); $result = [ 'list' => $result, diff --git a/src/app/Http/Controllers/API/V4/Admin/UsersController.php b/src/app/Http/Controllers/API/V4/Admin/UsersController.php --- a/src/app/Http/Controllers/API/V4/Admin/UsersController.php +++ b/src/app/Http/Controllers/API/V4/Admin/UsersController.php @@ -128,9 +128,7 @@ // Process the result $result = $result->map( function ($user) { - $data = $user->toArray(); - $data = array_merge($data, self::userStatuses($user)); - return $data; + return $this->userToClient($user, true); } ); diff --git a/src/app/Http/Controllers/API/V4/DomainsController.php b/src/app/Http/Controllers/API/V4/DomainsController.php --- a/src/app/Http/Controllers/API/V4/DomainsController.php +++ b/src/app/Http/Controllers/API/V4/DomainsController.php @@ -21,19 +21,17 @@ public function index() { $user = $this->guard()->user(); - $list = []; - foreach ($user->domains() as $domain) { - if (!$domain->isPublic()) { - $data = $domain->toArray(); - $data = array_merge($data, self::domainStatuses($domain)); - $list[] = $data; - } - } - - usort($list, function ($a, $b) { - return strcmp($a['namespace'], $b['namespace']); - }); + $list = \collect($user->domains()) + ->filter(function ($domain) { + return !$domain->isPublic(); + }) + ->map(function ($domain) { + return $this->domainToClient($domain); + }) + ->sortBy('namespace') + ->values() + ->all(); return response()->json($list); } @@ -252,7 +250,7 @@ return $this->errorResponse(403); } - $response = $domain->toArray(); + $response = self::domainToClient($domain, true); // Add hash information to the response $response['hash_text'] = $domain->hash(Domain::HASH_TEXT); @@ -272,8 +270,6 @@ // Entitlements info $response['skus'] = \App\Entitlement::objectEntitlementsSummary($domain); - $response = array_merge($response, self::domainStatuses($domain)); - // Some basic information about the domain wallet $wallet = $domain->wallet(); $response['wallet'] = $wallet->toArray(); @@ -431,6 +427,32 @@ ]; } + /** + * Prepare a domain for the UI. + * + * @param \App\Domain $domain Domain object + * @param bool $full Include all domain properties + * + * @return array Domain info + */ + protected static function domainToClient(Domain $domain, bool $full = false): array + { + if ($full) { + $result = $domain->toArray(); + } else { + $result = [ + 'id' => $domain->id, + 'namespace' => $domain->namespace, + 'status' => $domain->status, + 'type' => $domain->type, + ]; + } + + $result = array_merge($result, self::domainStatuses($domain)); + + return $result; + } + /** * Domain status (extended) information. * diff --git a/src/app/Http/Controllers/API/V4/GroupsController.php b/src/app/Http/Controllers/API/V4/GroupsController.php --- a/src/app/Http/Controllers/API/V4/GroupsController.php +++ b/src/app/Http/Controllers/API/V4/GroupsController.php @@ -75,15 +75,8 @@ $user = $this->guard()->user(); $result = $user->groups()->orderBy('name')->orderBy('email')->get() - ->map(function (Group $group) { - $data = [ - 'id' => $group->id, - 'email' => $group->email, - 'name' => $group->name, - ]; - - $data = array_merge($data, self::groupStatuses($group)); - return $data; + ->map(function ($group) { + return $this->groupToClient($group); }); return response()->json($result); @@ -139,9 +132,8 @@ return $this->errorResponse(403); } - $response = $group->toArray(); + $response = self::groupToClient($group, true); - $response = array_merge($response, self::groupStatuses($group)); $response['statusInfo'] = self::statusInfo($group); // Group configuration, e.g. sender_policy @@ -469,6 +461,32 @@ ]; } + /** + * Convert a group object to an array for the UI. + * + * @param \App\Group $group Group object + * @param bool $full Add all group properties, e.g. members + * + * @return array Statuses array + */ + public static function groupToClient(Group $group, bool $full = false): array + { + if ($full) { + $response = $group->toArray(); + } else { + $response = [ + 'id' => $group->id, + 'email' => $group->email, + 'name' => $group->name, + 'status' => $group->status, + ]; + } + + $response = array_merge($response, self::groupStatuses($group)); + + return $response; + } + /** * Validate an email address for use as a group email * diff --git a/src/app/Http/Controllers/API/V4/Reseller/DomainsController.php b/src/app/Http/Controllers/API/V4/Reseller/DomainsController.php --- a/src/app/Http/Controllers/API/V4/Reseller/DomainsController.php +++ b/src/app/Http/Controllers/API/V4/Reseller/DomainsController.php @@ -38,11 +38,11 @@ } // Process the result - $result = $result->map(function ($domain) { - $data = $domain->toArray(); - $data = array_merge($data, self::domainStatuses($domain)); - return $data; - }); + $result = $result->map( + function ($domain) { + return $this->domainToClient($domain); + } + ); $result = [ 'list' => $result, diff --git a/src/app/Http/Controllers/API/V4/Reseller/GroupsController.php b/src/app/Http/Controllers/API/V4/Reseller/GroupsController.php --- a/src/app/Http/Controllers/API/V4/Reseller/GroupsController.php +++ b/src/app/Http/Controllers/API/V4/Reseller/GroupsController.php @@ -36,16 +36,11 @@ } // Process the result - $result = $result->map(function ($group) { - $data = [ - 'id' => $group->id, - 'email' => $group->email, - 'name' => $group->name, - ]; - - $data = array_merge($data, self::groupStatuses($group)); - return $data; - }); + $result = $result->map( + function ($group) { + return $this->groupToClient($group); + } + ); $result = [ 'list' => $result, diff --git a/src/app/Http/Controllers/API/V4/Reseller/UsersController.php b/src/app/Http/Controllers/API/V4/Reseller/UsersController.php --- a/src/app/Http/Controllers/API/V4/Reseller/UsersController.php +++ b/src/app/Http/Controllers/API/V4/Reseller/UsersController.php @@ -91,11 +91,11 @@ } // Process the result - $result = $result->map(function ($user) { - $data = $user->toArray(); - $data = array_merge($data, self::userStatuses($user)); - return $data; - }); + $result = $result->map( + function ($user) { + return $this->userToClient($user, true); + } + ); $result = [ 'list' => $result, diff --git a/src/app/Http/Controllers/API/V4/UsersController.php b/src/app/Http/Controllers/API/V4/UsersController.php --- a/src/app/Http/Controllers/API/V4/UsersController.php +++ b/src/app/Http/Controllers/API/V4/UsersController.php @@ -114,9 +114,7 @@ // Process the result $result = $result->map( function ($user) { - $data = $user->toArray(); - $data = array_merge($data, self::userStatuses($user)); - return $data; + return $this->userToClient($user); } ); @@ -521,7 +519,7 @@ */ public static function userResponse(User $user): array { - $response = $user->toArray(); + $response = self::userToClient($user, true); // Settings $response['settings'] = []; @@ -538,8 +536,6 @@ // Status info $response['statusInfo'] = self::statusInfo($user); - $response = array_merge($response, self::userStatuses($user)); - // Add more info to the wallet object output $map_func = function ($wallet) use ($user) { $result = $wallet->toArray(); @@ -585,6 +581,31 @@ ]; } + /** + * Prepare a user information for the UI + * + * @param \App\User $user User object + * @param bool $full Include all user properties + * + * @return array User data as an array + */ + protected static function userToClient(User $user, bool $full = false): array + { + if ($full) { + $response = $user->toArray(); + } else { + $response = [ + 'id' => $user->id, + 'email' => $user->email, + 'status' => $user->status, + ]; + } + + $response = array_merge($response, self::userStatuses($user)); + + return $response; + } + /** * Validate user input *