ILIAS  trunk Revision v11.0_alpha-1769-g99a433fe2dc
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
ILIAS\Badge\ilObjectBadgeTableGUI Class Reference
+ Inheritance diagram for ILIAS\Badge\ilObjectBadgeTableGUI:
+ Collaboration diagram for ILIAS\Badge\ilObjectBadgeTableGUI:

Public Member Functions

 __construct (ilObjBadgeAdministrationGUI $parentObj, protected bool $has_write=false)
 
 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 records available. More...
 
 getColumns ()
 
 renderTable ()
 
- Public Member Functions inherited from ILIAS\UI\Component\Table\DataRetrieval
 getRows (DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, ?array $filter_data, ?array $additional_parameters)
 This is called by the table to retrieve rows; map data-records to rows using the $row_builder e.g. More...
 

Private Member Functions

 getRecords ()
 
 getActions (URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token)
 

Private Attributes

readonly Factory $factory
 
readonly Renderer $renderer
 
readonly ILIAS Refinery Factory $refinery
 
readonly ServerRequestInterface RequestInterface $request
 
readonly Services $http
 
readonly ilLanguage $lng
 
readonly ilGlobalTemplateInterface $tpl
 
readonly ilObjBadgeAdministrationGUI $parent_obj
 
readonly ilAccessHandler $access
 
readonly ilBadgeImage $badge_image_service
 
array $cached_records = null
 

Detailed Description

Definition at line 49 of file class.ilObjectBadgeTableGUI.php.

Constructor & Destructor Documentation

◆ __construct()

ILIAS\Badge\ilObjectBadgeTableGUI::__construct ( ilObjBadgeAdministrationGUI  $parentObj,
protected bool  $has_write = false 
)

Definition at line 75 of file class.ilObjectBadgeTableGUI.php.

References $DIC, ILIAS\Repository\access(), factory(), ILIAS\FileDelivery\http(), ILIAS\Repository\lng(), ILIAS\Repository\refinery(), and renderer().

78  {
79  global $DIC;
80 
81  $this->lng = $DIC->language();
82  $this->tpl = $DIC->ui()->mainTemplate();
83  $this->factory = $DIC->ui()->factory();
84  $this->renderer = $DIC->ui()->renderer();
85  $this->refinery = $DIC->refinery();
86  $this->request = $DIC->http()->request();
87  $this->http = $DIC->http();
88  $this->access = $DIC->access();
89  $this->parent_obj = $parentObj;
90  $this->badge_image_service = new ilBadgeImage(
91  $DIC->resourceStorage(),
92  $DIC->upload(),
93  $DIC->ui()->mainTemplate()
94  );
95  }
factory()
renderer()
static http()
Fetches the global http state from ILIAS.
global $DIC
Definition: shib_login.php:22
+ Here is the call graph for this function:

Member Function Documentation

◆ getActions()

ILIAS\Badge\ilObjectBadgeTableGUI::getActions ( URLBuilder  $url_builder,
URLBuilderToken  $action_parameter_token,
URLBuilderToken  $row_id_token 
)
private
Returns
array<string, Action>

Definition at line 305 of file class.ilObjectBadgeTableGUI.php.

References factory(), ILIAS\Repository\lng(), and ILIAS\UI\URLBuilder\withParameter().

Referenced by ILIAS\Badge\ilObjectBadgeTableGUI\renderTable().

309  : array {
310  return $this->has_write ? [
311  'obj_badge_activate' => $this->factory->table()->action()->multi(
312  $this->lng->txt('activate'),
313  $url_builder->withParameter($action_parameter_token, 'obj_badge_activate'),
314  $row_id_token
315  ),
316  'obj_badge_deactivate' =>
317  $this->factory->table()->action()->multi(
318  $this->lng->txt('deactivate'),
319  $url_builder->withParameter($action_parameter_token, 'obj_badge_deactivate'),
320  $row_id_token
321  ),
322  'obj_badge_delete' =>
323  $this->factory->table()->action()->multi(
324  $this->lng->txt('delete'),
325  $url_builder->withParameter($action_parameter_token, 'obj_badge_delete'),
326  $row_id_token
327  ),
328  'obj_badge_show_users' =>
329  $this->factory->table()->action()->single(
330  $this->lng->txt('user'),
331  $url_builder->withParameter($action_parameter_token, 'obj_badge_show_users'),
332  $row_id_token
333  )
334  ] : [];
335  }
factory()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getColumns()

ILIAS\Badge\ilObjectBadgeTableGUI::getColumns ( )
Returns
array<string, Column>

Definition at line 284 of file class.ilObjectBadgeTableGUI.php.

References factory(), and ILIAS\Repository\lng().

Referenced by ILIAS\Badge\ilObjectBadgeTableGUI\renderTable().

284  : array
285  {
286  return [
287  'image' => $this->factory->table()->column()->text($this->lng->txt('image'))->withIsSortable(false),
288  'title' => $this->factory->table()->column()->text($this->lng->txt('title')),
289  'type' => $this->factory->table()->column()->text($this->lng->txt('type')),
290  'container' => $this->factory->table()->column()->text($this->lng->txt('container')),
291  'active' => $this->factory->table()->column()->boolean(
292  $this->lng->txt('active'),
293  $this->lng->txt('yes'),
294  $this->lng->txt('no')
295  )->withOrderingLabels(
296  $this->lng->txt('badge_sort_active_badges_first'),
297  $this->lng->txt('badge_sort_active_badges_last')
298  )
299  ];
300  }
factory()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getRecords()

ILIAS\Badge\ilObjectBadgeTableGUI::getRecords ( )
private
Returns
list<array{ id: int, active: bool, type: string, image: string, title: string, title_sortable: string, container: string, container_sortable: string }>

Definition at line 165 of file class.ilObjectBadgeTableGUI.php.

References ILIAS\Badge\ilObjectBadgeTableGUI\$cached_records, $ref_id, ilObject\_getAllReferences(), ilObject\_getIcon(), ILIAS\Repository\access(), factory(), ilBadge\getExtendedTypeCaption(), ilBadgeHandler\getInstance(), ilBadge\getObjectInstances(), ILIAS\Badge\ilBadgeImage\IMAGE_SIZE_XL, ILIAS\Repository\lng(), null, and renderer().

Referenced by ILIAS\Badge\ilObjectBadgeTableGUI\getRows(), and ILIAS\Badge\ilObjectBadgeTableGUI\getTotalRowCount().

165  : array
166  {
167  if ($this->cached_records !== null) {
168  return $this->cached_records;
169  }
170 
171  $container_deleted_title_part = '<span class="il_ItemAlertProperty">' . $this->lng->txt('deleted') . '</span>';
172  $modal_container = new ModalBuilder();
173 
174  // A filter is not implemented, yet
175  $filter = [
176  'type' => '',
177  'title' => '',
178  'object' => ''
179  ];
180 
181  $types = ilBadgeHandler::getInstance()->getAvailableTypes(false);
182  $rows = [];
183  foreach (ilBadge::getObjectInstances($filter) as $badge_item) {
184  $type_caption = ilBadge::getExtendedTypeCaption($types[$badge_item['type_id']]);
185 
186  $badge = new ilBadge(0);
187  $badge->setId($badge_item['id']);
188  $badge->setImageRid($badge_item['image_rid']);
189  $badge->setImage($badge_item['image']);
190 
191  $images = [
192  'rendered' => null,
193  'large' => null,
194  ];
195  $image_src = $this->badge_image_service->getImageFromResourceId($badge);
196  if ($image_src !== '') {
197  $images['rendered'] = $this->renderer->render(
198  $this->factory->image()->responsive(
199  $image_src,
200  $badge_item['title']
201  )
202  );
203 
204  $image_src_large = $this->badge_image_service->getImageFromResourceId(
205  $badge,
207  );
208  if ($image_src_large !== '') {
209  $images['large'] = $this->factory->image()->responsive(
210  $image_src_large,
211  $badge_item['title']
212  );
213  }
214  }
215 
216  $sortable_container_title_parts = [
217  'title' => $badge_item['parent_title'] ?? ''
218  ];
219  $container_title_parts = [
220  'icon' => $this->renderer->render(
221  $this->factory->symbol()->icon()->custom(
222  ilObject::_getIcon($badge_item['parent_id'], 'big', $badge_item['parent_type'] ?? ''),
223  $this->lng->txt('obj_' . ($badge_item['parent_type'] ?? ''))
224  )
225  ),
226  'title' => $sortable_container_title_parts['title'],
227  ];
228 
229  if ($badge_item['deleted']) {
230  $container_title_parts['suffix'] = $container_deleted_title_part;
231  $sortable_container_title_parts['suffix'] = $container_deleted_title_part;
232  } else {
233  $ref_ids = ilObject::_getAllReferences($badge_item['parent_id']);
234  $ref_id = array_shift($ref_ids);
235  if ($ref_id && $this->access->checkAccess('read', '', $ref_id)) {
236  $container_title_parts['title'] = $this->renderer->render(
237  new Standard(
238  $container_title_parts['title'],
239  (string) new URI(ilLink::_getLink($ref_id))
240  )
241  );
242  } else {
243  $container_title_parts['suffix'] = $container_deleted_title_part;
244  $sortable_container_title_parts['suffix'] = $container_deleted_title_part;
245  }
246  }
247 
248  $modal = $modal_container->constructModal(
249  $images['large'],
250  $badge_item['title'],
251  [
252  'active' => $badge_item['active'] ? $this->lng->txt('yes') : $this->lng->txt('no'),
253  'type' => $type_caption,
254  'container' => implode(' ', \array_slice($container_title_parts, 1, null, true)),
255  ]
256  );
257 
258  $rows[] = [
259  'id' => $badge_item['id'],
260  'active' => (bool) $badge_item['active'],
261  'type' => $type_caption,
262  'image' => $images['rendered'] ? ($modal_container->renderShyButton(
263  $images['rendered'],
264  $modal
265  ) . ' ') : '',
266  'title' => implode('', [
267  $modal_container->renderShyButton($badge_item['title'], $modal),
268  $modal_container->renderModal($modal)
269  ]),
270  'title_sortable' => $badge_item['title'],
271  'container' => implode(' ', $container_title_parts),
272  'container_sortable' => implode(' ', $sortable_container_title_parts),
273  ];
274  }
275 
276  $this->cached_records = $rows;
277 
278  return $rows;
279  }
static _getIcon(int $obj_id=0, string $size="big", string $type="", bool $offline=false)
Get icon for repository item.
factory()
static _getAllReferences(int $id)
get all reference ids for object ID
renderer()
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
$ref_id
Definition: ltiauth.php:65
static getExtendedTypeCaption(ilBadgeType $a_type)
static getObjectInstances(?array $filter=null)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getRows()

ILIAS\Badge\ilObjectBadgeTableGUI::getRows ( DataRowBuilder  $row_builder,
array  $visible_column_ids,
Range  $range,
Order  $order,
?array  $filter_data,
?array  $additional_parameters 
)

Definition at line 97 of file class.ilObjectBadgeTableGUI.php.

References ILIAS\Data\Order\DESC, ILIAS\Data\Range\getLength(), ILIAS\Badge\ilObjectBadgeTableGUI\getRecords(), ILIAS\Data\Range\getStart(), and ILIAS\Data\Order\join().

104  : Generator {
105  $records = $this->getRecords();
106 
107  if ($order) {
108  [$order_field, $order_direction] = $order->join(
109  [],
110  fn($ret, $key, $value) => [$key, $value]
111  );
112 
113  usort($records, static function (array $left, array $right) use ($order_field): int {
114  if (\in_array($order_field, ['container', 'title', 'type'], true)) {
115  if (\in_array($order_field, ['container', 'title'], true)) {
116  $order_field .= '_sortable';
117  }
118 
119  return \ilStr::strCmp(
120  $left[$order_field],
121  $right[$order_field]
122  );
123  }
124 
125  if ($order_field === 'active') {
126  return $right[$order_field] <=> $left[$order_field];
127  }
128 
129  return $left[$order_field] <=> $right[$order_field];
130  });
131 
132  if ($order_direction === Order::DESC) {
133  $records = array_reverse($records);
134  }
135  }
136 
137  if ($range) {
138  $records = \array_slice($records, $range->getStart(), $range->getLength());
139  }
140 
141  foreach ($records as $record) {
142  yield $row_builder->buildDataRow((string) $record['id'], $record);
143  }
144  }
const DESC
Definition: Order.php:31
+ Here is the call graph for this function:

◆ getTotalRowCount()

ILIAS\Badge\ilObjectBadgeTableGUI::getTotalRowCount ( ?array  $filter_data,
?array  $additional_parameters 
)

Mainly for the purpose of pagination-support, it is important to know about the total number of records available.

Given the nature of a DataTable, which is, opposite to a PresentationTable, rather administrative than explorative, this information will increase user experience quite a bit. However, you may return null, if the call is to costly, but expect the View Control to look a little different in this case.

Make sure that potential filters or user restrictions are being applied to the count.

Implements ILIAS\UI\Component\Table\DataRetrieval.

Definition at line 146 of file class.ilObjectBadgeTableGUI.php.

References ILIAS\Badge\ilObjectBadgeTableGUI\getRecords().

149  : ?int {
150  return \count($this->getRecords());
151  }
+ Here is the call graph for this function:

◆ renderTable()

ILIAS\Badge\ilObjectBadgeTableGUI::renderTable ( )

Definition at line 337 of file class.ilObjectBadgeTableGUI.php.

References $id, $out, ILIAS\Data\Order\ASC, factory(), ILIAS\Badge\ilObjectBadgeTableGUI\getActions(), ILIAS\Badge\ilObjectBadgeTableGUI\getColumns(), ilBadge\getObjectInstances(), ILIAS\FileDelivery\http(), ILIAS\Repository\lng(), ILIAS\Filesystem\Stream\Streams\ofString(), ILIAS\Repository\refinery(), and renderer().

337  : void
338  {
339  $df = new \ILIAS\Data\Factory();
340 
341  $table_uri = $df->uri($this->request->getUri()->__toString());
342  $url_builder = new URLBuilder($table_uri);
343  $query_params_namespace = ['tid'];
344 
345  [$url_builder, $action_parameter_token, $row_id_token] = $url_builder->acquireParameters(
346  $query_params_namespace,
347  'table_action',
348  'id',
349  );
350 
351  $table = $this->factory
352  ->table()
353  ->data($this, $this->lng->txt('badge_object_badges'), $this->getColumns())
354  ->withId(self::class)
355  ->withOrder(new Order('title', Order::ASC))
356  ->withActions($this->getActions($url_builder, $action_parameter_token, $row_id_token))
357  ->withRequest($this->request);
358 
359  $out = [$table];
360 
361  $query = $this->http->wrapper()->query();
362  if ($query->has($action_parameter_token->getName())) {
363  $action = $query->retrieve($action_parameter_token->getName(), $this->refinery->kindlyTo()->string());
364  $ids = $query->retrieve($row_id_token->getName(), $this->refinery->custom()->transformation(fn($v) => $v));
365 
366  if ($action === 'obj_badge_delete') {
367  $items = [];
368  if (\is_array($ids) && \count($ids) > 0) {
369  if ($ids === ['ALL_OBJECTS']) {
370  $filter = [
371  'type' => '',
372  'title' => '',
373  'object' => ''
374  ];
375  $ids = [];
376  foreach (ilBadge::getObjectInstances($filter) as $badge_item) {
377  $ids[] = $badge_item['id'];
378  }
379  }
380 
381  foreach ($ids as $id) {
382  $badge = new ilBadge((int) $id);
383  $items[] = $this->factory->modal()->interruptiveItem()->keyValue(
384  (string) $id,
385  (string) $badge->getId(),
386  $badge->getTitle()
387  );
388  }
389 
390  $this->http->saveResponse(
391  $this->http
392  ->response()
393  ->withBody(
394  Streams::ofString($this->renderer->renderAsync([
395  $this->factory->modal()->interruptive(
396  $this->lng->txt('badge_deletion'),
397  $this->lng->txt('badge_deletion_confirmation'),
398  '#'
399  )->withAffectedItems($items)
400  ]))
401  )
402  );
403  $this->http->sendResponse();
404  $this->http->close();
405  }
406  }
407  }
408 
409  $this->tpl->setContent($this->renderer->render($out));
410  }
factory()
renderer()
getActions(URLBuilder $url_builder, URLBuilderToken $action_parameter_token, URLBuilderToken $row_id_token)
static http()
Fetches the global http state from ILIAS.
$out
Definition: buildRTE.php:24
static ofString(string $string)
Creates a new stream with an initial value.
Definition: Streams.php:41
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
static getObjectInstances(?array $filter=null)
+ Here is the call graph for this function:

Field Documentation

◆ $access

readonly ilAccessHandler ILIAS\Badge\ilObjectBadgeTableGUI::$access
private

Definition at line 59 of file class.ilObjectBadgeTableGUI.php.

◆ $badge_image_service

readonly ilBadgeImage ILIAS\Badge\ilObjectBadgeTableGUI::$badge_image_service
private

Definition at line 60 of file class.ilObjectBadgeTableGUI.php.

◆ $cached_records

array ILIAS\Badge\ilObjectBadgeTableGUI::$cached_records = null
private

◆ $factory

readonly Factory ILIAS\Badge\ilObjectBadgeTableGUI::$factory
private

Definition at line 51 of file class.ilObjectBadgeTableGUI.php.

◆ $http

readonly Services ILIAS\Badge\ilObjectBadgeTableGUI::$http
private

Definition at line 55 of file class.ilObjectBadgeTableGUI.php.

◆ $lng

readonly ilLanguage ILIAS\Badge\ilObjectBadgeTableGUI::$lng
private

Definition at line 56 of file class.ilObjectBadgeTableGUI.php.

◆ $parent_obj

readonly ilObjBadgeAdministrationGUI ILIAS\Badge\ilObjectBadgeTableGUI::$parent_obj
private

Definition at line 58 of file class.ilObjectBadgeTableGUI.php.

◆ $refinery

readonly ILIAS Refinery Factory ILIAS\Badge\ilObjectBadgeTableGUI::$refinery
private

Definition at line 53 of file class.ilObjectBadgeTableGUI.php.

◆ $renderer

readonly Renderer ILIAS\Badge\ilObjectBadgeTableGUI::$renderer
private

Definition at line 52 of file class.ilObjectBadgeTableGUI.php.

◆ $request

readonly ServerRequestInterface RequestInterface ILIAS\Badge\ilObjectBadgeTableGUI::$request
private

Definition at line 54 of file class.ilObjectBadgeTableGUI.php.

◆ $tpl

readonly ilGlobalTemplateInterface ILIAS\Badge\ilObjectBadgeTableGUI::$tpl
private

Definition at line 57 of file class.ilObjectBadgeTableGUI.php.


The documentation for this class was generated from the following file: