View Single Post
  #17  
Old 06-07-2005, 07:02 AM
kmike kmike is offline
 
Join Date: Oct 2002
Posts: 169
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Well, I see that the handling of alerts in the code is very prone to errors. It's in fact so broken that I don't even know how to start fixing it. I just put some bandaid hacks which disabled alerts altogether for us, as we don't need them.

First of all, the "alert" hidden form field in WarnUserNoPost and WarnUser forms (warn_addwarn and warn_addwarn_nopost templates) is never initialized at all, if alerts are disabled. It is supposed to be set to $_GET['alert'], but if alerts are disabled, no &alert=... parameter is being passed in URL to the forms, so "alert" form field stays empty.

So following the chain of events, this causes $alert global variable to be always empty in Warn.php script, in DoWarnUser and DoWarnUserNoPost sections. This in turn sets "if ($alert=='No')" condition in warn_calculations() function to true ($alert is empty, so it's not equal to "No"), and the execution of the script follows completely wrong code path from here, causing that bogus "This Warning Type does not allow you to issue an Alert." error.

All checks for $alert=='No' which are sprinkled all over the code are susceptible to this, too.
Part of the problem is an initial extremely bad database design decision - instead of using integer for a flag type db fields (alert, ban, etc), these fields are strings, and defaults to NULL, so in fact they could be in the 3 states: "Yes", "No" and NULL (or empty). This causes many problems and greatly encumbers the code as checks for empty values should be added everywhere.
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01041 seconds
  • Memory Usage 1,763KB
  • 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)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