/** * Handle the command. */ public function handle() { $model = $this->builder->getModel(); /* * If the builder has an entries handler * then call it through the container and * let it load the entries itself. */ if ($handler = $this->builder->getTreeOption('entries')) { app()->call($handler, ['builder' => $this->builder]); return; } $entries = $this->builder->getTreeEntries(); /* * If the entries have already been set on the * tree then return. Nothing to do here. * * If the model is not set then they need * to load the tree entries themselves. */ if (!$entries->isEmpty() || !$model) { return; } /* * Resolve the model out of the container. */ $repository = $this->builder->getTreeRepository(); /* * If the repository is an instance of * TreeRepositoryInterface use it. */ if ($repository instanceof TreeRepositoryInterface) { $this->builder->setTreeEntries($repository->get($this->builder)); } }
/** * Build the items. * * @param TreeBuilder $builder */ public function build(TreeBuilder $builder) { foreach ($builder->getTreeEntries() as $entry) { $segments = $this->segments->build($builder, $entry); $buttons = $this->buttons->build($builder, $entry); $buttons = $buttons->enabled(); $id = $entry->getId(); $parent = $entry->{$builder->getTreeOption('parent_segment', 'parent_id')}; $item = compact('builder', 'segments', 'buttons', 'entry', 'parent', 'id'); $item = $this->evaluator->evaluate($item, compact('builder', 'entry')); $builder->addTreeItem($this->factory->make($item)); } }