0) { $sql_folder = mysqli_query($mysqli, "SELECT folder_name, parent_folder FROM folders WHERE folder_id = $breadcrumb_folder_id AND folder_client_id = $client_id"); if ($row_folder = mysqli_fetch_assoc($sql_folder)) { $folder_name = nullable_htmlentities($row_folder['folder_name']); $parent_folder = intval($row_folder['parent_folder']); array_unshift($folder_path, [ 'folder_id' => $breadcrumb_folder_id, 'folder_name' => $folder_name ]); $breadcrumb_folder_id = $parent_folder; } else { break; } } // --------------------------------------------- // Helper: unified folder tree (no folder_location) // --------------------------------------------- function is_ancestor_folder($folder_id, $current_folder_id, $client_id) { global $mysqli; if ($current_folder_id == 0) { return false; } if ($current_folder_id == $folder_id) { return true; } $result = mysqli_query($mysqli, "SELECT parent_folder FROM folders WHERE folder_id = $current_folder_id AND folder_client_id = $client_id"); if ($row = mysqli_fetch_assoc($result)) { $parent_folder_id = intval($row['parent_folder']); return is_ancestor_folder($folder_id, $parent_folder_id, $client_id); } else { return false; } } function display_folders($parent_folder_id, $client_id, $indent = 0) { global $mysqli, $get_folder_id, $session_user_role; $sql_folders = mysqli_query($mysqli, "SELECT * FROM folders WHERE parent_folder = $parent_folder_id AND folder_client_id = $client_id ORDER BY folder_name ASC"); while ($row = mysqli_fetch_array($sql_folders)) { $folder_id = intval($row['folder_id']); $folder_name = nullable_htmlentities($row['folder_name']); // Count files in folder $row_files = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('file_id') AS num FROM files WHERE file_folder_id = $folder_id AND file_client_id = $client_id AND file_archived_at IS NULL")); $num_files = intval($row_files['num']); // Count documents in folder $row_docs = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('document_id') AS num FROM documents WHERE document_folder_id = $folder_id AND document_client_id = $client_id AND document_archived_at IS NULL")); $num_docs = intval($row_docs['num']); $num_total = $num_files + $num_docs; // Count subfolders $subfolder_result = mysqli_query($mysqli, "SELECT COUNT(*) AS count FROM folders WHERE parent_folder = $folder_id AND folder_client_id = $client_id"); $subfolder_count = intval(mysqli_fetch_assoc($subfolder_result)['count']); echo ''; } } // --------------------------------------------- // DATA LOAD // view=1 (thumbs) uses original files-only query // view=0 (list) loads ALL files+documents, merges, sorts in PHP // --------------------------------------------- $items = []; $num_rows = [0]; if ($view == 1) { // Thumbnail view - only image files, similar to original behavior $query_images = "AND (file_ext LIKE 'JPG' OR file_ext LIKE 'jpg' OR file_ext LIKE 'JPEG' OR file_ext LIKE 'jpeg' OR file_ext LIKE 'png' OR file_ext LIKE 'PNG' OR file_ext LIKE 'webp' OR file_ext LIKE 'WEBP')"; if ($get_folder_id == 0 && isset($_GET["q"])) { $sql = mysqli_query( $mysqli, "SELECT SQL_CALC_FOUND_ROWS * FROM files LEFT JOIN users ON file_created_by = user_id WHERE file_client_id = $client_id AND file_archived_at IS NULL AND (file_name LIKE '%$q%' OR file_ext LIKE '%$q%' OR file_description LIKE '%$q%') $query_images ORDER BY file_name ASC LIMIT $record_from, $record_to" ); } else { $sql = mysqli_query( $mysqli, "SELECT SQL_CALC_FOUND_ROWS * FROM files LEFT JOIN users ON file_created_by = user_id WHERE file_client_id = $client_id AND file_folder_id = $folder_id AND file_archived_at IS NULL AND (file_name LIKE '%$q%' OR file_ext LIKE '%$q%' OR file_description LIKE '%$q%') $query_images ORDER BY file_name ASC LIMIT $record_from, $record_to" ); } $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); } else { // -------- LIST VIEW: build unified items[] -------- // Folder filter if ($get_folder_id == 0 && isset($_GET["q"])) { $file_folder_snippet = ""; // search across all folders $doc_folder_snippet = ""; } else { $file_folder_snippet = "AND file_folder_id = $folder_id"; $doc_folder_snippet = "AND document_folder_id = $folder_id"; } // Search filters $safe_q = mysqli_real_escape_string($mysqli, $q); $file_search_snippet = ""; if (!empty($q)) { $file_search_snippet = "AND (file_name LIKE '%$safe_q%' OR file_ext LIKE '%$safe_q%' OR file_description LIKE '%$safe_q%')"; } $doc_search_snippet = ""; if (!empty($q)) { $doc_search_snippet = "AND (MATCH(document_content_raw) AGAINST ('$safe_q') OR document_name LIKE '%$safe_q%')"; } // Files query (NO limit - we'll paginate in PHP) $sql_files = mysqli_query( $mysqli, "SELECT files.*, users.user_name FROM files LEFT JOIN users ON file_created_by = user_id WHERE file_client_id = $client_id AND file_archived_at IS NULL $file_folder_snippet $file_search_snippet" ); // Documents query (NO limit - paginate in PHP) $sql_documents = mysqli_query( $mysqli, "SELECT documents.*, users.user_name FROM documents LEFT JOIN users ON document_created_by = user_id WHERE document_client_id = $client_id AND document_archived_at IS NULL $doc_folder_snippet $doc_search_snippet" ); // Normalize FILES into $items while ($row = mysqli_fetch_assoc($sql_files)) { $file_id = intval($row['file_id']); $file_name = nullable_htmlentities($row['file_name']); $file_description = nullable_htmlentities($row['file_description']); $file_reference_name= nullable_htmlentities($row['file_reference_name']); $file_ext = nullable_htmlentities($row['file_ext']); $file_size = intval($row['file_size']); $file_mime_type = nullable_htmlentities($row['file_mime_type']); $file_uploaded_by = nullable_htmlentities($row['user_name']); $file_created_at = nullable_htmlentities($row['file_created_at']); // determine icon if ($file_ext == 'pdf') { $file_icon = "file-pdf"; } elseif (in_array($file_ext, ['gz','tar','zip','7z','rar'])) { $file_icon = "file-archive"; } elseif (in_array($file_ext, ['txt','md'])) { $file_icon = "file-alt"; } elseif ($file_ext == 'msg') { $file_icon = "envelope"; } elseif (in_array($file_ext, ['doc','docx','odt'])) { $file_icon = "file-word"; } elseif (in_array($file_ext, ['xls','xlsx','ods'])) { $file_icon = "file-excel"; } elseif (in_array($file_ext, ['pptx','odp'])) { $file_icon = "file-powerpoint"; } elseif (in_array($file_ext, ['mp3','wav','ogg'])) { $file_icon = "file-audio"; } elseif (in_array($file_ext, ['mov','mp4','av1'])) { $file_icon = "file-video"; } elseif (in_array($file_ext, ['jpg','jpeg','png','gif','webp','bmp','tif'])) { $file_icon = "file-image"; } else { $file_icon = "file"; } $items[] = [ 'kind' => 'file', 'id' => $file_id, 'name' => $file_name, 'description' => $file_description, 'reference_name' => $file_reference_name, 'icon' => $file_icon, 'mime' => $file_mime_type, 'size' => $file_size, 'created_at' => $file_created_at, 'created_by' => $file_uploaded_by, ]; } // Normalize DOCUMENTS into $items while ($row = mysqli_fetch_assoc($sql_documents)) { $document_id = intval($row['document_id']); $document_name = nullable_htmlentities($row['document_name']); $document_description = nullable_htmlentities($row['document_description']); $document_created_by_name = nullable_htmlentities($row['user_name']); $document_created_at = $row['document_created_at']; $items[] = [ 'kind' => 'document', 'id' => $document_id, 'name' => $document_name, 'description' => $document_description, 'mime' => 'Document', 'size' => null, 'created_at' => $document_created_at, 'created_by' => $document_created_by_name, ]; } // Sort combined items $sort = isset($_GET['sort']) ? $_GET['sort'] : 'name'; $order = isset($_GET['order']) ? $_GET['order'] : 'ASC'; usort($items, function($a, $b) use ($sort, $order) { $direction = ($order === 'DESC') ? -1 : 1; if ($sort == 'created') { $valA = strtotime($a['created_at']); $valB = strtotime($b['created_at']); } elseif ($sort == 'type') { $valA = strtolower($a['mime']); $valB = strtolower($b['mime']); } elseif ($sort == 'size') { $valA = (int)($a['size'] ?? 0); $valB = (int)($b['size'] ?? 0); } else { // default: name $valA = strtolower($a['name']); $valB = strtolower($b['name']); } if ($valA == $valB) { return 0; } return ($valA < $valB) ? -1 * $direction : 1 * $direction; }); // Total items (for pagination footer) $total_items = count($items); $num_rows = [$total_items]; // Apply pagination slice $items = array_slice($items, $record_from, $record_to); } // --------------------------------------------- // Root folder count (for "/" badge) // --------------------------------------------- $row_root_files = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('file_id') AS num FROM files WHERE file_folder_id = 0 AND file_client_id = $client_id AND file_archived_at IS NULL")); $row_root_docs = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('document_id') AS num FROM documents WHERE document_folder_id = 0 AND document_client_id = $client_id AND document_archived_at IS NULL")); $num_root_items = intval($row_root_files['num']) + intval($row_root_docs['num']); ?>

Files

"> ">

$file_id, 'name' => $file_name, 'preview' => "../uploads/clients/$client_id/$file_reference_name" ]; ?>
"> NOW() AND item_type = 'File' AND item_related_id = $file_id LIMIT 1" ); $file_shared = (mysqli_num_rows($sql_shared) > 0); if ($file_shared) { $row_shared = mysqli_fetch_array($sql_shared); $item_recipient = nullable_htmlentities($row_shared['item_recipient']); $item_expire_at_human = timeAgo($row_shared['item_expire_at']); } ?> NOW() AND item_type = 'Document' AND item_related_id = $document_id LIMIT 1" ); $doc_shared = (mysqli_num_rows($sql_shared) > 0); if ($doc_shared) { $row_shared = mysqli_fetch_array($sql_shared); $item_recipient = nullable_htmlentities($row_shared['item_recipient']); $item_expire_at_human = timeAgo($row_shared['item_expire_at']); } ?>
Name Type Size Uploaded Action
" target="_blank">


KB
Shared


Document -
Shared