178 lines
5.8 KiB
PHP
178 lines
5.8 KiB
PHP
<?php
|
|
// Datenbankverbindungsdaten
|
|
$servername = "localhost"; // oder der Hostname deines DB-Servers
|
|
$username = "nc-site_request"; // Dein neuer MariaDB Benutzername
|
|
$password = "***"; // Dein Passwort für den neuen Benutzer
|
|
$dbname = "nextcloud"; // Der Name deiner Nextcloud-Datenbank
|
|
|
|
// Verbindung zur MySQL-Datenbank aufbauen
|
|
$conn = new mysqli($servername, $username, $password, $dbname);
|
|
|
|
// Verbindung prüfen
|
|
if ($conn->connect_error) {
|
|
die("Verbindung fehlgeschlagen: " . $conn->connect_error);
|
|
}
|
|
|
|
// 1. Abfrage: Alle Dateien, deren Pfad '%files/archive/%' enthält
|
|
$sql1 = "SELECT fc.fileid, fc.name AS file_name, fc.path AS file_path, fc.size, fc.mimetype
|
|
FROM oc_filecache AS fc
|
|
WHERE fc.path LIKE '%files/archive/%'
|
|
ORDER BY fc.name DESC";
|
|
|
|
$result1 = $conn->query($sql1);
|
|
|
|
// 2. Abfrage: Alle Mimetypes und ihre IDs
|
|
$sql2 = "SELECT id, mimetype FROM oc_mimetypes";
|
|
$result2 = $conn->query($sql2);
|
|
|
|
// 3. Abfrage: Alle Tags im System
|
|
$sql3 = "SELECT id, name FROM oc_systemtag";
|
|
$result3 = $conn->query($sql3);
|
|
|
|
// 4. Abfrage: Verknüpfung zwischen Files und Tags (mit 'files' statt 'file')
|
|
$sql4 = "SELECT objectid, systemtagid
|
|
FROM oc_systemtag_object_mapping
|
|
WHERE objecttype = 'files'";
|
|
|
|
$result4 = $conn->query($sql4);
|
|
|
|
// Alle Mimetypes in einem Array speichern
|
|
$mimetypes = [];
|
|
while ($row = $result2->fetch_assoc()) {
|
|
$mimetypes[$row['id']] = $row['mimetype'];
|
|
}
|
|
|
|
// Alle Tags in einem Array speichern
|
|
$tags = [];
|
|
while ($row = $result3->fetch_assoc()) {
|
|
$tags[$row['id']] = $row['name'];
|
|
}
|
|
|
|
// Tags mit Dateiinformationen verbinden
|
|
$fileTags = [];
|
|
while ($row = $result4->fetch_assoc()) {
|
|
$fileTags[$row['objectid']][] = $tags[$row['systemtagid']];
|
|
}
|
|
|
|
// Füge den Tag "archive" zu jedem Eintrag in fileTags hinzu
|
|
// foreach ($fileTags as $fileId => $existingTags) {
|
|
// // Prüfen, ob der Tag "archive" bereits vorhanden ist
|
|
// if (!in_array('archive', $existingTags)) {
|
|
// // Füge den Tag "archive" hinzu (nur im Array, nicht in der DB)
|
|
// $fileTags[$fileId][] = 'archive';
|
|
// }
|
|
// }
|
|
|
|
|
|
// HTML-Tabelle erstellen
|
|
echo "<!DOCTYPE html>
|
|
<html lang='en'>
|
|
<head>
|
|
<meta charset='UTF-8'>
|
|
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
|
|
<title>File Information</title>
|
|
<!-- DataTables CSS -->
|
|
<link rel='stylesheet' type='text/css' href='https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css'>
|
|
<!-- jQuery (für DataTables benötigt) -->
|
|
<script src='https://code.jquery.com/jquery-3.6.0.min.js'></script>
|
|
<!-- DataTables JS -->
|
|
<script src='https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js'></script>
|
|
<style>
|
|
table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
}
|
|
table, th, td {
|
|
border: 1px solid black;
|
|
}
|
|
th, td {
|
|
padding: 8px;
|
|
text-align: left;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>File Information and Tags</h1>
|
|
|
|
<h2>All Tags:</h2>
|
|
<ul>";
|
|
|
|
// Alle Tags ausgeben
|
|
foreach ($tags as $tag_id => $tag_name) {
|
|
echo htmlspecialchars($tag_name) . ", ";
|
|
}
|
|
|
|
echo "</ul>";
|
|
|
|
|
|
|
|
echo "<h2>All files in Archive:</h2>
|
|
|
|
<table id='fileTable' class='display'>
|
|
<thead>
|
|
<tr>
|
|
<th>File ID</th>
|
|
<th>File Name</th>
|
|
<th>Size (MB)</th>
|
|
<th>Mimetype</th>
|
|
<th>Tags</th>
|
|
<th>edit</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>";
|
|
|
|
if ($result1->num_rows > 0) {
|
|
while ($row = $result1->fetch_assoc()) {
|
|
$file_id = $row['fileid'];
|
|
$file_name = $row['file_name'];
|
|
$file_size = $row['size'];
|
|
$file_size_in_mb = number_format($file_size / (1024 * 1024), 2);
|
|
$mimetype_id = $row['mimetype'];
|
|
$mimetype_name = isset($mimetypes[$mimetype_id]) ? $mimetypes[$mimetype_id] : 'Unknown';
|
|
|
|
// Hole die Tags für diese Datei
|
|
$file_tags = isset($fileTags[$file_id]) ? implode(', ', $fileTags[$file_id]) : 'No Tags';
|
|
|
|
// Prüfen, ob der Dateiname mit einem Datum im gewünschten Format beginnt (DDMMYY-HHMM oder DDMMYY_HHMM)
|
|
if (!preg_match('/^\d{6}[-_]\d{4}/', $file_name)) {
|
|
continue; // Diese Datei überspringen, wenn der Dateiname nicht mit dem gewünschten Format beginnt
|
|
}
|
|
|
|
// Generiere die URL für die Datei
|
|
$file_url = "https://pl4tform.org/data/files/{$file_name}";
|
|
|
|
// Zeile in die Tabelle einfügen und Dateinamen als Link formatieren
|
|
echo "<tr>
|
|
<td>{$file_id}</td>
|
|
<td><a href='https://pl4tform.org/ncdata/{$file_name}' target='_blank' title='Datei öffnen: {$file_name}'>{$file_name}</a></td>
|
|
<td>{$file_size_in_mb}</td>
|
|
<td>{$mimetype_name}</td>
|
|
<td>{$file_tags}</td>
|
|
<td><a href='https://cloud.pl4tform.org/f/{$file_id}'>edit</a></td>
|
|
</tr>";
|
|
}
|
|
} else {
|
|
echo "<tr><td colspan='5'>No data found</td></tr>";
|
|
}
|
|
|
|
echo " </tbody>
|
|
</table>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
// DataTables initialisieren, mit absteigender Sortierung und dynamischer Anzahl der Einträge pro Seite
|
|
$('#fileTable').DataTable({
|
|
'order': [[1, 'desc']], // 1 = 'File Name' Spalte, 'desc' für absteigende Sortierung
|
|
'pageLength': 100, // Standard: 100 Einträge pro Seite
|
|
'lengthMenu': [ // Auswahlmöglichkeiten für die Anzahl der angezeigten Einträge
|
|
[10, 50, 100, 500, 1000],
|
|
[10, 50, 100, 500, 1000] // Text für die Auswahl
|
|
]
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>";
|
|
|
|
$conn->close();
|
|
?>
|