. */ declare(strict_types=1); namespace FireflyIII\Support\Form; use FireflyIII\Models\PiggyBank; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; /** * Class PiggyBankForm * * TODO cleanup and describe. */ class PiggyBankForm { use FormSupport; /** * TODO cleanup and describe * * @param string $name * @param mixed $value * @param array|null $options * * @return string */ public function piggyBankList(string $name, $value = null, array $options = null): string { // make repositories /** @var PiggyBankRepositoryInterface $repository */ $repository = app(PiggyBankRepositoryInterface::class); $piggyBanks = $repository->getPiggyBanksWithAmount(); $title = (string) trans('firefly.default_group_title_name'); $array = []; $subList = [ 0 => [ 'group' => [ 'title' => $title, ], 'piggies' => [ (string) trans('firefly.none_in_select_list'), ], ], ]; /** @var PiggyBank $piggy */ foreach ($piggyBanks as $piggy) { $group = $piggy->objectGroups->first(); $groupTitle = null; $groupOrder = 0; if (null !== $group) { $groupTitle = $group->title; $groupOrder = $group->order; } $subList[$groupOrder] = $subList[$groupOrder] ?? [ 'group' => [ 'title' => $groupTitle, ], 'piggies' => [], ]; $subList[$groupOrder]['piggies'][$piggy->id] = $piggy->name; } ksort($subList); foreach ($subList as $info) { $groupTitle = $info['group']['title']; $array[$groupTitle] = $info['piggies']; } return $this->select($name, $array, $value, $options); } }