ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
TileView.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Badge;
22
23use Closure;
27use ilBadge;
29
31{
33 private Closure $assignments_of_user;
34 private IRSS $irss;
35
39 public function __construct(
40 private readonly Container $container,
41 private readonly string $gui,
42 private readonly Tile $tile,
43 private readonly PresentationHeader $head,
44 $assignments_of_user = [ilBadgeAssignment::class, 'getInstancesByUserId']
45 ) {
46 $this->assignments_of_user = Closure::fromCallable($assignments_of_user);
47 $this->irss = $this->container['resource_storage'];
48 }
49
50 public function show(): string
51 {
52 $sort = new Sorting($this->container->http()->request()->getQueryParams()['sort'] ?? '');
53
54 $badges_and_assignments = $this->badgesAndAssignments();
55 $this->irss->preload(
56 array_values(
57 array_filter(
58 array_map(
59 static fn(array $badge_and_assignment): ?string => $badge_and_assignment['badge']->getImageRid(
60 ) ?: null,
61 $badges_and_assignments
62 )
63 )
64 )
65 );
66
67 $components = $this->componentsOfBadges($this->sort($sort, $badges_and_assignments));
68
69 $this->head->show($this->container->language()->txt('tile_view'), $this->sortComponent($sort));
70
71 return $this->container->ui()->renderer()->render($components);
72 }
73
77 private function badgesAndAssignments(): array
78 {
79 $badges = [];
80 foreach (($this->assignments_of_user)($this->container->user()->getId()) as $assignment) {
81 $badge = new ilBadge($assignment->getBadgeId());
82 $badges[] = [
83 'badge' => $badge,
84 'assignment' => $assignment,
85 ];
86 }
87
88 return $badges;
89 }
90
95 private function componentsOfBadges(array $badge_and_assignments): array
96 {
97 $cards_and_modals = array_map($this->cardsAndModals(...), $badge_and_assignments);
98 $components = array_column($cards_and_modals, 'modal');
99 $components[] = $this->container->ui()
100 ->factory()
101 ->deck(array_column($cards_and_modals, 'card'))
102 ->withNormalCardsSize();
103
104 return $components;
105 }
106
111 private function cardsAndModals(array $badge_and_assignments): array
112 {
113 return $this->tile->inDeck(
114 $badge_and_assignments['badge'],
115 $badge_and_assignments['assignment'],
116 $this->gui
117 );
118 }
119
120 private function sortComponent(Sorting $sort): Component
121 {
122 $txt = [$this->container->language(), 'txt'];
123 $link = $this->container->ctrl()->getLinkTargetByClass($this->gui, 'listBadges');
124 return $this->container->ui()
125 ->factory()
126 ->viewControl()
127 ->sortation(array_map($txt, $sort->options()), $sort->key())
128 ->withTargetURL($link, 'sort');
129 }
130
136 private function sort(Sorting $sort, array $badges_and_assignments): array
137 {
138 usort($badges_and_assignments, [$sort, 'compare']);
139
140 return $badges_and_assignments;
141 }
142}
$components
sort(Sorting $sort, array $badges_and_assignments)
Definition: TileView.php:136
cardsAndModals(array $badge_and_assignments)
Definition: TileView.php:111
componentsOfBadges(array $badge_and_assignments)
Definition: TileView.php:95
__construct(private readonly Container $container, private readonly string $gui, private readonly Tile $tile, private readonly PresentationHeader $head, $assignments_of_user=[ilBadgeAssignment::class, 'getInstancesByUserId'])
Definition: TileView.php:39
Closure $assignments_of_user
Definition: TileView.php:33
sortComponent(Sorting $sort)
Definition: TileView.php:120
Customizing of pimple-DIC for ILIAS.
Definition: Container.php:36
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$txt
Definition: error.php:31
A component is the most general form of an entity in the UI.
Definition: Component.php:28
$container
@noRector
Definition: wac.php:37