You'll want to hook into the
user_content_change_init
and/or
user_delete_clean_init
events in any add-on which has tables with
user_id
and/or
username
columns. The former is for handling user ID and username changes that occur due to user renames, merges, and deletions. It will update the rows with the new username or user ID, but will not delete rows when a user is deleted. The latter is for deleting rows when a user is deleted, in which case you'll want to set
emptyable
to false for that table in the former event.
For the former, consider posts, which are updated accordingly but not removed when a user is deleted. In
user_content_change_init
:
PHP:
$updates['xf_post'] = ['user_id', 'username'];
For the latter, consider poll votes, which are removed when a user is deleted. In
user_content_change_init
:
PHP:
$updates['xf_poll_vote'] = ['user_id', 'emptyable' => false];
... and in
user_delete_clean_init
:
PHP:
$deletes['xf_poll_vote'] = 'user_id = ?';
Setting
emptyable
to false ensures the
user_id
is not set to
0
on deletion, so that the rows can be deleted accordingly.
Lastly, there is
user_merge_combine
, which is for situations where you need to combine the data of two users when they are merged. For example, message counts are combined when users are merged:
PHP:
$target->message_count += $source->message_count;