24use ILIAS\ResourceStorage\Preloader\SecureString;
49 protected string $cur_subdir,
50 protected bool $label_enable,
51 protected array $file_labels = [],
52 protected string $label_header =
"",
53 ?array $a_commands = [],
54 protected ?
bool $post_dir_path =
false,
55 ?
string $a_table_id =
""
58 $this->
setId($a_table_id);
59 $this->
ctrl = $DIC->ctrl();
60 $this->
lng = $DIC->language();
61 if ($a_cur_dir !== realpath($a_cur_dir)) {
62 throw new \InvalidArgumentException(
'$a_cur_dir must be a absolute path');
64 $this->
filesystem = LegacyPathHelper::deriveFilesystemFrom($a_cur_dir);
65 $this->relative_cur_dir = LegacyPathHelper::createRelativePath($a_cur_dir);
66 $this->cur_dir = $a_cur_dir;
67 $this->ui_factory =
$DIC->ui()->factory();
68 $this->ui_renderer =
$DIC->ui()->renderer();
71 $this->
setTitle($this->
lng->txt(
"cont_files") .
" " . $this->cur_subdir);
73 $this->has_multi =
false;
75 foreach ((array) $a_commands as $i => $command) {
76 if (!($command[
"single"] ??
false)) {
79 $this->has_multi =
true;
81 $this->row_commands[] = [
82 "cmd" =>
"extCommand_" . $i,
83 "caption" => $command[
"name"],
84 "allow_dir" => $command[
"allow_dir"] ??
false,
85 "method" => $command[
"method"] ??
null,
97 "tpl.directory_row.html",
98 "components/ILIAS/Filesystem"
106 return $a_field ===
"size";
123 if ($this->cur_dir !==
'') {
135 $basename = basename($content->getPath());
136 $entries[$basename] = [
139 'entry' => $basename,
140 'type' => $content->isDir() ?
'dir' :
'file',
142 'size' => $content->isFile() ? $this->
filesystem->getSize($content->getPath(), 1)->inBytes() : 0
146 $entries = [[
"type" =>
"dir",
"entry" =>
".."]];
150 foreach ($entries as
$e) {
151 if (
$e[
"entry"] ===
".") {
154 if (
$e[
"entry"] ===
".." && empty($this->cur_subdir)) {
157 $cfile = (empty($this->cur_subdir))
159 : $this->cur_subdir .
"/" .
$e[
"entry"];
161 if ($this->label_enable) {
162 $label = (isset($this->file_labels[$cfile]) && is_array($this->file_labels[$cfile]))
163 ? implode(
", ", $this->file_labels[$cfile])
167 $pref = (
$e[
"type"] ===
"dir")
172 "entry" =>
$e[
"entry"],
173 "type" =>
$e[
"type"],
174 "label" => $label ??
'',
175 "size" =>
$e[
"size"] ??
'',
176 "name" => $pref .
$e[
"entry"]
184 if ($this->has_multi) {
190 $this->
addColumn($this->
lng->txt(
"cont_dir_file"),
"name");
193 if ($this->label_enable) {
194 $this->
addColumn($this->label_header,
"label");
197 if ($this->row_commands !== []) {
204 return $entry[
'entry'] ===
'..';
211 protected function fillRow(array $a_set): void
213 $hash = $this->post_dir_path
214 ? md5((
string) $a_set[
"file"])
215 : md5((
string) $a_set[
"entry"]);
217 if ($this->has_multi) {
219 $this->tpl->touchBlock(
'no_checkbox');
221 $this->tpl->setVariable(
"CHECKBOX_ID", $hash);
226 if ($this->label_enable) {
227 $this->tpl->setCurrentBlock(
"Label");
228 $this->tpl->setVariable(
"TXT_LABEL", $a_set[
"label"]);
229 $this->tpl->parseCurrentBlock();
232 $this->
ctrl->setParameter($this->parent_obj,
"cdir", $this->cur_subdir);
234 if ($a_set[
"type"] ==
"dir") {
235 $this->tpl->setCurrentBlock(
"FileLink");
236 $this->
ctrl->setParameter($this->parent_obj,
"newdir", $a_set[
"entry"]);
237 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset", 1);
238 $this->tpl->setVariable(
240 $this->
ctrl->getLinkTarget($this->parent_obj,
"listFiles")
242 $this->
ctrl->setParameter($this->parent_obj,
"newdir",
"");
243 $this->tpl->setVariable(
"TXT_FILENAME", $a_set[
"entry"]);
244 $this->tpl->parseCurrentBlock();
246 $this->tpl->setVariable(
251 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset",
"");
253 $this->tpl->setCurrentBlock(
"File");
254 $this->tpl->setVariable(
"TXT_FILENAME2", $this->secure($a_set[
"entry"]));
255 $this->tpl->parseCurrentBlock();
258 if ($a_set[
"type"] !=
"dir") {
263 if ($this->row_commands !== [] && !($a_set[
"type"] ===
"dir" && $a_set[
"entry"] ===
"..")) {
266 foreach ($this->row_commands as $rcom) {
267 if ($rcom[
"allow_dir"] || $a_set[
"type"] !==
"dir") {
268 $file_path = $this->cur_dir . $a_set[
'entry'];
273 $this->
ctrl->setParameter($this->parent_obj,
"fhsh", $hash);
274 $url = $this->
ctrl->getLinkTarget($this->parent_obj, $rcom[
"cmd"]);
275 $this->
ctrl->setParameter($this->parent_obj,
"fhsh",
"");
277 $actions[] = $this->ui_factory->link()->standard($rcom[
"caption"],
$url);
282 $dropdown = $this->ui_factory->dropdown()->standard($actions);
283 $this->tpl->setVariable(
"ACTIONS", $this->ui_renderer->render($dropdown));
Builds a Color from either hex- or rgb values.
The legacy path helper provides convenient functions for the integration of the filesystem service wi...
File System Explorer GUI class.
__construct(protected ilFileSystemGUI $filesystem_gui, string $a_parent_cmd, string $a_cur_dir, protected string $cur_subdir, protected bool $label_enable, protected array $file_labels=[], protected string $label_header="", ?array $a_commands=[], protected ?bool $post_dir_path=false, ?string $a_table_id="")
Constructor.
numericOrdering(string $a_field)
Should this field be sorted numeric?
isDoubleDotDirectory(array $entry)
fillRow(array $a_set)
Fill table row.
prepareOutput()
Anything that must be done before HTML is generated.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
determineOffsetAndOrder(bool $a_omit_offset=false)
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
setEnableTitle(bool $a_enabletitle)
addMultiCommand(string $a_cmd, string $a_text)
setFormAction(string $a_form_action, bool $a_multipart=false)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
setEnableHeader(bool $a_enableheader)
setDefaultOrderField(string $a_defaultorderfield)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setDefaultOrderDirection(string $a_defaultorderdirection)
setData(array $a_data)
Set table data.
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
static formatSize(int $size, string $a_mode='short', ?ilLanguage $a_lng=null)
Returns the specified file size value in a human friendly form.
The filesystem interface provides the public interface for the Filesystem service API consumer.
This is how the factory for UI elements looks.
An entity that renders components to a string output.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc