ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilRegistrationRoleAccessLimitations.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21
27{
30
32 private array $access_limitations = [];
33
34 protected ilDBInterface $db;
35
36 public function __construct()
37 {
38 global $DIC;
39
40 $this->db = $DIC->database();
41 $this->read();
42 }
43
44 private function read(): void
45 {
46 $query = "SELECT * FROM reg_access_limit ";
47 $res = $this->db->query($query);
48
49 $this->access_limitations = [];
50 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
51 $role_id = (int) $row->role_id;
52 $this->access_limitations[$role_id]['id'] = $role_id;
53 $this->access_limitations[$role_id]['absolute'] = is_null($row->limit_absolute) ? null : (int) $row->limit_absolute;
54 $this->access_limitations[$role_id]['relative_d'] = is_null($row->limit_relative_d) ? null : (int) $row->limit_relative_d;
55 $this->access_limitations[$role_id]['relative_m'] = is_null($row->limit_relative_m) ? null : (int) $row->limit_relative_m;
56 $this->access_limitations[$role_id]['mode'] = (string) $row->limit_mode;
57 }
58 }
59
60 public function save(): bool
61 {
62 foreach ($this->access_limitations as $role_id => $data) {
63 $query = "DELETE FROM reg_access_limit " .
64 "WHERE role_id = " . $this->db->quote($role_id, 'integer');
65 $this->db->manipulate($query);
66
67 $query = "INSERT INTO reg_access_limit (role_id,limit_mode,limit_absolute," .
68 "limit_relative_d,limit_relative_m) " .
69 "VALUES( " .
70 $this->db->quote($role_id, ilDBConstants::T_INTEGER) . ", " .
71 $this->db->quote($data['mode'], ilDBConstants::T_TEXT) . ", " .
72 $this->db->quote($data['absolute'] ?? null, ilDBConstants::T_INTEGER) . ", " .
73 $this->db->quote($data['relative_d'] ?? null, ilDBConstants::T_INTEGER) . ", " .
74 $this->db->quote($data['relative_m'] ?? null, ilDBConstants::T_INTEGER) . " " .
75 ")";
76 $this->db->manipulate($query);
77 }
78 return true;
79 }
80
81 public function validate(): int
82 {
83 foreach ($this->access_limitations as $data) {
84 if ($data['mode'] === 'null') {
86 }
87
88 if ($data['mode'] === 'absolute' && $data['absolute'] < time()) {
90 }
91
92 if ($data['mode'] === 'relative' && ($data['relative_d'] < 1 && $data['relative_m'] < 1)) {
94 }
95 }
96 return 0;
97 }
98
99 public function getMode(int $a_role_id): string
100 {
101 return isset($this->access_limitations[$a_role_id]) ? $this->access_limitations[$a_role_id]['mode'] : 'null';
102 }
103
104 public function setMode(string $a_mode, int $a_role_id): void
105 {
106 $this->access_limitations[$a_role_id]['mode'] = $a_mode;
107 }
108
109 public function getAbsolute(int $a_role_id): int
110 {
111 return $this->access_limitations[$a_role_id]['absolute'] ?? time();
112 }
113
114 public function setAbsolute(?string $date, int $a_role_id): void
115 {
116 if (!is_null($date)) {
117 $unix_date = strtotime($date);
118 if ($unix_date) {
119 $this->access_limitations[$a_role_id]['absolute'] = $unix_date;
120 }
121 }
122 }
123
124 public function getRelative(int $a_role_id, string $a_type): int
125 {
126 return $this->access_limitations[$a_role_id]['relative_' . $a_type] ?? 0;
127 }
128
132 public function setRelative(?array $a_arr, int $a_role_id): void
133 {
134 if (null === $a_arr) {
135 $this->access_limitations[$a_role_id]['relative_d'] = null;
136 $this->access_limitations[$a_role_id]['relative_m'] = null;
137 } else {
138 $this->access_limitations[$a_role_id]['relative_d'] = (int) $a_arr['dd'];
139 $this->access_limitations[$a_role_id]['relative_m'] = (int) $a_arr['MM'];
140 }
141 }
142
143 public function resetAccessLimitations(): void
144 {
145 $this->access_limitations = [];
146 }
147}
Interface ilDBInterface.
$res
Definition: ltiservices.php:69
global $DIC
Definition: shib_login.php:26