[development] Creating a user and assigning a node in the node's submit callback.
Brian Vuyk
brian at brianvuyk.com
Tue Jan 12 22:31:31 UTC 2010
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