diff --git a/src/applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php b/src/applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php --- a/src/applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php +++ b/src/applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php @@ -99,15 +99,20 @@ $versions = mpull($versions, null, 'getDevicePHID'); - foreach ($bindings as $binding_group) { - $all_disabled = true; - foreach ($binding_group as $binding) { - if (!$binding->getIsDisabled()) { - $all_disabled = false; - break; - } - } + // List enabled devices first, then sort devices in each group by name. + $sort = array(); + foreach ($bindings as $key => $binding_group) { + $all_disabled = $this->isDisabledGroup($binding_group); + + $sort[$key] = id(new PhutilSortVector()) + ->addInt($all_disabled ? 1 : 0) + ->addString(head($binding_group)->getDevice()->getName()); + } + $sort = msortv($sort, 'getSelf'); + $bindings = array_select_keys($bindings, array_keys($sort)) + $bindings; + foreach ($bindings as $binding_group) { + $all_disabled = $this->isDisabledGroup($binding_group); $any_binding = head($binding_group); if ($all_disabled) { @@ -228,4 +233,16 @@ return $this->newBox(pht('Cluster Status'), $table); } + private function isDisabledGroup(array $binding_group) { + assert_instances_of($binding_group, 'AlmanacBinding'); + + foreach ($binding_group as $binding) { + if (!$binding->getIsDisabled()) { + return false; + } + } + + return true; + } + }