Group.class.php (9887B)
1 <?php 2 namespace cms\model; 3 // OpenRat Content Management System 4 // Copyright (C) 2002-2012 Jan Dankert, cms@jandankert.de 5 // 6 // This program is free software; you can redistribute it and/or 7 // modify it under the terms of the GNU General Public License 8 // as published by the Free Software Foundation; either version 2 9 // of the License, or (at your option) any later version. 10 // 11 // This program is distributed in the hope that it will be useful, 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 // GNU General Public License for more details. 15 // 16 // You should have received a copy of the GNU General Public License 17 // along with this program; if not, write to the Free Software 18 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 20 21 22 /** 23 * Darstellen einer Benutzergruppe. Eine Gruppe enthaelt beliebig viele Benutzer 24 * 25 * @version $Revision$ 26 * @author $Author$ 27 * @package openrat.objects 28 */ 29 class Group extends ModelBase 30 { 31 var $groupid = 0; 32 var $error = ''; 33 34 var $name = ''; 35 var $fullname = ''; 36 var $ldap_dn; 37 var $tel; 38 var $mail; 39 var $desc; 40 var $style; 41 var $isAdmin; 42 43 44 // Konstruktor 45 function __construct( $groupid='' ) 46 { 47 if ( is_numeric($groupid) ) 48 $this->groupid = $groupid; 49 } 50 51 52 /** 53 * Read all groups 54 */ 55 public static function getAll() 56 { 57 $stmt = db()->sql( 'SELECT id,name FROM {{group}}' ); 58 59 return $stmt->getAssoc(); 60 } 61 62 63 /** 64 * Lesen Gruppe aus der Datenbank 65 */ 66 public function load() 67 { 68 $sql = db()->sql( 'SELECT * FROM {{group}}'. 69 ' WHERE id={groupid}' ); 70 $sql->setInt( 'groupid',$this->groupid ); 71 72 $row = $sql->getRow(); 73 if ( count($row) > 0 ) 74 $this->name = $row['name' ]; 75 else 76 $this->name = ''; 77 } 78 79 80 /** 81 * Read a group. 82 * @param $name string name of the group 83 * @return Group 84 * @throws \ObjectNotFoundException 85 */ 86 public static function loadWithName( $name ) 87 { 88 $sql = db()->sql( 'SELECT * FROM {{group}}'. 89 ' WHERE name={name}' ); 90 $sql->setString('name',$name ); 91 92 $row = $sql->getRow(); 93 if ( count($row) > 0 ) 94 { 95 $group = new Group( $row['id'] ); 96 $group->load(); 97 98 return $group; 99 } 100 else 101 { 102 throw new \ObjectNotFoundException( "Group does not exist: ".$name); 103 } 104 } 105 106 107 /** 108 * Save a group. 109 */ 110 public function save() 111 { 112 if ( empty($this->name) ) 113 $this->name = lang('GLOBAL_GROUP').' '.$this->groupid; 114 115 // Gruppe speichern 116 $sql = db()->sql( 'UPDATE {{group}} '. 117 'SET name = {name} '. 118 'WHERE id={groupid}' ); 119 $sql->setString( 'name' ,$this->name ); 120 $sql->setInt ('groupid',$this->groupid ); 121 122 // Datenbankabfrage ausfuehren 123 $sql->query(); 124 } 125 126 127 /** 128 * Rueckgabe aller Eigenschaften 129 * @return Array 130 */ 131 function getProperties() 132 { 133 return Array( 'name' =>$this->name, 134 'groupid'=>$this->groupid ); 135 } 136 137 138 // Gruppe hinzufuegen 139 function add( $name = '' ) 140 { 141 $db = db_connection(); 142 143 if ( $name != '' ) 144 $this->name = $name; 145 146 $sql = $db->sql('SELECT MAX(id) FROM {{group}}'); 147 $this->groupid = intval($sql->getOne())+1; 148 149 // Gruppe hinzuf?gen 150 $sql = $db->sql( 'INSERT INTO {{group}} '. 151 '(id,name) VALUES( {groupid},{name} )'); 152 $sql->setInt ('groupid',$this->groupid ); 153 $sql->setString('name' ,$this->name ); 154 155 // Datenbankbefehl ausfuehren 156 $sql->query(); 157 } 158 159 160 // Gruppe entfernen 161 function delete() 162 { 163 $db = db_connection(); 164 165 // Berechtigungen zu dieser Gruppe loeschen 166 $sql = $db->sql( 'DELETE FROM {{acl}} '. 167 'WHERE groupid={groupid}' ); 168 $sql->setInt ('groupid',$this->groupid ); 169 $sql->query(); 170 171 172 // Alle Gruppenzugehoerigkeiten zu dieser Gruppe loeschen 173 $sql = $db->sql( 'DELETE FROM {{usergroup}} '. 174 'WHERE groupid={groupid}' ); 175 $sql->setInt ('groupid',$this->groupid ); 176 $sql->query(); 177 178 // Gruppe loeschen 179 $sql = $db->sql( 'DELETE FROM {{group}} '. 180 'WHERE id={groupid}' ); 181 $sql->setInt ('groupid',$this->groupid ); 182 $sql->query(); 183 } 184 185 186 /** 187 * Get all users of this group. 188 * @return array id->name 189 */ 190 function getUsers() 191 { 192 $db = db_connection(); 193 194 $sql = $db->sql( 'SELECT {{user}}.id,{{user}}.name FROM {{user}} '. 195 'LEFT JOIN {{usergroup}} ON {{usergroup}}.userid={{user}}.id '. 196 'WHERE {{usergroup}}.groupid={groupid}' ); 197 $sql->setInt('groupid',$this->groupid ); 198 199 return $sql->getAssoc(); 200 } 201 202 203 // Benutzer ermitteln, die *nicht* Mitglied dieser Gruppe sind 204 function getOtherUsers() 205 { 206 $db = db_connection(); 207 208 $sql = $db->sql( 'SELECT {{user}}.id,{{user}}.name FROM {{user}}'. 209 ' LEFT JOIN {{usergroup}} ON {{usergroup}}.userid={{user}}.id AND {{usergroup}}.groupid={groupid}'. 210 ' WHERE {{usergroup}}.groupid IS NULL' ); 211 $sql->setInt('groupid' ,$this->groupid ); 212 213 return $sql->getAssoc(); 214 } 215 216 217 // Benutzer einer Gruppe hinzufuegen 218 function addUser( $userid ) 219 { 220 $db = db_connection(); 221 222 $sql = $db->sql('SELECT MAX(id) FROM {{usergroup}}'); 223 $usergroupid = intval($sql->getOne())+1; 224 225 $sql = $db->sql( 'INSERT INTO {{usergroup}} '. 226 ' (id,userid,groupid) '. 227 ' VALUES( {usergroupid},{userid},{groupid} )' ); 228 $sql->setInt('usergroupid',$usergroupid ); 229 $sql->setInt('userid' ,$userid ); 230 $sql->setInt('groupid' ,$this->groupid ); 231 232 $sql->query(); 233 234 } 235 236 237 // Benutzer aus Gruppe entfernen 238 function delUser( $userid ) 239 { 240 $db = db_connection(); 241 242 $sql = $db->sql( 'DELETE FROM {{usergroup}} '. 243 ' WHERE userid={userid} AND groupid={groupid}' ); 244 $sql->setInt ('userid' ,$userid ); 245 $sql->setInt ('groupid' ,$this->groupid ); 246 247 $sql->query(); 248 } 249 250 251 // Alle Berechtigungen ermitteln 252 function getRights() 253 { 254 global $SESS,$conf_php; 255 $db = db_connection(); 256 $var = array(); 257 258 // Alle Projekte lesen 259 $sql = $db->sql( 'SELECT id,name FROM {{project}}' ); 260 $projects = $sql->getAssoc(); 261 262 foreach( $projects as $projectid=>$projectname ) 263 { 264 $var[$projectid] = array(); 265 $var[$projectid]['name'] = $projectname; 266 $var[$projectid]['folders'] = array(); 267 $var[$projectid]['rights'] = array(); 268 269 $sql = $db->sql( 'SELECT {{acl}}.* FROM {{acl}}'. 270 ' LEFT JOIN {{folder}} ON {{acl}}.folderid = {{folder}}.id'. 271 ' WHERE {{folder}}.projectid={projectid}'. 272 ' AND {{acl}}.groupid={groupid}' ); 273 $sql->setInt('projectid',$projectid ); 274 $sql->setInt('groupid' ,$this->groupid ); 275 276 $acls = $sql->getAll(); 277 278 foreach( $acls as $acl ) 279 { 280 $aclid = $acl['id']; 281 $folder = new Folder( $acl['folderid'] ); 282 $folder->load(); 283 $var[$projectid]['rights'][$aclid] = $acl; 284 $var[$projectid]['rights'][$aclid]['foldername'] = implode(' » ',$folder->parentfolder( false,true )); 285 $var[$projectid]['rights'][$aclid]['delete_url'] = 'user.'.$conf_php.'?useraction=delright&aclid='.$aclid; 286 } 287 288 $sql = $db->sql( 'SELECT id FROM {{folder}}'. 289 ' WHERE projectid={projectid}' ); 290 $sql->setInt('projectid',$projectid); 291 $folders = $sql->getCol(); 292 293 $var[$projectid]['folders'] = array(); 294 295 foreach( $folders as $folderid ) 296 { 297 $folder = new Folder( $folderid ); 298 $folder->load(); 299 $var[$projectid]['folders'][$folderid] = implode(' » ',$folder->parentfolder( false,true )); 300 } 301 302 asort( $var[$projectid]['folders'] ); 303 } 304 305 return $var; 306 } 307 308 309 // Berechtigung der Gruppe hinzufuegen 310 function addRight( $data ) 311 { 312 global $REQ,$SESS; 313 $db = db_connection(); 314 315 $sql = $db->sql('INSERT INTO {{acl}} '. 316 '(userid,groupid,folderid,`read`,`write`,`create`,`delete`,publish) '. 317 'VALUES({userid},{groupid},{folderid},{read},{write},{create},{delete},{publish})'); 318 319 $sql->setNull('userid'); 320 $sql->setInt ('groupid',$this->groupid); 321 $sql->setInt ('projectid',$SESS['projectid']); 322 $sql->setInt ('folderid',$data['folderid']); 323 324 $sql->setInt ('read' ,$data['read' ]); 325 $sql->setInt ('write' ,$data['write' ]); 326 $sql->setInt ('create' ,$data['create' ]); 327 $sql->setInt ('delete' ,$data['delete' ]); 328 $sql->setInt ('publish',$data['publish']); 329 330 // Datenbankabfrage ausf?hren 331 $sql->query(); 332 } 333 334 335 336 /** 337 * Ermitteln aller Berechtigungen dieser Gruppe.<br> 338 * Diese Daten werden auf der Gruppenseite in der Administration angezeigt. 339 * 340 * @return unknown 341 */ 342 function getAllAcls() 343 { 344 $db = db_connection(); 345 $sql = $db->sql( 'SELECT {{acl}}.*,{{object}}.projectid,{{language}}.name AS languagename FROM {{acl}}'. 346 ' LEFT JOIN {{object}} '. 347 ' ON {{object}}.id={{acl}}.objectid '. 348 ' LEFT JOIN {{language}} '. 349 ' ON {{language}}.id={{acl}}.languageid '. 350 ' WHERE ( {{acl}}.groupid={groupid} OR ({{acl}}.userid IS NULL AND {{acl}}.groupid IS NULL) )'. 351 ' ORDER BY {{object}}.projectid,{{acl}}.languageid' ); 352 $sql->setInt ( 'groupid' ,$this->groupid ); 353 354 $aclList = array(); 355 356 foreach($sql->getAll() as $row ) 357 { 358 $acl = new Acl(); 359 $acl->setDatabaseRow( $row ); 360 $acl->projectid = $row['projectid' ]; 361 if ( intval($acl->languageid) == 0 ) 362 $acl->languagename = lang('GLOBAL_ALL_LANGUAGES'); 363 else 364 $acl->languagename = $row['languagename']; 365 $aclList[] = $acl; 366 } 367 368 return $aclList; 369 } 370 371 372 373 // Berechtigung entfernen 374 function delRight( $aclid ) 375 { 376 $sql = $db->sql('DELETE FROM {{acl}} WHERE id={aclid}'); 377 $sql->setInt( 'aclid',$aclid ); 378 379 // Datenbankabfrage ausf?hren 380 $sql->query( $sql ); 381 } 382 383 public function getName() 384 { 385 return $this->name; 386 } 387 388 } 389 390 ?>