11<?php
22
33/**
4- * The Kinsmen File Manager v2.0. 1
4+ * The Kinsmen File Manager v2.1
55 *
66 * A comprehensive, modern file manager with cPanel styling and all essential features:
77 * - File Tree Navigation
@@ -40,7 +40,7 @@ function securityCheck($path)
4040 global $ config ;
4141 $ realPath = realpath ($ path );
4242 if (!$ realPath ) {
43- return false ;
43+ return $ config [ " root_path " ] ;
4444 }
4545 return strpos ($ realPath , $ config ["root_path " ]) === 0 ;
4646}
@@ -63,42 +63,43 @@ function getFileIcon($file)
6363 $ extension = strtolower (pathinfo ($ file , PATHINFO_EXTENSION ));
6464
6565 $ iconMap = [
66- "pdf " => "fas fa-file-pdf " ,
67- "doc " => "fas fa-file-word " ,
68- "docx " => "fas fa-file-word " ,
69- "xls " => "fas fa-file-excel " ,
70- "xlsx " => "fas fa-file-excel " ,
71- "ppt " => "fas fa-file-powerpoint " ,
72- "pptx " => "fas fa-file-powerpoint " ,
73- "jpg " => "fas fa-file-image " ,
74- "jpeg " => "fas fa-file-image " ,
75- "png " => "fas fa-file-image " ,
76- "gif " => "fas fa-file-image " ,
77- "txt " => "fas fa-file-alt " ,
78- "zip " => "fas fa-file-archive " ,
79- "tar " => "fas fa-file-archive " ,
80- "gz " => "fas fa-file-archive " ,
81- "html " => "fas fa-file-code " ,
82- "htm " => "fas fa-file-code " ,
83- "css " => "fas fa-file-code " ,
84- "js " => "fas fa-file-code " ,
85- "php " => "fas fa-file-code " ,
86- "py " => "fas fa-file-code " ,
87- "java " => "fas fa-file-code " ,
88- "c " => "fas fa-file-code " ,
89- "cpp " => "fas fa-file-code " ,
90- "mp3 " => "fas fa-file-audio " ,
91- "mp4 " => "fas fa-file-video " ,
92- "mov " => "fas fa-file-video " ,
93- "avi " => "fas fa-file-video " ,
66+ "pdf " => "<i class=' fas fa-file-pdf' style='color:#D9534F'></i> " ,
67+ "doc " => "<i class=' fas fa-file-word' style='color:#2B579A'></i> " ,
68+ "docx " => "<i class=' fas fa-file-word' style='color:#2B579A'></i> " ,
69+ "xls " => "<i class=' fas fa-file-excel' style='color:#217346'></i> " ,
70+ "xlsx " => "<i class=' fas fa-file-excel' style='color:#217346'></i> " ,
71+ "ppt " => "<i class=' fas fa-file-powerpoint' style='color:#D24726'></i> " ,
72+ "pptx " => "<i class=' fas fa-file-powerpoint' style='color:#D24726'></i> " ,
73+ "jpg " => "<i class=' fas fa-file-image' style='color:#F4A261'></i> " ,
74+ "jpeg " => "<i class=' fas fa-file-image' style='color:#F4A261'></i> " ,
75+ "png " => "<i class=' fas fa-file-image' style='color:#F4A261'></i> " ,
76+ "gif " => "<i class=' fas fa-file-image' style='color:#F4A261'></i> " ,
77+ "txt " => "<i class=' fas fa-file-alt' style='color:#6C757D'></i> " ,
78+ "zip " => "<i class=' fas fa-file-archive' style='color:#FF9F1C'></i> " ,
79+ "tar " => "<i class=' fas fa-file-archive' style='color:#FF9F1C'></i> " ,
80+ "gz " => "<i class=' fas fa-file-archive' style='color:#FF9F1C'></i> " ,
81+ "html " => "<i class=' fas fa-file-code' style='color:#E34C26'></i> " ,
82+ "htm " => "<i class=' fas fa-file-code' style='color:#E34C26'></i> " ,
83+ "css " => "<i class=' fas fa-file-code' style='color:#264DE4'></i> " ,
84+ "js " => "<i class=' fas fa-file-code' style='color:#F0DB4F'></i> " ,
85+ "php " => "<i class=' fas fa-file-code' style='color:#8892BF'></i> " ,
86+ "py " => "<i class=' fas fa-file-code' style='color:#306998'></i> " ,
87+ "java " => "<i class=' fas fa-file-code' style='color:#B07219'></i> " ,
88+ "c " => "<i class=' fas fa-file-code' style='color:#555555'></i> " ,
89+ "cpp " => "<i class=' fas fa-file-code' style='color:#00599C'></i> " ,
90+ "mp3 " => "<i class=' fas fa-file-audio' style='color:#6F42C1'></i> " ,
91+ "mp4 " => "<i class=' fas fa-file-video' style='color:#20C997'></i> " ,
92+ "mov " => "<i class=' fas fa-file-video' style='color:#20C997'></i> " ,
93+ "avi " => "<i class=' fas fa-file-video' style='color:#20C997'></i> " ,
9494 ];
9595
96+
9697 if (is_dir ($ file )) {
97- return "fas fa-folder " ;
98+ return "<i class=' fas fa-folder folder-icon'></i> " ;
9899 } elseif (isset ($ iconMap [$ extension ])) {
99100 return $ iconMap [$ extension ];
100101 } else {
101- return "fas fa-file " ;
102+ return "<i class=' fas fa-file' style='color:#6C757D'></i> " ;
102103 }
103104}
104105
@@ -938,7 +939,6 @@ function extract7Zip($source, $destination)
938939 }
939940}
940941
941- // Handle File Manager Operations
942942// Handle File Manager Operations
943943if (isset ($ _POST ["action " ]) || isset ($ _GET ["action " ])) {
944944 $ action = isset ($ _POST ["action " ]) ? $ _POST ["action " ] : $ _GET ["action " ];
@@ -1565,23 +1565,23 @@ function extract7Zip($source, $destination)
15651565 <link rel="icon" href="icon.png" type="image/png">
15661566 <style>
15671567 :root {
1568- --cpanel -primary: #0c0f25;
1569- --cpanel -secondary: #2d335d;
1570- --cpanel -bg: #f8f9fa;
1571- --cpanel -border: #dee2e6;
1568+ --kinsmen -primary: #0c0f25;
1569+ --kinsmen -secondary: #2d335d;
1570+ --kinsmen -bg: #f8f9fa;
1571+ --kinsmen -border: #dee2e6;
15721572 }
15731573
15741574 body {
15751575 font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
15761576 font-size: 14px;
1577- background-color: var(--cpanel -bg);
1577+ background-color: var(--kinsmen -bg);
15781578 }
15791579
15801580 .top-header {
1581- background-color: var(--cpanel -primary);
1581+ background-color: var(--kinsmen -primary);
15821582 color: white;
15831583 padding: 8px 15px;
1584- border-bottom: 1px solid var(--cpanel -border);
1584+ border-bottom: 1px solid var(--kinsmen -border);
15851585 }
15861586
15871587 .top-header .brand {
@@ -1596,31 +1596,31 @@ function extract7Zip($source, $destination)
15961596 .main-toolbar {
15971597 background-color: #e9ecef;
15981598 padding: 8px 15px;
1599- border-bottom: 1px solid var(--cpanel -border);
1599+ border-bottom: 1px solid var(--kinsmen -border);
16001600 line-height: 30px;
16011601 }
16021602
16031603 .main-toolbar .btn {
1604- font-size: 13px ;
1604+ font-size: 14px ;
16051605 padding: 4px 8px;
16061606 margin-right: 5px;
16071607 }
16081608
16091609 .navigation-bar {
16101610 background-color: #f1f3f4;
16111611 padding: 8px 15px;
1612- border-bottom: 1px solid var(--cpanel -border);
1612+ border-bottom: 1px solid var(--kinsmen -border);
16131613 }
16141614
16151615 .navigation-bar .btn {
1616- font-size: 13px ;
1616+ font-size: 14px ;
16171617 padding: 4px 8px;
16181618 margin-right: 5px;
16191619 }
16201620
16211621 .sidebar {
16221622 background-color: white;
1623- border-right: 1px solid var(--cpanel -border);
1623+ border-right: 1px solid var(--kinsmen -border);
16241624 height: calc(100vh - 120px);
16251625 overflow-y: auto;
16261626 padding: 10px;
@@ -1646,7 +1646,7 @@ function extract7Zip($source, $destination)
16461646 }
16471647
16481648 .sidebar .folder-tree .folder-item i {
1649- width: 16px ;
1649+ width: 14px ;
16501650 margin-right: 5px;
16511651 }
16521652
@@ -1662,10 +1662,10 @@ function extract7Zip($source, $destination)
16621662
16631663 .file-table th {
16641664 background-color: #f8f9fa;
1665- border-bottom: 2px solid var(--cpanel -border);
1665+ border-bottom: 2px solid var(--kinsmen -border);
16661666 padding: 8px;
16671667 font-weight: 600;
1668- color: var(--cpanel -secondary);
1668+ color: var(--kinsmen -secondary);
16691669 }
16701670
16711671 .file-table td {
@@ -1683,12 +1683,12 @@ function extract7Zip($source, $destination)
16831683 }
16841684
16851685 .file-icon {
1686- width: 16px ;
1686+ width: 14px ;
16871687 margin-right: 8px;
16881688 }
16891689
16901690 .file-name {
1691- color: #1976d2 ;
1691+ color: #000 ;
16921692 text-decoration: none;
16931693 font-weight: 500;
16941694 cursor: pointer;
@@ -1704,7 +1704,7 @@ function extract7Zip($source, $destination)
17041704
17051705 .file-size,
17061706 .file-date {
1707- color: var(--cpanel -secondary);
1707+ color: var(--kinsmen -secondary);
17081708 }
17091709
17101710 .permissions {
@@ -1721,11 +1721,9 @@ function extract7Zip($source, $destination)
17211721 }
17221722
17231723 .collapse-all {
1724- font-size: 11px ;
1725- color: var(--cpanel -secondary);
1724+ font-size: 14px ;
1725+ color: var(--kinsmen -secondary);
17261726 cursor: pointer;
1727- padding: 5px 0;
1728- border-bottom: 1px solid var(--cpanel-border);
17291727 margin-bottom: 10px;
17301728 }
17311729
@@ -1883,41 +1881,51 @@ function extract7Zip($source, $destination)
18831881 </div>
18841882
18851883 <!-- Main Toolbar -->
1886- <div class="main-toolbar">
1887- <a href="#" class="header-btns" id="new-file-btn"><i class="fas fa-file"></i> File</a>
1888- <a href="#" class="header-btns" id="new-folder-btn"><i class="fas fa-folder"></i> Folder</a>
1889- <a href="#" class="header-btns disabled" id="copy-btn"><i class="fas fa-copy"></i> Copy</a>
1890- <a href="#" class="header-btns disabled" id="move-btn"><i class="fas fa-arrows-alt"></i> Move</a>
1891- <a href="#" class="header-btns" id="upload-btn"><i class="fas fa-upload"></i> Upload</a>
1892- <a href="#" class="header-btns disabled" id="download-btn"><i class="fas fa-download"></i> Download</a>
1893- <a href="#" class="header-btns disabled" id="delete-btn"><i class="fas fa-trash"></i> Delete</a>
1894- <a href="#" class="header-btns disabled" id="restore-btn"><i class="fas fa-undo"></i> Restore</a>
1895- <a href="#" class="header-btns disabled" id="rename-btn"><i class="fas fa-tag"></i> Rename</a>
1896- <a href="#" class="header-btns disabled" id="edit-btn"><i class="fas fa-edit"></i> Edit</a>
1897- <a href="#" class="header-btns disabled" id="permissions-btn"><i class="fas fa-shield-alt"></i> Permissions</a>
1898- <a href="#" class="header-btns disabled" id="extract-btn"><i class="fas fa-file-archive"></i> Extract</a>
1899- <a href="#" class="header-btns disabled" id="compress-btn"><i class="fas fa-compress"></i> Compress</a>
1900- <input type="file" id="file-upload" multiple style="display: none;">
1901- </div>
1902-
1903- <!-- Progress Bar -->
1904- <div class="progress" id="upload-progress">
1905- <div class="progress-bar progress-bar-striped progress-bar-animated bg-success"
1906- role="progressbar"
1907- style="width: 0%"
1908- aria-valuenow="0"
1909- aria-valuemin="0"
1910- aria-valuemax="100">
1911- Preparing upload...
1884+ <div class="d-flex align-items-center">
1885+ <div class="main-toolbar">
1886+ <a href="#" class="header-btns" id="new-file-btn"><i class="fas fa-file"></i> File</a>
1887+ <a href="#" class="header-btns" id="new-folder-btn"><i class="fas fa-folder"></i> Folder</a>
1888+ <a href="#" class="header-btns disabled" id="copy-btn"><i class="fas fa-copy"></i> Copy</a>
1889+ <a href="#" class="header-btns disabled" id="move-btn"><i class="fas fa-arrows-alt"></i> Move</a>
1890+ <a href="#" class="header-btns" id="upload-btn"><i class="fas fa-upload"></i> Upload</a>
1891+ <a href="#" class="header-btns disabled" id="download-btn"><i class="fas fa-download"></i> Download</a>
1892+ <a href="#" class="header-btns disabled" id="delete-btn"><i class="fas fa-trash"></i> Delete</a>
1893+ <a href="#" class="header-btns disabled" id="restore-btn"><i class="fas fa-undo"></i> Restore</a>
1894+ <a href="#" class="header-btns disabled" id="rename-btn"><i class="fas fa-tag"></i> Rename</a>
1895+ <a href="#" class="header-btns disabled" id="edit-btn"><i class="fas fa-edit"></i> Edit</a>
1896+ <a href="#" class="header-btns disabled" id="permissions-btn"><i class="fas fa-shield-alt"></i> Permissions</a>
1897+ <a href="#" class="header-btns disabled" id="extract-btn"><i class="fas fa-file-archive"></i> Extract</a>
1898+ <a href="#" class="header-btns disabled" id="compress-btn"><i class="fas fa-compress"></i> Compress</a>
1899+ <input type="file" id="file-upload" multiple style="display: none;">
1900+ </div>
1901+ <!-- Progress Bar -->
1902+ <div class="progress ms-auto me-3 w-25" id="upload-progress">
1903+ <div class="progress-bar progress-bar-striped progress-bar-animated bg-success"
1904+ role="progressbar"
1905+ style="width: 0%"
1906+ aria-valuenow="0"
1907+ aria-valuemin="0"
1908+ aria-valuemax="100">
1909+ Preparing upload...
1910+ </div>
19121911 </div>
19131912 </div>
19141913
1914+
1915+
19151916 <!-- Main Content Area -->
19161917 <div class="container-fluid p-0">
19171918 <div class="row g-0">
19181919 <!-- Sidebar -->
19191920 <div class="col-md-2 sidebar">
1920- <div class="collapse-all" id="collapse-all-btn">Collapse All</div>
1921+ <div class="search-container mb-2">
1922+ <div class="input-group input-group-sm">
1923+ <button class="btn btn-sm btn-outline-secondary" id="breadcrumb-home-btn"><i class="fas fa-home"></i></button>
1924+ <input type="text" class="form-control form-control-sm border-secondary" id="breadcrumb">
1925+ <button class="btn btn-secondary btn-sm" id="breadcrumb-search-btn">Go</button>
1926+ </div>
1927+ </div>
1928+ <div class="collapse-all border py-1 text-center" id="collapse-all-btn">Collapse All</div>
19211929 <div class="folder-tree" id="directory-tree">
19221930 <div class="folder-item active">
19231931 <i class="fas fa-home"></i> (/home/<?= $ username ?> )
@@ -2394,6 +2402,7 @@ function loadFileList() {
23942402 if (data.status === 'success') {
23952403 fileList = data.data;
23962404
2405+ updateBreadcrumb(data.current_path);
23972406
23982407 // Show files in the table
23992408 showFiles(fileList);
@@ -2411,13 +2420,18 @@ function loadFileList() {
24112420 });
24122421 }
24132422
2423+ function updateBreadcrumb(path) {
2424+ const breadcrumb = document.getElementById('breadcrumb');
2425+ breadcrumb.value = path;
2426+ }
2427+
24142428
24152429 // Show files in table
24162430 function showFiles(files) {
24172431 const filesList = document.getElementById('files-list');
24182432
24192433 if (files.length === 0) {
2420- filesList.innerHTML = '<tr><td colspan="7" class="text-center p-3 text-danger">No files found </td></tr>';
2434+ filesList.innerHTML = '<tr><td colspan="7" class="p-2">This directory is empty. </td></tr>';
24212435 return;
24222436 }
24232437
@@ -2427,7 +2441,7 @@ function showFiles(files) {
24272441 html += `
24282442 <tr class="file-item" data-name="${file.name}" data-type="${file.type}">
24292443 <td><input type="checkbox" class="form-check-input item-check"></td>
2430- <td><i class=" ${file.name === "public_html" ? "fas fa-globe text-primary" : file.icon} folder-icon"></i> </td>
2444+ <td>${file.name === "public_html" ? "<i class=' fas fa-globe text-primary'></i> " : file.icon} </td>
24312445 <td><a href="#" class="file-name">${file.name}</a></td>
24322446 <td class="file-size">${file.size}</td>
24332447 <td class="file-date">${file.last_modified}</td>
@@ -3637,6 +3651,18 @@ function navigateToPath(path, pushToHistory = true) {
36373651 navigateToPath('', true);
36383652 });
36393653
3654+ document.getElementById('breadcrumb-home-btn').addEventListener('click', e => {
3655+ e.preventDefault();
3656+ navigateToPath('', true);
3657+ });
3658+
3659+ document.getElementById('breadcrumb-search-btn').addEventListener('click', e => {
3660+ e.preventDefault();
3661+ const breadcrumbvalue = document.getElementById('breadcrumb').value;
3662+ if (breadcrumbvalue.trim() == '') return;
3663+ navigateToPath(breadcrumbvalue, true);
3664+ });
3665+
36403666 document.getElementById('up-btn').addEventListener('click', e => {
36413667 e.preventDefault();
36423668 if (!currentPath) return;
0 commit comments