ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
TileView.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Badge;
22 
23 use Closure;
27 use ilBadge;
29 
30 class TileView
31 {
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 }
sortComponent(Sorting $sort)
Definition: TileView.php:120
sort(Sorting $sort, array $badges_and_assignments)
Definition: TileView.php:136
Closure $assignments_of_user
Definition: TileView.php:33
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$components
$container
Definition: wac.php:36
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
$txt
Definition: error.php:31
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