From d60f5a9f8682d8ad9098eb597eb88a2ae16d38ec Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 30 Oct 2024 16:55:19 -0400 Subject: [PATCH] FEATURE: Nested folders in Files --- client_document_bulk_move_modal.php | 106 +++++++++++---------- client_file_bulk_move_modal.php | 71 ++++++++++++-- client_file_move_modal.php | 67 +++++++++++-- client_file_rename_modal.php | 7 +- client_file_upload_modal.php | 35 +++++-- client_files.php | 141 +++++++++++++++++++--------- 6 files changed, 306 insertions(+), 121 deletions(-) diff --git a/client_document_bulk_move_modal.php b/client_document_bulk_move_modal.php index 2fe8a524..79b37561 100644 --- a/client_document_bulk_move_modal.php +++ b/client_document_bulk_move_modal.php @@ -17,61 +17,67 @@ diff --git a/client_file_bulk_move_modal.php b/client_file_bulk_move_modal.php index 702d08cb..7a814a40 100644 --- a/client_file_bulk_move_modal.php +++ b/client_file_bulk_move_modal.php @@ -15,18 +15,69 @@
- - - + // Fetch all folders for the client + $sql_all_folders = mysqli_query($mysqli, "SELECT folder_id, folder_name, parent_folder FROM folders WHERE folder_location = 1 AND folder_client_id = $client_id ORDER BY folder_name ASC"); + $folders = array(); + + // Build an associative array of folders indexed by folder_id + while ($row = mysqli_fetch_assoc($sql_all_folders)) { + $folders[$row['folder_id']] = array( + 'folder_id' => intval($row['folder_id']), + 'folder_name' => nullable_htmlentities($row['folder_name']), + 'parent_folder' => intval($row['parent_folder']), + 'children' => array() + ); + } + + // Build the folder hierarchy + foreach ($folders as $id => &$folder) { + if ($folder['parent_folder'] != 0 && isset($folders[$folder['parent_folder']])) { + $folders[$folder['parent_folder']]['children'][] = &$folder; + } + } + unset($folder); // Break the reference + + // Prepare a list of root folders + $root_folders = array(); + foreach ($folders as $id => $folder) { + if ($folder['parent_folder'] == 0) { + $root_folders[] = $folder; + } + } + + // Display the folder options iteratively + $stack = array(); + foreach (array_reverse($root_folders) as $folder) { + $stack[] = array('folder' => $folder, 'level' => 0); + } + + while (!empty($stack)) { + $node = array_pop($stack); + $folder = $node['folder']; + $level = $node['level']; + + // Indentation for subfolders + $indentation = str_repeat(' ', $level * 4); + + // Check if this folder is selected + $selected = ''; + if ($folder['folder_id'] == $get_folder_id) { + $selected = 'selected'; + } + + echo ""; + + // Add children to the stack + if (!empty($folder['children'])) { + foreach (array_reverse($folder['children']) as $child_folder) { + $stack[] = array('folder' => $child_folder, 'level' => $level + 1); + } + } + } + ?> diff --git a/client_file_move_modal.php b/client_file_move_modal.php index e07dff64..bbfbeb13 100644 --- a/client_file_move_modal.php +++ b/client_file_move_modal.php @@ -18,16 +18,67 @@
- - - intval($row['folder_id']), + 'folder_name' => nullable_htmlentities($row['folder_name']), + 'parent_folder' => intval($row['parent_folder']), + 'children' => array() + ); + } + + // Build the folder hierarchy + foreach ($folders as $id => &$folder) { + if ($folder['parent_folder'] != 0 && isset($folders[$folder['parent_folder']])) { + $folders[$folder['parent_folder']]['children'][] = &$folder; + } + } + unset($folder); // Break the reference + + // Prepare a list of root folders + $root_folders = array(); + foreach ($folders as $id => $folder) { + if ($folder['parent_folder'] == 0) { + $root_folders[] = $folder; + } + } + + // Display the folder options iteratively + $stack = array(); + foreach (array_reverse($root_folders) as $folder) { + $stack[] = array('folder' => $folder, 'level' => 0); + } + + while (!empty($stack)) { + $node = array_pop($stack); + $folder = $node['folder']; + $level = $node['level']; + + // Indentation for subfolders + $indentation = str_repeat(' ', $level * 4); + + // Check if this folder is selected + $selected = ''; + if ($folder['folder_id'] == $file_folder_id) { + $selected = 'selected'; + } + + echo ""; + + // Add children to the stack + if (!empty($folder['children'])) { + foreach (array_reverse($folder['children']) as $child_folder) { + $stack[] = array('folder' => $child_folder, 'level' => $level + 1); + } + } } ?> diff --git a/client_file_rename_modal.php b/client_file_rename_modal.php index 57c24568..1f20c804 100644 --- a/client_file_rename_modal.php +++ b/client_file_rename_modal.php @@ -13,14 +13,17 @@ +
@@ -164,7 +220,7 @@ $num_of_files = mysqli_num_rows($sql);
- + ">
@@ -303,6 +359,7 @@ $num_of_files = mysqli_num_rows($sql); $file_icon = "file"; } $file_created_at = nullable_htmlentities($row['file_created_at']); + $file_folder_id = intval($row['file_folder_id']); // Check if shared $sql_shared = mysqli_query(