2024.12.11 01:19:04

This commit is contained in:
Christian Moser 2024-12-11 01:19:04 +01:00
parent 40741e4477
commit 2be92ca3e5
10 changed files with 110 additions and 43 deletions

View File

@ -392,3 +392,12 @@ fieldset {
width: 24;
height: 24;
}
.toolbar-button {
background-color: var(--background-color);
border: 1px solid var(--color-text);
}
.toolbar-item {
margin-right: 5px;
}

View File

@ -1,8 +1,7 @@
framework:
default_locale: en
default_locale: de
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- en
- de

View File

@ -1 +0,0 @@
# vim syn=yaml ts=2 sts=2 sw=2 smartindent expandtab

View File

@ -23,8 +23,8 @@ class FileSorter {
static public function sortTypeDesc(array $element1,array $element2): int
{
if ($element1['dir'] === $element2['dir']) {
return (strcmp($element2,$element1));
} elseif ($element1[dir]) {
return (strcmp($element2['name'],$element1['name']));
} elseif ($element1['dir']) {
return 1;
}
return -1;

View File

@ -87,6 +87,39 @@ abstract class WebrootController extends AbstractController
->findAbspathByUrl($url);
}
public function getDisplayFileSize(int $size): string
{
$display_size = "";
if ($size > 1073741824) {
$size_type = "GB";
$display_size .= ((int) ($size / 1073741824))
. "."
. ((int) ((($size % 1073741824) * 10) / 1073741824))
. " GiB";
} elseif ($size > 1048576) {
$display_size .= ((int) ($size / 1048576))
. "."
. ((int) ((($size % 1048576) * 10) / 1048576))
. " MiB";
} elseif ($size > 1024) {
$display_size .= ((int) ($size / 1024))
. "."
. ((int) ((($size % 1024) * 10) / 1024))
. " KiB";
} else {
$display_size .= $size . " B";
}
return $display_size;
}
public function getDisplayMtime(int $mtime): string
{
$dt = new \DateTime();
$dt->setTimestamp($mtime);
return $dt->format($this->trans("directory.timefmt",domain:'mydevel.webroot.app'));
}
protected function getDirectoryList(string $url): array
{
$abspath = $this->getAbspathByUrl($url);
@ -120,16 +153,20 @@ abstract class WebrootController extends AbstractController
if (!$fileperm['read']) {
continue;
}
$mtime = filemtime($file_abspath);
if (is_file($file_abspath)) {
$filesize = filesize($file_abspath);
$dirlist[] = [
"name" => $dirent,
"icon" => "icon-file",
"href" => $fileurl,
"size" => filesize($file_abspath),
"size" => $filesize,
"display_size" => $this->getDisplayFileSize($filesize),
"delete" => $fileperm['delete'],
"write" => $fileperm['write'],
"mtime" => filemtime($file_abspath),
"mtime" => $mtime,
"display_mtime" => $this->getDisplayMtime($mtime),
"read" => true,
"dir" => false,
];
@ -138,10 +175,12 @@ abstract class WebrootController extends AbstractController
"name" => $dirent,
"icon"=>"icon-directory",
"href" => $fileurl,
"size" => "-",
"size" => "0",
"display_size" => "-",
"delete" => $fileperm['delete'],
"write" => $fileperm['write'],
"mtime" => filemtime($file_abspath),
"mtime" => $mtime,
"display_mtime" => $this->getDisplayMtime($mtime),
"read" => true,
"dir" => true,
];
@ -158,28 +197,39 @@ abstract class WebrootController extends AbstractController
throw AccessDeniedHttpException("You are not allowed to accesss this resource!");
}
$sort_url = [
"type" => $url . "?S=T;0=A",
"name" => $url . "?S=N;T=A",
"size" => $url . "?S=S;T=A",
"date" => $url . "?S=D;T=A",
];
$sorter = FileSorter::class;
switch ($sort) {
case FileSortType::TYPE_ASC:
uasort($dirlist,[$sorter,'sortTypeAsc']);
$sort_url["type"] = $url . "?S=T;O=D";
breaK;
case FileSortType::TYPE_DESC:
uasort($dirlist,[$sorter,'sortTypeDesc']);
break;
case FileSortType::NAME_ASC:
uasort($dirlist,[$sorter,'sortNameAsc']);
$sort_url["name"] = $url . "?S=N;O=D";
break;
case FileSortType::NAME_DESC:
uasort($dirlist,[$sorter,'sortNameDesc']);
break;
case FileSortType::SIZE_ASC:
uasort($dirlist,[$sorter,'sortSizeAsc']);
$sort_url["size"] = $url ."?S=S;O=D";
break;
case FileSortType::SIZE_DESC:
uasort($dirlist,[$sorter,'sortSizeDesc']);
break;
case FileSortType::DATE_ASC:
uasort($dirlist,[$sorter,'sortDateAsc']);
$sort_url["date"] = $url . "?S=D;O=D";
break;
case FileSortType::DATE_DESC:
uasort($dirlist,[$sorter,'sortDateDesc']);
@ -190,6 +240,12 @@ abstract class WebrootController extends AbstractController
return $this->render('webroot/directory.html.twig', array_merge(
$this->getControllerVariables(), [
"msg"=> [
'filename' => $this->trans("directory.filename",domain:'mydevel.webroot.app'),
'mtime' => $this->trans("directory.mtime",domain:'mydevel.webroot.app'),
'filesize' => $this->trans("directory.filesize",domain:'mydevel.webroot.app'),
'title' => $this->trans("directory.title",["url"=>$url],domain:'mydevel.webroot.app'),
],
"parent_url"=>$routeconf['parent_url'],
"url"=>$url,
"read"=>$dirperm['read'],
@ -202,6 +258,7 @@ abstract class WebrootController extends AbstractController
? $this->generateUrl($routeconf['mkdir_route'],["path"=>$routeconf['path']]) . "/"
: substr($this->generateUrl($routeconf['mkdir_route'],['path'=>"."]),0,-1)),
"dir_entries"=>$dirlist,
"sort_url" => $sort_url,
]
));
}
@ -212,6 +269,7 @@ abstract class WebrootController extends AbstractController
return FileSortType::TYPE_ASC;
}
$sa = explode(";",$sort);
$s0 = $sa[0];
if (sizeof($sa) > 1) {
$s1 = explode("=",$sa[1]);
if (sizeof($s1) !== 2) {
@ -221,6 +279,7 @@ abstract class WebrootController extends AbstractController
$s1 = ['O','A'];
}
$ret = FileSortType::TYPE_ASC;
switch ($s0) {
case 'T':

View File

@ -1,46 +1,46 @@
{% extends 'base.html.twig' %}
{% block body %}
<h3>Index for <em>{{ url }}</em></h3>
{% block main %}
<h3>{{ msg.title }}</em></h3>
<div class="toolbar">
{% if write %}
<span class="toolbar-item">
<a class="toolbar-button" href="{#{ 'create_dir' }#}">
<img src="{{ asset('icons/mkdir.svg') }}" alt="create-icon"/>
</a>
<button class="toolbar-button" href="{#{ 'create_dir' }#}">
<img src="{{ asset('icons/mkdir.svg') }}" width="32" height="32" alt="create-icon"/>
</button>
</span>
<span class="toolbar-item">
<a class="toolbar-button" href="{#{ 'upload_file' }#}">
<img alt="upload-icon" src="{{ asset('icons/upload.svg') }}"/>
</a>
<button class="toolbar-button" href="{#{ 'upload_file' }#}">
<img alt="upload-icon" width="32" height="32" src="{{ asset('icons/upload.svg') }}"/>
</button>
</span>
{% endif %}
</div>
<table class="full-width"><!-- Directory Index -->
<tr>
<th class="td-color shrink-to-fit"><a href="{#{ 'sort_standard_href' }#}"><img class="list-icon icon-empty" alt="[icon]" /></a></th>
<th class="td-color fullwidth left"><a href="{#{ 'sort_name_href' }#}">Name</a></th>
<th class="td-color shrink-to-fit left"><a href="{#{ 'sort_name_href' }#}">Size</a></th>
<th class="td-color shrink-to-fit left"><a href="{#{ 'sort_time_href' }#}">Last changed</a></th>
<th class="td-color shrink-to-fit"><a href="{{ sort_url.type }}"><img class="list-icon icon-empty" alt="[icon]" /></a></th>
<th class="td-color fullwidth left"><a href="{{ sort_url.name }}">{{ msg.filename }}</a></th>
<th class="td-color shrink-to-fit left"></th>
<th class="td-color left"><a href="{{ sort_url.size }}">{{ msg.filesize }}</a></th>
<th class="td-color left"><a href="{{ sort_url.date }}">{{ msg.mtime }}</a></th>
</tr>
<tr><td colspan="5"><strong><hr></strong></td></tr>
{% if parent_url %}
<tr>
<td><img class="list-icon icon-back" alt="[icon]"/></td>
<td><a href="{{ parent_url }}">Zurück</a></td>
<td>-</td>
<td>-</td>
<td>-</td>
<td><a href="{{ parent_url }}">Back</a></td>
<td><img class="list-icon icon-empty" alt="[icon]"/></td>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
{% endif %}
{% for entry in dir_entries %}
<tr>
<td><img class="list-icon {{ entry.icon }}" alt="[icon]"/></td>
<td><img class="list-icon {{ entry.icon }}" alt="[icon]" width="24" height="24" /></td>
<td><a href="{{ entry.href }}">{{ entry.name }}</a></td>
<td>{{ entry.size }}</td>
<td>{{ entry.mtime }}</td>
<td>
{% if entry.delete %}
<a href="{{ entry.delete }}"<img class="list-icon icon-delete" alt="[icon]" /></a>
@ -48,6 +48,8 @@
<img class="list-icon icon-empty" alt="[icon]" />
{% endif %}
</td>
<td class="shrink-to-fit">{{ entry.display_size }}</td>
<td class="shrink-to-fit">{{ entry.display_mtime }}</td>
</tr>
{% endfor %}
<tr><td colspan="5"><strong><hr></strong></td></tr>

View File

@ -0,0 +1,6 @@
directory:
timefmt: 'd.m.Y H:i:s'
filename: Dateiname
mtime: 'Zuletzt geändert'
filesize: Größe
title: 'Index für {url}'

View File

@ -0,0 +1,6 @@
directory:
timefmt: 'Y.d.m H.i.s'
filename: 'Filename'
mtime: 'Last changed'
filesize: 'Size'
title: 'Index for {url}'

View File

@ -1,13 +0,0 @@
role:
superadmin:
name: __role.superadmin.name
descr: __role.superadmin.descr
admin:
name: __role.admin.name
descr: __role.admin.descr
user:
name: __role.user.name
descr: __role.user.descr
public:
name: __role.public.name
descr: __role.public.descr