As this one died on page 114.
I am posting this one again here.
The bug is also in version for 4.* as the core part was not changed.
BUG
There is a serious bug which has effect on forums which have several languages on them.
The problem is with actions:
- Remove Your Thanks
- Remove All
The effected file is:
Code:
./includes/functions_post_thanks.php
Function is:
PHP Code:
function delete_all_thanks($postinfo, $remove_users_thanks_count = true)
{
...
}
Code is:
PHP Code:
if ($vbulletin->options['post_thanks_reputation'] && ($remove_users_thanks_count == true || $vbulletin->options['post_thanks_delete_remove_thanks_count']))
{
$vbulletin->db->query_write("DELETE FROM ". TABLE_PREFIX ."reputation WHERE postid = '$postinfo[postid]' AND reason = '$vbphrase[post_thanks_thanked_post]'");
if ($vbulletin->db->affected_rows() != 0)
{
$total_rep_got = $vbulletin->options['post_thanks_reputation'] * $nb;
$set_user_got .= ", reputation = reputation - $total_rep_got";
}
}
Line:
PHP Code:
$vbulletin->db->query_write("DELETE FROM ". TABLE_PREFIX ."reputation WHERE postid = '$postinfo[postid]' AND reason = '$vbphrase[post_thanks_thanked_post]'");
Problem part:
PHP Code:
AND reason = '$vbphrase[post_thanks_thanked_post]'
As you can see you use
$vbphrase[post_thanks_thanked_post].
But for every language it has it's own "variable".
For English it will be "
Thanked Post".
For German it will be "
Dankte Post".
For Russian it will be "
Сообщение с благодарностью".
etc.
So if Admin uses English and will hit 'Remove All' then only English reputation comments with points will be deleted. All other languages reputation comments with points will not be deleted.
The same for normal user.
The biggest problem is here!!!
- Normal user give "Thanks You" in one Language
- Then he switches to another language
- He hits remove his "Thanks You"
- And the reputation comment with points will not be deleted!!!
- So the user can give "Thanks You" Points again and again!!!
I am thinking for two days how to fix this one.
Of course we can try to search for all languages variables but the problem is that language variables can be changeable.
So this is not a clear decision.
We can also remove
PHP Code:
AND reason = '$vbphrase[post_thanks_thanked_post]'
But this will delete normal reputation comments.
The only "fix" for this one I see is to have another table with comments' IDs which where given by pressing "Thank You" button.
This will be the best and as I can see the only one correct variant.
P.S. The same problem (BUG) is for [AJAX] Post Groan Hack.
PHP Code:
function delete_all_groans($postinfo, $remove_users_groan_count = true)
{
...
$vbulletin->db->query_write("DELETE FROM ". TABLE_PREFIX ."reputation WHERE postid = '$postinfo[postid]' AND reason = '$vbphrase[post_groan_groaned_post]'");
...
}