diff --git a/src/Controller/TreeController.php b/src/Controller/TreeController.php index daae7729..6482fb82 100644 --- a/src/Controller/TreeController.php +++ b/src/Controller/TreeController.php @@ -33,6 +33,7 @@ use App\Services\Trees\ToolsTreeBuilder; use App\Services\Trees\NodesListBuilder; use App\Services\Trees\TreeViewGenerator; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Routing\Annotation\Route; /** @@ -54,8 +55,7 @@ class TreeController extends AbstractController public function tools(ToolsTreeBuilder $builder) { $tree = $builder->getTree(); - //Ignore null values, to save data - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -65,7 +65,7 @@ class TreeController extends AbstractController public function categoryTree(Category $category = null) { $tree = $this->treeGenerator->getTreeView(Category::class, $category); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -75,7 +75,7 @@ class TreeController extends AbstractController public function footprintTree(Footprint $footprint = null) { $tree = $this->treeGenerator->getTreeView(Footprint::class, $footprint); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -85,7 +85,7 @@ class TreeController extends AbstractController public function locationTree(Storelocation $location = null) { $tree = $this->treeGenerator->getTreeView(Storelocation::class, $location); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -95,7 +95,7 @@ class TreeController extends AbstractController public function manufacturerTree(Manufacturer $manufacturer = null) { $tree = $this->treeGenerator->getTreeView(Manufacturer::class, $manufacturer); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -105,7 +105,7 @@ class TreeController extends AbstractController public function supplierTree(Supplier $supplier = null) { $tree = $this->treeGenerator->getTreeView(Supplier::class, $supplier); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } /** @@ -115,6 +115,6 @@ class TreeController extends AbstractController public function deviceTree(Device $device = null) { $tree = $this->treeGenerator->getTreeView(Device::class, $device, ''); - return $this->json($tree, 200, [], ['skip_null_values' => true]); + return new JsonResponse($tree); } } diff --git a/src/Helpers/Trees/TreeViewNode.php b/src/Helpers/Trees/TreeViewNode.php index 07e72749..d11968b8 100644 --- a/src/Helpers/Trees/TreeViewNode.php +++ b/src/Helpers/Trees/TreeViewNode.php @@ -30,7 +30,7 @@ use App\Helpers\Trees\TreeViewNodeState; * This class represents a node for the bootstrap treeview node. * When you serialize an array of these objects to JSON, you can use the serialized data in data for the treeview. */ -class TreeViewNode +class TreeViewNode implements \JsonSerializable { protected $text; protected $href; @@ -206,4 +206,32 @@ class TreeViewNode return $this; } + + /** + * @inheritDoc + */ + public function jsonSerialize() + { + $ret = [ + 'text' => $this->text + ]; + + if($this->href !== null) { + $ret['href'] = $this->href; + } + + if($this->tags !== null) { + $ret['tags'] = $this->tags; + } + + if($this->nodes !== null) { + $ret['nodes'] = $this->nodes; + } + + if($this->state !== null) { + $ret['state'] = $this->state; + } + + return $ret; + } } diff --git a/src/Helpers/Trees/TreeViewNodeState.php b/src/Helpers/Trees/TreeViewNodeState.php index 146f6a10..8d3008d2 100644 --- a/src/Helpers/Trees/TreeViewNodeState.php +++ b/src/Helpers/Trees/TreeViewNodeState.php @@ -21,7 +21,7 @@ namespace App\Helpers\Trees; -class TreeViewNodeState +class TreeViewNodeState implements \JsonSerializable { /** @var bool|null */ protected $checked = null; @@ -73,4 +73,25 @@ class TreeViewNodeState { $this->selected = $selected; } + + /** + * @inheritDoc + */ + public function jsonSerialize() + { + $ret = []; + if ($this->selected !== null) { + $ret['selected'] = $this->selected; + } + + if($this->disabled !== null) { + $ret['disabled'] = $this->disabled; + } + + if($this->expanded !== null) { + $ret['expanded'] = $this->expanded; + } + + return $ret; + } } diff --git a/src/Twig/AppExtension.php b/src/Twig/AppExtension.php index 9657e749..17208872 100644 --- a/src/Twig/AppExtension.php +++ b/src/Twig/AppExtension.php @@ -106,7 +106,7 @@ class AppExtension extends AbstractExtension { $tree = $this->treeBuilder->getTreeView(\get_class($element), null, $type, $element); - return $this->serializer->serialize($tree, 'json', ['skip_null_values' => true]); + return json_encode($tree); } /**