mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 22:28:51 +00:00
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:
parent
f1c2c23ec9
commit
dfba6520d6
1 changed files with 42 additions and 28 deletions
|
@ -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 ";
|
|
||||||
$delete_text_sql = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
|
|
||||||
WHERE ";
|
|
||||||
|
|
||||||
$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 = "DELETE FROM " . PRIVMSGS_TEXT_TABLE . "
|
||||||
$delete_text_sql .= "privmsgs_text_id IN ($delete_sql_id)";
|
WHERE privmsgs_text_id IN ($delete_sql_id)";
|
||||||
|
$delete_sql = "DELETE FROM " . PRIVMSGS_TABLE . "
|
||||||
$delete_sql .= " AND ";
|
WHERE privmsgs_id IN ($delete_sql_id)
|
||||||
|
AND ";
|
||||||
|
|
||||||
switch($folder)
|
switch($folder)
|
||||||
{
|
{
|
||||||
|
@ -716,16 +732,14 @@ 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue