View Single Post
  #1  
Old 07-29-2008, 09:51 PM
jesus likes pie jesus likes pie is offline
 
Join Date: Apr 2005
Posts: 342
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default what's going on with this code???

I nearly got this to work perfectly but there's a problem driving me NUTS:

Here's the plugin code (hook: profile_updateprofile)

PHP Code:
$user $db->query_first("
            SELECT field5
            FROM " 
TABLE_PREFIX "userfield
            WHERE userid = " 
$vbulletin->userinfo['userid'] . "
        "
);


        if (
$user['field5'] == 'Windows Vista Ultimate')
        {
        
$membergroupids $userdata->fetch_field('membergroupids');
        if (
$membergroupids != "")
        {
            
$membergroupids str_replace(", 10"""$membergroupids);
            
$membergroupids str_replace("10"""$membergroupids);
            
$membergroupids $membergroupids ", 9";
        }
        else
        {
            
$membergroupids '9';
        }

        
$userdata->set('membergroupids'$membergroupids);
        }
        else 
// ($user['field5'] == 'Windows Vista Home Premium')
        
{
        {
        
$membergroupids $userdata->fetch_field('membergroupids');
        if (
$membergroupids != "")
        {
            
$membergroupids str_replace(", 9"""$membergroupids);
$membergroupids str_replace("9"""$membergroupids);
            
$membergroupids $membergroupids ", 10";
        }
        else
        {
            
$membergroupids '10';
        }

        
$userdata->set('membergroupids'$membergroupids);
        }
        } 
Goal: There is a field I have for Operating System selection. It's a single selection dropdown (field5). Depending on what the user selects I want to move them into a specific secondary usergroup. They should not be able to be in 2 OS usergroups at the same time so if they switch the OS selection the code is supposed to remove all instances of the other OS-related usergroup IDs and then it updates with the new usergroup ID.

The current code is of course incomplete. I only have 2 selections because I was testing if it would work as designed so far. And it's nearly there.

The problem:

I select one of the options (let's say windows ultimate) and click update --> it will correctly modify the database. So far so good. However, if I go back and change from ultimate to home premium then the databse will not be altered. I cannot understand WHY this happens. Now here's the kicker: if I go back to edit my profile, the field IS set to home premium, so without touching anything and then clicking update THEN the database will get modified to reflect the usergroup changes.

Effectively you need to update your profile twice for it to work. No idea why.

And it gets a bit stranger...

If you only update once (so the databse has not changed yet in regards to the usergroup) and then return to the field selection but switch back to Ultimate and click update, the databse SHOULD not get modified since you put the field selection to correspond with what the databse is showing. HOWEVER...it DOES get modified and you get put into the home premium usergroup when it should be in the ultimate usergroup. And then it gets really confused because it now switched the IDs which correspond to the usergroups and furthermore it no longer requires that you update twice in order for it to modify the database usergroup records.

So once vB reverses the code to make ultimate updates give out the home premium usergroup (and vice verca) it no longer needs you to update twice.


Any ideas on WHY this is happening???

--------------- Added [DATE]1217395058[/DATE] at [TIME]1217395058[/TIME] ---------------

bump..
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01312 seconds
  • Memory Usage 1,797KB
  • 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_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