LLMS_Events::record( array $args = array() )
Store an event in the database.
Parameters Parameters
- $args
-
(array) (Optional) Event data
- 'actor_id'
(int) WP_User ID. - 'object_type'
(string) Type of object being acted upon (post,user,comment,etc...). - 'object_id'
(int) WP_Post ID, WP_User ID, WP_Comment ID, etc... - 'event_type'
(string) Type of event (account, page, course, etc...). - 'event_action'
(string) The event action or verb (signon,viewed,launched,etc...).
Default value: array()
- 'actor_id'
Return Return
(LLMS_Event|WP_Error)
Source Source
File: includes/class-llms-events.php
public function record( $args = array() ) {
$err = new WP_Error();
foreach ( array( 'actor_id', 'object_type', 'object_id', 'event_type', 'event_action' ) as $key ) {
if ( ! in_array( $key, array_keys( $args ), true ) ) {
// Translators: %s = key name of the missing field.
$err->add( 'llms_event_record_missing_field', sprintf( __( 'Missing required field: "%s".', 'lifterlms' ), $key ) );
}
}
if ( $err->get_error_codes() ) {
return $err;
}
$event = sprintf( '%1$s.%2$s', $args['event_type'], $args['event_action'] );
if ( ! $this->is_event_valid( $event ) ) {
// Translators: %s = Submitted event string.
return new WP_Error( 'llms_event_record_invalid_event', sprintf( __( 'The event "%s" is invalid.', 'lifterlms' ), $event ) );
}
$args = $this->sanitize_raw_event( $args );
$meta = isset( $args['meta'] ) ? $args['meta'] : null;
unset( $args['meta'] );
if ( ! in_array( $event, array( 'session.start', 'session.end' ), true ) ) {
// Start a session if one isn't open.
$sessions = LLMS_Sessions::instance();
$user_id = 'account.signon' === $event && isset( $args['actor_id'] ) ? $args['actor_id'] : null;
if ( false === $sessions->get_current( $user_id ) ) {
$sessions->start( $user_id );
}
}
$llms_event = new LLMS_Event();
if ( ! $llms_event->setup( $args )->save() ) {
$err->add( 'llms_event_recored_unknown_error', __( 'An unknown error occurred during event creation.', 'lifterlms' ) );
return $err;
}
if ( $meta && ! empty( $meta ) ) {
$llms_event->set_metas( $meta, true );
}
// End the current session on signout.
if ( 'account.signout' === $event ) {
LLMS_Sessions::instance()->end_current();
}
return $llms_event;
}
Expand full source code Collapse full source code View on GitHub
Changelog Changelog
| Version | Description |
|---|---|
| 4.5.0 | Fixed event session end not recorded on sign-out. |
| 3.36.0 | Introduced. |