[development] Creating a user and assigning a node in the node's submit callback.
Sam Tresler
sam at treslerdesigns.com
Tue Jan 12 21:52:26 UTC 2010
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;
> }
> }
> ?>
More information about the development
mailing list