Specifically (sorry had to remove some names from the code), in this case we have a separate function that creates the user and returns the user object (we need to check if the user already exists and load it if it does in that function) :

function module_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
    switch($op) {
      case 'insert':
        switch($node->type) {
          case 'ind_pet':
          /** Populate a user profile **/
          $purpose_user = array(
            'mail' => $node->field_mail[0]['email'],
            'first' => $node->field_first[0]['value'],
            'last' => $node->field_last[0]['value'],
          );

          /** Create the profile if it doesn't already exist **/
          $profile = module_collect_user($purpose_user);

          /** Set the Author properly before saving the node **/
          $node->uid = $profile->uid;

          /** Fire Email **/
actions_do('lsa_ded_book_creation_thank_you_email_action', $node);

          break;
      }


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;
 }
}
?>

Reply via email to