ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
class.ilFileStaticURLHandler.php
Go to the documentation of this file.
1 <?php
2 
29 
33 class ilFileStaticURLHandler extends BaseHandler implements Handler
34 {
35  public const DOWNLOAD = 'download';
36  public const VERSIONS = 'versions';
37  public const EDIT = 'edit';
38  public const VIEW = 'view';
39  private readonly CapabilityBuilder $capabilities;
40 
41  public function __construct()
42  {
43  global $DIC;
45  $this->capabilities = new CapabilityBuilder(
47  $DIC->access(),
48  $DIC->ctrl(),
49  new ActionDBRepository($DIC->database()),
50  $DIC->http(),
51  $DIC['static_url.uri_builder']
52  );
53  }
54 
55  public function getNamespace(): string
56  {
57  return 'file';
58  }
59 
60  public function handle(Request $request, Context $context, Factory $response_factory): Response
61  {
62  $reference_id = $request->getReferenceId();
63  if ($reference_id === null) {
64  return $response_factory->cannot();
65  }
66 
67  // special case for shared workspace
68  $additional_params = $request->getAdditionalParameters()[0] ?? null;
69  if ($additional_params === '_wsp') {
70  ilObjectGUI::_gotoSharedWorkspaceNode($reference_id->toInt());
71  return $response_factory->loginFirst();
72  }
73 
74  $capability_context = new \ILIAS\File\Capabilities\Context(
75  $reference_id->toObjectId()->toInt(),
76  $reference_id->toInt(),
77  \ILIAS\File\Capabilities\Context::CONTEXT_REPO
78  );
79 
80  $capabilities = $this->capabilities->get($capability_context);
81 
82  $capability = match ($additional_params) {
83  self::DOWNLOAD => $capabilities->get(Capabilities::DOWNLOAD),
84  self::VERSIONS => $capabilities->get(Capabilities::MANAGE_VERSIONS),
85  self::EDIT => $capabilities->get(Capabilities::EDIT_EXTERNAL),
86  self::VIEW => $capabilities->get(Capabilities::VIEW_EXTERNAL),
87  default => $capabilities->get(Capabilities::INFO_PAGE),
88  };
89 
90  if (!$capability->isUnlocked() || $capability->getUri() === null) {
91  return $response_factory->loginFirst();
92  }
93 
94  $uri = $capability->getUri();
95 
96  return $response_factory->can($uri->getPath() . '?' . $uri->getQuery());
97  }
98 
99 }
$context
Definition: webdav.php:31
readonly CapabilityBuilder $capabilities
handle(Request $request, Context $context, Factory $response_factory)
global $DIC
Definition: shib_login.php:25
__construct(Container $dic, ilPlugin $plugin)
static _gotoSharedWorkspaceNode(int $wsp_id)