Group.class.php

gehe zur Dokumentation dieser Datei
00001 <?php
00002 // ---------------------------------------------------------------------------
00003 // $Id$
00004 // ---------------------------------------------------------------------------
00005 // OpenRat Content Management System
00006 // Copyright (C) 2002-2004 Jan Dankert, jandankert@jandankert.de
00007 //
00008 // This program is free software; you can redistribute it and/or
00009 // modify it under the terms of the GNU General Public License
00010 // as published by the Free Software Foundation; either version 2
00011 // of the License, or (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the Free Software
00020 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00021 // ---------------------------------------------------------------------------
00022 // $Log$
00023 // Revision 1.7  2009-03-01 01:39:58  dankert
00024 // Neue Methode "getAllAcls()" zum Lesen der Berechtigungen.
00025 //
00026 // Revision 1.6  2007-11-08 22:21:59  dankert
00027 // Abfangen, wenn Gruppe nicht in Datenbank gefunden wird.
00028 //
00029 // Revision 1.5  2006/01/23 22:59:43  dankert
00030 // Leere Gruppennamen ?bersteuern
00031 //
00032 // Revision 1.4  2004/05/19 21:11:35  dankert
00033 // subaction verwenden
00034 //
00035 // Revision 1.3  2004/05/19 21:11:04  dankert
00036 // korrektur bei delete()
00037 //
00038 // Revision 1.2  2004/05/02 14:41:31  dankert
00039 // Einf?gen package-name (@package)
00040 //
00041 // ---------------------------------------------------------------------------
00042 
00043 
00051 class Group
00052 {
00053      var $groupid   = 0;
00054      var $error    = '';
00055 
00056      var $name     = '';
00057      var $fullname = '';
00058      var $ldap_dn;
00059      var $tel;
00060      var $mail;
00061      var $desc;
00062      var $style;
00063      var $isAdmin;
00064 
00065 
00066      // Konstruktor
00067      function Group( $groupid='' )
00068      {
00069           if   ( is_numeric($groupid) )
00070                $this->groupid = $groupid;
00071      }
00072 
00073 
00074      // Lesen aller Gruppen aus der Datenbank
00075      function getAll()
00076      {
00077           global $conf;
00078           $db = db_connection();
00079 
00080           $sql = new Sql( 'SELECT id,name FROM {t_group}' );
00081 
00082           return $db->getAssoc( $sql->query );
00083      }
00084 
00085 
00086      // Lesen Benutzer aus der Datenbank
00087      function load()
00088      {
00089           $db = db_connection();
00090 
00091           $sql = new Sql( 'SELECT * FROM {t_group}'.
00092                           ' WHERE id={groupid}' );
00093           $sql->setInt( 'groupid',$this->groupid );
00094 
00095           $row = $db->getRow( $sql->query );
00096           if   ( count($row) > 0 )
00097                $this->name = $row['name'    ];
00098           else
00099                $this->name = '';
00100      }
00101 
00102 
00103      // Speichern Benutzer in der Datenbank
00104      function save()
00105      {
00106           if   ( empty($this->name) )
00107                $this->name = lang('GLOBAL_GROUP').' '.$this->groupid;
00108                
00109           $db = db_connection();
00110 
00111           // Gruppe speichern      
00112           $sql = new Sql( 'UPDATE {t_group} '.
00113                           'SET name = {name} '.
00114                           'WHERE id={groupid}' );
00115           $sql->setString( 'name'  ,$this->name    );
00116           $sql->setInt   ('groupid',$this->groupid );
00117 
00118           // Datenbankabfrage ausfuehren
00119           $db->query( $sql->query );
00120      }
00121 
00122 
00127      function getProperties()
00128      {
00129           return Array( 'name'   =>$this->name,
00130                         'groupid'=>$this->groupid );
00131      }
00132 
00133 
00134      // Gruppe hinzufuegen
00135      function add( $name = '' )
00136      {
00137           $db = db_connection();
00138 
00139           if   ( $name != '' )
00140                $this->name = $name;
00141 
00142           $sql = new Sql('SELECT MAX(id) FROM {t_group}');
00143           $this->groupid = intval($db->getOne($sql->query))+1;
00144           
00145           // Gruppe hinzuf?gen
00146           $sql = new Sql( 'INSERT INTO {t_group} '.
00147                           '(id,name) VALUES( {groupid},{name} )');
00148           $sql->setInt   ('groupid',$this->groupid );
00149           $sql->setString('name'   ,$this->name    );
00150 
00151           // Datenbankbefehl ausfuehren
00152           $db->query( $sql->query );
00153      }
00154 
00155 
00156      // Gruppe entfernen
00157      function delete()
00158      {
00159           $db = db_connection();
00160 
00161           // Berechtigungen zu dieser Gruppe loeschen
00162           $sql = new Sql( 'DELETE FROM {t_acl} '.
00163                           'WHERE groupid={groupid}' );
00164           $sql->setInt   ('groupid',$this->groupid );
00165           $db->query( $sql->query );
00166 
00167 
00168           // Alle Gruppenzugehoerigkeiten zu dieser Gruppe loeschen
00169           $sql = new Sql( 'DELETE FROM {t_usergroup} '.
00170                           'WHERE groupid={groupid}' );
00171           $sql->setInt   ('groupid',$this->groupid );
00172           $res = $db->query($sql->query);
00173 
00174           // Gruppe loeschen
00175           $sql = new Sql( 'DELETE FROM {t_group} '.
00176                           'WHERE id={groupid}' );
00177           $sql->setInt   ('groupid',$this->groupid );
00178           $res = $db->query($sql->query);
00179      }
00180 
00181 
00182      // Benutzer ermitteln, die Mitglied dieser Gruppe sind
00183      function getUsers()
00184      {
00185           $db = db_connection();
00186 
00187           $sql = new Sql( 'SELECT {t_user}.id,{t_user}.name FROM {t_user} '.
00188                           'LEFT JOIN {t_usergroup} ON {t_usergroup}.userid={t_user}.id '.
00189                           'WHERE {t_usergroup}.groupid={groupid}' );
00190           $sql->setInt('groupid',$this->groupid );
00191 
00192           return $db->getAssoc( $sql->query );
00193      }
00194      
00195 
00196      // Benutzer ermitteln, die *nicht* Mitglied dieser Gruppe sind
00197      function getOtherUsers()
00198      {
00199           $db = db_connection();
00200 
00201           $sql = new Sql( 'SELECT {t_user}.id,{t_user}.name FROM {t_user}'.
00202                           '   LEFT JOIN {t_usergroup} ON {t_usergroup}.userid={t_user}.id AND {t_usergroup}.groupid={groupid}'.
00203                           '   WHERE {t_usergroup}.groupid IS NULL' );
00204           $sql->setInt('groupid'  ,$this->groupid );
00205 
00206           return $db->getAssoc( $sql->query );
00207      }
00208 
00209 
00210      // Benutzer einer Gruppe hinzufuegen
00211      function addUser( $userid )
00212      {
00213           $db = db_connection();
00214 
00215           $sql = new Sql('SELECT MAX(id) FROM {t_usergroup}');
00216           $usergroupid = intval($db->getOne($sql->query))+1;
00217 
00218           $sql = new Sql( 'INSERT INTO {t_usergroup} '.
00219                           '       (id,userid,groupid) '.
00220                           '       VALUES( {usergroupid},{userid},{groupid} )' );
00221           $sql->setInt('usergroupid',$usergroupid  );
00222           $sql->setInt('userid'     ,$userid        );
00223           $sql->setInt('groupid'    ,$this->groupid );
00224 
00225           $db->query( $sql->query );
00226      
00227      }
00228 
00229 
00230      // Benutzer aus Gruppe entfernen
00231      function delUser( $userid )
00232      {
00233           $db = db_connection();
00234 
00235           $sql = new Sql( 'DELETE FROM {t_usergroup} '.
00236                           '  WHERE userid={userid} AND groupid={groupid}' );
00237           $sql->setInt   ('userid'  ,$userid        );
00238           $sql->setInt   ('groupid' ,$this->groupid );
00239 
00240           $db->query( $sql->query );
00241      }
00242 
00243 
00244      // Alle Berechtigungen ermitteln
00245      function getRights()
00246      {
00247           global $SESS,$conf_php;
00248           $db = db_connection();
00249           $var = array();
00250 
00251           // Alle Projekte lesen
00252           $sql = new Sql( 'SELECT id,name FROM {t_project}' );
00253           $projects = $db->getAssoc( $sql->query );    
00254 
00255           foreach( $projects as $projectid=>$projectname )
00256           {
00257                $var[$projectid] = array();
00258                $var[$projectid]['name'] = $projectname;
00259                $var[$projectid]['folders'] = array();
00260                $var[$projectid]['rights'] = array();
00261 
00262                $sql = new Sql( 'SELECT {t_acl}.* FROM {t_acl}'.
00263                                '  LEFT JOIN {t_folder} ON {t_acl}.folderid = {t_folder}.id'.
00264                                '  WHERE {t_folder}.projectid={projectid}'.
00265                                '    AND {t_acl}.groupid={groupid}' );
00266                $sql->setInt('projectid',$projectid    );
00267                $sql->setInt('groupid'   ,$this->groupid );
00268                
00269                $acls = $db->getAll( $sql->query );
00270 
00271                foreach( $acls as $acl )
00272                {
00273                     $aclid = $acl['id'];
00274                     $folder = new Folder( $acl['folderid'] );
00275                     $folder->load();
00276                     $var[$projectid]['rights'][$aclid] = $acl;
00277                     $var[$projectid]['rights'][$aclid]['foldername'] = implode(' &raquo; ',$folder->parentfolder( false,true ));
00278                     $var[$projectid]['rights'][$aclid]['delete_url'] = 'user.'.$conf_php.'?useraction=delright&aclid='.$aclid;
00279                }
00280                
00281                $sql = new Sql( 'SELECT id FROM {t_folder}'.
00282                                '  WHERE projectid={projectid}' );
00283                $sql->setInt('projectid',$projectid);
00284                $folders = $db->getCol( $sql->query );
00285 
00286                $var[$projectid]['folders'] = array();
00287 
00288                foreach( $folders as $folderid )
00289                {
00290                     $folder = new Folder( $folderid );
00291                     $folder->load();
00292                     $var[$projectid]['folders'][$folderid] = implode(' &raquo; ',$folder->parentfolder( false,true ));
00293                }
00294 
00295                asort( $var[$projectid]['folders'] );
00296           }
00297           
00298           return $var;
00299      }
00300      
00301      
00302      // Berechtigung der Gruppe hinzufuegen
00303      function addRight( $data )
00304      {
00305           global $REQ,$SESS;
00306           $db = db_connection();
00307           
00308           $sql = new SQL('INSERT INTO {t_acl} '.
00309                          '(userid,groupid,folderid,`read`,`write`,`create`,`delete`,publish) '.
00310                          'VALUES({userid},{groupid},{folderid},{read},{write},{create},{delete},{publish})');
00311                          
00312           $sql->setNull('userid');
00313           $sql->setInt ('groupid',$this->groupid);
00314           $sql->setInt ('projectid',$SESS['projectid']);
00315           $sql->setInt ('folderid',$data['folderid']);
00316 
00317           $sql->setInt ('read'   ,$data['read'   ]);
00318           $sql->setInt ('write'  ,$data['write'  ]);
00319           $sql->setInt ('create' ,$data['create' ]);
00320           $sql->setInt ('delete' ,$data['delete' ]);
00321           $sql->setInt ('publish',$data['publish']);
00322      
00323           // Datenbankabfrage ausf?hren
00324           $db->query( $sql->query );
00325      }
00326 
00327      
00328      
00335      function getAllAcls()
00336      {
00337           $db = db_connection();
00338           $sql = new Sql( 'SELECT {t_acl}.*,{t_object}.projectid,{t_language}.name AS languagename FROM {t_acl}'.
00339                           '  LEFT JOIN {t_object} '.
00340                           '         ON {t_object}.id={t_acl}.objectid '.
00341                           '  LEFT JOIN {t_language} '.
00342                           '         ON {t_language}.id={t_acl}.languageid '.
00343                           '  WHERE ( {t_acl}.groupid={groupid} OR ({t_acl}.userid IS NULL AND {t_acl}.groupid IS NULL) )'.
00344                           '  ORDER BY {t_object}.projectid,{t_acl}.languageid' );
00345           $sql->setInt  ( 'groupid'    ,$this->groupid );
00346 
00347           $aclList = array();
00348 
00349           foreach( $db->getAll( $sql->query ) as $row )
00350           {
00351                $acl = new Acl();
00352                $acl->setDatabaseRow( $row );
00353                $acl->projectid    = $row['projectid'   ];
00354                if   ( intval($acl->languageid) == 0 )
00355                     $acl->languagename = lang('GLOBAL_ALL_LANGUAGES');
00356                else
00357                     $acl->languagename = $row['languagename'];
00358                $aclList[] = $acl;
00359           }
00360           
00361           return $aclList;
00362      }
00363      
00364 
00365 
00366      // Berechtigung entfernen
00367      function delRight( $aclid )
00368      {
00369           $sql = new SQL('DELETE FROM {t_acl} WHERE id={aclid}');
00370           $sql->setInt( 'aclid',$aclid );
00371      
00372           // Datenbankabfrage ausf?hren
00373           $db->query( $sql->query );
00374      }
00375 }
00376 
00377 ?>

Erzeugt am Thu May 14 00:55:48 2009 für OpenRat von  doxygen 1.5.8