protected function get_user_email_verification_code($user_id)
{
$generate_new_code = false;
$user = get_user_by('id', $user_id);
$verification_data = get_user_meta($user_id, self::META_VERIFICATION_DATA, true);
if (!$verification_data) {
$verification_data = array('touch' => current_time('timestamp', true));
$generate_new_code = true;
}
if ($verification_data['email'] != $user->user_email) {
$generate_new_code = true;
}
if ($generate_new_code) {
$verification_data['code'] = bin2hex(openssl_random_pseudo_bytes(16));
$verification_data['touch'] = current_time('timestamp', true);
}
// Refresh the email, in case it changed since we created the meta
// (this can happen if a user changes their email 1+ times)
$verification_data['email'] = $user->user_email;
update_user_meta($user_id, self::META_VERIFICATION_DATA, $verification_data);
return $verification_data['code'];
}