2024.12.11 01:19:04
This commit is contained in:
parent
40741e4477
commit
2be92ca3e5
@ -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;
|
||||
}
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
framework:
|
||||
default_locale: en
|
||||
default_locale: de
|
||||
translator:
|
||||
default_path: '%kernel.project_dir%/translations'
|
||||
fallbacks:
|
||||
- en
|
||||
- de
|
||||
|
||||
|
||||
@ -1 +0,0 @@
|
||||
# vim syn=yaml ts=2 sts=2 sw=2 smartindent expandtab
|
||||
@ -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;
|
||||
|
||||
@ -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':
|
||||
|
||||
@ -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>
|
||||
|
||||
6
translations/mydevel.webroot.app+intl-icu.de.yaml
Normal file
6
translations/mydevel.webroot.app+intl-icu.de.yaml
Normal 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}'
|
||||
6
translations/mydevel.webroot.app+intl-icu.en.yaml
Normal file
6
translations/mydevel.webroot.app+intl-icu.en.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
directory:
|
||||
timefmt: 'Y.d.m H.i.s'
|
||||
filename: 'Filename'
|
||||
mtime: 'Last changed'
|
||||
filesize: 'Size'
|
||||
title: 'Index for {url}'
|
||||
@ -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
|
||||
Loading…
Reference in New Issue
Block a user