diff --git a/includes/libraries/teampassclasses/nestedtree/src/NestedTree.php b/includes/libraries/teampassclasses/nestedtree/src/NestedTree.php index fcd3f2a38..de06291e1 100755 --- a/includes/libraries/teampassclasses/nestedtree/src/NestedTree.php +++ b/includes/libraries/teampassclasses/nestedtree/src/NestedTree.php @@ -457,6 +457,18 @@ public function rebuild() // give it an initial nleft value of 0 and an nlevel of 0. $this->generateTreeData($data, 0, 0, $n_tally); + // Get current nlevel, nright and nleft + $folder_ids_str = implode(',', array_map('intval', array_keys($data))); + $query = "SELECT id, nlevel, nright, nleft + FROM " . $this->table . " + WHERE id IN(" . $folder_ids_str . ")"; + $result = mysqli_query($this->link, $query); + + // Array with folders current nlevel, nright and nleft values. + $folders_infos = []; + while ($result && $row = mysqli_fetch_assoc($result)) + $folders_infos[$row['id']] = $row; + // at this point the the root node will have nleft of 0, nlevel of 0 // and nright of (tree size * 2 + 1) @@ -470,6 +482,15 @@ public function rebuild() continue; } + // Don't update if no change (better performances) + if (!empty($folders_infos[$folder_id]) + && (int) $row->nlevel === (int) $folders_infos[$folder_id]['nlevel'] + && (int) $row->nleft === (int) $folders_infos[$folder_id]['nleft'] + && (int) $row->nright === (int) $folders_infos[$folder_id]['nright'] + ) { + continue; + } + $query = sprintf( 'update %s set nlevel = %d, nleft = %d, nright = %d where %s = %d', $this->table, diff --git a/vendor/teampassclasses/nestedtree/src/NestedTree.php b/vendor/teampassclasses/nestedtree/src/NestedTree.php index fcd3f2a38..de06291e1 100755 --- a/vendor/teampassclasses/nestedtree/src/NestedTree.php +++ b/vendor/teampassclasses/nestedtree/src/NestedTree.php @@ -457,6 +457,18 @@ public function rebuild() // give it an initial nleft value of 0 and an nlevel of 0. $this->generateTreeData($data, 0, 0, $n_tally); + // Get current nlevel, nright and nleft + $folder_ids_str = implode(',', array_map('intval', array_keys($data))); + $query = "SELECT id, nlevel, nright, nleft + FROM " . $this->table . " + WHERE id IN(" . $folder_ids_str . ")"; + $result = mysqli_query($this->link, $query); + + // Array with folders current nlevel, nright and nleft values. + $folders_infos = []; + while ($result && $row = mysqli_fetch_assoc($result)) + $folders_infos[$row['id']] = $row; + // at this point the the root node will have nleft of 0, nlevel of 0 // and nright of (tree size * 2 + 1) @@ -470,6 +482,15 @@ public function rebuild() continue; } + // Don't update if no change (better performances) + if (!empty($folders_infos[$folder_id]) + && (int) $row->nlevel === (int) $folders_infos[$folder_id]['nlevel'] + && (int) $row->nleft === (int) $folders_infos[$folder_id]['nleft'] + && (int) $row->nright === (int) $folders_infos[$folder_id]['nright'] + ) { + continue; + } + $query = sprintf( 'update %s set nlevel = %d, nleft = %d, nright = %d where %s = %d', $this->table,