File "explorer024.php"
Full Path: /home/analogde/www/react-native/2024_PHP_02_11_2024/explorer/explorer024.php
File size: 5.28 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// Connexion à la base de données
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_database_name";
$servername = "analogdepat.mysql.db";
$username = "analogdepat";
$password = "Un92pac007";
$dbname = "analogdepat";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Récupérer les données de la table
$sql = "SELECT name, element FROM lists_fichiers";
$result = $conn->query($sql);
$data = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$name = $row['name'];
$element = $row['element'];
if (!isset($data[$name])) {
$data[$name] = [];
}
$data[$name][] = $element;
}
}
$conn->close();
// Convertir le tableau en JSON
$jsonData = json_encode($data);
function scanDirectory($directory) {
$result = [];
$files = scandir($directory);
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
$path = $directory . DIRECTORY_SEPARATOR . $file;
if (is_dir($path)) {
$result[] = [
'name' => $file,
'type' => 'directory',
'children' => scanDirectory($path)
];
} else {
$result[] = [
'name' => $file,
'type' => 'file',
'created' => date('Y-m-d H:i:s', filectime($path))
];
}
}
}
return $result;
}
function displayTree($tree, $fileData, $level = 0) {
foreach ($tree as $item) {
if (isset($fileData[$item['name']])) {
echo '<ul class="tree-item" style="margin-left: ' . ($level * 20) . 'px; list-style-type: none;">';
echo '<li>';
echo '<span class="toggle" onclick="toggleTree(this)">+</span>';
echo '<span class="name"><i class="fas fa-check-circle green-icon"></i>' . htmlspecialchars($item['name']) .
'<span class="created-date">' . htmlspecialchars($item['created']) . '</span>'
.'</span>';
//if (isset($item['created'])) {
// echo '<span class="created-date">' . htmlspecialchars($item['created']) . '</span>';
//}
echo '<ul class="sub-list" style="display: none;">';
foreach ($fileData[$item['name']] as $subElement) {
echo '<li class="sub-element"><i class="fas fa-sitemap sub-element-icon"></i><span class="context-menu-trigger">' . htmlspecialchars($subElement) . '</span></li>';
}
echo '</ul>';
echo '</li>';
echo '</ul>';
} else {
echo '<div class="tree-item" style="margin-left: ' . ($level * 20) . 'px;">';
echo '<span class="toggle" onclick="toggleTree(this)">' . ($item['type'] === 'directory' ? '+' : '') . '</span>';
$iconClass = $item['type'] === 'directory' ? 'fas fa-folder directory-icon' : 'fas fa-file floppy-icon';
echo '<span class="name"><i class="' . $iconClass . '"></i>' . htmlspecialchars($item['name']) . '</span>';
if (isset($item['created'])) {
echo '<span class="created-date">' . htmlspecialchars($item['created']) . '</span>';
}
if (isset($item['children'])) {
echo '<div class="tree-children" style="display: none;">';
displayTree($item['children'], $fileData, $level + 1);
echo '</div>';
}
echo '</div>';
}
}
}
$directory = 'path/to/your/directory'; // Remplacez par le chemin de vot document.addEventListener('click', function(event) {
const menu = document.getElementById('context-menu');
if (menu.style.display === 'block' && !event.target.classList.contains('context-menu-trigger')) {
menu.style.display = 'none';
}
});
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
const menu = document.getElementById('context-menu');
menu.style.display = 'none';
}
});
function handleContextMenuClick(option) {
const menu = document.getElementById('context-menu');
menu.style.display = 'none';
alert('Option sélectionnée: ' + option);
if (option === 'Lien') {
window.location.href = 'redirect.php?parent=' + encodeURIComponent(menu.dataset.parent) + '&item=' + encodeURIComponent(menu.dataset.item);
}
}
</script>
</head>
<body>
<div class="tree-view">
<?php displayTree($tree, json_decode($jsonData, true)); ?>
</div>
<div id="context-menu" class="context-menu">
<ul>
<li onclick="handleContextMenuClick('Option 1')">Option 1</li>
<li onclick="handleContextMenuClick('Option 2')">Option 2</li>
<li onclick="handleContextMenuClick('Option 3')">Option 3</li>
<li onclick="handleContextMenuClick('Option 4')">Option 4</li>
<li onclick="handleContextMenuClick('Option 5')">Option 5</li>
<li onclick="handleContextMenuClick('Lien')">Lien</li>
</ul>
</div>
</body>
</html>