18 declare(strict_types=1);
52 public function __construct(
protected bool $has_write =
false)
55 $this->
lng = $DIC->language();
56 $this->tpl = $DIC->ui()->mainTemplate();
57 $this->factory = $DIC->ui()->factory();
58 $this->renderer = $DIC->ui()->renderer();
60 $this->request = $DIC->http()->request();
61 $this->
http = $DIC->http();
69 if ($this->cached_records !== null) {
78 $title = $template->getTitle();
80 $image_src = $template->getImageFromResourceId();
81 if ($image_src !==
'') {
82 $image_component = $this->factory->image()->responsive(
86 $image_html = $this->renderer->render($image_component);
88 $image_src_large = $template->getImageFromResourceId(
91 $large_image_component = $this->factory->image()->responsive(
96 $modal = $modal_container->constructModal($large_image_component, $template->getTitle());
98 $image = implode(
'', [
99 $modal_container->renderShyButton($image_html, $modal),
100 $modal_container->renderModal($modal)
102 $title = $modal_container->renderShyButton($template->getTitle(), $modal);
106 'id' => $template->getId(),
109 'title_sortable' => $template->getTitle()
113 $this->cached_records = $rows;
119 DataRowBuilder $row_builder,
120 array $visible_column_ids,
124 ?array $additional_parameters
129 [$order_field, $order_direction] = $order->join(
131 fn($ret, $key, $value) => [$key, $value]
134 usort($records,
static function (array $left, array $right) use ($order_field):
int {
135 if ($order_field ===
'title') {
136 return \ilStr::strCmp(
137 $left[$order_field .
'_sortable'],
138 $right[$order_field .
'_sortable']
142 return $left[$order_field] <=> $right[$order_field];
146 $records = array_reverse($records);
151 $records = \array_slice($records, $range->getStart(), $range->getLength());
154 foreach ($records as $record) {
155 yield $row_builder->buildDataRow((
string) $record[
'id'], $record);
161 ?array $additional_parameters
172 'image' => $this->factory->table()->column()->text($this->
lng->txt(
'image'))->withIsSortable(
false),
173 'title' => $this->factory->table()->column()->text($this->
lng->txt(
'title'))
181 URLBuilder $url_builder,
182 URLBuilderToken $action_parameter_token,
183 URLBuilderToken $row_id_token
185 return $this->has_write ? [
186 'badge_image_template_edit' => $this->factory->table()->action()->single(
187 $this->
lng->txt(
'edit'),
188 $url_builder->withParameter($action_parameter_token,
'badge_image_template_editImageTemplate'),
191 'badge_image_template_delete' =>
192 $this->factory->table()->action()->standard(
193 $this->
lng->txt(
'delete'),
194 $url_builder->withParameter($action_parameter_token,
'badge_image_template_delete'),
202 $df = new \ILIAS\Data\Factory();
204 $table_uri = $df->uri($url);
205 $url_builder =
new URLBuilder($table_uri);
206 $query_params_namespace = [
'tid'];
208 [$url_builder, $action_parameter_token, $row_id_token] = $url_builder->acquireParameters(
209 $query_params_namespace,
214 $table = $this->factory
216 ->data($this->
lng->txt(
'badge_image_templates'), $this->
getColumns(), $this)
217 ->withId(self::class)
219 ->withActions($this->
getActions($url_builder, $action_parameter_token, $row_id_token))
220 ->withRequest($this->request);
223 $query = $this->
http->wrapper()->query();
224 if ($query->has(
'tid')) {
225 $query_values = $query->retrieve(
231 if ($query_values === [
'ALL_OBJECTS']) {
233 if ($template->getId() !== null) {
234 $items[] = $this->factory->modal()->interruptiveItem()->keyValue(
235 (
string) $template->getId(),
236 (string) $template->getId(),
237 $template->getTitle()
241 } elseif (\is_array($query_values)) {
242 foreach ($query_values as
$id) {
244 $items[] = $this->factory->modal()->interruptiveItem()->keyValue(
246 (
string) $badge->getId(),
252 $items[] = $this->factory->modal()->interruptiveItem()->keyValue(
253 (
string) $badge->getId(),
254 (string) $badge->getId(),
258 if ($query->has($action_parameter_token->getName())) {
259 $action = $query->retrieve($action_parameter_token->getName(), $this->
refinery->kindlyTo()->string());
260 if ($action ===
'badge_image_template_delete') {
261 $this->
http->saveResponse(
266 $this->factory->modal()->interruptive(
267 $this->
lng->txt(
'badge_deletion'),
268 $this->
lng->txt(
'badge_deletion_confirmation'),
270 )->withAffectedItems($items)
274 $this->
http->sendResponse();
275 $this->
http->close();
280 $this->tpl->setContent($this->renderer->render(
$out));
getActions(URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token)
getRows(DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, ?array $filter_data, ?array $additional_parameters)
getTotalRowCount(?array $filter_data, ?array $additional_parameters)
Mainly for the purpose of pagination-support, it is important to know about the total number of recor...
static http()
Fetches the global http state from ILIAS.
readonly ServerRequestInterface RequestInterface $request
static ofString(string $string)
Creates a new stream with an initial value.
readonly Factory $factory
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
readonly ilGlobalTemplateInterface $tpl
readonly ILIAS Refinery Factory $refinery
__construct(protected bool $has_write=false)
readonly Renderer $renderer