commit 4fede27fe7aa35cf2c844a41f6af71001b2cc6ce
parent 918fb0475044f949cf8cd0883f4d11ad22d21b8b
Author: dankert <devnull@localhost>
Date: Sat, 20 Mar 2004 16:00:19 +0100
*** empty log message ***
Diffstat:
1 file changed, 413 insertions(+), 17 deletions(-)
diff --git a/functions/user.inc.php b/functions/user.inc.php
@@ -21,55 +21,451 @@
class User
{
- var $userid;
+ var $userid = 0;
+ var $error = '';
var $name = '';
var $fullname = '';
+ var $ldap_dn;
+ var $tel;
+ var $mail;
+ var $desc;
+ var $style;
+ var $isAdmin;
+
+ // Konstruktor
function User( $userid='' )
{
if ( is_numeric($userid) )
$this->userid = $userid;
}
-
-
+
+ // Lesen Benutzer aus der Datenbank
+ function listAll()
+ {
+ global $conf;
+ $db = db_connection();
+
+ $sql = new Sql( 'SELECT id,name FROM {t_user}' );
+
+ return $db->getAssoc( $sql->query );
+ }
+
+
+ function setCurrent()
+ {
+ global $SESS;
+
+ $SESS['user'] = array();
+ $SESS['user']['id'] = $this->userid;
+ $SESS['user']['name'] = $this->name;
+ $SESS['user']['fullname'] = $this->fullname;
+ $SESS['user']['mail'] = $this->mail;
+ $SESS['user']['is_admin'] = $this->isAdmin;
+ $SESS['user']['style'] = $this->style;
+ }
+
// Lesen Benutzer aus der Datenbank
function load()
{
+ global $conf;
$db = db_connection();
$sql = new Sql( 'SELECT * FROM {t_user}'.
' WHERE id={userid}' );
$sql->setInt( 'userid',$this->userid );
$row = $db->getRow( $sql->query );
+
+ if ( count($row) > 1 )
+ {
+ $this->name = $row['name' ];
+ $this->style = $row['style' ];
+ $this->isAdmin = $row['is_admin'];
+ $this->ldap_dn = $row['ldap_dn' ];
+ $this->fullname = $row['fullname'];
+ $this->tel = $row['tel' ];
+ $this->mail = $row['mail' ];
+ $this->desc = $row['desc' ];
+
+ if ( $this->fullname == '' )
+ $this->fullname = $this->name;
+
+ if ( $this->style == '' )
+ $this->style = 'default';
+ }
+ else
+ {
+ $this->name = lang('UNKNOWN');
+ $this->style = 'default';
+ $this->isAdmin = false;
+ $this->ldap_dn = '';
+ $this->fullname = lang('UNKNOWN');
+ $this->tel = '';
+ $this->mail = '';
+ $this->desc = '';
+ }
- $this->fullname = $row['fullname'];
- $this->name = $row['name' ];
+ /* vorerst unbenutzt:
+ if ( $row['use_ldap'] == '1' )
+ {
+ // Daten aus LDAP-Verzeichnisdienst lesen
+
+ // Verbindung zum LDAP-Server herstellen
+ $ldap_conn = @ldap_connect( $conf['ldap']['host'],$conf['ldap']['port'] );
+
+ if ( !$ldap_conn )
+ {
+ logger( 'INFO','cannot connect to LDAP server '.$conf['ldap']['host'].' '.$conf['ldap']['port'] );
+ $this->error = 'cannot connect to LDAP server';
+ return false;
+ }
+
+ // Anonymes LDAP-Login versuchen
+ $ldap_bind = @ldap_bind( $ldap_conn );
+
+ if ( $ldap_bind )
+ {
+ // Login erfolgreich
+ $sr = ldap_read( $ldap_conn,$row['ldap_dn'],'(objectclass=*)' );
+
+ $daten = ldap_get_entries( $ldap_conn,$sr );
+
+ $this->fullname = $daten[0]['givenName'][0].' '.$daten[0]['sn'][0];
+ $this->tel = $daten[0]['telephoneNumber'][0];
+ $this->mail = $daten[0]['mail'][0];
+ $this->desc = $daten[0]['description'][0];
+ }
+
+ }
+ */
}
+ // Lesen Benutzername
+ function getUserName( $userid )
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'SELECT name FROM {t_user}'.
+ ' WHERE id={userid}' );
+ $sql->setInt( 'userid',$userid );
+
+ $name = $db->getOne( $sql->query );
+
+ if ( $name == '' )
+ return lang('UNKNOWN');
+ else return $name;
+ }
+
+
+ // Speichern Benutzer in der Datenbank
+ function save()
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'UPDATE {t_user}'.
+ ' SET name={name},'.
+ ' fullname={fullname},'.
+ ' ldap_dn ={ldap_dn} ,'.
+ ' tel ={tel} ,'.
+ ' `desc` ={desc} ,'.
+ ' mail ={mail} ,'.
+ ' style ={style} ,'.
+ ' is_admin={isAdmin} '.
+ ' WHERE id={userid}' );
+ $sql->setInt ( 'userid' ,$this->userid );
+ $sql->setString( 'fullname',$this->fullname);
+ $sql->setString( 'name' ,$this->name );
+ $sql->setString( 'ldap_dn' ,$this->ldap_dn );
+ $sql->setString( 'tel' ,$this->tel );
+ $sql->setString( 'desc' ,$this->desc );
+ $sql->setString( 'mail' ,$this->mail );
+ $sql->setString( 'url' ,$this->url );
+ $sql->setString( 'style' ,$this->style );
+ $sql->setString( 'isAdmin' ,$this->isAdmin );
+ // Datenbankabfrage ausfuehren
+ $db->query( $sql->query );
+ }
+
- function add()
+ // Benutzer hinzufuegen
+ function add( $name = '' )
{
+ if ( $name != '' )
+ $this->name = $name;
+
$db = db_connection();
$sql = new Sql('INSERT INTO {t_user}'.
- ' (folderid,name,filename,extension,size,create_date,create_userid,lastchange_date,lastchange_userid,value)'.
- ' VALUES( {folderid},{name},{filename},{extension},{filesize},{time},{userid},{time},{userid},{value} )' );
- $sql->setInt ('folderid' ,$this->folderid);
- $sql->setString('filename' ,$this->filename);
- $sql->setString('name' ,$this->name);
- $sql->setString('extension',$this->extension);
- $sql->setInt ('filesize' ,strlen($this->value) );
- $sql->setInt ('time' ,$this->create_date );
- $sql->setInt ('userid' ,$this->create_userid );
- $sql->setString('value' ,$this->value );
+ ' (name)'.
+ ' VALUES( {name} )' );
+ $sql->setString('name',$this->name);
+
+ // Datenbankbefehl ausfuehren
+ $db->query( $sql->query );
+ }
+
+
+ // Benutzer entfernen
+ function delete()
+ {
+ // Alle Archivdaten in Dateien mit diesem Benutzer entfernen
+ $sql = new Sql( 'UPDATE {t_object} '.
+ 'SET create_userid=null '.
+ 'WHERE create_userid={userid}' );
+ $sql->setInt ('userid',$this->userid );
+ $db->query( $sql->query );
+
+ // Alle Berechtigungen dieses Benutzers löschen
+ $sql = new Sql( 'DELETE FROM {t_acl} '.
+ 'WHERE userid={userid}' );
+ $sql->setInt ('userid',$this->userid );
+ $db->query( $sql->query );
+
+ // Alle Gruppenzugehörigkeiten dieses Benutzers löschen
+ $sql = new Sql( 'DELETE FROM {t_usergroup} '.
+ 'WHERE userid={userid}' );
+ $sql->setInt ('userid',$this->userid );
+ $db->query( $sql->query );
+ // Benutzer löschen
+ $sql = new Sql( 'DELETE FROM {t_user} '.
+ 'WHERE id={userid}' );
+ $sql->setInt ('userid',$this->userid );
$db->query( $sql->query );
- }
+ }
+
+
+ // Ueberpruefen des Kennwortes
+ // entweder ueber Datenbank oder ueber LDAP-Verzeichnisdienst
+ function checkPassword( $password )
+ {
+ global $conf;
+ $this->error = '';
+
+ $db = db_connection();
+
+ // Lesen des Benutzers aus der DB-Tabelle
+ $sql = new Sql( 'SELECT * FROM {t_user} WHERE name={name}' );
+ $sql->setString('name',$this->name);
+
+ $res_user = $db->query( $sql->query );
+
+ if ( $res_user->numRows() == 1 )
+ {
+ $row_user = $res_user->fetchRow();
+ $this->userid = $row_user['id'];
+
+ // Falls LDAP-dn vorhanden wird Benutzer per LDAP authentifiziert
+ if ( $row_user['ldap_dn'] != '' )
+ {
+ // Verbindung zum LDAP-Server herstellen
+ $ldap_conn = @ldap_connect( $conf['ldap']['host'],$conf['ldap']['port'] );
+
+ if ( !$ldap_conn )
+ {
+ logger( 'INFO','cannot connect to LDAP server '.$conf['ldap']['host'].' '.$conf['ldap']['port'] );
+ $this->error = 'cannot connect to LDAP server';
+ return false;
+ }
+
+ // LDAP-Login versuchen
+ if ( @ldap_bind( $ldap_conn,$row_user['ldap_dn'],$password) )
+ {
+ // Login erfolgreich
+ $SESS['user'] = $row_user;
+ return true;
+ }
+ }
+ else
+ {
+// echo "aha";
+// echo $row_user['password'].':'.$password':'.md5( $password );
+ // Prüfen ob Kennwort mit Datenbank übereinstimmt
+ if ( $row_user['password'] == md5( $password ) )
+ {
+ // Login erfolgreich
+ return true;
+ }
+ }
+ }
+
+ // Benutzername nicht in Datenbank oder Kennwort falsch
+ return false;
+ }
+
+
+ // Neues Kennwort fuer diesen Benutzer setzen
+ function setPassword( $password )
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'UPDATE {t_user} SET password={password}'.
+ 'WHERE id={userid}' );
+ $sql->setString('password',md5($password) );
+ $sql->setInt ('userid' ,$this->userid );
+
+ $db->query( $sql->query );
+ }
+
+
+ // Gruppen ermitteln, in denen der Benutzer Mitglied ist
+ function getGroups()
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'SELECT {t_group}.id,{t_group}.name FROM {t_group} '.
+ 'LEFT JOIN {t_usergroup} ON {t_usergroup}.groupid={t_group}.id '.
+ 'WHERE {t_usergroup}.userid={userid}' );
+ $sql->setInt('userid',$this->userid );
+
+ return $db->getAssoc( $sql->query );
+ }
+
+
+ // Gruppen ermitteln, in denen der Benutzer *nicht* Mitglied ist
+ function getOtherGroups()
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'SELECT {t_group}.id,{t_group}.name FROM {t_group}'.
+ ' LEFT JOIN {t_usergroup} ON {t_usergroup}.groupid={t_group}.id AND {t_usergroup}.userid={userid}'.
+ ' WHERE {t_usergroup}.userid IS NULL' );
+ $sql->setInt('userid' ,$this->userid );
+
+ return $db->getAssoc( $sql->query );
+ }
+
+
+ // Benutzer einer Gruppe hinzufuegen
+ function addGroup( $groupid )
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'INSERT INTO {t_usergroup} '.
+ ' (userid,groupid) '.
+ ' VALUES( {userid},{groupid} )' );
+ $sql->setInt ('userid' ,$this->userid );
+ $sql->setInt ('groupid' ,$groupid );
+
+ $db->query( $sql->query );
+
+ }
+
+
+ // Benutzer aus Gruppe entfernen
+ function delGroup( $groupid )
+ {
+ $db = db_connection();
+
+ $sql = new Sql( 'DELETE FROM {t_usergroup} '.
+ ' WHERE userid={userid} AND groupid={groupid}' );
+ $sql->setInt ('userid' ,$this->userid );
+ $sql->setInt ('groupid' ,$groupid );
+
+ $db->query( $sql->query );
+ }
+
+
+ // Alle Berechtigungen ermitteln
+ function getRights()
+ {
+ global $SESS,$conf_php;
+ $db = db_connection();
+ $var = array();
+
+ // Alle Projekte lesen
+ $sql = new Sql( 'SELECT id,name FROM {t_project}' );
+ $projects = $db->getAssoc( $sql->query );
+
+ foreach( $projects as $projectid=>$projectname )
+ {
+ $var[$projectid] = array();
+ $var[$projectid]['name'] = $projectname;
+ $var[$projectid]['folders'] = array();
+ $var[$projectid]['rights'] = array();
+
+ $sql = new Sql( 'SELECT {t_acl}.* FROM {t_acl}'.
+ ' LEFT JOIN {t_folder} ON {t_acl}.folderid = {t_folder}.id'.
+ ' WHERE {t_folder}.projectid={projectid}'.
+ ' AND {t_acl}.userid={userid}' );
+ $sql->setInt('projectid',$projectid );
+ $sql->setInt('userid' ,$this->userid );
+
+ $acls = $db->getAll( $sql->query );
+
+ foreach( $acls as $acl )
+ {
+ $aclid = $acl['id'];
+ $folder = new Folder( $acl['folderid'] );
+ $folder->load();
+ $var[$projectid]['rights'][$aclid] = $acl;
+ $var[$projectid]['rights'][$aclid]['foldername'] = implode(' » ',$folder->parentfolder( false,true ));
+ $var[$projectid]['rights'][$aclid]['delete_url'] = 'user.'.$conf_php.'?useraction=delright&aclid='.$aclid;
+ }
+
+ $sql = new Sql( 'SELECT id FROM {t_folder}'.
+ ' WHERE projectid={projectid}' );
+ $sql->setInt('projectid',$projectid);
+ $folders = $db->getCol( $sql->query );
+
+ $var[$projectid]['folders'] = array();
+
+ foreach( $folders as $folderid )
+ {
+ $folder = new Folder( $folderid );
+ $folder->load();
+ $var[$projectid]['folders'][$folderid] = implode(' » ',$folder->parentfolder( false,true ));
+ }
+
+ asort( $var[$projectid]['folders'] );
+ }
+
+ return $var;
+ }
+
+
+ // Berechtigung dem Benutzer hinzufuegen
+ function addRight( $data )
+ {
+ global $REQ,$SESS;
+ $db = db_connection();
+
+ $sql = new SQL('INSERT INTO {t_acl} '.
+ '(userid,groupid,folderid,`read`,`write`,`create`,`delete`,publish) '.
+ 'VALUES({userid},{groupid},{folderid},{read},{write},{create},{delete},{publish})');
+
+ $sql->setInt ('userid',$this->userid);
+ $sql->setNull('groupid');
+ $sql->setInt ('projectid',$SESS['projectid']);
+ $sql->setInt ('folderid',$data['folderid']);
+
+ $sql->setInt ('read' ,$data['read' ]);
+ $sql->setInt ('write' ,$data['write' ]);
+ $sql->setInt ('create' ,$data['create' ]);
+ $sql->setInt ('delete' ,$data['delete' ]);
+ $sql->setInt ('publish',$data['publish']);
+
+ // Datenbankabfrage ausführen
+ $db->query( $sql->query );
+ }
+
+
+ // Berechtigung entfernen
+ function delRight( $aclid )
+ {
+ $db = db_connection();
+
+ $sql = new SQL('DELETE FROM {t_acl} WHERE id={aclid}');
+ $sql->setInt( 'aclid',$aclid );
+
+ // Datenbankabfrage ausführen
+ $db->query( $sql->query );
+ }
}
?>
\ No newline at end of file