ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
ilUserCertificateTableProvider Class Reference
+ Collaboration diagram for ilUserCertificateTableProvider:

Public Member Functions

 __construct (private readonly ilDBInterface $database, private readonly ilLogger $logger, private readonly string $defaultTitle)
 
 fetchDataSet (int $userId, array $params, array $filter)
 

Data Fields

const TABLE_NAME = 'il_cert_user_cert'
 

Protected Member Functions

 getOrderByPart (array $params, array $filter)
 

Detailed Description

Constructor & Destructor Documentation

◆ __construct()

ilUserCertificateTableProvider::__construct ( private readonly ilDBInterface  $database,
private readonly ilLogger  $logger,
private readonly string  $defaultTitle 
)

Definition at line 28 of file class.ilUserCertificateTableProvider.php.

32 {
33 }

Member Function Documentation

◆ fetchDataSet()

ilUserCertificateTableProvider::fetchDataSet ( int  $userId,
array  $params,
array  $filter 
)
Parameters
array<string,mixed>$params
array<string,mixed>$filter
Returns
array{cnt: int, items: array<int, array>}

Definition at line 40 of file class.ilUserCertificateTableProvider.php.

40 : array
41 {
42 $this->logger->debug(sprintf('START - Fetching all active certificates for user: "%s"', $userId));
43 $additional_select = '';
44
45 $sql = 'SELECT
46 ' . self::TABLE_NAME . '.id,
47 ' . self::TABLE_NAME . '.obj_type,
48 ' . self::TABLE_NAME . '.acquired_timestamp,
49 ' . self::TABLE_NAME . '.tile_image_ident,
50 ' . $additional_select . ' usr_data.firstname,
51 usr_data.lastname,
52 ' . self::TABLE_NAME . '.obj_id,
53 (CASE
54 WHEN (trans.title IS NOT NULL AND LENGTH(trans.title) > 0) THEN trans.title
55 WHEN (object_data.title IS NOT NULL AND LENGTH(object_data.title) > 0) THEN object_data.title
56 WHEN (object_data_del.title IS NOT NULL AND LENGTH(object_data_del.title) > 0) THEN object_data_del.title
57 ELSE ' . $this->database->quote($this->defaultTitle, 'text') . '
58 END
59 ) as title,
60 (CASE
61 WHEN (trans.description IS NOT NULL AND LENGTH(trans.description) > 0) THEN trans.description
62 WHEN (object_data.description IS NOT NULL AND LENGTH(object_data.description) > 0) THEN object_data.description
63 WHEN (object_data_del.description IS NOT NULL AND LENGTH(object_data_del.description) > 0) THEN object_data_del.description
64 ELSE ""
65 END
66 ) as description
67FROM ' . self::TABLE_NAME . '
68LEFT JOIN object_data ON object_data.obj_id = ' . self::TABLE_NAME . '.obj_id
69LEFT JOIN object_translation trans ON trans.obj_id = object_data.obj_id
70AND trans.lang_code = ' . $this->database->quote($params['language'], 'text') . '
71LEFT JOIN object_data_del ON object_data_del.obj_id = ' . self::TABLE_NAME . '.obj_id
72LEFT JOIN usr_data ON usr_data.usr_id = ' . self::TABLE_NAME . '.usr_id
73WHERE ' . self::TABLE_NAME . '.usr_id = ' . $this->database->quote($userId, 'integer') . ' AND currently_active = 1';
74
75 if ([] !== $params) {
76 $sql .= $this->getOrderByPart($params, $filter);
77 }
78
79 if (isset($params['limit'])) {
80 if (!is_numeric($params['limit'])) {
81 throw new InvalidArgumentException('Please provide a valid numerical limit.');
82 }
83
84 if (!isset($params['offset'])) {
85 $params['offset'] = 0;
86 } elseif (!is_numeric($params['offset'])) {
87 throw new InvalidArgumentException('Please provide a valid numerical offset.');
88 }
89
90 $this->database->setLimit($params['limit'], $params['offset']);
91 }
92
93 $query = $this->database->query($sql);
94
95 $data = [
96 'items' => [],
97 ];
98
99 while ($row = $this->database->fetchAssoc($query)) {
100 $title = $row['title'];
101
102 $data['items'][] = [
103 'id' => (int) $row['id'],
104 'title' => $title,
105 'obj_id' => (int) $row['obj_id'],
106 'obj_type' => $row['obj_type'],
107 'date' => (int) $row['acquired_timestamp'],
108 'tile_image_ident' => $row['tile_image_ident'],
109 'description' => $row['description'],
110 'firstname' => $row['firstname'],
111 'lastname' => $row['lastname'],
112 ];
113 }
114
115 if (isset($params['limit'])) {
116 $cnt_sql = '
117 SELECT COUNT(*) cnt
118 FROM ' . self::TABLE_NAME . '
119 WHERE usr_id = ' . $this->database->quote($userId, 'integer') . ' AND currently_active = 1';
120
121 $row_cnt = $this->database->fetchAssoc($this->database->query($cnt_sql));
122
123 $data['cnt'] = (int) $row_cnt['cnt'];
124
125 $this->logger->debug(
126 sprintf(
127 'All active certificates for user: "%s" total: "%s"',
128 $userId,
129 $data['cnt']
130 )
131 );
132 } else {
133 $data['cnt'] = count($data['items']);
134 }
135
136 $this->logger->debug(sprintf('END - Actual results: "%s"', json_encode($data, JSON_THROW_ON_ERROR)));
137
138 return $data;
139 }
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:31

References $data, $params, ILIAS\Repository\database(), getOrderByPart(), ILIAS\Repository\int(), and ILIAS\Repository\logger().

+ Here is the call graph for this function:

◆ getOrderByPart()

ilUserCertificateTableProvider::getOrderByPart ( array  $params,
array  $filter 
)
protected

Definition at line 141 of file class.ilUserCertificateTableProvider.php.

141 : string
142 {
143 if (isset($params['order_field'])) {
144 if (!is_string($params['order_field'])) {
145 throw new InvalidArgumentException('Please provide a valid order field.');
146 }
147
148 if (!in_array($params['order_field'], ['date', 'id', 'title'])) {
149 throw new InvalidArgumentException('Please provide a valid order field.');
150 }
151
152 if ($params['order_field'] === 'date') {
153 $params['order_field'] = 'acquired_timestamp';
154 }
155
156 if (!isset($params['order_direction'])) {
157 $params['order_direction'] = 'ASC';
158 } elseif (!in_array(strtolower($params['order_direction']), ['asc', 'desc'])) {
159 throw new InvalidArgumentException('Please provide a valid order direction.');
160 }
161
162 return ' ORDER BY ' . $params['order_field'] . ' ' . $params['order_direction'];
163 }
164
165 return '';
166 }

References $params.

Referenced by fetchDataSet().

+ Here is the caller graph for this function:

Field Documentation

◆ TABLE_NAME

const ilUserCertificateTableProvider::TABLE_NAME = 'il_cert_user_cert'

Definition at line 26 of file class.ilUserCertificateTableProvider.php.


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