Ansicht versteckter Nutzerdaten f. Mtglieder gleicher Gruppe

Hast du Probleme Admidio einzurichten? Hier kannst du Fragen rund um die Einrichtung stellen.
Antworten
OKraftDD
Beiträge: 21
Registriert: 22. Jun 2009, 10:28

Ansicht versteckter Nutzerdaten f. Mtglieder gleicher Gruppe

Beitrag von OKraftDD »

Hey Leute,

gibt es eine Option, die versteckten Nutzerdaten, welche normalerweise für Niemanden ersichtlich sind, für Mitglieder der gleichen Rolle darstellbar zu machen? :roll:

Hintergrund ist, dass Personen ihre persönlichen Daten der kompletten Community nicht zugänglich machen wollen; dennoch Listen für Mitglieder der gleichen Rolle (Mannschaftslisten) komplett generiert werden müssen.

Vielen Dank,

OKraftDD
OKraftDD
Beiträge: 21
Registriert: 22. Jun 2009, 10:28

Beitrag von OKraftDD »

Ich habe jetzt selber eine Lösung dazu entwickelt. Diese ist leider etwas rudimentär und für meine Zwecke angepasst, funktioniert aber für die Version 2.1.7. Allerdings, denke ich, ist der Ansatz durchaus fürs nächste Release nutzbar, deswegen hier folgender Code:

adm_program/system/classes/user.php - ab Zeile 558 - nach function editProfile()

Code: Alles auswählen

	// OLKR
	// Funktion prueft, ob der angemeldete User mindestens eine gemeinsame Gruppe hat mit entsprechendem Profil
	function inSameGroup($profileID = NULL, $groupID = NULL)
	{
			global $g_current_organization;
			$inSameGroup = false;
			
			if($profileID == NULL)
			{
				$this->getValue('usr_id');
			}
			
			//wenn g_current_user alle Gruppen listen darf
			if ($this->checkRolesRight("rol_all_lists_view")) {
				$inSameGroup = true;
			}
			
			$gruppen_loggedin_user = $gruppen_search_user = array();
			
			/* Gruppen des eingeloggten Nutzers */

			// Alle Gruppen des aktuell eingeloggten Users in ein Array legen
			$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 ' .
			
				//nur gruppen zählen, welche gelistet werden dürfen
				'AND (rol_this_list_view = 1 OR rol_this_list_view = 2)' . 
				
				'AND rol_cat_id = cat_id
				AND cat_org_id = '. $g_current_organization->getValue('org_id');
				
			$this->db->query($sql);
		
			//echo "<br/>---";
			
			$i = 0;
			//für alle Gruppen, welche gültig sind und gelistet werden dürfen
			while($row = $this->db->fetch_array())
			{
				//echo "<br/>eingeloggter User: " . $row['rol_id'] . " (" . $row['rol_name'] . ")";
				if($row['mem_usr_id'] > 0)
				{
					//echo "<--";
					$i++;
					$gruppen_loggedin_user[$i] = $row['rol_id'];
				}
			}
			
			/* Gruppen des angesehenen Nutzers */
			//echo "<br/>ProfilID: " . $profileID;
			//wenn Gruppe übermittelt, dann braucht nur diese Gruppe überprüft werden
			if ($groupID != NULL)
			{	
				//wenn die übermittelte Gruppe auch in den Gruppen des eingeloggten Nutzers ist
				if (array_search($groupID, $gruppen_loggedin_user))
				{
					$inSameGroup = true;
				}
			} else { 
			//ansonsten sämtliche Gruppen des anzusehenden Nutzers heraussuchen
			$sql    = 'SELECT *
				FROM '. TBL_CATEGORIES. ', '. TBL_ROLES. '
				LEFT JOIN '. TBL_MEMBERS. '
				ON mem_usr_id = '. $profileID. '
				AND mem_rol_id = rol_id
				AND mem_begin <= "'.DATE_NOW.'"
				AND mem_end    > "'.DATE_NOW.'"
				WHERE rol_valid  = 1 ' . 
				//nur gruppen zählen, welche gelistet werden dürfen
				'AND (rol_this_list_view = 1 OR rol_this_list_view = 2)' . 
				
				'AND rol_cat_id = cat_id
				AND cat_org_id = '. $g_current_organization->getValue('org_id');
				
			$this->db->query($sql);
			
			$i = 0;
			while($row = $this->db->fetch_array())
			{
				//echo "<br/>angesehener User: " . $row['rol_id'] . " (" . $row['rol_name'] . ")";
				if($row['mem_usr_id'] > 0)
				{
					//echo "<--";
					$i++;
					$gruppen_search_user[$i] = $row['rol_id'];
					//wenn Gruppe in anzuhendem Profil in Array des eingeloggten Nutzers vorhanden ist
					if (array_search($row['rol_id'], $gruppen_loggedin_user))
					{
						$inSameGroup = true;
					}
				}
			}
		}
		return $inSameGroup;
	}

adm_program/modules/profile/profile.php

Code: Alles auswählen

Zeile 53 alt:
--------------

    if($g_current_user->editProfile($user_id) == false && $field->getValue('usf_hidden') == 1)

Zeile 53 NEU:
-------------

    if(!$g_current_user->inSameGroup($user_id) && $g_current_user->editProfile($user_id) == false && $field->getValue('usf_hidden') == 1)
    
---


Zeile 271 alt:
--------------

                            && ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Geschlecht', 'usf_hidden') == 0 ))

Zeile 271 NEU:
--------------

                            && ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Geschlecht', 'usf_hidden') == 0 ))

---


Zeile 331 alt:
--------------

                                && (  $g_current_user->editProfile($a_user_id) == true || $field->getValue('usf_hidden') == 0 ))

Zeile 331 NEU:
--------------

                                && (  $g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $field->getValue('usf_hidden') == 0 ))

---


Zeile 362 alt:
--------------

                                                            && (  $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Adresse', 'usf_hidden') == 0))

Zeile 362 NEU:
--------------

                                                            && ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Adresse', 'usf_hidden') == 0))

---


Zeile 370 alt:
--------------

                                                            && ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('PLZ', 'usf_hidden') == 0))

Zeile 370 NEU:
--------------

                                                            && ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('PLZ', 'usf_hidden') == 0))

---


Zeile 378 alt:
--------------

                                                            && ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Ort', 'usf_hidden') == 0))

Zeile 378 NEU:
--------------

                                                            && ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Ort', 'usf_hidden') == 0))

---


Zeile 386 alt:
--------------

                                                            && ($g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Land', 'usf_hidden') == 0))

Zeile 386 NEU:
--------------

                                                            && ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == true || $g_current_user->getProperty('Land', 'usf_hidden') == 0))

---


Zeile 483 alt:
--------------

               || ($g_current_user->editProfile($a_user_id) == false && $field->getValue('usf_hidden') == 0 )))

Zeile 483 NEU:
--------------

               || ($g_current_user->inSameGroup($a_user_id) || $g_current_user->editProfile($a_user_id) == false && $field->getValue('usf_hidden') == 0 )))

adm_program/modules/lists/lists_show.php

Code: Alles auswählen

Zeile 381 ff. alt:
------------------

    // versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
    if($usf_id == 0
    || $g_current_user->editUsers()
    || $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0)

Zeile 381 ff. NEU:
------------------
    // versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
    if($usf_id == 0
    || $g_current_user->editUsers()
    || $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0
    // OLKR
    || $g_current_user->inSameGroup(NULL, $req_rol_id)
    )

---


Zeile 495 ff. alt:
------------------

            // versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
            if($usf_id == 0
            || $g_current_user->editUsers()
            || $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0)
            
Zeile 495 ff. NEU:
------------------

            // versteckte Felder duerfen nur von Leuten mit entsprechenden Rechten gesehen werden
            if($usf_id == 0
            || $g_current_user->editUsers()
            || $g_current_user->getPropertyById($usf_id, 'usf_hidden') == 0
            // OLKR
            || $g_current_user->inSameGroup(NULL, $req_rol_id)
            )

Wohin genau zu posten ist, um es offiziell mit ins nächste Release zu nehmen, weiß ich nicht. Deswegen dieser Weg.

Es funktioniert nun, dass alle Mitglieder, welche sich in der selben Gruppe (Rolle) befinden, die kompletten Profile (also, auch die versteckten Felder) sehen können, aber NUR, wenn diese Rolle von der eingeloggten Person auch gelistet werden darf.

Meine Rollenaufteilung sieht verkürzt in etwa so aus:

Code: Alles auswählen

Alle Mitglieder     (Liste darf NICHT erstellt werden)
  + Damen     (Liste darf NICHT erstellt werden)
  |   | 1. Damenmannschaft     (Liste darf NICHT erstellt werden)
  |   | 2. Damenmannschaft     (Liste darf NICHT erstellt werden)
  + Herren     (Liste darf NICHT erstellt werden)
  |   | 1. Herrenmannschaft     (Liste darf NICHT erstellt werden)
  |   | 2. Herrenmannschaft     (Liste darf NICHT erstellt werden)
Ausgangslage: Ich bin Mitglied der 1. Herrenmannschaft (also auch automatisch "Herren" und "Mitglied")

Sehe ich das Profil eines Mitgliedes ein, welches nicht in der 1. Herrenmannschaft (bsp. 1. Damenmannschaft) ist, sehe ich ausschließlich die öffentlichen Felder.
Nun sind allerdings beide in der selben Gruppe "Mitglieder". Da ich aber die Mitglieder nicht auflisten darf, wird mir nicht gewährt die Details anzusehen.

Sehe ich ein Profil eines Mitspielers der 1. Herrenmannschaft ein, dann sehe ich auch die versteckten Felder.

Um daraus ein Feature für das neues Release zu entwickeln fehlen noch ein paar Kleinigkeiten:
- Flag in der Datenbank
- Setzen der Flag über "Rollenmanagement"
- Prüfen der Flag in der neuen Funktion "inSameGroup($profileID = NULL, $groupID = NULL)"

MfG OKraftDD
Antworten