ikinci temizlik tamamlandı

This commit is contained in:
Ümit Tunç
2026-04-28 21:15:09 +03:00
parent f80443aec0
commit 37e7296527
8313 changed files with 2400677 additions and 0 deletions
@@ -0,0 +1,293 @@
<?php
$folderPath = request('folder_path');
$storagePath = storage_path("documents/$folderPath");
$files = [];
if (is_dir($storagePath)) {
$items = scandir($storagePath);
foreach ($items as $item) {
if ($item != '.' && $item != '..') {
$fullPath = $storagePath . '/' . $item;
$relativePath = 'documents/' . $folderPath . '/' . $item;
if (is_file($fullPath)) {
$extension = strtolower(pathinfo($item, PATHINFO_EXTENSION));
$fileType = '';
$icon = '';
if (in_array($extension, ['xlsx', 'xls'])) {
$fileType = 'Excel';
$icon = 'fa-file-excel';
} elseif ($extension == 'pdf') {
$fileType = 'PDF';
$icon = 'fa-file-pdf';
} else {
$fileType = 'Other';
$icon = 'fa-file';
}
$fileSize = file_exists($fullPath) ? filesize($fullPath) : 0;
$files[] = [
'id' => count($files) + 1,
'name' => $item,
'type' => $fileType,
'extension' => $extension,
'size' => $fileSize,
'modified' => date('Y-m-d H:i:s', filemtime($fullPath)),
'path' => $relativePath,
'full_path' => $fullPath
];
}
}
}
}
// Dosyaları tarihe göre sırala (en yeni önce)
usort($files, function($a, $b) {
return strtotime($b['modified']) - strtotime($a['modified']);
});
?>
<style>
.file-grid-container {
margin-bottom: 20px;
}
.pdf-viewer-container {
margin-top: 20px;
border: 1px solid #ddd;
border-radius: 5px;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.pdf-viewer-container iframe {
width: 100%;
height: 600px;
border: none;
}
.pdf-viewer-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 10px 15px;
display: flex;
justify-content: space-between;
align-items: center;
}
.pdf-viewer-header h6 {
margin: 0;
font-weight: 600;
}
.pdf-viewer-close {
background: none;
border: none;
color: white;
font-size: 1.2em;
cursor: pointer;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background 0.2s;
}
.pdf-viewer-close:hover {
background: rgba(255,255,255,0.2);
}
.file-action-btn {
margin-right: 5px;
margin-bottom: 5px;
transition: all 0.2s;
}
.file-action-btn:hover {
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.no-files-message {
text-align: center;
padding: 40px;
color: #666;
}
@media (max-width: 768px) {
.pdf-viewer-container iframe {
height: 400px;
}
.file-action-btn {
margin-bottom: 8px;
}
}
</style>
@if(empty($files))
<div class="no-files-message">
<i class="fa fa-folder-open fa-3x mb-3"></i>
<h5>No files found in this folder</h5>
<p>Path: {{ $folderPath }}</p>
</div>
@else
<div class="file-grid-container">
<div id="fileDataGrid"></div>
</div>
<div class="pdf-viewer-container" id="pdfViewerContainer" style="display: none;">
<div class="pdf-viewer-header">
<h6>
<i class="fa fa-file-pdf"></i>
<span id="pdfFileName">PDF Viewer</span>
</h6>
<button type="button" class="pdf-viewer-close" onclick="closePdfViewer()">
<i class="fa fa-times"></i>
</button>
</div>
<iframe id="pdfViewer" src=""></iframe>
</div>
@endif
<script>
@if(!empty($files))
$(document).ready(function() {
var fileData = @json($files);
$("#fileDataGrid").dxDataGrid({
dataSource: fileData,
keyExpr: "id",
showBorders: true,
filterRow: {
visible: true
},
searchPanel: {
visible: true,
placeholder: "Search files..."
},
paging: {
pageSize: 10
},
pager: {
showPageSizeSelector: true,
allowedPageSizes: [5, 10, 20, 50],
showInfo: true,
infoText: "Showing {0}-{1} of {2} files"
},
sorting: {
mode: "multiple"
},
columnAutoWidth: true,
rowAlternationEnabled: true,
hoverStateEnabled: true,
showColumnLines: true,
showRowLines: true,
columns: [
{
dataField: "name",
caption: "File Name",
cellTemplate: function(container, options) {
var icon = '';
var iconClass = '';
if (options.data.type === 'Excel') {
icon = '<i class="fa fa-file-excel"></i>';
iconClass = 'text-success';
} else if (options.data.type === 'PDF') {
icon = '<i class="fa fa-file-pdf"></i>';
iconClass = 'text-danger';
} else {
icon = '<i class="fa fa-file"></i>';
iconClass = 'text-secondary';
}
container.html('<span class="' + iconClass + '">' + icon + '</span> <strong>' + options.data.name + '</strong>');
}
},
{
dataField: "type",
caption: "Type",
width: 80
},
{
dataField: "size",
caption: "Size",
width: 100,
dataType: "number",
format: function(value) {
if (value < 1024) return value + ' B';
if (value < 1024 * 1024) return (value / 1024).toFixed(1) + ' KB';
return (value / (1024 * 1024)).toFixed(1) + ' MB';
}
},
{
dataField: "modified",
caption: "Modified",
width: 150,
dataType: "datetime",
format: "dd.MM.yyyy HH:mm"
},
{
caption: "Actions",
width: 150,
cellTemplate: function(container, options) {
var html = '';
// Download button for Excel files
if (options.data.type === 'Excel') {
html += '<button class="btn btn-success btn-sm file-action-btn" onclick="downloadFile(\'' + options.data.path + '\', \'' + options.data.name + '\')" title="Download Excel">';
html += '<i class="fa fa-download"></i> Download';
html += '</button>';
}
// View button for PDF files
if (options.data.type === 'PDF') {
html += '<button class="btn btn-danger btn-sm file-action-btn" onclick="viewPdf(\'' + options.data.path + '\', \'' + options.data.name + '\')" title="View PDF">';
html += '<i class="fa fa-eye"></i> View';
html += '</button>';
}
container.html(html);
}
}
],
summary: {
totalItems: [{
column: "name",
summaryType: "count",
displayFormat: "Total: {0} files"
}]
}
});
});
@endif
function downloadFile(filePath, fileName) {
var downloadUrl = '{{ url("storage/") }}/' + filePath;
var link = document.createElement('a');
link.href = downloadUrl;
link.download = fileName;
link.target = '_blank';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// Başarı mesajı göster
DevExpress.ui.notify('File download started: ' + fileName, 'success', 3000);
}
function viewPdf(filePath, fileName) {
var pdfUrl = '{{ url("storage/") }}/' + filePath;
$('#pdfFileName').text(fileName);
$('#pdfViewer').attr('src', pdfUrl);
$('#pdfViewerContainer').show();
// Scroll to PDF viewer
$('#pdfViewerContainer')[0].scrollIntoView({ behavior: 'smooth' });
// Başarı mesajı göster
DevExpress.ui.notify('PDF opened: ' + fileName, 'success', 3000);
}
function closePdfViewer() {
$('#pdfViewerContainer').hide();
$('#pdfViewer').attr('src', '');
// Başarı mesajı göster
DevExpress.ui.notify('PDF viewer closed', 'info', 2000);
}
</script>