public function updateNodeAction()
 {
     $manager = $this->getModelManager();
     $profileId = $this->Request()->getParam('profileId', 1);
     $data = $this->Request()->getParam('data', 1);
     $profileRepository = $manager->getRepository(Profile::class);
     $profileEntity = $profileRepository->findOneBy(['id' => $profileId]);
     $profileType = $profileEntity->getType();
     $defaultFields = [];
     $dataManager = $this->plugin->getDataFactory()->createDataManager($profileType);
     if ($dataManager) {
         $defaultFields = $dataManager->getDefaultFields();
     }
     $tree = json_decode($profileEntity->getTree(), 1);
     if (isset($data['parentId'])) {
         $data = [$data];
     }
     $errors = false;
     foreach ($data as &$node) {
         if (!TreeHelper::changeNode($node, $tree, $defaultFields)) {
             $errors = true;
             break;
         }
         // the root cannot be moved or deleted
         if ($node['id'] == 'root') {
             continue;
         }
         $changedNode = TreeHelper::getNodeById($node['id'], $tree);
         if ($node['parentId'] != $changedNode['parentId']) {
             $changedNode['parentId'] = $node['parentId'];
             $changedNode['index'] = $node['index'];
             $changedNode['type'] = $node['type'];
             if (!TreeHelper::deleteNode($node, $tree)) {
                 $errors = true;
                 break;
             } elseif (!TreeHelper::moveNode($changedNode, $tree)) {
                 $errors = true;
                 break;
             }
         }
     }
     $reorderedTree = TreeHelper::reorderTree($tree);
     $profileEntity->setTree(json_encode($reorderedTree));
     $manager->persist($profileEntity);
     $manager->flush();
     if ($errors) {
         $this->View()->assign(['success' => false, 'message' => 'Some of the nodes could not be saved', 'children' => $data]);
     } else {
         $this->View()->assign(['success' => true, 'children' => $data]);
     }
 }