[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