19 declare(strict_types=1);
33 ?
string $defaultTitle = null
35 if (null === $database) {
37 $database = $DIC->database();
41 if (null === $logger) {
43 $logger = $DIC->logger()->cert();
47 if (null === $defaultTitle) {
49 $defaultTitle = $DIC->language()->txt(
'certificate_no_object_title');
59 $this->
logger->debug(
'START - saving of user certificate');
64 $id = $this->database->nextId(
'il_cert_user_cert');
72 'id' => [
'integer',
$id],
74 'obj_id' => [
'integer',
$objId],
75 'obj_type' => [
'text', $userCertificate->
getObjType()],
76 'usr_id' => [
'integer', $userId],
77 'user_name' => [
'text', $userCertificate->
getUserName()],
81 'valid_until' => [
'integer', $userCertificate->
getValidUntil()],
89 $this->
logger->debug(sprintf(
90 'END - Save certificate with following values: %s',
91 json_encode($columns, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)
94 $this->database->insert(
'il_cert_user_cert', $columns);
104 $this->
logger->debug(sprintf(
'START - Fetching all active certificates for user: "%s"', $userId));
108 il_cert_user_cert.pattern_certificate_id, 109 il_cert_user_cert.obj_id, 110 il_cert_user_cert.obj_type, 111 il_cert_user_cert.usr_id, 112 il_cert_user_cert.user_name, 113 il_cert_user_cert.acquired_timestamp, 114 il_cert_user_cert.certificate_content, 115 il_cert_user_cert.template_values, 116 il_cert_user_cert.valid_until, 117 il_cert_user_cert.version, 118 il_cert_user_cert.ilias_version, 119 il_cert_user_cert.currently_active, 120 il_cert_user_cert.background_image_path, 121 il_cert_user_cert.id, 122 il_cert_user_cert.thumbnail_image_path, 123 COALESCE(object_data.title, object_data_del.title, ' . $this->database->quote($this->defaultTitle,
'text') .
') AS title 124 FROM il_cert_user_cert 125 LEFT JOIN object_data ON object_data.obj_id = il_cert_user_cert.obj_id 126 LEFT JOIN object_data_del ON object_data_del.obj_id = il_cert_user_cert.obj_id 127 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
' 128 AND currently_active = 1';
130 $query = $this->database->query($sql);
133 while ($row = $this->database->fetchAssoc($query)) {
137 (
int) $row[
'obj_id'],
138 (
string) $row[
'obj_type'],
143 $result[] = $presentation;
146 $this->
logger->debug(sprintf(
'Actual results: "%s"', json_encode($result, JSON_THROW_ON_ERROR)));
147 $this->
logger->debug(sprintf(
148 'END - All active certificates for user: "%s" total: "%s"',
164 $this->
logger->debug(sprintf(
'START - Fetching all active certificates for user: "%s"', $userId));
168 il_cert_user_cert.pattern_certificate_id, 169 il_cert_user_cert.obj_id, 170 il_cert_user_cert.obj_type, 171 il_cert_user_cert.usr_id, 172 il_cert_user_cert.user_name, 173 il_cert_user_cert.acquired_timestamp, 174 il_cert_user_cert.certificate_content, 175 il_cert_user_cert.template_values, 176 il_cert_user_cert.valid_until, 177 il_cert_user_cert.version, 178 il_cert_user_cert.ilias_version, 179 il_cert_user_cert.currently_active, 180 il_cert_user_cert.background_image_path, 181 il_cert_user_cert.id, 182 il_cert_user_cert.thumbnail_image_path, 183 COALESCE(object_data.title, object_data_del.title, ' . $this->database->quote($this->defaultTitle,
'text') .
') AS title 184 FROM il_cert_user_cert 185 LEFT JOIN object_data ON object_data.obj_id = il_cert_user_cert.obj_id 186 LEFT JOIN object_data_del ON object_data_del.obj_id = il_cert_user_cert.obj_id 187 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
' 188 AND currently_active = 1 189 AND acquired_timestamp >= ' . $this->database->quote($startTimestamp,
'integer') .
' 190 AND acquired_timestamp <= ' . $this->database->quote($endTimeStamp,
'integer');
192 $query = $this->database->query($sql);
195 while ($row = $this->database->fetchAssoc($query)) {
199 (
int) $row[
'obj_id'],
200 (
string) $row[
'obj_type'],
205 $result[] = $presentation;
208 $this->
logger->debug(sprintf(
'Actual results: "%s"', json_encode($result, JSON_THROW_ON_ERROR)));
209 $this->
logger->debug(sprintf(
210 'END - All active certificates for user: "%s" total: "%s"',
223 $this->
logger->debug(sprintf(
224 'START - Fetching all active certificates for user: "%s" and object: "%s"',
230 FROM il_cert_user_cert 231 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
' 232 AND obj_id = ' . $this->database->quote($objectId,
'integer') .
' 233 AND currently_active = 1';
235 $query = $this->database->query($sql);
237 while ($row = $this->database->fetchAssoc($query)) {
238 $this->
logger->debug(sprintf(
'Active certificate values: %s', json_encode($row, JSON_THROW_ON_ERROR)));
240 $this->
logger->debug(sprintf(
241 'END -Found active user certificate for user: "%s" and object: "%s"',
250 'There is no active entry for user id: "%s" and object id: "%s"',
261 $this->
logger->debug(sprintf(
262 'START - Fetching all active certificates for user: "%s" and object: "%s"',
268 il_cert_user_cert.pattern_certificate_id, 269 il_cert_user_cert.obj_id, 270 il_cert_user_cert.obj_type, 271 il_cert_user_cert.usr_id, 272 il_cert_user_cert.user_name, 273 il_cert_user_cert.acquired_timestamp, 274 il_cert_user_cert.certificate_content, 275 il_cert_user_cert.template_values, 276 il_cert_user_cert.valid_until, 277 il_cert_user_cert.version, 278 il_cert_user_cert.ilias_version, 279 il_cert_user_cert.currently_active, 280 il_cert_user_cert.background_image_path, 281 il_cert_user_cert.id, 282 il_cert_user_cert.thumbnail_image_path, 284 COALESCE(object_data.title, object_data_del.title, ' . $this->database->quote($this->defaultTitle,
'text') .
') AS title 285 FROM il_cert_user_cert 286 LEFT JOIN object_data ON object_data.obj_id = il_cert_user_cert.obj_id 287 LEFT JOIN object_data_del ON object_data_del.obj_id = il_cert_user_cert.obj_id 288 LEFT JOIN usr_data ON usr_data.usr_id = il_cert_user_cert.usr_id 289 WHERE il_cert_user_cert.usr_id = ' . $this->database->quote($userId,
'integer') .
' 290 AND il_cert_user_cert.obj_id = ' . $this->database->quote($objectId,
'integer') .
' 291 AND il_cert_user_cert.currently_active = 1';
293 $query = $this->database->query($sql);
295 while ($row = $this->database->fetchAssoc($query)) {
296 $this->
logger->debug(sprintf(
'Active certificate values: %s', json_encode($row, JSON_THROW_ON_ERROR)));
298 $this->
logger->debug(sprintf(
299 'END -Found active user certificate for user: "%s" and object: "%s"',
306 (
int) $row[
'obj_id'],
307 (
string) $row[
'obj_type'],
316 'There is no active entry for user id: "%s" and object id: "%s"',
327 $this->
logger->debug(sprintf(
328 'START - Fetching all active certificates for user: "%s" and type: "%s"',
334 il_cert_user_cert.pattern_certificate_id, 335 il_cert_user_cert.obj_id, 336 il_cert_user_cert.obj_type, 337 il_cert_user_cert.usr_id, 338 il_cert_user_cert.user_name, 339 il_cert_user_cert.acquired_timestamp, 340 il_cert_user_cert.certificate_content, 341 il_cert_user_cert.template_values, 342 il_cert_user_cert.valid_until, 343 il_cert_user_cert.version, 344 il_cert_user_cert.ilias_version, 345 il_cert_user_cert.currently_active, 346 il_cert_user_cert.background_image_path, 347 il_cert_user_cert.id, 348 il_cert_user_cert.thumbnail_image_path, 349 COALESCE(object_data.title, object_data_del.title, ' . $this->database->quote($this->defaultTitle,
'text') .
') AS title 350 FROM il_cert_user_cert 351 LEFT JOIN object_data ON object_data.obj_id = il_cert_user_cert.obj_id 352 LEFT JOIN object_data_del ON object_data_del.obj_id = il_cert_user_cert.obj_id 353 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
' 354 AND obj_type = ' . $this->database->quote($type,
'text') .
' 355 AND currently_active = 1';
357 $query = $this->database->query($sql);
360 while ($row = $this->database->fetchAssoc($query)) {
364 (
int) $row[
'obj_id'],
365 (
string) $row[
'obj_type'],
370 $result[] = $presentation;
373 $this->
logger->debug(sprintf(
374 'END - Fetching all active certificates for user: "%s" and type: "%s"',
387 $this->
logger->debug(sprintf(
'START - Fetch certificate by id: "%s"', $id));
389 $sql =
'SELECT * FROM il_cert_user_cert WHERE id = ' . $this->database->quote($id,
'integer');
391 $query = $this->database->query($sql);
393 while ($row = $this->database->fetchAssoc($query)) {
394 $this->
logger->debug(sprintf(
'Fetched certificate: "%s"', json_encode($row, JSON_THROW_ON_ERROR)));
396 $this->
logger->debug(sprintf(
'END - Fetch certificate by id: "%s"', $id));
401 throw new ilException(
'No certificate found for user certificate id: ' . $id);
410 $this->
logger->debug(sprintf(
411 'START - Fetch certificate for user("%s") and ids: "%s"',
413 json_encode($objectIds, JSON_THROW_ON_ERROR)
416 if ([] === $objectIds) {
420 $inStatementObjectIds = $this->database->in(
427 $sql =
'SELECT obj_id FROM il_cert_user_cert 428 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
429 ' AND ' . $inStatementObjectIds .
430 ' AND currently_active = ' . $this->database->quote(1,
'integer');
432 $query = $this->database->query($sql);
436 while ($row = $this->database->fetchAssoc($query)) {
437 $this->
logger->debug(sprintf(
'Fetched certificate: "%s"', json_encode($row, JSON_THROW_ON_ERROR)));
438 $result[] = (
int) $row[
'obj_id'];
449 $this->
logger->debug(sprintf(
'START - Fetch certificate for object("%s")"', $objectId));
451 $sql =
'SELECT usr_id FROM il_cert_user_cert 452 WHERE obj_id = ' . $this->database->quote($objectId,
'integer') .
' 453 AND currently_active = ' . $this->database->quote(1,
'integer');
455 $query = $this->database->query($sql);
459 while ($row = $this->database->fetchAssoc($query)) {
460 $this->
logger->debug(sprintf(
'Fetched certificate: "%s"', json_encode($row, JSON_THROW_ON_ERROR)));
461 $result[] = (
int) $row[
'usr_id'];
469 $this->
logger->debug(sprintf(
'START - Delete certificate for user("%s")"', $userId));
471 $sql =
'DELETE FROM il_cert_user_cert WHERE usr_id = ' . $this->database->quote($userId,
'integer');
473 $this->database->manipulate($sql);
475 $this->
logger->debug(sprintf(
'END - Successfully deleted certificate for user("%s")"', $userId));
483 $this->
logger->debug(sprintf(
484 'START - fetching all certificates of object(user id: "%s", object id: "%s")',
489 $sql =
'SELECT * FROM il_cert_user_cert 490 WHERE usr_id = ' . $this->database->quote($userId,
'integer') .
' 491 AND obj_id = ' . $this->database->quote($objId,
'integer');
493 $query = $this->database->query($sql);
496 while ($row = $this->database->fetchAssoc($query)) {
497 $this->
logger->debug(sprintf(
498 'Certificate found: "%s")',
499 json_encode($row, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT)
502 $this->
logger->debug(sprintf(
'Certificate: "%s"', json_encode($row, JSON_THROW_ON_ERROR)));
507 $this->
logger->debug(sprintf(
508 'END - fetching all certificates of object(user id: "%s", object id: "%s")',
518 $this->
logger->debug(sprintf(
519 'START - fetching of latest certificates of object(user id: "%s", object id: "%s")',
527 foreach ($templates as $template) {
528 if ($template->getVersion() >
$version) {
533 $this->
logger->debug(sprintf(
534 'END - fetching of latest certificates of object(user id: "%s", object id: "%s") with version "%s"',
545 $this->
logger->debug(sprintf(
546 'START - deactivating previous certificates for user id: "%s" and object id: "%s"',
552 UPDATE il_cert_user_cert 553 SET currently_active = 0 554 WHERE obj_id = ' . $this->database->quote($objId,
'integer') .
' 555 AND usr_id = ' . $this->database->quote($userId,
'integer');
557 $this->database->manipulate($sql);
559 $this->
logger->debug(sprintf(
560 'END - deactivating previous certificates for user id: "%s" and object id: "%s"',
568 $this->
logger->debug(sprintf(
569 'START - Checking if any certificate template uses background image path "%s"',
573 $result = $this->database->queryF(
574 'SELECT EXISTS(SELECT 1 FROM il_cert_user_cert WHERE background_image_path = %s AND currently_active = 1) AS does_exist',
576 [$relative_image_path]
579 $exists = (bool) ($this->database->fetchAssoc($result)[
'does_exist'] ??
false);
581 $this->
logger->debug(sprintf(
582 'END - Image path "%s" is ' . $exists ?
"in use" :
"unused",
595 (
int) $row[
'pattern_certificate_id'],
596 (
int) $row[
'obj_id'],
598 (
int) $row[
'usr_id'],
600 (
int) $row[
'acquired_timestamp'],
601 $row[
'certificate_content'],
602 $row[
'template_values'],
603 (
int) $row[
'valid_until'],
604 (
int) $row[
'version'],
605 $row[
'ilias_version'],
606 (
bool) $row[
'currently_active'],
607 (
string) $row[
'background_image_path'],
608 (
string) $row[
'thumbnail_image_path'],
609 isset($row[
'id']) ? (
int) $row[
'id'] : null
615 $this->
logger->debug(sprintf(
'START - Delete certificate for user("%s") in object (obj_id: %s)"', $userId, $obj_id));
617 $sql =
'DELETE FROM il_cert_user_cert ' . PHP_EOL
618 .
' WHERE usr_id = ' . $this->database->quote($userId,
'integer') . PHP_EOL
619 .
' AND obj_id = ' . $this->database->quote($obj_id,
'integer');
621 $this->database->manipulate($sql);
623 $this->
logger->debug(sprintf(
'END - Successfully deleted certificate for user("%s") in object (obj_id: %s)"', $userId, $obj_id));
getPatternCertificateId()
deleteUserCertificatesForObject(int $userId, int $obj_id)
fetchActiveCertificatesByTypeForPresentation(int $userId, string $type)
readonly ilLogger $logger
isBackgroundImageUsed(string $relative_image_path)
fetchActiveCertificatesInIntervalForPresentation(int $userId, int $startTimestamp, int $endTimeStamp)
save(ilUserCertificate $userCertificate)
fetchUserIdsWithCertificateForObject(int $objectId)
fetchActiveCertificate(int $userId, int $objectId)
readonly string $defaultTitle
fetchActiveCertificates(int $userId)
deactivatePreviousCertificates(int $objId, int $userId)
fetchCertificate(int $id)
readonly ilDBInterface $database
__construct(?ilDBInterface $database=null, ?ilLogger $logger=null, ?string $defaultTitle=null)
deleteUserCertificates(int $userId)
fetchCertificatesOfObject(int $objId, int $userId)
createUserCertificate(array $row)
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
fetchObjectIdsWithCertificateForUser(int $userId, array $objectIds)
fetchLatestVersion(int $objId, int $userId)
fetchActiveCertificateForPresentation(int $userId, int $objectId)