User sperren und im forum "gesperrt" anzeigen

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt um einen neuen Mod zu entwicklen, geht's in phpBB 2.0: Mods in Entwicklung weiter.
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.
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Hallo Flüchtling,

admin_user_bantron.php
Find:

Code: Alles auswählen

		foreach ($HTTP_POST_VARS['ban_delete'] as $ban_id) {
Add, after:

Code: Alles auswählen

			$sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
						" WHERE ban_id = $ban_id"; 
            if ( !($result = $db->sql_query($sql)) ) 
            { 
               message_die(GENERAL_ERROR, "Couldn't gain userid of the unbanned user", "", __LINE__, __FILE__, $sql); 
            }
			
			$unban = $db->sql_fetchrow($result); 
         $sql = "UPDATE ". USERS_TABLE ." 
                     SET user_rank = user_oldrank 
                     WHERE user_id = ". $unban['ban_userid']; 
         if ( !$db->sql_query($sql) ) 
         { 
            message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql); 
         }
Probier's mal aus, habe es selbst noch nicht getestet...


roger
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Ahoi roger,

ich kann einen Teilerfolg vermelden - vielen Dank!

Also wenn ich mit dem Bantron einen User dauerhaft ("für immer") sperre und dann entsperre, klappt alles prächtig: Der Rang ändert sich zunächst auf "gesperrt", und schließlich wieder in den ursprünglichen Rang zurück.

Nur wenn ich einen User für z.B. zwei Minuten sperre, steht nach Ablauf der zwei Minuten trotzdem noch "gesperrt" unter seinem Benutzernamen. Ich vermute mal, dass das mit dem session.php-Teil des Mods zusammenhängt:

Code: Alles auswählen

#
#-----[ OPEN ]------------------------------------------
#
includes/sessions.php

#
#-----[ FIND ]------------------------------------------
#
	$sql = "SELECT ban_ip, ban_userid, ban_email

#
#-----[ REPLACE WITH ]------------------------------------------
#
	$sql = "SELECT ban_ip, ban_userid, ban_email, ban_email, ban_expire_time, ban_priv_reason, ban_pub_reason_mode, ban_pub_reason

#
#-----[ FIND ]------------------------------------------
#
		if ( $ban_info['ban_ip'] || $ban_info['ban_userid'] || $ban_info['ban_email'] )

#
#-----[ REPLACE WITH ]------------------------------------------
#
		if ( ($ban_info['ban_expire_time'] > time()) || (($ban_info['ban_userid']) && (!$ban_info['ban_expire_time'])) || $ban_info['ban_ip'] || $ban_info['ban_email'] )

#
#-----[ FIND ]------------------------------------------
#
			message_die(CRITICAL_MESSAGE, 'You_been_banned');

#
#-----[ REPLACE WITH ]------------------------------------------
#
			if ($ban_info['ban_pub_reason_mode'] == '0' || !isset ($ban_info['ban_pub_reason_mode'])) {
				$reason = 'You_been_banned';
			} else if ($ban_info['ban_pub_reason_mode'] == '1') {
				$reason = str_replace ("\n", '<br />', stripslashes ($ban_info['ban_priv_reason']));
			} else if ($ban_info['ban_pub_reason_mode'] == '2') {
				$reason = str_replace ("\n", '<br />', stripslashes ($ban_info['ban_pub_reason']));
			}

			message_die(CRITICAL_MESSAGE, $reason, "Das Forenteam teilt Ihnen mit:");
Irgendwie müsste hier noch der 2. Teil von Tekins und Deinem Snippet eingebaut werden. (Vorausgesetzt, die Vermutung mit der sessions.php ist überhaupt richtig.)

Danke noch einmal für Deine Hilfe! Wenn Du auch noch eine Idee zur Lösung des letzten verbliebenen Problems hättest... :oops:

LG, IPB_Flüchtling
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Das ist nicht das Problem, - das Problem ist, dass beim "Ban per Zeit" keine automatische Rückstellung erfolgt, - es wird lediglich abgefragt, ob die Zeit quasi abgelaufen ist...

Setz mich dann noch einmal dran...


roger
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Hallo Flüchtling,

probier mal folgendes:


viewtopic.php:

Find:

Code: Alles auswählen

$sql = "SELECT u.username, u.user_id, u.user_posts, u.user_from, u.user_website, u.user_email, u.user_icq, u.user_aim, u.user_yim, u.user_regdate, u.user_msnm, u.user_viewemail, u.user_rank, u.user_sig, u.user_sig_bbcode_uid, u.user_avatar, u.user_avatar_type, u.user_allowavatar, u.user_allowsmile, p.*,  pt.post_text, pt.post_subject, pt.bbcode_uid
Find, inline:

Code: Alles auswählen

u.user_rank,
Add, after:

Code: Alles auswählen

u.user_oldrank,
Find:

Code: Alles auswählen

	if ( $postrow[$i]['user_id'] == ANONYMOUS )
	{
	}
	else if ( $postrow[$i]['user_rank'] == 99)
Add, before:

Code: Alles auswählen

	
	if ( $postrow[$i]['user_rank'] == 99)
	{
		$sql = "SELECT ban_id, ban_userid, ban_expire_time FROM ". BANLIST_TABLE ."
					WHERE ban_userid = ". $postrow[$i]['user_id']; 
        if ( !($result = $db->sql_query($sql)) ) 
        { 
            message_die(GENERAL_ERROR, "Couldn't gain userid of the banned user", "", __LINE__, __FILE__, $sql); 
        }
			
		$unban = $db->sql_fetchrow($result); 
		$ban_id = $unban['ban_id'];
			
		if ( $unban['ban_expire_time'] < time() )
		{
			$postrow[$i]['user_rank'] = $postrow[$i]['user_oldrank'];
						
			$sql = "UPDATE ". USERS_TABLE ." 
						SET user_rank = user_oldrank 
						WHERE user_id = ". $unban['ban_userid']; 
			if ( !$db->sql_query($sql) ) 
			{ 
				message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql); 
			}
				
			$sql = "DELETE FROM ". BANLIST_TABLE ." WHERE ban_id = $ban_id";
			if (!$db->sql_query ($sql)) 
			{
				message_die (GENERAL_ERROR, "Couldn't delete selected bans from database", "", __LINE__, __FILE__, $sql);
			}
		}
	}
Ich hoffe, es klappt, - noch nicht selbst getestet...


roger
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Tausend Dank, roger! :P

Deine Lösung funktioniert in der Tat! Folgendes habe ich beobachtet: Nach Ablauf der Sperrzeit erhält der gesperrte User in der Viewtopic-Ansicht zunächst einen falschen Rang (den niedrigsten Rang, den es in meinem Forum gibt). Lädt man die Seite dann mit F5 erneut, hat der automatisch entsperrte User wieder seinen ursprünglichen Rang. Also kein Problem.

Zweite Beobachtung: Pro Viewtopic-Seitenaufruf steigt die Anzahl der Queries um 3. Es muss jeder selbst entscheiden, ob er das in Kauf nehmen möchte.

Ich für meinen Teil bedanke mich vielmals!

LG, IPB_Flüchtling
Benutzeravatar
roger
Mitglied
Beiträge: 565
Registriert: 30.10.2002 21:32
Wohnort: Bavaria D.C.

Beitrag von roger »

Hallo IPB_Flüchtling,

das freut mich natürlich, dass es funktioniert..., wobei ich mir aber die erste Beobachtung nicht erklären kann...

Die Queries erhöhen sich im Prinzip nur pro gebannten User...


roger
IPB_Flüchtling
Mitglied
Beiträge: 1862
Registriert: 23.12.2004 22:46

Beitrag von IPB_Flüchtling »

Ahoi,

ich habe noch einen Fehler gemacht beim Einbau von Tekins Snippet in den Bantron-Mod, genauer gesagt in die admin_user_bantron.php.

Und zwar kommt es zu einem Fehler, wenn ich

1. einen User für 5 Minuten sperre
2. innerhalb dieser 5 Minuten im Bantron auf "Bearbeiten" der Sperre klicke
3. die Sperrzeit von 5 Minuten auf "immer" ändere

So sieht der Fehler aus:
Couldn't set banrank on the banned user

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

UPDATE phpbb_users SET user_oldrank = user_rank, user_rank = '99' WHERE user_id =

Line : 209
File : admin_user_bantron.php
Zur Behebung des Fehlers mache - wenn Du die in diesem Beitrag beschriebenen Änderungen nachvollzogen hast - in der admin_user_bantron.php folgendes:

SUCHE:

Code: Alles auswählen

      if (!$db->sql_query ($sql)) { 
         message_die (GENERAL_ERROR, "Couldn't update ban information", "", __LINE__, __FILE__, $sql); 
      }
         $banrank = 99; // Hier die ID des Spezialranges einsetzen, den gebannte User erhalten sollen. 
         // Setzen des neuen Spezialranges für den gebannten User 
         $sql = "UPDATE ". USERS_TABLE ." 
                     SET user_oldrank = user_rank, user_rank = '$banrank' 
                     WHERE user_id = ". $user_list[$i]; 
         if ( !$db->sql_query($sql) ) 
         { 
            message_die(GENERAL_ERROR, "Couldn't set banrank on the banned user", "", __LINE__, __FILE__, $sql); 
         }
ERSETZE DURCH:

Code: Alles auswählen

		if (!$db->sql_query ($sql)) {
			message_die (GENERAL_ERROR, "Couldn't update ban information", "", __LINE__, __FILE__, $sql);
		}

			// Experiment
         $sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
                  " WHERE ban_id = " . $HTTP_POST_VARS['ban_id'];
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, "Couldn't gain userid of the banned user", "", __LINE__, __FILE__, $sql);
            }
         $ban_update = $db->sql_fetchrow($result);

         $banrank = 99; // Hier die ID des Spezialranges einsetzen, den gebannte User erhalten sollen.
         // Setzen des neuen Spezialranges für den gebannten User
         $sql = "UPDATE ". USERS_TABLE ."
                     SET user_oldrank = user_rank, user_rank = '$banrank'
                     WHERE user_id = ". $ban_update['ban_userid'];
         if ( !$db->sql_query($sql) )
         {
            message_die(GENERAL_ERROR, "Couldn't set banrank on the banned user", "", __LINE__, __FILE__, $sql);
         }
Wenn man solche Änderungen in Bezug auf die Sperrzeit durchführt, hat es aber zur Folge, dass sowohl beim user_rank als auch beim user_oldrank 99 eingetragen wird. In der Folge erhält der User bei der Entsperrung nicht mehr seinen alten Rang zurück.

Da aber zumindest ich nicht mit Rängen sondern mit Usergruppen arbeite und diesbezüglich einige Mods eingebaut habe, hilft ein einfacher Trick: Beim Entsperren wird nicht mehr der alte Rang wieder hergestellt, sondern der entsperrte User erhält im Feld user_rank einfach den Wert 0: In der Folge erscheint unter seinem Namen wieder der Rang, der mit der Usergruppe des Entsperrten assoziiert wird.

So sieht die Änderung in rogers Code dafür aus:

admin_user_bantron.php

SUCHE

Code: Alles auswählen

		foreach ($HTTP_POST_VARS['ban_delete'] as $ban_id) {

	         $sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
                  " WHERE ban_id = $ban_id";
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, "Couldn't gain userid of the unbanned user", "", __LINE__, __FILE__, $sql);
            }
         $unban = $db->sql_fetchrow($result);
         $sql = "UPDATE ". USERS_TABLE ."
                     SET user_rank = user_oldrank
                     WHERE user_id = ". $unban['ban_userid'];

         if ( !$db->sql_query($sql) )
         {
            message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql);
         }
ERSETZE DURCH:

Code: Alles auswählen

		foreach ($HTTP_POST_VARS['ban_delete'] as $ban_id) {

		// Alter Rang für User, die über Bantron wieder entbannt werden
         $sql = "SELECT ban_userid FROM ". BANLIST_TABLE .
                  " WHERE ban_id = $ban_id";
            if ( !($result = $db->sql_query($sql)) )
            {
               message_die(GENERAL_ERROR, "Couldn't gain userid of the unbanned user", "", __LINE__, __FILE__, $sql);
            }
         $unban = $db->sql_fetchrow($result);
//         $sql = "UPDATE ". USERS_TABLE ."
//                     SET user_rank = user_oldrank
//                     WHERE user_id = ". $unban['ban_userid'];
         $sql = "UPDATE ". USERS_TABLE ."
                     SET user_rank = 0
                     WHERE user_id = ". $unban['ban_userid'];
         if ( !$db->sql_query($sql) )
         {
            message_die(GENERAL_ERROR, "Couldn't set normal rank on the unbanned user", "", __LINE__, __FILE__, $sql);
         }
         // Alter Rang für User, die über Bantron wieder entbannt werden
Hier ist die komplette Datei: admin_user_bantron.php

Ist alles ein bisschen verwirrend. Aber zumindest bei mir klappt es nun. Da ich aber etliche Mods eingebaut habe, die in dieses System eingreifen, weiß ich nicht, inwieweit es auch bei anderen klappen könnte.

Dir noch einmal danke für die Hilfe, roger!

LG, IPB_Flüchtling

EDIT: Irgendwie vermute ich, dass ich überhaupt keinen user_oldrank benötige. Wenn jemand gesperrt wird, erhält er den user_rank 99 und die Anzeige "gesperrt". Wird jemand wieder entsperrt, erhält er den user_rank 0. Zumindest bei mir ist das so. Habe aber, wie gesagt, einige Mods eingebaut.
Antworten

Zurück zu „phpBB 2.0: Mod Suche/Anfragen“