(string) config('projectsend.version'), 'edition' => $capabilities->edition()->value, 'capabilities' => $capabilities->enabledKeys(), 'seats' => [ 'staff' => [ 'used' => $seats->staffUsed(), // null is unlimited, and is emitted as null rather than // as 0 or as an absent key: a reader that mistook one // for the other would report an installation selling // unlimited accounts as one that may hold none. 'limit' => $seats->staffLimit(), ], 'clients' => [ 'used' => $seats->clientUsed(), 'limit' => $seats->clientLimit(), ], ], ]; if ($this->option('json')) { $this->line((string) json_encode($status, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); return self::SUCCESS; } $this->line("ProjectSend {$status['version']} ({$status['edition']})"); $this->line('Capabilities: '.(implode(', ', $status['capabilities']) ?: 'none')); $this->line('Staff seats: '.$this->seatLine($status['seats']['staff'])); $this->line('Clients: '.$this->seatLine($status['seats']['clients'])); return self::SUCCESS; } /** * @param array{used: int, limit: int|null} $seat */ private function seatLine(array $seat): string { return $seat['limit'] === null ? "{$seat['used']} of unlimited" : "{$seat['used']} of {$seat['limit']}"; } }