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; break;
} }
$deleteall_sql = "SELECT privmsgs_id $sql = "SELECT privmsgs_id
FROM " . PRIVMSGS_TABLE . " FROM " . PRIVMSGS_TABLE . "
WHERE " . $delete_type; WHERE $delete_type";
if ( !($result = $db->sql_query($sql)) )
if(!$del_list_status = $db->sql_query($deleteall_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); while ( $row = $db->sql_fetchrow($result) )
for($i = 0; $i < count($delete_list); $i++)
{ {
$mark_list[] = $delete_list[$i]['privmsgs_id']; $mark_list[] = $row['privmsgs_id'];
} }
unset($delete_list);
unset($delete_type); unset($delete_type);
} }
if ( count($mark_list) ) if ( count($mark_list) )
{ {
$delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . " $delete_sql_id = implode(", ", $mark_list);
WHERE ";
//
// Need to decrement the new message counter of recipient
//
if ( $folder == 'outbox' )
{
$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)) )
{
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_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . " $delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
WHERE "; WHERE privmsgs_text_id IN ($delete_sql_id)";
$delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . "
$delete_sql_id = ""; WHERE privmsgs_id IN ($delete_sql_id)
for($i = 0; $i < count($mark_list); $i++) AND ";
{
if( $delete_sql_id != "" )
{
$delete_sql_id .= ", ";
}
$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 ";
switch($folder) switch($folder)
{ {
@ -716,20 +732,18 @@ else if( ( $delete && $mark_list ) || $delete_all )
break; 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); 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);
} }
} }
} }
} }
}
else if( $save && $mark_list && $folder != "savebox" && $folder != "outbox") else if( $save && $mark_list && $folder != "savebox" && $folder != "outbox")
{ {
if( !$userdata['session_logged_in'] ) if( !$userdata['session_logged_in'] )