54 ?array $a_file_labels = [],
55 ?
string $a_label_header =
"",
56 ?array $a_commands = [],
57 ?
bool $a_post_dir_path =
false,
58 ?
string $a_table_id =
"" 61 $this->
setId($a_table_id);
62 $this->
ctrl = $DIC->ctrl();
63 $this->
lng = $DIC->language();
64 if ($a_cur_dir !== realpath($a_cur_dir)) {
65 throw new \InvalidArgumentException(
'$a_cur_dir must be a absolute path');
67 $this->
filesystem = LegacyPathHelper::deriveFilesystemFrom($a_cur_dir);
68 $this->relative_cur_dir = LegacyPathHelper::createRelativePath($a_cur_dir);
69 $this->cur_dir = $a_cur_dir;
70 $this->cur_subdir = $a_cur_subdir;
71 $this->label_enable = $a_label_enable;
72 $this->label_header = $a_label_header;
73 $this->file_labels = $a_file_labels;
74 $this->post_dir_path = $a_post_dir_path;
75 $this->filesystem_gui = $a_parent_obj;
76 $this->ui_factory = $DIC->ui()->factory();
77 $this->ui_renderer = $DIC->ui()->renderer();
82 $this->has_multi =
false;
84 foreach ((array) $a_commands as $i => $command) {
85 if (!($command[
"single"] ??
false)) {
88 $this->has_multi =
true;
90 $this->row_commands[] = array(
91 "cmd" =>
"extCommand_" . $i,
92 "caption" => $command[
"name"],
93 "allow_dir" => $command[
"allow_dir"] ??
false,
94 "method" => $command[
"method"] ?? null,
106 "tpl.directory_row.html",
107 "components/ILIAS/Filesystem" 114 if ($a_field ==
"size") {
134 if ($this->cur_dir !==
'') {
146 $basename = basename($content->getPath());
147 $entries[$basename] = [
150 'entry' => $basename,
151 'type' => $content->isDir() ?
'dir' :
'file',
153 'size' => $content->isFile() ? $this->
filesystem->getSize($content->getPath(), 1)->inBytes() : 0
157 $entries = array(array(
"type" =>
"dir",
"entry" =>
".."));
161 foreach ($entries as
$e) {
162 if (($e[
"entry"] ==
".") || ($e[
"entry"] ==
".." && empty($this->cur_subdir))) {
165 $cfile = (!empty($this->cur_subdir))
166 ? $this->cur_subdir .
"/" . $e[
"entry"]
169 if ($this->label_enable) {
170 $label = (isset($this->file_labels[$cfile]) && is_array($this->file_labels[$cfile]))
171 ? implode(
", ", $this->file_labels[$cfile])
175 $pref = ($e[
"type"] ==
"dir")
180 "entry" => $e[
"entry"],
181 "type" => $e[
"type"],
182 "label" => $label ??
'',
183 "size" => $e[
"size"] ??
'',
184 "name" => $pref . $e[
"entry"]
192 if ($this->has_multi) {
198 $this->
addColumn($this->
lng->txt(
"cont_dir_file"),
"name");
201 if ($this->label_enable) {
202 $this->
addColumn($this->label_header,
"label");
205 if (
sizeof($this->row_commands)) {
212 return $entry[
'entry'] ===
'..';
218 protected function fillRow(array $a_set): void
220 $hash = $this->post_dir_path
221 ? md5($a_set[
"file"])
222 : md5($a_set[
"entry"]);
224 if ($this->has_multi) {
226 $this->tpl->touchBlock(
'no_checkbox');
228 $this->tpl->setVariable(
"CHECKBOX_ID", $hash);
233 if ($this->label_enable) {
234 $this->tpl->setCurrentBlock(
"Label");
235 $this->tpl->setVariable(
"TXT_LABEL", $a_set[
"label"]);
236 $this->tpl->parseCurrentBlock();
239 $this->
ctrl->setParameter($this->parent_obj,
"cdir", $this->cur_subdir);
241 if ($a_set[
"type"] ==
"dir") {
242 $this->tpl->setCurrentBlock(
"FileLink");
243 $this->
ctrl->setParameter($this->parent_obj,
"newdir", $a_set[
"entry"]);
244 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset", 1);
245 $this->tpl->setVariable(
247 $this->
ctrl->getLinkTarget($this->parent_obj,
"listFiles")
249 $this->
ctrl->setParameter($this->parent_obj,
"newdir",
"");
250 $this->tpl->setVariable(
"TXT_FILENAME", $a_set[
"entry"]);
251 $this->tpl->parseCurrentBlock();
253 $this->tpl->setVariable(
258 $this->
ctrl->setParameter($this->parent_obj,
"resetoffset",
"");
260 $this->tpl->setCurrentBlock(
"File");
261 $this->tpl->setVariable(
"TXT_FILENAME2", $this->secure($a_set[
"entry"]));
262 $this->tpl->parseCurrentBlock();
265 if ($a_set[
"type"] !=
"dir") {
270 if (count($this->row_commands) > 0 && !($a_set[
"type"] ===
"dir" && $a_set[
"entry"] ===
"..")) {
273 foreach ($this->row_commands as $rcom) {
274 if ($rcom[
"allow_dir"] || $a_set[
"type"] !==
"dir") {
275 $file_path = $this->cur_dir . $a_set[
'entry'];
280 $this->
ctrl->setParameter($this->parent_obj,
"fhsh", $hash);
281 $url = $this->
ctrl->getLinkTarget($this->parent_obj, $rcom[
"cmd"]);
282 $this->
ctrl->setParameter($this->parent_obj,
"fhsh",
"");
284 $actions[] = $this->ui_factory->link()->standard($rcom[
"caption"],
$url);
289 $dropdown = $this->ui_factory->dropdown()->standard($actions);
290 $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)
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)
static getImagePath(string $image_name, string $module_path="", string $mode="output", bool $offline=false)
get image path (for images located in a template directory)
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="")
__construct(Container $dic, ilPlugin $plugin)
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)