MOD COLOR GROUPS - Fehler nur wenn Board deaktiviert ist.

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

MOD COLOR GROUPS - Fehler nur wenn Board deaktiviert ist.

Beitrag von Dr.Death »

Hallo PHP Freaks,

ich habe ein kleine Problem mit dem Color Groups MOD.

Das MOD ansich arbeitet einwandfrei (keine Fehlermeldungen).


Folgender Fehler tritt nur dann auf, wenn ich das Board zwecks Wartungsarbeiten sperren möchte (Board Disabled).


Warning: in_array(): Wrong datatype for second argument in /pfad-vom-anbieter/forum/includes/functions_color_groups.php on line 260

Auszug aus der functions_color_groups.php

Ab Zeile 260:

Code: Alles auswählen

			if ( in_array($user_id, $colorgroup) )
			{
				// Now start looking for user group memberships //
				$sql = 'SELECT c.* FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u, ' . COLOR_GROUPS_TABLE . ' c, ' . GROUPS_TABLE . ' g
					WHERE ug.user_id = ' . $user_id . '
					AND u.user_id = ug.user_id
					AND ug.group_id = g.group_id
					AND g.group_color_group = c.group_id
					AND g.group_single_user = 0';

Kann mir jemand dazu helfen?

Doc.
Benutzeravatar
Andy120
Mitglied
Beiträge: 3430
Registriert: 02.01.2004 11:21
Wohnort: Basel (Schweiz)
Kontaktdaten:

Beitrag von Andy120 »

hi...

Hast du etwas in diese Datei eingebaut? Wenn nicht lad mal eine neue rauf. Dieser Code da stimmt nicht.

Ausser eben du hast was einbauen wollen.

Gruss, Andy
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Danke für den Hinweis!

Ich habe mal die "original" Datei hochgeladen...und siehe da: der Fehler ist verschwunden.

Ich hatte folgende Code Verbesserung von ACID eingebaut:

http://www.acidjunky.de/files/color_gro ... ueries.txt

Nun bin ich wieder auf über 300 SQL Queries pro Index.php aufruf.
Mit der Code verbesserung lag ich bei knapp 100.

Gibt es vielleicht doch noch eine andere Lösung?
Acid?


Mfg
Doc.
Benutzeravatar
Andy120
Mitglied
Beiträge: 3430
Registriert: 02.01.2004 11:21
Wohnort: Basel (Schweiz)
Kontaktdaten:

Beitrag von Andy120 »

hi....

Suche

Code: Alles auswählen

function color_group_colorize_name($user_id, $no_profile = false)
{
	global $board_config, $phpEx, $db, $phpbb_root_path;

	// First see if the user is Anon
	if ($user_id != ANONYMOUS)
	{
		// Get the user info and see if they are assigned a color_group //
		$sql = 'SELECT u.user_color_group, u.username, c.* FROM ' . USERS_TABLE . ' u, ' . COLOR_GROUPS_TABLE . " c
			WHERE u.user_id = $user_id
			AND u.user_color_group = c.group_id";
		$result = $db->sql_query($sql);
		$row = $db->sql_fetchrow($result);

		if (!isset($row['username']))
		{
			//If there was a problem before, we don't want a blank username!
			$sql = 'SELECT username FROM ' . USERS_TABLE . "
			WHERE user_id = $user_id";
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);
		}
		$username = $row['username'];

		if (isset($row['group_color']))
		{
			// WE found the highest level color, head out now //
			$style_color = 'style="font-weight:bold;color:' . $row['group_color'] . '"';
		}
		else
		{
			// Now start looking for user group memberships //
			$sql = 'SELECT c.* FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u, ' . COLOR_GROUPS_TABLE . ' c, ' . GROUPS_TABLE . ' g
				WHERE ug.user_id = ' . $user_id . '
				AND u.user_id = ug.user_id
				AND ug.group_id = g.group_id
				AND g.group_color_group = c.group_id
				AND g.group_single_user = 0';
			//print $sql;
				$result = $db->sql_query($sql);
				$curr = 10000000000000;
				$style_color = '';
				while ($row = $db->sql_fetchrow($result))
				{
					// If our new group in the list is a higher order number, it's color takes precedence //
					if ($row['order_num'] < $curr)
					{
						$curr = $row['order_num'];
						$style_color = 'style="font-weight:bold;color:' . $row['group_color'] . '"';
					}
				}
		}

		// Make the profile link or no and return it //
		if ($no_profile)
		{
			$user_link = "<span $style_color>$username</span>";
		}
		else
		{
			$user_link = '<a href="' . append_sid($phpbb_root_path."profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id") . '"' . $style_color .'>' . $username . '</a>';
		}
		return($user_link);
	}
	else
	{
		return false;
	}
}
Ersetze

Code: Alles auswählen

function color_group_colorize_name($user_id, $no_profile = false)
{
	global $board_config, $phpEx, $db, $phpbb_root_path, $colorusers, $coloruname, $colorgroup;
	
	// First see if the user is Anon
	if ($user_id != ANONYMOUS)
	{
		$username = $coloruname[$user_id];
		if ( $colorusers[$user_id] != 0 )
		{
			// Get the user info and see if they are assigned a color_group //
			$sql = 'SELECT u.user_color_group, u.username, c.* FROM ' . USERS_TABLE . ' u, ' . COLOR_GROUPS_TABLE . " c
				WHERE u.user_id = $user_id
				AND u.user_color_group = c.group_id";
			$result = $db->sql_query($sql);
			$row = $db->sql_fetchrow($result);

		}
		
		if (isset($row['group_color']))
		{
			// WE found the highest level color, head out now //
			$style_color = 'style="font-weight:bold;color:' . $row['group_color'] . '"';
		}
		else
		{
			if ( in_array($user_id, $colorgroup) )
			{
				// Now start looking for user group memberships //
				$sql = 'SELECT c.* FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u, ' . COLOR_GROUPS_TABLE . ' c, ' . GROUPS_TABLE . ' g
					WHERE ug.user_id = ' . $user_id . '
					AND u.user_id = ug.user_id
					AND ug.group_id = g.group_id
					AND g.group_color_group = c.group_id
					AND g.group_single_user = 0';
				//print $sql;
					$result = $db->sql_query($sql);
					$curr = 10000000000000;
					$style_color = '';
					while ($row = $db->sql_fetchrow($result))
					{
						// If our new group in the list is a higher order number, it's color takes precedence //
						if ($row['order_num'] < $curr)
						{
							$curr = $row['order_num'];
							$style_color = 'style="font-weight:bold;color:' . $row['group_color'] . '"';
						}
					}
			}
		}
		
		// Make the profile link or no and return it //
		if ($no_profile)
		{
			$user_link = "<span $style_color>$username</span>";
		}
		else
		{
			$user_link = '<a href="' . append_sid($phpbb_root_path."profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$user_id") . '"' . $style_color .'>' . $username . '</a>';
		}
		return($user_link);
	}
	else
	{
		$username = $coloruname[$user_id];
		if ($no_profile)
		{
			$user_link = "<span $style_color>$username</span>";
		}
		else
		{
			$user_link = '<a href="' . append_sid($phpbb_root_path."profile.php?mode=viewprofile&" . POST_USERS_URL . "=$user_id") . '"' . $style_color .'>' . $username . '</a>';
		}
		return $username;
	}
}
Gruss, Andy
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Tja, was soll ich sagen....

jetzt hab ich den gleichen Fehler wie vorher :-(
Warning: in_array(): Wrong datatype for second argument in /pfad-vom-anbieter/forum/includes/functions_color_groups.php on line 274
die betreffende Zeile:

Code: Alles auswählen

      if ( in_array($user_id, $colorgroup) ) 

Der Fehler tritt nur dann auf, wenn ich das Board sperre.
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17476
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

Tadaa !

Ich hab den Fehler gerade selbst gefunden !!! ( *stolz* ) :-)

Der Fehler liegt an der Beschreibung von ACID:

http://www.acidjunky.de/files/color_gro ... ueries.txt

Dort wird die Änderung der COMMON.PHP beschrieben:

Code: Alles auswählen

#-----[ ÖFFNE ]------------------------------------------
#
# common.php
#
#-----[ FINDE ]------------------------------------------
#

?>

#
#-----[ DARÜBER EINFÜGEN ]------------------------------------------
#
$sql = "SELECT user_id, user_color_group, username FROM " . USERS_TABLE;
if( !($result = $db->sql_query($sql)) )   ... usw
Dummerweise werden dann die Variablen nicht eingelesen wenn das Board gesperrt wird.

Lösung:

Code: Alles auswählen

]#-----[ ÖFFNE ]------------------------------------------
#
# common.php
#
#-----[ FINDE ]------------------------------------------
//
// Show 'Board is disabled' message if needed.
//

#-----[ DARÜBER EINFÜGEN ]------------------------------------------
$sql = "SELECT user_id, user_color_group, username FROM " . USERS_TABLE;
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not read user color groups', '', __LINE__, __FILE__, $sql);
}

$colorusers = array();
$coloruname = array();
while ( $row = $db->sql_fetchrow($result) )
{
	$userid = $row['user_id'];
	$colorusers[$userid] = $row['user_color_group'];
	$coloruname[$userid] = $row['username'];
}

$colorgroup = array();

$sql = "SELECT ug.user_id FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
	WHERE g.group_single_user = 0
	AND g.group_id = ug.group_id
	GROUP BY ug.user_id
	ORDER BY ug.user_id";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not read user color groups', '', __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
	$colorgroup[] = $row['user_id'];
}
Vielleicht kann ja mal jemand die Anleitung updaten...
Benutzeravatar
rabbit
Ehemaliger Übersetzer
Beiträge: 4199
Registriert: 14.06.2003 22:09
Wohnort: Hildesheim
Kontaktdaten:

Beitrag von rabbit »

btw, guck' doch mal hier vorbei, dort findest du eine sehr gute alternative zum color groups von niels: Advanced Username Colors ;)
der AUC fügt nicht einen einzigen query zu deinem board hinzu. :)
Offizieller Übersetzer des Categories Hierarchy MOD 2.1.x
Deutscher UserGuide für den Categories Hierarchy MOD v2.1.4
Empfohlener Hoster: All-Inkl.com
Antworten

Zurück zu „phpBB 2.0: Mod Support“