ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
LegacyRequestBuilder.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
28
33{
34 public function buildRequest(GlobalHttpState $http, Factory $refinery, array $handlers): ?Request
35 {
36 // try to get target from query
37 $target = $http->wrapper()->query()->has("target")
38 ? $http->wrapper()->query()->retrieve(
39 "target",
40 $refinery->to()->string()
41 )
42 : null;
43 if ($target !== null) {
44 $target_parts = explode('_', (string) $target);
45 if (isset($target_parts[0]) && array_key_exists($target_parts[0], $handlers)) {
46 return null;
47 }
48
49 return new Request(
51 null,
53 );
54 }
55
56 // try build target from path (since URL has been rewritten to goto/...)
57 $path = $http->request()->getUri()->getPath();
58 // get everything after /goto.php/ ot /go/
59 if (str_contains($path, StandardURIBuilder::LONG)) {
60 $path = substr($path, strpos($path, StandardURIBuilder::LONG) + strlen(StandardURIBuilder::LONG));
61 }
62
63 if (str_contains($path, StandardURIBuilder::SHORT)) {
64 $path = substr($path, strpos($path, StandardURIBuilder::SHORT) + strlen(StandardURIBuilder::SHORT));
65 }
66 $path = str_replace([StandardURIBuilder::LONG, StandardURIBuilder::SHORT], '', $path);
67 $target_parts = explode('/', $path);
68 if (isset($target_parts[0]) && array_key_exists($target_parts[0], $handlers)) {
69 return null;
70 }
71 $ref_id = null;
72 if (isset($target_parts[1]) && is_numeric($target_parts[1])) {
73 $ref_id = new ReferenceId((int) $target_parts[1]);
74 $target = $target_parts[2] ?? '';
75 } else {
76 $target = $target_parts[1] ?? '';
77 }
78
79 return new Request(
81 $ref_id,
82 [LegacyGotoHandler::TARGET => str_replace('/', '_', $path)]
83 );
84 }
85}
Builds data types.
Definition: Factory.php:36
buildRequest(GlobalHttpState $http, Factory $refinery, array $handlers)
Interface GlobalHttpState.