Skip to content

Commit 6e4549d

Browse files
authored
Update filemanager.php
Updated v2.1
1 parent d595886 commit 6e4549d

File tree

1 file changed

+110
-84
lines changed

1 file changed

+110
-84
lines changed

filemanager.php

Lines changed: 110 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
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
943943
if (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

Comments
 (0)