openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

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(' &raquo; ',$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(' &raquo; ',$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 ?>