Add files via upload
parent
012588e6cf
commit
9afd6f3701
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,546 @@
|
|||||||
|
$font: -apple-system, BlinkMacSystemFont, "segoe ui", roboto, oxygen, ubuntu, cantarell, "fira sans", "droid sans", "helvetica neue", Arial, sans-serif;
|
||||||
|
$font-size: 16px;
|
||||||
|
$header-size: 55px;
|
||||||
|
$aside-width: 260px;
|
||||||
|
$text-color: #555555;
|
||||||
|
$header-color: #4a5361;
|
||||||
|
$admin-color: #383c46;
|
||||||
|
$background-color: mix($admin-color, #fff, 10);
|
||||||
|
$btn-color: #4a79b4;
|
||||||
|
$btn-alt-color: #b44a4a;
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
font-family: $font;
|
||||||
|
font-size: $font-size;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
position: relative;
|
||||||
|
min-height: 100%;
|
||||||
|
color: $text-color;
|
||||||
|
background-color: $background-color;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
h1, h2, h3, h4, h5 {
|
||||||
|
color: $header-color;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
padding-left: $aside-width;
|
||||||
|
z-index: 999;
|
||||||
|
width: 100%;
|
||||||
|
height: $header-size;
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.15);
|
||||||
|
a {
|
||||||
|
display: inline-flex;
|
||||||
|
color: $header-color;
|
||||||
|
height: 100%;
|
||||||
|
text-decoration: none;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 20px;
|
||||||
|
i {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
&:hover, &:active {
|
||||||
|
color: lighten($header-color, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.space-between {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
&.full {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
aside {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999999;
|
||||||
|
height: 100%;
|
||||||
|
width: $aside-width;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
background-color: darken($admin-color, 8);
|
||||||
|
h1 {
|
||||||
|
display: inline-flex;
|
||||||
|
background-color: #5472bd;
|
||||||
|
width: 100%;
|
||||||
|
height: $header-size;
|
||||||
|
color: #fff;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 20px;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
> a {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
text-decoration: none;
|
||||||
|
color: mix($admin-color, #fff, 40);
|
||||||
|
padding: 15px 20px;
|
||||||
|
i {
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
&:hover, &.selected {
|
||||||
|
background-color: mix($admin-color, #4a79b4, 98);
|
||||||
|
color: #fff;
|
||||||
|
border-left: 3px solid #4a79b4;
|
||||||
|
padding: 15px 17px;
|
||||||
|
}
|
||||||
|
&.selected + .sub {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.note {
|
||||||
|
background-color: darken($admin-color, 0);
|
||||||
|
padding: 1px 5px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 12px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.sub {
|
||||||
|
display: none;
|
||||||
|
flex-flow: column;
|
||||||
|
background-color: darken($admin-color, 12);
|
||||||
|
padding: 13px 0;
|
||||||
|
a {
|
||||||
|
font-size: 14px;
|
||||||
|
color: mix($admin-color, #fff, 40);
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 4px 20px;
|
||||||
|
span {
|
||||||
|
display: inline-block;
|
||||||
|
width: 40px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
&:hover, &.selected {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.closed {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
$padding: 30px;
|
||||||
|
padding: $padding;
|
||||||
|
padding-left: $aside-width + $padding;
|
||||||
|
padding-top: $header-size + $padding;
|
||||||
|
&.full {
|
||||||
|
padding-left: $padding;
|
||||||
|
padding-right: $padding;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 20px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
border-bottom: 1px solid darken($background-color, 6);
|
||||||
|
span {
|
||||||
|
font-size: 16px;
|
||||||
|
margin-left: 5px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: lighten($header-color, 30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.msg {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 15px 0 0 0;
|
||||||
|
padding: 15px;
|
||||||
|
font-weight: 500;
|
||||||
|
box-shadow: 0px 0px 2px 0px rgba(0,0,0,0.1);
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 15px;
|
||||||
|
font-size: 14px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
i.fa-times {
|
||||||
|
align-self: flex-end;
|
||||||
|
justify-content: flex-end;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
opacity: .9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.success {
|
||||||
|
background-color: #C3F3D7;
|
||||||
|
border-left: 4px solid #51a775;
|
||||||
|
color: #51a775;
|
||||||
|
i {
|
||||||
|
color: #51a775;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.error {
|
||||||
|
background-color: #f3c3c3;
|
||||||
|
border-left: 4px solid #a75151;
|
||||||
|
color: #a75151;
|
||||||
|
i {
|
||||||
|
color: #a75151;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.search {
|
||||||
|
label {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
background-color: transparent;
|
||||||
|
outline: none;
|
||||||
|
border: none;
|
||||||
|
padding: 10px 0;
|
||||||
|
width: 250px;
|
||||||
|
border-bottom: 1px solid darken($background-color, 10);
|
||||||
|
padding-right: 25px;
|
||||||
|
&:hover, &:active {
|
||||||
|
border-bottom: 1px solid darken($background-color, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i {
|
||||||
|
position: absolute;
|
||||||
|
right: 4px;
|
||||||
|
top: 4px;
|
||||||
|
bottom: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
color: darken($background-color, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.content-block {
|
||||||
|
background-color: #fff;
|
||||||
|
margin-top: 25px;
|
||||||
|
padding: 15px;
|
||||||
|
box-shadow: 0px 0px 5px 1px rgba(0,0,0,0.03);
|
||||||
|
}
|
||||||
|
.tabs {
|
||||||
|
display: flex;
|
||||||
|
background-color: darken($background-color, 5);
|
||||||
|
margin-top: 25px;
|
||||||
|
box-shadow: 0px 0px 4px 1px rgba(0,0,0,0.03);
|
||||||
|
z-index: 100;
|
||||||
|
a {
|
||||||
|
display: flex;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 12px 15px;
|
||||||
|
border: 0;
|
||||||
|
color: lighten($header-color, 15);
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
&:hover {
|
||||||
|
background-color: darken($background-color, 7);;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
color: $header-color;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.tabs ~ .content-block {
|
||||||
|
margin-top: 0;
|
||||||
|
box-shadow: 0px 6px 5px 1px rgba(0,0,0,0.03);
|
||||||
|
}
|
||||||
|
.tab-content {
|
||||||
|
display: none;
|
||||||
|
&.active {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.dashboard {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
.stat {
|
||||||
|
width: 24%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
i {
|
||||||
|
display: inline-flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 15px 0 0;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 18px;
|
||||||
|
height: 50px;
|
||||||
|
width: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #d5e7fa;
|
||||||
|
color: #6e94ba;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 400;
|
||||||
|
padding: 15px 15px 0 15px;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 0;
|
||||||
|
padding: 15px;
|
||||||
|
font-size: 26px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.filters {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
margin-right: 25px;
|
||||||
|
margin-bottom: 3px;
|
||||||
|
align-items: center;
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 600;
|
||||||
|
color: $header-color;
|
||||||
|
white-space: nowrap;
|
||||||
|
&:hover {
|
||||||
|
color: darken($header-color, 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.list {
|
||||||
|
display: none;
|
||||||
|
top: calc(100% + 5px);
|
||||||
|
width: 180px;
|
||||||
|
flex-flow: column;
|
||||||
|
position: absolute;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
box-shadow: 0px 0px 5px 1px rgba(0,0,0,0.1);
|
||||||
|
label {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
background: $btn-color;
|
||||||
|
border: 0;
|
||||||
|
color: #FFFFFF;
|
||||||
|
padding: 5px 0;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-top: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
&:hover {
|
||||||
|
background: darken($btn-color, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.table {
|
||||||
|
padding: 0 10px;
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
thead {
|
||||||
|
td {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 15px 0;
|
||||||
|
a {
|
||||||
|
font-weight: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
i {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tr {
|
||||||
|
border-bottom: 1px solid lighten($background-color, 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tbody {
|
||||||
|
tr:first-child td {
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
td {
|
||||||
|
padding: 5px 0;
|
||||||
|
}
|
||||||
|
.img {
|
||||||
|
width: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tbody td a, .link1 {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #0060ba;
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
margin: 0 5px 0 0;
|
||||||
|
&:hover {
|
||||||
|
color: #003260;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.form {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
width: 500px;
|
||||||
|
padding: 20px;
|
||||||
|
input, textarea, select {
|
||||||
|
width: 100%;
|
||||||
|
padding: 15px 5px;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid darken($background-color, 5);
|
||||||
|
&:hover, &:active {
|
||||||
|
border-bottom: 1px solid darken($background-color, 20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
input[type="checkbox"] {
|
||||||
|
width: auto;
|
||||||
|
margin: 15px 0 25px 2px;
|
||||||
|
transform: scale(1.2);
|
||||||
|
}
|
||||||
|
input[type="submit"] {
|
||||||
|
background: $btn-color;
|
||||||
|
border: 0;
|
||||||
|
color: #FFFFFF;
|
||||||
|
width: auto;
|
||||||
|
padding: 12px 15px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
&:hover {
|
||||||
|
background: darken($btn-color, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
background-color: darken($background-color, 5);
|
||||||
|
color: darken($background-color, 50);
|
||||||
|
border: 0;
|
||||||
|
padding: 5px;
|
||||||
|
width: 100%;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 14px;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover {
|
||||||
|
background-color: darken($background-color, 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.submit-btns {
|
||||||
|
display: flex;
|
||||||
|
input:first-child {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
.delete {
|
||||||
|
background-color: #b03b3b;
|
||||||
|
&:hover {
|
||||||
|
background-color: darken(#b03b3b, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.links {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: wrap;
|
||||||
|
padding-top: 20px;
|
||||||
|
> a {
|
||||||
|
display: inline-flex;
|
||||||
|
text-decoration: none;
|
||||||
|
background: $btn-color;
|
||||||
|
color: #FFFFFF;
|
||||||
|
padding: 12px 15px;
|
||||||
|
margin-right: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 4px;
|
||||||
|
&:hover {
|
||||||
|
background: darken($btn-color, 3);
|
||||||
|
}
|
||||||
|
&.alt {
|
||||||
|
background: $btn-alt-color;
|
||||||
|
&:hover {
|
||||||
|
background: darken($btn-alt-color, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.error {
|
||||||
|
padding: 15px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 25px 0;
|
||||||
|
a {
|
||||||
|
display: inline-flex;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: #758497;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 7px 10px;
|
||||||
|
&:hover {
|
||||||
|
background-color: darken(#758497, 3);
|
||||||
|
}
|
||||||
|
&:first-child {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@media screen and (max-width: 1000px) {
|
||||||
|
header {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
.responsive-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.responsive-width-100 {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
.responsive-flex-column {
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
padding: 70px 7px 20px 7px;
|
||||||
|
.content-block {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
.dashboard {
|
||||||
|
flex-flow: column;
|
||||||
|
.stat {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,231 @@
|
|||||||
|
<?php
|
||||||
|
include 'main.php';
|
||||||
|
$dir = "../../files/";
|
||||||
|
/*
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
ini_set('display_startup_errors', 1);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Handle success messages
|
||||||
|
if (isset($_GET['success_msg'])) {
|
||||||
|
if ($_GET['success_msg'] == 1) {
|
||||||
|
$success_msg = 'File deleted successfully!';
|
||||||
|
}
|
||||||
|
if ($_GET['success_msg'] == 2) {
|
||||||
|
$success_msg = 'File updated successfully!';
|
||||||
|
}
|
||||||
|
if ($_GET['success_msg'] == 3) {
|
||||||
|
$success_msg = 'File created successfully!';
|
||||||
|
}
|
||||||
|
if ($_GET['success_msg'] == 4) {
|
||||||
|
$success_msg = 'Files deleted successfully!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle error messages
|
||||||
|
if (isset($_GET['error_msg'])) {
|
||||||
|
if ($_GET['error_msg'] == 1) {
|
||||||
|
$error_msg = 'File Cant Be Deleted';
|
||||||
|
}
|
||||||
|
if ($_GET['error_msg'] == 2) {
|
||||||
|
$error_msg = 'File Upload Error';
|
||||||
|
}
|
||||||
|
if ($_GET['error_msg'] == 3) {
|
||||||
|
$error_msg = 'An Error Occured';
|
||||||
|
}
|
||||||
|
if ($_GET['error_msg'] == 4) {
|
||||||
|
$error_msg = 'File path doesnt exist.';
|
||||||
|
}
|
||||||
|
if ($_GET['error_msg'] == 5) {
|
||||||
|
$error_msg = 'File path not found.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// filelist
|
||||||
|
|
||||||
|
function list_directory_files($dir) {
|
||||||
|
|
||||||
|
if (is_dir($dir)) {
|
||||||
|
if ($handle = opendir($dir)) {
|
||||||
|
|
||||||
|
while (($file = readdir($handle)) !== false) {
|
||||||
|
if ($file != "." && $file != ".." && $file != "Thumbs.db" && $file != "index.php") {
|
||||||
|
echo '<tr>';
|
||||||
|
echo '<td>';
|
||||||
|
echo $file;
|
||||||
|
echo '</td>';
|
||||||
|
echo '<td>';
|
||||||
|
echo '<a class="link1" href="?path='.$dir.''.$file.'">Download</a>';
|
||||||
|
echo '<a class="link1" href="?delete&file='.$dir.''.$file.'">Delete</a>';
|
||||||
|
echo '</td>';
|
||||||
|
echo '</tr>';
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir($handle);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// download file
|
||||||
|
|
||||||
|
if(isset($_GET['path']))
|
||||||
|
{
|
||||||
|
//Read the url
|
||||||
|
$url = $_GET['path'];
|
||||||
|
|
||||||
|
//Clear the cache
|
||||||
|
clearstatcache();
|
||||||
|
|
||||||
|
//Check the file path exists or not
|
||||||
|
if(file_exists($url)) {
|
||||||
|
|
||||||
|
//Define header information
|
||||||
|
header('Content-Description: File Transfer');
|
||||||
|
header('Content-Type: application/octet-stream');
|
||||||
|
header('Content-Disposition: attachment; filename="'.basename($url).'"');
|
||||||
|
header('Content-Length: ' . filesize($url));
|
||||||
|
header('Pragma: public');
|
||||||
|
|
||||||
|
//Clear system output buffer
|
||||||
|
flush();
|
||||||
|
|
||||||
|
//Read the size of the file
|
||||||
|
readfile($url,true);
|
||||||
|
|
||||||
|
//Terminate from the script
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// do nothing
|
||||||
|
|
||||||
|
|
||||||
|
if(isset($_GET['delete'], $_GET['file'])){
|
||||||
|
|
||||||
|
$delfile = $_GET['file'];
|
||||||
|
/*
|
||||||
|
header("Location: $delfile");
|
||||||
|
*/
|
||||||
|
If (unlink($delfile)) {
|
||||||
|
// file was successfully deleted
|
||||||
|
header("Refresh:0 url=files.php?success_msg=1");
|
||||||
|
} else {
|
||||||
|
// there was a problem deleting the file
|
||||||
|
header("Refresh:0 url=files.php?error_msg=1");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
|
||||||
|
|
||||||
|
<?=template_admin_header('Files', 'files')?>
|
||||||
|
|
||||||
|
<h2>Files</h2>
|
||||||
|
|
||||||
|
<div class="content-header links">
|
||||||
|
<button class="btn" onclick="exportTableToExcel('data');"><i class="fa-solid fa-file-excel"></i> Export page to .xls</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Display Success Alert -->
|
||||||
|
<?php if (isset($success_msg)): ?>
|
||||||
|
<div class="msg success">
|
||||||
|
<i class="fas fa-check-circle"></i>
|
||||||
|
<p><?=$success_msg?></p>
|
||||||
|
<i class="fas fa-times"></i>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<!-- Display Error Message -->
|
||||||
|
<?php if (isset($error_msg)): ?>
|
||||||
|
<div class="msg error">
|
||||||
|
<i class="fa fa-exclamation-triangle"></i>
|
||||||
|
<p><?=$error_msg?></p>
|
||||||
|
<i class="fas fa-times"></i>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div class="content-block">
|
||||||
|
<div class="table">
|
||||||
|
<table id="data">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td>File</td>
|
||||||
|
<td>Actions</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<?php list_directory_files($dir); ?>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function(){
|
||||||
|
$('#data').after('<div id="nav"></div>');
|
||||||
|
var rowsShown = 25;
|
||||||
|
var rowsTotal = $('#data tbody tr').length;
|
||||||
|
var numPages = rowsTotal/rowsShown;
|
||||||
|
for(i = 0;i < numPages;i++) {
|
||||||
|
var pageNum = i + 1;
|
||||||
|
$('#nav').append('<a class="btn disabled" href="#" rel="'+i+'">'+pageNum+'</a> ');
|
||||||
|
}
|
||||||
|
$('#data tbody tr').hide();
|
||||||
|
$('#data tbody tr').slice(0, rowsShown).show();
|
||||||
|
$('#nav a:first').addClass('active');
|
||||||
|
$('#nav a').bind('click', function(){
|
||||||
|
|
||||||
|
$('#nav a').removeClass('active');
|
||||||
|
$(this).addClass('active');
|
||||||
|
var currPage = $(this).attr('rel');
|
||||||
|
var startItem = currPage * rowsShown;
|
||||||
|
var endItem = startItem + rowsShown;
|
||||||
|
$('#data tbody tr').css('opacity','0.0').hide().slice(startItem, endItem).
|
||||||
|
css('display','table-row').animate({opacity:1}, 300);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
function exportTableToExcel(tableID, filename = ''){
|
||||||
|
var downloadLink;
|
||||||
|
var dataType = 'application/vnd.ms-excel';
|
||||||
|
var tableSelect = document.getElementById(tableID);
|
||||||
|
var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
|
||||||
|
|
||||||
|
// Specify file name
|
||||||
|
filename = filename?filename+'.xls':'exported_data.xls';
|
||||||
|
|
||||||
|
// Create download link element
|
||||||
|
downloadLink = document.createElement("a");
|
||||||
|
|
||||||
|
document.body.appendChild(downloadLink);
|
||||||
|
|
||||||
|
if(navigator.msSaveOrOpenBlob){
|
||||||
|
var blob = new Blob(['\ufeff', tableHTML], {
|
||||||
|
type: dataType
|
||||||
|
});
|
||||||
|
navigator.msSaveOrOpenBlob( blob, filename);
|
||||||
|
}else{
|
||||||
|
// Create a link to the file
|
||||||
|
downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
|
||||||
|
|
||||||
|
// Setting the file name
|
||||||
|
downloadLink.download = filename;
|
||||||
|
|
||||||
|
//triggering the function
|
||||||
|
downloadLink.click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<?=template_admin_footer()?>
|
@ -1 +1,113 @@
|
|||||||
|
<?php
|
||||||
|
include 'main.php';
|
||||||
|
include_once '../../system/config.php';
|
||||||
|
/*
|
||||||
|
ini_set('display_errors', 1);
|
||||||
|
ini_set('display_startup_errors', 1);
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
|
||||||
|
*/
|
||||||
|
// Get total files in uploads directory
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
$directory = "../.$file_url_destination./files/"; // dir location
|
||||||
|
if (glob($directory . "*.*") != false)
|
||||||
|
{
|
||||||
|
$filecount = count(glob($directory. "*.*"));
|
||||||
|
|
||||||
|
}
|
||||||
|
// file size of upload dir
|
||||||
|
|
||||||
|
function folderSize($dir){
|
||||||
|
$count_size = 0;
|
||||||
|
$count = 0;
|
||||||
|
$dir_array = scandir($dir);
|
||||||
|
foreach($dir_array as $key=>$filename){
|
||||||
|
if($filename!=".." && $filename!="." && $filename!="index.php"){
|
||||||
|
if(is_dir($dir."/".$filename)){
|
||||||
|
$new_foldersize = foldersize($dir."/".$filename);
|
||||||
|
$count_size = $count_size+ $new_foldersize;
|
||||||
|
}else if(is_file($dir."/".$filename)){
|
||||||
|
$count_size = $count_size + filesize($dir."/".$filename);
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $count_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
// size converter
|
||||||
|
|
||||||
|
function sizeFormat($bytes){
|
||||||
|
$kb = 1024;
|
||||||
|
$mb = $kb * 1024;
|
||||||
|
$gb = $mb * 1024;
|
||||||
|
$tb = $gb * 1024;
|
||||||
|
|
||||||
|
if (($bytes >= 0) && ($bytes < $kb)) {
|
||||||
|
return $bytes . ' B';
|
||||||
|
|
||||||
|
} elseif (($bytes >= $kb) && ($bytes < $mb)) {
|
||||||
|
return ceil($bytes / $kb) . ' KB';
|
||||||
|
|
||||||
|
} elseif (($bytes >= $mb) && ($bytes < $gb)) {
|
||||||
|
return ceil($bytes / $mb) . ' MB';
|
||||||
|
|
||||||
|
} elseif (($bytes >= $gb) && ($bytes < $tb)) {
|
||||||
|
return ceil($bytes / $gb) . ' GB';
|
||||||
|
|
||||||
|
} elseif ($bytes >= $tb) {
|
||||||
|
return ceil($bytes / $tb) . ' TB';
|
||||||
|
} else {
|
||||||
|
return $bytes . ' B';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get size of folders in a folder
|
||||||
|
$plugin_count = count(glob('../../plugins/*', GLOB_ONLYDIR));
|
||||||
|
|
||||||
|
?>
|
||||||
|
<?=template_admin_header('Dashboard', 'dashboard')?>
|
||||||
|
|
||||||
|
<h2>Dashboard</h2>
|
||||||
|
|
||||||
|
<div class="dashboard">
|
||||||
|
<div class="content-block stat">
|
||||||
|
<div class="data">
|
||||||
|
<h3>Total Files</h3>
|
||||||
|
<p><?php echo $filecount ?></p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-file"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-block stat">
|
||||||
|
<div class="data">
|
||||||
|
<h3>Storage Used</h3>
|
||||||
|
<p><?php echo sizeFormat(folderSize($directory)); ?></p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-database"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-block stat">
|
||||||
|
<div class="data">
|
||||||
|
<h3>Plugins Installed</h3>
|
||||||
|
<p><?php echo $plugin_count; ?></p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-plug"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="content-block stat">
|
||||||
|
<div class="data">
|
||||||
|
<h3>Version</h3>
|
||||||
|
<p>
|
||||||
|
1.0
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<i class="fas fa-info"></i>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<?=template_admin_footer()?>
|
@ -0,0 +1,147 @@
|
|||||||
|
<?php
|
||||||
|
// Check if the user is logged-in
|
||||||
|
include_once '../protect.php';
|
||||||
|
// Add/remove roles from the list
|
||||||
|
$roles_list = ['Admin', 'Member'];
|
||||||
|
// Logout User on '?logout' -->
|
||||||
|
if(isset($_GET['logout']))
|
||||||
|
{
|
||||||
|
logout();
|
||||||
|
}
|
||||||
|
// Logout Function -->
|
||||||
|
function logout(){
|
||||||
|
session_destroy();
|
||||||
|
header("Location: ../");
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Template admin header
|
||||||
|
function template_admin_header($title, $selected = 'dashboard', $selected_child = '') {
|
||||||
|
// Admin HTML links
|
||||||
|
$admin_links = '
|
||||||
|
<a href="index.php"' . ($selected == 'dashboard' ? ' class="selected"' : '') . '><i class="fas fa-tachometer-alt"></i>Dashboard</a>
|
||||||
|
<a href="files.php"' . ($selected == 'files' ? ' class="selected"' : '') . '><i class="fas fa-file-alt"></i>Files</a>
|
||||||
|
<a href="settings.php"' . ($selected == 'settings' ? ' class="selected"' : '') . '><i class="fas fa-tools"></i>Settings</a>
|
||||||
|
<div class="footer">
|
||||||
|
<a href="https://support.superdev.one" target="_blank">AnonFiles</a>
|
||||||
|
Version 1.0.0
|
||||||
|
</div>
|
||||||
|
';
|
||||||
|
// Indenting the below code may cause an error
|
||||||
|
echo <<<EOT
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width,minimum-scale=1">
|
||||||
|
<title>$title</title>
|
||||||
|
<link href="admin.css" rel="stylesheet" type="text/css">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.0.0/css/all.css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="admin">
|
||||||
|
<aside class="responsive-width-100 responsive-hidden">
|
||||||
|
<h1>Anonfiles Admin Panel</h1>
|
||||||
|
$admin_links
|
||||||
|
</aside>
|
||||||
|
<main class="responsive-width-100">
|
||||||
|
<header>
|
||||||
|
<a class="responsive-toggle" href="#">
|
||||||
|
<i class="fas fa-bars"></i>
|
||||||
|
</a>
|
||||||
|
<div class="space-between"></div>
|
||||||
|
<a href="?logout" class="right"><i class="fas fa-sign-out-alt"></i></a>
|
||||||
|
</header>
|
||||||
|
EOT;
|
||||||
|
}
|
||||||
|
// Template admin footer
|
||||||
|
function template_admin_footer() {
|
||||||
|
// Indenting the below code may cause an error
|
||||||
|
echo <<<EOT
|
||||||
|
</main>
|
||||||
|
<script>
|
||||||
|
let aside = document.querySelector("aside"), main = document.querySelector("main"), header = document.querySelector("header");
|
||||||
|
let asideStyle = window.getComputedStyle(aside);
|
||||||
|
if (localStorage.getItem("admin_menu") == "closed") {
|
||||||
|
aside.classList.add("closed", "responsive-hidden");
|
||||||
|
main.classList.add("full");
|
||||||
|
header.classList.add("full");
|
||||||
|
}
|
||||||
|
document.querySelector(".responsive-toggle").onclick = event => {
|
||||||
|
event.preventDefault();
|
||||||
|
if (asideStyle.display == "none") {
|
||||||
|
aside.classList.remove("closed", "responsive-hidden");
|
||||||
|
main.classList.remove("full");
|
||||||
|
header.classList.remove("full");
|
||||||
|
localStorage.setItem("admin_menu", "");
|
||||||
|
} else {
|
||||||
|
aside.classList.add("closed", "responsive-hidden");
|
||||||
|
main.classList.add("full");
|
||||||
|
header.classList.add("full");
|
||||||
|
localStorage.setItem("admin_menu", "closed");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.querySelectorAll(".tabs a").forEach((element, index) => {
|
||||||
|
element.onclick = event => {
|
||||||
|
event.preventDefault();
|
||||||
|
document.querySelectorAll(".tabs a").forEach((element, index) => element.classList.remove("active"));
|
||||||
|
document.querySelectorAll(".tab-content").forEach((element2, index2) => {
|
||||||
|
if (index == index2) {
|
||||||
|
element.classList.add("active");
|
||||||
|
element2.style.display = "block";
|
||||||
|
} else {
|
||||||
|
element2.style.display = "none";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
});
|
||||||
|
if (document.querySelector(".filters a")) {
|
||||||
|
let filtersList = document.querySelector(".filters .list");
|
||||||
|
let filtersListStyle = window.getComputedStyle(filtersList);
|
||||||
|
document.querySelector(".filters a").onclick = event => {
|
||||||
|
event.preventDefault();
|
||||||
|
if (filtersListStyle.display == "none") {
|
||||||
|
filtersList.style.display = "flex";
|
||||||
|
} else {
|
||||||
|
filtersList.style.display = "none";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.onclick = event => {
|
||||||
|
if (!event.target.closest(".filters")) {
|
||||||
|
filtersList.style.display = "none";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
document.querySelectorAll(".msg").forEach(element => {
|
||||||
|
element.querySelector(".fa-times").onclick = () => {
|
||||||
|
element.remove();
|
||||||
|
history.replaceState && history.replaceState(null, '', location.pathname + location.search.replace(/[\?&]success_msg=[^&]+/, '').replace(/^&/, '?') + location.hash);
|
||||||
|
history.replaceState && history.replaceState(null, '', location.pathname + location.search.replace(/[\?&]error_msg=[^&]+/, '').replace(/^&/, '?') + location.hash);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
history.replaceState && history.replaceState(null, '', location.pathname + location.search.replace(/[\?&]success_msg=[^&]+/, '').replace(/^&/, '?') + location.hash);
|
||||||
|
history.replaceState && history.replaceState(null, '', location.pathname + location.search.replace(/[\?&]error_msg=[^&]+/, '').replace(/^&/, '?') + location.hash);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
EOT;
|
||||||
|
}
|
||||||
|
// Convert date to elapsed string function
|
||||||
|
function time_elapsed_string($datetime, $full = false) {
|
||||||
|
$now = new DateTime;
|
||||||
|
$ago = new DateTime($datetime);
|
||||||
|
$diff = $now->diff($ago);
|
||||||
|
$diff->w = floor($diff->d / 7);
|
||||||
|
$diff->d -= $diff->w * 7;
|
||||||
|
$string = ['y' => 'year','m' => 'month','w' => 'week','d' => 'day','h' => 'hour','i' => 'minute','s' => 'second'];
|
||||||
|
foreach ($string as $k => &$v) {
|
||||||
|
if ($diff->$k) {
|
||||||
|
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : '');
|
||||||
|
} else {
|
||||||
|
unset($string[$k]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$full) $string = array_slice($string, 0, 1);
|
||||||
|
return $string ? implode(', ', $string) . ' ago' : 'just now';
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
include 'main.php';
|
||||||
|
// Configuration file
|
||||||
|
$file = '../../system/config.php';
|
||||||
|
// Open the configuration file for reading
|
||||||
|
$contents = file_get_contents($file);
|
||||||
|
// Format key function
|
||||||
|
function format_key($key) {
|
||||||
|
$key = str_replace(['_', 'url', 'db ', ' pass', ' user'], [' ', 'URL', 'Database ', ' Password', ' Username'], strtolower($key));
|
||||||
|
return ucwords($key);
|
||||||
|
}
|
||||||
|
// Format HTML output function
|
||||||
|
function format_var_html($key, $value) {
|
||||||
|
$html = '';
|
||||||
|
$type = 'text';
|
||||||
|
$value = htmlspecialchars(trim($value, '\''), ENT_QUOTES);
|
||||||
|
$type = strpos($key, 'pass') !== false ? 'password' : $type;
|
||||||
|
$type = in_array(strtolower($value), ['true', 'false']) ? 'checkbox' : $type;
|
||||||
|
$checked = strtolower($value) == 'true' ? ' checked' : '';
|
||||||
|
$html .= '<label for="' . $key . '">' . format_key($key) . '</label>';
|
||||||
|
if ($type == 'checkbox') {
|
||||||
|
$html .= '<input type="hidden" name="' . $key . '" value="false">';
|
||||||
|
}
|
||||||
|
$html .= '<input type="' . $type . '" name="' . $key . '" id="' . $key . '" value="' . $value . '" placeholder="' . format_key($key) . '"' . $checked . '>';
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
// Format form
|
||||||
|
function format_form($contents) {
|
||||||
|
$rows = explode("\n", $contents);
|
||||||
|
echo '<div class="tab-content active">';
|
||||||
|
for ($i = 0; $i < count($rows); $i++) {
|
||||||
|
preg_match('/\/\*(.*?)\*\//', $rows[$i], $match);
|
||||||
|
if ($match) {
|
||||||
|
echo '</div><div class="tab-content">';
|
||||||
|
}
|
||||||
|
preg_match('/define\(\'(.*?)\', ?(.*?)\)/', $rows[$i], $match);
|
||||||
|
if ($match) {
|
||||||
|
echo format_var_html($match[1], $match[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
if (!empty($_POST)) {
|
||||||
|
// Update the configuration file with the new keys and values
|
||||||
|
foreach ($_POST as $k => $v) {
|
||||||
|
$v = in_array(strtolower($v), ['true', 'false']) ? strtolower($v) : '\'' . $v . '\'';
|
||||||
|
$contents = preg_replace('/define\(\'' . $k . '\'\, ?(.*?)\)/s', 'define(\'' . $k . '\',' . $v . ')', $contents);
|
||||||
|
}
|
||||||
|
file_put_contents('../../system/config.php', $contents);
|
||||||
|
header('Location: settings.php?success_msg=1');
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
// Handle success messages
|
||||||
|
// fas-times-circle for error messages and demo
|
||||||
|
if (isset($_GET['success_msg'])) {
|
||||||
|
if ($_GET['success_msg'] == 1) {
|
||||||
|
$success_msg = 'Settings updated successfully!';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<?=template_admin_header('Settings', 'settings')?>
|
||||||
|
|
||||||
|
<h2>Settings</h2>
|
||||||
|
|
||||||
|
<?php if (isset($success_msg)): ?>
|
||||||
|
<div class="msg success">
|
||||||
|
<i class="fas fa-check-circle"></i>
|
||||||
|
<p><?=$success_msg?></p>
|
||||||
|
<i class="fas fa-times"></i>
|
||||||
|
</div>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="content-block">
|
||||||
|
<form action="" method="post" class="form responsive-width-100">
|
||||||
|
<?=format_form($contents)?>
|
||||||
|
<div>
|
||||||
|
<input type="submit" class="btn" value="Save">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.querySelectorAll("input[type='checkbox']").forEach(checkbox => {
|
||||||
|
checkbox.onclick = () => {
|
||||||
|
checkbox.value = checkbox.checked ? 'true' : 'false';
|
||||||
|
};
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<?=template_admin_footer()?>
|
Loading…
Reference in New Issue