Location: PHPKode > scripts > Admidio > admidio-2.2.9/adm_program/system/classes/user.php
<?php
/******************************************************************************
 * Klasse fuer Datenbanktabelle adm_users
 *
 * Copyright    : (c) 2004 - 2011 The Admidio Team
 * Homepage     : http://www.admidio.org
 * License      : GNU Public License 2 http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Diese Klasse dient dazu ein Userobjekt zu erstellen.
 * Ein User kann ueber diese Klasse in der Datenbank verwaltet werden
 *
 * Neben den Methoden der Elternklasse TableAccess, stehen noch zusaetzlich
 * folgende Methoden zur Verfuegung:
 *
 * readUserData()       - baut ein Array mit allen Profilfeldern und
 *                        den entsprechenden Werten des Users auf
 * clearUserFieldArray($delete_db_data = false)
 *                      - der Inhalt der Profilfelder wird geloescht, 
 *                        die Objekte mit DB-Struktur aber nicht !
 * getProperty($field_name, $property)
 *                      - gibt den Inhalt einer Eigenschaft eines Feldes zurueck.
 *                        Dies kann die usf_id, usf_type, cat_id, cat_name usw. sein
 * getPropertyById($field_id, $property)
 * getListViewRights()  - Liefert ein Array mit allen Rollen und der 
 *                        Berechtigung, ob der User die Liste einsehen darf
 *                      - aehnlich getProperty, allerdings suche ueber usf_id
 * getVCard()           - Es wird eine vCard des Users als String zurueckgegeben
 * viewProfile          - Ueberprueft ob der User das Profil eines uebrgebenen
 *                        Users einsehen darf
 * viewRole             - Ueberprueft ob der User eine uebergebene Rolle(Liste)
 *                        einsehen darf
 * isWebmaster()        - gibt true/false zurueck, falls der User Mitglied der
 *                        Rolle "Webmaster" ist
 *
 *****************************************************************************/

require_once(SERVER_PATH. '/adm_program/system/classes/table_users.php');
require_once(SERVER_PATH. '/adm_program/system/classes/table_user_data.php');

class User extends TableUsers
{
    protected $webmaster;

    public $userFieldData       = array(); // Array ueber alle Userdatenobjekte mit den entsprechenden Feldeigenschaften
    protected $roles_rights     = array(); // Array ueber alle Rollenrechte mit dem entsprechenden Status des Users
    protected $list_view_rights = array(); // Array ueber Listenrechte einzelner Rollen => Zugriff nur ├╝ber getListViewRights()
    protected $role_mail_rights = array(); // Array ueber Mailrechte einzelner Rollen

    // Konstruktor
    public function __construct(&$db, $usr_id = 0)
    {
        parent::__construct($db, $usr_id);
    }

    // Methode prueft, ob der User das uebergebene Rollenrecht besitzt und setzt das Array mit den Flags,
    // welche Rollen der User einsehen darf
    public function checkRolesRight($right = '')
    {
        global $g_l10n;

        if($this->getValue('usr_id') > 0)
        {
            if(count($this->roles_rights) == 0)
            {
                global $g_current_organization;
                $tmp_roles_rights  = array('rol_assign_roles'  => '0', 'rol_approve_users' => '0',
                                           'rol_announcements' => '0', 'rol_dates' => '0',
                                           'rol_download'      => '0', 'rol_edit_user' => '0',
                                           'rol_guestbook'     => '0', 'rol_guestbook_comments' => '0',
                                           'rol_inventory'     => '0',
                                           'rol_mail_to_all'   => '0',
                                           'rol_photo'         => '0', 'rol_profile' => '0',
                                           'rol_weblinks'      => '0', 'rol_all_lists_view' => '0');

                // Alle Rollen der Organisation einlesen und ggf. Mitgliedschaft dazu joinen
                $sql = 'SELECT *
                          FROM '. TBL_CATEGORIES. ', '. TBL_ROLES. '
                          LEFT JOIN '. TBL_MEMBERS. '
                            ON mem_usr_id  = '. $this->getValue('usr_id'). '
                           AND mem_rol_id  = rol_id
                           AND mem_begin  <= "'.DATE_NOW.'"
                           AND mem_end     > "'.DATE_NOW.'"
                         WHERE rol_valid   = 1
                           AND rol_cat_id  = cat_id
                           AND (  cat_org_id = '. $g_current_organization->getValue('org_id').' 
                               OR cat_org_id IS NULL ) ';
                $this->db->query($sql);

                while($row = $this->db->fetch_array())
                {
                    // Rechte nur beruecksichtigen, wenn auch Rollenmitglied
                    if($row['mem_usr_id'] > 0)
                    {
                        // Rechte der Rollen in das Array uebertragen,
                        // falls diese noch nicht durch andere Rollen gesetzt wurden
                        foreach($tmp_roles_rights as $key => $value)
                        {
                            if($value == '0' && $row[$key] == '1')
                            {
                                $tmp_roles_rights[$key] = '1';
                            }
                        }
                    }

                    // Webmasterflag setzen
                    if($row['mem_usr_id'] > 0 && $row['rol_name'] == $g_l10n->get('SYS_WEBMASTER'))
                    {
                        $this->webmaster = 1;
                    }

                    // Listenansichtseinstellung merken
                    // Leiter duerfen die Rolle sehen
                    if($row['mem_usr_id'] > 0 && ($row['rol_this_list_view'] > 0 || $row['mem_leader'] == 1))
                    {
                        // Mitgliedschaft bei der Rolle und diese nicht gesperrt, dann anschauen
                        $this->list_view_rights[$row['rol_id']] = 1;
                    }
                    elseif($row['rol_this_list_view'] == 2)
                    {
                        // andere Rollen anschauen, wenn jeder sie sehen darf
                        $this->list_view_rights[$row['rol_id']] = 1;
                    }
                    else
                    {
                        $this->list_view_rights[$row['rol_id']] = 0;
                    }

                    // Mailrechte setzen
                    // Leiter duerfen der Rolle Mails schreiben
                    if($row['mem_usr_id'] > 0 && ($row['rol_mail_this_role'] > 0 || $row['mem_leader'] == 1))
                    {
                        // Mitgliedschaft bei der Rolle und diese nicht gesperrt, dann anschauen
                        $this->role_mail_rights[$row['rol_id']] = 1;
                    }
                    elseif($row['rol_mail_this_role'] >= 2)
                    {
                        // andere Rollen anschauen, wenn jeder sie sehen darf
                        $this->role_mail_rights[$row['rol_id']] = 1;
                    }
                    else
                    {
                        $this->role_mail_rights[$row['rol_id']] = 0;
                    }
                }
                $this->roles_rights = $tmp_roles_rights;

                // ist das Recht 'alle Listen einsehen' gesetzt, dann dies auch im Array bei allen Rollen setzen
                if($this->roles_rights['rol_all_lists_view'])
                {
                    foreach($this->list_view_rights as $key => $value)
                    {
                        $this->list_view_rights[$key] = 1;
                    }
                }

                // ist das Recht 'allen Rollen EMails schreiben' gesetzt, dann dies auch im Array bei allen Rollen setzen
                if($this->roles_rights['rol_mail_to_all'])
                {
                    foreach($this->role_mail_rights as $key => $value)
                    {
                        $this->role_mail_rights[$key] = 1;
                    }
                }

            }

            if(strlen($right) == 0 || $this->roles_rights[$right] == 1)
            {
                return true;
            }
        }
        return 0;
    }

    // alle Klassenvariablen wieder zuruecksetzen
    public function clear()
    {
        parent::clear();

        // die Daten der Profilfelder werden geloescht, die Struktur bleibt
        $this->clearUserFieldArray();

        $this->webmaster = 0;

        // neue User sollten i.d.R. auf valid stehen (Ausnahme Registrierung)
        $this->setValue('usr_valid', 1);

        // Arrays initialisieren
        $this->roles_rights = array();
        $this->list_view_rights = array();
        $this->role_mail_rights = array();
    }
    
    // der Inhalt der Felder wird geloescht, die Objekte mit DB-Struktur nur auf Wunsch
    public function clearUserFieldArray($delete_db_data = false)
    {
        // Jedes Feld durchgehen und alle Inhalte der Tabelle adm_user_data entfernen
        foreach($this->userFieldData as $field_name => $object)
        {
            $this->userFieldData[$field_name]->clearFieldData();
        }
        
        // Daten in der DB auch loeschen
        if($delete_db_data)
        {
            $sql    = 'DELETE FROM '. TBL_USER_DATA. ' WHERE usd_usr_id = '. $this->getValue('usr_id');
            $this->db->query($sql);
        }
    }
    
    // Liefert ein Array mit allen Rollen und der Berechtigung, ob der User die Liste einsehen darf
    public function getListViewRights()
    {
        $this->checkRolesRight();
        return $this->list_view_rights;
    }

    // Methode gibt den Wert eines Profilfeldes zurueck
    // Property ist dabei ein Feldname aus der Tabelle adm_user_fields oder adm_user_data
    // hier koennen auch noch bestimmte Formatierungen angewandt werden
    public function getProperty($field_name, $property, $format = '')
    {
        if(isset($this->userFieldData[$field_name]))
        {
            return $this->userFieldData[$field_name]->getValue($property, $format);
        }
        return '';
    }

    // aehnlich getProperty, allerdings suche ueber usf_id
    public function getPropertyById($field_id, $property, $format = '')
    {
        foreach($this->userFieldData as $field)
        {
            if($field->getValue('usf_id') == $field_id)
            {
                return $field->getValue($property, $format);
            }
        }
        return '';
    }

    // Methode prueft, ob evtl. ein Wert aus der User-Fields-Tabelle
    // angefordert wurde und gibt diesen zurueck
    public function getValue($field_name, $format = '')
    {
        if(strpos($field_name, 'usr_') === 0)
        {
            return parent::getValue($field_name, $format);
        }
        else
        {
            return $this->getProperty($field_name, 'usd_value', $format);
        }
    }

    // gibt die Userdaten als VCard zurueck
    // da das Windows-Adressbuch einschliesslich XP kein UTF8 verarbeiten kann, alles in ISO-8859-1 ausgeben
    public function getVCard()
    {
        global $g_current_user, $g_preferences;

        $editAllUsers = $g_current_user->editProfile($this->getValue("usr_id"));

        $vcard  = (string) "BEGIN:VCARD\r\n";
        $vcard .= (string) "VERSION:2.1\r\n";
        if($editAllUsers || ($editAllUsers == false && $this->userFieldData['FIRST_NAME']->getValue('usf_hidden') == 0))
        {
            $vcard .= (string) "N;CHARSET=ISO-8859-1:" . utf8_decode($this->getValue('LAST_NAME')). ";". utf8_decode($this->getValue('FIRST_NAME')) . ";;;\r\n";
        }
        if($editAllUsers || ($editAllUsers == false && $this->userFieldData['LAST_NAME']->getValue('usf_hidden') == 0))
        {
            $vcard .= (string) "FN;CHARSET=ISO-8859-1:". utf8_decode($this->getValue('FIRST_NAME')) . " ". utf8_decode($this->getValue('LAST_NAME')) . "\r\n";
        }
        if (strlen($this->getValue('usr_login_name')) > 0)
        {
            $vcard .= (string) "NICKNAME;CHARSET=ISO-8859-1:" . utf8_decode($this->getValue("usr_login_name")). "\r\n";
        }
        if (strlen($this->getValue('PHONE')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['PHONE']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "TEL;HOME;VOICE:" . $this->getValue('PHONE'). "\r\n";
        }
        if (strlen($this->getValue('MOBILE')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['MOBILE']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "TEL;CELL;VOICE:" . $this->getValue('MOBILE'). "\r\n";
        }
        if (strlen($this->getValue('FAX')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['FAX']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "TEL;HOME;FAX:" . $this->getValue('FAX'). "\r\n";
        }
        if($editAllUsers || ($editAllUsers == false && $this->userFieldData['ADDRESS']->getValue('usf_hidden') == 0 && $this->userFieldData['CITY']->getValue('usf_hidden') == 0
        && $this->userFieldData['POSTCODE']->getValue('usf_hidden') == 0  && $this->userFieldData['COUNTRY']->getValue('usf_hidden') == 0))
        {
            $vcard .= (string) "ADR;CHARSET=ISO-8859-1;HOME:;;" . utf8_decode($this->getValue('ADDRESS')). ";" . utf8_decode($this->getValue('CITY')). ";;" . utf8_decode($this->getValue('POSTCODE')). ";" . utf8_decode($this->getValue('COUNTRY')). "\r\n";
        }
        if (strlen($this->getValue('WEBSITE')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['WEBSITE']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "URL;HOME:" . $this->getValue('WEBSITE'). "\r\n";
        }
        if (strlen($this->getValue('BIRTHDAY')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['BIRTHDAY']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "BDAY:" . $this->getValue('BIRTHDAY', 'Ymd') . "\r\n";
        }
        if (strlen($this->getValue('EMAIL')) > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['EMAIL']->getValue('usf_hidden') == 0)))
        {
            $vcard .= (string) "EMAIL;PREF;INTERNET:" . $this->getValue('EMAIL'). "\r\n";
        }
        if (file_exists(SERVER_PATH.'/adm_my_files/user_profile_photos/'.$this->getValue('usr_id').'.jpg') && $g_preferences['profile_photo_storage'] == 1)
        {
            $img_handle = fopen (SERVER_PATH. '/adm_my_files/user_profile_photos/'.$this->getValue('usr_id').'.jpg', 'rb');
            $vcard .= (string) "PHOTO;ENCODING=BASE64;TYPE=JPEG:".base64_encode(fread ($img_handle, filesize (SERVER_PATH. "/adm_my_files/user_profile_photos/".$this->getValue("usr_id").".jpg"))). "\r\n";
            fclose($img_handle);
        }
        if (strlen($this->getValue('usr_photo')) > 0 && $g_preferences['profile_photo_storage'] == 0)
        {
            $vcard .= (string) "PHOTO;ENCODING=BASE64;TYPE=JPEG:".base64_encode($this->getValue("usr_photo")). "\r\n";
        }
        // Geschlecht ist nicht in vCard 2.1 enthalten, wird hier fuer das Windows-Adressbuch uebergeben
        if ($this->getValue('GENDER') > 0
        && ($editAllUsers || ($editAllUsers == false && $this->userFieldData['GENDER']->getValue('usf_hidden') == 0)))
        {
            if($this->getValue('GENDER') == 1)
            {
                $wab_gender = 2;
            }
            else
            {
                $wab_gender = 1;
            }
            $vcard .= (string) "X-WAB-GENDER:" . $wab_gender . "\r\n";
        }
        if (strlen($this->getValue('usr_timestamp_change')) > 0)
        {
            $vcard .= (string) "REV:" . $this->getValue('usr_timestamp_change', 'ymdThis') . "\r\n";
        }

        $vcard .= (string) "END:VCARD\r\n";
        return $vcard;
    }

    public function readData($usr_id, $sql_where_condition = '', $sql_additional_tables = '')
    {
        parent::readData($usr_id, $sql_where_condition, $sql_additional_tables);

        $this->readUserData();
    }
    
    // bei setValue werden die Werte nicht auf Gueltigkeit geprueft
    public function noValueCheck()
    {
        foreach($this->userFieldData as $field)
        {
            $field->noValueCheck();
        }
    }

    // baut ein Array mit allen Profilfeldern und den entsprechenden Werten des Users auf
    public function readUserData()
    {
    	global $g_current_organization;

        if($this->getValue('usr_id') > 0)
        {
            $join_user_data  = 'LEFT JOIN '. TBL_USER_DATA. '
                                  ON usd_usf_id = usf_id
                                 AND usd_usr_id = '. $this->getValue('usr_id');
        }
        else
        {
            $join_user_data  = '';
        }

        $sql = 'SELECT * FROM '. TBL_CATEGORIES. ', '. TBL_USER_FIELDS. '
                       '.$join_user_data.'
                 WHERE usf_cat_id = cat_id
                   AND (  cat_org_id IS NULL
                       OR cat_org_id  = '. $g_current_organization->getValue('org_id'). ' )
                 ORDER BY cat_sequence ASC, usf_sequence ASC ';
        $usf_result   = $this->db->query($sql);

        while($usf_row = $this->db->fetch_array($usf_result))
        {
            if(isset($this->userFieldData[$usf_row['usf_name_intern']]) == false)
            {
                $this->userFieldData[$usf_row['usf_name_intern']] = new TableUserData($this->db);
            }
            $this->userFieldData[$usf_row['usf_name_intern']]->setArray($usf_row);
        }
    }

    public function save($updateFingerPrint = true)
    {
        global $g_current_session;
        $fields_changed = $this->columnsValueChanged;

        parent::save($updateFingerPrint);

        // jetzt noch die einzelnen Spalten sichern
        foreach($this->userFieldData as $field)
        {
            // update nur machen, wenn auch noetig
            if($field->getValue('usd_id') > 0 || strlen($field->getValue('usd_value')) > 0)
            {
                // wird das Feld neu gefuellt, dann auch User-ID setzen
                if(strlen($field->getValue('usd_usr_id')) == 0
                && strlen($field->getValue('usd_value')) > 0)
                {
                	// PHP4 liefert nur eine Kopie des Objekts, aus diesem Grund muss die Aenderung direkt auf das 
                	// richtige Objekt verwiesen werden
                	$this->userFieldData[$field->getValue('usf_name_intern')]->setValue('usd_usr_id', $this->getValue('usr_id'));
                    $this->userFieldData[$field->getValue('usf_name_intern')]->setValue('usd_usf_id', $field->getValue('usf_id'));
                    $this->userFieldData[$field->getValue('usf_name_intern')]->new_record = true;
                }

                // existiert schon ein Wert und dieser wird entfernt, dann auch DS loeschen
                if($field->getValue('usd_id') > 0
                && strlen($field->getValue('usd_value')) == 0)
                {
                    $this->userFieldData[$field->getValue('usf_name_intern')]->delete();
                }
                else
                {
                    $this->userFieldData[$field->getValue('usf_name_intern')]->save();
                }
            }
        }

        if($fields_changed && is_object($g_current_session))
        {
            // einlesen aller Userobjekte der angemeldeten User anstossen, da evtl.
            // eine Rechteaenderung vorgenommen wurde
            $g_current_session->renewUserObject($this->getValue('usr_id'));
        }
    }

    // interne Methode, die bei setValue den uebergebenen Wert prueft
    // und ungueltige Werte auf leer setzt
    public function setValue($field_name, $field_value)
    {
        global $g_current_user;
        $return_code  = true;
        $update_field = false;

        if(strpos($field_name, 'usr_') !== 0)
        {
            // Daten fuer User-Fields-Tabelle

            // gesperrte Felder duerfen nur von Usern mit dem Rollenrecht 'alle Benutzerdaten bearbeiten' geaendert werden
            // bei Registrierung muss die Eingabe auch erlaubt sein
            if((  $this->getProperty($field_name, 'usf_disabled') == 1
               && $g_current_user->editUsers() == true)
            || $this->getProperty($field_name, 'usf_disabled') == 0
            || ($g_current_user->getValue('usr_id') == 0 && $this->getValue('usr_id') == 0))
            {
                // versteckte Felder duerfen nur von Usern mit dem Rollenrecht 'alle Benutzerdaten bearbeiten' geaendert werden
                // oder im eigenen Profil
                if((  $this->getProperty($field_name, 'usf_hidden') == 1
                   && $g_current_user->editUsers() == true)
                || $this->getProperty($field_name, 'usf_hidden') == 0
                || $g_current_user->getValue('usr_id') == $this->getValue('usr_id'))
                {
                    $update_field = true;
                }
            }

            // nur Updaten, wenn sich auch der Wert geaendert hat
            if($update_field == true
            && $field_value  != $this->userFieldData[$field_name]->getValue('usd_value'))
            {
                $return_code = $this->userFieldData[$field_name]->setValue('usd_value', $field_value);
            }
        }
        else
        {
            $return_code = parent::setValue($field_name, $field_value);
        }
        return $return_code;
    }

    // Funktion prueft, ob der angemeldete User Ankuendigungen anlegen und bearbeiten darf
    public function editAnnouncements()
    {
        return $this->checkRolesRight('rol_announcements');
    }

    // Funktion prueft, ob der angemeldete User Registrierungen bearbeiten und zuordnen darf
    public function approveUsers()
    {
        return $this->checkRolesRight('rol_approve_users');
    }

    // Funktion prueft, ob der angemeldete User Rollen zuordnen, anlegen und bearbeiten darf
    public function assignRoles()
    {
        return $this->checkRolesRight('rol_assign_roles');
    }

    //Ueberprueft ob der User das Recht besitzt, alle Rollenlisten einsehen zu duerfen
    public function viewAllLists()
    {
        return $this->checkRolesRight('rol_all_lists_view');
    }

    //Ueberprueft ob der User das Recht besitzt, allen Rollenmails zu zusenden
    public function mailAllRoles()
    {
        return $this->checkRolesRight('rol_mail_to_all');
    }

    // Funktion prueft, ob der angemeldete User Termine anlegen und bearbeiten darf
    public function editDates()
    {
        return $this->checkRolesRight('rol_dates');
    }

    // Funktion prueft, ob der angemeldete User Downloads hochladen und verwalten darf
    public function editDownloadRight()
    {
        return $this->checkRolesRight('rol_download');
    }

    // Funktion prueft, ob der angemeldete User das entsprechende Profil bearbeiten darf
    public function editProfile($profileID = NULL)
    {
        if($profileID == NULL)
        {
            $profileID = $this->getValue('usr_id');
        }

        //soll das eigene Profil bearbeitet werden?
        if($profileID == $this->getValue('usr_id') && $this->getValue('usr_id') > 0)
        {
            $edit_profile = $this->checkRolesRight('rol_profile');

            if($edit_profile == 1)
            {
                return true;
            }
            else
            {
                return $this->editUsers();
            }

        }
        else
        {
            return $this->editUsers();
        }
    }

    // Funktion prueft, ob der angemeldete User fremde Benutzerdaten bearbeiten darf
    public function editUsers()
    {
        return $this->checkRolesRight('rol_edit_user');
    }

    // Funktion prueft, ob der angemeldete User Gaestebucheintraege loeschen und editieren darf
    public function editGuestbookRight()
    {
        return $this->checkRolesRight('rol_guestbook');
    }

    // Funktion prueft, ob der angemeldete User Gaestebucheintraege kommentieren darf
    public function commentGuestbookRight()
    {
        return $this->checkRolesRight('rol_guestbook_comments');
    }

	// Funktion prueft, ob der angemeldete User Inventargegenstaende verwalten darf
    public function editInventoryRight()
    {
        return $this->checkRolesRight('rol_inventory');
    }

    // Funktion prueft, ob der angemeldete User Fotos hochladen und verwalten darf
    public function editPhotoRight()
    {
        return $this->checkRolesRight('rol_photo');
    }

    // Funktion prueft, ob der angemeldete User Weblinks anlegen und editieren darf
    public function editWeblinksRight()
    {
        return $this->checkRolesRight('rol_weblinks');
    }

    // Funktion prueft, ob der User ein Profil einsehen darf
    public function viewProfile($usr_id)
    {
        global $g_current_organization;
        $view_profile = false;

        //Hat ein User Profileedit rechte, darf er es natuerlich auch sehen
        if($this->editProfile($usr_id))
        {
            $view_profile = true;
        }
        else
        {
            // Benutzer, die alle Listen einsehen duerfen, koennen auch alle Profile sehen
            if($this->viewAllLists())
            {
                $view_profile = true;
            }
            else
            {
                $sql    = 'SELECT rol_id, rol_this_list_view
                             FROM '. TBL_MEMBERS. ', '. TBL_ROLES. ', '. TBL_CATEGORIES. '
                            WHERE mem_usr_id = '.$usr_id. '
                              AND mem_begin <= "'.DATE_NOW.'"
                              AND mem_end    > "'.DATE_NOW.'"
                              AND mem_rol_id = rol_id
                              AND rol_valid  = 1
                              AND rol_cat_id = cat_id
                              AND (  cat_org_id = '. $g_current_organization->getValue('org_id').'
                                  OR cat_org_id IS NULL ) ';
                $this->db->query($sql);

                if($this->db->num_rows() > 0)
                {
                    while($row = $this->db->fetch_array())
                    {
                        if($row['rol_this_list_view'] == 2)
                        {
                            // alle angemeldeten Benutzer duerfen Rollenlisten/-profile sehen
                            $view_profile = true;
                        }
                        elseif($row['rol_this_list_view'] == 1
                        && isset($this->list_view_rights[$row['rol_id']]))
                        {
                            // nur Rollenmitglieder duerfen Rollenlisten/-profile sehen
                            $view_profile = true;
                        }
                    }
                }
            }
        }
        return $view_profile;
    }

    // Methode prueft, ob der angemeldete User eine bestimmte oder alle Listen einsehen darf
    public function viewRole($rol_id)
    {
        $view_role = false;
        // Abfrage ob der User durch irgendeine Rolle das Recht bekommt alle Listen einzusehen
        if($this->viewAllLists())
        {
            $view_role = true;
        }
        else
        {
            // Falls er das Recht nicht hat Kontrolle ob fuer eine bestimmte Rolle
            if(isset($this->list_view_rights[$rol_id]) && $this->list_view_rights[$rol_id] > 0)
            {
                $view_role = true;
            }
        }
        return $view_role;
    }

	// Methode prueft, ob der angemeldete User einer bestimmten oder allen Rolle E-Mails zusenden darf
    public function mailRole($rol_id)
    {
        $mail_role = false;
        // Abfrage ob der User durch irgendeine Rolle das Recht bekommt alle Listen einzusehen
        if($this->mailAllRoles())
        {
            $mail_role = true;
        }
        else
        {
            // Falls er das Recht nicht hat Kontrolle ob fuer eine bestimmte Rolle
            if(isset($this->role_mail_rights[$rol_id]) && $this->role_mail_rights[$rol_id] > 0)
            {
                $mail_role = true;
            }
        }
        return $mail_role;
    }

    // Methode liefert true zurueck, wenn der User Mitglied der Rolle "Webmaster" ist
    public function isWebmaster()
    {
        $this->checkRolesRight();
        return $this->webmaster;
    }
}
?>
Return current item: Admidio