(edit)
Hide minor edits - Show changes to markup
(:redirect 'http://docs.studip.de/develop/Entwickler/Sichtbarkeit':)
Erweiterte Möglichkeiten zur Festlegung der persönlichen Privatsphäre und Sichtbarkeiten stehen ab der Stud.IP-Version 2.0 zur Verfügung.
Soll die Sichtbarkeit einer Kennung abgefragt werden, so gibt es dafür die Methoden get_visibility_by_id bzw. get_visibility_by_username bzw. get_visibility_by_state. Um explizit die globale Sichtbarkeit, unabhängig von Root-Rechten o.ä. abfragen zu können, existieren die Methoden get_global_visibility_by_id und get_global_visibililty_by_username, die als Parameter die User-ID bzw. den Usernamen erhalten und die in der Datenbank hinterlegte Sichtbarkeit zurückgeben.
get_visibility_by_id
get_visibility_by_username
get_visibility_by_state
get_global_visibility_by_id
get_global_visibililty_by_username
Soll die Sichtbarkeit einer Kennung abgefragt werden, so gibt es dafür die Methoden get_visibility_by_id bzw. get_visibility_by_username bzw. get_visibility_by_state.
// Liefert true oder false, je nach Sichtbarkeit der Kennung $visibility = get_visibility_by_username('tester'); /* * Liegt die in der Datenbank hinterlegte Sichtbarkeit * bereits vor, so kann wie folgt abgefragt werden: */ // Sei die Sichtbarkeit gleich 'yes' $db_vis = 'yes' $visibility = get_visibility_by_state($db_vis, get_userid('tester'));
Hier kommt als Ergebnis also heraus: "Darf ich die Kennung sehen?", das hängt nicht nur von den Sichtbarkeitsinstellungen der Kennung ab, sondern auch von meinen eigenen Rechten (Root sieht alles).
Um explizit die globale Sichtbarkeit, unabhängig von Root-Rechten o.ä. abfragen zu können, existieren die Methoden get_global_visibility_by_id und get_global_visibililty_by_username, die als Parameter die User-ID bzw. den Usernamen erhalten und die in der Datenbank hinterlegte Sichtbarkeit zurückgeben. Hier kommt also ein Wert aus der Menge {'yes', 'no', 'always', 'never', 'unknown', 'global'} heraus
{'yes', 'no', 'always', 'never', 'unknown', 'global'}
Will man z.B. wissen, ob der User mit dem Usernamen 'tester' über die Personensuche auffindbar ist, so kann dies so abgefragt werden:
$search_visibility = get_local_visibility_by_username('tester', 'search');
Besonders auf externen Seiten ist es noch nützlich, auch zu wissen, welche Berechtigung der abzufragende User im System hat. Daher kann optional auch angegeben werden, dass diese Berechtigung mit zurückgegeben werden soll:
$search_visibility = get_local_visibility_by_username('tester', 'search', true);
führt dann zur Ausgabe
$search_visibility = Array( 'perms' => 'dozent', 'search' => true );
Im Code sieht das so aus:
// Der "Besitzer" der Homepage hat die ID '12345' $visibilities = get_local_visibility_by_id('12345', 'homepage'); // Der Besucher der Homepage hat die ID 'abcde' $private_phone = is_element_visible_for_user('abcde', '12345', $visibilities['private_phone']);
Geht es nur um einzelne Elemente der Homepage, so kann man auch explizit deren Sichtbarkeit abfragen:
// Wieder Homepagebesitzer-ID '12345' $private_phone_visibility = get_homepage_element_visibility('12345', 'private_phone');
Aus Performancegründen wird für eine gesamte Homepage nur die erste Variante ausgeführt, wo alle Sichtbarkeiten auf einmal geladen werden.
Hierzu ein Beispiel:
Aus der Datenbank wurde geladen, dass das Element „private_phone“ (also die private Telefonnummer) die Sichtbarkeit 1 (=VISIBILITY_ME) hat, also nur für den Besitzer der Homepage selbst angezeigt werden soll. Die Methode is_element_visible_for_user bekommt nun als Parameter die ID des aktuellen Users, die ID des Users, zu dem die gerade besuchte Homepage gehört und den Wert der Sichtbarkeit, also 1. Daraus wird nun ermittelt, ob die Telefonnummer angezeigt werden soll oder nicht.
is_element_visible_for_user
Hierzu ein Beispiel: Aus der Datenbank wurde geladen, dass das Element „private_phone“ (also die private Telefonnummer) die Sichtbarkeit 1 (=VISIBILITY_ME) hat, also nur für den Besitzer der Homepage selbst angezeigt werden soll. Die Methode is_element_visible_for_user bekommt nun als Parameter die ID des aktuellen Users, die ID des Users, zu dem die gerade besuchte Homepage gehört und den Wert der Sichtbarkeit, also 1. Daraus wird nun ermittelt, ob die Telefonnummer angezeigt werden soll oder nicht.
Die Funktionen zum Abfragen der Sichtbarkeiten sind in lib/user_visible.inc.php definiert. Die vorhandenen Sichtbarkeitsstufen sind dort als Konstanten definiert:
Zur Abfrage der Sichtbarkeit in einem bestimmten Bereich von Stud.IP gibt es die Methoden get_local_visibility_by_id bzw. get_local_visibility_by_username. Hiermit kann durch Angabe der User-ID bzw. des Usernamens und des gewünschten Bereichs die Sichtbarkeit in diesem Bereich abgefragt werden. Gültige Bereiche sind
get_local_visibility_by_id
get_local_visibility_by_username
Auf der Profilseite einer Person werden am Anfang standardmäßig alle Sichtbarkeiten der einzelnen Elemente geladen. Damit wird die Anzahl der Datenbankanfragen minimiert, indem nur eine globale Anfrage für alle Elemente statt eines Queries pro Element ausgeführt werden muss.
Mittels der Funktionen is_element_visibible_for_user und is_element_visible_externally kann dann überprüft werden, ob ein einzelnes Element anhand seiner Sichtbarkeitseinstellungen für den aktuellen Nutzer angezeigt werden soll.
is_element_visibible_for_user
is_element_visible_externally
Über die Methode get_visible_email kann die nach außen sichtbare Emailadresse ermittelt werden. Hat ein Nutzer eingestellt, dass die eigene Emailadresse nicht angezeigt werden soll, so wird stattdessen versucht, über die Einrichtungszuordnung dieser Kennung eine Emailadresse zu ermitteln (nur Zuordnungen mit mindestens Recht „autor“). Dabei wird zuerst die Emailadresse der ersten gefundenen Einrichtung verwendet, sollte es mehrere Einrichtungszuordnungen geben und eine davon als Standardeinrichtung definiert sein, so wird diese Email verwendet. Bei keiner gefundenen Zuordnung wird ein Leerstring als Emailadresse zurückgegeben.
get_visible_email
Source: Basis-Wiki-Hilfe | Last change: April 01, 2011, at 11:52 PM, tthelen | Local view: Basis-Hilfe