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 
39  const MAPPING_INFO_ALL = 1;
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 }
getMappings()
Get already configured mappings.
global $DIC
Definition: saml.php:7
$ilErr
Definition: raiseError.php:18
static _getInstanceByServerId($a_server_id)
Get instance of class.
foreach($_POST as $key=> $value) $res
$lng
$query
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
$row
getMappingInfoString($a_mapping_id)
Create an info string for a role group mapping.
global $ilDB
__construct($a_server_id)
Private constructor (Singleton for each server_id)
$data
Definition: bench.php:6