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

Sam Tresler sam at treslerdesigns.com
Tue Jan 12 22:47:09 UTC 2010


Oh, and I'm sure you are considering this, but in your code sample, an  
anonymous user could, I believe, create multiple user entries with the  
same email and different uid's, or, just overwrite their existing user  
profile (which may be fine).  This is why I had to write a whole  
collect_user function that checked the user and if they existed  
attributed an action to that user in a separate table.  Hope this helps.

-S

On Jan 12, 2010, at 5:36 PM, Sam Tresler wrote:

> 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