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 [email protected] On Wed, Jan 13, 2010 at 9:46 AM, Brian Vuyk <[email protected]> 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; >> } >> } >> ?> >> > >
