2024.12.11 01:19:04
This commit is contained in:
parent
40741e4477
commit
2be92ca3e5
@ -392,3 +392,12 @@ fieldset {
|
|||||||
width: 24;
|
width: 24;
|
||||||
height: 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:
|
framework:
|
||||||
default_locale: en
|
default_locale: de
|
||||||
translator:
|
translator:
|
||||||
default_path: '%kernel.project_dir%/translations'
|
default_path: '%kernel.project_dir%/translations'
|
||||||
fallbacks:
|
fallbacks:
|
||||||
- en
|
- en
|
||||||
- de
|
- 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
|
static public function sortTypeDesc(array $element1,array $element2): int
|
||||||
{
|
{
|
||||||
if ($element1['dir'] === $element2['dir']) {
|
if ($element1['dir'] === $element2['dir']) {
|
||||||
return (strcmp($element2,$element1));
|
return (strcmp($element2['name'],$element1['name']));
|
||||||
} elseif ($element1[dir]) {
|
} elseif ($element1['dir']) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@ -87,6 +87,39 @@ abstract class WebrootController extends AbstractController
|
|||||||
->findAbspathByUrl($url);
|
->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
|
protected function getDirectoryList(string $url): array
|
||||||
{
|
{
|
||||||
$abspath = $this->getAbspathByUrl($url);
|
$abspath = $this->getAbspathByUrl($url);
|
||||||
@ -120,16 +153,20 @@ abstract class WebrootController extends AbstractController
|
|||||||
if (!$fileperm['read']) {
|
if (!$fileperm['read']) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
$mtime = filemtime($file_abspath);
|
||||||
if (is_file($file_abspath)) {
|
if (is_file($file_abspath)) {
|
||||||
|
$filesize = filesize($file_abspath);
|
||||||
|
|
||||||
$dirlist[] = [
|
$dirlist[] = [
|
||||||
"name" => $dirent,
|
"name" => $dirent,
|
||||||
"icon" => "icon-file",
|
"icon" => "icon-file",
|
||||||
"href" => $fileurl,
|
"href" => $fileurl,
|
||||||
"size" => filesize($file_abspath),
|
"size" => $filesize,
|
||||||
|
"display_size" => $this->getDisplayFileSize($filesize),
|
||||||
"delete" => $fileperm['delete'],
|
"delete" => $fileperm['delete'],
|
||||||
"write" => $fileperm['write'],
|
"write" => $fileperm['write'],
|
||||||
"mtime" => filemtime($file_abspath),
|
"mtime" => $mtime,
|
||||||
|
"display_mtime" => $this->getDisplayMtime($mtime),
|
||||||
"read" => true,
|
"read" => true,
|
||||||
"dir" => false,
|
"dir" => false,
|
||||||
];
|
];
|
||||||
@ -138,10 +175,12 @@ abstract class WebrootController extends AbstractController
|
|||||||
"name" => $dirent,
|
"name" => $dirent,
|
||||||
"icon"=>"icon-directory",
|
"icon"=>"icon-directory",
|
||||||
"href" => $fileurl,
|
"href" => $fileurl,
|
||||||
"size" => "-",
|
"size" => "0",
|
||||||
|
"display_size" => "-",
|
||||||
"delete" => $fileperm['delete'],
|
"delete" => $fileperm['delete'],
|
||||||
"write" => $fileperm['write'],
|
"write" => $fileperm['write'],
|
||||||
"mtime" => filemtime($file_abspath),
|
"mtime" => $mtime,
|
||||||
|
"display_mtime" => $this->getDisplayMtime($mtime),
|
||||||
"read" => true,
|
"read" => true,
|
||||||
"dir" => true,
|
"dir" => true,
|
||||||
];
|
];
|
||||||
@ -158,28 +197,39 @@ abstract class WebrootController extends AbstractController
|
|||||||
throw AccessDeniedHttpException("You are not allowed to accesss this resource!");
|
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;
|
$sorter = FileSorter::class;
|
||||||
switch ($sort) {
|
switch ($sort) {
|
||||||
case FileSortType::TYPE_ASC:
|
case FileSortType::TYPE_ASC:
|
||||||
uasort($dirlist,[$sorter,'sortTypeAsc']);
|
uasort($dirlist,[$sorter,'sortTypeAsc']);
|
||||||
|
$sort_url["type"] = $url . "?S=T;O=D";
|
||||||
breaK;
|
breaK;
|
||||||
case FileSortType::TYPE_DESC:
|
case FileSortType::TYPE_DESC:
|
||||||
uasort($dirlist,[$sorter,'sortTypeDesc']);
|
uasort($dirlist,[$sorter,'sortTypeDesc']);
|
||||||
break;
|
break;
|
||||||
case FileSortType::NAME_ASC:
|
case FileSortType::NAME_ASC:
|
||||||
uasort($dirlist,[$sorter,'sortNameAsc']);
|
uasort($dirlist,[$sorter,'sortNameAsc']);
|
||||||
|
$sort_url["name"] = $url . "?S=N;O=D";
|
||||||
break;
|
break;
|
||||||
case FileSortType::NAME_DESC:
|
case FileSortType::NAME_DESC:
|
||||||
uasort($dirlist,[$sorter,'sortNameDesc']);
|
uasort($dirlist,[$sorter,'sortNameDesc']);
|
||||||
break;
|
break;
|
||||||
case FileSortType::SIZE_ASC:
|
case FileSortType::SIZE_ASC:
|
||||||
uasort($dirlist,[$sorter,'sortSizeAsc']);
|
uasort($dirlist,[$sorter,'sortSizeAsc']);
|
||||||
|
$sort_url["size"] = $url ."?S=S;O=D";
|
||||||
break;
|
break;
|
||||||
case FileSortType::SIZE_DESC:
|
case FileSortType::SIZE_DESC:
|
||||||
uasort($dirlist,[$sorter,'sortSizeDesc']);
|
uasort($dirlist,[$sorter,'sortSizeDesc']);
|
||||||
break;
|
break;
|
||||||
case FileSortType::DATE_ASC:
|
case FileSortType::DATE_ASC:
|
||||||
uasort($dirlist,[$sorter,'sortDateAsc']);
|
uasort($dirlist,[$sorter,'sortDateAsc']);
|
||||||
|
$sort_url["date"] = $url . "?S=D;O=D";
|
||||||
break;
|
break;
|
||||||
case FileSortType::DATE_DESC:
|
case FileSortType::DATE_DESC:
|
||||||
uasort($dirlist,[$sorter,'sortDateDesc']);
|
uasort($dirlist,[$sorter,'sortDateDesc']);
|
||||||
@ -190,6 +240,12 @@ abstract class WebrootController extends AbstractController
|
|||||||
|
|
||||||
return $this->render('webroot/directory.html.twig', array_merge(
|
return $this->render('webroot/directory.html.twig', array_merge(
|
||||||
$this->getControllerVariables(), [
|
$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'],
|
"parent_url"=>$routeconf['parent_url'],
|
||||||
"url"=>$url,
|
"url"=>$url,
|
||||||
"read"=>$dirperm['read'],
|
"read"=>$dirperm['read'],
|
||||||
@ -202,6 +258,7 @@ abstract class WebrootController extends AbstractController
|
|||||||
? $this->generateUrl($routeconf['mkdir_route'],["path"=>$routeconf['path']]) . "/"
|
? $this->generateUrl($routeconf['mkdir_route'],["path"=>$routeconf['path']]) . "/"
|
||||||
: substr($this->generateUrl($routeconf['mkdir_route'],['path'=>"."]),0,-1)),
|
: substr($this->generateUrl($routeconf['mkdir_route'],['path'=>"."]),0,-1)),
|
||||||
"dir_entries"=>$dirlist,
|
"dir_entries"=>$dirlist,
|
||||||
|
"sort_url" => $sort_url,
|
||||||
]
|
]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -212,6 +269,7 @@ abstract class WebrootController extends AbstractController
|
|||||||
return FileSortType::TYPE_ASC;
|
return FileSortType::TYPE_ASC;
|
||||||
}
|
}
|
||||||
$sa = explode(";",$sort);
|
$sa = explode(";",$sort);
|
||||||
|
$s0 = $sa[0];
|
||||||
if (sizeof($sa) > 1) {
|
if (sizeof($sa) > 1) {
|
||||||
$s1 = explode("=",$sa[1]);
|
$s1 = explode("=",$sa[1]);
|
||||||
if (sizeof($s1) !== 2) {
|
if (sizeof($s1) !== 2) {
|
||||||
@ -221,6 +279,7 @@ abstract class WebrootController extends AbstractController
|
|||||||
$s1 = ['O','A'];
|
$s1 = ['O','A'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$ret = FileSortType::TYPE_ASC;
|
$ret = FileSortType::TYPE_ASC;
|
||||||
switch ($s0) {
|
switch ($s0) {
|
||||||
case 'T':
|
case 'T':
|
||||||
|
|||||||
@ -1,46 +1,46 @@
|
|||||||
{% extends 'base.html.twig' %}
|
{% extends 'base.html.twig' %}
|
||||||
|
|
||||||
{% block body %}
|
{% block main %}
|
||||||
<h3>Index for <em>{{ url }}</em></h3>
|
<h3>{{ msg.title }}</em></h3>
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
{% if write %}
|
{% if write %}
|
||||||
<span class="toolbar-item">
|
<span class="toolbar-item">
|
||||||
<a class="toolbar-button" href="{#{ 'create_dir' }#}">
|
<button class="toolbar-button" href="{#{ 'create_dir' }#}">
|
||||||
<img src="{{ asset('icons/mkdir.svg') }}" alt="create-icon"/>
|
<img src="{{ asset('icons/mkdir.svg') }}" width="32" height="32" alt="create-icon"/>
|
||||||
</a>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<span class="toolbar-item">
|
<span class="toolbar-item">
|
||||||
<a class="toolbar-button" href="{#{ 'upload_file' }#}">
|
<button class="toolbar-button" href="{#{ 'upload_file' }#}">
|
||||||
<img alt="upload-icon" src="{{ asset('icons/upload.svg') }}"/>
|
<img alt="upload-icon" width="32" height="32" src="{{ asset('icons/upload.svg') }}"/>
|
||||||
</a>
|
</button>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<table class="full-width"><!-- Directory Index -->
|
<table class="full-width"><!-- Directory Index -->
|
||||||
<tr>
|
<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 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_name_href' }#}">Name</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"><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 left"></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>
|
||||||
<tr><td colspan="5"><strong><hr></strong></td></tr>
|
<tr><td colspan="5"><strong><hr></strong></td></tr>
|
||||||
{% if parent_url %}
|
{% if parent_url %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><img class="list-icon icon-back" alt="[icon]"/></td>
|
<td><img class="list-icon icon-back" alt="[icon]"/></td>
|
||||||
<td><a href="{{ parent_url }}">Zurück</a></td>
|
<td><a href="{{ parent_url }}">Back</a></td>
|
||||||
<td>-</td>
|
|
||||||
<td>-</td>
|
|
||||||
<td>-</td>
|
|
||||||
<td><img class="list-icon icon-empty" alt="[icon]"/></td>
|
<td><img class="list-icon icon-empty" alt="[icon]"/></td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% for entry in dir_entries %}
|
{% for entry in dir_entries %}
|
||||||
<tr>
|
<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><a href="{{ entry.href }}">{{ entry.name }}</a></td>
|
||||||
<td>{{ entry.size }}</td>
|
|
||||||
<td>{{ entry.mtime }}</td>
|
|
||||||
<td>
|
<td>
|
||||||
{% if entry.delete %}
|
{% if entry.delete %}
|
||||||
<a href="{{ entry.delete }}"<img class="list-icon icon-delete" alt="[icon]" /></a>
|
<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]" />
|
<img class="list-icon icon-empty" alt="[icon]" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
|
<td class="shrink-to-fit">{{ entry.display_size }}</td>
|
||||||
|
<td class="shrink-to-fit">{{ entry.display_mtime }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<tr><td colspan="5"><strong><hr></strong></td></tr>
|
<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