19 declare(strict_types=1);
    57         private readonly 
bool $has_general_lp_access,
    58         private readonly 
bool $has_rbac_or_position_access,
    67         if ($lp->isActive()) {
    68             $this->has_active_lp = 
true;
    71         if ($this->has_active_lp && $this->has_general_lp_access) {
    72             $this->
lng->loadLanguageModule(
'trac');
    81         return $this->ui_factory
    84                 $this->
lng->txt(
'frm_moderators'),
    88             ->withId(self::class . 
'_' . $this->forum->getId())
    89             ->withRequest($this->request);
    98             'ranking' => $this->ui_factory->table()->column()->number(
    99                 $this->
lng->txt(
'frm_statistics_ranking')
   100             )->withIsSortable(
true),
   101             'login' => $this->ui_factory->table()->column()->text(
   102                 $this->
lng->txt(
'login')
   103             )->withIsSortable(
true),
   104             'lastname' => $this->ui_factory->table()->column()->text(
   105                 $this->
lng->txt(
'lastname')
   106             )->withIsSortable(
true),
   107             'firstname' => $this->ui_factory->table()->column()->text(
   108                 $this->
lng->txt(
'firstname')
   109             )->withIsSortable(
true),
   111         if ($this->has_active_lp && $this->has_general_lp_access) {
   112             $columns[
'progress'] = $this->ui_factory->table()->column()->status(
   113                 $this->
lng->txt(
'learning_progress')
   114             )->withIsSortable(
false);
   122         if ($this->records === null) {
   124             $data = $this->forum->Forum->getUserStatistics($this->obj_properties->isPostActivationEnabled());
   126             foreach (
$data as $row) {
   127                 $this->records[$counter][
'usr_id'] = $row[
'usr_id'];
   128                 $this->records[$counter][
'ranking'] = $row[
'num_postings'];
   129                 $this->records[$counter][
'login'] = $row[
'login'];
   130                 $this->records[$counter][
'lastname'] = $row[
'lastname'];
   131                 $this->records[$counter][
'firstname'] = $row[
'firstname'];
   132                 if ($this->has_active_lp && $this->has_general_lp_access) {
   146         [$order_field, $order_direction] = $order->
join([], fn($ret, $key, $value) => [$key, $value]);
   148         usort($records, 
static function ($left, $right) use ($order_field): 
int {
   149             if ($order_field === 
'ranking') {
   150                 return $left[$order_field] <=> $right[$order_field];
   153             return ilStr::strCmp($left[$order_field], $right[$order_field]);
   156         if ($order_direction === 
'DESC') {
   157             $records = array_reverse($records);
   185         array $visible_column_ids,
   189         ?array $additional_parameters,
   192         foreach ($records as $record) {
   193             $row_id = (string) $record[
'usr_id'];
   194             yield $row_builder->buildDataRow($row_id, $record);
   202         return count($this->records);
   208         if ($this->has_active_lp &&
   209             $this->has_general_lp_access &&
   210             ($this->has_rbac_or_position_access || $this->actor->getId() === 
$user_id)) {
   211             $icon = match (
true) {
   212                 in_array($user_id, $this->completed, 
false) => $this->icons->renderIconForStatus(
   215                 in_array($user_id, $this->in_progress, 
false) => $this->icons->renderIconForStatus(
   218                 in_array($user_id, $this->failed, 
false) => $this->icons->renderIconForStatus(
 const LP_STATUS_COMPLETED_NUM
 
join($init, callable $fn)
 
getRows(\ILIAS\UI\Component\Table\DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, ?array $filter_data, ?array $additional_parameters,)
 
Interface Observer  Contains several chained tasks and infos about them. 
 
static _lookupInProgressForObject(int $a_obj_id, ?array $a_user_ids=null)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
const LP_STATUS_IN_PROGRESS_NUM
 
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 getInstance(int $variant=ilLPStatusIcons::ICON_VARIANT_DEFAULT, ?\ILIAS\UI\Renderer $renderer=null, ?\ILIAS\UI\Factory $factory=null)
 
getRecords(Range $range, Order $order)
 
static _lookupCompletedForObject(int $a_obj_id, ?array $a_user_ids=null)
 
getProgressStatus(int $user_id)
 
Both the subject and the direction need to be specified when expressing an order. ...
 
readonly ilLPStatusIcons $icons
 
__construct(private readonly ilObjForum $forum, private readonly ilForumProperties $obj_properties, private readonly bool $has_general_lp_access, private readonly bool $has_rbac_or_position_access, private readonly ilObjUser $actor, private readonly UIFactory $ui_factory, private readonly HttpRequest $request, private readonly ilLanguage $lng,)
 
limitRecords(array $records, Range $range)
 
const LP_STATUS_NOT_ATTEMPTED_NUM
 
static strCmp(string $a, string $b)
 
static _lookupFailedForObject(int $a_obj_id, ?array $a_user_ids=null)
 
A simple class to express a naive range of whole positive numbers. 
 
static getInstance(int $obj_id)
 
sortedRecords(array $records, Order $order)
 
const LP_STATUS_FAILED_NUM