2

I created new menu item witch I want to insert a custom form to edit some user fields :

$items['user/%user/edit-custom'] = array(
        'title' => 'Knowladge',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('user_profile_form_custom', 1),
        'access callback' => 'user_edit_access',
        'access arguments' => array(1),
        'type' => MENU_LOCAL_TASK,
    );
    return $items;

Then the custom function that return the form :

function user_profile_form_custom(){
    module_load_include('inc', 'user', 'user.pages');

    global $user;  
    $user = user_load($user->uid);

    $form = drupal_get_form('user_profile_form', $user, 'account', 'custom'); 

    return $form;
}

When visiting "user/%user/edit-custom" page I can see the profile page, then with some logic code in hook_form_alter I can hide some fields and show up only needed fields...

But the problem that I can't save the form, I get this error :

Fatal error: Call to undefined function user_profile_form_validate() in path_to_drupal/includes/form.inc on line 1514

this solution is inspired from answers described in this post .

Have you any idea please how to solve this, or if you have another way to get some user fields, edit them in a custom page, and save the changes.

Thanks in advance.

0

Is it possible you missed the comment (below)? It's on the post you linked to.

"module_load_include('inc', 'user', 'user.pages'); should be added to hook_init() otherwise all profile form functionalities that require AJAX calls will return the error 'Call to undefined function user_profile_form_validate().'"

  • yes, I tried also to add "module_load_include" in hook_init but I get another error : Fatal error: __clone method called on non-object in path_to/modules/user/user.pages.inc on line 313 – Boussetta moez Jun 3 '14 at 21:52
  • @Boussettamoez - It's telling you that $user is not an object. Did you keep the rest of your code in user_profile_form_custom()? I'm not sure if it's related, but you shouldn't have to call user_load() after global $user;. But I'm not even sure the global user is what you want. Don't you want the user whose ID is in the menu path (%user)? – othermachines Jun 3 '14 at 22:33
  • @Boussettamoez - In user_profile_form_custom(), unless I'm misunderstanding what you are trying to do, I would suggest getting your user this way: $user = user_load(arg(1));. – othermachines Jun 3 '14 at 22:41
  • Sorry, but I get the same error even if I use user_load(arg(1));! – Boussetta moez Jun 4 '14 at 7:34
  • But you will get the right user. :-) You're right about $form and &$form_state (below). Amazed that I overlooked that. I believe it's required. – othermachines Jun 4 '14 at 15:11
0

Adding the parameters $form and &$form_state in the custom function must correct the bug!

0

Instead of module_load_include(), use form_load_include().

Here's the code:

  global $user;
  $account = user_load($user->uid);

  $form_state = array();
  $form_state['build_info']['args'] = array($account);

  form_load_include($form_state, 'inc', 'user', 'user.pages');

  $form = drupal_build_form('user_profile_form', $form_state);

  $output = drupal_render($form);

  return $output;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.