19 declare(strict_types=1);
    28     protected const DB_TABLE = 
'reg_registration_codes';
    42         $ilDB = $DIC->database();
    49             $code = self::generateRandomCode();
    51                 "SELECT code_id FROM " . self::DB_TABLE . 
" WHERE code = %s",
    55             $found = (bool) 
$ilDB->numRows($chk);
    59             'code_id' => [
'integer', 
$id],
    60             'code' => [
'text', $code],
    61             'generated_on' => [
'integer', $stamp],
    62             'role' => [
'integer', $role],
    63             'role_local' => [
'text', implode(
";", $local_roles)],
    64             'alimit' => [
'text', $limit],
    65             'alimitdt' => [
'text', $limit_date],
    66             'reg_enabled' => [
'integer', $reg_type],
    67             'ext_enabled' => [
'integer', $ext_type]
    77         $map = 
"23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
    80         $max = strlen($map) - 1;
    81         for ($loop = 1; $loop <= self::CODE_LENGTH; $loop++) {
    82             $code .= $map[random_int(0, $max)];
    89         string $order_direction,
    94         string $filter_generated,
    95         string $filter_access_limitation
    99         $ilDB = $DIC->database();
   102         $where = self::filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation);
   105         $set = 
$ilDB->query(
"SELECT COUNT(*) AS cnt FROM " . self::DB_TABLE . $where);
   107         if ($rec = 
$ilDB->fetchAssoc($set)) {
   111         $sql = 
"SELECT * FROM " . self::DB_TABLE . $where;
   113             if ($order_field === 
'generated') {
   114                 $order_field = 
'generated_on';
   116             $sql .= 
" ORDER BY " . $order_field . 
" " . $order_direction;
   120         $ilDB->setLimit($limit, $offset);
   121         $set = 
$ilDB->query($sql);
   123         while ($rec = 
$ilDB->fetchAssoc($set)) {
   124             $rec[
'generated'] = $rec[
'generated_on'];
   127         return [
"cnt" => $cnt, 
"set" => $result];
   134         $ilDB = $DIC->database();
   136         $set = 
$ilDB->query(
"SELECT * FROM " . self::DB_TABLE . 
" WHERE " . 
$ilDB->in(
   143         while ($rec = 
$ilDB->fetchAssoc($set)) {
   153         $ilDB = $DIC->database();
   155             return (
bool) 
$ilDB->manipulate(
"DELETE FROM " . self::DB_TABLE . 
" WHERE " . 
$ilDB->in(
   169         $ilDB = $DIC->database();
   171         $set = 
$ilDB->query(
"SELECT DISTINCT(generated_on) genr FROM " . self::DB_TABLE . 
" ORDER BY genr");
   173         while ($rec = 
$ilDB->fetchAssoc($set)) {
   174             $result[] = $rec[
"genr"];
   182         string $filter_generated,
   183         string $filter_access_limitation
   187         $ilDB = $DIC[
'ilDB'];
   191             $where[] = 
$ilDB->like(
"code", 
"text", 
"%" . $filter_code . 
"%");
   194             $where[] = 
"role = " . 
$ilDB->quote($filter_role, 
"integer");
   196         if ($filter_generated) {
   197             $where[] = 
"generated_on = " . 
$ilDB->quote($filter_generated, 
"text");
   199         if ($filter_access_limitation) {
   200             $where[] = 
"alimit = " . 
$ilDB->quote($filter_access_limitation, 
"text");
   203             return " WHERE " . implode(
" AND ", $where);
   212         string $filter_generated,
   213         string $filter_access_limitation
   217         $ilDB = $DIC->database();
   220         $where = self::filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation);
   223         $set = 
$ilDB->query(
"SELECT code FROM " . self::DB_TABLE . $where . 
" ORDER BY code_id");
   225         while ($rec = 
$ilDB->fetchAssoc($set)) {
   226             $result[] = $rec[
"code"];
   235         $ilDB = $DIC[
'ilDB'];
   237         $set = 
$ilDB->query(
"SELECT used FROM " . self::DB_TABLE . 
" WHERE code = " . 
$ilDB->quote($code, 
"text"));
   238         $set = 
$ilDB->fetchAssoc($set);
   239         return $set && !$set[
"used"];
   246         $ilDB = $DIC->database();
   248         $query = 
'SELECT alimit, alimitdt FROM reg_registration_codes ' .
   249             'WHERE used = ' . 
$ilDB->quote(0, 
'integer') . 
' ' .
   250             'AND reg_enabled = ' . 
$ilDB->quote(1, 
'integer') . 
' ' .
   251             'AND code = ' . 
$ilDB->quote($a_code, 
'text');
   260         if ($row[
'alimit'] === 
'absolute') {
   261             $clock_factory = (new \ILIAS\Data\Factory())->clock();
   264                 $clock_factory->system()->now()->getTimezone()
   267             $is_valid = $right_interval >= $clock_factory->system()->now();
   275         $code_data = self::getCodeData($code);
   277         if ($code_data[
"alimit"]) {
   278             switch ($code_data[
"alimit"]) {
   280                     return $code_data[
'alimitdt'];
   286     public static function useCode(
string $code): bool
   290         $ilDB = $DIC->database();
   291         return (
bool) 
$ilDB->update(
   293             [
"used" => [
"timestamp", time()]],
   294             [
"code" => [
"text", $code]]
   302         $ilDB = $DIC->database();
   303         $set = 
$ilDB->query(
"SELECT role FROM " . self::DB_TABLE . 
" WHERE code = " . 
$ilDB->quote($code, 
"text"));
   304         $row = 
$ilDB->fetchAssoc($set);
   305         if (isset($row[
"role"])) {
   306             return (
int) $row[
"role"];
   315         $ilDB = $DIC->database();
   316         $set = 
$ilDB->query(
"SELECT role, role_local, alimit, alimitdt, reg_enabled, ext_enabled" .
   317             " FROM " . self::DB_TABLE .
   318             " WHERE code = " . 
$ilDB->quote($code, 
"text"));
   319         return $ilDB->fetchAssoc($set);
   328         $grole = self::getCodeRole($code);
   330             $GLOBALS[
'DIC'][
'rbacadmin']->assignUser($grole, $user->
getId());
   332         $code_data = self::getCodeData($code);
   333         if ($code_data[
"role_local"]) {
   334             $code_local_roles = explode(
";", $code_data[
"role_local"]);
   335             foreach ($code_local_roles as $role_id) {
   336                 $GLOBALS[
'DIC'][
'rbacadmin']->assignUser($role_id, $user->
getId());
   339                 $role_obj = 
$GLOBALS[
'DIC'][
'rbacreview']->getObjectOfRole($role_id);
   344                         $role_ref = end($role_refs);
   359         $code_data = self::getCodeData($code);
   361         if ($code_data[
"alimit"]) {
   362             switch ($code_data[
"alimit"]) {
   372                     $rel = unserialize($code_data[
"alimitdt"], [
"allowed_classes" => 
false]);
 setTimeLimitUnlimited(bool $a_unlimited)
 
static getCodeRole(string $code)
 
static getCodeValidUntil(string $code)
 
static deleteCodes(array $ids)
 
static _getAllReferences(int $id)
get all reference ids for object ID 
 
static getGenerationDates()
 
setTimeLimitUntil(?int $a_until)
 
static getCodeData(string $code)
 
static loadCodesByIds(array $ids)
 
static isValidRegistrationCode(string $a_code)
 
Class ilRegistrationCode. 
 
static isUnusedCode(string $code)
 
static getCodesData(string $order_field, string $order_direction, int $offset, int $limit, string $filter_code, int $filter_role, string $filter_generated, string $filter_access_limitation)
 
static getCodesForExport(string $filter_code, ?int $filter_role, string $filter_generated, string $filter_access_limitation)
 
static create(int $role, int $stamp, array $local_roles, ?string $limit, ?string $limit_date, bool $reg_type, bool $ext_type)
 
static useCode(string $code)
 
static generateRandomCode()
 
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins 
 
static applyRoleAssignments(ilObjUser $user, string $code)
 
static _lookupType(int $id, bool $reference=false)
 
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
 
static applyAccessLimits(ilObjUser $user, string $code)
 
static filterToSQL(string $filter_code, ?int $filter_role, string $filter_generated, string $filter_access_limitation)