Topic in WHO IS ONLINE

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
Benutzeravatar
Maugrim
Mitglied
Beiträge: 461
Registriert: 16.11.2009 20:22

Topic in WHO IS ONLINE

Beitrag von Maugrim »

Hallo!

Ich habe mir obige Mod installiert.
Läuft auch gut!


Allerdings hat er einen kleinen Bug (oder ich habe was falsch eingebaut? kA)

Funktionsweise.

wenn man auf Wer ist Online clickt, kann man sehen in WELCHEN Foren oder Themen sich die User aufhalten, und wo sie gerade eine Antwort schreiben

Wenn man nur eine reguläre Antwort erstellt, steht auch in Wer ist Online (Schreibt eine Nachricht im Thema (NAME DES THEMAS) ...)
Wenn man aber auf ändern oder zitieren clickt, dann steht nur folgendes (Schreibt eine Nachricht im Thema ...) Also der Name des Themas wird nicht angezeigt

Was kann da fehlen, damit es bei den beiden auch umgesetzt wird?


Code:
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"
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Topic in WHO IS ONLINE

Beitrag von BNa »

Maugrim hat geschrieben:Wenn man aber auf ändern oder zitieren clickt, dann steht nur folgendes (Schreibt eine Nachricht im Thema ...) Also der Name des Themas wird nicht angezeigt
Klar, weil der Mod nicht die posting.php > mode > was_auch_immer berücksichtigt und dafür auch nicht gemacht ist.
Benutzeravatar
Maugrim
Mitglied
Beiträge: 461
Registriert: 16.11.2009 20:22

Re: Topic in WHO IS ONLINE

Beitrag von Maugrim »

Danke ;)

Er wird aber in die mode= case eingebaut
der untere Codeblock wird direkt hinter diesem Teil eingebaut

case 'reply':
case 'quote':

Ich hab aber den Fehler schon selbst gefunden

im zweiten Code-Snippet muss es statt

Code: Alles auswählen

$location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page[1]]]);

Code: Alles auswählen

$location = sprintf($user->lang['REPLYING_MESSAGE_TOPIC'], $forum_data[$forum_id]['forum_name'], $topic_titles[$topic_post_ids[$on_page_p[1]]]);
heissen
jetzt werden auch die Namen der Beiträge angezeigt!


Da man aber beim mode=reply nur zum ersten Beitrag gelinkt wird, bei den cases edit und quote aber ein spezieller Beitrag vorhanden ist, muss man noch folgende Änderung vornehmen

vorher

Code: Alles auswählen

$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]);
nachher

Code: Alles auswählen

$location = sprintf($user->lang['REPLYING_MESSAGE_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] . '#p' .$on_page_p[1]);


Und wenn man so wie ich, es ein wenig ordentlicher haben will, dann macht man für alle drei cases eine eigene Abfrage. Damit bei allen dreien auch eine eigene Beschreibung ausgegeben wird (beim Antworten, steht Schreibt einen Beitrag, beim Zitieren steht Zitiert einen Beitrag, und beim Ändern steht Bearbeitet einen Beitrag)

Ob das jetzt aber Codetechnisch die beste Lösung ist, weiß ich nicht, bin ja kein php Programmierer. Falls es eine elegantere Lösung gibt, würde ich mich über einen Tip freuen :)


der komplette Code, wie ich ihn jetzt habe:

Code: Alles auswählen

		case 'posting':
		case 'viewforum':
		case 'viewtopic':
			$forum_id = $row['session_forum_id'];

			if ($forum_id && $auth->acl_get('f_list', $forum_id))
			{
				$location = '';
				$location_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id);

				if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK)
				{
					$location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']);
					break;
				}

				switch ($on_page[1])
				{
					case 'posting':
						preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
						$posting_mode = (!empty($on_page[1])) ? $on_page[1] : '';

						switch ($posting_mode)
						{
							case 'reply':
                            
                            // 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_p[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"
                            
							break;
              
							case 'quote':
                                       
                            // 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['QUOTING_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['QUOTING_MESSAGE_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] . '#p' .$on_page_p[1]);
                            }
                            else
                            {
                               $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                            }
                            // END: Topic in "Who is online"
                            
							break;
              
              case 'edit':
                         
                            // 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['EDITING_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['EDITING_MESSAGE_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] . '#p' .$on_page_p[1]);
                            }
                            else
                            {
                               $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                            }
                            // END: Topic in "Who is online"
                            
							break;                            

							default:
								$location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
							break;
						}
					break;
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Topic in WHO IS ONLINE

Beitrag von BNa »

Maugrim hat geschrieben:Und wenn man so wie ich, es ein wenig ordentlicher haben will, dann macht man für alle drei cases eine eigene Abfrage.
Das werden wir zukünftig bei solchen Abfragen per default machen zB. in der nächsten Version von dem hier, weils einfach mal ordentlicher ist. Sehr schön, so hast Du einen syntaktischen Fehler entdeckt und das ganze mal angeschoben.
Benutzeravatar
zx9r-treiber
Mitglied
Beiträge: 1401
Registriert: 05.10.2007 16:26
Wohnort: Moormerland
Kontaktdaten:

Re: Topic in WHO IS ONLINE

Beitrag von zx9r-treiber »

Es wäre ja schön gewesen wenn man dazu geschrieben hätte um welchen Mod es genau geht ..... es gib wohl mehrere mit dem Titel = who is online

Betrifft die Aussage nun den Mod

NV "Who was here?"
Autor =nickvergessen
Installierte = Version1.2.1
Aktuelle = Version1.2.1

denn dort ist es genau so mit der (ungenauen Angabe) wo betroffener User gerade ist oder schreibt.
Gruß
M&K (Michael & Kathy)
"Unser Problem ist auch nicht die Globale Erwärmung ..... sondern die Globale Verblödung!"
Benutzeravatar
Maugrim
Mitglied
Beiträge: 461
Registriert: 16.11.2009 20:22

Re: Topic in WHO IS ONLINE

Beitrag von Maugrim »

Der Mod heisst: Topic in Who is Online

...
Benutzeravatar
zx9r-treiber
Mitglied
Beiträge: 1401
Registriert: 05.10.2007 16:26
Wohnort: Moormerland
Kontaktdaten:

Re: Topic in WHO IS ONLINE

Beitrag von zx9r-treiber »

Also ein eigenständiger Mod. Danke, ich werde ihn beobachten und wenn die vorgeschlagenen Änderungen aufgenommen sind auch bestimmt einbauen und versuchen ihn auch unter Subsilver2 ans laufen zu bekommen. :D
Gruß
M&K (Michael & Kathy)
"Unser Problem ist auch nicht die Globale Erwärmung ..... sondern die Globale Verblödung!"
Benutzeravatar
Maugrim
Mitglied
Beiträge: 461
Registriert: 16.11.2009 20:22

Re: Topic in WHO IS ONLINE

Beitrag von Maugrim »

der von BNa hat imo mehr als "nötig"
Weil wie oft kommt es schon vor, dass jemand eine Datei hochläd oder runterläd, oder einen Beitrag meldet?

Ich hab nur die vier Fälle

Lesen, Antworten, Bearbeiten, Zitieren

wenn er aber mal fertig ist, werde ich ihn gegenenfalls statt dem einbauen, welchen ich zZ drin hab. Wenn er Codesparender geschrieben ist (wovon ich mal ausgehe)
ich muss ja nicht ALLE Änderungen vornehmen
Antworten

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