ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilRegistrationCode.php
Go to the documentation of this file.
1 <?php
2 
3 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
4 
14 {
15  const DB_TABLE = 'reg_registration_codes';
16  const CODE_LENGTH = 10;
17 
18  public static function create($role, $stamp, $local_roles, $limit, $limit_date, $reg_type, $ext_type)
19  {
20  global $DIC;
21 
22  $ilDB = $DIC['ilDB'];
23 
24  $id = $ilDB->nextId(self::DB_TABLE);
25 
26  // create unique code
27  $found = true;
28  while ($found) {
29  $code = self::generateRandomCode();
30  $chk = $ilDB->queryF("SELECT code_id FROM " . self::DB_TABLE . " WHERE code = %s", array("text"), array($code));
31  $found = (bool) $ilDB->numRows($chk);
32  }
33 
34  if (is_array($local_roles)) {
35  $local_roles = implode(";", $local_roles);
36  }
37  if ($limit == "relative" && is_array($limit_date)) {
38  $limit_date = serialize($limit_date);
39  }
40 
41  $data = array(
42  'code_id' => array('integer', $id),
43  'code' => array('text', $code),
44  'generated_on' => array('integer', $stamp),
45  'role' => array('integer', $role),
46  'role_local' => array('text', $local_roles),
47  'alimit' => array('text', $limit),
48  'alimitdt' => array('text', $limit_date),
49  'reg_enabled' => array('integer',$reg_type),
50  'ext_enabled' => array('integer',$ext_type)
51  );
52 
53  $ilDB->insert(self::DB_TABLE, $data);
54  return $id;
55  }
56 
57  protected static function generateRandomCode()
58  {
59  // missing : 01iloO
60  $map = "23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
61 
62  $code = "";
63  $max = strlen($map) - 1;
64  for ($loop = 1; $loop <= self::CODE_LENGTH; $loop++) {
65  $code .= $map[mt_rand(0, $max)];
66  }
67  return $code;
68  }
69 
70  public static function getCodesData($order_field, $order_direction, $offset, $limit, $filter_code, $filter_role, $filter_generated, $filter_access_limitation)
71  {
72  global $DIC;
73 
74  $ilDB = $DIC['ilDB'];
75 
76  // filter
77  $where = self::filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation);
78 
79  // count query
80  $set = $ilDB->query("SELECT COUNT(*) AS cnt FROM " . self::DB_TABLE . $where);
81  $cnt = 0;
82  if ($rec = $ilDB->fetchAssoc($set)) {
83  $cnt = $rec["cnt"];
84  }
85 
86  $sql = "SELECT * FROM " . self::DB_TABLE . $where;
87  if ($order_field) {
88  if ($order_field == 'generated') {
89  $order_field = 'generated_on';
90  }
91  $sql .= " ORDER BY " . $order_field . " " . $order_direction;
92  }
93 
94  // set query
95  $ilDB->setLimit((int) $limit, (int) $offset);
96  $set = $ilDB->query($sql);
97  $result = array();
98  while ($rec = $ilDB->fetchAssoc($set)) {
99  $rec['generated'] = $rec['generated_on'];
100  $result[] = $rec;
101  }
102  return array("cnt" => $cnt, "set" => $result);
103  }
104 
105  public static function loadCodesByIds(array $ids)
106  {
107  global $DIC;
108 
109  $ilDB = $DIC['ilDB'];
110 
111  $set = $ilDB->query("SELECT * FROM " . self::DB_TABLE . " WHERE " . $ilDB->in("code_id", $ids, false, "integer"));
112  $result = array();
113  while ($rec = $ilDB->fetchAssoc($set)) {
114  $result[] = $rec;
115  }
116  return $result;
117  }
118 
119  public static function deleteCodes(array $ids)
120  {
121  global $DIC;
122 
123  $ilDB = $DIC['ilDB'];
124 
125  if (sizeof($ids)) {
126  return $ilDB->manipulate("DELETE FROM " . self::DB_TABLE . " WHERE " . $ilDB->in("code_id", $ids, false, "integer"));
127  }
128  return false;
129  }
130 
131  public static function getGenerationDates()
132  {
133  global $DIC;
134 
135  $ilDB = $DIC['ilDB'];
136 
137  $set = $ilDB->query("SELECT DISTINCT(generated_on) genr FROM " . self::DB_TABLE . " ORDER BY genr");
138  $result = array();
139  while ($rec = $ilDB->fetchAssoc($set)) {
140  $result[] = $rec["genr"];
141  }
142  return $result;
143  }
144 
145  protected static function filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
146  {
147  global $DIC;
148 
149  $ilDB = $DIC['ilDB'];
150 
151  $where = array();
152  if ($filter_code) {
153  $where[] = $ilDB->like("code", "text", "%" . $filter_code . "%");
154  }
155  if ($filter_role) {
156  $where[] = "role = " . $ilDB->quote($filter_role, "integer");
157  }
158  if ($filter_generated) {
159  $where[] = "generated_on = " . $ilDB->quote($filter_generated, "text");
160  }
161  if ($filter_access_limitation) {
162  $where[] = "alimit = " . $ilDB->quote($filter_access_limitation, "text");
163  }
164  if (sizeof($where)) {
165  return " WHERE " . implode(" AND ", $where);
166  } else {
167  return "";
168  }
169  }
170 
171  public static function getCodesForExport($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
172  {
173  global $DIC;
174 
175  $ilDB = $DIC['ilDB'];
176 
177  // filter
178  $where = self::filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation);
179 
180  // set query
181  $set = $ilDB->query("SELECT code FROM " . self::DB_TABLE . $where . " ORDER BY code_id");
182  $result = array();
183  while ($rec = $ilDB->fetchAssoc($set)) {
184  $result[] = $rec["code"];
185  }
186  return $result;
187  }
188 
195  public static function isUnusedCode($code)
196  {
197  global $DIC;
198 
199  $ilDB = $DIC['ilDB'];
200 
201  $set = $ilDB->query("SELECT used FROM " . self::DB_TABLE . " WHERE code = " . $ilDB->quote($code, "text"));
202  $set = $ilDB->fetchAssoc($set);
203  if ($set && !$set["used"]) {
204  return true;
205  }
206  return false;
207  }
208 
214  public static function isValidRegistrationCode($a_code)
215  {
216  global $DIC;
217 
218  $ilDB = $DIC['ilDB'];
219 
220  $query = 'SELECT code_id FROM reg_registration_codes ' .
221  'WHERE used = ' . $ilDB->quote(0, 'integer') . ' ' .
222  'AND reg_enabled = ' . $ilDB->quote(1, 'integer') . ' ' .
223  'AND code = ' . $ilDB->quote($a_code, 'text');
224  $res = $ilDB->query($query);
225 
226  return $res->numRows() ? true : false;
227  }
228 
229  public static function useCode($code)
230  {
231  global $DIC;
232 
233  $ilDB = $DIC['ilDB'];
234 
235  return (bool) $ilDB->update(self::DB_TABLE, array("used" => array("timestamp", time())), array("code" => array("text", $code)));
236  }
237 
238  public static function getCodeRole($code)
239  {
240  global $DIC;
241 
242  $ilDB = $DIC['ilDB'];
243 
244  $set = $ilDB->query("SELECT role FROM " . self::DB_TABLE . " WHERE code = " . $ilDB->quote($code, "text"));
245  $row = $ilDB->fetchAssoc($set);
246  if (isset($row["role"])) {
247  return $row["role"];
248  }
249  }
250 
251  public static function getCodeData($code)
252  {
253  global $DIC;
254 
255  $ilDB = $DIC['ilDB'];
256 
257  $set = $ilDB->query("SELECT role, role_local, alimit, alimitdt, reg_enabled, ext_enabled" .
258  " FROM " . self::DB_TABLE .
259  " WHERE code = " . $ilDB->quote($code, "text"));
260  $row = $ilDB->fetchAssoc($set);
261  return $row;
262  }
263 }
$result
static getCodesData($order_field, $order_direction, $offset, $limit, $filter_code, $filter_role, $filter_generated, $filter_access_limitation)
global $DIC
Definition: saml.php:7
static deleteCodes(array $ids)
$code
Definition: example_050.php:99
if(!array_key_exists('StateId', $_REQUEST)) $id
static filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
static create($role, $stamp, $local_roles, $limit, $limit_date, $reg_type, $ext_type)
foreach($_POST as $key=> $value) $res
static isValidRegistrationCode($a_code)
Check if given code is a valid registration code.
static loadCodesByIds(array $ids)
Class ilRegistrationCode.
$query
$row
global $ilDB
static getCodesForExport($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
static isUnusedCode($code)
Check if code has been used already type $ilDB.
$data
Definition: bench.php:6