Seite 1 von 1

Erweiterung für Email bei User-Löschung gesucht

Verfasst: Mo 01.Aug, 2005 09:10
von schmidtedv
Ich habe hier 3 Möglichkeiten, einen Benutzer zu löschen, die Originale Verwaltung, den Userlist MOD von wGEric und den Prune Users MOD von Niels...nun hat aber nur der Prune Users die nette Funktion, im Falle seiner Löschung eine Mail an den User zu schicken. Ich fände es toll, dies auch für die beiden anderen Möglichkeiten zu haben, am Besten sogar, das alle die Template delete_users.tpl vom Prune Users MOD verwenden könnten...oder gibt's da schon was Nettes?

Verfasst: Mo 01.Aug, 2005 13:46
von oxpus

Verfasst: Mo 01.Aug, 2005 14:06
von schmidtedv
hm, den hatte ich gestern schon einmal probiert, aber es kam keine Mail an...ich setz mich heut nochmal dran und versuch's...kann ich hier n EDIT reinsetzen, wenn's nicht klappt und Dich mal drüberschauen lassen?

EDIT: Nein, wie ich mir schon dachte, eine Mail wird nicht versendet....ich finde auch nicht wie bei all den anderen $emailer-Stellen in den *.php's die SQL-Anfrage in diesem MOD, setzt der das an dieser Stelle voraus?

Vielleicht kannst Du netterweise mal in die admin_users.php kurz reinschauen...? :-)

Die U_REGISTER-Variable von mir hab' ich erst dieses Mal mit hinzugefügt wegen meinem Template, das ich auch noch woanders verwende, aber selbst wenn das nicht funktionieren würde, würde dies den eigentlichen Mailversand ja wohl nicht direkt unterbinden, oder sehe ich das falsch?

Verfasst: Di 02.Aug, 2005 03:23
von oxpus
Vielleicht klappts mit dieser besser:

Verfasst: Di 02.Aug, 2005 06:16
von schmidtedv
also $this_userdata statt $to_userdata ... lol, mal wieder ein Wissen ist Macht Ereignis...war der MOD falsch??

Hab's nun so drin und es funktioniert:

Code: Alles auswählen

// Start add - Email notify on user delete MOD
			$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])). '/profile.'.$phpEx.'?mode=register';
			$server_name = trim($board_config['server_name']);
			$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
			$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
			
			$email_headers .= "From: " . $board_config['sitename'] . "\r\n"; 
			$email_headers .= "Return-Path: " . $board_config['board_email'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: phpBB Forum - " . $server_name . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzer ID - " . $userdata['user_id'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzername - " . $userdata['username'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzer IP - " . decode_ip($user_ip) . "\r\n"; 

			include($phpbb_root_path . 'includes/emailer.'.$phpEx); 
			$emailer = new emailer($board_config['smtp_delivery']); 

			$emailer->use_template('delete_users', $this_userdata['user_lang']); 
			$emailer->extra_headers($email_headers); 
			$emailer->email_address($this_userdata['user_email']); 
			$emailer->set_subject(); //$lang['Notification_subject'] 
                
			$emailer->assign_vars(array( 
				'U_REGISTER' => $server_protocol . $server_name . $server_port . $script_name,
				'USERNAME' => $this_userdata['username'], 
				'SITENAME' => $board_config['sitename'], 
				'BOARD_EMAIL' => $board_config['board_email'],
				'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) 
				) 
			); 
			$emailer->send(); 
			$emailer->reset(); 
			// End add - Email notify on user delete MOD
Allerdings kann ich es so nicht in die admin_userlist.php einbauen...eventuell einen Tipp wie die Variable hier lauten müßte (habs mit $row versucht, aber ohne Erfolg)?

Verfasst: Di 02.Aug, 2005 10:55
von oxpus
Der Mod ist nicht falsch, war vielleicht nur für eine veraltete phpBB Version geschrieben.
In der admin_userlist.php wäre es bei mir $row. Bei Dir musst Du einfach mal schauen, wie Username oder andere Daten erstellt werden.

Verfasst: Di 02.Aug, 2005 11:15
von schmidtedv
Hm, das hatte ich auch versucht...aber der code ist in der admin_userslist.php irgendwie anders:

Code: Alles auswählen

// check confirm and either delete or show confirm message
		//
		if ( !$confirm )
		{
			// show message
			$i = 0;
			$hidden_fields = '';
			while( $i < count($user_ids) )
			{
				$user_id = intval($user_ids[$i]);
				$hidden_fields .= '<input type="hidden" name="' . POST_USERS_URL . '[]" value="' . $user_id . '">';

				unset($user_id);
				$i++;
			}

			$template->set_filenames(array(
				'body' => 'admin/confirm_body.tpl')
			);
			$template->assign_vars(array(
				'MESSAGE_TITLE' => $lang['Delete'],
				'MESSAGE_TEXT' => $lang['Confirm_user_deleted'],
				
				'U_INDEX' => '',
				'L_INDEX' => '',
				
				'L_YES' => $lang['Yes'],
				'L_NO' => $lang['No'],
				
				'S_CONFIRM_ACTION' => append_sid('admin_userlist.'.$phpEx.'?mode=delete'),
				'S_HIDDEN_FIELDS' => $hidden_fields)
			);
		}
		else
		{
			// delete users
			$i = 0;
			while( $i < count($user_ids) )
			{
				$user_id = intval($user_ids[$i]);

				$sql = "SELECT u.username, g.group_id 
					FROM " . USERS_TABLE . " u, " . 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 = '" . $row['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);
					}
				}

				unset($user_id);
				$i++;
			}
			
			$message = $lang['User_deleted_successfully'] . "<br /><br />" . sprintf($lang['Click_return_userlist'], "<a href=\"" . append_sid("admin_userlist.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");

			message_die(GENERAL_MESSAGE, $message);
		}		
		break;
...hier gibt's ja noch ein

Code: Alles auswählen

unset($user_id);
$i++;
sofern das von Bedeutung ist....jedenfalls, wenn ich hier an diversen Versuchs-Stellen

Code: Alles auswählen

// Start add - Email notify on user delete MOD
			$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])). '/profile.'.$phpEx.'?mode=register';
			$server_name = trim($board_config['server_name']);
			$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
			$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';
			
			$email_headers .= "From: " . $board_config['sitename'] . "\r\n"; 
			$email_headers .= "Return-Path: " . $board_config['board_email'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: phpBB Forum - " . $server_name . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzer ID - " . $userdata['user_id'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzername - " . $userdata['username'] . "\r\n"; 
			$email_headers .= "X-AntiAbuse: Benutzer IP - " . decode_ip($user_ip) . "\r\n"; 

			include($phpbb_root_path . 'includes/emailer.'.$phpEx); 
			$emailer = new emailer($board_config['smtp_delivery']); 

			$emailer->use_template('delete_users', $row['user_lang']); 
			$emailer->extra_headers($email_headers); 
			$emailer->email_address($row['user_email']); 
			$emailer->set_subject(); //$lang['Notification_subject'] 
                
			$emailer->assign_vars(array( 
				'U_REGISTER' => $server_protocol . $server_name . $server_port . $script_name,
				'USERNAME' => $row['username'], 
				'SITENAME' => $board_config['sitename'], 
				'BOARD_EMAIL' => $board_config['board_email'],
				'EMAIL_SIG' => str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) 
				) 
			); 
			$emailer->send(); 
			$emailer->reset(); 
			// End add - Email notify on user delete MOD
einsetze, dann tut sich nüscht....eventuell $row falsch oder fehlen ihm Variablen?

Verfasst: Di 02.Aug, 2005 11:25
von oxpus
Wenn dann so:

Code: Alles auswählen

		// check confirm and either delete or show confirm message
		//
		if ( !$confirm )
		{
			// show message
			$i = 0;
			$hidden_fields = '';
			while( $i < count($user_ids) )
			{
				$user_id = intval($user_ids[$i]);
				$hidden_fields .= '<input type="hidden" name="' . POST_USERS_URL . '[]" value="' . $user_id . '">';

				unset($user_id);
				$i++;
			}

			$template->set_filenames(array(
				'body' => 'admin/confirm_body.tpl')
			);
			$template->assign_vars(array(
				'MESSAGE_TITLE' => $lang['Delete'],
				'MESSAGE_TEXT' => $lang['Confirm_user_deleted'],
				
				'U_INDEX' => '',
				'L_INDEX' => '',
				
				'L_YES' => $lang['Yes'],
				'L_NO' => $lang['No'],
				
				'S_CONFIRM_ACTION' => append_sid('admin_userlist.'.$phpEx.'?mode=delete'),
				'S_HIDDEN_FIELDS' => $hidden_fields)
			);
		}
		else
		{
			// delete users
			$i = 0;
			while( $i < count($user_ids) )
			{
				$user_id = intval($user_ids[$i]);

				$sql = "SELECT u.username, g.group_id 
					FROM " . USERS_TABLE . " u, " . 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 = '" . $row['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);
					}
				}

				$this_userdata = get_userdata($HTTP_GET_VARS[POST_USERS_URL]);

				// Start add - Email notify on user delete MOD
				$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path'])). '/profile.'.$phpEx.'?mode=register';
				$server_name = trim($board_config['server_name']);
				$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://';
				$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/';

				$email_headers .= "From: " . $board_config['sitename'] . "\r"; 
				$email_headers .= "Return-Path: " . $board_config['board_email'] . "\r"; 
				$email_headers .= "X-AntiAbuse: phpBB Forum - " . $server_name . "\r"; 
				$email_headers .= "X-AntiAbuse: Benutzer ID - " . $userdata['user_id'] . "\r"; 
				$email_headers .= "X-AntiAbuse: Benutzername - " . $userdata['username'] . "\r"; 
				$email_headers .= "X-AntiAbuse: Benutzer IP - " . decode_ip($user_ip) . "\r"; 

				include_once($phpbb_root_path . 'includes/emailer.'.$phpEx); 
				$emailer = new emailer($board_config['smtp_delivery']); 

				$emailer->use_template('delete_users', $this_userdata['user_lang']); 
				$emailer->extra_headers($email_headers); 
				$emailer->email_address($this_userdata['user_email']); 
				$emailer->set_subject(); //$lang['Notification_subject'] 

				$emailer->assign_vars(array( 
					'U_REGISTER' => $server_protocol . $server_name . $server_port . $script_name,
					'USERNAME' => $this_userdata['username'], 
					'SITENAME' => $board_config['sitename'], 
					'BOARD_EMAIL' => $board_config['board_email'],
					'EMAIL_SIG' => str_replace('<br />', "", "-- " . $board_config['board_email_sig']) 
					) 
				); 
				$emailer->send(); 
				$emailer->reset(); 
				// End add - Email notify on user delete MOD

				unset($user_id);
				$i++;
			}
			
			$message = $lang['User_deleted_successfully'] . "<br /><br />" . sprintf($lang['Click_return_userlist'], "<a href=\"" . append_sid("admin_userlist.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");

			message_die(GENERAL_MESSAGE, $message);
		}		
		break;
Das Problem ist: Die Userdaten stehen an dieser Stelle nicht zur Verfügung, sondern nur die User-ID. Mit der Zeile

Code: Alles auswählen

				$this_userdata = get_userdata($HTTP_GET_VARS[POST_USERS_URL]);
holt man sich aber die Userdaten aus der Datenbank und kann mit der entsprechend angepassten Email-Funktion die Nachricht erstellen und senden.

Verfasst: Di 02.Aug, 2005 11:40
von schmidtedv
ähm, so ähnlich hatte ich gedacht, aber eventuell dann

Code: Alles auswählen

$this_userdata = get_userdata($user_id);
und das ganze einfach direkt unter

Code: Alles auswählen

$row = $db->sql_fetchrow($result);
...so scheints dann zu gehen, mit get_userdata($HTTP_GET_VARS[POST_USERS_URL]); gings nicht...aber ich prüf ' das nochmal schnell...

EDIT: jo, also letztere Variable

Code: Alles auswählen

$this_userdata = get_userdata($user_id);
funktioniert :-) Danke!

Verfasst: Di 02.Aug, 2005 14:59
von oxpus
Keine Ursache.