Hopefully fix bug where deletion of messages before user reads them leaves their new/unread counters unchanged, #506016

git-svn-id: file:///svn/phpbb/trunk@2125 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
Paul S. Owen 2002-02-13 01:34:46 +00:00
parent f1c2c23ec9
commit dfba6520d6

View file

@ -653,45 +653,61 @@ else if( ( $delete && $mark_list ) || $delete_all )
break;
}
$deleteall_sql = "SELECT privmsgs_id
$sql = "SELECT privmsgs_id
FROM " . PRIVMSGS_TABLE . "
WHERE " . $delete_type;
if(!$del_list_status = $db->sql_query($deleteall_sql))
WHERE $delete_type";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Could not obtain id list to delete all messages.", "", __LINE__, __FILE__, $deleteall_sql);
message_die(GENERAL_ERROR, "Could not obtain id list to delete all messages.", "", __LINE__, __FILE__, $sql);
}
$delete_list = $db->sql_fetchrowset($del_list_status);
for($i = 0; $i < count($delete_list); $i++)
while ( $row = $db->sql_fetchrow($result) )
{
$mark_list[] = $delete_list[$i]['privmsgs_id'];
$mark_list[] = $row['privmsgs_id'];
}
unset($delete_list);
unset($delete_type);
}
if ( count($mark_list) )
{
$delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . "
WHERE ";
$delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
WHERE ";
$delete_sql_id = implode(", ", $mark_list);
$delete_sql_id = "";
for($i = 0; $i < count($mark_list); $i++)
//
// Need to decrement the new message counter of recipient
//
if ( $folder == 'outbox' )
{
if( $delete_sql_id != "" )
$sql = "SELECT privmsgs_to_userid
FROM " . PRIVMSGS_TABLE . "
WHERE privmsgs_id IN ($delete_sql_id)
AND privmsgs_from_userid = " . $userdata['user_id'] . "
AND privmsgs_type = " . PRIVMSGS_NEW_MAIL;
if ( !($result = $db->sql_query($sql)) )
{
$delete_sql_id .= ", ";
message_die(GENERAL_ERROR, "Couldn't obtain user id list for outbox messages", "", __LINE__, __FILE__, $sql);
}
$update_pm_sql = "";
while( $row = $db->sql_fetchrow($result) )
{
$update_pm_sql .= ( ( $update_pm_sql != "" ) ? ", " : "" ) . $row['privmsgs_to_userid'];
}
$sql = "UPDATE " . USERS_TABLE . "
SET user_new_privmsg = user_new_privmsg - 1
WHERE user_id IN ($update_pm_sql)";
if ( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, "Couldn't update users new msg counters", "", __LINE__, __FILE__, $sql);
}
$delete_sql_id .= $mark_list[$i];
}
$delete_sql .= "privmsgs_id IN ($delete_sql_id)";
$delete_text_sql .= "privmsgs_text_id IN ($delete_sql_id)";
$delete_sql .= " AND ";
$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)
AND ";
switch($folder)
{
@ -716,16 +732,14 @@ else if( ( $delete && $mark_list ) || $delete_all )
break;
}
if(!$del_status = $db->sql_query($delete_sql, BEGIN_TRANSACTION))
if( !$db->sql_query($delete_sql, BEGIN_TRANSACTION) )
{
message_die(GENERAL_ERROR, "Could not delete private message info.", "", __LINE__, __FILE__, $delete_sql);
}
else
if( !$db->sql_query($delete_text_sql, END_TRANSACTION) )
{
if(!$del_text_status = $db->sql_query($delete_text_sql, END_TRANSACTION))
{
message_die(GENERAL_ERROR, "Could not delete private message text.", "", __LINE__, __FILE__, $delete_text_sql);
}
message_die(GENERAL_ERROR, "Could not delete private message text.", "", __LINE__, __FILE__, $delete_text_sql);
}
}
}