Thread: Show Thread Enhancements - [AJAX] Post Thank You Hack
View Single Post
  #1699  
Old 08-12-2009, 08:01 AM
Makc666's Avatar
Makc666 Makc666 is offline
 
Join Date: Dec 2002
Location: MSK-RU
Posts: 392
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
If he will give Thanks You in one Language,
then switch to another language
and then will hit remove his thanks,
the reputation comment with points will not be deleted.

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 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]'");
...

Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01184 seconds
  • Memory Usage 1,804KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_code
  • (6)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete