Bereinigung der User, Post- und Topicstatistik (Funktion "statistic_check")
Diese Funktion führt die "echte" Board-Ministatistik für User-, Post und Topicanzahl aus und korrigiert die durch den Categories Hierarchy Mod verwalteten Einträge in der Tabelle phpbb_config.
Diese Funktion und die zugehörigen Spracheinträge dürfen nur installiert werden, wenn auch der Categories Hierarchy Mod ab Version 2.0.4 installiert ist!
Entfernen von Daten gelöschter User (Funktion "deleted_user_check")
Hierbei sind alle Tabellen zu prüfen und die Einträge im nachfolgenden Snippet in diesen angeführten Zeilen anzupassen:
Code: Alles auswählen
$tables_deleted_userdata = array('admin_nav_module', 'attach_quota', 'banlist', 'bookmarks', 'buddies', 'buddies', 'jr_admin_users', 'meeting_comment', 'meeting_user', 'mod_author', 'mod_requests', 'notes', 'smilies_album_rate', 'topic_view', 'topics_email', 'topics_watch', 'upi2db_read_forum', 'upi2db_read_topics', 'user_board_links', 'user_portal_links', 'verified_user', 'verify_banlist');
$fields_deleted_userdata = array('user_id', 'user_id', 'ban_userid', 'user_id', 'user_id', 'buddy_id', 'user_id', 'user_id', 'user_id', 'author_user_id', 'user_id', 'poster_id', 'rate_user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'ban_userid');Die Funktion liest dann zunächst alle existieren User aus und vergleicht die Daten in den Tabellen mit den ermittelten User-IDs. Alle somit nicht verifizierten User-Daten werden gelöscht.
Und hier nun das Snippet selber (Genaue Position in den Sprachdateien beachten!)
Code: Alles auswählen
#
#-----[ OPEN ]-----
#
admin/admin_db_maintanance.php
#
#-----[ FIND ]-----
#
case 'config': // Configuration
if( isset($HTTP_POST_VARS['submit']) )
#
#-----[ BEFORE, ADD ]-----
#
case 'statistic_check':
echo("<h1>Prüfe Board-Statistik</h1>\n");
lock_db();
$sql = "SELECT count(user_id) as total_user FROM " . USERS_TABLE . "
WHERE user_id <> " . ANONYMOUS;
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$total_user = $row['total_user'];
}
echo("<p class=\"gen\"><b>Gefundene User:</b> " . $total_user . "</p>\n");
$sql = "SELECT config_value as board_user FROM " . CONFIG_TABLE . "
WHERE config_name = 'max_users'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$board_user = $row['board_user'];
}
echo("<p class=\"gen\"><b>Eingetragene Userzahl:</b> " . $board_user . "</p>\n");
if ( $total_user == $board_user )
{
echo($lang['Nothing_to_do']);
}
else
{
$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = $total_user
WHERE config_name = 'max_users'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't update statistic data!", __LINE__, __FILE__, $sql);
}
echo("<p class=\"gen\">Useranzahl korrigiert</p>\n");
}
$sql = "SELECT count(topic_id) as total_topics FROM " . TOPICS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$total_topics = $row['total_topics'];
}
echo("<p class=\"gen\"><b>Gefundene Topics:</b> " . $total_topics . "</p>\n");
$sql = "SELECT config_value as board_topics FROM " . CONFIG_TABLE . "
WHERE config_name = 'max_topics'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$board_topics = $row['board_topics'];
}
echo("<p class=\"gen\"><b>Eingetragene Topicanzahl:</b> " . $board_topics . "</p>\n");
if ( $total_topics == $board_topics )
{
echo($lang['Nothing_to_do']);
}
else
{
$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = $total_topics
WHERE config_name = 'max_topics'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't update statistic data!", __LINE__, __FILE__, $sql);
}
echo("<p class=\"gen\">Topicanzahl korrigiert</p>\n");
}
$sql = "SELECT count(post_id) as total_posts FROM " . POSTS_TABLE;
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$total_posts = $row['total_posts'];
}
echo("<p class=\"gen\"><b>Gefundene Beiträge:</b> " . $total_posts . "</p>\n");
$sql = "SELECT config_value as board_posts FROM " . CONFIG_TABLE . "
WHERE config_name = 'max_posts'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$board_posts = $row['board_posts'];
}
echo("<p class=\"gen\"><b>Eingetragene Beitragsanzahl:</b> " . $board_posts . "</p>\n");
if ( $total_posts == $board_posts )
{
echo($lang['Nothing_to_do']);
}
else
{
$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = $total_posts
WHERE config_name = 'max_posts'";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't update statistic data!", __LINE__, __FILE__, $sql);
}
echo("<p class=\"gen\">Postanzahl korrigiert</p>\n");
}
lock_db(true);
break;
case 'deleted_user_check':
echo("<h1>Prüfe Tabellen auf gelöschte Userdaten</h1>\n");
lock_db();
$all_user_ids = array();
$sql = "SELECT user_id FROM " . USERS_TABLE . "
WHERE user_id <> " . ANONYMOUS;
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't get statistic data!", __LINE__, __FILE__, $sql);
}
while ( $row = $db->sql_fetchrow($result) )
{
$all_user_ids[] = $row['user_id'];
}
$sql_user_ids = implode(', ', $all_user_ids);
$db->sql_freeresult($result);
echo("<p class=\"gen\"><b>" . sizeof($all_user_ids) . " Gefundene User: </b>\n" . $sql_user_ids . "</p><br />");
$tables_deleted_userdata = array('admin_nav_module', 'attach_quota', 'banlist', 'bookmarks', 'buddies', 'buddies', 'jr_admin_users', 'meeting_comment', 'meeting_user', 'mod_author', 'mod_requests', 'notes', 'smilies_album_rate', 'topic_view', 'topics_email', 'topics_watch', 'upi2db_read_forum', 'upi2db_read_topics', 'user_board_links', 'user_portal_links', 'verified_user', 'verify_banlist');
$fields_deleted_userdata = array('user_id', 'user_id', 'ban_userid', 'user_id', 'user_id', 'buddy_id', 'user_id', 'user_id', 'user_id', 'author_user_id', 'user_id', 'poster_id', 'rate_user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'user_id', 'ban_userid');
$total_deleted_datarows = 0;
for ($di = 0; $di < sizeof($tables_deleted_userdata); $di++)
{
echo("<p class=\"gen\"><b>Prüfe Tabelle: </b>" . $table_prefix. $tables_deleted_userdata[$di] . ":</p>");
$sql = "SELECT * FROM " . $table_prefix. $tables_deleted_userdata[$di] . "
WHERE " . $fields_deleted_userdata[$di] . " NOT IN ($sql_user_ids)";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't count user data!", __LINE__, __FILE__, $sql);
}
$to_delete_datarows = $db->sql_numrows($result);
$total_deleted_datarows += $to_delete_datarows;
$db->sql_freeresult($result);
echo("<p class=\"gen\">Gefundene Datensätze: " . $to_delete_datarows . " ");
if ($to_delete_datarows != 0)
{
$sql = "DELETE FROM " . $table_prefix. $tables_deleted_userdata[$di] . "
WHERE " . $fields_deleted_userdata[$di] . " NOT IN ($sql_user_ids)";
if ( !($result = $db->sql_query($sql)) )
{
throw_error("Couldn't delete user data!", __LINE__, __FILE__, $sql);
}
echo("<span style=\"color: #FF0000\">Benutzerdaten gelöscht</span></p>\n");
}
else
{
echo("<span style=\"color: #009000\">Keine Arbeit nötig ;-)</span></p>\n");
}
}
lock_db(true);
if ($total_deleted_datarows != 0)
{
echo ("<p class=\"gen\"><br /><br />Es wurden <b>" . $total_deleted_datarows . "</b> zurückgebliebene Datensätze gelöscht.<br />Die Tabellen sollten jetzt abschliessend <a href=\"".append_sid("admin_db_maintenance.".$phpEx."?mode=start&function=optimize_db")."\" class=\"nav\">optimiert</a> werden.");
}
break;
#
#-----[ OPEN ]-----
#
language/lang_english/lang_dbmtnc.php
#
#-----[ FIND ]-----
#
$mtnc[] = array('statistic',
'Statistics',
'Shows information about the board and the database.',
'',
0);
#
#-----[ AFTER, ADD ]-----
#
$mtnc[] = array('statistic_check',
'Fix Statistics',
'This will check and fix all board statistics for post- and usercounts in the database.',
'',
0);
$mtnc[] = array('deleted_user_check',
'Check deleted user datas',
'This will check all tables for datas from deleted users and delete found entries.',
'',
0);
#
#-----[ OPEN ]-----
#
language/lang_english/lang_dbmtnc.php
#
#-----[ FIND ]-----
#
$mtnc[] = array('statistic',
'Statistiken',
'Zeigt statistische Daten über die Datenbank und das Board an.',
'',
0);
#
#-----[ AFTER, ADD ]-----
#
$mtnc[] = array('statistic_check',
'Statistiken korrigieren',
'Diese Funktion prüft alle Statistiken zu Beitrags- und Benutzerzahlen und korrigiert die Einträge in der Datenbank.',
'',
0);
$mtnc[] = array('deleted_user_check',
'Prüfe Daten gelöschter User',
'Diese Funktion prüft als Tabellen auf Daten gelöschter User und entfernt die gefundenen Einträge.',
'',
0);
#
#-----[ SAVE/CLOSE ALL FILES ]-----
#
# EoM