Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 06-05-2012, 10:06 AM
christian.cloug christian.cloug is offline
 
Join Date: Mar 2012
Posts: 9
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Setting custom user profile fields with datamanager

I'm putting together a page that's an extension of the registration process and updates certain custom user profile fields...

i've done my best to search these forums to put the code together, and think i'm almost there, but could really use some help going the final distance!

Currently I get the following error 'Fatal error: Field field2 is not defined in $validfields in class vB_DataManager_User in [path]/includes/class_dm.php on line 515', with the code below:


PHP Code:
$vbulletin->input->clean_array_gpc('p', array(
    
'cfield_2' => TYPE_NOHTML,
    
'cfield_6' => TYPE_INT,
    
'cfield_7' => TYPE_INT
));


$userdata =& datamanager_init('User'$vbulletinERRTYPE_ARRAY); 
$userdata->set_existing($vbulletin->userinfo);

$userdata->set('field2'$vbulletin->GPC['cfield_2']); 
$userdata->set('field6'$vbulletin->GPC['cfield_6']); 
$userdata->set('field7'$vbulletin->GPC['cfield_7']);


$newusergroupid 9;
$userdata->set('usergroupid'$newusergroupid);


$userdata->pre_save(); 


if (!empty(
$userdata->errors)) 

    
$errorlist ''
    foreach (
$userdata->errors AS $index => $error
    { 
        
$errorlist .= "<li>$error</li>"
    } 
     
    
// ... additional code; $errorlist is outputted to the user 

else 

    
// save the data 
    
$vbulletin->userinfo['userid'
        = 
$userid 
        
$userdata->save(); 
         
    
// ... additional processing code 

So 'field2' doesn't seem to be valid (even though that's the name of the column in the database and when you do '{vb:raw bbuserinfo.field2}')...should i call it by a different syntax? or do i need to define things in $validfields (the documentation does not explain how exactly this is done)?

I would be very grateful if anyone could point me in the right direction here!
Reply With Quote
  #2  
Old 06-05-2012, 11:43 AM
Badshah93 Badshah93 is offline
 
Join Date: Jun 2010
Location: India
Posts: 505
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When you updating any existing data using datamanager then you need to call
set_existing function first.

Try This Code: (Run this code after registration is complete)

PHP Code:
$userdata =& datamanager_init('User'$vbulletinERRTYPE_STANDARD);
    
$userdata->set_existing($vbulletin->userinfo);

        
$userfields = array('field2' => $vbulletin->GPC['cfield_2'], 
                                    
'field6' => $vbulletin->GPC['cfield_6'], 
                                    
'field7' => $vbulletin->GPC['cfield_7']
                             );

        
// Saving Userfields Now

        
$userdata->set_userfields($userfields);

        
$newusergroupid 9
        
$userdata->set('usergroupid'$newusergroupid); 

        
$userdata->pre_save();  


         if (!empty(
$userdata->errors))  
        {  
              
$errorlist '';  
              foreach (
$userdata->errors AS $index => $error)  
             {  
                  
$errorlist .= "<li>$error</li>";  
             }  
      
              
// ... additional code; $errorlist is outputted to the user  
        
}  
       else  
       {  
             
// save the data  
            
$vbulletin->userinfo['userid']  = $userid  $userdata->save();  
          
             
// ... additional processing code  
       

Reply With Quote
  #3  
Old 06-05-2012, 07:11 PM
christian.cloug christian.cloug is offline
 
Join Date: Mar 2012
Posts: 9
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Badshah - thank you very much for your help, really appreciate it!

I've replaced with your code (and am running it after registration as you suggest), now I:
  • Don't get the same error as before
  • Don't get any errors of any kind
  • The usergroup for the user is updated properly to '9' as per the code
  • ?but unfortunately, the 3 custom profile fields are not updated...

I'm guessing that my problem may lie in the way the inputs from the user are handled, i.e. cfield_2, cfield_6 and cfield_7 - these are currently 3 text inputs on the previous page (named and ID'd like this), which are 'posted' to this page with the code we're discussing...

I'm sorry this is probably basic stuff - do I need to declare these posted variables at all on this page or anything?

Thank you for your time.
Reply With Quote
  #4  
Old 06-05-2012, 07:43 PM
Badshah93 Badshah93 is offline
 
Join Date: Jun 2010
Location: India
Posts: 505
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

do one thing

put this code at bottom of the script which i gave you and see if you get any output on top of page
PHP Code:
print_r($userfields); 
and as you said that you have extended registration process by one step, which plugin you used for that ?

i would have used
PHP Code:
register_addmember_complete 
Code:
PHP Code:
if ($newusergroupid == 2// or any other condition which you want
{
    
$_REQUEST['do'] = 'register2';   // Extended Step

Reply With Quote
  #5  
Old 06-05-2012, 08:20 PM
christian.cloug christian.cloug is offline
 
Join Date: Mar 2012
Posts: 9
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

put in the print_r, it gives:


Array ( [field2] => [field6] => [field7] => [field2_opt] => [field6_opt] => [field7_opt] => )

Doesn't look good I know - any idea what i'm doing wrong? The form I submit to this code looks like this:

HTML Code:
<form id="signup_step2" action="../signup.php?do=3" method="post">

<div style="position:absolute;left:60px;top:180px;width:330px;">

<table class="sign-up_step_inputs_tighter" style="margin-top:30px;">
<tr>
<td style="font-weight:strong;width:75px;text-align:right;">Location</td>
<td><input type="text" id="cfield_2" name="cfield_2" onfocus="this.className='textbox_cn_focus';" onblur="this.className='textbox_cn';" class="textbox_cn"/></td>
</tr>
<tr>
<td style="font-weight:strong;text-align:right;">Latitude</td>
<td><input type="text" id="cfield_6" name="cfield_6" onfocus="this.className='textbox_cn_focus';" onblur="this.className='textbox_cn';" class="textbox_cn"/></td>
</tr>
<tr>
<td style="font-weight:strong;text-align:right;">Longitude</td>
<td><input type="text" id="cfield_7" name="cfield_7" onfocus="this.className='textbox_cn_focus';" onblur="this.className='textbox_cn';" class="textbox_cn"/></td>
</tr>
</table>

<div style="width:100%;text-align:right;">
     <input type="hidden" name="securitytoken" value="{vb:raw bbuserinfo.securitytoken}" />
     <input id="submit_sign-up" type="submit" tabindex="104" value="Next Step" style="color:white;"/>
</div>

</form>
i'm extending registration by a round-the-back way (really just an amateur improvisation) - I've reduced register.php to just username, password and email, and then once they've done this and completed email activation, I use the plugin 'Register Redirect' (https://vborg.vbsupport.ru/showthread.php?t=242351) to send to a custom vbulletin powered page where I show them various inputs to complete the custom fields of their profile... My plan is to somehow use user groups to limit users who haven't completed the extended steps to seeing anything else on the site (even though they are actually 'registered')...

You mention 'register_addmember_complete', is that something to do with cookies? Think I should be going down a different route?

Again, thanks a lot for your help here!
Reply With Quote
  #6  
Old 06-05-2012, 08:26 PM
Badshah93 Badshah93 is offline
 
Join Date: Jun 2010
Location: India
Posts: 505
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Use This Code in signup.php script

PHP Code:
if ($_POST['do'] == '3')
{

   
$vbulletin->input->clean_array_gpc('p', array( 
    
'cfield_2' => TYPE_NOHTML
    
'cfield_6' => TYPE_INT
    
'cfield_7' => TYPE_INT 
)); 
   
$userdata =& datamanager_init('User'$vbulletinERRTYPE_STANDARD);
    
$userdata->set_existing($vbulletin->userinfo);

        
$userfields = array('field2' => $vbulletin->GPC['cfield_2'], 
                                    
'field6' => $vbulletin->GPC['cfield_6'], 
                                    
'field7' => $vbulletin->GPC['cfield_7']
                             );

        
// Saving Userfields Now

        
$userdata->set_userfields($userfields);

        
$userdata->set('usergroupid'9); 

        
$userdata->pre_save();  


         if (!empty(
$userdata->errors))  
        {  
              
$errorlist '';  
              foreach (
$userdata->errors AS $index => $error)  
             {  
                  
$errorlist .= "<li>$error</li>";  
             }  
      
              
// ... additional code; $errorlist is outputted to the user  
        
}  
       else  
       {  
             
// save the data  
            
$vbulletin->userinfo['userid']  = $userid  $userdata->save();  
          
             
// ... additional processing code  
       
}  

Reply With Quote
  #7  
Old 06-05-2012, 08:39 PM
christian.cloug christian.cloug is offline
 
Join Date: Mar 2012
Posts: 9
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Problem solved, many thanks!
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 04:49 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07187 seconds
  • Memory Usage 2,279KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_html
  • (6)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete