function repairTree() { $tbl_mdb_names = claro_sql_get_main_tbl(); $tbl_category = $tbl_mdb_names['category']; // get list of all node $sql = " SELECT code, code_P, treePos, name, nb_childs\n FROM `" . $tbl_category . "`\n ORDER BY `treePos`"; $catList = claro_sql_query_fetch_all($sql); $newTreePos = 1; $listSize = count($catList); // foreach node check code_parent, treepos and nbchilds foreach ($catList as $cat) { $newCatList[$cat['code']] = $cat; $parentCatData = get_cat_data(get_cat_id_from_code($cat['code_P'])); if ($cat['treePos'] < $parentCatData['treePos']) { $newCatList[$cat['code']]['newCode_P'] = ' root '; $newCatList[$cat['code']]['newTreePos'] = $listSize--; } else { if (!is_null($cat['code_P']) && !get_cat_id_from_code($cat['code_P'])) { $newCatList[$cat['code']]['newCode_P'] = ' root '; $newCatList[$cat['code']]['newTreePos'] = $listSize--; } else { $newCatList[$cat['code']]['newTreePos'] = $newTreePos++; $newCatList[$cat['code']]['newNb_childs'] = countChild($cat['code']); } } } reset($newCatList); $node_moved = false; // rescan node list and update data if difference was detected. foreach ($newCatList as $cat) { if (isset($cat['newCode_P']) && $cat['code_P'] != $cat['newCode_P']) { $sql = "UPDATE `" . $tbl_category . "` " . ($cat['newCode_P'] == ' root ' ? " SET code_P = null " : " SET code_P = " . (int) $cat['newCode_P']) . " WHERE code = '" . claro_sql_escape($cat['code']) . "'"; $node_moved = true; // repair ownance but brok countchild claro_sql_query($sql); } if (isset($cat['newNb_childs']) && $cat['nb_childs'] != $cat['newNb_childs']) { $sql = "UPDATE `" . $tbl_category . "` " . " SET nb_childs = " . (int) $cat['newNb_childs'] . " WHERE code = '" . claro_sql_escape($cat['code']) . "'"; claro_sql_query($sql); } if ($cat['treePos'] != $cat['newTreePos']) { $sql = "UPDATE `" . $tbl_category . "` " . " SET treePos = " . (int) $cat['newTreePos'] . " WHERE code = '" . claro_sql_escape($cat['code']) . "'"; claro_sql_query($sql); } } if ($node_moved) { return claro_failure::set_failure('node_moved'); } else { return true; } }
// The treePos max $maxTree = search_max_tree_pos(); // The treePos of her and his childeren = max(treePos)+i $i = 1; while ($i <= $facultyEdit['nb_childs'] + 1) { $sql_TempTree = " UPDATE `" . $tbl_course_node . "`\n SET treePos=" . $maxTree . "+" . $i . "\n WHERE treePos = " . (int) $facultyEdit['treePos'] . "+" . $i . " - 1"; claro_sql_query($sql_TempTree); $i++; } // Change treePos of the faculty they have a treePos > treePos of the last child $sql_ChangeTree = " UPDATE `" . $tbl_course_node . "`\n SET treePos = treePos - " . (int) $facultyEdit['nb_childs'] . "-1\n WHERE treePos > " . (int) $treePosLastChild . " AND treePos <= " . (int) $maxTree; claro_sql_query($sql_ChangeTree); // if the father isn't root if ($_REQUEST['fatherCat'] != 'NULL') { // Search treePos of the new father $newFather = get_cat_data(get_cat_id_from_code($_REQUEST['fatherCat'])); //Ajoute a tous les treePos apres le nouveau pere le nombre d enfant + 1 de celui qu on deplace $sql_ChangeTree = " UPDATE `" . $tbl_course_node . "`\n SET treePos=treePos + " . (int) $facultyEdit['nb_childs'] . " + 1\n WHERE treePos > " . (int) $newFather['treePos'] . " and treePos <= " . (int) $maxTree; claro_sql_query($sql_ChangeTree); // the new treePos is the treePos of the new father+1 $newTree = $newFather['treePos'] + 1; } else { // The new treePos is the last treePos exist $newTree = $maxTree; } // Change the treePos of her and his childeren $i = 0; while ($i <= $facultyEdit['nb_childs']) { $sql_ChangeTree = " UPDATE `" . $tbl_course_node . "`\n SET treePos=" . $newTree . "+" . $i . "\n WHERE treePos=" . $maxTree . "+" . $i . "+1"; claro_sql_query($sql_ChangeTree); $i++;