View Single Post
  #5  
Old 02-12-2009, 09:26 AM
Gandalf-LoJ Gandalf-LoJ is offline
 
Join Date: Feb 2005
Location: Sussex, UK
Posts: 15
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Danny.VBT View Post
You should be calling pre_save() (I think that is the name of the function off the top of my head) before doing any error calling - it is there where the error array is populated.
Thanks, I'll look into that. I never used to have the error check in there. I put that in to see if there were any occuring.

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

ok, getting somewhere now. It's not the loop failing as I've tried removing that part and copying the code out three times then setting the award id manually like so;

PHP Code:
// Awards - This controls the foreach statement and is used as the array index for $grouparr
$awardarr = array(35691213141718202124252931323839);

// Groups - Here we have the relevant award as the index and the group that award belongs to as the value
$grouparr = array(
                    
=> 50,
                    
=> 38,
                    
=> 50,
                    
=> 53,
                    
12 => 23,
                    
13 => 43,
                    
14 => 43,
                    
17 => 51,
                    
18 => 37,
                    
20 => 53,
                    
21 => 53,
                    
24 => 53,
                    
25 => 53,
                    
29 => 48,
                    
31 => 40,
                    
32 => 39,
                    
38 => 46,
                    
39 => 52
                
);

// ########################################################################
// ######################### USERGROUP UPDATES ############################
// #########################    GIVE ACCESS    ############################
// ########################################################################


    
$awardval 3;
    
$aw2gr $grouparr[$awardval];
    echo 
"<br><br>Award=".$awardval.", Group=".$aw2gr;
    
// check for award and update secondary usergroup if required
    
$giveawards $vbulletin->db->query_read("
        SELECT award_id, userid 
        FROM " 
TABLE_PREFIX "award_user
        WHERE award_id = 
$awardval
    "
);
    
    if (
$vbulletin->db->num_rows($giveawards) > 0)
    {
        while (
$giveawardsrow $vbulletin->db->fetch_array($giveawards))
        { 
// for each award, check to see if they are a member of the relevant group and update accordingly
            
$userdm =& datamanager_init('User'$vbulletinERRTYPE_ARRAY); 
            
$userinfo fetch_userinfo($giveawardsrow['userid']);
            
$userdm->set_existing($userinfo); 
            
$membergroupids $userdm->fetch_field('membergroupids');
            echo 
"<br>Existing Groups=".$membergroupids." | ";
            if (
$membergroupids != "")
            {
                
$withcomma "," $aw2gr;
                
$trailingcomma $aw2gr ",";
                
$membergroupids str_replace("$withcomma"""$membergroupids);
                
$membergroupids str_replace("$trailingcomma"""$membergroupids);
                
$membergroupids str_replace("$aw2gr"""$membergroupids);
                if (
$membergroupids != "")
                {
                    
$membergroupids $membergroupids $withcomma;
                }
                else
                {
                    
$membergroupids $aw2gr;
                }
            }
            else
            {
                
$membergroupids $aw2gr;
            }
            echo 
"UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            
$userdm->set('membergroupids'$membergroupids);
            
$userdm->pre_save();
            if (
count($userdm->errors))
            {
                for (
$i 0$i count($userdm->errors); $i++)
                {
                    echo 
"ERROR{$i}:{$userdm->errors[$i]}\n";
                }
            }
            else
            {
                
// If everything is OK
                
$userdm->save();
                echo 
" | Account updated!";
                
$userdm->set_existing($userinfo);
                
$membergroupids $userdm->fetch_field('membergroupids');
                echo 
" | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            }
        }
        
$vbulletin->db->free_result($giveawardsrow);
    }



    
$awardval 5;
    
$aw2gr $grouparr[$awardval];
    echo 
"<br><br>Award=".$awardval.", Group=".$aw2gr;
    
// check for award and update secondary usergroup if required
    
$giveawards $vbulletin->db->query_read("
        SELECT award_id, userid 
        FROM " 
TABLE_PREFIX "award_user
        WHERE award_id = 
$awardval
    "
);
    
    if (
$vbulletin->db->num_rows($giveawards) > 0)
    {
        while (
$giveawardsrow $vbulletin->db->fetch_array($giveawards))
        { 
// for each award, check to see if they are a member of the relevant group and update accordingly
            
$userdm =& datamanager_init('User'$vbulletinERRTYPE_ARRAY); 
            
$userinfo fetch_userinfo($giveawardsrow['userid']);
            
$userdm->set_existing($userinfo); 
            
$membergroupids $userdm->fetch_field('membergroupids');
            echo 
"<br>Existing Groups=".$membergroupids." | ";
            if (
$membergroupids != "")
            {
                
$withcomma "," $aw2gr;
                
$trailingcomma $aw2gr ",";
                
$membergroupids str_replace("$withcomma"""$membergroupids);
                
$membergroupids str_replace("$trailingcomma"""$membergroupids);
                
$membergroupids str_replace("$aw2gr"""$membergroupids);
                if (
$membergroupids != "")
                {
                    
$membergroupids $membergroupids $withcomma;
                }
                else
                {
                    
$membergroupids $aw2gr;
                }
            }
            else
            {
                
$membergroupids $aw2gr;
            }
            echo 
"UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            
$userdm->set('membergroupids'$membergroupids);
            
$userdm->pre_save();
            if (
count($userdm->errors))
            {
                for (
$i 0$i count($userdm->errors); $i++)
                {
                    echo 
"ERROR{$i}:{$userdm->errors[$i]}\n";
                }
            }
            else
            {
                
// If everything is OK
                
$userdm->save();
                echo 
" | Account updated!";
                
$userdm->set_existing($userinfo);
                
$membergroupids $userdm->fetch_field('membergroupids');
                echo 
" | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            }
        }
        
$vbulletin->db->free_result($giveawardsrow);
    }



    
$awardval 9;
    
$aw2gr $grouparr[$awardval];
    echo 
"<br><br>Award=".$awardval.", Group=".$aw2gr;
    
// check for award and update secondary usergroup if required
    
$giveawards $vbulletin->db->query_read("
        SELECT award_id, userid 
        FROM " 
TABLE_PREFIX "award_user
        WHERE award_id = 
$awardval
    "
);
    
    if (
$vbulletin->db->num_rows($giveawards) > 0)
    {
        while (
$giveawardsrow $vbulletin->db->fetch_array($giveawards))
        { 
// for each award, check to see if they are a member of the relevant group and update accordingly
            
$userdm =& datamanager_init('User'$vbulletinERRTYPE_ARRAY); 
            
$userinfo fetch_userinfo($giveawardsrow['userid']);
            
$userdm->set_existing($userinfo); 
            
$membergroupids $userdm->fetch_field('membergroupids');
            echo 
"<br>Existing Groups=".$membergroupids." | ";
            if (
$membergroupids != "")
            {
                
$withcomma "," $aw2gr;
                
$trailingcomma $aw2gr ",";
                
$membergroupids str_replace("$withcomma"""$membergroupids);
                
$membergroupids str_replace("$trailingcomma"""$membergroupids);
                
$membergroupids str_replace("$aw2gr"""$membergroupids);
                if (
$membergroupids != "")
                {
                    
$membergroupids $membergroupids $withcomma;
                }
                else
                {
                    
$membergroupids $aw2gr;
                }
            }
            else
            {
                
$membergroupids $aw2gr;
            }
            echo 
"UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            
$userdm->set('membergroupids'$membergroupids);
            
$userdm->pre_save();
            if (
count($userdm->errors))
            {
                for (
$i 0$i count($userdm->errors); $i++)
                {
                    echo 
"ERROR{$i}:{$userdm->errors[$i]}\n";
                }
            }
            else
            {
                
// If everything is OK
                
$userdm->save();
                echo 
" | Account updated!";
                
$userdm->set_existing($userinfo);
                
$membergroupids $userdm->fetch_field('membergroupids');
                echo 
" | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
            }
        }
        
$vbulletin->db->free_result($giveawardsrow);
    } 
It runs fine and everything echos correctly however only the members in the very first segment get their groups set. The following two (award ids 5 and 9) are ignored even though the queries do run as proved by the correct data being echoed to screen.

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

ok, it's the arrays at the top thats causing the problem.

A follow on from the 'three stage' test that I done still referenced one array.

I commented out the following line at the beginning of each step like so;
PHP Code:
//$aw2gr = $grouparr[$awardval]; 
and hardcoded the value to each one like so;
PHP Code:
$aw2gr 50
and it all works perfectly.

Looks like I need to do some more reading on arrays which I've not used in php too much.

Finally getting somewhere!
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01336 seconds
  • Memory Usage 1,965KB
  • 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
  • (3)bbcode_php
  • (1)bbcode_quote
  • (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