$recording_user->ID, 'user_login' => $recording_user->user_login, 'display_name' => $recording_user->display_name, ); // Determine the display user (defaults to recorder; may differ for premium attribution). $display_user = $recording_user; if ( $attributed_user_id && $attributed_user_id !== $recording_user->ID ) { $attr_user = get_userdata( $attributed_user_id ); if ( $attr_user && $attr_user->ID ) { $display_user = $attr_user; } } // Resolve display user role. $user_role = 'guest'; if ( ! empty( $display_user->roles ) && is_array( $display_user->roles ) ) { $user_role = reset( $display_user->roles ); } // Resolve timestamp: use supplied datetime or current site time. $created_at = ! empty( $event_datetime ) ? $event_datetime : current_time( 'mysql' ); // Build metadata array. $metadata = array( 'note_message' => $message, 'source' => 'recorded_note', 'recorded_by' => $recorder, ); if ( ! empty( $details ) ) { $metadata['note_details'] = $details; } // Store attribution metadata when on-behalf-of is used. if ( $attributed_user_id && $attributed_user_id !== $recording_user->ID ) { $metadata['attributed_to'] = array( 'user_id' => $display_user->ID, 'user_login' => $display_user->user_login, 'display_name' => $display_user->display_name, ); } // Store backdate metadata when a custom datetime is used. if ( ! empty( $event_datetime ) ) { $metadata['is_backdated'] = true; $metadata['backdated_to'] = $event_datetime; } // Build the database row — matches the table schema. $data = array( 'user_id' => $display_user->ID, 'user_role' => $user_role, 'user_login' => $display_user->user_login, 'user_display_name' => $display_user->display_name, 'ip_address' => ACTLOGPRO_Logger::get_ip_address(), 'event_type' => self::EVENT_TYPE, 'object_type' => self::EVENT_TYPE, 'object_id' => 0, 'object_name' => wp_trim_words( $message, 10, '…' ), 'action' => self::ACTION, 'severity' => $severity, 'description' => sprintf( /* translators: %s: the note message text */ __( 'Recorded a note: %s', 'activity-log-pro' ), $message ), 'metadata' => maybe_serialize( $metadata ), 'created_at' => $created_at, ); return ACTLOGPRO_Database::log_activity( $data ); } }