function hook_user_presave

You are here

7 user.api.php hook_user_presave(&$edit, $account, $category)
8 user.api.php hook_user_presave($account)

A user account is about to be created or updated.

This hook is primarily intended for modules that want to store properties in the serialized {users}.data column, which is automatically loaded whenever a user account object is loaded, modules may add to $edit['data'] in order to have their data serialized on save.


$edit: The array of form values submitted by the user. Assign values to this array to save changes in the database.

$account: The user object on which the operation is performed. Values assigned in this object will not be saved in the database.

$category: The active category of user information being edited.

See also



Related topics

6 functions implement hook_user_presave()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

block_user_presave in modules/block/block.module
Implements hook_user_presave().
contact_user_presave in modules/contact/contact.module
Implements hook_user_presave().
entity_crud_hook_test_user_presave in modules/simpletest/tests/entity_crud_hook_test.module
Implements hook_user_presave().
overlay_user_presave in modules/overlay/overlay.module
Implements hook_user_presave().
profile_user_presave in modules/profile/profile.module
Implements hook_user_presave().

... See full list

2 invocations of hook_user_presave()
field_attach_presave in modules/field/
Perform necessary operations just before fields data get saved.
user_save in modules/user/user.module
Save changes to a user account or add a new user.


modules/user/user.api.php, line 228
Hooks provided by the User module.


function hook_user_presave(&$edit, $account, $category) {
  // Make sure that our form value 'mymodule_foo' is stored as
  // 'mymodule_bar' in the 'data' (serialized) column.
  if (isset($edit['mymodule_foo'])) {
    $edit['data']['mymodule_bar'] = $edit['mymodule_foo'];


This thing does not work like hook_node_presave. I had to save the user profile form twice for the changes to take effect. Had to resort to using hook_user_profile_submit and user_save() to populate a field so the user would not have to do it. Crazy. I believe in Drupal 8 users will be entities too so maybe it will work the same way then.

If I am wrong and something else must be causing the problem for me then feel free to say so!

worked for me.

function pp_user_customizations_user_presave(&$edit, $account, $category) {
  $grade_level = $edit['field_grade_level']['und'][0]['value'];
  if($grade_level != "no"){
    $edit['field_title']['und'][0]['value'] = "user_title";

Use the following snippet if you want to know if an user is being created :
<?php if ($account->is_new){ //Do things } ?>