aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/functions_user.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/functions_user.php')
-rw-r--r--phpBB/includes/functions_user.php154
1 files changed, 154 insertions, 0 deletions
diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php
index 742108ec78..655bad5d8f 100644
--- a/phpBB/includes/functions_user.php
+++ b/phpBB/includes/functions_user.php
@@ -95,6 +95,117 @@ function user_update_name($old_name, $new_name)
}
}
+function user_delete($mode, $user_id)
+{
+ global $config, $db, $user, $auth;
+
+ $db->sql_transaction();
+
+ switch ($mode)
+ {
+ case 'retain':
+ $sql = 'UPDATE ' . FORUMS_TABLE . '
+ SET forum_last_poster_id = ' . ANONYMOUS . "
+ WHERE forum_last_poster_id = $user_id";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . POSTS_TABLE . '
+ SET poster_id = ' . ANONYMOUS . "
+ WHERE poster_id = $user_id";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . '
+ SET topic_poster = ' . ANONYMOUS . "
+ WHERE topic_poster = $user_id";
+ $db->sql_query($sql);
+
+ $sql = 'UPDATE ' . TOPICS_TABLE . '
+ SET topic_last_poster_id = ' . ANONYMOUS . "
+ WHERE topic_last_poster_id = $user_id";
+ $db->sql_query($sql);
+ break;
+
+ case 'remove':
+
+ if (!function_exists('delete_posts'))
+ {
+ global $phpbb_root_path, $phpEx;
+ include($phpbb_root_path . 'includes/functions_admin.'.$phpEx);
+ }
+
+ $sql = 'SELECT topic_id, COUNT(post_id) AS total_posts
+ FROM ' . POSTS_TABLE . "
+ WHERE poster_id = $user_id
+ GROUP BY topic_id";
+ $result = $db->sql_query($sql);
+
+ while ($row = $db->sql_fetchrow($result))
+ {
+ $topic_id_ary[$row['topic_id']] = $row['total_posts'];
+ }
+ $db->sql_freeresult($result);
+
+ $sql = 'SELECT topic_id, topic_replies, topic_replies_real
+ FROM ' . TOPICS_TABLE . '
+ WHERE topic_id IN (' . implode(', ', array_keys($topic_id_ary)) . ')';
+ $result = $db->sql_query($sql);
+
+ $del_topic_ary = array();
+ while ($row = $db->sql_fetchrow($result))
+ {
+ if (max($row['topic_replies'], $row['topic_replies_real']) + 1 == $topic_id_ary[$row['topic_id']])
+ {
+ $del_topic_ary[] = $row['topic_id'];
+ }
+ }
+ $db->sql_freeresult($result);
+
+ if (sizeof($del_topic_ary))
+ {
+ $sql = 'DELETE FROM ' . TOPICS_TABLE . '
+ WHERE topic_id IN (' . implode(', ', $del_topic_ary) . ')';
+ $db->sql_query($sql);
+ }
+
+ // Delete posts, attachments, etc.
+ delete_posts('poster_id', $user_id);
+
+ break;
+ }
+
+ $table_ary = array(USERS_TABLE, USER_GROUP_TABLE, TOPICS_WATCH_TABLE, FORUMS_WATCH_TABLE, ACL_USERS_TABLE, TOPICS_TRACK_TABLE, FORUMS_TRACK_TABLE);
+
+ foreach ($table_ary as $table)
+ {
+ $sql = "DELETE FROM $table
+ WHERE user_id = $user_id";
+ $db->sql_query($sql);
+ }
+
+ // Reset newest user info if appropriate
+ if ($config['newest_user_id'] == $user_id)
+ {
+ $sql = 'SELECT user_id, username
+ FROM ' . USERS_TABLE . '
+ ORDER BY user_id DESC
+ LIMIT 1';
+ $result = $db->sql_query($sql);
+
+ if ($row = $db->sql_fetchrow($result))
+ {
+ set_config('newest_user_id', $row['user_id']);
+ set_config('newest_username', $row['username']);
+ }
+ $db->freeresult($result);
+ }
+
+ set_config('num_users', $config['num_users'] - 1, TRUE);
+
+ $db->sql_transaction('commit');
+
+ return false;
+}
+
// Flips user_type from active to inactive and vice versa, handles
// group membership updates
function user_active_flip($user_id, $user_type, $user_actkey = false, $username = false)
@@ -507,6 +618,49 @@ function user_unban($mode, $ban)
return false;
}
+
+// Whois facility
+function user_ipwhois($ip)
+{
+ $ipwhois = '';
+
+ $match = array(
+ '#RIPE\.NET#is' => 'whois.ripe.net',
+ '#whois\.apnic\.net#is' => 'whois.apnic.net',
+ '#nic\.ad\.jp#is' => 'whois.nic.ad.jp',
+ '#whois\.registro\.br#is' => 'whois.registro.br'
+ );
+
+ if (($fsk = @fsockopen('whois.arin.net', 43)))
+ {
+ fputs($fsk, "$ip\n");
+ while (!feof($fsk))
+ {
+ $ipwhois .= fgets($fsk, 1024);
+ }
+ @fclose($fsk);
+ }
+
+ foreach (array_keys($match) as $server)
+ {
+ if (preg_match($server, $ipwhois))
+ {
+ $ipwhois = '';
+ if (($fsk = @fsockopen($match[$server], 43)))
+ {
+ fputs($fsk, "$ip\n");
+ while (!feof($fsk))
+ {
+ $ipwhois .= fgets($fsk, 1024);
+ }
+ @fclose($fsk);
+ }
+ break;
+ }
+ }
+
+ return $ipwhois;
+}
//
// Data validation ... used primarily but not exclusively by
// ucp modules