ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
ActionBuilder.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
24 use ILIAS\Data\URI;
31 
35 final class ActionBuilder
36 {
37  use URLSerializer;
38 
39  private const ACTION_UNZIP = 'unzip';
40  private const ACTION_DOWNLOAD = 'download';
41  private const ACTION_REMOVE = 'remove';
42  public const ACTION_NAMESPACE = 'rcgui';
46  private array $modals = [];
48  private \ILIAS\UI\URLBuilderToken $url_token;
49  private array $single_actions;
50 
51  private array $appended_tokens = [];
52 
53  public function __construct(
54  private Request $request,
55  private \ilCtrlInterface $ctrl,
56  private Factory $ui_factory,
57  private \ilLanguage $language,
58  private Services $irss,
59  private ActionProvider $action_provider
60  ) {
61  $this->single_actions = $this->action_provider->getSingleActions($this->request);
62  $this->initURIBuilder();
63  }
64 
65  private function appendNamespaceToURIBuilder(string $namespace, string $param): URLBuilder
66  {
67  $key = $namespace . $param;
68  if (isset($this->appended_tokens[$key])) {
69  return $this->url_builder;
70  }
71 
72  $parameters = $this->url_builder->acquireParameter(
73  [$namespace],
74  $param
75  );
76 
77  $this->appended_tokens[$key] = $parameters[1];
78 
79  return $this->url_builder = $parameters[0];
80  }
81 
82  private function initURIBuilder(): void
83  {
84  $uri_builder = new URLBuilder(
85  new URI(
86  ILIAS_HTTP_PATH . '/' . $this->ctrl->getLinkTargetByClass(
87  \ilContainerResourceGUI::class,
89  )
90  )
91  );
92 
93  $parameters = $uri_builder->acquireParameter(
94  [self::ACTION_NAMESPACE],
96  );
97 
98  $this->url_builder = $parameters[0];
99  $this->url_token = $parameters[1];
100  }
101 
102  public function getUrlBuilder(): URLBuilder
103  {
104  return $this->url_builder;
105  }
106 
107  public function getUrlToken(): \ILIAS\UI\URLBuilderToken
108  {
109  return $this->url_token;
110  }
111 
115  public function getActions(): array
116  {
117  $actions = [];
118 
119  foreach ($this->single_actions as $key => $single_action) {
120  if ($single_action instanceof ActionBuilder\ExternalSingleAction) {
121  $this->url_builder = $this->appendNamespaceToURIBuilder(
122  $single_action->getParameterNamespace(),
123  $single_action->getPathParameterName()
124  );
125 
126  $token = $this->appended_tokens[$single_action->getParameterNamespace(
127  ) . $single_action->getPathParameterName()] ?? $this->url_token;
128  } else {
130  }
131 
132  if ($single_action->isBulk()) {
133  $action = $this->ui_factory->table()->action()->standard(
134  $single_action->getLabel(),
135  $this->url_builder->withURI($single_action->getAction()),
136  $token
137  );
138  } else {
139  $action = $this->ui_factory->table()->action()->single(
140  $single_action->getLabel(),
141  $this->url_builder->withURI($single_action->getAction()),
142  $token
143  );
144  }
145  $actions[$key] = $action->withAsync($single_action->isAsync());
146  }
147 
148  return $actions;
149  }
150 
152  {
153  return $this->action_provider;
154  }
155 
156 }
if($err=$client->getError()) $namespace
appendNamespaceToURIBuilder(string $namespace, string $param)
Interface Observer Contains several chained tasks and infos about them.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This is how the factory for UI elements looks.
Definition: Factory.php:37
$token
Definition: xapitoken.php:67
$param
Definition: xapitoken.php:44
The scope of this class is split ilias-conform URI&#39;s into components.
Definition: URI.php:34
__construct(private Request $request, private \ilCtrlInterface $ctrl, private Factory $ui_factory, private \ilLanguage $language, private Services $irss, private ActionProvider $action_provider)
acquireParameter(array $namespace, string $name, ?string $initial_value=null)
Add a new parameter with a namespace and get its token for subsequent changes.
Definition: URLBuilder.php:118
URLBuilder.
Definition: URLBuilder.php:39