ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilFileVersionsTableGUI.php
Go to the documentation of this file.
1<?php
2
25
31{
32 private Container $dic;
33 private int $current_version;
34 private \ilObjFile $file;
35 private Services $irss;
38 protected UIServices $ui;
39 protected bool $has_been_migrated = false;
40
44 protected array $modals = [];
45
49 public function __construct(
50 ilFileVersionsGUI $calling_gui_class,
51 string $a_parent_cmd = ilFileVersionsGUI::CMD_DEFAULT
52 ) {
53 global $DIC;
54 $this->dic = $DIC;
55 $this->ui = $DIC->ui();
56 $this->irss = $DIC->resourceStorage();
57 $this->setId(self::class);
58 parent::__construct($calling_gui_class, $a_parent_cmd, "");
59 $this->file = $calling_gui_class->getFile();
60 $this->current_version = $this->file->getVersion(true);
61 $rid = $this->irss->manage()->find(
62 $this->file->getResourceId()
63 );
64 $revision = $this->irss->manage()->getCurrentRevisionIncludingDraft(
65 $rid
66 );
67 $this->amount_of_versions = count(
68 $this->irss->manage()->getResource($rid)->getAllRevisionsIncludingDraft()
69 );
70 $this->current_version_is_draft = $revision->getStatus() === RevisionStatus::DRAFT;
71
72 // General
73 $this->setPrefix("versions");
74 $this->dic->language()->loadLanguageModule('file');
75
76 // Appearance
77 $this->setRowTemplate("tpl.file_version_row.html", "components/ILIAS/File");
78 $this->setLimit(9999);
79 $this->setEnableHeader(true);
80 $this->disable("footer");
81 $this->setTitle($this->dic->language()->txt("versions"));
82
83 // Form
84
85 $this->setFormAction($this->dic->ctrl()->getFormAction($calling_gui_class));
86 $this->setSelectAllCheckbox("hist_id[]");
87 //TODO: Use ilFileVersionsGUI::CMD_RENDER_DELETE_SELECTED_VERSIONS_MODAL instead of ilFileVersionsGUI::CMD_DELETE_VERSIONS as soon as new table gui is introduced.
88 // ilFileVersionsGUI::CMD_DELETE_VERSIONS and its deprecated ilConfirmationGUI are only needed because the old ilTable2GUI doesn't support calling modals from its MultiCommands
89 $this->addMultiCommand(ilFileVersionsGUI::CMD_DELETE_VERSIONS, $this->dic->language()->txt("delete"));
90 $this->addMultiCommand(
92 $this->dic->language()->txt("file_rollback")
93 );
94
95 // Columns
96 $this->addColumn("", "", "1", true);
97 $this->addColumn($this->dic->language()->txt("version"), "", "auto");
98 $this->addColumn($this->dic->language()->txt("filename"));
99 $this->addColumn($this->dic->language()->txt("date"));
100 $this->addColumn($this->dic->language()->txt("file_uploaded_by"));
101 $this->addColumn($this->dic->language()->txt("versionname"));
102 $this->addColumn($this->dic->language()->txt("filesize"), "", "", false);
103 $this->addColumn($this->dic->language()->txt("status"));
104 $this->addColumn($this->dic->language()->txt("action"));
105 $this->addColumn("", "", "1");
106
107 $this->initData();
108 }
109
110 private function initData(): void
111 {
112 $versions = [];
113 foreach ($this->file->getVersions() as $version) {
114 $versions[] = $version->getArrayCopy();
115 }
116 usort($versions, static fn(array $i1, array $i2): int => $i2['version'] - $i1['version']);
117
118 $this->setData($versions);
119 $this->setMaxCount(is_array($versions) ? count($versions) : 0);
120 }
121
122 #[\Override]
123 protected function fillRow(array $a_set): void
124 {
125 $action_entries = [];
126 $hist_id = $a_set["hist_entry_id"];
127
128 // split params
129 $filename = $a_set["filename"];
130 $version = $a_set["version"];
131 $rollback_version = $a_set["rollback_version"];
132 $rollback_user_id = $a_set["rollback_user_id"];
133
134 // get user name
135 $name = ilObjUser::_lookupName($a_set["user_id"]);
136 $username = trim($name["title"] . " " . $name["firstname"] . " " . $name["lastname"]);
137
138 // get file size
139 $data_size = new DataSize(
140 (int) ($a_set["size"] ?? 0),
141 DataSize::KB
142 );
143 $filesize = (string) $data_size;
144
145 // get action text
146 $action = $this->dic->language()->txt(
147 "file_version_" . $a_set["action"]
148 ); // create, replace, new_version, rollback
149 if ($a_set["action"] == "rollback") {
150 $name = ilObjUser::_lookupName($rollback_user_id);
151 $rollback_username = trim($name["title"] . " " . $name["firstname"] . " " . $name["lastname"]);
152 $action = sprintf($action, $rollback_version, $rollback_username);
153 }
154
155 // get download link
156 $this->dic->ctrl()->setParameter($this->parent_obj, ilFileVersionsGUI::HIST_ID, $hist_id);
157 $link = $this->dic->ctrl()->getLinkTarget($this->parent_obj, ilFileVersionsGUI::CMD_DOWNLOAD_VERSION);
158
159 // build actions
160 $pseudo_modal = $this->ui->factory()->modal()->interruptive('', '', '')->withAsyncRenderUrl(
161 $this->ctrl->getLinkTargetByClass(
162 ilFileVersionsGUI::class,
164 null,
165 true
166 )
167 );
168
169 $this->modals[] = $pseudo_modal;
170 $buttons = $this->dic->ui()->factory()->button();
171
172
173 if (!$this->current_version_is_draft) {
174 $action_entries['delete'] = $buttons
175 ->shy(
176 $this->dic->language()->txt("delete"),
177 ''
178 )
179 ->withOnClick(
180 $pseudo_modal->getShowSignal()
181 );
182
183
184 if ($this->current_version !== (int) $version) {
185 $action_entries['file_rollback'] = $buttons
186 ->shy(
187 $this->dic->language()->txt("file_rollback"),
188 $this->dic->ctrl()->getLinkTarget($this->parent_obj, ilFileVersionsGUI::CMD_ROLLBACK_VERSION)
189 );
190 } elseif ($this->amount_of_versions > 1) {
191 $action_entries['unpublish'] = $buttons
192 ->shy(
193 $this->dic->language()->txt("file_unpublish"),
194 $this->dic->ctrl()->getLinkTarget($this->parent_obj, ilFileVersionsGUI::CMD_UNPUBLISH)
195 );
196 }
197 } elseif ($this->current_version === (int) $version) {
198 $action_entries['publish'] = $buttons
199 ->shy(
200 $this->dic->language()->txt("file_publish"),
201 $this->dic->ctrl()->getLinkTarget($this->parent_obj, ilFileVersionsGUI::CMD_PUBLISH)
202 );
203 }
204
205
206 $actions = $this->dic->ui()->renderer()->render(
207 $this->dic->ui()->factory()->dropdown()
208 ->standard($action_entries)
209 ->withLabel($this->lng->txt('actions'))
210 );
211
212 // reset history parameter
213 $this->dic->ctrl()->setParameter($this->parent_obj, ilFileVersionsGUI::HIST_ID, "");
214
215 // fill template
216 $this->tpl->setVariable("TXT_VERSION", $version);
217 $this->tpl->setVariable(
218 "TXT_DATE",
220 );
221 $this->tpl->setVariable("TXT_UPLOADED_BY", $username);
222 $this->tpl->setVariable("DL_LINK", $link);
223 $this->tpl->setVariable("TXT_FILENAME", $filename);
224 $this->tpl->setVariable("TXT_VERSIONNAME", $a_set['title']);
225 $this->tpl->setVariable("TXT_FILESIZE", $data_size);
226
227 // columns depending on confirmation
228 $this->tpl->setCurrentBlock("version_selection");
229 $this->tpl->setVariable("OBJ_ID", $hist_id);
230 $this->tpl->parseCurrentBlock();
231
232 $this->tpl->setCurrentBlock("version_txt_actions");
233 $this->tpl->setVariable("TXT_ACTION", $action);
234 $this->tpl->parseCurrentBlock();
235
236 $this->tpl->setCurrentBlock("version_actions");
237
238 $this->tpl->setVariable("ACTIONS", $actions);
239
240 $this->tpl->parseCurrentBlock();
241 }
242
249 #[\Override]
250 public function getHTML(): string
251 {
252 return parent::getHTML() . $this->ui->renderer()->render($this->modals);
253 }
254}
$version
Definition: plugin.php:24
$filename
Definition: buildRTE.php:78
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:36
Provides fluid interface to RBAC services.
Definition: UIServices.php:25
This class provides the data size with additional information to remove the work to calculate the siz...
Definition: DataSize.php:31
const IL_CAL_DATETIME
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
@classDescription Date and time handling
Class ilFileVersionsTableGUI.
getHTML()
Enables rendering modals OUTSIDE of the table.
fillRow(array $a_set)
Standard Version of Fill Row.
__construct(ilFileVersionsGUI $calling_gui_class, string $a_parent_cmd=ilFileVersionsGUI::CMD_DEFAULT)
ilFileVersionsTableGUI constructor.
static _lookupName(int $a_user_id)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setLimit(int $a_limit=0, int $a_default_limit=0)
set max.
setTitle(string $a_title, string $a_icon="", string $a_icon_alt="")
addMultiCommand(string $a_cmd, string $a_text)
setPrefix(string $a_prefix)
set prefix for sort and offset fields (if you have two or more tables on a page that you want to sort...
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)
setSelectAllCheckbox(string $a_select_all_checkbox, bool $a_select_all_on_top=false)
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
setId(string $a_val)
setData(array $a_data)
Set table data.
disable(string $a_module_name)
setMaxCount(int $a_max_count)
set max.
This describes commonalities between the different modals.
Definition: Modal.php:35
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $DIC
Definition: shib_login.php:26