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)
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
static generateRandomCode()
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)