File "class-loggerroute.php"
Full path: /home/webcknlt/admissiontell.com/wp-content/plugins/vibes/includes/api/class-loggerroute.php
File
size: 3.92 B (3.92 KB bytes)
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor &nnbsp; Back
<?php
/**
* DecaLog logger read handler
*
* Handles all logger reads.
*
* @package API
* @author Pierre Lannoy <https://pierre.lannoy.fr/>.
* @since 2.0.0
*/
namespace Vibes\API;
use Vibes\System\Role;
use Vibes\Plugin\Feature\Wpcli;
use Vibes\Plugin\Feature\Memory;
/**
* Define the item operations functionality.
*
* Handles all item operations.
*
* @package API
* @author Pierre Lannoy <https://pierre.lannoy.fr/>.
* @since 2.0.0
*/
class LoggerRoute extends \WP_REST_Controller {
/**
* The acceptable levels.
*
* @since 2.0.0
* @var array $filters The acceptable levels.
*/
protected $filters = [ 'all', 'webvital', 'source', 'navigation' ];
/**
* Register the routes for the objects of the controller.
*
* @since 2.0.0
*/
public function register_routes() {
$this->register_route_livelog();
}
/**
* Register the routes for livelog.
*
* @since 2.0.0
*/
public function register_route_livelog() {
register_rest_route(
VIBES_REST_NAMESPACE,
'livelog',
[
[
'methods' => 'GET',
'callback' => [ $this, 'get_livelog' ],
'permission_callback' => [ $this, 'get_livelog_permissions_check' ],
'args' => array_merge( $this->arg_schema_livelog() ),
'schema' => [ $this, 'get_schema' ],
],
]
);
}
/**
* Get the query params for livelog.
*
* @return array The schema fragment.
* @since 2.0.0
*/
public function arg_schema_livelog() {
return [
'index' => [
'description' => 'The index to start from.',
'type' => 'string',
'required' => false,
'default' => '0',
'sanitize_callback' => 'sanitize_text_field',
],
'filter' => [
'description' => 'The filter to apply.',
'type' => 'string',
'enum' => $this->filters,
'required' => false,
'default' => 'all',
'sanitize_callback' => [ $this, 'sanitize_filter' ],
],
];
}
/**
* Check if a given request has access to get livelogs
*
* @param \WP_REST_Request $request Full data about the request.
* @return \WP_Error|bool
*/
public function get_livelog_permissions_check( $request ) {
if ( ! is_user_logged_in() ) {
\DecaLog\Engine::eventsLogger( VIBES_SLUG )->warning( 'Unauthenticated API call.', [ 'code' => 401 ] );
return new \WP_Error( 'rest_not_logged_in', 'You must be logged in to access live logs.', [ 'status' => 401 ] );
}
return Role::SUPER_ADMIN === Role::admin_type() || Role::SINGLE_ADMIN === Role::admin_type();
}
/**
* Sanitization callback for level.
*
* @param mixed $value Value of the arg.
* @param \WP_REST_Request $request Current request object.
* @param string $param Name of the arg.
* @return string The level sanitized.
* @since 2.0.0
*/
public function sanitize_filter( $value, $request = null, $param = null ) {
$result = 'all';
if ( in_array( (string) $value, $this->filters, true ) ) {
$result = (string) $value;
}
return $result;
}
/**
* Get a collection of items
*
* @param \WP_REST_Request $request Full data about the request.
* @return \WP_REST_Response
*/
public function get_livelog( $request ) {
if ( '0' === $request['index'] ) {
$index = array_key_last( Memory::read() );
if ( ! isset( $index ) ) {
$index = '0';
}
$records = [];
\DecaLog\Engine::eventsLogger( VIBES_SLUG )->notice( 'Live console launched.' );
} else {
$records = Wpcli::records_format( Wpcli::records_filter( Memory::read(), ( 'all' !== $request['filter'] ? [ 'type' => '/' . $request['filter'] . '/iU' ] : [] ), $request['index'] ), 320 );
$index = array_key_last( $records );
if ( ! isset( $index ) ) {
$index = $request['index'];
}
}
$result = [];
$result['index'] = $index;
$result['items'] = $records;
return new \WP_REST_Response( $result, 200 );
}
}