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

Dave Reid dave at davereid.net
Wed Jan 13 18:03:54 UTC 2010


Speaking of that fun little bit of code, http://drupal.org/node/683630 is a
D7 patch I just submitted to remove the hard-coded 'administer users' check
and clean up that logic in node_submit(). It could use a review or two. :)

Dave Reid
dave at davereid.net


On Wed, Jan 13, 2010 at 9:46 AM, Brian Vuyk <brian at brianvuyk.com> wrote:

> Just to follow up on the original post...
>
> The reason this wouldn't save is because of this little code block in
> node_submit() which is called by the node_form_submit() submit handler,
> which executes after my custom submit handler:
>
> if ($account = user_load(array('name' => $node->name))) {
>  $node->uid = $account->uid;
> }
>
> Setting $form_state['values']['name'] to the new account's name caused the
> right uid to be assigned.
>
> Thanks for the responses and suggestions, all of you!
>
> Brian
>
>
> On 10-01-12 04: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;
>>  }
>> }
>> ?>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/development/attachments/20100113/292d9ae6/attachment.html 


More information about the development mailing list