$nodesToDelete = $_POST['nodesToDelete']; // dynatree returns a 'container' element $dynatreeDict = json_decode($jsonDynatreeDict); $rootArray = get_object_vars($dynatreeDict[0]); if ($logger->isDebugEnabled()) { $aa = var_export($rootArray, true); if (!is_null($nodesToDelete)) { $logger->debug("saveWBS (nodesToDelete=" . implode(',', $nodesToDelete) . ")"); } $logger->debug("saveWBS (root={$root_id}) : \n{$aa}"); } if (!is_null($nodesToDelete)) { foreach ($nodesToDelete as $folder_id) { $f = new WBSElement($folder_id, $root_id); try { $f->delete($root_id); } catch (Exception $e) { // happens if user moved children AND deleted the node. // The node will not be deleted, but at least the rest of the WBS changes // have a chance to be proceeded. $logger->error("Node {$folder_id} not deleted : " . $e->getMessage()); $logger->warn("EXCEPTION stack-trace:\n" . $e->getTraceAsString()); } } } WBSElement::updateFromDynatree($rootArray, $root_id); echo $jsonDynatreeDict; } else { if ($_POST['action'] == 'loadWBS') { try { $root_id = Tools::getSecurePOSTIntValue('wbsRootId');