HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.30
System: Linux iZj6c1151k3ad370bosnmsZ 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64
User: root (0)
PHP: 7.4.30
Disabled: NONE
Upload Files
File: /var/www/html/www.winghung.com/wp-content/plugins/custom-listing/custom-listing.php
<?php
/**
 * Plugin Name: Directory Listing
 * Description: A simple plugin to list files and folders from a specific directory.
 * Version: 1.1
 * Author: Your Name
 */

// Function to recursively get files and directories
function list_files_in_directory($directory, $base_url) {
    $files = array_diff(scandir($directory), array('..', '.')); // Get files and folders, excluding '.' and '..'
    $output = '';

    foreach ($files as $file) {
        $file_path = $directory . '/' . $file;

        if (is_dir($file_path)) {
            // If it's a directory, add it to the output and list its contents recursively
            $output .= '<li class="folder"><strong>' . esc_html($file) . '</strong>';
            $output .= '<ul>' . list_files_in_directory($file_path, $base_url . '/' . $file) . '</ul></li>';
        } else {
            // If it's a file, create a clickable link to download
            $output .= '<li class="file"><a href="' . esc_url($base_url . '/' . $file) . '" download>' . esc_html($file) . '</a></li>';
        }
    }

    return $output;
}

function list_document_files() {
    $directory = ABSPATH . 'document'; // Path to your 'document' folder
    $base_url = home_url('document'); // Base URL for the document folder
    $output = '<ul class="file-explorer">' . list_files_in_directory($directory, $base_url) . '</ul>';
    return $output;
}

function display_directory_listing() {
    return list_document_files();
}

// Register the shortcode [directory_listing]
add_shortcode('directory_listing', 'display_directory_listing');


// Enqueue styles
function document_file_list_styles() {
    echo '
    <style>
        .file-explorer {
            list-style-type: none;
            padding: 0;
            margin: 0;
        }
        .file-explorer li {
            padding: 8px;
            border: 1px solid #ccc;
            margin: 4px 0;
            border-radius: 4px;
            background-color: #f9f9f9;
        }
        .file-explorer li.folder {
            background-color: #e0f7fa; /* Light blue for folders */
        }
        .file-explorer li.file a {
            text-decoration: none;
            color: #007bff; /* Bootstrap primary color */
        }
        .file-explorer li:hover {
            background-color: #f0f0f0; /* Light grey on hover */
        }
        .file-explorer li.folder:hover {
            background-color: #b2ebf2; /* Darker blue on folder hover */
        }
    </style>
    ';
}
add_action('wp_head', 'document_file_list_styles');