53 ?array $a_file_labels = [],
54 ?
string $a_label_header =
"",
55 ?array $a_commands = [],
56 ?
bool $a_post_dir_path =
false,
57 ?
string $a_table_id =
"" 60 $this->
setId($a_table_id);
61 $this->
ctrl = $DIC->ctrl();
62 $this->
lng = $DIC->language();
63 if ($a_cur_dir !== realpath($a_cur_dir)) {
64 throw new \InvalidArgumentException(
'$a_cur_dir must be a absolute path');
66 $this->
filesystem = LegacyPathHelper::deriveFilesystemFrom($a_cur_dir);
67 $this->relative_cur_dir = LegacyPathHelper::createRelativePath($a_cur_dir);
68 $this->cur_dir = $a_cur_dir;
69 $this->cur_subdir = $a_cur_subdir;
70 $this->label_enable = $a_label_enable;
71 $this->label_header = $a_label_header;
72 $this->file_labels = $a_file_labels;
73 $this->post_dir_path = $a_post_dir_path;
74 $this->filesystem_gui = $a_parent_obj;
75 $this->ui_factory = $DIC->ui()->factory();
76 $this->ui_renderer = $DIC->ui()->renderer();
81 $this->has_multi =
false;
83 foreach ((array) $a_commands as $i => $command) {
84 if (!($command[
"single"] ??
false)) {
87 $this->has_multi =
true;
89 $this->row_commands[] = array(
90 "cmd" =>
"extCommand_" . $i,
91 "caption" => $command[
"name"],
92 "allow_dir" => $command[
"allow_dir"] ??
false,
93 "method" => $command[
"method"] ?? null,
105 "tpl.directory_row.html",
106 "Services/FileSystem" 113 if ($a_field ==
"size") {
130 if ($this->
filesystem->has($this->relative_cur_dir)) {
132 if ($this->cur_dir !==
'') {
143 foreach ($this->
filesystem->listContents($this->relative_cur_dir) as $i => $content) {
144 $basename = basename($content->getPath());
145 $entries[$basename] = [
148 'entry' => $basename,
149 'type' => $content->isDir() ?
'dir' :
'file',
151 'size' => $content->isFile() ? $this->
filesystem->getSize($content->getPath(), 1)->inBytes() : 0
155 $entries = array(array(
"type" =>
"dir",
"entry" =>
".."));
159 foreach ($entries as
$e) {
160 if (($e[
"entry"] ==
".") || ($e[
"entry"] ==
".." && empty($this->cur_subdir))) {
163 $cfile = (!empty($this->cur_subdir))
164 ? $this->cur_subdir .
"/" . $e[
"entry"]
167 if ($this->label_enable) {
168 $label = (isset($this->file_labels[$cfile]) && is_array($this->file_labels[$cfile]))
169 ? implode(
", ", $this->file_labels[$cfile])
173 $pref = ($e[
"type"] ==
"dir")
178 "entry" => $e[
"entry"],
179 "type" => $e[
"type"],
180 "label" => $label ??
'',
181 "size" => $e[
"size"] ??
'',
182 "name" => $pref . $e[
"entry"]
190 if ($this->has_multi) {
196 $this->
addColumn($this->
lng->txt(
"cont_dir_file"),
"name");
199 if ($this->label_enable) {
200 $this->
addColumn($this->label_header,
"label");
203 if (
sizeof($this->row_commands)) {
210 return $entry[
'entry'] ===
'..';
216 protected function fillRow(array $a_set): void
218 $hash = $this->post_dir_path
219 ? md5($a_set[
"file"])
220 : md5($a_set[
"entry"]);
222 if ($this->has_multi) {
224 $this->tpl->touchBlock(
'no_checkbox');
226 $this->tpl->setVariable(
"CHECKBOX_ID", $hash);
231 if ($this->label_enable) {
232 $this->tpl->setCurrentBlock(
"Label");
233 $this->tpl->setVariable(
"TXT_LABEL", $a_set[
"label"]);
234 $this->tpl->parseCurrentBlock();
237 $this->
ctrl->setParameter($this->parent_obj,
"cdir", $this->cur_subdir);
239 if ($a_set[
"type"] ==
"dir") {
240 $this->tpl->setCurrentBlock(
"FileLink");
241 $this->
ctrl->setParameter($this->parent_obj,
"newdir", $a_set[
"entry"]);
242 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset", 1);
243 $this->tpl->setVariable(
245 $this->
ctrl->getLinkTarget($this->parent_obj,
"listFiles")
247 $this->
ctrl->setParameter($this->parent_obj,
"newdir",
"");
248 $this->tpl->setVariable(
"TXT_FILENAME", $a_set[
"entry"]);
249 $this->tpl->parseCurrentBlock();
251 $this->tpl->setVariable(
256 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset",
"");
258 $this->tpl->setCurrentBlock(
"File");
259 $this->tpl->setVariable(
"TXT_FILENAME2", $this->secure($a_set[
"entry"]));
260 $this->tpl->parseCurrentBlock();
263 if ($a_set[
"type"] !=
"dir") {
268 if (count($this->row_commands) > 0 && !($a_set[
"type"] ===
"dir" && $a_set[
"entry"] ===
"..")) {
271 foreach ($this->row_commands as $rcom) {
272 if ($rcom[
"allow_dir"] || $a_set[
"type"] !==
"dir") {
273 $file_path = $this->cur_dir . $a_set[
'entry'];
278 $this->
ctrl->setParameter($this->parent_obj,
"fhsh", $hash);
279 $url = $this->
ctrl->getLinkTarget($this->parent_obj, $rcom[
"cmd"]);
280 $this->
ctrl->setParameter($this->parent_obj,
"fhsh",
"");
282 $actions[] = $this->ui_factory->link()->standard($rcom[
"caption"],
$url);
287 $dropdown = $this->ui_factory->dropdown()->standard($actions);
288 $this->tpl->setVariable(
"ACTIONS", $this->ui_renderer->render($dropdown));
ILIAS UI Renderer $ui_renderer
setFormAction(string $a_form_action, bool $a_multipart=false)
setEnableTitle(bool $a_enabletitle)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
static getImagePath(string $img, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
ilFileSystemGUI $filesystem_gui
setDefaultOrderField(string $a_defaultorderfield)
ILIAS Filesystem Filesystem $filesystem
static formatSize(int $size, string $a_mode='short', ?ilLanguage $a_lng=null)
Returns the specified file size value in a human friendly form.
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
isDoubleDotDirectory(array $entry)
setDefaultOrderDirection(string $a_defaultorderdirection)
ILIAS UI Factory $ui_factory
fillRow(array $a_set)
Fill table row.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
numericOrdering(string $a_field)
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)
File System Explorer GUI class.
__construct(ilFileSystemGUI $a_parent_obj, string $a_parent_cmd, string $a_cur_dir, string $a_cur_subdir, bool $a_label_enable, ?array $a_file_labels=[], ?string $a_label_header="", ?array $a_commands=[], ?bool $a_post_dir_path=false, ?string $a_table_id="")
Constructor.
addMultiCommand(string $a_cmd, string $a_text)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
determineOffsetAndOrder(bool $a_omit_offset=false)
setEnableHeader(bool $a_enableheader)