[development] Creating a user and assigning a node in the node's submit callback.

Sam Tresler sam at treslerdesigns.com
Tue Jan 12 22:36:54 UTC 2010


Well,
   If that is the case then can you add a user reference field to the  
node that you populate in your form alter with the new users uid (i.e.  
somehow get the new user's id saved with the node)?  Then re-assign in  
a seperate hook_nodeapi to $node->uid on insert.  It's a little hack- 
ish, but if the only actual issue you are having is assigning the  
author's uid, then that would do it with a few lines of code.

-S

On Jan 12, 2010, at 5:31 PM, Brian Vuyk wrote:

> I thought about doing it that way, and looking back, perhaps I  
> should have... but the fields we are using are added to the form via  
> hook_form_alter, and aren't actually part of the node.
>
> Brian
>
> On 10-01-12 04:45 PM, Sam Tresler wrote:
>> I just did a very similar functionality only used hook_node_api:  
>> case 'insert' to create the user and set the author of the node.   
>> Works just fine there and you avoid any edge cases where the form  
>> is submited but the node isn't 'save-able'.
>>
>> -S
>>
>>
>> On Jan 12, 2010, at 4:24 PM, Brian Vuyk wrote:
>>
>>> Hi all.
>>>
>>> I've been trying to get a bit of code working, and I would  
>>> appreciate a set of eyes.
>>>
>>> Basically, I have a content type ('profile') which has fields for  
>>> user account details. If they are filled out, and a 'Create  
>>> account' checkbox is checked, a user account is created with those  
>>> details, and the profile node should be assigned to the newly- 
>>> created user instead of the user creating the node.
>>>
>>> The issue is that, while the new user is created properly in the  
>>> submit hook, the last line in the submit callback where I override  
>>> the 'uid' value from the form values doesn't work - the node just  
>>> saves with the user's uid instead of the uid of the new account  
>>> that is specified on the last line.
>>>
>>> Does anyone have any idea how to make this work?
>>>
>>> Thank you in advance for anyone that can suggest a solution!
>>>
>>> Brian
>>>
>>> <?php
>>> function mymodule_form_profile_node_form_alter(&$form, & 
>>> $form_state) {
>>> // Add our submit handler. We use array_unshift to prepend it, as  
>>> we want it
>>> // to execute before the regular node form submit handler.
>>> array_unshift($form['buttons']['submit']['#submit'],  
>>> 'mymodule_profile_form_submit');
>>> }
>>>
>>> // Submit the user account creation fields in the profile_node_form.
>>> function mymodule_profile_form_submit($form, &$form_state) {
>>>
>>> // Create the user account.
>>> if ($form_state['values']['create']) {
>>>   $account['name'] = $form_state['values']['username'];
>>>   $account['mail'] = $form_state['values']['mail'];
>>>   $account['pass'] = $form_state['values']['pass'];
>>>   $account['status'] = 1;
>>>   $account = user_save(array(), $account);
>>>
>>>   // Now set the uid of the profile node to be owned by this new  
>>> account.
>>>   $form_state['values']['uid'] = $account->uid;
>>> }
>>> }
>>> ?>
>>
>



More information about the development mailing list