2 declare(strict_types = 1);
57 public function resolve(
string $linkParameter): array
59 if (stripos(rawurldecode(trim($linkParameter)),
'phar://') === 0) {
60 throw new \RuntimeException(
61 'phar scheme not allowed as soft reference target',
69 if (stripos($linkParameter,
'file:') === 0) {
71 } elseif (GeneralUtility::validEmail(parse_url($linkParameter, PHP_URL_PATH))) {
73 $result[
'email'] = $linkParameter;
74 } elseif (strpos($linkParameter,
':') !==
false) {
76 list($linkHandlerKeyword, $linkHandlerValue) = explode(
':', $linkParameter, 2);
77 $result[
'type'] = strtolower(trim($linkHandlerKeyword));
78 $result[
'url'] = $linkParameter;
79 $result[
'value'] = $linkHandlerValue;
81 list($a[
'identifier'], $tableAndUid) = explode(
':', $linkHandlerValue, 2);
82 $tableAndUid = explode(
':', $tableAndUid);
83 if (count($tableAndUid) > 1) {
84 $a[
'table'] = $tableAndUid[0];
85 $a[
'uid'] = $tableAndUid[1];
88 $a[
'table'] = $a[
'identifier'];
89 $a[
'uid'] = $tableAndUid[0];
91 $result = array_merge($result, $a);
96 $fileChar = (int)strpos($linkParameter,
'/');
97 $urlChar = (int)strpos($linkParameter,
'.');
102 if (preg_match(
'#../(?:index\\.php)?\\?id=([^&]+)#', $linkParameter, $matches)) {
103 $linkParameter = $matches[1];
106 $containsSlash =
false;
109 list($rootFileDat) = explode(
'?', rawurldecode($linkParameter));
110 $containsSlash = strpos($rootFileDat,
'/') !==
false;
111 $pathInfo = pathinfo($rootFileDat);
112 $fileExtension = strtolower($pathInfo[
'extension'] ??
'');
114 && trim($rootFileDat)
117 || $fileExtension ===
'php'
118 || $fileExtension ===
'html'
119 || $fileExtension ===
'htm'
123 } elseif ($containsSlash) {
130 if (!$isIdOrAlias && $isLocalFile !== 1 && $urlChar && (!$containsSlash || $urlChar < $fileChar)) {
132 $result[
'url'] =
'http://' . $linkParameter;
134 } elseif ($containsSlash || $isLocalFile) {
156 if (strpos($data,
'#') !==
false) {
157 list($data, $result[
'fragment']) = explode(
'#', $data, 2);
160 if (strpos($data,
'?') !==
false) {
161 list($data, $result[
'parameters']) = explode(
'?', $data, 2);
162 } elseif (strpos($data,
'&') !==
false) {
163 list($data, $result[
'parameters']) = explode(
'&', $data, 2);
166 $result[
'pageuid'] =
'current';
167 } elseif ($data[0] ===
'#') {
168 $result[
'pageuid'] =
'current';
169 $result[
'fragment'] = substr($data, 1);
170 } elseif (strpos($data,
',') !==
false) {
171 $data = rtrim($data,
',');
172 list($result[
'pageuid'], $result[
'pagetype']) = explode(
',', $data, 2);
173 } elseif (strpos($data,
'/') !==
false) {
174 $data = explode(
'/', trim($data,
'/'));
175 $result[
'pageuid'] = array_shift($data);
176 foreach ($data as $k => $item) {
177 if ($data[$k] % 2 === 0 && !empty($data[$k + 1])) {
178 $result[
'page' . $data[$k]] = $data[$k + 1];
182 $result[
'pageuid'] = $data;
187 $result[
'pagealias'] = $result[
'pageuid'];
188 unset($result[
'pageuid']);
205 $fileIdentifier = $mixedIdentifier;
207 if (strpos($fileIdentifier,
'#') !==
false) {
208 [$fileIdentifier, $fragment] = explode(
'#', $fileIdentifier, 2);
212 if ($fileOrFolderObject instanceof
File) {
214 $result[
'file'] = $fileOrFolderObject;
216 $result[
'fragment'] = $fragment;
218 } elseif ($fileOrFolderObject instanceof
Folder) {
220 $result[
'folder'] = $fileOrFolderObject;
222 $result[
'fragment'] = $fragment;
226 $result[
'file'] = $mixedIdentifier;
228 }
catch (\RuntimeException $e) {
231 $result[
'file'] = $mixedIdentifier;
235 $result[
'file'] = $mixedIdentifier;
248 if (!$this->resourceFactory) {
249 $this->resourceFactory = GeneralUtility::makeInstance(ResourceFactory::class);