One Hat Cyber Team
Your IP :
172.69.58.131
Server IP :
188.114.97.7
Server :
Linux advantage-project 5.14.0-503.26.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 19 16:28:19 UTC 2025 x86_64
Server Software :
Apache/2.4.62 (Rocky Linux) OpenSSL/3.2.2
PHP Version :
8.3.17
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
var
/
www
/
htmlOld
/
vendor
/
kalnoy
/
nestedset
/
src
/
View File Name :
Collection.php
<?php namespace Kalnoy\Nestedset; use Illuminate\Database\Eloquent\Collection as BaseCollection; use Illuminate\Database\Eloquent\Model; class Collection extends BaseCollection { /** * Fill `parent` and `children` relationships for every node in the collection. * * This will overwrite any previously set relations. * * @return $this */ public function linkNodes() { if ($this->isEmpty()) return $this; $groupedNodes = $this->groupBy($this->first()->getParentIdName()); /** @var NodeTrait|Model $node */ foreach ($this->items as $node) { if ( ! $node->getParentId()) { $node->setRelation('parent', null); } $children = $groupedNodes->get($node->getKey(), [ ]); /** @var Model|NodeTrait $child */ foreach ($children as $child) { $child->setRelation('parent', $node); } $node->setRelation('children', BaseCollection::make($children)); } return $this; } /** * Build a tree from a list of nodes. Each item will have set children relation. * * To successfully build tree "id", "_lft" and "parent_id" keys must present. * * If `$root` is provided, the tree will contain only descendants of that node. * * @param mixed $root * * @return Collection */ public function toTree($root = false) { if ($this->isEmpty()) { return new static; } $this->linkNodes(); $items = [ ]; $root = $this->getRootNodeId($root); /** @var Model|NodeTrait $node */ foreach ($this->items as $node) { if ($node->getParentId() == $root) { $items[] = $node; } } return new static($items); } /** * @param mixed $root * * @return int */ protected function getRootNodeId($root = false) { if (NestedSet::isNode($root)) { return $root->getKey(); } if ($root !== false) { return $root; } // If root node is not specified we take parent id of node with // least lft value as root node id. $leastValue = null; /** @var Model|NodeTrait $node */ foreach ($this->items as $node) { if ($leastValue === null || $node->getLft() < $leastValue) { $leastValue = $node->getLft(); $root = $node->getParentId(); } } return $root; } /** * Build a list of nodes that retain the order that they were pulled from * the database. * * @param bool $root * * @return static */ public function toFlatTree($root = false) { $result = new static; if ($this->isEmpty()) return $result; $groupedNodes = $this->groupBy($this->first()->getParentIdName()); return $result->flattenTree($groupedNodes, $this->getRootNodeId($root)); } /** * Flatten a tree into a non recursive array. * * @param Collection $groupedNodes * @param mixed $parentId * * @return $this */ protected function flattenTree(self $groupedNodes, $parentId) { foreach ($groupedNodes->get($parentId, []) as $node) { $this->push($node); $this->flattenTree($groupedNodes, $node->getKey()); } return $this; } }