Gelöschte User nicht als Gäste?

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Benutzeravatar
SethDeBlade
Beiträge: 708
Registriert: Mo 31.Mai, 2004 02:31
Kontaktdaten:

Gelöschte User nicht als Gäste?

Beitrag von SethDeBlade »

Ich hab da mal ne Frage.

Wenn ich einen User lösche, z.B. weil er null Postings hatte, dann ist es ja nicht weiter tragisch. Wenn nun aber ein User mehrere Postings geschrieben hat und seit X Monaten nicht mehr im Forum war, dann ist das Löschen ja nicht so toll. Der User wird gelöscht, und mit ihm auch die Zuordnung in den Postings. Wenn ich mehrere User lösche, dann weiß ich ja nicht mehr, welche Posts von wem sind, da ja bei den Posts jetzt Gast als Poster steht.

Meine Frage daher: Gibt es einen Mod, mit dem ich einstellen kann, wie mit gelöschten Usern umgehen möchte? Z.B. wenn der gelöschte User Fritz heißt, dann soll nach dem Löschen z.B. Fritz_gelöscht oder sowas erscheint. Gibt es sowas??
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ist mir nicht bekannt.
Sollte aber nicht das Problem sein, wenn man nur aus dem ACP raus lösche. Dann könnte man in allen Posts, die der User geschrieben hatte, den Nicknamen entsprechend ändern. Ist dann nur eine zusätzliche SQL-Anweisung mehr.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
SethDeBlade
Beiträge: 708
Registriert: Mo 31.Mai, 2004 02:31
Kontaktdaten:

Beitrag von SethDeBlade »

jo, habe ich mir auch gedacht, dass das nicht so schwer sein sollte. man könnte ja den username ändern evtl auch die profildaten löschen. Irgendwie müsste man verhindern, dass die User sich nicht mehr mit dem geänderten Namen einloggen können. Vielleicht kann man das ja so einrichten, dass User mit dem entsprechenden Zusatz sich nicht mehr einloggen können, oder man ändert beim "löschen" das Passwort in eine sehr lange kaum zu erratene Zeichenfolge.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oder Du deaktivierst den Account einfach, ohne ihn zu löschen. Dann kann er sich nicht einloggen und die Posts behalten noch die Original-Daten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
SethDeBlade
Beiträge: 708
Registriert: Mo 31.Mai, 2004 02:31
Kontaktdaten:

Beitrag von SethDeBlade »

hm, gute Sache das, ich benutze phpbb seit mindestens einem Jahr, aber wie man User deaktiviert habe ich bis jetzt noch nicht rausbekommen. Dass es so eine Funktion gibt, habe ich mir schon gedacht :-D :confused:
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn Du im ACP unter Benutzer > Einstellungen ein Profil aufruft, kannst Du ganz weit unten den Benutzer auf "inaktiv" setzen. Damit ist der Account gesperrt, bleibt aber erhalten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
SethDeBlade
Beiträge: 708
Registriert: Mo 31.Mai, 2004 02:31
Kontaktdaten:

Beitrag von SethDeBlade »

hm, genau lesen hat doch vorteile :-D

danke
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Kein Problem. Manchmal sehe auch ich den Wald vor lauter Bäumen nicht ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
skittles
Beiträge: 820
Registriert: So 04.Apr, 2004 01:07
Wohnort: Wien

Beitrag von skittles »

Ein kleiner Tipp:
Erstelle eine neue Gruppe zb. Fahnenflüchtige
oder sowas in der Richtung!
Dann stellst du bei dieser Gruppe alle Rechte auf 0.
Anschliessend verschiebst du alle User in diese Gruppe!

Ich mach dies nur so, weil eben fahnenflüchtige nicht wissen dürfen was im Forum geschrieben wird (Onlinegame), ansonsten würde ich da nichts machen in der Richtung! Immerhin stört es ka keinen oder?
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Und die Gruppe verstecken, damit diese auch keiner sieht.
Die Idee ist auch nicht schlecht.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
skittles
Beiträge: 820
Registriert: So 04.Apr, 2004 01:07
Wohnort: Wien

Beitrag von skittles »

Genau das hab ich vergessen zu erwähnen!
[center]Populanten von transparenten Domizilen sollten
mit fester Materie keine transzendenten Bewegungen durchf?hren.
[/center]


Bild
modbo
Beiträge: 1344
Registriert: Mo 13.Dez, 2004 11:18
Kontaktdaten:

Beitrag von modbo »

Wahrscheinlich hakt man mir hier bald die Finger spitz, wenn ich so alte postings raushole ^5

Eine ähnliche Variante ist ja, dass nicht der Admin den Account löscht, sondern der User selbst, gibt man ihm die Möglichkeit dazu *g*
Das geht z.B. mit diesem Mod: Account Self-Delete
Das funktioniert soweit auch. Ebenfalls habe ich vorher registriert, dass nach dem Löschen des Accounts "Gast" als Usernick gesetzt wird. Verstehen tu ich es nur nicht, denn, eigentlich müsste es im MOD schon drin sein, dass der Username erhalten bleibt:

Code: Alles auswählen

  $sql = "UPDATE " . POSTS_TABLE . "
    SET poster_id = " . DELETED . ", post_username = '$username'
    WHERE poster_id = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not update posts for this user', '', __LINE__, __FILE__, $sql);
  }
Die Zelle post_username exitiert in der DB, nur wird beim Löschen diese nicht gefüllt :confused:
Schreibt man den Nick von Hand hinein, ist alles ok.
Kann es sein, das $username zum Zeitpunkt des Löschens leer ist, bzw. nicht erkannt wird?

Ich hab von php, coden, skripten leider nicht den Durchblick. Da hilft auch eine Brille nicht.
Wäre dankbar, wenn sich jemand erbarmen würde vielleicht einmal drüberzuschauen ^d
Ich habs schon anderweitig versucht, zig mal die Suche bentzt, aber entweder kann, oder will man mir nicht weiterhelfen ... :(
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn Du uns etwas hilfst ;)
Wo genau muss denn dieser Code-Block eingebaut werden?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
modbo
Beiträge: 1344
Registriert: Mo 13.Dez, 2004 11:18
Kontaktdaten:

Beitrag von modbo »

Nicht erschrecken, dass ist die gesamte Install des Mods.

Der Part wird in der usercp_register.php in einem Block eingebaut

Code: Alles auswählen

############################################################## 
## MOD Title : 		Account Self-Delete
## MOD Author: 	Poupoune < poupoune@phpbb-fr.com > (N/A) http://php-tools.org/poupoune/ 
## 
## MOD Description : 	This MOD allows users to delete their own account on your board.
##			This feature can be desactivated in the ACP.	
##
## MOD Version : 1.0.0
## 
## Installation Level : Easy
## Installation Time :  5 minute(s) 
## Files To Edit :   5 
##      admin/admin_board.php 
##      includes/usercp_register.php 
##      language/lang_english/lang_main.php
##	language/lang_english/lang_admin.php 
##	templates/subSilver/admin/board_config_body.tpl
##	templates/subSilver/profile_add_body.tpl
## Included Files :   0 
##
############################################################## 
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
## in our MOD-Database, located at: http://www.phpbb.com/mods/  
############################################################## 
## Author Notes : 
## 
############################################################## 
## MOD History : 
## 
##   10-08-2004 - Version 1.0.0
## 
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
############################################################## 

# 
#-----[ SQL ]---------------------------------------------- 
#

INSERT INTO `phpbb_config` VALUES ('account_delete', '1');

# 
#-----[ OPEN ]---------------------------------------------- 
# 

admin/admin_board.php

# 
#-----[ FIND ]---------------------------------------------- 
# 

$disable_board_yes = ( $new['board_disable'] ) ? "checked=\"checked\"" : "";
$disable_board_no = ( !$new['board_disable'] ) ? "checked=\"checked\"" : "";

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

// Begin Account Self-Delete MOD
$account_delete_yes = ( $new['account_delete'] ) ? "checked=\"checked\"" : "";
$account_delete_no = ( !$new['account_delete'] ) ? "checked=\"checked\"" : ""; 
// End Account Self-Delete MOD

# 
#-----[ FIND ]---------------------------------------------- 
# 

  "L_DISABLE_BOARD_EXPLAIN" => $lang['Board_disable_explain'],

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

  // Begin Account Self-Delete MOD
  "L_ACCOUNT_DELETE" => $lang['account_delete'],
  // End Account Self-Delete MOD

# 
#-----[ FIND ]---------------------------------------------- 
# 

  "S_DISABLE_BOARD_NO" => $disable_board_no,

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

  
  // Begin Account Self-Delete MOD
  "S_ACCOUNT_DELETE_YES" => $account_delete_yes,
  "S_ACCOUNT_DELETE_NO" => $account_delete_no, 
  // End Account Self-Delete MOD

# 
#-----[ OPEN ]---------------------------------------------- 
# 

includes/usercp_register.php

# 
#-----[ FIND ]---------------------------------------------- 
# 

  $strip_var_list = array(

# 
#-----[ BEFORE, ADD ]---------------------------------------------- 
#

  // Begin Account Self-Delete MOD
  if( $HTTP_POST_VARS['deleteuser'] )
  {
    $message = "<form action=\"". append_sid("profile.$phpEx?mode=editprofile") ."\" method=\"post\">". $lang['Delete_account_question'] ."<br /><br /><input type=\"submit\" name=\"delete_confirm\" value=\"". $lang['Yes'] ."\" class=\"mainoption\" />&nbsp;&nbsp;<input type=\"submit\" name=\"delete_cancel\" value=\"". $lang['No'] ."\" class=\"liteoption\" /><input type=\"hidden\" name=\"user_id\" value=\"$user_id\" /></form>";

    message_die(GENERAL_MESSAGE, $message);  
  }
  // End Account Self-Delete MOD

# 
#-----[ FIND ]---------------------------------------------- 
# 

//
// Let's make sure the user isn't logged in while registering,
// and ensure that they were trying to register a second time
// (Prevents double registrations)
//

# 
#-----[ BEFORE, ADD ]---------------------------------------------- 
#

// Begin Account Self-Delete MOD ** Code from admin/admin_users.php
if( isset($HTTP_POST_VARS['delete_confirm']) )
{  
  $user_id = intval( $HTTP_POST_VARS['user_id'] );

  $sql = "SELECT g.group_id 
    FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g  
    WHERE ug.user_id = $user_id 
    AND g.group_id = ug.group_id 
    AND g.group_single_user = 1";
  if( !($result = $db->sql_query($sql)) )
  {
    message_die(GENERAL_ERROR, 'Could not obtain group information for this user', '', __LINE__, __FILE__, $sql);
  }

  $row = $db->sql_fetchrow($result);

  $sql = "UPDATE " . POSTS_TABLE . "
    SET poster_id = " . DELETED . ", post_username = '$username' 
    WHERE poster_id = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not update posts for this user', '', __LINE__, __FILE__, $sql);
  }

  $sql = "UPDATE " . TOPICS_TABLE . "
    SET topic_poster = " . DELETED . " 
    WHERE topic_poster = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not update topics for this user', '', __LINE__, __FILE__, $sql);
  }
			
  $sql = "UPDATE " . VOTE_USERS_TABLE . "
    SET vote_user_id = " . DELETED . "
    WHERE vote_user_id = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not update votes for this user', '', __LINE__, __FILE__, $sql);
  }
			
  $sql = "SELECT group_id
    FROM " . GROUPS_TABLE . "
    WHERE group_moderator = $user_id";
  if( !($result = $db->sql_query($sql)) )
  {
    message_die(GENERAL_ERROR, 'Could not select groups where user was moderator', '', __LINE__, __FILE__, $sql);
  }
			
  while ( $row_group = $db->sql_fetchrow($result) )
  {
    $group_moderator[] = $row_group['group_id'];
  }
			
  if ( count($group_moderator) )
  {
    $update_moderator_id = implode(', ', $group_moderator);
			
    $sql = "UPDATE " . GROUPS_TABLE . "
      SET group_moderator = " . $userdata['user_id'] . "
      WHERE group_moderator IN ($update_moderator_id)";
    if( !$db->sql_query($sql) )
    {
      message_die(GENERAL_ERROR, 'Could not update group moderators', '', __LINE__, __FILE__, $sql);
    }
  }

  $sql = "DELETE FROM " . USERS_TABLE . "
    WHERE user_id = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete user', '', __LINE__, __FILE__, $sql);
  }

  $sql = "DELETE FROM " . USER_GROUP_TABLE . "
    WHERE user_id = $user_id";
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete user from user_group table', '', __LINE__, __FILE__, $sql);
  }

  $sql = "DELETE FROM " . GROUPS_TABLE . "
    WHERE group_id = " . $row['group_id'];
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete group for this user', '', __LINE__, __FILE__, $sql);
  }

  $sql = "DELETE FROM " . AUTH_ACCESS_TABLE . "
    WHERE group_id = " . $row['group_id'];
  if( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete group for this user', '', __LINE__, __FILE__, $sql);
  }

  $sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
    WHERE user_id = $user_id";
  if ( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete user from topic watch table', '', __LINE__, __FILE__, $sql);
  }
			
  $sql = "DELETE FROM " . BANLIST_TABLE . "
    WHERE ban_userid = $user_id";
  if ( !$db->sql_query($sql) )
  {
    message_die(GENERAL_ERROR, 'Could not delete user from banlist table', '', __LINE__, __FILE__, $sql);
  }

  $sql = "SELECT privmsgs_id
    FROM " . PRIVMSGS_TABLE . "
    WHERE privmsgs_from_userid = $user_id 
    OR privmsgs_to_userid = $user_id";
  if ( !($result = $db->sql_query($sql)) )
  {
    message_die(GENERAL_ERROR, 'Could not select all users private messages', '', __LINE__, __FILE__, $sql);
  }

  // This little bit of code directly from the private messaging section.
  while ( $row_privmsgs = $db->sql_fetchrow($result) )
  {
    $mark_list[] = $row_privmsgs['privmsgs_id'];
  }
			
  if ( count($mark_list) )
  {
    $delete_sql_id = implode(', ', $mark_list);
		
    $delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
      WHERE privmsgs_text_id IN ($delete_sql_id)";
    $delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . "
      WHERE privmsgs_id IN ($delete_sql_id)";
				
    if ( !$db->sql_query($delete_sql) )
    {
      message_die(GENERAL_ERROR, 'Could not delete private message info', '', __LINE__, __FILE__, $delete_sql);
    }
				
    if ( !$db->sql_query($delete_text_sql) )
    {
      message_die(GENERAL_ERROR, 'Could not delete private message text', '', __LINE__, __FILE__, $delete_text_sql);
    }
  }

  $message = $lang['User_deleted'] . '<br /><br />' . sprintf($lang['Click_return_userprofile'], '<a href="' . append_sid("profile.$phpEx?mode=editprofile") . '">', '</a>') . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>');

  message_die(GENERAL_MESSAGE, $message);
}
// End Account Self-Delete MOD

# 
#-----[ FIND ]---------------------------------------------- 
# 

    'L_ALWAYS_ADD_SIGNATURE' => $lang['Always_add_sig'],

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

    // Begin Account Self-Delete MOD
    'L_ACCOUNT_DELETE' => $lang['Account_delete'],
    'L_DELETE_ACCOUNT_EXPLAIN' => $lang['Account_delete_explain'],
    // End Account Self-Delete MOD

# 
#-----[ FIND ]---------------------------------------------- 
# 

  if ( $mode != 'register' )
  {

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

    // Begin Account Self-Delete MOD
    if( $board_config['account_delete'] )
    {
      $template->assign_block_vars('account_delete_block', array() );
    }
    // End Account Self-Delete MOD

# 
#-----[ OPEN ]---------------------------------------------- 
# 

language/lang_english/lang_admin.php

# 
#-----[ FIND ]---------------------------------------------- 
# 

?>

# 
#-----[ BEFORE, ADD ]---------------------------------------------- 
#

// Begin Account Self-Delete MOD
$lang['account_delete'] = 'Allows users to delete their own accounts';
// End Account Self-Delete MOD

# 
#-----[ OPEN ]---------------------------------------------- 
# 

language/lang_english/lang_main.php

# 
#-----[ FIND ]---------------------------------------------- 
# 

?>

# 
#-----[ BEFORE, ADD ]---------------------------------------------- 
#

// Begin Account Self-Delete MOD
$lang['Account_delete'] = 'Do you want to delete your account on this board?';
$lang['Account_delete_explain'] = 'Deletion of your account cannot be undone';
$lang['User_deleted'] = 'Your account has been sucessfully deleted.';
$lang['Delete_account_question'] = 'Deletion of your account will delete all personnal informations that concerns you in your profile, inside the database of this board. The messages you wrote in this board will have as post author a guest. <b>Attention !</b> all deletion can not be undone.<br /><br />Do you want to delete your account in this board?';
// End Account Self-Delete MOD

# 
#-----[ OPEN ]---------------------------------------------- 
# 

templates/subSilver/admin/board_config_body.tpl

# 
#-----[ FIND ]---------------------------------------------- 
# 

  <tr>
    <td class="row1">{L_ALLOW_NAME_CHANGE}</td>
    <td class="row2"><input type="radio" name="allow_namechange" value="1" {NAMECHANGE_YES} /> {L_YES}&nbsp;&nbsp;<input type="radio" name="allow_namechange" value="0" {NAMECHANGE_NO} /> {L_NO}</td>
  </tr>

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
#

  <tr>
    <td class="row1">{L_ACCOUNT_DELETE}</td>
    <td class="row2"><input type="radio" name="account_delete" value="1" {S_ACCOUNT_DELETE_YES} /> {L_YES}&nbsp;&nbsp;<input type="radio" name="account_delete" value="0" {S_ACCOUNT_DELETE_NO} /> {L_NO}</td>
  </tr> 

# 
#-----[ OPEN ]---------------------------------------------- 
# 

templates/subSilver/profile_add_body.tpl

# 
#-----[ FIND ]---------------------------------------------- 
# 

  <!-- Visual Confirmation -->

# 
#-----[ BEFORE, ADD ]---------------------------------------------- 
#

  <!-- BEGIN account_delete_block -->
  <tr> 
    <td class="row1"><span class="gen">{L_ACCOUNT_DELETE}</span></td>
    <td class="row2"> 
    <input type="checkbox" name="deleteuser">
    <span class="gensmall">{L_DELETE_ACCOUNT_EXPLAIN}</span></td>
  </tr>
  <!-- END account_delete_block -->

# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM 
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Kurios ist, daß die Konstante DELETED, wie hier verwendet

Code: Alles auswählen

  $sql = "UPDATE " . POSTS_TABLE . " 

    SET poster_id = " . DELETED . ", post_username = '$username' 

    WHERE poster_id = $user_id"; 

  if( !$db->sql_query($sql) ) 

  { 

    message_die(GENERAL_ERROR, 'Could not update posts for this user', '', __LINE__, __FILE__, $sql); 

  } 
nicht definiert wird. Von daher wundert es mich, daß entweder der Mod wirklich komplett ist oder dieser überhaupt funktioniert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
modbo
Beiträge: 1344
Registriert: Mo 13.Dez, 2004 11:18
Kontaktdaten:

Beitrag von modbo »

Öhm, also den Link zum Mod habe ich ja hier gepostet.

Funktionieren tut er auch. Die Ergebnisse kannst du hier sehen: Test

In diesem Test-Beispiel habe ich im ersten Beitrag den ursprünglichen Nick von Hand in die DB (post_username) eingetragen.
Im zweiten Beispiel hab ich den User einfach nur über die Account-Self-delete Funktion im Profil gelöscht.

Ich nehme an, da der Mod in die includes/usercp_register.php integriert wird, das dort die Konstante DELETED bereits definiert wird. Nachgesehen habe ich aber nicht. Bin mir auch nicht sicher, ob ich es erkennen würde.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

In der constants.php wird es definiert:

Code: Alles auswählen

define('DELETED', -1);
Und dadurch wird der User gleich einem anonymen Gast gesetzt. Der Username sollte dann bestenfalls in den Post eingetragen werden, damit man diesen auch später noch zuordnen kann.
Werde ich mal prüfen, ob der Mod hier sauber arbeitet.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
modbo
Beiträge: 1344
Registriert: Mo 13.Dez, 2004 11:18
Kontaktdaten:

Beitrag von modbo »

Sehr nett, sehr nett :-)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Im Grunde ist es einfach, warum der Username nicht gespeichert wird:
Der wird nicht vorher ausgelesen und bleibt damit leer. Die Folge: Es wird "Gast" angezeigt.
Hier der entsprechende Fix:

Code: Alles auswählen

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

# 
#-----[ FIND ]---------------------------------------------- 
# 
// Begin Account Self-Delete MOD ** Code from admin/admin_users.php
if( isset($HTTP_POST_VARS['delete_confirm']) )
{  
  $user_id = intval( $HTTP_POST_VARS['user_id'] );

# 
#-----[ AFTER, ADD ]---------------------------------------------- 
# 
  $sql = "SELECT username FROM " . USERS_TABLE . "
    WHERE user_id = $user_id";
  if( !($result = $db->sql_query($sql)) )
  {
    message_die(GENERAL_ERROR, 'Could not obtain username for this user', '', __LINE__, __FILE__, $sql);
  }

  while ($row = $db->sql_fetchrow($result))
  {
  	$username = $row['username'];
  }
  $db->sql_freeresult($result);


# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
Dieses basiert auf den eingebauten Mod. Damit wird das Versäumnis des Mod Autoren ausgeglichen, den Usernamen vorher aus der Datenbank zu holen, bevor die User-Daten endgültig gelöscht wurden.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
modbo
Beiträge: 1344
Registriert: Mo 13.Dez, 2004 11:18
Kontaktdaten:

Beitrag von modbo »

Sauberst *top*
Funktioniert. Schade, dass ich so etwas nicht selber kann :(

VIELEN DANK.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ist nicht schwer. Man muss nur
1. Einmal verstanden haben, wie der logische Ablauf im Programm ist (Logisches Talent willkommen)
2. Den Ablauf auf Vollständigkeit prüfen. Und zwar zunächst "im Kopf".

Dabei ist mir eben dieser Fehler aufgefallen. Der Rest ist dann wieder PHP-Wissen: Die fehlenden Daten abfragen und den Folgefunktionen bereitstellen.

Ist im Grunde vergleichbar mit Vokallernen mit Kenntnis von mathematischen Formeln ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Stoebi
Beiträge: 447
Registriert: Do 24.Feb, 2005 16:35
Wohnort: Berlin
Kontaktdaten:

Viewforum Announces/News Last Poster = Gast

Beitrag von Stoebi »

Guten Morgen,

meine Änderung, wo ich mich hier inspirieren hab lassen, soll bewirken, dass in der Beitragsansicht, sorry nicht Forenansicht, da schauts gut aus, der letzte Poster, der via ACP gelöscht wurde, als Name erscheint und nicht Gast als letzter Poster zu lesen ist.

Der alte Zustand war dieser:
Ein User ist gelöscht, der $last_post_author ist Gast.
Bild

Das ist unschön.

Nach meiner Änderung, wie oben aufgeführt steht das.
Bild

Das ist super, aber leider noch nicht 100%.

Ist ein Beitrag auf News oder Announce gesetzt steht wieder Gast
Bild

Ändere ich den Code

Code: Alles auswählen

$last_post_author = ( $topic_rowset[$i]['id2'] == ANONYMOUS ) ? ( ($topic_rowset[$i]['post_username2'] != '' ) ? $topic_rowset[$i]['post_username2'] . ' ' : $lang['Guest'] . ' ' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '='  . $topic_rowset[$i]['id2']) . '">' . $topic_rowset[$i]['user2'] . '</a>';
so ab

Code: Alles auswählen

$last_post_author = ( $topic_rowset[$i]['id2'] == ANONYMOUS ) ? ( ($topic_rowset[$i]['post_username'] != '' ) ? $topic_rowset[$i]['post_username'] . ' ' : $lang['Guest'] . ' ' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '='  . $topic_rowset[$i]['id2']) . '">' . $topic_rowset[$i]['user2'] . '</a>';
Dann stehen in den Beiträgen die auf News und Announce gesetzt sind der Name des gelöschten Users, aber in den normalen Beiträgen dann Gast.

Wie kann das Problem bitte elegant gelöst werden?

Ich habe zur Sicherheit die Datei functions_topics_list.php mit angehangen.



Gruß Stöbi


Nachtrag:
Möchte mich für das Erstellen eines neuen Beitrages, obwohl schon ein ähnlicher Thread vorhanden, entschuldigen.


Nachtrag2:
Folgende Dinge habe ich geschafft. Es wird jetzt sowohl in einer Ankündigung, News, Globalen Ankündigung und auch im normalen Beiträgen der Username angezeigt, aber wenn ich in einem
Forum Gäste erlaube zu schreiben, und die keinen Benutzernamen angeben, bleibt das Feld leer.

Mein neuer Code:

Code: Alles auswählen

					$last_post_author = ( $topic_rowset[$i]['id2'] == ANONYMOUS ) ? ( ($topic_rowset[$i]['post_username'] != '' ) ? $topic_rowset[$i]['post_username'] : '' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '='  . $topic_rowset[$i]['id2']) . '">' . $topic_rowset[$i]['user2'] . '</a>';
					$last_post_author .= ( $topic_rowset[$i]['id2'] == ANONYMOUS ) ? ( ($topic_rowset[$i]['post_username2'] != '' ) ? $topic_rowset[$i]['post_username2'] : '' ) : '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . '='  . $topic_rowset[$i]['id2']) . '">' . $topic_rowset[$i]['user2'] . '</a>';
Liegt wohl an diesem CH MOD.

Wenn ich diese Zeile einfüge

Code: Alles auswählen

$last_post_author = ($topic_author_name != '' ) ? $topic_author_name : $lang['Guest'];
Dann steht zwar nun Gast, aber bei den den Beiträgen wo der letzte Poster gelöscht wurde dann auch $lang['Guest']<post_username>.

Z. B. => GastStoebi


Ich weiss echt nicht mehr, was ich noch tun kann.
Zuletzt geändert von Stoebi am Di 19.Jul, 2005 17:04, insgesamt 3-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wird denn beim Löschen eines Users dessen Name in den Beiträgen angezeigt, d.h. genauer: Durch einen anderen Mod in den Posts hinterlegt?
Dann sollte die ursprüngliche Variation in der functions_topics_list.php funktionieren. Wenn nicht, dann kannst Du probieren, wie Du willst: Es führt nicht 100%ig zum Erfolg. Ohne Username ist nunmal keine Anzeige möglich, wenn die User-ID schon nicht mehr in der User-Tabelle zu finden ist.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Stoebi
Beiträge: 447
Registriert: Do 24.Feb, 2005 16:35
Wohnort: Berlin
Kontaktdaten:

Beitrag von Stoebi »

[quote="oxpus - Di 19.Jul, 2005 17:12";p="39023"]Wird denn beim Löschen eines Users dessen Name in den Beiträgen angezeigt, d.h. genauer: Durch einen anderen Mod in den Posts hinterlegt?
Dann sollte die ursprüngliche Variation in der functions_topics_list.php funktionieren. Wenn nicht, dann kannst Du probieren, wie Du willst: Es führt nicht 100%ig zum Erfolg. Ohne Username ist nunmal keine Anzeige möglich, wenn die User-ID schon nicht mehr in der User-Tabelle zu finden ist.[/quote]

Versteh schon. Dann wäre die einzige Alternative, das Feld post_username in der Tabelle phpbb2_posts mit Gast zu füllen, wenn kein Benutzername angegeben wurde.

Ab wo und wie?


Gruß Stöbi


Nachtrag:
Ich habe ja deine Frage nicht beantwortet.
Ja, das Löschen des Names eines Users wird vorher im Feld post_username in der Tabelle phpbb2_posts hinterlegt.

Das ist nur durch die Änderung von hier http://ptifo.clanmckeen.com/viewtopic.php?t=1085 möglich geworden.
Zuletzt geändert von Stoebi am Di 19.Jul, 2005 17:42, insgesamt 2-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja, und steht denn auch der Username in der Tabelle?
Dann wäre functions_topics_list.php eben nicht anzupassen ;)
Zuletzt geändert von oxpus am Di 19.Jul, 2005 17:42, insgesamt 1-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten