ILIAS  release_7 Revision v7.30-3-g800a261c036
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) {
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
An exception for terminatinating execution or to throw for unit testing.
return true
Flag indicating whether or not HTTP headers will be sent when outputting captcha image/audio.
Class ilRegistrationCode.
static filterToSQL($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
static deleteCodes(array $ids)
static isValidRegistrationCode($a_code)
Check if given code is a valid registration code.
static getCodesForExport($filter_code, $filter_role, $filter_generated, $filter_access_limitation)
static create($role, $stamp, $local_roles, $limit, $limit_date, $reg_type, $ext_type)
static isUnusedCode($code)
Check if code has been used already @global type $ilDB.
static getCodesData($order_field, $order_direction, $offset, $limit, $filter_code, $filter_role, $filter_generated, $filter_access_limitation)
static loadCodesByIds(array $ids)
global $DIC
Definition: goto.php:24
$query
foreach($_POST as $key=> $value) $res
global $ilDB
$data
Definition: storeScorm.php:23