ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilRegistrationRoleAccessLimitations.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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') {
85  return self::IL_REG_ACCESS_LIMITATION_MISSING_MODE;
86  }
87 
88  if ($data['mode'] === 'absolute' && $data['absolute'] < time()) {
89  return self::IL_REG_ACCESS_LIMITATION_OUT_OF_DATE;
90  }
91 
92  if ($data['mode'] === 'relative' && ($data['relative_d'] < 1 && $data['relative_m'] < 1)) {
93  return self::IL_REG_ACCESS_LIMITATION_OUT_OF_DATE;
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 }
$res
Definition: ltiservices.php:69
global $DIC
Definition: feed.php:28
$query
Class class.ilRegistrationAccessLimitation.