Topic in "Who is online" nur für Admin?

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
LisaserstesForum
Mitglied
Beiträge: 996
Registriert: 28.08.2008 20:20
Wohnort: Kassel

Topic in "Who is online" nur für Admin?

Beitrag von LisaserstesForum »

Hi, ich habe heute die MOD Topic in "Who is online" gefunden und installiert.
Ich möchte aber gern, dass nur der Admin sehen kann, welches Thema gelesen wird, für die anderen User soll die Anzeige wie vorher bleiben.

Ist das einfach möglich?
Die Installation ist sehr kurz (3 Schritte):
viewonline.php
Finde:

Code: Alles auswählen

$logged_visible_online = $logged_hidden_online = $counter = 0;
Danach einfügen:

Code: Alles auswählen

// BEGIN: Topic in "Who is online"
$topic_ids = $post_ids = $topic_post_ids = $topic_titles = array();
while ($row = $db->sql_fetchrow($result))
{
	if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']]))
	{
		$view_online = false;
		if (!$row['session_viewonline'])
		{
			$view_online = ($auth->acl_get('u_viewonline')) ? true : false;
		}
		else
		{
			$view_online = true;
		}

		$prev_id[$row['user_id']] = 1;

		if (!$view_online)
		{
			continue;
		}
	}
	else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']]))
	{
		$prev_ip[$row['session_ip']] = 1;
	}
	else
	{
		continue;
	}

	preg_match('#^([a-z/]+)#i', $row['session_page'], $on_page);
	if (!sizeof($on_page))
	{
		$on_page[1] = '';
	}
	if (!in_array($on_page[1], array('viewtopic', 'posting')))
	{
		continue;
	}

	preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
	if (sizeof($on_page))
	{
		$topic_ids[] = $on_page[1];
		continue;
	}

	preg_match('#p=([0-9]+)#', $row['session_page'], $on_page);
	if (sizeof($on_page))
	{
		$post_ids[] = $on_page[1];
		continue;
	}
}

unset($prev_id, $prev_ip);

if (sizeof($topic_ids) || sizeof($post_ids))
{
	if (sizeof($post_ids))
	{
		$sql = 'SELECT topic_id, post_id FROM ' . POSTS_TABLE . ' WHERE ' . $db->sql_in_set('post_id', $post_ids);
		$post_result = $db->sql_query($sql);
		while ($row = $db->sql_fetchrow($post_result))
		{
			$topic_post_ids[$row['post_id']] = $row['topic_id'];
			$topic_ids[] = $row['topic_id'];
		}
		$db->sql_freeresult($post_result);
	}

	$sql = 'SELECT topic_id, topic_title FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', array_unique($topic_ids));
	$topic_result = $db->sql_query($sql);
	while ($row = $db->sql_fetchrow($topic_result))
	{
		$topic_titles[$row['topic_id']] = $row['topic_title'];
	}
	$db->sql_freeresult($topic_result);
}

$db->sql_rowseek(0, $result);
// END: Topic in "Who is online"
Finde:

Code: Alles auswählen

								$location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
Ersetze mit:

Code: Alles auswählen

								// BEGIN: Topic in "Who is online"
								preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
								preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
								if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
								{
									$location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
									$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
								}
								else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
								{
									$location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page[1]]]);
									$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
								}
								else
								{
									$location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
								}
								// END: Topic in "Who is online"
Finde:

Code: Alles auswählen

						$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
Ersetze mit:

Code: Alles auswählen

						// BEGIN: Topic in "Who is online"
						preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
						preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
						if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
						{
							$location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
							$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
						}
						else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
						{
							$location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page_p[1]]]);
							$location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
						}
						else
						{
							$location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
						}
						// END: Topic in "Who is online"
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Topic in "Who is online" nur für Admin?

Beitrag von WileCoyote »

Ersetzte

Code: Alles auswählen

$view_online = ($auth->acl_get('u_viewonline')) ? true : false;
mit

Code: Alles auswählen

$view_online = ($auth->acl_get('a_')) ? true : false;
Gruß WileCoyote
LisaserstesForum
Mitglied
Beiträge: 996
Registriert: 28.08.2008 20:20
Wohnort: Kassel

Re: Topic in "Who is online" nur für Admin?

Beitrag von LisaserstesForum »

Hi WileCoyote, danke für die Antwort, leider sehen die normalen User es immer noch. (Cache wurde natürlich geleert)
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: Topic in "Who is online" nur für Admin?

Beitrag von HabNurNeFrage »

Ich verstehe es so:
Die Mod verändert die viewonline Ansicht komplett von "User x macht dies und jenes in Forum so und so" zu "User x macht dies und jenes in Thema so und so".
Daher bekommt nun jeder, der überhaupt Zugriff auf viewonline hat, nun diese veränderte Version zu Gesicht. Daran ändert auch die kleine Modifikation der Auth-Variablen nichts.

Lösungsansatz 1: Usern den Zugang zu viewonline komplett verwehren. Einfach umsetzbar, aber nicht gewünscht und einige User werden sich beschweren.
(Falls gewünscht, hier die Vorgehensweise: viewtopic.php?f=74&t=200170 )

Lösungsansatz 2: Beide Versionen von viewonline.php vorhalten und über die Template-Datei eine Auswahl treffen, dass für bestimmte Gruppen oder Rollen entweder die eine oder die andere Version verlinkt wird. So könnte man eine viewonline.php (original Version) für alle und eine admin_viewonline.php (gemoddete Version) im Root ablegen und im Template auf der index_body.html per Abfrage unterschiedliche Verlinkungen für User und Admins/Mods ausgeben lassen.

Anm. zu meiner Lösung: Wer den Namen der zusätzlichen viewonline.php errät, könnte per Direkteingabe der URL trotzdem darauf zugreifen. Meiner Meinung reicht es hier aber, einen schwer zu erratenden Dateinamen zu verwenden, da ein eventueller Zugriff eines registrierten Users ja auch keinen Beinbruch darstellen würde.

Diesen Teil in der index_body.html würde ich dazu anpassen wollen:
<!-- IF U_VIEWONLINE --><h4><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h4><!-- ELSE --><h4>{L_WHO_IS_ONLINE}</h4><!-- ENDIF -->

Folgendes funktioniert nicht, veranschaulicht aber meinen Denkansatz:

Code: Alles auswählen

<!-- IF U_VIEWONLINE and U_ACP or U_MCP--><h4><a href="./hxz34_viewonline.php">{L_WHO_IS_ONLINE}</a></h4>
<!-- ELSEIF U_VIEWONLINE and U_UCP--><h4><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h4>
<!-- ELSE --><h4>{L_WHO_IS_ONLINE}</h4><!-- ENDIF --><!-- ENDIF -->
Hoffentlich ist mein Ansatz nicht völlig daneben :oops:
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
LisaserstesForum
Mitglied
Beiträge: 996
Registriert: 28.08.2008 20:20
Wohnort: Kassel

Re: Topic in "Who is online" nur für Admin?

Beitrag von LisaserstesForum »

Hi HabNurNeFrage, danke für deine Antwort. Eine zweite viewonline.php möchte ich eigentlich nicht und den Userns die Liste sperren möchte ich auch nicht.

Ich habe leider so gut wie keine PHP-Kentnisse, aber ich hab jetzt mal den Code von einer ähnlichen MOD angeschaut und möchte euch fragen, ob es nicht so gehen würde:
(Im Beispiel nehme ich den letzten Code, da er nicht so lang ist)

Das ist die Installationsanleitung:
Finde:

Code: Alles auswählen

                      $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']); 
Ersetze mit:

Code: Alles auswählen

                      // BEGIN: Topic in "Who is online"
                      preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
                      preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
                      if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
                      {
                         $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
                         $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
                      }
                      else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
                      {
                         $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page_p[1]]]);
                         $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
                      }
                      else
                      {
                         $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                      }
                      // END: Topic in "Who is online"    
Anstatt den Code zu ersetzen kann ich da nicht ein if ($auth->acl_get('a_')){ öffnen, dort den Code aus der Installanleitung einfügen und nach else{ den Original-Code einfügen und somit erhalten?
Also so:

Code: Alles auswählen

                 if ($auth->acl_get('a_')){
                          // BEGIN: Topic in "Who is online"
                          preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
                          preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
                          if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
                          {
                             $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
                             $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
                          }
                          else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
                          {
                             $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page_p[1]]]);
                             $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
                          }
                          else
                          {
                             $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                          }
                          // END: Topic in "Who is online"
                           }
                          else{
                          $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                           }
LisaserstesForum
Mitglied
Beiträge: 996
Registriert: 28.08.2008 20:20
Wohnort: Kassel

Re: Topic in "Who is online" nur für Admin?

Beitrag von LisaserstesForum »

Damit hat es geklappt, falls es irgendwann mal jemand braucht, hier ist die Anleitung für die MOD, wenn sie nur für den Admin sichtbar sein soll:

Topic in "Who is online" only for admin

viewonline.php
Finde:

Code: Alles auswählen

$logged_visible_online = $logged_hidden_online = $counter = 0;
Danach einfügen:

Code: Alles auswählen

// BEGIN: Topic in "Who is online"
if ($auth->acl_get('a_')){
$topic_ids = $post_ids = $topic_post_ids = $topic_titles = array();
while ($row = $db->sql_fetchrow($result))
{
    if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']]))
    {
        $view_online = false;
        if (!$row['session_viewonline'])
        {
                    $view_online = ($auth->acl_get('u_viewonline')) ? true : false;
        }
        else
        {
            $view_online = true;
        }

        $prev_id[$row['user_id']] = 1;

        if (!$view_online)
        {
            continue;
        }
    }
    else if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']]))
    {
        $prev_ip[$row['session_ip']] = 1;
    }
    else
    {
        continue;
    }

    preg_match('#^([a-z/]+)#i', $row['session_page'], $on_page);
    if (!sizeof($on_page))
    {
        $on_page[1] = '';
    }
    if (!in_array($on_page[1], array('viewtopic', 'posting')))
    {
        continue;
    }

    preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
    if (sizeof($on_page))
    {
        $topic_ids[] = $on_page[1];
        continue;
    }

    preg_match('#p=([0-9]+)#', $row['session_page'], $on_page);
    if (sizeof($on_page))
    {
        $post_ids[] = $on_page[1];
        continue;
    }
}

unset($prev_id, $prev_ip);

if (sizeof($topic_ids) || sizeof($post_ids))
{
    if (sizeof($post_ids))
    {
        $sql = 'SELECT topic_id, post_id FROM ' . POSTS_TABLE . ' WHERE ' . $db->sql_in_set('post_id', $post_ids);
        $post_result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($post_result))
        {
            $topic_post_ids[$row['post_id']] = $row['topic_id'];
            $topic_ids[] = $row['topic_id'];
        }
        $db->sql_freeresult($post_result);
    }

    $sql = 'SELECT topic_id, topic_title FROM ' . TOPICS_TABLE . ' WHERE ' . $db->sql_in_set('topic_id', array_unique($topic_ids));
    $topic_result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($topic_result))
    {
        $topic_titles[$row['topic_id']] = $row['topic_title'];
    }
    $db->sql_freeresult($topic_result);
}

$db->sql_rowseek(0, $result);
}
// END: Topic in "Who is online"  
Finde:

Code: Alles auswählen

                                $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
Ersetze mit:

Code: Alles auswählen

                                // BEGIN: Topic in "Who is online"
                                if ($auth->acl_get('a_')){
                                preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
                                preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
                                if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
                                {
                                    $location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
                                    $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
                                }
                                else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
                                {
                                    $location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page[1]]]);
                                    $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
                                }
                                else
                                {
                                    $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                                }
                                }
                                else{
                                $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                                }
                                // END: Topic in "Who is online"  
Finde:

Code: Alles auswählen

                        $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
Ersetze mit:

Code: Alles auswählen

                        // BEGIN: Topic in "Who is online"
                        if ($auth->acl_get('a_')){
                        preg_match('#t=([0-9]+)#', $row['session_page'], $on_page);
                        preg_match('#p=([0-9]+)#', $row['session_page'], $on_page_p);
                        if (sizeof($on_page) && isset($topic_titles[$on_page[1]]))
                        {
                            $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$on_page[1]]);
                            $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&t=' . $on_page[1]);
                        }
                        else if (sizeof($on_page_p) && isset($topic_post_ids[$on_page_p[1]]))
                        {
                            $location = sprintf($user->lang['READING_TOPIC_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page_p[1]]]);
                            $location_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $forum_id . '&p=' . $on_page_p[1]);
                        }
                        else
                        {
                            $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                        }
                        }
                        else{
                        $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                        }
                        // END: Topic in "Who is online"  

language/en/common.php
Finde:

Code: Alles auswählen

    'READING_TOPIC'                =>
Danach einfügen:

Code: Alles auswählen

    'READING_TOPIC_TOPIC'        => 'Liest Thema "%2$s" in %1$s',
Finde:

Code: Alles auswählen

    'REPLYING_MESSAGE'            =>
Danach einfügen:

Code: Alles auswählen

    'REPLYING_MESSAGE_TOPIC'    => 'Beantwortet Thema "%2$s" in %1$s',
Beide Dateien speichern, hochladen, Cache leeren.
Antworten

Zurück zu „[3.0.x] Mod Support“