ILIAS  release_5-4 Revision v5.4.26-12-gabc799a52e6
class.ilLDAPRoleGroupMappingSettings.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7 | |
8 | This program is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License |
10 | as published by the Free Software Foundation; either version 2 |
11 | of the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 | |
18 | You should have received a copy of the GNU General Public License |
19 | along with this program; if not, write to the Free Software |
20 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21 +-----------------------------------------------------------------------------+
22*/
23
33{
34 private static $instances = array();
35 private $server_id = null;
36 private $db = null;
37 private $mappings = null;
38
41
48 private function __construct($a_server_id)
49 {
50 global $DIC;
51
52 $ilDB = $DIC['ilDB'];
53 $lng = $DIC['lng'];
54
55 $this->db = $ilDB;
56 $this->lng = $lng;
57 $this->server_id = $a_server_id;
58 $this->read();
59 }
60
68 public static function _getInstanceByServerId($a_server_id)
69 {
70 if (array_key_exists($a_server_id, self::$instances) and is_object(self::$instances[$a_server_id])) {
71 return self::$instances[$a_server_id];
72 }
73 return self::$instances[$a_server_id] = new ilLDAPRoleGroupMappingSettings($a_server_id);
74 }
75
76 public static function _deleteByRole($a_role_id)
77 {
78 global $DIC;
79
80 $ilDB = $DIC['ilDB'];
81
82 $query = "DELETE FROM ldap_rg_mapping " .
83 "WHERE role = " . $ilDB->quote($a_role_id, 'integer');
84 $res = $ilDB->manipulate($query);
85
86 return true;
87 }
88
89 public static function _deleteByServerId($a_server_id)
90 {
91 global $DIC;
92
93 $ilDB = $DIC['ilDB'];
94
95 $query = "DELETE FROM ldap_rg_mapping " .
96 "WHERE server_id = " . $ilDB->quote($a_server_id, 'integer');
97 $res = $ilDB->manipulate($query);
98
99 return true;
100 }
101
102 public static function _getAllActiveMappings()
103 {
104 global $DIC;
105
106 $ilDB = $DIC['ilDB'];
107 $rbacreview = $DIC['rbacreview'];
108
109 $query = "SELECT rgm.* FROM ldap_rg_mapping rgm JOIN ldap_server_settings lss " .
110 "ON rgm.server_id = lss.server_id " .
111 "WHERE lss.active = 1 " .
112 "AND lss.role_sync_active = 1 ";
113 $res = $ilDB->query($query);
114 while ($row = $ilDB->fetchObject($res)) {
115 $data['server_id'] = $row->server_id;
116 $data['url'] = $row->url;
117 $data['mapping_id'] = $row->mapping_id;
118 $data['dn'] = $row->dn;
119 $data['member'] = $row->member_attribute;
120 $data['isdn'] = $row->member_isdn;
121 $data['info'] = $row->mapping_info;
122 $data['info_type'] = $row->mapping_info_type;
123 // read assigned object
124 $data['object_id'] = $rbacreview->getObjectOfRole($row->role);
125
126
127 $active[$row->role][] = $data;
128 }
129 return $active ? $active : array();
130 }
131
132 public function getServerId()
133 {
134 return $this->server_id;
135 }
136
143 public function getMappings()
144 {
145 return $this->mappings ? $this->mappings : array();
146 }
147
148 public function loadFromPost($a_mappings)
149 {
150 global $DIC;
151
152 $rbacreview = $DIC['rbacreview'];
153
154 if (!$a_mappings) {
155 return;
156 }
157
158 $this->mappings = array();
159 foreach ($a_mappings as $mapping_id => $data) {
160 if ($mapping_id == 0) {
161 if (!$data['dn'] and !$data['member'] and !$data['memberisdn'] and !$data['role']) {
162 continue;
163 }
164 }
165 $this->mappings[$mapping_id]['dn'] = ilUtil::stripSlashes($data['dn']);
166 $this->mappings[$mapping_id]['url'] = ilUtil::stripSlashes($data['url']);
167 $this->mappings[$mapping_id]['member_attribute'] = ilUtil::stripSlashes($data['member']);
168 $this->mappings[$mapping_id]['member_isdn'] = ilUtil::stripSlashes($data['memberisdn']);
169 $this->mappings[$mapping_id]['role_name'] = ilUtil::stripSlashes($data['role']);
170 $this->mappings[$mapping_id]['role'] = $rbacreview->roleExists(ilUtil::stripSlashes($data['role']));
171 $this->mappings[$mapping_id]['info'] = ilUtil::stripSlashes($data['info']);
172 $this->mappings[$mapping_id]['info_type'] = ilUtil::stripSlashes($data['info_type']);
173 }
174 }
175
182 public function validate()
183 {
184 global $DIC;
185
186 $ilErr = $DIC['ilErr'];
187 $rbacreview = $DIC['rbacreview'];
188
189 $ilErr->setMessage('');
190 $found_missing = false;
191 foreach ($this->mappings as $mapping_id => $data) {
192 // Check if all required fields are available
193 if (!strlen($data['dn']) || !strlen($data['member_attribute']) || !strlen($data['role_name'])) {
194 if (!$found_missing) {
195 $found_missing = true;
196 $ilErr->appendMessage($this->lng->txt('fill_out_all_required_fields'));
197 }
198 }
199 // Check role valid
200 if (strlen($data['role_name']) and !$rbacreview->roleExists($data['role_name'])) {
201 $ilErr->appendMessage($this->lng->txt('ldap_role_not_exists') . ' ' . $data['role_name']);
202 }
203 }
204 return strlen($ilErr->getMessage()) ? false : true;
205 }
206
214 public function save()
215 {
216 global $DIC;
217
218 $ilDB = $DIC['ilDB'];
219
220 foreach ($this->mappings as $mapping_id => $data) {
221 if (!$mapping_id) {
222 $next_id = $ilDB->nextId('ldap_rg_mapping');
223 $query = "INSERT INTO ldap_rg_mapping (mapping_id,server_id,url,dn,member_attribute,member_isdn,role,mapping_info,mapping_info_type) " .
224 "VALUES ( " .
225 $ilDB->quote($next_id, 'integer') . ", " .
226 $this->db->quote($this->getServerId(), 'integer') . ", " .
227 $this->db->quote($data['url'], 'text') . ", " .
228 $this->db->quote($data['dn'], 'text') . ", " .
229 $this->db->quote($data['member_attribute'], 'text') . ", " .
230 $this->db->quote($data['member_isdn'], 'integer') . ", " .
231 $this->db->quote($data['role'], 'integer') . ", " .
232 $this->db->quote($data['info'], 'text') . ", " .
233 $this->db->quote($data['info_type'], 'integer') .
234 ")";
235 $res = $ilDB->manipulate($query);
236 } else {
237 $query = "UPDATE ldap_rg_mapping " .
238 "SET server_id = " . $this->db->quote($this->getServerId(), 'integer') . ", " .
239 "url = " . $this->db->quote($data['url'], 'text') . ", " .
240 "dn =" . $this->db->quote($data['dn'], 'text') . ", " .
241 "member_attribute = " . $this->db->quote($data['member_attribute'], 'text') . ", " .
242 "member_isdn = " . $this->db->quote($data['member_isdn'], 'integer') . ", " .
243 "role = " . $this->db->quote($data['role'], 'integer') . ", " .
244 "mapping_info = " . $this->db->quote($data['info'], 'text') . ", " .
245 "mapping_info_type = " . $this->db->quote($data['info_type'], 'integer') . " " .
246 "WHERE mapping_id = " . $this->db->quote($mapping_id, 'integer');
247 $res = $ilDB->manipulate($query);
248 }
249 }
250 $this->read();
251 }
252
253
261 public function delete($a_mapping_id)
262 {
263 global $DIC;
264
265 $ilDB = $DIC['ilDB'];
266
267 $query = "DELETE FROM ldap_rg_mapping " .
268 "WHERE server_id = " . $this->db->quote($this->getServerId(), 'integer') . " " .
269 "AND mapping_id = " . $this->db->quote($a_mapping_id, 'integer');
270 $res = $ilDB->manipulate($query);
271 $this->read();
272 }
273
274
281 public function getMappingInfoString($a_mapping_id)
282 {
283 $role = $this->mappings[$a_mapping_id]['role_name'];
284 $dn_parts = explode(',', $this->mappings[$a_mapping_id]['dn']);
285
286 return (array_key_exists(0, $dn_parts) ? $dn_parts[0] : "''");
287 }
288
289
296 private function read()
297 {
298 global $DIC;
299
300 $ilObjDataCache = $DIC['ilObjDataCache'];
301 $rbacreview = $DIC['rbacreview'];
302 $tree = $DIC['tree'];
303
304 $this->mappings = array();
305 $query = "SELECT * FROM ldap_rg_mapping LEFT JOIN object_data " .
306 "ON role = obj_id " .
307 "WHERE server_id =" . $this->db->quote($this->getServerId(), 'integer') . ' ' .
308 "ORDER BY title,dn";
309
310 $res = $this->db->query($query);
311 while ($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT)) {
312 $this->mappings[$row->mapping_id]['mapping_id'] = $row->mapping_id;
313 $this->mappings[$row->mapping_id]['dn'] = $row->dn;
314 $this->mappings[$row->mapping_id]['url'] = $row->url;
315 $this->mappings[$row->mapping_id]['member_attribute'] = $row->member_attribute;
316 $this->mappings[$row->mapping_id]['member_isdn'] = $row->member_isdn;
317 $this->mappings[$row->mapping_id]['role'] = $row->role;
318 $this->mappings[$row->mapping_id]['info'] = $row->mapping_info;
319 $this->mappings[$row->mapping_id]['info_type'] = $row->mapping_info_type;
320 if ($ilObjDataCache->lookupType($row->role) == 'role') {
321 $this->mappings[$row->mapping_id]['role_name'] = $ilObjDataCache->lookupTitle($row->role);
322 } else {
323 $this->mappings[$row->mapping_id]['role_name'] = $row->role;
324 }
325 }
326 }
327}
An exception for terminatinating execution or to throw for unit testing.
getMappingInfoString($a_mapping_id)
Create an info string for a role group mapping.
__construct($a_server_id)
Private constructor (Singleton for each server_id)
static _getInstanceByServerId($a_server_id)
Get instance of class.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$row
$query
$ilErr
Definition: raiseError.php:18
global $DIC
Definition: saml.php:7
$lng
foreach($_POST as $key=> $value) $res
global $ilDB
$data
Definition: bench.php:6