From 03a0b185ac6636f5ae104764da3648185df0f30a Mon Sep 17 00:00:00 2001 From: Jules Date: Thu, 21 Nov 2024 15:08:42 +0100 Subject: [PATCH] Fixes php 8.4 deprecation warnings like: "Implicitly marking parameter ... as nullable is deprecated, the explicit nullable type must be used instead in ..." Example Warning: PHP Deprecated: Kalnoy\Nestedset\NodeTrait::create(): Implicitly marking parameter $parent as nullable is deprecated, the explicit nullable type must be used instead in /var/www/html/vendor/kalnoy/nestedset/src/NodeTrait.php on line 754 And fixes "Class "Laravel\SerializableClosure\Support\ReflectionClosure" not found" when running the tests. --- composer.json | 3 ++- src/NodeTrait.php | 17 +++++------------ src/QueryBuilder.php | 14 +++++++------- tests/NodeTest.php | 4 ++-- 4 files changed, 16 insertions(+), 22 deletions(-) diff --git a/composer.json b/composer.json index 6f9ccba..5f85d6b 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,8 @@ "php": "^7.2.5|^8.0", "illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0", "illuminate/database": "^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/events": "^7.0|^8.0|^9.0|^10.0|^11.0" + "illuminate/events": "^7.0|^8.0|^9.0|^10.0|^11.0", + "laravel/serializable-closure": "^2.0" }, "autoload": { "psr-4": { diff --git a/src/NodeTrait.php b/src/NodeTrait.php index c406ed8..38db1cb 100644 --- a/src/NodeTrait.php +++ b/src/NodeTrait.php @@ -671,7 +671,7 @@ public function newEloquentBuilder($query) * * @return QueryBuilder */ - public function newNestedSetQuery($table = null) + public function newNestedSetQuery(?string $table = null) { $builder = $this->usesSoftDelete() ? $this->withTrashed() @@ -681,22 +681,19 @@ public function newNestedSetQuery($table = null) } /** - * @param string $table - * * @return QueryBuilder */ - public function newScopedQuery($table = null) + public function newScopedQuery(?string $table = null) { return $this->applyNestedSetScope($this->newQuery(), $table); } /** * @param mixed $query - * @param string $table * * @return mixed */ - public function applyNestedSetScope($query, $table = null) + public function applyNestedSetScope($query, ?string $table = null) { if ( ! $scoped = $this->getScopeAttributes()) { return $query; @@ -748,10 +745,8 @@ public function newCollection(array $models = array()) * {@inheritdoc} * * Use `children` key on `$attributes` to create child nodes. - * - * @param self $parent */ - public static function create(array $attributes = [], self $parent = null) + public static function create(array $attributes = [], self|null $parent = null) { $children = Arr::pull($attributes, 'children'); @@ -1221,11 +1216,9 @@ protected function isSameScope(self $node): bool } /** - * @param array|null $except - * * @return \Illuminate\Database\Eloquent\Model */ - public function replicate(array $except = null) + public function replicate(?array $except = null) { $defaults = [ $this->getParentIdName(), diff --git a/src/QueryBuilder.php b/src/QueryBuilder.php index 10edb27..65bf7fa 100644 --- a/src/QueryBuilder.php +++ b/src/QueryBuilder.php @@ -188,7 +188,7 @@ public function ancestorsAndSelf($id, array $columns = [ '*' ]) * * @return $this */ - public function whereNodeBetween($values, $boolean = 'and', $not = false, $query = null) + public function whereNodeBetween($values, $boolean = 'and', $not = false, ?Query $query = null) { ($query ?? $this->query)->whereBetween($this->model->getTable() . '.' . $this->model->getLftName(), $values, $boolean, $not); @@ -861,7 +861,7 @@ public function isBroken() * * @return int The number of changed nodes */ - public function fixTree($root = null) + public function fixTree(?Model $root = null) { $columns = [ $this->model->getKeyName(), @@ -899,7 +899,7 @@ public function fixSubtree($root) * * @return int */ - protected function fixNodes(array &$dictionary, $parent = null) + protected function fixNodes(array &$dictionary, ?Model $parent = null) { $parentId = $parent ? $parent->getKey() : null; $cut = $parent ? $parent->getLft() + 1 : 1; @@ -941,7 +941,7 @@ protected function fixNodes(array &$dictionary, $parent = null) * @internal param int $fixed */ protected static function reorderNodes( - array &$dictionary, array &$updated, $parentId = null, $cut = 1 + array &$dictionary, array &$updated, null|int|string $parentId = null, $cut = 1 ) { if ( ! isset($dictionary[$parentId])) { return $cut; @@ -973,11 +973,11 @@ protected static function reorderNodes( * @param array $data * @param bool $delete Whether to delete nodes that exists but not in the data * array - * @param null $root + * @param ?Model|NodeTrait $root * * @return int */ - public function rebuildTree(array $data, $delete = false, $root = null) + public function rebuildTree(array $data, $delete = false, ?Model $root = null) { if ($this->model->usesSoftDelete()) { $this->withTrashed(); @@ -1084,7 +1084,7 @@ protected function buildRebuildDictionary(array &$dictionary, * * @return $this */ - public function applyNestedSetScope($table = null) + public function applyNestedSetScope(?string $table = null) { return $this->model->applyNestedSetScope($this, $table); } diff --git a/tests/NodeTest.php b/tests/NodeTest.php index 3b0831a..c5ef004 100644 --- a/tests/NodeTest.php +++ b/tests/NodeTest.php @@ -82,7 +82,7 @@ public function assertTreeNotBroken($table = 'categories') $this->assertEquals(array('errors' => null), $actual, "The tree structure of $table is broken!"); } - public function dumpTree($items = null) + public function dumpTree(?array $items = null) { if ( ! $items) $items = Category::withTrashed()->defaultOrder()->get(); @@ -997,4 +997,4 @@ public function testReplication() function all($items) { return is_array($items) ? $items : $items->all(); -} \ No newline at end of file +}