commit 5ff07ce79210bf8e034286fe733d426526e34a88
parent 87da6563266a0392a4d0bc2e46759d6949d4222c
Author: dankert <devnull@localhost>
Date: Thu, 19 Mar 2009 11:05:05 +0100
Bugfix bei Ermitteln der zur Verfügung stehenden Projekte: Nur die Root-Objekte der Projekte berücksichtigen.
Diffstat:
1 file changed, 42 insertions(+), 32 deletions(-)
diff --git a/objectClasses/User.class.php b/objectClasses/User.class.php
@@ -20,6 +20,9 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// ---------------------------------------------------------------------------
// $Log$
+// Revision 1.32 2009-03-19 10:05:05 dankert
+// Bugfix bei Ermitteln der zur Verfügung stehenden Projekte: Nur die Root-Objekte der Projekte berücksichtigen.
+//
// Revision 1.31 2009-03-19 04:29:39 dankert
// Bei LDAP-Login Gruppenzugehörigkeiten synchronisieren.
//
@@ -235,6 +238,7 @@ class User
/**
* Lesen aller Projekte, fuer die der Benutzer berechtigt ist.
*
+ * @return Array [Projekt-Id] = Projekt-Name
*/
function getReadableProjects()
{
@@ -242,51 +246,48 @@ class User
if ( $this->isAdmin )
{
+ // Administratoren haben Rechte auf alle Projekte.
return Project::getAllProjects();
}
else
{
- $sql = new Sql( 'SELECT {t_project}.id,{t_project}.name'.
- ' FROM {t_acl}'.
- ' LEFT JOIN {t_object} ON ({t_object}.id ={t_acl}.objectid AND {t_object}.parentid IS NULL) '.
- ' LEFT JOIN {t_project} ON {t_project}.id={t_object}.projectid '.
- ' WHERE userid={userid} OR'.
- ' '.$this->getGroupClause().' OR '.
- ' ({t_acl}.userid IS NULL AND {t_acl}.groupid IS NULL) '.
- ' ORDER BY {t_project}.name' );
- $sql->setInt ( 'userid',$this->userid );
+ $groupClause = $this->getGroupClause();
+ $sql = new Sql(<<<SQL
+SELECT DISTINCT {t_project}.id,{t_project}.name
+ FROM {t_object}
+ LEFT JOIN {t_acl} ON {t_object}.id = {t_acl}.objectid
+ LEFT JOIN {t_project} ON {t_project}.id = {t_object}.projectid
+ WHERE {t_object}.parentid IS NULL AND
+ {t_acl}.id IS NOT NULL AND
+ ( {t_acl}.userid={userid} OR
+ $groupClause OR
+ ({t_acl}.userid IS NULL AND {t_acl}.groupid IS NULL))
+ ORDER BY {t_project}.name
+SQL
+);
+ $sql->setInt ( 'userid',$this->userid );
return $db->getAssoc( $sql->query );
}
+
}
- // Prueft, ob der Benutzer fuer ein Projekt berechtigt ist
+ /**
+ * Ermittelt alls Projekte, fuer die der Benutzer berechtigt ist.
+ * @return Array [0..n] = Projekt-Id
+ */
function getReadableProjectIds()
{
- $db = db_connection();
-
- if ( $this->isAdmin )
- {
- return Project::getAllProjectIds();
- }
- else
- {
- $sql = new Sql( 'SELECT DISTINCT {t_object}.projectid'.
- ' FROM {t_acl}'.
- ' LEFT JOIN {t_object} ON ({t_object}.id={t_acl}.objectid AND {t_object}.parentid IS NULL) '.
- ' WHERE userid={userid} OR'.
- ' '.$this->getGroupClause().' OR '.
- ' ({t_acl}.userid IS NULL AND {t_acl}.groupid IS NULL) '.
- ' ORDER BY {t_project}.name' );
- $sql->setInt ( 'userid',$this->userid );
-
- return $db->getCol( $sql->query );
- }
+ return array_keys( $this->getReadableProjects() );
}
+ /**
+ * Lädt die Liste alle Projekte, fuer die der Benutzer berechtigt ist und
+ * speichert diese in diesem Benutzerobjekt.
+ */
function loadProjects()
{
$this->projects = $this->getReadableProjects();
@@ -294,7 +295,9 @@ class User
- // Lesen Benutzer aus der Datenbank
+ /**
+ * Lesen Benutzer aus der Datenbank.
+ */
function load()
{
global $conf;
@@ -433,7 +436,12 @@ class User
- // Lesen Benutzername
+ /**
+ * Liest einen Benutzernamen aus der Datenbank.
+ *
+ * @param int Benutzer-Id
+ * @return String Benutzername
+ */
function getUserName( $userid )
{
$db = db_connection();
@@ -450,7 +458,9 @@ class User
}
- // Speichern Benutzer in der Datenbank
+ /**
+ * Speichern Benutzer in der Datenbank.
+ */
function save()
{
$db = db_connection();