2 namespace TYPO3\CMS\Recordlist\LinkHandler;
21 use TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException;
76 if (!$linkParts[
'url']) {
79 $url = rawurldecode($linkParts[
'url']);
82 $rel = substr(
$url, 5);
86 if (is_a($fileOrFolderObject, $this->expectedClass)) {
88 $this->linkParts[
'url'] = $rel;
89 $this->linkParts[
'name'] = $fileOrFolderObject->getName();
105 return $this->linkParts[
'name'];
120 if (!empty($this->linkParts) && !isset($this->
expandFolder)) {
126 $folderTree->setLinkParameterProvider($this);
127 $tree = $folderTree->getBrowsableTree();
130 $selectedFolder =
false;
132 $fileOrFolderObject = null;
135 }
catch (\Exception $e) {
139 if ($fileOrFolderObject instanceof Folder) {
141 $selectedFolder = $fileOrFolderObject;
142 }
elseif ($fileOrFolderObject instanceof FileInterface) {
145 $selectedFolder = $fileOrFolderObject->getParentFolder();
146 }
catch (\Exception $e) {
154 if (!$selectedFolder) {
156 $selectedFolder = $backendUser->getDefaultUploadFolder();
157 }
catch (\Exception $e) {
165 if ($selectedFolder) {
167 $uploadForm = $this->mode ===
'file' ? $folderUtilityRenderer->uploadForm($selectedFolder, []) :
'';
168 $createFolder = $folderUtilityRenderer->createFolder($selectedFolder);
171 if ($backendUser->getTSConfigVal(
'options.uploadFieldsInTopOfEB')) {
172 $content .= $uploadForm;
177 if ($selectedFolder) {
178 $parameters = $this->linkBrowser->getUrlParameters();
179 $allowedExtensions = isset($parameters[
'allowedExtensions']) ? $parameters[
'allowedExtensions'] :
'';
180 $files = $this->
expandFolder($selectedFolder, $allowedExtensions);
185 Wrapper table for folder tree / file/folder list:
187 <table border="0" cellpadding="0" cellspacing="0" id="typo3-linkFiles">
189 <td class="c-wCell" valign="top"><h3>' . $this->
getLanguageService()->getLL(
'folderTree') .
':</h3>' . $tree .
'</td>
190 <td class="c-wCell" valign="top">' . $files .
'</td>
195 if (!$backendUser->getTSConfigVal(
'options.uploadFieldsInTopOfEB')) {
196 $content .= $uploadForm;
198 $content .=
'<br />' . $createFolder .
'<br />';
214 $out =
'<h3>' . htmlspecialchars($this->
getTitle()) .
':</h3>';
218 $folderIcon = $this->iconFactory->getIconForResource($folder,
Icon::SIZE_SMALL);
221 $currentIdentifier = !empty($this->linkParts) ? $this->linkParts[
'url'] :
'';
222 $selected = $currentIdentifier === $folder->
getCombinedIdentifier() ? $this->additionalFolderClass :
'';
224 <span class="' . $selected .
'" title="' . htmlspecialchars($folder->
getIdentifier()) .
'">
229 $folderContent = $this->getFolderContent($folder, $extensionList);
230 if (!empty($folderContent)) {
231 $out .=
'<ul class="list-tree list-tree-root">';
232 foreach ($folderContent as $fileOrFolderObject) {
233 list($fileIdentifier, $icon) = $this->
renderItem($fileOrFolderObject);
234 $selected = $currentIdentifier === $fileIdentifier ?
' class="active"' :
'';
236 '<li' . $selected .
'>
237 <a href="#" class="t3js-fileLink" title="' . htmlspecialchars($fileOrFolderObject->getName()) .
'" data-file="file:' . htmlspecialchars($fileIdentifier) .
'">
262 protected function getFolderContent(Folder $folder, $extensionList)
264 if ($extensionList !==
'') {
267 $filter->setAllowedFileExtensions($extensionList);
283 if (!$fileOrFolderObject instanceof
File) {
284 throw new \InvalidArgumentException(
'Expected File object, got "' . get_class($fileOrFolderObject) .
'" object.', 1443651368);
286 $fileIdentifier = $fileOrFolderObject->getUid();
289 $icon =
'<span title="' . htmlspecialchars($fileOrFolderObject->
getName() . $size) .
'">'
290 . $this->iconFactory->getIconForResource($fileOrFolderObject,
Icon::SIZE_SMALL)
292 return [$fileIdentifier, $icon];
301 'data-current-link' => empty($this->linkParts) ?
'' :
'file:' . $this->linkParts[
'url']
313 'expandFolder' => isset($values[
'identifier']) ? $values[
'identifier'] : (string)$this->
expandFolder
315 return array_merge($this->linkBrowser->getUrlParameters($values), $parameters);
335 return $this->linkBrowser->getScriptUrl();