From 368df2b78628d7a8ef5d92327540a892590f4233 Mon Sep 17 00:00:00 2001
From: Akex <a.plokhikh.sas@gmail.com>
Date: Mon, 8 Apr 2024 23:29:22 +0500
Subject: [PATCH] make prepareMenu

---
 src/Controller/PrepareMenuController.php | 22 +++++++++++++++++++
 src/Repository/PrepareMenuRepository.php | 27 ++++++++++++++++++++++++
 2 files changed, 49 insertions(+)
 create mode 100644 src/Controller/PrepareMenuController.php
 create mode 100644 src/Repository/PrepareMenuRepository.php

diff --git a/src/Controller/PrepareMenuController.php b/src/Controller/PrepareMenuController.php
new file mode 100644
index 0000000..8f6cfca
--- /dev/null
+++ b/src/Controller/PrepareMenuController.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace App\Controller;
+
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class PrepareMenuController extends AbstractController
+{
+    #[Route('/prepare/menu', name: 'app_prepare_menu')]
+    public function index(Request $request): Response
+    {
+        $array = $request->toArray();
+
+        $return = prepareMenu($array);
+
+        return new JsonResponse($return, Response::HTTP_OK);
+    }
+}
diff --git a/src/Repository/PrepareMenuRepository.php b/src/Repository/PrepareMenuRepository.php
new file mode 100644
index 0000000..ee842c4
--- /dev/null
+++ b/src/Repository/PrepareMenuRepository.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Сгруппировать подразедлы в верхние разделы меню
+ * Дочерние элементы поместить в массив родителя с ключом submenu
+ * Значение под ключом depth определяет уровень раздела
+ * Массив $aMenu всегда начинается с элемента depth = 0, все последующие элементы с depth = 1 являются его дочерними
+ * элементами
+ * @param array $aMenu
+ * @return array
+ */
+function prepareMenu(array $aMenu): array {
+    $returnableAMenu = [];
+    foreach ($aMenu as $menuPoint){
+        $depth = $menuPoint["depth"];
+        if ($depth === 1){
+            $tempArray = array_pop($returnableAMenu);
+            $tempArray['submenu'][] = $menuPoint;
+            $returnableAMenu[] = $tempArray;
+        }
+        else{
+            $returnableAMenu[] = $menuPoint;
+        }
+
+    }
+
+    return $returnableAMenu;
+}
-- 
GitLab